背景
業務でEKSを扱っていて、ふと生じた疑問について調べてみました。
今回参考にしたドキュメント
EKSの「サポート終了」とは?
K8sは成長途中の技術であるためバージョンのアップデートが早く、約3ヶ月に1度のペースで新しいマイナーバージョンがリリースされています。
それに伴いAWS上のEKSクラスターもデプロイしたらしっぱなしではなく、運用しながら手動アップグレードし続ける必要があります。ドキュメントでは、
各マイナーバージョンは、最初にリリースされてから約 12 か月間サポートされます
と書かれており、これ以降で下記の終了日を超えるとそのバージョンは「サポート終了」となります。
ここで、以下の疑問がわきました。
EKSの「サポート終了」ってどういう意味なんだろう?🤔
OSやソフトではの「サポート終了」 = 「それ以降も使い続けることはできるけど、セキュリティアップデートや不具合時の問い合わせが提供されなくなり、自己責任での運用になる」
とざっくり理解しています。
EKSでも、同じようにAWSサポートへの問い合わせができなくなるって意味なのか?
まさかサポート終了日過ぎたらPodが一気に停止してサービス停止に陥ったりしないよな…
そこでこの疑問を晴らすべく、ちゃんと調べてみることにしました。
ただ大前提として、EKSクラスターはきちんと手動バージョンアップしてサポート終了日までほったらかしってことは無いようにしましょう。笑
セキュリティのためにもですし、便利なツールがどんどん導入されています。
サポート終了日が過ぎた時の挙動
EKSクラスターをデプロイした時のバージョンがサポート終了日を過ぎた場合の挙動は、コントロールプレーンとデータプレーンで違います。
###1. コントロールプレーン
こっちはドキュメントに明確に書かれています。
サポート終了日には、終了の対象となっているバージョンで新しい Amazon EKS クラスターを作成できなくなります。既存のコントロールプレーンは、Amazon EKS の段階的なデプロイプロセスを通じて、サポートされている最も古いバージョンに自動的に更新されます。
つまり、バージョン1.20でEKSクラスターを運用中の場合、1.20のサポート終了したらコントロールプレーンは自動的に(サポートされている最も古い)1.21にアップグレードされます。この自動バージョンアップのタイミングははっきり決まっておらず、AWS側で任意のタイミングで行われるようです。
###2. データプレーン
コントロールプレーンと違い、データプレーンは自動でアップグレードされないようです。
ただ、データプレーンの構築方法として、EC2/Fargateの2種類があります。ドキュメントにも分けて書かれていたので、ここでも以下で分けて説明します。
データプレーンの挙動を詳しく
1. データプレーンがEC2のとき
EC2を使用した時は、マネージドノード型グループでも、セルフマネージド型ノードグループでもEC2は自動バージョンアップされないようです。
ドキュメント中の以下2項目で詳しく書かれています。
Q: Amazon EKS のマネージド型ノードグループは、クラスターのコントロールプレーンのバージョンとともに自動的に更新されますか?
Q: セルフマネージド型ノードグループは、クラスタコントーロールプレーンのバージョンとともに自動的に更新されますか?
「だったらコントロールプレーンとバージョン差異が出たら互換性なくなって障害が起きるのか?」と一瞬不安になりましたが、マイナーバージョン2世代まではコントロールプレーンとデータプレーン間の互換性がサポートされているらしいです。なので、ある程度バッファはあります。(ずっと差異がある状態は推奨されていませんが)
最大 2 つ前のマイナーバージョンに対して、コントロールプレーンとノード間の互換性が確認されています。
実際にAWSサポートに問い合わせたところ、**プレーン間で2世代以上の差異が出た場合はKubernetes自体の各コンポーネントが正常に動作しなくなり、EKS上で運用しているアプリケーションは意図せず中断する可能性はある。**という旨の回答をもらいました。
結論として、
「EC2データプレーンはずっと手動バージョンアップせず放置すると、サービス中断のリスクがある。そのためデプロイ後もK8sのリリースに追随してアップデートを続ける必要がある。」
ということになります。
2. データプレーンがFargateのとき
じゃあEKS on Fargateを使用した場合はどうなるのか?これもドキュメントに書かれています。
Q: クラスターコントロールプレーンのバージョンに対する自動アップグレードによって、Fargate で実行中のポッドも自動的にアップグレードされますか?
ただ、これに対するAnswerが分かりづらく、自分の読解力では理解できませんでした…。
「自動でPod削除されて再スケジュールされる的に読めるから、自動バージョンアップされるのか?よくわからん…」
そこで、これもAWSサポートに問い合わせたところ、**結局EC2のときと同様に自動バージョンアップはされず、手動バージョンアップが必要、**という回答もらいました。
具体的な手順としては、Fargateノードで実行されているPodを再デプロイして、手動でワーカーノードのバージョンを更新します。
# まとめ
○EKSクラスタを手動バージョンアップせず放置した場合
・コントロールプレーンはAWS側で自動でバージョンアップされる。
・データプレーンはEC2/Fargateいずれを使った場合でも、自動バージョンアップされない。
なので、データプレーンは手動バージョンアップが必ず必要
○データプレーンをバージョンアップしなかった場合、最悪サービス中断に陥る恐れがある。(コントロールプレーンと2世代以上差異が出た場合)
○EKSクラスターはデプロイ後も放置せず、ちゃんと手動バージョンアップしてメンテナンスするようにしましょう。