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:NoSchedule
taintを新しいクラスタのコントロールプレーンに適用することはなくなりました。また、"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
およびreadiness
probeにおいて、新しい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が失敗することがあったようです。
-
resetでコンテナが削除されないことがあり、それがたまたまapiserverなどのようにkubernetesに必須のポートを使うコンテナだった場合、再度行った
その他 (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]