Kubernetes 1.12: 新機能 (New Features)

## はじめに

このエントリは、[Kubernetes 1.12 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.12.md#v1120) から新機能（New features）についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。

-   [Kubernetes 1.12: 既知の問題 (Known Issues) と 廃止された機能および廃止予定の機能 (Deprecations and removals)](https://qiita.com/yuanying/items/d5b55b408505d958f350)
-   [Kubernetes 1.12: 主な変更点 (Major Themes)](https://qiita.com/watawuwu/items/aeac4c5e3b43cc7ea5a0)
-   [Kubernetes 1.12: Action Required](https://qiita.com/yuanying/items/08cd4bbfe1731d5ac648)
-   Kubernetes 1.12: 新機能 (New Features)
-   [Kubernetes 1.12: API Changes](https://qiita.com/yuanying/items/ba7e64b44ae933a65792)

## New Features

- Kubernetes はノードレベルの Container Storage Interface（CSI）Driver によって報告された Volume Topology を登録します。これにより Kubernetes は CSI Topology Mechanisms をサポートしました。([#67684](https://github.com/kubernetes/kubernetes/pull/67684), [@&#xFFF0;verult](https://github.com/verult)) [SIG API Machinery、SIG Node、SIG Storage、SIG Testing]
- Addon-manager が v8.7 にアップデートされました([#68299](https://github.com/kubernetes/kubernetes/pull/68299), [@&#xFFF0;MrHohn](https://github.com/MrHohn)) [SIG Cluster Lifecycle、SIG Testing]
- CSI Volume Plugin は、アタッチされない CSI Volume に対し、外部の attacher が不要となりました([#67955](https://github.com/kubernetes/kubernetes/pull/67955), [@&#xFFF0;jsafrane](https://github.com/jsafrane)) [SIG API Machinery、SIG Node、SIG Storage、SIG Testing]
- KubeletPluginsWatcher の機能はベータに移行しました([#68200](https://github.com/kubernetes/kubernetes/pull/68200), [@&#xFFF0;RenaudWasTaken](https://github.com/RenaudWasTaken)) [SIG Node、SIG Storage、SIG Testing]
- ジョブ終了時にジョブをクリーンナップするための TTL のメカニズムが追加されました([#66840](https://github.com/kubernetes/kubernetes/pull/66840), [@&#xFFF0;janetkuo](https://github.com/janetkuo)) [SIG API Machinery、SIG Apps、SIG Architecture、SIG Testing]
- スケジューラーのノード選択時の計算タスクが最適化されました([#67555](https://github.com/kubernetes/kubernetes/pull/67555), [@&#xFFF0;wgliang](https://github.com/wgliang)) [SIG API Machinery、SIG Scheduling]
- Pod のアフィニティ/アンチアフィニティのパフォーマンスが向上しました([#67788](https://github.com/kubernetes/kubernetes/pull/67788), [@&#xFFF0;ahmad-diaa](https://github.com/ahmad-diaa)) [SIG Scalability、SIG Scheduling]
- kubelet に CFS Quata の期間を変更するパラメーターとコンフィグオプションが追加されました（デフォルト値: 100m、1µs から 1s まで指定可能）。これにより Guranteed と Burstable OoS クラスの Pod がクラスターで起動しているワークロードでは応答の待ち時間が改善します。([#63437](https://github.com/kubernetes/kubernetes/pull/63437), [@&#xFFF0;szuecs](https://github.com/szuecs)) [SIG API Machinery、SIG Apps、SIG Architecture、SIG CLI、SIG Node、SIG Scheduling]
- cloud-controller-manager にセキュア通信用のポート設定をする `--secure-port` が追加されました。移譲された認証と認可は、 Aggregate API サーバーと同じフラグを使用して構成されます。このフラグ設定されていない場合、セキュアポートへは `/healthz` へのみアクセスできます。([#67069](https://github.com/kubernetes/kubernetes/pull/67069), [@&#xFFF0;sttts](https://github.com/sttts)) [SIG Auth、SIG Cloud Provider]
- kube-controller-manager にセキュア通信用のポート設定をする `--secure-port` が追加されました。移譲された認証と認可は、 Aggregate API サーバーと同じフラグを使用して構成されます。このフラグ設定されていない場合、セキュアポートへは `/healthz` へのみアクセスできます。([#64149](https://github.com/kubernetes/kubernetes/pull/64149), [@&#xFFF0;sttts](https://github.com/sttts)) [SIG Auth、SIG Cloud Provider]  
:memo: cloud-controller-manager と同じ内容です
- `kubeadm alpha phases renew <cert-name>` コマンドが追加されました([#67910](https://github.com/kubernetes/kubernetes/pull/67910), [@&#xFFF0;liztio](https://github.com/liztio)) [SIG API Machinery、SIG Cluster Lifecycle]
- ProcMount が SecurityContext に追加され、 AllowedProcMounts が PodSecurityPolicy に追加されました。AllowedProcMounts が指定されない場合、コンテナ内の `/proc` パスがマスクされないようになりました。([#64283](https://github.com/kubernetes/kubernetes/pull/64283), [@&#xFFF0;jessfraz](https://github.com/jessfraz)) [SIG API Machinery、SIG Apps、SIG Architecture、SIG Node]
- Azure Cloud Provider は `kubernetes.azure.com/managed=false` と `alpha.service-controller.kubernetes.io/exclude-balancer=true` のラベルがついたアンマネジメントノード（オンプレ用途など）をサポートしました([#67984](https://github.com/kubernetes/kubernetes/pull/67984), [@&#xFFF0;feiskyer](https://github.com/feiskyer)) [SIG Azure、SIG Cloud Provider]
- SCTP は Pod、Service、Endpoint および NetworkPolicy で使われる TCP/UDP と共に追加プロトコル（アルファ）としてサポートされました([#64973](https://github.com/kubernetes/kubernetes/pull/64973), [@&#xFFF0;janosi](https://github.com/janosi)) [SIG API Machinery、SIG Apps、SIG Architecture、SIG CLI、SIG Cloud Provider、SIG Cluster Lifecycle、SIG Network、SIG Node、SIG Scheduling]
- autoscaling/v2beta2 と custom_metrics/v1beta2 が導入され、Ojbect と Pod のメトリクスセレクターや、ターゲットとして AverageValue が指定できるようになりました([#64097](https://github.com/kubernetes/kubernetes/pull/64097), [@&#xFFF0;damemi](https://github.com/damemi)) [SIG API Machinery、SIG Architecture、SIG Autoscaling、SIG CLI、SIG Testing]  
:memo:実際の指定方法はドキュメントの [Horizontal Pod Autoscaler Walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)を参照
- Feature Gate のアルファ機能で NodeLease が使用できるようになりました。kubelet は kube-node-lease ネームスペース上に Lease オブジェクトを作成し、定期的に更新します。リース期間はデフォルトは 40s で、kubelet.config.k8s.io/v1beta1.KubeletConfiguration の NodeLeaseDurationSeconds フィールドで変更できます。([#66257](https://github.com/kubernetes/kubernetes/pull/66257), [@&#xFFF0;mtaufen](https://github.com/mtaufen)) [SIG API Machinery、SIG Apps、SIG Architecture、 SIG Cluster Lifecycle、SIG Node、SIG Testing]  
:memo:
Lease とはノードの[ハートビートの表現するために作成された](https://github.com/kubernetes/community/blob/master/keps/sig-node/0009-node-heartbeat.md)リソースです。
最終的にハートビートは Lease が[使用される予定です](https://github.com/kubernetes/features/issues/589)
- PodReadinessGate がデフォルトで有効になりました([#67406](https://github.com/kubernetes/kubernetes/pull/67406), [@&#xFFF0;freehan](https://github.com/freehan)) [SIG Node]  
:memo:
この機能が有効な場合、Pod の Readiness 条件を[カスタマイズできるようになります](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-readiness-gate)
- Azure Cloud Provider は `kubernetes.azure.com/resource-group= <rg-name>` と `alpha.service-controller.kubernetes.io/exclude-balancer=true` というラベルの付いたクロスリソースグループノードをサポートしました([#67604](https://github.com/kubernetes/kubernetes/pull/67604), [@&#xFFF0;feiskyer](https://github.com/feiskyer)) [SIG Azure、SIG Cloud Provider、SIG Storage]
- Admission Webhooks のアノテーションがサポートされました([#58679](https://github.com/kubernetes/kubernetes/pull/58679), [@&#xFFF0;CaoShuFeng](https://github.com/CaoShuFeng)) [SIG API Machinery、SIG Auth]
- スケジューラーは全てのノードをスコアリングせずに Pod をスケジュールできるようになりました。これにより大きなクラスターでスケジューラーのパフォーマンスが向上します。([#66733](https://github.com/kubernetes/kubernetes/pull/66733), [@&#xFFF0;bsalamat](https://github.com/bsalamat)) [SIG Scheduling]  
:memo: デフォルトのスコアリングするノード数は 50％ になっています。
ただし ソースコードに最低台数の設定値が 100 と定義されているため、100 未満のノード数の場合は今まで通り全てのノードをスコアリングします。
- Azure のゾーンに分けられていない Managed Disks のノードアフィニティが追加されました([#67229](https://github.com/kubernetes/kubernetes/pull/67229), [@&#xFFF0;feiskyer](https://github.com/feiskyer)) [SIG Azure]
- ローカルストレージのための Attacher/Detacher インタフェースをリファクタリングしました([#66884](https://github.com/kubernetes/kubernetes/pull/66884), [@&#xFFF0;NickrenREN](https://github.com/NickrenREN)) [SIG Storage]
- Azure Managed Disks の DynamicProvisioningScheduling と VolumeScheduling がサポートされました。この機能を使う場合は、Feature Gates の DynamicProvisioningScheduling と VolumeScheduling を有効にすべきです。([#67121](https://github.com/kubernetes/kubernetes/pull/67121), [@&#xFFF0;feiskyer](https://github.com/feiskyer)) [SIG Azure、SIG Storage]
- audit.k8s.io API グループは v1beta1 から v1 に移行しました([#65891](https://github.com/kubernetes/kubernetes/pull/65891), [@&#xFFF0;CaoShuFeng](https://github.com/CaoShuFeng)) [SIG API Machinery]
- Quota Admission Configuration API は v1alpha1 から v1beta1 に移行しました([#66156](https://github.com/kubernetes/kubernetes/pull/66156), [@&#xFFF0;vikaschoudhary16](https://github.com/vikaschoudhary16)) [SIG Node、SIG Scheduling]
- kube-apiserver --help フラグのヘルプがセクションで表示されるようになりました([#64517](https://github.com/kubernetes/kubernetes/pull/64517), [@&#xFFF0;sttts](https://github.com/sttts))  
:memo:出力例

  ```
Usage:
  kube-apiserver [flags]

Generic flags:

      --advertise-address ip
                The IP address on which to advertise the apiserver to members of the cluster. This address must be reachable by the rest of the cluster. If blank, the --bind-address will be used. If --bind-address is unspecified, the host's default interface will be used.
      --cors-allowed-origins strings
                List of allowed origins for CORS, comma separated.  An allowed origin can be a regular expression to support subdomain matching. If this list is empty CORS will not be enabled.
      --external-hostname string
                The hostname to use when generating externalized URLs for this master (e.g. Swagger API Docs).
...
Etcd flags:

      --default-watch-cache-size int
                Default watch cache size. If zero, watch cache will be disabled for resources that do not have a default watch size set. (default 100)
      --delete-collection-workers int
                Number of workers spawned for DeleteCollection call. These are used to speed up namespace cleanup. (default 1)
      --deserialization-cache-size int
                Number of deserialized json objects to cache in memory.
      --enable-garbage-collector
                Enables the generic garbage collector. MUST be synced with the corresponding flag of the kube-controller-manager. (default true)
...
  ```

- AzureDisk のストレージクラスのために Azure Managed Disk がアベイラブルゾーンをサポートし、新しいパラメータ `zoned`、 ` zone` および `zones` が追加されました([#66553](https://github.com/kubernetes/kubernetes/pull/66553), [@&#xFFF0;feiskyer](https://github.com/feiskyer)) [SIG Azure]
- kubectl create job コマンドが追加されました([#60316](https://github.com/kubernetes/kubernetes/pull/60316), [@&#xFFF0;soltysh](https://github.com/soltysh)) [SIG CLI]  
:memo:
以下のようにコマンドから Job を作成することができます  
`kubectl create job my-job --image=busybox`
- 証明書のブートストラップとローテーションを提供する Feature Gate の RotateKubeletServerCertificate がアルファからベータに移行しました([#66726](https://github.com/kubernetes/kubernetes/pull/66726), [@&#xFFF0;liggitt](https://github.com/liggitt)) [SIG Auth、SIG Node]
- アベイラブルゾーンを持つ Azure ノードには、`failure-domain.beta.kubernetes.io/zone=<region>-<zoneID>` のラベルが付与されるようになりました([#66242](https://github.com/kubernetes/kubernetes/pull/66242), [@&#xFFF0;feiskyer](https://github.com/feiskyer)) [SIG Azure]
- `kubeadm config print-default` コマンドで デフォルトのコンポーネント設定が確認できるようになりました([#66074](https://github.com/kubernetes/kubernetes/pull/66074), [@&#xFFF0;rosti](https://github.com/rosti)) [SIG Cluster Lifecycle]
- MountPropagation 機能が GA に昇格しました。これにより Featue Gate の MountPropagation は 非推奨となり、 v1.13 で削除される予定です。([#67255](https://github.com/kubernetes/kubernetes/pull/67255), [@&#xFFF0;bertinatto](https://github.com/bertinatto)) [SIG Apps、SIG Architecture、SIG Node、SIG Storage]
- Juju charms にUbuntu 18.04 (Bionic) シリーズが追加されました([#65644](https://github.com/kubernetes/kubernetes/pull/65644), [@&#xFFF0;tvansteenburgh](https://github.com/tvansteenburgh))
- kubeadm 設定に独自の API Endpoint を持つ複数のコントロールプレーンインスタンスを定義できるようになりました。ブートストラップのコントロールプレーンインスタンスの API Endpoint は、 `InitConfiguration.APIEndpoint` で定義し、追加するコントロールプレーンインスタンスの API Endpoint は、`JoinConfiguration.APIEndpoint` を使用して定義します。([#67832](https://github.com/kubernetes/kubernetes/pull/67832), [@&#xFFF0;fabriziopandini](https://github.com/fabriziopandini))
- `kubectl apply` コマンドに `--server-dry-run` フラグが追加されました。このフラグを使用すると、データ変更なしで結果を確認できます([#68069](https://github.com/kubernetes/kubernetes/pull/68069), [@&#xFFF0;apelisse](https://github.com/apelisse))
- CSI Plugin discovery のメカニズムを改善し、CSI Driver と Kubernetes が相互にカスタマイズできるようになる CSI Cluster Registration を導入しました([#67803](https://github.com/kubernetes/kubernetes/pull/67803), [@&#xFFF0;saad-ali](https://github.com/saad-ali))
- Pod 内で PID の名前空間の共有する PodShareProcessNamespace 機能がベータに昇格しました([#66507](https://github.com/kubernetes/kubernetes/pull/66507), [@&#xFFF0;verb](https://github.com/verb))