Kubernetes 1.22 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてにピックアップしました。
主な変更点 (What's New)
kubeadmを使ったさらに安全なコントロールプレーンの構築
新しいアルファ機能によって、kubeadmのコントロールプレーンがnon-rootなユーザで実行することができるようになりました。これは長らくkubeadmに求められていたセキュリティ対策となります。試す場合にはkubeadm特有の RootlessControlPlane
フィーチャーゲートを有効化してください。このアルファ機能を使ってクラスターをデプロイすることで、コントロールプレーンは少ない権限で実行されます。
新しいv1beta3
の設定APIはv1beta2
をベースに長らく求められていた機能を追加し、いくつかの機能を非推奨としました。そのため、v1beta3
は現在推奨されているAPIのバージョンとなりますが、v1beta2
APIも引き続き利用可能であり、非推奨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はinitとして
-
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-config
ConfigMapで行うようにしました。クラスタに存在する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:
v1beta3
APIにおいて非推奨出会った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: 非推奨の
v1beta1
APIが削除され、新しいv1beta3
が追加されました。v1beta2
との差分についてはAPIドキュメントを参照してください。v1beta2
APIはまだ非推奨ではありませんが、将来のバージョンで削除されます。 (#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:
CriticalAddonsOnly
tolerationがkube-proxy
DaemonSetから削除されました。 (#101966, @SataQiu)