AWS re:Invent 2019で新しく発表されたたくさんのサービスの中で個人的に一番興味深く、すぐ使いたいと思ったサービスは EKS on Fargate でした。re:Inventの直前に発表されたEKS Managed Nodegroup と Fargateを併用する形で試してみました。
まず注意点(2019.12月時点)
- eksctl versionは1.11以上。古いバージョンではFargateが作れない。
- Managed NodegroupはPublic Subnetに作る。Private Subnetには作れない。
- Managed Nodegroupには以下2つのPolicyが必須。
arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy - Managed NodegroupとFargateにデプロイする物の使い分けはKubernetesのNamespace。FargateのselectorにFargateにデプロイしたいnamespaceを書く。
- EKS on Fargateが使えるリージョンは、現時点で米国東部 (バージニア北部)、米国東部 (オハイオ)、欧州 (アイルランド)、およびアジアパシフィック (東京) 。
- EKS on FargateはALB/NLBが使えない。
作る
eksctl create cluster -f cluster.yaml
cluster.yamlは以下
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: [Cluster Name]
region: ap-northeast-1
vpc:
cidr: [CIDR]
managedNodeGroups:
- name: [Nodegroup Name]
instanceType: t3.medium
minSize: 1
maxSize: 3
desiredCapacity: 1
iam:
attachPolicyARNs:
- arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
- arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
withAddonPolicies:
externalDNS: true
certManager: true
imageBuilder: true
ebs: true
fsx: true
efs: true
appMesh: true
xRay: true
autoScaler: true
albIngress: true
cloudWatch: true
fargateProfiles:
- name: default
selectors:
- namespace: default
- namespace: kube-system
- namespace: demo
現時点で判明された制限事項
- EKS on FargateにClassic LBは使えない
- EKS on Fargateにデプロイ時、1分くらい時間がかかる
- Managed NodegroupにprivateNetworking: trueは使えない(Private Subnetに作れない)
- Managed NodegroupもNodegroupも、eksctlによって自動で作られたNAT GatewayのEIPは変更出来ない (追記:変更する方法はある。あとで書く。)
現時点のベストプラクティス
- 頻繁にアップデートがあるアプリケーションはManaged Nodegroupに作る
- defaultなnamespaceはFargateに作る。
- Classic LBを使いたい場合はManaged Nodegroupではなく普通のNodegroupを作る
参考
ref. Autoscaling EKS on Fargate with custom metrics
ref. https://github.com/weaveworks/eksctl/issues/1575
ref. https://github.com/weaveworks/eksctl/issues/1576
ref. 入門 EKS on Fargate
次の課題
- Managed NodegroupのithAddonPoliciesでどれが必須か調べたい。
- FargateProfilesを詳しく調べたい。