はじめに
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]