AWSは、Chill Vibesと呼ばれるKubernetesバージョン1.27をAmazon EKSおよびAmazon EKS Distroでサポートすることを発表した。このバージョンのKubernetesでは、一般に利用可能な多くの新機能があり、その中にはクラスタを破壊する可能性があるものもある。
1.27では、seccompは安定版 で卒業し、デフォルトでは有効になっている。RuntimeDefault seccompプロファイルは、すべてのワークロードでデフォルトとして使用される。ノードの起動スクリプトや起動テンプレートで-kubelet-extra-args "-seccomp-default"
フラグを渡すと、そのノードで動作するすべてのコンテナにデフォルトの seccomp プロファイルが有効になる。この方法では、seccompプロファイルは、制限なし(seccomp無効)モードを使用するのではなく、コンテナランタイムによって定義される。seccompプロファイルが有効な場合、一部のワークロードで破損が発生する可能性があるが、特定のワークロードに対して無効化またはカスタムプロファイルを作成が可能である。security-profiles-operatorでは、ワークロードのカスタムプロファイルを定義・管理できる。
このKubernetesのバージョンでは、ポッドトポロジーをより適切に管理し、バランスのとれたポッドをさまざまなドメインに分散させる方法を容易にするためのいくつかの機能がある。特に、#3022ではminDomainsパラメータが公開され、管理者はポッドが占有すべきドメインの最小数を設定でき、それによってクラスタにバランスよくワークロードを広げることが保証される。#3094では、nodeAffinityPolicy
とnodeTaintPolicy
パラメータが導入され、ノードの親和性と汚れに応じてポッドの分配を管理するために、さらに細かいレベルを設定できる。この機能は、NodeInclusionPolicyInPodTopologySpread
ゲートと連携している。最後に、 #3243は、ポッドの仕様のtopologySpreadConstraints
に matchLabelKeys
フィールドを実装し、ローリングアップグレード後の拡散計算のためにポッドを選択することを可能にした。
以前のバージョンでは、Amazon EKS kubeletは、kubeAPIQPS
の10リクエスト/秒の制限とkubeAPIburst
の20リクエストのバースト制限を有していた。1.27バージョンでは、kubeAPIQPS
の制限が50リクエスト/秒に引き上げられ、kubeAPIBurst
は100リクエスト/秒になった。これらの新しい制限は、Amazon EKSの最適化されたAMIによって採用され、スケーリング要件の要求がある場合にポッドの開始時間を改善する。これらの新しい制限は、Amazon EKS kubeletがポッドの起動をより速く管理し、よりスムーズなクラスタ運用を可能にする。
バージョン1.27では、いくつかのAPIが他のKubernetesリリースと同様に非推奨となった。k8s.gcr.i
oは凍結され、現在はregistry.k8s.io
がKubernetesイメージ用の新しいリポジトリである。マニフェストとコンフィギュレーションをすべて更新することが重要である。
seccomp alphaアノテーション(seccomp.security.alpha.kubernetes.io/pod@
とcontainer.seccomp.security.alpha.kubernetes.io)
は削除された。これらのアノテーションはバージョン1.19ですでに非推奨だった。特定のクラスタでこれらのアノテーションがどこで使われているかを確認するためのスクリプトとしては、次のようなものが考えられる。
kubectl get pods --all-namespaces -o json | grep -E 'seccomp.security.alpha.kubernetes.io/pod|container.seccomp.security.alpha.kubernetes.io'
バージョン1.24以降、Amazon EKSのデフォルトコンテナランタイムはContainerdとなっている。1.27ではKubeletの-container-runtime
コマンドが削除されたので、ノード作成スクリプトやワークフローでは-container-runtime
引数を削除することが必須となった。Terraformではbootstrap_extra_argsフィールドを削除することが重要である。
node_groups = {
eks_nodes = {
desired_capacity = 2
max_capacity = 10
min_capacity = 1
instance_type = "m5.large"
k8s_labels = {
Environment = "test"
Name = "eks-worker-node"
}
additional_userdata = "echo foo bar"
bootstrap_extra_args = "--container-runtime=your-runtime"
}
そして、eksctlでは
nodeGroups:
- name: your-nodegroup-name
instanceType: m5.large
desiredCapacity: 3
minSize: 1 maxSize: 4
kubeletExtraConfig:
container-runtime:"your-runtime "
Amazon EKSクラスタをサポートされたバージョンにアップグレードすることが重要である。サポート切れの最新のAmazon EKSは1.22で、サポート終了日は2023年6月4日、次はバージョン1.23で2023年10月にサポートが終了する予定だ。