Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
EKS on Fargate は最⾼のJob 基盤 @h3poteto
Slide 2
Slide 2 text
⾃⼰紹介 Akira Fukushima ( 福島 明) GitHub: h3poteto twitter: @h3_poteto 仕事: SRE / LAPRAS Inc.
Slide 3
Slide 3 text
Fargate 使ってますか?
Slide 4
Slide 4 text
Fargate ってなに インスタンスの管理をすることなくDocker コンテナを動かせるエン ジン もともとECS Fargate として,ECS のノードをフルマネージドして くれていた 最近EKS on Fargate が出たことで,Kubernetes からも利⽤できるよ うになった
Slide 5
Slide 5 text
ノードがフルマネージドってどういう こと? AWS 側で管理されているFargate ⽤のインスタンスが存在する (我々からは⾒えない Fargate の要求があると,このインスタンスをユーザに割り当て て,そのPod 専⽤のインスタンスとして供給する Pod が終了したらインスタンスもクラスタから除外される 我々のVPC 内に存在するEC2 とは別管理なので,EC2 ⼀覧にも出て こない もちろんインスタンスにSSH するこもとできない
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
ただしあくまでECS/EKS のノードの⼀ 部であることは変わらない
Slide 8
Slide 8 text
(追加設定はいるけど)普通に ECS/EKS のコンテナと同じように動く
Slide 9
Slide 9 text
みんなサーバーレスだって盛り上がる けど AutoScale が楽だってWeb サーバを乗 せたがるけど
Slide 10
Slide 10 text
むしろJob を実⾏するのに最適
Slide 11
Slide 11 text
Job Kubernetes のJob とかCronJob 単発実⾏で集計処理とかをやりたい 多重実⾏はやめてほしい
Slide 12
Slide 12 text
Web サーバとの違い ⼤抵のWeb サーバは複数台起動している リクエストはLoadBalancer で振り分けている つまり,1 台くらい落ちてもどうということはない 落ちても,⾃動復旧してくれれば問題ない Job は,落ちたら再実⾏すれば良い?
Slide 13
Slide 13 text
再実⾏/ 多重実⾏可能なJob は,かなり 気を使って作る必要がある
Slide 14
Slide 14 text
単発実⾏したJob が 落ちない基盤であ ってほしい
Slide 15
Slide 15 text
通常ノードの場合 AutoScalingGroup は,ScaleOut するが当然ScaleIn も発⽣する ClusterAutoscaler はScaleIn 前にDrain を実⾏してくれるが,それは つまりJob の再実⾏ということになる SpotInstance を使っていれば,ノードはある⽇突然死ぬ
Slide 16
Slide 16 text
Fargate は全ての要求を満たすのでは?
Slide 17
Slide 17 text
Fargate Pod が死ぬまでインスタンスは死なない そもそもAutoScalingGroup ではないのでScaleIn の対象外 他のPod が配置されることがないので,Job が終わったらすぐにノー ドを殺しても問題ない
Slide 18
Slide 18 text
最⾼では?
Slide 19
Slide 19 text
No content
Slide 20
Slide 20 text
これを待っていた!ありがとうAWS
Slide 21
Slide 21 text
EKS on Fargate のつらみ
Slide 22
Slide 22 text
Job がComplete してもPod が残る限り ノードも残る
Slide 23
Slide 23 text
Fargate ノードのライフサイクル Pod がリクエストされた時点で確保 他のPod はスケジュールされない Pod がDelete されるまで残り続ける
Slide 24
Slide 24 text
Pod 内のコマンドが正常終了してもPod ⾃⾝が削除されるわけではない Pod はCompleted として残る
Slide 25
Slide 25 text
つまりCompleted したものも課⾦対象
Slide 26
Slide 26 text
TTL Controller k8s 上で完了したJob をクリーンアップしてくれるController ttlSecondsAfterFinished で指定された秒数後にPod を削除する まだAlpha の機能のためEKS では使えない EKS でもFeatureGates をカスタマイズできるようにし てほしい……
Slide 27
Slide 27 text
Pod のENI に付与されるSG の指定がで きない
Slide 28
Slide 28 text
Farget のSecurityGroup EKS on Fargate のPod にはENI が付与される そこにSG が付与されることで,アクセス制限ができる しかし付与されるSG は,EKS クラスタ本体のSG 任意のSG を指定することができないので,細かいアクセス制限がや りにくい EKS クラスタ本体のSG ⾃体もこちらで指定することができないの で,terraform で管理しにくい
Slide 29
Slide 29 text
DaemonSet が使えない これはどうにもならないかも……
Slide 30
Slide 30 text
DaemonSet が使えない EKS on Fargate ではFargate で起動したPod しかFargate ノードに配 置されない Kubernetes のDaemonSet が配置できない Fluentd でコンテナのログを全部かき集めたり Datadog でインスタンスやコンテナのメトリクスを収集したりでき ない
Slide 31
Slide 31 text
VolumeMount が使えない せめてEFS は使いたいな……
Slide 32
Slide 32 text
VolumeMount が使えない EC2 インスタンスではないので当然EBS はAttach できない hostPath も使えない ので当然EFS も使えない emptyDir だけは使えるが…… EFS だけはRoadmap にリクエストが上がっている: https://github.com/aws/containers-roadmap/issues/53
Slide 33
Slide 33 text
対応してもらえるのを楽しみにしてる