Kubernetes 1.25 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてにピックアップしました。
いつもより変更が少なく、落ち着いてきた感じがします。
主要テーマ (Major Themes)
- なし。
重大なアップグレードに関する警告 (Urgent Upgrade Notes)
- なし。
種類別の変更 (Changes by Kind)
廃止予定 (Deprecation)
-
kubeadm:
ConfigMap"kubeadm-config" のClusterConfiguration.imageRepositoryに古い"k8s.gcr.io"が含まれていた場合、"upgrade apply/diff/node" 中にそれを新しいデフォルトである "registry.k8s.io" に置き換えます。ただし、更新の反映は "upgrade apply" の場合のみに行われます。 (#110343, @neolit123) -
kubeadm: kubeadm 特有のフィーチャーゲートである
UnversionedKubeletConfigMapがGAとなり、デフォルトで有効化されるようになりました。kubeletに関連したConfigMapとRBACルールは古い*kubelet-config-x.yy(x.yyはコントロールプレーンのバージョンです)というネーミングルールから、シンプルな*kubelet-configという名前になりました。もし、以前にUnversionedKubeletConfigMapをfalseに設定し古いネーミングフォーマットを利用していた場合、のバージョンをv1.25に上げる前に手作業でkube-system/kubelet-config-x.yyをkube-system/kubelet-configにコピーしなければなりません。 (#110327, @neolit123) -
kubeadm:
node-role.kubernetes.io/master:NoScheduletaintを新しいクラスタのコントロールプレーンに適用することはなくなりました。また、"kubeadm upgrade apply"中に既存のtaintをコントロールプレーンから削除します。 (#110095, @neolit123)-
node-role.kubernetes.io/masterのリネームは段階的に4つのステップで行われているのですが、これは三つ目の段階となり、次のリリースでひと段落となります。- First Stage (1.20)
- Label:
node-role.kubernetes.io/control-planeの導入。 - Toleration:
node-role.kubernetes.io/control-plane:NoScheduleの導入。
- Label:
- Second Stage (1.24)
- Label:
node-role.kubernetes.io/masterの削除。 - Taint:
node-role.kubernetes.io/control-plane:NoScheduleの導入。
- Label:
- Third Stage (1.25)
- Taint:
node-role.kubernetes.io/master:NoScheduleの削除。
- Taint:
- Fourth Stage (1.26)
- Toleration:
node-role.kubernetes.io/master:NoScheduleの削除。
- Toleration:
- First Stage (1.20)
-
APIの変更 (API Change)
- なし。
機能 (Feature)
-
kubeadm:
kubeadm join時のdiscovery/kubeconfigを使った追加の認証戦略 "client-go 認証プラグインexec,tokenFile,authProvider" がサポートされました。 (#110553, @tallaxes)-
kubeadm join時に、kubeadm initの際に提示された token を使うことが多いと思いますが、それとは別にkubeconfigファイルをjoin時のクラスタへの接続とその認証に払い出されたトークンの代わりに利用することができるようです。
確かに、トークンを毎回払い出さずに、事前にjoinに必要な権限を渡してあるアカウントを作成しておけば運用が楽になりそうです。
-
-
kubeadm: CoreDNSのバージョンをv1.9.3にアップデートしました。 (#110489, @pacoxu)
-
kubeadm:
kubeadm init phase addonにおけるkube-proxy,corednsのアドオンフェーズ位において--print-manifestフラグがサポートされました。このフラグを指定すると、kubeadmは指定されたアドオンを適用せず、代わりに適用される API オブジェクトをターミナルに表示します。 (#109995, @wangyysde) -
kubeadm:
v1beta1.KubeletConfigurationに含まれる kubelet の設定ファイルをパッチできるようになりました。この新しいパッチターゲットはkubeletconfigurationと呼ばれています(e.g. パッチファイルはkubeletconfiguration+json.json)。メインの--configの一部としてinitに渡されるKubeletConfigurationはクラスターのKubeletConfigurationとしてグローバルに保持されますが、このパッチによりinitおよびjoinとupgrade時にノード特有のKubeletConfigurationを適用することが可能になります。 (#110405, @neolit123) -
kubeadm: etcd static podの
liveness probeが/health?serializable=true&exclude=NOSPACEを利用しているのに対して startup probe は/health?serializable=falseを利用するようになりました。NOSPACE除外は、管理者がetcdの1メンバーずつスペースの問題に対処することを可能にします。 (#110744, @neolit123) -
kubeadm: etcd static podの
livenessおよびreadinessprobeにおいて、新しいetcd v3.5.3+以降のヘルスチェック用エンドポイントである/health?serializable=trueを使うように変更しました。これにより、個々のetcdメンバーの状態をトラックすることができるようになり、もしetcdクラスターの一部のメンバーが正常でなかった場合でも全てのetcdのメンバーが失敗するようなことがなくなりました。 (#110072, @neolit123) -
kubeadm:
kubeadm upgrade plan時に、--outputフラグを使うことで実験的にJSON/YAMLを出力することができるようになりました。 (#108447, @pacoxu) -
kubeadm: CoreDNS に preferred anti-affinity がデフォルトで有効化されるようになりました。 (#110593, @SataQiu)
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: k8s-app
operator: In
values:
- kube-dns
topologyKey: kubernetes.io/hostname
weight: 100
バグ修正 (Bug or Regression)
-
kubeadm: ノードのアノテーション中の重複した
unix://プレフィックスを削除しました。 (#110656, @pacoxu) -
kubeadm: 設定可能な
KubernetesVersionがkubeadm join時に適用されていなかった問題を修正しました。 (#110791, @SataQiu) -
kubeadm: etcdの
--experimental-watch-progress-notify-intervalフラグが有効化され、5秒に設定されました。このフラグはetcdがwatch dataをkube=apiserverに送る際のインターバルを指定します。 (#111383, @p0lyn0mial) -
kubeadm: image pullの間、
crictlを実行する際にOSの環境変数を設定するようにしました。これによりcrictlのインターネット接続に対して*PROXY環境変数が影響を与えることができなかった問題を修正しました。 (#110134, @mk46) -
kubeadm: レガシーな "master"taintが存在する場合にのみ、コントロールプレーンノードをtaintするようにしました。これにより、
kubeadm upgradeを行うと、ユーザーが明示的にノードのtaintを解除した場合でも、新しい "control plane" taintでコントロールプレーンノードが再テイントされるという問題を回避することができます。 (#109840, @neolit123)-
リソースの少ない自宅クラスタだとコントロールプレーンノードも有効活用するためにtaintを外すということはよくあります。
-
-
kubeadm: Kubernetes の CI バージョンを使う際、ユーザの指定したイメージレポジトリを配慮するようになりました。 (#111017, @SataQiu)
-
kubeadm: resetフェーズにおけるコンテナの削除時にリトライを行うようになりました。 (#110837, @SataQiu)
-
resetでコンテナが削除されないことがあり、それがたまたまapiserverなどのようにkubernetesに必須のポートを使うコンテナだった場合、再度行った kubeadm initでkubeadmが失敗することがあったようです。
-
その他 (Other (Cleanup or Flake))
-
kubeadm: 追加のdockershimのクリーンアップを実行するようにしました。dockershimが1.24で削除され、kubeadm 1.25がkubeletのversion 1.24と1.25をサポートすることを考慮し、全てのcontainer runtimeが
--container-runtime=remoteを指定することでremoteとして扱われるようにしました。--network-pluginフラグは新しいクラスターでは利用されることはありません。kubeadm reset時における/var/lib/dockershim,/var/run/kubernetes,/var/lib/cniといったdockershimに関連するディレクトリのクリンナップは行われなくなります。 (#110022, @neolit123)-
確かにクリンナップされなくなっていました。
-
root@node-cp01:/etc/kubernetes/manifests# kubeadm reset
[reset] Reading configuration from the cluster...
[reset] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
W0921 04:21:43.809172 21624 reset.go:103] [reset] Unable to fetch the kubeadm-config ConfigMap from cluster: failed to get config map: Get "https://10.244.5.135:6443/api/v1/namespaces/kube-system/configmaps/kubeadm-config?timeout=10s": dial tcp 10.244.5.135:6443: connect: connection refuse
d
W0921 04:21:43.810777 21624 preflight.go:55] [reset] WARNING: Changes made to this host by 'kubeadm init' or 'kubeadm join' will be reverted.
[reset] Are you sure you want to proceed? [y/N]: y
W0921 04:21:46.176911 21624 removeetcdmember.go:85] [reset] No kubeadm config, using etcd pod spec to get data directory
[reset] Stopping the kubelet service
[reset] Unmounting mounted directories in "/var/lib/kubelet"
[reset] Deleting contents of directories: [/etc/kubernetes/manifests /etc/kubernetes/pki]
[reset] Deleting files: [/etc/kubernetes/admin.conf /etc/kubernetes/kubelet.conf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/controller-manager.conf /etc/kubernetes/scheduler.conf]
[reset] Deleting contents of stateful directories: [/var/lib/etcd /var/lib/kubelet]