Kubernetes 1.22 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてにピックアップしました。
主な変更点 (What's New)
kubeadmを使ったさらに安全なコントロールプレーンの構築
新しいアルファ機能によって、kubeadmのコントロールプレーンがnon-rootなユーザで実行することができるようになりました。これは長らくkubeadmに求められていたセキュリティ対策となります。試す場合にはkubeadm特有の RootlessControlPlane フィーチャーゲートを有効化してください。このアルファ機能を使ってクラスターをデプロイすることで、コントロールプレーンは少ない権限で実行されます。
新しいv1beta3の設定APIはv1beta2をベースに長らく求められていた機能を追加し、いくつかの機能を非推奨としました。そのため、v1beta3は現在推奨されているAPIのバージョンとなりますが、v1beta2APIも引き続き利用可能であり、非推奨APIではありません。
既知の問題 (Known Issues)
- なし。
重大なアップグレードに関する警告 (Urgent Upgrade Notes)
-
kubeadm: Docker向けのcgroupドライバーの自動判定を削除しました。新しいクラスタを構築する際にcgroupドライバーを明示的に設定していない場合、
kubeletのドライバーの不一致で失敗することがあります (kubeadmのクラスタはsystemdドライバーを使うべきです)。また、同じようにDockerのcgroupドライバーがsystemdに設定されていることを確認するIsDockerSystemdCheckの事前チェック(警告)も削除されました。理想的には、このような検出と調整はCRIの実装とkubeletとの間で行われるべきです(#99808)。kubeadmでどのようにcgroupドライバーを手動で設定するかについては該当のページをご覧ください。 (#99647, @neolit123)-
kubeadmはinitとしてsystemdを前提としているため、cgroupドライバーとしてそれ以外が設定されている環境がよくわからないです。
-
-
kubeadm:
--cri-socketフラグと--configフラグを同時に指定することができなくなりました。ノードのCRIソケットを設定したい場合はkubeadmの設定ファイルの{Init|Join}Configuration.nodeRegistration.criSocketを指定してください。 (#101600, @KofClubs) -
kubeadm:
--experimental-patchesフラグは非推奨になりました、将来のリリースで削除されます、新しい--patchesフラグに移行してください。また、設定ファイルに新しいフィールド、--experimental-patchesが追加され、同じ目的に利用することができます。initおよびjoin時には{Init|Join}Configuration.patches.directoryを利用してパッチを設定する方法に移行することをお勧めします。今のところ、これらのフラグは--configと混在させることができますが、将来的には変更されるかもしれません。コマンドラインでは、最後の--patchesフラグがそれまでのフラグや config の値よりも優先されます。kubeadm upgrade --patchesは今後も唯一の選択肢となります。 (#103063, @neolit123)
種々の変更 (Changes by Kind)
廃止予定 (Deprecation)
-
kubeadm:
v1beta3からClusterStatus APIを削除し、その管理をkube-system/kubeadm-configConfigMapで行うようにしました。クラスタに存在するAPIエンドポイントを追跡するこの方法は、(前のリリースで)kubeadmが「stacked etcd」クラスタで作成するetcd Podのアノテーションに記録する方法に置き換えられました。kubeadm joinにおける "control-plane-join/update-status" サブフェーズおよびkubeadm resetにおける "update-cluster-status "サブフェーズは非推奨となり、何も行いません。ユーザはこれらのフェーズを明示的に使用していない限り、影響を受けることはありません。 (#101915, @neolit123) -
kubeadm:
kubeadm init phase certsサブコマンドにおける非推奨の--csr-onlyと--csr-dirフラグを削除しました。また、同様にkubeadm certs renewにおける同じフラグを削除しました。両方のコマンドにおいて代わりにkubeadm certs generate-csrコマンドを利用してください。 (#102108, @neolit123) -
kubeadm: 非推奨の
kubeadm alpha kubeconfigサブコマンドが削除されました。kubeadm kubeconfigサブコマンドを利用してください。 (#101938, @knight42) -
kubeadm:
v1beta3APIにおいて非推奨出会ったhyperkubeイメージのサポートを終了しました。これによりClusterConfiguration.UseHyperKubeImageフィールドが削除されました。 (#101537, @neolit123) -
kubeadm: CoreDNSがサポートされる唯一のDNSタイプであるため、v1beta3 API の
ClusterConfiguration.DNS.Typeが削除されました。 (#101547, @neolit123) -
kubeadm: 非推奨の
kubeadm config viewサブコマンドが削除されました。このコマンドの代わりにkubectl get cm -n kube-system kubeadm-config -o=jsonpath="{.data.ClusterConfiguration}"を利用することができます。 (#102071, @neolit123) -
kubeadm:
kubeadm upgrade applyにおける非推奨の--image-pull-timeoutフラグが削除されました。 (#102093, @SataQiu) -
kubeadm: kubeadmが管理するkube-apiserverのマニフェストから、非推奨の
--insecure-portフラグが削除されました。このフラグは Kubernetes version 1.20からコンポーネントのinsecure servingが無効化されたため何の影響もありませんでした。 (#102121, @pacoxu) -
kubeadm: 非推奨の
v1beta1APIが削除され、新しいv1beta3が追加されました。v1beta2との差分についてはAPIドキュメントを参照してください。v1beta2APIはまだ非推奨ではありませんが、将来のバージョンで削除されます。 (#101129, @neolit123)
API の変更 (API Change)
- なし。
機能 (Feature)
-
kubeadm:
kubeadm kubeconfig userサブコマンドに--validity-periodフラグが追加されました。 (#100907, @SataQiu)-
kubeadm kubeconfig userで生成されるkubeconfigで利用されるクライアント証明書の期限を設定できるようになったようです。
-
-
kubeadm: kubeadm特有の
RootlessControlPlaneフィーチャーゲートが追加されました(1.22ではアルファ機能であり、デフォルトで無効化されています)。コントロールプレーンのkube-apiserver,kube-controller-manager,kube-schedulerとetcdのstatic Podコンテナを非rootユーザで実行する実験的機能を有効化します。 (#102158, @vinayakankugoyal) -
kubeadm: Static Podとして実行しているコントロールプレーンのコンポーネントにおける
PodSecurityContext中のseccompProfileをruntime/defaultに設定しました。 (#100234, @vinayakankugoyal) -
kubeadm:
InitConfigurationとJoinConfigurationのv1beta3にskipPhasesフィールドが追加されました。このフィールドにはkubeadm initおよびkubeadm join時にスキップするフェーズのリストを設定することができます。--skip-phasesフラグはこのフィールドより優先されます。 (#101923, @neolit123)-
kube-proxyを必要としないCNIを利用する際など、コンポーネントのインストールをスキップしたい場合に利用します。Cluster APIなどからAPI越しに利用することを想定しているようです。
-
-
kubeadm:
kubeadm initのcontrol-planeフェーズに--dry-runフラグを追加しました。 (#102722, @vinayakankugoyal) -
kubeadm:
v1beta3にて、InitConfiguration.とJoinConfigurationのnodeRegistrationにimagePullPolicyフィールドが追加されました。これによりkubeadm initとkubeadm join時にイメージプルポリシーが設定できるようになりました。AlwaysかIfNotPresentまたはNeverを指定することができ、IfNotPresentがデフォルト値です。 (#102901, @wangyysde) -
kubeadm:
kubeadm init/join/upgrade時において、ユーザーが特に指定しない限りKubeletConfiguration中のcgroupDriverの値は常にsystemdがデフォルト値となります。詳細はConfiguring a cgroup driverを確認ください。 (#102133, @pacoxu) -
kubeadm: CoreDNSのバージョンを1.8.4に変更しました。また、dual-stackサポートを収容できるよう、
EndpointSliceオブジェクトのlistとwatchへの許可を与えました。 (#102466, @pacoxu)
ドキュメント (Documentation)
- なし。
バグ修正 (Bug or Regression)
-
kuebadm: イメージタグがバージョンメタデータの形式である場合、ビルドメタデータを含んだetcdイメージのカスタムイメージタグをサポートしました。例) etcdのバージョンが
v3.4.13+patch.0であった場合、サポートされるイメージタグはv3.4.13_patch.0になります。 (#100350, @jr0d) -
kubeadm:
--configフラグを指定時に、--log-fileフラグが指定できるようになりました。ログをファイルに保存したい場合は同時に--logtostderr=falseフラグか--alsologtostderr=trueフラグを指定してください。ちなみにこれらのフラグはkubeadm ... | tee ...で代替可能です。 (#101449, @CaoDonghui123) -
kubeadm:
kubeadm join phase control-plane-join allコマンドにおいてkubeadm join phase control-plane-join allフラグが利用できるようになりました。 (#101110, @SataQiu) -
kubeadm: コントロールプレーンノードの
kubeadm joinがクラスタから証明書と鍵をダウンロードしますが、モード0644で一般に読めように証明書と公開鍵を書き込まず、代わりにモード0600で書き込むというバグを修正しました。 (#103313, @neolit123) -
kubeadm: ルートCA検証時に
caCertHashesの最初のハッシュしか利用しなかった問題を修正しました。 (#101977, @SataQiu) -
kubeadm: kubeadm が Stacked etcd のコントロールプレーンノードにデプロイする etcd の static pod から
ephemeral_storageのリソースリクエストを削除します。このリソースリクエストはcadvisorとLocalStorageCapacityIsolationフィーチャーゲートを利用するkubeletに問題があるため、一部のセットアップで散発的な問題を引き起こしていました。詳細は#99305を参照してください。 (#102673, @jackfrancis) -
kubeadm: CoreDNSのカスタムイメージレポジトリを指定していた際にイメージ名として
coredns/corednsではなくcorednsを追加するようになりました。この挙動はv1.21リリース以前の挙動と同じです。CoreDNSのイメージがネストされたフォルダに依存していた場合は、ネストされたパス名をclusterConfiguration.dns.imageRepositoryに設定してください。(例:registry.company.xyz/corednsを設定した場合はregistry.company.xyz/coredns/corednsがイメージ名として利用されます。) デフォルトのレジストリを利用している人は何の影響もありません。 (#102502, @ykakarap)
その他 (Other (Cleanup or Flake))
-
kubeadm: BootstrapToken APIと関連するユーティリティのバージョンが、v1beta3から別のAPI group/versionである"bootstraptoken/v1"に移動しました。 (#102964, @neolit123)
-
kubeadm:
CriticalAddonsOnlytolerationがkube-proxyDaemonSetから削除されました。 (#101966, @SataQiu)