はじめに
Kubernetes 1.20 の CHANGELOG から SIG Cluster Lifecycle の取り組みについてにピックアップしました。前から使用が微妙と思われていた "node-role.kubernetes.io/master" ラベルおよび "node-role.kubernetes.io/master:NoSchedule" taints の削除に動き出したようです。
主な変更点 (What's New)
kubeadm の非推奨になったフラグが削除されました
kubeadmは
、このリリースで多くの非推奨と非推奨機能の削除を行います。 詳細については、「重大なアップグレードに関する警告」および「種々の変更/廃止予定」セクションを参照してください。
既知の問題 (Known Issues)
- なし。
重大なアップグレードに関する警告 (Urgent Upgrade Notes)
-
kubeadm: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/kubeadm/2067-rename-master-label-taint/README.md (#95382, @neolit123) [SIG Cluster Lifecycle]
- コントロールプレーンのノードに適用されるラベルであった "node-role.kubernetes.io/master" が非推奨になり、GAの非推奨期間後、将来のリリースで削除されます。
- "node-role.kubernetes.io/control-plane" ラベルが追加されました。"node-role.kubernetes.io/master" ラベルが削除されるまで、それぞれのラベルは併存して付与されます。
-
kubeadm upgrade apply
でアップグレード時に、"node-role.kubernetes.io/master"ラベルのみをもった既に存在するノードに"node-role.kubernetes.io/control-plane" ラベルが追加されるようになりました。 -
kubeadm
の上に構築しているツールで "node-role.kubernetes.io/control-plane" を採用するようにしてください。 - コントロールプレーンのノードに適用される taint であった "node-role.kubernetes.io/master:NoSchedule" が非推奨になり、GAの非推奨期間後、将来のリリースで削除されます。
- 将来追加される taint である "node-role.kubernetes.io/control-plane:NoSchedule" に対する toleration を kubeadm が管理する CoreDNS/kube-dns のマニフェストを追加しました。ちなみに、この taint はまだコントロールプレーンに適用されていません。
- "node-role.kubernetes.io/control-plane:NoSchedule" taint を許容するように事前に備えておいてください。
-
3行で言うと、
- "node-role.kubernetes.io/control-plane" ラベルが追加されたので、コントロールプレーンノードにPodを配置したい場合はこのラベルを使うようにしてください。
- "node-role.kubernetes.io/master" が将来削除されます。
- "node-role.kubernetes.io/control-plane:NoSchedule" taint が導入されるので、コントロールプレーンノードにPodを配置したい場合はこのtaintを許容するように変更してください。
- "node-role.kubernetes.io/master:NoSchedule" が将来削除されます。
- "node-role.kubernetes.io/control-plane" ラベルが追加されたので、コントロールプレーンノードにPodを配置したい場合はこのラベルを使うようにしてください。
-
kubeadm: serviceSubnet と podSubnetのバリデーションが改善されました。ServiceSubnetは、実装の都合上、サイズを制限する必要があり、マスクは20ビットを超えて割り当てることはできません。PodSubnetはkube-controller-managerの対応する
--node-cidr-mask-size
との互換性を検証します。また、kubeadmは、IPv6を利用する際にノードマスクを自動的に設定しなくなりました。IPv6サービスのサブネットマスクがデフォルトのノードマスク/64と互換性があることを確認するか、適切に設定する必要があります。以前は、IPv6の場合、podSubnetのマスクが/112未満の場合、kubeadmはノードマスクを8の倍数として計算し、使用可能なビットを分割してノードに使用される数を最大化していました。 (#95723, @aojea) [SIG Cluster Lifecycle] -
非推奨であった
--experimental-kustomize
フラグがkubeadm
コマンドから削除されました。代わりに1.19から導入された--experimental-patches
を利用してください。移行方法の情報は--experimental-patches
のヘルプから見ることができます。 (#94871, @neolit123)- KEP 1739参照のこと。
- 以下3タイプのパッチがサポートされている。
-
--experimental-patches
で指定したディレクトリに、以下のファイル名のフォーマットでパッチを書くことで、kubeadm
で生成されるstatic podにパッチを当てることができる。componentname[suffix][+patchtype].{yaml|json}
-
kubeadm:
kubeadm alpha kubeconfig user
コマンドに--config
フラグが追加され、以下のフラグが削除されました。 (#94879, @knight42) [SIG Cluster Lifecycle]-
apiserver-advertise-address
/apiserver-bind-port
:InitConfiguration
のlocalAPIEndpoint
またはClusterConfiguration
のcontrolPlaneEndpoint
を利用してください。 -
cluster-name
:ClusterConfiguration
のclusterName
を利用してください。 -
cert-dir
:ClusterConfiguration
のcertificatesDir
を利用してください。
-
種々の変更 (Changes by Kind)
廃止予定 (Deprecation)
-
kubeadm: self-hostingのサポートが非推奨になりました。実験的コマンドである
kubeadm alpha self-hosting
は非推奨になり、将来のバージョンで削除します。 (#95125, @neolit123) [SIG Cluster Lifecycle]- bootkubeのcheckpointer相当のことを公式にサポートしないとself-hostingは実現できないのですが、kubeletのcheckpointingはセキュリティとの兼ね合いがあって公式にサポートするのは難しかったんでしょうね。
-
kubeadm:
kubeadm alpha certs
コマンドがkubeadm certs
コマンドとして昇格しました。kubeadm alpha certs
コマンドは非推奨になり、将来のバージョンで削除されます。移行してください。 (#94938, @yagonobre) [SIG Cluster Lifecycle] -
kubeadm: 非推奨の
kubeadm alpha kubelet config enable-dynamic
コマンドが削除されました。この機能を引き続き利用したい場合はk8s.ioの"Dynamic Kubelet Configuration"というガイドを参考にしてください。この変更はその上位のコマンドであるkubeadm alpha kubelet
コマンドの削除も含んでいます。このコマンドはenable-dynamic
サブコマンドの削除によりその他のいかなるサブコマンドも持っていません。 (#94668, @neolit123) [SIG Cluster Lifecycle] -
kubeadm:
kubeadm upgrade node
コマンドにおける、非推奨の--kubelet-config
フラグが削除されました。 (#94869, @neolit123) [SIG Cluster Lifecycle]
API の変更 (API Change)
- なし。
機能 (Feature)
-
現在のシステム時刻が、読み込まれた証明書の
NotBefore
およびNotAfter
の範囲外である場合、kubeadm
はエラーを投げる代わりに警告を出力するようになりました。 (#94504, @neolit123) - kubeadm: コントロールプレーンノードに少なくとも1700MBのRAMがあることを事前にチェック(preflight check)するようになりました。 (#93275, @xlgao-zju) [SIG Cluster Lifecycle]
-
kubeadm:
kubeadm alpha kubeconfig user
コマンドで生成されたkubeconfigファイルのクラスタ名を設定可能にする--cluster-name
フラグを追加しました。 (#93992, @prabhu43) [SIG Cluster Lifecycle]- このコマンドで生成されたkubeconfigのクラスター名が変更できるようになりました。
-
kubeadm:
kubeadm init phase upload-certs
コマンドでkubeconfigファイルのパスを設定可能にする--kubeconfig
フラグを追加しました。 (#94765, @zhanw15) [SIG Cluster Lifecycle] - kubeadm: etcd pod の resource.requests をデフォルトで 100m CPU, 100Mi memory, 100Mi ephemeral_storage に設定しました。 (#94479, @knight42) [SIG Cluster Lifecycle]
-
kubeadm:
kubeadm alpha kubeconfig user
コマンドに--config
フラグが追加され、以下のフラグが削除されました。 (#94879, @knight42) [SIG Cluster Lifecycle]-
apiserver-advertise-address
/apiserver-bind-port
:InitConfiguration
のlocalAPIEndpoint
またはClusterConfiguration
のcontrolPlaneEndpoint
を利用してください。 -
cluster-name
:ClusterConfiguration
のclusterName
を利用してください。 -
cert-dir
:ClusterConfiguration
のcertificatesDir
を利用してください。
-
ドキュメント (Documentation)
- なし。
バグ修正 (Bug or Regression)
-
オプションのバージョンコマンドライン引数が
kubeadm upgrade plan
コマンドに指定されたときに、kubeadmが致命的なエラーで終了するリグレッションが修正されました (#94421, @rosti) [SIG Cluster Lifecycle] -
/var/lib/kubelet
ディレクトリがユーザによってマウントされていた場合、kubeadm reset
は/var/lib/kubelet
ディレクトリをアンマウントしないようになりました。 (#93702, @thtanaka) [SIG Cluster Lifecycle] - etcdのバージョンが変更されていなかったとしても、アップグレード時にetcdのマニフェストが再生成されるようになりました。 (#94395, @rosti) [SIG Cluster Lifecycle]
-
kubeadm join --control-plane
の間、ユーザが全ての証明書、キーおよびkubeconfigファイルを自分で設定した場合のために、それらを署名するためのCA鍵(root CA, front-proxy CA, etcd CA)が無かった場合にエラーではなく警告を出すようにしました。 (#94988, @neolit123) [SIG Cluster Lifecycle] -
kubeadm:
kubeadm init phase control-plane
に欠けていた--experimental-patches
フラグを追加しました。 (#95786, @Sh4d1) [SIG Cluster Lifecycle] - kubeadm: アップグレード中に起動中のCoreDNSのバージョンがサポートされているものかどうかを調べる際に、panicしないようになりました。 (#94299, @zouyee) [SIG Cluster Lifecycle]
-
kubeadm: コントロールプレーンが初期化(init)もしくは追加(join)される際に作られるetcdのデータディレクトリが
0700
のパーミッションで作られるようになりました。 (#94102, @neolit123) [SIG Cluster Lifecycle] -
kubeadm:
kubeadm upgrade
中に新しいデフォルトがあった場合、CoreDNSのマイグレーションが走るように修正されました。 (#96907, @pacoxu) [SIG Cluster Lifecycle] -
kubeadm: CRI socketが別のcontainer runtimeのものであったとしても、
docker info
を呼び出そうと試みていたバグを修正しました。 (#94555, @SataQiu) [SIG Cluster Lifecycle] -
kubeadm: container runtimeとしてDockerが利用されていた場合、
kubeadm reset
はコンテナを削除する前にコンテナを停止するようになりました。 (#94586, @BedivereZero) [SIG Cluster Lifecycle] - kubeadm: 既存のkubeconfigファイルを検証中に、ユーザにkubeconfig中のサーバURLを定義することができるように、kubeconfig中のサーバURLの検証を緩くしました。(例えば外部CAモードを利用する際など) (#94816, @neolit123) [SIG Cluster Lifecycle]
その他 (Other (Cleanup or Flake))
-
kubeadm: ログメッセージ中において引数の keyとvalueを分けました。 (#94016, @mrueg) [SIG Cluster Lifecycle]
-
何のこっちゃと思いきや、ログ中に
-oyaml
と出ているところを-o yaml
と書き直してました。cleanup
らしいです。
-
何のこっちゃと思いきや、ログ中に
- kubeadm: addonをapplyする際に、既知のimage digestsであるCoreDNSに対するチェックを削除しました。 (#94506, @neolit123) [SIG Cluster Lifecycle]