【EKS】 本番運用を想定した EKS クラスターを eksctl コマンドで作成する(マニフェストファイル付き)
本記事では、本番運用を想定した EKS クラスターを eksctl コマンドで作成する方法について、実際のファイル付きで解説する。

前提
VPC、プライベートサブネット(2つ以上)、SGは事前に作成する。
※EKSのNodeの制約から、プライベートサブネットは必ず二つ以上作成する。
※SGは、kubectl api を利用するために、443のイングレス(ソース:kubectl 実行のための PC や踏み台 EC2)を許可しておく。
説明
本番運用を想定したEKSクラスター・ノードグループの作成には大きく以下のポイントがある。
・プライベートアクセス
kubectl api 利用時はインターネットではなく、VPNを通したアクセスを行うことがベストプラクティスである。
・EBS暗号化
多くのプロジェクトでは、EBS暗号化が要件であることが多く、SCP(サービスコントロールポリシー)に設定されていることも多い。
・ログの保存
多くのプロジェクトでは、ログの保存が要件であることが多い。
・マネージドノードグループの利用
多くのプロジェクトでは、マネージドサービスの利用が要件であることが多い。
実際のコマンド
マニフェストファイルの用意
vpc-id、subnet-id、sg-id を修正する。
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: test-cluster
region: ap-northeast-1
version: "1.28" #202412月時点の最新
addons: #デフォルトのアドオンの場合も、記載しない場合セルフマネージドとしてデプロイされる
- name: vpc-cni
- name: kube-proxy
- name: coredns
vpc:
id: "<vpc-id>"
subnets:
private:
ap-northeast-1a:
id: "<subnet-id>"
ap-northeast-1c:
id: "<subnet-id>"
manageSharedNodeSecurityGroupRules: true
#Automatically add security group rules to and from the default cluster security group and the shared node security group. This allows unmanaged nodes to communicate with the control plane and managed nodes.
securityGroup: <sg-id>
#the ControlPlaneSecurityGroup, for communication between control plane and nodes
#追加のセキュリティグループ(事前に手動作成必要)
#443のイングレス(ソース:kubeletctl 実行のための PC や踏み台 EC2)を許可しておく
#クラスターSGは現状作成できない。
clusterEndpoints: #クラスターへのプライベートアクセスのみ許可
privateAccess: true
publicAccess: false
managedNodeGroups: #マネージドノードグループを利用する
- name: test-ng
instanceType: m5.large
minSize: 2
desiredCapacity: 2
maxSize: 4
volumeSize: 20
volumeType: gp3
volumeEncrypted: true #EBS Volumeの暗号化
privateNetworking: true
ssh: #EKS Node に ssh接続を許可する
allow: true
publicKeyName: hoannet-stg-ssh-key-eks #事前にssh鍵を作成する
cloudWatch:
clusterLogging:
enableTypes: ["api", "audit", "authenticator", "controllerManager", "scheduler"] #全ての標準ログを出すように設定
logRetentionInDays: 60 #ログの保持期間
# 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365,
# by default indefinite period
EKS クラスター・Node Group のデプロイと確認
デプロイ
※コマンド実行後、クラスター作成完了までに30分程度かかる。
kubectl apply -f eks-cluster.yaml
確認
kubectl get nodes