Kubernetes 1.11: 廃止予定の機能 (Deprecations) と 新機能 (New alpha features)

# はじめに

このエントリは、[Kubernetes 1.11 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.11.md) から、新たに廃止予定となった機能（New Deprecations）、削除された機能（Removed Deprecations）、Stable/GA になった機能（Graduated to Stable/GA）、ベータになった機能（Graduated to Beta）、新しくアルファになった機能(New alpha features)についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。

- [Kubernetes 1.11: 主な変更点 (Major Themes) Part.1](https://qiita.com/watawuwu/items/405fc3161e52d4a4b46e)
- [Kubernetes 1.11: 主な変更点 (Major Themes) Part.2](https://qiita.com/yuanying/items/a19541b402d5f24a1c20)
- [Kubernetes 1.11: Urgent Upgrade Notes と 既知の問題 (Known Issues)](https://qiita.com/shmurata/items/cffbcde7ec38c07e7d74)
- [Kubernetes 1.11: Before Upgrading](https://qiita.com/shmurata/items/a65e083cd91d42b241e7)
- Kubernetes 1.11: 廃止予定の機能 (Deprecations) と 新機能 (New alpha features)

# 新たに廃止予定となった機能（New Deprecations）

ここでは Kubernetes 1.11 で新たに廃止予定になった API バージョン、オプション、フラグ、引数の概要について扱います。廃止予定とは、将来のリリースでその機能が削除されることを意味します。

* **リマインド:** etcd2 バックエンドは廃止予定となり、Kubernetes 1.13 でサポートが削除されます。etcd3 にできる限り早く移行してください。
* Heapster が廃止予定になったのに伴い、InfluxDB クラスタモニタリングが廃止予定になりました。代わりに Metrics Server を使用してください。Metrics Server は、Heapster と同様、クラスタのメトリクスを収集して提供します。`kubectl top` と Horizontal Pod Autoscaler から使用される Metrics API をサポートしています。Heapster が提供していたいくつかの機能（Kubernetes ダッシュボードのグラフで使用されていた短期間のメトリクスデータ提供や、メトリクスデータを保存するための push sink 機能）は、メンテナンスとスケールが難しいことが判明したため、Metrics Server には含まれていません。Heapster を使用してメトリクスを長期保存用ストレージに転送している場合は、使用しているメトリクスソリューションの Kubernetes ネイティブサポートを利用するか、ない場合は代替ソリューションを利用することを検討してください。
  * :memo: InfluxDB クラスタモニタリングは、Heapster のメトリクスを保存するバックエンドとしての InfluxDB と、その可視化のための Grafana を提供するアドオンです。これは、v1.12 で削除されます。[Heapster 自体はv1.13 で廃止](https://github.com/kubernetes/heapster/blob/master/docs/deprecation.md)されます。
* kubelet の `--rotate-certificates` フラグが廃止予定になりました。同じ機能は、kubelet 設定ファイルの `.RotateCertificates` フィールドで有効にできます。
  * :memo: kubelet の設定ファイルは、v1.10 でベータになりました。これまではフラグで kubelet のパラメータをセットしていましたが、現在は設定ファイルでセットする方法が推奨されています。詳しくは[こちら](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/)を参照してください。
* kubeadm の設定ファイルのバージョンが、`v1alpha1` から `v1alpha2` に更新されました。`v1alpha1` の読み込みサポートは、v1.11では残りますが、v1.12で削除されます。以下の PR で API Spec が変更されています。
* **kubeadm v1alpha2の変更点:** `v1alpha2` の設定ファイルでは、`.CloudProvider`、`.PrivilegedPods` フィールドがなくなります。代わりに、v1.11 でベータになった out-of-tree のクラウドプロバイダプラグイン実装を利用してください。
* **kubeadm v1alpha2の変更点:** もし従来の in-tree のクラウドプロバイダを使用しなければならない場合は、以下の例ように設定ファイルを修正できます。もし`{cloud-config-path}` に配置される `cloud-config` ファイルが必要な場合は、apiserver と controller-manager のコンテナに ExtraVolumes を使用してマウントすることができます。

```yaml

kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha2
apiServerExtraArgs:
  cloud-provider: "{cloud}"
  cloud-config: "{cloud-config-path}"
apiServerExtraVolumes:
- name: cloud
  hostPath: "{cloud-config-path}"
  mountPath: "{cloud-config-path}"
controllerManagerExtraArgs:
  cloud-provider: "{cloud}"
  cloud-config: "{cloud-config-path}"
controllerManagerExtraVolumes:
- name: cloud
  hostPath: "{cloud-config-path}"
  mountPath: "{cloud-config-path}"
```

* **kubeadm v1alpha2の変更点:** `.PrivilegedPods` を使用する必要がある場合は、`/etc/kubernetes/manifests/` を編集して、`.SecurityContext.Privileged=true` を apiserver と controller-manager のために設定することができます。 ([#63866](https://github.com/kubernetes/kubernetes/pull/63866), [@luxas](https://github.com/luxas))
* **kubeadm v1alpha2の変更点:** `MasterConfiguration` オブジェクトのトークン関連のフィールドがリファクタリングされています。`.Token`, `.TokenTTL`, `.TokenUsages`, `.TokenGroups` の代わりに、`BootstrapToken ` の slice である `BootstrapTokens` を利用できます。これは、`.Token`, `.TTL`, `.Usages`, `.Groups` フィールド以下の機能と同等の機能をサポートしています。 ([#64408](https://github.com/kubernetes/kubernetes/pull/64408), [@luxas](https://github.com/luxas))
* **kubeadm v1alpha2の変更点:** `MasterConfiguration` と `NodeConfiguration` のv1alpha1のオブジェクト `.NodeName` と `.CRISocket` は、v1alpha2では、それぞれ `.NodeRegistration.Name`、 `.NodeRegistration.CRISocket` になっています。`.NoTaintMaster` フィールドは v1alpha2 では削除されています。 ([#64210](https://github.com/kubernetes/kubernetes/pull/64210), [@luxas](https://github.com/luxas))
* **kubeadm v1alpha2の変更点:** `.AuthorizationModes` のサポートが v1alpha2 では削除されました。代わりに、`.APIServerExtraArgs` と `.APIServerExtraVolumes` を利用することで同じ効果が得られます。v1alpha1 API でこのフィールドを使用している設定ファイルは、自動的に v1alpha2 API に更新され、値が保持されます。 ([#64068](https://github.com/kubernetes/kubernetes/pull/64068), [@luxas](https://github.com/luxas))
* `service.alpha.kubernetes.io/tolerate-unready-endpoints` アノテーションが廃止予定になりました。代わりに、Service.spec.publishNotReadyAddresses を利用してください。 ([#63742](https://github.com/kubernetes/kubernetes/pull/63742), [@thockin](https://github.com/thockin))
  * :memo: `publishNotReadyAddresses` はデフォルトで false です。true にすると、クラスタの DNS はこの Service に紐づいた Endpoint の ready ではないアドレスも公開します。主なユースケースとして、StatefulSet 用の Headless Service を作った際に、ready かどうかに関わらず SRV レコードを作成して peer discovery に利用します。
* `--show-all`フラグは、Podにしか有効ではなく、また、human readable/non-API printers のためだけのものだったため、v1.11では更新されず将来のバージョンで削除されます。 ([#60793](https://github.com/kubernetes/kubernetes/pull/60793), [@charrywanganthony](https://github.com/charrywanganthony))
* `kubectl rolling-update` は廃止予定になりました。代わりに、`kubectl rollout` を使用してください。 ([#61285](https://github.com/kubernetes/kubernetes/pull/61285), [@soltysh](https://github.com/soltysh))
* kube-apiserver: `--endpoint-reconciler-type` のデフォルト値が `lease` になりました。 `master-count` タイプは廃止予定になり、v1.13で削除されます。 ([#63383](https://github.com/kubernetes/kubernetes/pull/63383), [@liggitt](https://github.com/liggitt))
  * :memo: `master-count` endpoint reconciler は、[kube-apiserver を HA 構成にした時に、ダウンした apiserverの IP アドレス が更新されず、 apiserver へのリクエストが一定確率で失敗するという不具合](https://github.com/kubernetes/kubernetes/issues/22609)がありました。
* ビルトインの Openstack cloud provider は廃止予定になりました。OpenStack を使用する場合は、外部 Cloud provider を利用してください。 ([#63524](https://github.com/kubernetes/kubernetes/pull/63524), [@dims](https://github.com/dims))
  * :pencil: v1.6からクラウドプロバイダ特有の処理をするために、kube-controller-managerとは独立したcloud-controller-managerが追加されました。これにより、各クラウドプロバイダが Kubernetes コアプロジェクトとは独立したサイクルで開発できるようになっています。
* kubelet の廃止予定の `--allow-privileged` フラグのデフォルト値が `true` になりました。これにより、ユーザーは `PodSecurityPolicy` への移行のために `--allow-privileged` フラグをセットする必要がなくなります。これまでは、デフォルト値が `false` だったため、ユーザーは(PodSecurityPolicyを設定後も引き続き)`--allow-privileged` をセットしておく必要がありました。 ([#63442](https://github.com/kubernetes/kubernetes/pull/63442), [@mtaufen](https://github.com/mtaufen))
* dynamic client が新しいものに置き換えられました。以前のdynamic clientは、1マイナーバージョンリリース期間だけ`client-go/deprecated-dynamic`に残されますが、早急に新しいものに移行してください。 ([#63446](https://github.com/kubernetes/kubernetes/pull/63446), [@deads2k](https://github.com/deads2k))
* OpenStack クレデンシャルの In-tree サポートが廃止予定になりました。cloud-provider-openstack リポジトリの "client-keystone-auth" を利用してください。使用方法の詳細は[こちら](https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/using-client-keystone-auth.md)を参照してください。 ([#64346](https://github.com/kubernetes/kubernetes/pull/64346), [@dims](https://github.com/dims))
* volume の `gitRepo` が廃止予定になりました。コンテナを Git リポジトリを使用してプロビジョニングする場合は、`EmptyDir` を `InitContainer` にマウントして git clone した後、 その `EmptyDir` を Pod のコンテナにマウントしてください。 
([#63445](https://github.com/kubernetes/kubernetes/pull/63445), [@ericchiang](https://github.com/ericchiang))
* PersistentVolume.nodeAffinity のアルファ用のアノテーションが削除されました。アップグレード前にベータ用の `PersistentVolume.nodeAffinity` フィールドを使用するように更新してください。 ([#61816](https://github.com/kubernetes/kubernetes/pull/61816), [@wackxu
](https://github.com/wackxu))

# 削除された機能（Removed Deprecations）

* kubeadm の v1alpha2 API では、 `.ImagePullPolicy` が削除されました。この値は、全イメージで `IfNotPresent` が固定値で設定されます。もし常に最新のイメージを Pull したい場合は、`kubeadm init` の実行前に `kubeadm config images pull` を実行してください。インターネット接続がない場合など、`kubeadm init` 実行時に kubelet にイメージを pull させたくない場合も、`kubeadm config images pull` を実行するか、`docker load -i image.tar`等の別の方法を利用してください。イメージがローカルにキャッシュされていれば、実行時に pull する必要がなくなり、インターネット接続がなくても利用可能になります。 
 ([#64096](https://github.com/kubernetes/kubernetes/pull/64096), [@luxas](https://github.com/luxas))
* kubeadm の configuration API から `.Etcd.SelfHosting` が削除されました。この値は一度も使用されていませんでした。 ([#63871](https://github.com/kubernetes/kubernetes/pull/63871), [@luxas](https://github.com/luxas))
* 廃止予定で使われていなかった `--enable-custom-metrics` が1.11で削除されました。 ([#60699](https://github.com/kubernetes/kubernetes/pull/60699), [@CaoShuFeng](https://github.com/CaoShuFeng))
* [#32894](https://github.com/kubernetes/kubernetes/pull/32894)で廃止予定となった`--include-extended-apis`が削除されました。 ([#62803](https://github.com/kubernetes/kubernetes/pull/62803), [@deads2k](https://github.com/deads2k))
* kubelet が node spec の `externalID` をセットしなくなりました。これはv1.1から廃止予定となっていました。 ([#61877](https://github.com/kubernetes/kubernetes/pull/61877), [@mikedanese](https://github.com/mikedanese))
* `initresource` アドミッションプラグインが削除されました。 ([#58784](https://github.com/kubernetes/kubernetes/pull/58784), [@wackxu](https://github.com/wackxu))
* コアAPIグループから、`ObjectMeta `, `ListOptions`, `DeleteOptions` が削除されました。代わりに`meta/v1`のものを参照してください。 ([#61809](https://github.com/kubernetes/kubernetes/pull/61809), [@hzxuzhonghu](https://github.com/hzxuzhonghu))
* 廃止予定だった `check-network-mode` の `--mode` フラグが削除されました。 ([#60102](https://github.com/kubernetes/kubernetes/pull/60102), [@satyasm](https://github.com/satyasm))
* 1.10で廃止予定となった `alpha.kubernetes.io/nvidia-gpu` リソースのサポートが削除されました。代わりにDevicePluginsで提供されるリソース`nvidia.com/gpu`を使用してください。 ([#61498](https://github.com/kubernetes/kubernetes/pull/61498), [@mindprince](https://github.com/mindprince))
* `kube-cloud-controller-manager` の `--service-account-private-key-file` フラグが削除されました。代わりに、`--use-service-account-credentials` フラグを使用してください。 ([#60875](https://github.com/kubernetes/kubernetes/pull/60875), [@charrywanganthony](https://github.com/charrywanganthony))
* 1.10で廃止予定となった rktnetes のコードが削除されました。代わりに、 rktlet と CRI を使用してください。 ([#61432](https://github.com/kubernetes/kubernetes/pull/61432), [@filbranden](https://github.com/filbranden))
* ~~アルファの ScheduleDaemonSetPods フラグに紐づいた DaemonSet のスケジューリングが削除されました。 この機能の状況は、https://github.com/kubernetes/features/issues/548 を参照してください。 ([#61411](https://github.com/kubernetes/kubernetes/pull/61411), [@liggitt](https://github.com/liggitt))~~
  * :memo: これは本来1.10向けのリリースノートに記載されるべき内容だったようです。`ScheduleDaemonSetPods`は、Daemonset の Pod を 従来の DaemonSetController ではなく、scheduler が担当するようにする機能で、[1.11ではアルファで追加](https://github.com/kubernetes/kubernetes/pull/63223)されています。
* metadata agent version に一貫性を持たせるため、`METADATA_AGENT_VERSION` 設定オプションが削除されました。 ([#63000](https://github.com/kubernetes/kubernetes/pull/63000), [@kawych](https://github.com/kawych))
* 廃止予定だった `--service-account-private-key-file` フラグが、 cloud-controller-manager から削除されました。 このフラグは kube-controller-manager では今もサポートされています。 ([#65182](https://github.com/kubernetes/kubernetes/pull/65182), [@liggitt](https://github.com/liggitt))
* アルファだった controller-manager による kubelet のサーバー証明書の承認を許可する機能を削除しました。この機能は、ノード(kubelet)側のサーバー証明書署名要求の検証と承認を自動化することで置き換えられるべきです。 ([#62471](https://github.com/kubernetes/kubernetes/pull/62471), [@mikedanese](https://github.com/mikedanese))


# Stable/GA になった機能（Graduated to Stable/GA）

* IPVSベースのクラスタ内ロードバランシングが GA になりました。 ([ref](https://github.com/kubernetes/features/issues/265))
  * :pencil: 従来の iptables から IPVS に移行することで、スケーラビリティの向上と大きなクラスタでのパフォーマンス向上が期待できます。詳しくは、[こちら](https://github.com/kubernetes/kubernetes/tree/master/pkg/proxy/ipvs#ipvs)も参照して下さい。
* CoreDNS が Kubernetes の DNS プラグインとして有効化されました。 ([ref](https://github.com/kubernetes/features/issues/427))
* Azure Go SDK が GA になりました。 ([#63063](https://github.com/kubernetes/kubernetes/pull/63063), [@feiskyer](https://github.com/feiskyer))
* ClusterRole aggregation が GA になりました。 ([ref](https://github.com/kubernetes/features/issues/502))
  * :pencil: この機能を使うことで、ユーザーが使用するデフォルトの Role に 、CRD や Aggregated API server を使って作成したカスタムリソースに関するルールを含めることができるようになります。詳しくは、[こちら](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#aggregated-clusterroles)を参照してください。
* CRI 検証テストスイートが GA になりました。 ([ref](https://github.com/kubernetes/features/issues/292))
* StorageObjectInUseProtection が GA になりました。 ([ref](https://github.com/kubernetes/features/issues/498)) and ([ref](https://github.com/kubernetes/features/issues/499))

# ベータになった機能（Graduated to Beta）

* out-of-tree/外部の（プラガブルな）クラウドプロバイダサポートがベータになりました。 ([ref](https://github.com/kubernetes/features/issues/88))
* Pod 再起動後の PersistentVolumes のサイズ変更がベータになりました。 ([ref](https://github.com/kubernetes/features/issues/284))
* sysctl サポートがベータになりました。 ([ref](https://github.com/kubernetes/features/issues/34))
* Azure Virtual Machine Scale Sets サポートがベータになりました。 ([ref](https://github.com/kubernetes/features/issues/513))
* Cluster Autoscaler の Azure サポートがベータになりました。 ([ref](https://github.com/kubernetes/features/issues/514))
* ノードから特定のAPIへのアクセスを制限する機能がベータになりました。 ([ref](https://github.com/kubernetes/features/issues/279))
* CustomResource のバージョニングがベータになりました。 ([ref](https://github.com/kubernetes/features/issues/544))
  * :pencil: spec の `versions` に複数のバージョンを定義できるようになっています。それに伴い、従来の `version` は非推奨になっています。
* CRI の Windows コンテナ設定がベータになりました。 ([ref](https://github.com/kubernetes/features/issues/547))
* CRI のロギング、統計がベータになりました。 ([ref](https://github.com/kubernetes/features/issues/552))
* DynamicKubeletConfig がベータになり、デフォルト有効になりました。DynamicKubeletConfig を使用するには、--dynamic-config-dirフラグがセットされていることを確認してください。 ([#64275](https://github.com/kubernetes/kubernetes/pull/64275), [@mtaufen](https://github.com/mtaufen))
* sysctl の実験的な機能がベータに昇格（Sysctls feature フラグ経由でデフォルト有効）しました。PodSecurityPolicy と Pod に sysctls を制御するフィールドが追加されています。アルファの sysctl アノテーションは、1.11以降の kubelet では無視されます。Deployment にセットされている sysctl アノテーションは、API フィールドに変換する必要があります。 ([#6371](https://github.com/kubernetes/kubernetes/pull/63717), [@ingvagabund](https://github.com/ingvagabund))
* ボリュームの拡張機能がベータになりました。 ([#64288](https://github.com/kubernetes/kubernetes/pull/64288), [@gnufied](https://github.com/gnufied))
* CRI コンテナログのローテーションがベータになり、デフォルトで有効化されました。 ([#64046](https://github.com/kubernetes/kubernetes/pull/64046), [@yujuhong](https://github.com/yujuhong))
* `PriorityClass` API が `scheduling.k8s.io/v1beta1` に昇格しました。 ([#63100](https://github.com/kubernetes/kubernetes/pull/63100), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla))
* priorityClass がベータになりました。 ([#63724](https://github.com/kubernetes/kubernetes/pull/63724), [@ravisantoshgudimetla](https://github.com/ravisantoshgudimetla))
* client-go: credential exec プラグインがベータになりました。 ([#64482](https://github.com/kubernetes/kubernetes/pull/64482), [@ericchiang](https://github.com/ericchiang))
* Custom resources の Subresources がベータになり、デフォルトで有効化されました。この変更で、`/status`サブリソースの更新は、 `.status`以外の全てのフィールドの更新を許可しなくなります（以前は`.spec`と`.metadata`だけ許可されていませんでした）。また、`/status` サブリソースが有効な場合は、CRD OpenAPI検証スキーマのルートで`required`を使用することができます。 ([#63598](https://github.com/kubernetes/kubernetes/pull/63598), [@nikhita](https://github.com/nikhita))
  * :pencil: Subresources は CRUD 以外のオペレーションを追加できるものです(e.g. `pods/log`)。CRD では、`status`と`scale`の2つのサブリソースが利用できます。 

# 新しくアルファになった機能（New alpha features）

* kube-scheduler が DaemonSet の Pod をスケジューリングできるようになりました。 ([ref](https://github.com/kubernetes/features/issues/548))
* オフラインにしなくても PersistentVolumes のサイズを変更できるようになりました。 ([ref](https://github.com/kubernetes/features/issues/531))
* maximum volume count を設定できるようになりました。 ([ref](https://github.com/kubernetes/features/issues/554))
* subpath マウントで環境変数の展開ができるようになりました。 ([ref](https://github.com/kubernetes/features/issues/559))
* 特定のグループを指定して Pod 内でコンテナを実行できるようになりました。 ([ref](https://github.com/kubernetes/features/issues/213))
  * :pencil: セキュリティ向上のため、Pod と PodSecurityPolicy の spec で、`runAsGroup`　を指定できるようになりました。
* サービスリクエストとトークンを紐付けられるようになりました。 ([ref](https://github.com/kubernetes/features/issues/542))
  * :pencil: TokenRequest API で特定のサービスに限定されたサービスアカウントトークンを取得することができます。
* kubelet の --experimental-qos-reserve フラグが、アルファの --qos-reserved フラグ、または kubeletconfig　の　QOSReserved フィールドで置き換えられました。これらは、QOSReserved feature gate を有効にする必要があります。 ([#62509](https://github.com/kubernetes/kubernetes/pull/62509), [@sjenning](https://github.com/sjenning))