Kubernetes 1.19: SIG Cluster Lifecycle の変更内容

## はじめに

[Kubernetes 1.19 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.19.md#changelog-since-v1170) から SIG Cluster Lifecycle の取り組みについてにピックアップしました。

## 主な変更点 (What's New)

- なし。

## 既知の問題 (Known Issues)

- なし。

## 重大なアップグレードに関する警告 (Urgent Upgrade Notes)

- **kubeadmは、kubeletのconfig.yamlに書かれるべきである`/var/lib/kubelet/kubeadm-flags.env`中にある非推奨の`--cgroup-driver`を設定しないようになりました。もし、そのフラグを`/var/lib/kubelet/kubeadm-flags.env`もしくは`/etc/default/kubelet`(RPMの場合は`/etc/sysconfig/kubelet`)で設定していた場合、それらを削除し`KubeletConfiguration`を利用するようにしてください。** ([#90513](https://github.com/kubernetes/kubernetes/pull/90513), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]
- **kubeadmはユーザが指定した`ClusterConfiguration`中のetcdのバージョンを考慮し、適切に使用するようになりました。もし、ユーザが`ClusterConfiguration`で指定したバージョンで固定されることを望まない場合は`kubeadm-config` ConfigMapを編集しバージョンの指定を削除してください。** ([#89588](https://github.com/kubernetes/kubernetes/pull/89588), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle]
    - :pencil: 対応を行わない場合、アップデート後にetcdのバージョンが古いまま固定されることになりそうです。
- **kubeadmは、systemd-resolved serviceが有効化されていたとしても、ユーザが設定したresolvecConfの値を考慮するようになりました。kubeadmは`/var/lib/kubelet/kubeadm-flags.env`中にある`--resolv-conf`を設定しないようになりました。もし、そのフラグを`/var/lib/kubelet/kubeadm-flags.env`もしくは`/etc/default/kubelet`(RPMの場合は`/etc/sysconfig/kubelet`)で設定していた場合、それらを削除し`KubeletConfiguration`を利用するようにしてください。** ([#90394](https://github.com/kubernetes/kubernetes/pull/90394), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]
- **`kubeadm init`フェーズ中の`kubelet-start`が`kubeconfig`の後に移動しました。このため、kubelet serviceをクラッシュループできないOpenRCのようなinit systemにおいても問題を解決したのちに`KubeletConfiguration`コンポーネントコンフィグファイル(`/var/lib/kubelet/config.yaml`)を生成しkubeletが起動できるようになりました。** ([#90892](https://github.com/kubernetes/kubernetes/pull/90892), [@xphoniex](https://github.com/xphoniex)) [SIG Cluster Lifecycle]
- **`kubeadm config upload`コマンドはGAの非推奨サイクル後に削除されます。もしこのコマンドを利用している場合は代わりに`kubeadm init phase upload-config`コマンドを利用してください。** ([#92610](https://github.com/kubernetes/kubernetes/pull/92610), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle]

## 種々の変更 (Changes by Kind)

### 廃止予定 (Deprecation)

- **`kubeadm config view`コマンドは非推奨になり、将来のバージョンで削除されます。kubeadmの設定ファイルを`kubectl get cm -o yaml -n kube-system kubeadm-config`を利用して直接取得してください。** ([#92740](https://github.com/kubernetes/kubernetes/pull/92740), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]
- **`kubeadm alpha kubelet config enable-dynamic`コマンドは非推奨になりました。この機能を引き続き利用したい場合は、k8s.ioの「Dynamic Kubelet Configuration」というガイドを参照してください。** ([#92881](https://github.com/kubernetes/kubernetes/pull/92881), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]
    - :pencil: 原文だと "refer" を "defer"とtypoしてる。
    - :pencil: Node オブジェクトの `.spec.configSource.configMap` にノードの設定を動的に指定することができる機能のこと。
- **kubeadmの`--experimental-kustomize`は非推奨となり`--experimental-patches`フラグに置き換わりました。サポートされるフォーマットは`kubectl patch`と同じです。これらのパッチはディレクトリからファイルとして読み込まれinit/join/upgrade中にkubeadmコンポーネントに適用されます。現在のところ、static podのみにパッチすることができます。** ([#92017](https://github.com/kubernetes/kubernetes/pull/92017), [@neolit123](https://github.com/neolit123))
- **`kubeadm alpha certs renew`コマンド中の`--use-api`フラグが廃止されました。** ([#90143](https://github.com/kubernetes/kubernetes/pull/90143), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]
- **Kubernetesはhyperkubeのイメージをビルドしなくなりました。** ([#88676](https://github.com/kubernetes/kubernetes/pull/88676), [@dims](https://github.com/dims)) [SIG Cluster Lifecycle and Release]
    - :pencil: 前から削除しようと頑張っていましたが、とうとう削除したようです。これに依存してた皆様御愁傷様です…。

### API の変更 (API Change)

- **kube-proxy: portへのbindが致命的な失敗として扱われるように`--bind-address-hard-fail`フラグが追加されました。** ([#89350](https://github.com/kubernetes/kubernetes/pull/89350), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle and Network]

### 機能 (Feature)

- **cgroups v2ノードバリデーションのサポートが追加されました。** ([#89901](https://github.com/kubernetes/kubernetes/pull/89901), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle and Node]
    - :pencil: [k8s.io/system-validators](https://github.com/kubernetes/system-validators) という kubeadm preflight checks の機能をパッケージ化したものがあるようです。
- **kubeadmはユーザが定義したcomponent configと生成されたcomponent configを区別し、configのアップグレードが必要な場合、生成されたcomponent configを再生成するようになりました。** ([#86070](https://github.com/kubernetes/kubernetes/pull/86070), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle]
- **`kubeadm upgrade plan / apply` において `--config` オプションを利用してアップグレードされたcomponent configを手動で適用することができるようになりました。以前の`--config`オプションの振る舞いは、全ての保存された設定が上書きされていました。** ([#91980](https://github.com/kubernetes/kubernetes/pull/91980), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle]
- **kubeadmにおいて、起動の遅いstatic podを保護するためにstartup probeが追加されました。** ([#91179](https://github.com/kubernetes/kubernetes/pull/91179), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]
- **`kubeadm init phase certs`で利用される`--csr-only`および`--csr-dir`フラグが非推奨になりました。代わりに`kubeadm alpha certs generate-csr`コマンドを利用してください。この新しいコマンドは外部のCAで証明書を作成するために利用できる、全てのcontrol-planeコンポーネント用の秘密鍵とCSRを生成します。** ([#92183](https://github.com/kubernetes/kubernetes/pull/92183), [@wallrj](https://github.com/wallrj)) [SIG Cluster Lifecycle]
- **`kubeadm upgrade apply`中にkube-proxyのConfigMapが存在しなかった場合、kube-proxyはアップグレードするべきでないと見なされます。また、kube-dns/coredns ConfigMapが存在しなかった場合も同様にこれらのDNSサーバーアドオンがアップデートされません。注:この挙動は`upgrade apply`がphaseをサポートするまでの一時的なワークアラウンドです。phaseがサポートされた後はマニュアルでスキップすることになります。**  ([#89593](https://github.com/kubernetes/kubernetes/pull/89593), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]
- **kubeadm: control-planeのstatic podのプライオリティクラスが`system-node-critical`に変更されました。** ([#90063](https://github.com/kubernetes/kubernetes/pull/90063), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]
- **`kubeadm upgrade plan`がアップグレード前の既知のコンポーネントの設定ファイルの内容をテーブルで表示するようになりました。** ([#88124](https://github.com/kubernetes/kubernetes/pull/88124), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle]

### バグ修正 (Bug or Regression)

- **`kubeadm join`中のTLSのブートストラップにかかるタイムアウトの時間を5分に増やしました。** ([#89735](https://github.com/kubernetes/kubernetes/pull/89735), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle]
- **`kubeadm join`におけるステータス更新時にリトライを行うようにしました。** ([#91952](https://github.com/kubernetes/kubernetes/pull/91952), [@xlgao-zju](https://github.com/xlgao-zju)) [SIG Cluster Lifecycle]
- **kubeadm: kube-controller-managerおよびkube-schedulerにおいてhttpでの待受を無効化するために、非推奨な`--port=0`フラグを追加しました。このフラグを利用しない場合、`--address`フラグで制御されるデフォルトのインタフェースにおいて保護されない通信で`/metrics`などが公開されます。この挙動を変更したい場合は`kubeadm`のそれぞれのコンポーネントにおける`extraArgs`を利用して`--port`フラグを上書きしてください。** ([#92720](https://github.com/kubernetes/kubernetes/pull/92720), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]
- **`kubeadm join`中に、クラスターにすでにetcdのメンバーが存在する場合新たに追加しないように修正しました。** ([#92118](https://github.com/kubernetes/kubernetes/pull/92118), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]
- **`kubeadm reset`中において、クラスタにstackedなetcdのメンバーが残っていた場合、そのメンバーを削除せず、ローカルのetcdのストレージをクリーンナップするだけにしました。** ([#91145](https://github.com/kubernetes/kubernetes/pull/91145), [@tnqn](https://github.com/tnqn)) [SIG Cluster Lifecycle]
- **`kubeadm join`において、クラスター中に同名のノードが存在するかチェック時に、`NodeReady`コンディションが正しく検証されるようになりました。** ([#89602](https://github.com/kubernetes/kubernetes/pull/89602), [@kvaps](https://github.com/kvaps)) [SIG Cluster Lifecycle]
- **`kubeadm`のupgradeフェーズ時に、`--image-pull-timeout`フラグが反映されるように修正しました。** ([#90328](https://github.com/kubernetes/kubernetes/pull/90328), [@SataQiu](https://github.com/SataQiu)) [SIG Cluster Lifecycle]
- **kubeadmで1.18.xへのアップグレード時にRBACがないことによりノードがクラスターにjoinできなかった問題が修正されました。** ([#89537](https://github.com/kubernetes/kubernetes/pull/89537), [@neolit123](https://github.com/neolit123)) [SIG Cluster Lifecycle]

### その他 (Other (Cleanup or Flake))

- **kubeadmはIPv6DualStackのFeatureGateの有効化を、コマンドラインではなく、kubelet component configを利用するようになりました。** ([#90840](https://github.com/kubernetes/kubernetes/pull/90840), [@rosti](https://github.com/rosti)) [SIG Cluster Lifecycle]
- **`kubeadm upgrade apply`時に、control-planeのイメージをDaemonSetを利用して事前にpullしないようになりました。それぞれのノードにおける事前チェック時に必要なイメージをpullするようになります。それに伴い`kubeadm upgrade apply`時の`--image-pull-timeout`フラグは非推奨になり、将来削除されます。** ([#90788](https://github.com/kubernetes/kubernetes/pull/90788), [@xlgao-zju](https://github.com/xlgao-zju)) [SIG Cluster Lifecycle]
- **kubeadmはkube-apiserverの`/healthz`を利用する代わりに、`/livez`および`/readyz`を利用するようになりました。** ([#90970](https://github.com/kubernetes/kubernetes/pull/90970), [@johscheuer](https://github.com/johscheuer)) [SIG Cluster Lifecycle]