Kubernetes 1.18: SIG Cluster Lifecycle の変更内容

## はじめに

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

相変わらず変更点が多いですが、前のリリースであったようなしょうもない修正があまりなかったように見えます。

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

- なし。

## 既知の問題 (Known Issues)

- なし。

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

- なし。

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

### 廃止予定 (Deprecation)

#### kubeadm

-   **`kubeadm upgrade node` における "kubelet-version" オプションは非推奨になりました。将来のバージョンで削除されます。** ([#87942](https://github.com/kubernetes/kubernetes/pull/87942), [@SataQiu](https://github.com/@SataQiu))
-   **`kubeadm alpha certs renew` コマンドにおける実験的なフラグである "--use-api" が非推奨になりました。** ([#88827](https://github.com/kubernetes/kubernetes/pull/88827), [@neolit123](https://github.com/@neolit123))
-   **kube-dns は非推奨になり、将来のバージョンではサポートされません。**([#86574](https://github.com/kubernetes/kubernetes/pull/86574), [@SataQiu](https://github.com/@SataQiu))
-   **kubeadm-config ConfigMap の `ClusterStatus` 構造体は非推奨になりました、将来のバージョンで削除されます。削除されるまではkubeadmによって維持されますが、同様の情報は `etcd` および `kube-apiserver` の Pod のアノテーションである、`kubeadm.kubernetes.io/etcd.advertise-client-urls` と `kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint` から取得することができます。** ([#87656](https://github.com/kubernetes/kubernetes/pull/87656), [@ereslibre](https://github.com/@ereslibre))

#### add-ons

-   **cluster-monitoring のアドオンが削除されました。** ([#85512](https://github.com/kubernetes/kubernetes/pull/85512), [@serathius](https://github.com/@serathius))
    -   :pencil: heapster と influxdb のアドオンが削除されたようです。

### API の変更 (API Change)

-   なし。

### 設定ファイルの変更 (Configuration file changes)

#### kube-apiserver

-   **`--egress-selector-config-file` で設定する設定ファイルが `apiserver.k8s.io/v1beta1 EgressSelectorConfiguration` に対応し、ネットワークプロキシに対し HTTP or GRPC を指定できるようになりました。** ([#87179](https://github.com/kubernetes/kubernetes/pull/87179), [@Jefftree](https://github.com/@Jefftree)) [KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/20190226-network-proxy.md)
    -   :pencil: kube-apiserver が KAS (Kubernetes API Server) と略されてるのを初めてみた。
    -   :pencil: `--egress-selector-config-file` がそもそも何者かということを知らなかったのですが、ユースケースとしては GKE のようなコントロールプレーンがマネージドな Kubernetes クラスターにおいて、コントロールプレーンとワーカーノードの接続に関する問題を解決する方法のようです。(普通に組むとIPリーチャブルである必要がある。)例えば、コントロールプレーンとワーカーノードのIPレンジが重なる可能性があるようなネットワークにおいて、コントロールプレーンがワーカーノードに接続するためのプロキシなどを設定できるようにすることができます。

#### kube-proxy

-   **IPVS の接続タイムアウトを設定するために、`--ipvs-tcp-timeout`, `--ipvs-tcpfin-timeout`, `--ipvs-udp-timeout` が kube-proxy のフラグとして追加されました。** ([#85517](https://github.com/kubernetes/kubernetes/pull/85517), [@andrewsykim](https://github.com/@andrewsykim))
-   **`--detect-local-mode` が kube-proxy のフラグとして追加されました。"ClusterCIDR" (以前までの挙動、デフォルト値) と "NodeCIDR" を指定することができます。** ([#87748](https://github.com/kubernetes/kubernetes/pull/87748), [@satyasm](https://github.com/@satyasm)) [KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/20191104-iptables-no-cluster-cidr.md)
    -   :pencil: iptables から Pod の cluster cidr を取り除くことにより、Podのネットワークを柔軟に設定できるようにする、(例えば、現状はPodのネットワークに利用できるのは一つのサブネットだけだが、それを複数のサブネットを設定できるようにするなど。)という KEP の実装第一弾らしいです。
    -   :pencil: その第一弾としては、ローカルのトラフィックの判定に、cluster cidrだけではなく、node cidr を利用することができるモードの追加のようです。
-   **kube-proxy, kubelet, kube-controller-manager と kube-scheduler に、以前のマイナーリリースで非推奨となった全てのメトリクスを表示するフラグを追加しました。`--show-hidden-metrics-for-version`** ([#85279](https://github.com/kubernetes/kubernetes/pull/85279), [@RainbowMango](https://github.com/@RainbowMango))

### 機能 (Feature)

-   **(kubeadm でデプロイされた、)CoreDNS のレプリカ数を設定できるようになりました。** ([#85837](https://github.com/kubernetes/kubernetes/pull/85837), [@pickledrick](https://github.com/@pickledrick))
    -   :pencil: CoreDNS の Deployment のレプリカ数を変更した場合、アップグレードなどで初期値に戻ってしまう問題を修正したようです。レプリカ数自体は直接 kubeadm がデプロイした CoreDNS の Deployment を修正することで変更できます。
-   **Elasticsearch が自動で広告アドレスを設定できるようになりました。** ([#85944](https://github.com/kubernetes/kubernetes/pull/85944), [@SataQiu](https://github.com/@SataQiu))
    -   :pencil: クラスターアドオン の [fluentd-elasticsearch](https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch) の話のようです。
-   **kubeadm において、kube-controller-mannager に設定するデュアルスタックのノード CIDR マスクを自動で計算できるようになりました。** ([#85609](https://github.com/kubernetes/kubernetes/pull/85609), [@Arvinderpal](https://github.com/@Arvinderpal))
-   **kubeadm: アップグレード時の Job としてデプロイされるヘルスチェックが追加されました。** ([#81319](https://github.com/kubernetes/kubernetes/pull/81319), [@neolit123](https://github.com/@neolit123))
Kubeadm: add a upgrade health check that deploys a Job (#81319, @neolit123) [SIG Cluster Lifecycle]
    -   :pencil: pause コンテナをデプロイできるかどうかをチェックするだけの簡易的なヘルスチェックです。
-   **kubeadm: `kubeadm init` から ECDSA 証明書を利用したクラスターを作成するための、実験的な Feature Gate である PublicKeysECDSA が追加されました。** ([#86953](https://github.com/kubernetes/kubernetes/pull/86953), [@rojkov](https://github.com/@rojkov))
-   **kubeadm: `kubeadm config images list` を JSON, YAML, Go template と JsonPath フォーマットなどで出力することができるようになりました。** ([#86810](https://github.com/kubernetes/kubernetes/pull/86810), [@bart0sh](https://github.com/@bart0sh))
-   **kubeadm: kubeconfigにおける証明書の更新において、ディスク上のCAファイルで kubeconfig に埋め込まれたCAを同期中に保持するようにしました。** ([#88052](https://github.com/kubernetes/kubernetes/pull/88052), [@neolit123](https://github.com/@neolit123))
-   **kubeadm: すでに同じ名前のノードがクラスターに存在した場合、ノードの Join を拒否するようになりました。** ([#81056](https://github.com/kubernetes/kubernetes/pull/81056), [@neolit123](https://github.com/@neolit123))
-   **kubeadm: kubeadm-flags.env において、Windows特有な kubelet のフラグをサポートしました。** ([#88287](https://github.com/kubernetes/kubernetes/pull/88287), [@gab-satchi](https://github.com/@gab-satchi))
    -   :pencil: Windows 用の pause コンテナイメージを指定するようにしたようです。-> `mcr.microsoft.com/k8s/core/pause:1.2.0`
-   **kubeadm: イメージの pull に失敗した際、自動でリトライするようになりました。** ([#86899](https://github.com/kubernetes/kubernetes/pull/86899), [@SataQiu](https://github.com/@SataQiu))
-   **kubeadm: kubeadm がサポートしていない k8s のバージョンが渡された場合、そのバージョンに近いと思われる etcd のバージョンにフォールバックされるようになりました。** ([#88373](https://github.com/kubernetes/kubernetes/pull/88373), [@SataQiu](https://github.com/@SataQiu))
    -   :pencil: 例えば、まだ kubeadm がサポートしていない、1.19 のアルファリリースなどを試せるようになります。
Kubeadm: upgrade supports fallback to the nearest known etcd version if an unknown k8s version is passed (#88373, @SataQiu) [SIG Cluster Lifecycle]
-   **CNI のバージョンを v0.8.5 にアップデートしました。** ([#78819](https://github.com/kubernetes/kubernetes/pull/78819), [@justaugustus](https://github.com/@justaugustus))

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

-   **Addons: Elasticsearch のディスカバリで、IPv6 をサポートしました。** ([#85543](https://github.com/kubernetes/kubernetes/pull/85543), [@SataQiu](https://github.com/@SataQiu))
-   **kube-dns コンテナを Linux ノード専用とし、Windowsノードにスケジューリングされることを避けるようにしました。** ([#83358](https://github.com/kubernetes/kubernetes/pull/83358), [@wawa0210](https://github.com/@wawa0210))
    -   :pencil: アドオンのkube-dns の話ですね。これ、まだ使ってる人いるのかしら。
-   **dns-horizontal コンテナを Linux ノード専用とし、Windowsノードにスケジューリングされることを避けるようにしました。** ([#83364](https://github.com/kubernetes/kubernetes/pull/83364), [@wawa0210](https://github.com/@wawa0210))
    -   :pencil: こちらもアドオンの dns horizontal オートスケーラーの話ですね。こちらは CoreDNS で利用できるので普通に使いそう。
-   **metadata-agent コンテナを Linux ノード専用とし、Windowsノードにスケジューリングされることを避けるようにしました。** ([#83363](https://github.com/kubernetes/kubernetes/pull/83363), [@wawa0210](https://github.com/@wawa0210))
-   **metrics-server コンテナを Linux ノード専用とし、Windowsノードにスケジューリングされることを避けるようにしました。** ([#83362](https://github.com/kubernetes/kubernetes/pull/83362), [@wawa0210](https://github.com/@wawa0210))
-   **COS ノードにおけるcore_patternを絶対パスで指定するようにしました。** ([#86329](https://github.com/kubernetes/kubernetes/pull/86329), [@mml](https://github.com/@mml))
    -   :pencil: GCP 上で利用する [Container-VM Image](https://github.com/kubernetes/kubernetes/tree/master/cluster/gce/gci) の話のようです。
    -   :pencil: コアダンプの出力先を相対パスで指定してはいけないようですね。
-   **Conformanceイメージが、現在非推奨で将来削除予定の debian-hyperkube-base イメージから、stretch-slim をベースイメージとして利用するようになりました。** ([#88702](https://github.com/kubernetes/kubernetes/pull/88702), [@dims](https://github.com/@dims))
    -   :pencil: Conformance テスト用のイメージのベースイメージの話のようです。
-   **kubeadm: 初期化フェーズ (preflight) 中に、kubeadm が conntrack が実行可能ファイルとして存在するかどうかをチェックするようになりました。** ([#85857](https://github.com/kubernetes/kubernetes/pull/85857), [@hnanni](https://github.com/@hnanni))
-   **kubeadm が dual-stack が有効化されていた場合、single-stack クラスターの設定を許可するようにしました。** ([#87453](https://github.com/kubernetes/kubernetes/pull/87453), [@aojea](https://github.com/@aojea))
    -   :pencil: IPv6 のみの single-stack でクラスターを構築しようとした場合、問題があったようです。
-   **kubeadm がデプロイする CoreDNS のバージョンが 1.6.7 になりました。** ([#86260](https://github.com/kubernetes/kubernetes/pull/86260), [@rajansandeep](https://github.com/@rajansandeep))
-   **Stacked な etcd の場合でも、kubeadm のアップグレード時に毎回 etcd のバックアップを永続化するようにしました。** ([#86861](https://github.com/kubernetes/kubernetes/pull/86861), [@SataQiu](https://github.com/@SataQiu))
-   **kubeadm: `kubeadm alpha kubelet config download` が削除されました。`kubeadm upgrade node phase kubelet-config` を利用するようにしてください。** ([#87944](https://github.com/kubernetes/kubernetes/pull/87944), [@SataQiu](https://github.com/@SataQiu))
-   **kubeadm: クラスター名を controller-manager の引数に指定するようにしました。** ([#85817](https://github.com/kubernetes/kubernetes/pull/85817), [@ereslibre](https://github.com/@ereslibre))
    -   :pencil: controller-manager に `--cluster-name` なんて引数あったのか :eyes:
-   **kubeadm: すでに存在しない "ci-cross/*" バージョンラベルの代わりとして、"ci/k8s-master" バージョンラベルのサポートを追加しました。** ([#86609](https://github.com/kubernetes/kubernetes/pull/86609), [@Pensu](https://github.com/@Pensu))
    -   :pencil: kubeadm はバージョンラベルからリリースサーバを特定して、kubeadm が利用可能なバージョンを取得しているのですが、その、リリースサーバが変更されたようです。
-   **kubeadm: 試験的な etcd メンバージョインの並行処理に関して、さらなる改善を適用しました。例えば、複数のメンバーが同じホスト名を受信することができるバグの修正や、add/remove などの処理のリトライタイムアウトとダイヤルタイムアウトの修正です。** ([#87505](https://github.com/kubernetes/kubernetes/pull/87505), [@neolit123](https://github.com/@neolit123))
-   **kubeadm: `upgrade apply` 時に、kubelet 用の環境変数ファイルを作成しないようにしました。** ([#85412](https://github.com/kubernetes/kubernetes/pull/85412), [@boluisa](https://github.com/@boluisa))
-   **`kubeadm reset` 時に不正な `kubelet.conf` ファイルによる潜在的なパニックが引き起こされる問題を修正しました。** ([#86216](https://github.com/kubernetes/kubernetes/pull/86216), [@neolit123](https://github.com/@neolit123))
-   **kubeadm: `kubeadm upgrade` 時にシングルノードクラスターでハングするバグを修正しました。** ([#88434](https://github.com/kubernetes/kubernetes/pull/88434), [@SataQiu](https://github.com/@SataQiu))
-   **kubeadm: タグが変更されてなかったとしても、内容が変更されていた場合、事前に確実にイメージをプルするようにしました。** ([#85603](https://github.com/kubernetes/kubernetes/pull/85603), [@bart0sh](https://github.com/@bart0sh))
-   **kubeadm: v1.15 より非推奨であった `kubeadm upgrade node config` コマンドを削除しました。`kubeadm upgrade node phase kubelet-config` を利用してください。** ([#87975](https://github.com/kubernetes/kubernetes/pull/87975), [@SataQiu](https://github.com/@SataQiu))
-   **kubeadm: 非推奨になっていた、 CoreDNS の Feature Gate を削除しました。CoreDNS の Feature Gate はすでに true に設定されており、v1.11 から GA です。v1.13 からすでに非推奨となり CLI からは隠されていました。** ([#87400](https://github.com/kubernetes/kubernetes/pull/87400), [@neolit123](https://github.com/@neolit123))
-   **kubeadm: apiserver が応答しなかった場合、kubeadm-config ConfigMap の生成と変更をリトライするようにしました。これは、新しいコントロールプレーンノードを追加する際の障害耐性を改善させます。** ([#85763](https://github.com/kubernetes/kubernetes/pull/85763), [@ereslibre](https://github.com/@ereslibre))
-   **kubeconfig ファイルに埋め込まれた CA 証明書を検証する際に、ホワイトスペースを許容するように変更しました。** ([#86705](https://github.com/kubernetes/kubernetes/pull/86705), [@neolit123](https://github.com/@neolit123))
-   **kubeadm: kube-controller-manager と kube-scheduler の http probe を設定する際に、`bind-address` オプションを利用するようにしました。** ([#86493](https://github.com/kubernetes/kubernetes/pull/86493), [@aojea](https://github.com/@aojea))
-   **kubeadm: etcd のエンドポイントの IP ファミリーをapiserver の広告アドレスの IP ファミリから利用するようにしました。** ([#85745](https://github.com/kubernetes/kubernetes/pull/85745), [@aojea](https://github.com/@aojea))
    -   :pencil: etcd のアドレスには `127.0.0.1` を利用していたようですが、apiserverのアドレスが IPv6 の場合は `::1` を利用するように変更したようです。