Kubernetes 1.16: 廃止予定と削除されたもの (Deprecations and Removals)

[Kubernetes 1.16 の Changelog](https://github.com/kubernetes/kubernetes/blob/release-1.16/CHANGELOG/CHANGELOG-1.16.md#deprecations-and-removals) の Deprecations and Removals の内容についてまとめました。


## 廃止予定と削除されたもの

### API

以下の API はデフォルトではサーブされなくなりました。

- すべての `apps/v1beta1` と `apps/v1beta2`。`apps/v1` を代わりに利用してください。
- `extensions/v1beta1` の `daemonsets`, `deployments`, `replicasets` リソース。`apps/v1` を代わりに利用してください。
- `extensions/v1beta1` の`networkpolicies` リソース。`networking.k8s.io/v1` を代わりに利用してください。
- `extensions/v1beta1` の `podsecuritypolicies` リソース。`policy/v1beta1` を代わりに利用してください。

:memo: サーブされなくなった APIVersion を使っているマニフェストは、1.16 以降デプロイできなくなります。マニフェストの適用時に以下のようなエラーとなります。最新の API Version にアップデートしましょう。

```console
$ kubectl apply -f myapp-deploy.yaml
error: unable to recognize "myapp-deploy.yaml": no matches for kind "Deployment" in version "apps/v1beta1"
```

これらのリソースのサーブを一時的に有効化したい場合は、`--runtime-config` を API サーバーのフラグに指定します。

- `apps/v1beta1=true`
- `apps/v1beta2=true`
- `extensions/v1beta1/daemonsets=true,extensions/v1beta1/deployments=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/networkpolicies=true,extensions/v1beta1/podsecuritypolicies=true`

これらのサーブ機能は v1.18 で完全に削除されます。([#70672](https://github.com/kubernetes/kubernetes/pull/70672), [@liggitt](https://github.com/liggitt))

- v1.20 で Ingress リソースは `extensions/v1beta1` からサーブされなくなります。.v1.14 から使える `networking.k8s.io/v1beta1` API に移行してください。既存の永続化されたデータは `networking.k8s.io/v1beta1` API からも取得できます
- v1.17 で PriorityClass リソースは `scheduling.k8s.io/v1beta1`, `scheduling.k8s.io/v1alpha1` からサーブされなくなります。v1.14 から利用できる `scheduling.k8s.io/v1` API に移行してください。既存の永続されたデータは `scheduling.k8s.io/v1` API から取得できます。
- v1.14 から廃止予定だった list API の `export` クエリパラメータは v1.18 で削除されます。
- events.k8s.io/v1beta1 Event API の `series.state` フィールドは廃止予定となり、v1.18 で削除されます。
- `apiextensions.k8s.io/v1beta1` の `CustomResourceDefinition` は廃止予定となり、v1.19 からサーブされなくなります。代わりに `apiextensions.k8s.io/v1` を利用してください。([#79604](https://github.com/kubernetes/kubernetes/pull/79604), [@liggitt](https://github.com/liggitt))
- `admissionregistration.k8s.io/v1beta1` の `MutatingWebhookConfiguration` と `ValidatingWebhookConfiguration` は廃止予定となり、v1.19 からサーブされなくなります。代わりに `admissionregistration.k8s.io/v1` を利用してください。([#79549](https://github.com/kubernetes/kubernetes/pull/79549), [@liggitt](https://github.com/liggitt))
- 1.13 で廃止予定になったアルファの `metadata.initializers` フィールドは削除されました。([#79504](https://github.com/kubernetes/kubernetes/pull/79504), [@yue9944882](https://github.com/yue9944882))
- 廃止予定だったノードの状態 `OutOfDisk` が削除されました。代わりに `DiskPressure` を利用してください。([#72420](https://github.com/kubernetes/kubernetes/pull/72420), [@Pingan2017](https://github.com/Pingan2017))
- 個々と List オブジェクトの `metadata.selfLink` フィールドは廃止予定となりました。v1.20 から返却されなくなり、v1.21 でフィールドが完全に削除されます。([#80978](https://github.com/kubernetes/kubernetes/pull/80978), [@wojtek-t](https://github.com/wojtek-t))
    - :memo: [KEP](https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/20190711-remove-selflink.md) を見ると、元々活用されていないフィールドだったようです。(オブジェクトの URL が入っていたが、オブジェクトを取得するにはそもそも URL を知っている必要があった)
- 廃止予定だったクラウドプロバイダー `ovirt`, `cloudstack`, `photon` が削除されました。([#72178](https://github.com/kubernetes/kubernetes/pull/72178), [@dims](https://github.com/dims))
- ボリュームプロバイダーの `Cinder` と `ScaleIO` が廃止予定となり、将来のリリースで削除されます。([#80099](https://github.com/kubernetes/kubernetes/pull/80099), [@dims](https://github.com/dims))
- GAの `PodPriority` の feature gate はデフォルトで有効となり、無効にできなくなりました。feature gate は v1.18 で削除されます。([#79262](https://github.com/kubernetes/kubernetes/pull/79262), [@draveness](https://github.com/draveness))
- Aggregated discovery のリクエストがタイムアウトするようになりました。Aggregated API サーバーは discovery のコールを 5 秒以内に返す必要があります(discovery 以外のリクエストは関係ない)。もし、一時的に以前の30秒のタイムアウトの挙動に戻す必要がある場合は、feature gate の `EnableAggregatedDiscoveryTimeout=false` を利用してください。(v1.17 で `EnableAggregatedDiscoveryTimeout` は削除されます)([#82146](https://github.com/kubernetes/kubernetes/pull/82146), [@deads2k](https://github.com/deads2k))
- `scheduler.alpha.kubernetes.io/critical-pod` アノテーションが削除されました。Pod をクリティカルとして扱いたい場合は Pod priority (`spec.priorityClassName`) を利用してください。([#80342](https://github.com/kubernetes/kubernetes/pull/80342), [@draveness](https://github.com/draveness))
    - :memo: 代用の PriorityClass として `system-cluster-critical` と `system-node-critical` (より高い) の 2つが用意されています。この2つはユーザが設定できる最大の優先度 1,000,000,000 を超える特別な優先度(2,000,000,000 と 2,000,001,000)になっています。
- NormalizeScore プラグインセットがスケジューラフレームワークの config API から削除されました。ScorePlugin のみを使ってください。([#80930](https://github.com/kubernetes/kubernetes/pull/80930), [@liu-cong](https://github.com/liu-cong))


### 機能

- 以下の機能が GA となりました。関連する feature gate は廃止予定となり、v1.17 で削除されます。
  - `GCERegionalPersistentDisk` (1.15.0 から)
  - `CustomResourcePublishOpenAPI`
  - `CustomResourceSubresources`
  - `CustomResourceValidation`
  - `CustomResourceWebhookConversion`
- feature フラグの `HugePages`, `VolumeScheduling`, `CustomPodDNS`,`PodReadinessGates` が削除されました。 ([#79307](https://github.com/kubernetes/kubernetes/pull/79307), [@draveness](https://github.com/draveness))

### hyperkube
- 1.14 から廃止予定だった `--make-symlinks` フラグが削除されました。([#80017](https://github.com/kubernetes/kubernetes/pull/80017), [@Pothulapati](https://github.com/Pothulapati))

### kube-apiserver
- `--basic-auth-file` フラグとその認証モード (basic 認証) が廃止予定となり、将来のリリースで削除されます。この認証方法はプロダクション環境では非推奨です。([#81152](https://github.com/kubernetes/kubernetes/pull/81152), [@tedyu](https://github.com/tedyu))
- `--cloud-provider-gce-lb-src-cidrs` フラグが廃止予定となりました。このフラグは GCE Cloud Provider が kube-apiserver から削除された時点で、削除されます。([#81094](https://github.com/kubernetes/kubernetes/pull/81094), [@andrewsykim](https://github.com/andrewsykim))
- v1.15 から廃止予定だった `--enable-logs-handler` フラグは v1.19 で削除される予定です。([#77611](https://github.com/kubernetes/kubernetes/pull/77611), [@rohitsardesai83](https://github.com/rohitsardesai83))
- デフォルトの Service IP CIDR が 廃止予定になりました。今までののデフォルトは `10.0.0.0/24` は、6ヶ月(2リリース)後に削除されます。クラスタ管理者は kube-apiserver の `--service-cluster-ip-range` で希望する値を指定する必要があります。([#81668](https://github.com/kubernetes/kubernetes/pull/81668), [@darshanime](https://github.com/darshanime))

### kube-proxy
- kube-proxy から `--resource-container` フラグが削除され、指定した場合エラーになるようになりました。挙動は以前 `--resource-container=""` 指定したものになります。空以外を `--resource-container` に指定した場合は、1.16 では同じようにすることはできなくなります。([#78294](https://github.com/kubernetes/kubernetes/pull/78294), [@vllry](https://github.com/vllry))

### kube-scheduler
- スケジューラは v1beta1 Event API を利用するように移行しました。スケジューラのイベントを対象としたツールは v1beta1 Event API を利用する必要があります。([#78447](https://github.com/kubernetes/kubernetes/pull/78447), [@yastij](https://github.com/yastij))

  - Migrate scheduler to use v1beta1 Event API. any tool targeting scheduler events needs to use v1beta1 Event API ([#78447](https://github.com/kubernetes/kubernetes/pull/78447), [@yastij](https://github.com/yastij))


### kubeadm
※以下すべて CoreDNS のバージョンが 1.6.2 に上がったことによる変更点です。

- CoreDNS の Deployment は `ready` プラグインを使って readiness をチェックするようになりました。
- `proxy` プラグインは廃止予定になりました。代わりに `forward` プラグインを使ってください
- `Kubernetes` プラグインから resyncperiod オプションが削除されました。
- `upstream` オプションは廃止予定となり、無視されるようになりました。([#82127](https://github.com/kubernetes/kubernetes/pull/82127), [@rajansandeep](https://github.com/rajansandeep))


### kubectl
- v1.14 から廃止予定だった `kubectl convert` は v1.17 で削除されます
- v1.14 から廃止予定だった `kubectl get` の `--export` フラグは、v1.18 で削除されます
- `kubectl cp` はコンテナのシンボリックリンクのコピーをサポートしなくなりました。このようなユースケースの場合は `kubectl exec --help` の `tar` を直接使う例をご覧ください。 ([#82143](https://github.com/kubernetes/kubernetes/pull/82143), [@soltysh](https://github.com/soltysh))
    - :memo: Changelog の間違いかもしれませんが、ヘルプは `kubectl cp --help` を見たほうが良さそうです。
- 廃止予定だった `--include-uninitialized` フラグを削除しました。 ([#80337](https://github.com/kubernetes/kubernetes/pull/80337), [@draveness](https://github.com/draveness))

### kubelet
- v1.14 から 廃止予定だった `--containerized` フラグが削除されました。([#80043](https://github.com/kubernetes/kubernetes/pull/80043), [@dims](https://github.com/dims))
- v1.14 から廃止予定だった `beta.kubernetes.io/os` と `beta.kubernetes.io/arch` ラベルは v1.18 で削除されます
    - :pencil: v1.14 からは正式版の `kubernetes.io/os` と `kubernetes.io/arch` ラベルを代わりに利用します
- v1.15 から廃止予定だった cAdvisor の json エンドポイントが削除されました ([#78504](https://github.com/kubernetes/kubernetes/pull/78504), [@dashpole](https://github.com/dashpole))
- [specifically allowed labels/prefixes](https://github.com/kubernetes/enhancements/blob/master/keps/sig-auth/0000-20170814-bounding-self-labeling-kubelets.md#proposal)　以外の `kubernetes.io` や `k8s.io` をプレフィクスとするラベルを `-node-labels` 経由で設定できる機能が削除されました。([#79305](https://github.com/kubernetes/kubernetes/pull/79305), [@paivagustavo](https://github.com/paivagustavo))

### client-go
- `DirectCodecFactory` と `DirectEncoder` が削除され、それぞれ、`runtime.WithVersionEncoder` と `runtime.WithoutVersionDecoder` に置き換えられます。([#79263](https://github.com/kubernetes/kubernetes/pull/79263), [@draveness](https://github.com/draveness))