Kubernetes 1.21: SIG Cluster Lifecycle の変更内容

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

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

- なし

## 既知の問題 (Known Issues)

- なし

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

- **kubeadm: init時にKubeletConfiguration中のcgroupDriverの値が空の場合、ユーザが明示的に指定しなかったとしても"systemd"がセットされるようになりました。この変更により、既存のノードに対してコンテナランタイムが"systemd"ドライバを利用するように設定する必要があります。この話題に対する[ドキュメントを参照](https://kubernetes.io/docs/setup/production-environment/container-runtimes/)してください。`kubeadm upgrade`を利用した既存のクラスタ/ノードに対するアップグレード時は、利用している古いcgroupDriverの値が保持されますが、1.22 ではこの変更が「upgrade」にも適用されます。systemd」ドライバーへの移行、または「cgroupfs」ドライバのままでの移行については、 [cgroupドライバの設定方法](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/) を参照してください。** ([#99471](https://github.com/kubernetes/kubernetes/pull/99471), [@neolit123](https://github.com/@neolit123)) [SIG Cluster Lifecycle]

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

### 廃止予定 (Deprecation)

- **kubeadm: 非推奨の `alpha selfhosting pivot` が削除されました。** ([#97627](https://github.com/kubernetes/kubernetes/pull/97627), [@knight42](https://github.com/@knight42))
- **kubeadm: `kubeadm alpha kubeconfig user`コマンドが昇格し、`kubeadm kubeconfig user`になりました。また、それに伴い`kubeadm alpha kubeconfig user`が非推奨になりました。** ([#97583](https://github.com/kubernetes/kubernetes/pull/97583), [@knight42](https://github.com/@knight42)) [SIG Cluster Lifecycle]
    - :pencil: `kubeadm kubeconfig user -h` を実行すると "Alpha Disclaimer"メッセージが出てしまうのはバグでしょうか…。

    ```bash
    $ kubeadm kubeconfig user -h
    Output a kubeconfig file for an additional user.

    Alpha Disclaimer: this command is currently alpha.
    ```

    - :pencil: `--client-name` と `--org` が指定できますが、指定しただけでは何の権限も与えられていないので別途適切な`Role`を割り当てましょう。
- **kubeadm: `kubeadm alpha certs`コマンドが削除されました。代わりに`kubeadm certs`コマンドを利用してください。** ([#97706](https://github.com/kubernetes/kubernetes/pull/97706), [@knight42](https://github.com/@knight42)) [SIG Cluster Lifecycle]
- **kubeadm: 非推奨のkube-dnsは今後サポートされません。もし、`ClusterConfiguration.dns.type`が`kube-dns`に設定された場合、kubeadmはエラーを吐くようになりました。** ([#99646](https://github.com/kubernetes/kubernetes/pull/99646), [@rajansandeep](https://github.com/@rajansandeep)) [SIG Cluster Lifecycle]
    - :pencil: RIP

### API の変更 (API Change)

- なし

### 機能 (Feature)

- **kubeadm: CoreDNS v1.8.0を含むようになりました。** ([#96429](https://github.com/kubernetes/kubernetes/pull/96429), [@rajansandeep](https://github.com/@rajansandeep)) [SIG Cluster Lifecycle]
    - :pencil: ちなみに、気軽にこれを v1.8.1 以降にアップグレードすると endpointsliceのwatchおよびlist権限が足りなくて死にます。ClusterRole, system:corednsに権限を追加しましょう。

    ```yaml
    # kubectl get clusterrole system:coredns -o yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      creationTimestamp: "2021-04-19T04:48:26Z"
      name: system:coredns
      resourceVersion: "240"
      uid: 32cdb275-abc3-4153-b248-13dcaaa74473
    rules:
    - apiGroups:
      - ""
      resources:
      - endpoints
      - services
      - pods
      - namespaces
      verbs:
      - list
      - watch
    - apiGroups:
      - ""
      resources:
      - nodes
      verbs:
      - get
    # 以下を追加。
    - apiGroups:
      - discovery.k8s.io
      resources:
      - endpointslices
      verbs:
      - list
      - watch
    ```
- **kubeadm: IPv6DualStackのFeatureGateがベータに昇格し、デフォルトで有効化されました。** ([#99294](https://github.com/kubernetes/kubernetes/pull/99294), [@pacoxu](https://github.com/@pacoxu)) [SIG Cluster Lifecycle]
- **kubeadm: IPv6サイトローカルアドレスは非推奨のため、ユーザに警告が出るようになりました。** ([#99574](https://github.com/kubernetes/kubernetes/pull/99574), [@pacoxu](https://github.com/@pacoxu)) [SIG Cluster Lifecycle]
- **kubeadm: 証明書チェーンの検証が追加されました。kubeadmを外部CAモードで利用する際、中間証明書で証明書に署名するのを許可するようになりました。ただし、中間証明書はそれぞれの証明書に含まれている必要があります、** ([#97266](https://github.com/kubernetes/kubernetes/pull/97266), [@robbiemcmichael](https://github.com/@robbiemcmichael)) [SIG Cluster Lifecycle]
- **kubeadm: ノードのkernelに対する検証において、`CGROUP_PIDS`と`FAIR_GROUP_SCHED`を必須として、`CFS_BANDWIDTH`と`CGROUP_HUGETLB`を任意のオプションとして扱うように修正しました。** ([#96378](https://github.com/kubernetes/kubernetes/pull/96378), [@neolit123](https://github.com/@neolit123)) [SIG Cluster Lifecycle]
    - :pencil: kubeadm の preflight checkのための外部ライブラリとして利用されている [kubernetes/system-validators](https://github.com/kubernetes/system-validators) のバージョンをv1.3.0に上げたようですが、すでにv1.4.0がリリースされているようです。
- **kubeadm: "master"とラベルされているノードが除外される仕様の以前のLBモードとの後方互換性を保持するために、"init", "join"および"upgrade"時にコントロールプレーンノードにラベルされた`"node.kubernetes.io/exclude-from-external-load-balancers"`が適用されるようになりました。詳しくはIssueの[#97543](https://github.com/kubernetes/kubernetes/pull/97543)か、[リンクされたKEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-architecture/1143-node-role-labels)を参照してください、** ([#98269](https://github.com/kubernetes/kubernetes/pull/98269), [@neolit123](https://github.com/@neolit123)) [SIG Cluster Lifecycle]
    - :pencil: "master" ラベルがつけられたノードは、Service `type: Loadbalancer`の実装によっては、メンバーから除外されていましたが、そのような挙動を正式に設定したい場合は、ノードにこのラベルをつける必要があるようです。
- **kubeadm: ユーザがkubeadmの設定を利用してイメージレポジトリをカスタマイズしていた場合、Docker だけでなく、すべてのコンテナランタイムにおいて、`--pod-infra-container-image` でカスタマイズしたpauseコンテナのイメージリポジトリとタグを kubelet に渡します。このフラグは、イメージをガベージコレクトさせないようにkubeletに指示します。** ([#99476](https://github.com/kubernetes/kubernetes/pull/99476), [@neolit123](https://github.com/@neolit123)) [SIG Cluster Lifecycle]
- **kubeadm: `kubeadm init`と`kubeadm join`時のプレフライトチェック時にホスト名を検証するようになりました。不正な名前が指定された場合には警告が表示されます。** ([#99194](https://github.com/kubernetes/kubernetes/pull/99194), [@pacoxu](https://github.com/@pacoxu))

### ドキュメント (Documentation)

- なし

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

- **kubeadm: v1.19のクラスター作成時に、etcd v3.4.13をインストールします。** ([#97244](https://github.com/kubernetes/kubernetes/pull/97244), [@pacoxu](https://github.com/@pacoxu))
- **kubeadm: kubeadmによるアップグレード時に、カスタマイズされたCoreDNSの設定をデフォルトで上書きしてしまうバグを修正しました。** ([#97016](https://github.com/kubernetes/kubernetes/pull/97016), [@rajansandeep](https://github.com/@rajansandeep)) [SIG Cluster Lifecycle]
- **kubeadm: `kubeadm upgrade plan`の出力するテキストの形式が変更されました。もし、あなたがスクリプトやその他の自動化においてこれらの出力を利用していた場合、この変更をレビューして新しい出力形式に合うようにスクリプトを変更してください。** ([#98728](https://github.com/kubernetes/kubernetes/pull/98728), [@stmcginnis](https://github.com/@stmcginnis)) [SIG Cluster Lifecycle]
    - :pencil: `upgrade plan`で出力されるテーブルのヘッダにおいて、利用可能なバージョンを示す列名が `AVAILABLE` から `TARGET` に変更されたようです。
- **kubeadm: 32bit Linuxプラットフォームにおいてホストのメモリサイズの検知に関するバグを修正しました。** ([#97403](https://github.com/kubernetes/kubernetes/pull/97403), [@abelbarrera15](https://github.com/@abelbarrera15)) [SIG Cluster Lifecycle]
    - :pencil: [`sysinfo`](https://man7.org/linux/man-pages/man2/sysinfo.2.html)の返す `totalram` の値は、環境によって `mem_unit` でかける必要があることを忘れていた、というバグのようです。
- **kubeadm: `kubeadm join`時に、存在するetcdのメンバーの名前が無かった場合に正しく処理できなかったバグを修正しました。** ([#97372](https://github.com/kubernetes/kubernetes/pull/97372), [@ihgann](https://github.com/@ihgann)) [SIG Cluster Lifecycle]
- **kubeadm: 既存のadmin.confに外部認証情報があると、cluster-info ConfigMapにCA証明書が書き込まれないというバグを修正しました。** ([#97919](https://github.com/kubernetes/kubernetes/pull/97919), [@neolit123](https://github.com/@neolit123)) [SIG Cluster Lifecycle]
- **kubeadm: Kubernetes のCIで利用するバージョンを "k8s infra bucket" から取得するようにしました。** ([#98836](https://github.com/kubernetes/kubernetes/pull/98836), [@hasheddan](https://github.com/@hasheddan)) [SIG Cluster Lifecycle]
    - :pencil: `kubeadm init --kubernetes-version ci/latest` とかユーザがすることあるのか…？
- **`allocate-node-cidrs`が`false`に設定された場合、`node-cidr-mask`に対するPodのサブネットの検証をスキップするように変更しました。** ([#98984](https://github.com/kubernetes/kubernetes/pull/98984), [@SataQiu](https://github.com/@SataQiu)) [SIG Cluster Lifecycle]

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

- **kubeadm: CIイメージのデフォルトのレポジトリが"gcr.io/kubernetes-ci-images"から"gcr.io/k8s-staging-ci-images"に変更されました。** ([#97087](https://github.com/kubernetes/kubernetes/pull/97087), [@SataQiu](https://github.com/@SataQiu))