kubernetes 1.10 Major Themes


# はじめに

このエントリは、[Kubernetes 1.10 の CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.10.md#v1100) から主な変更点 (Major Themes)についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。

- Kubernetes 1.10: 主な変更点 (Major Themes)
- [Kubernetes 1.10: Before Upgrading](https://qiita.com/inajob/items/05416143d8c6998ca605)
- [Kubernetes 1.10: 既知の問題 (Known Issues) と廃止予定の機能 (Deprecations)](https://qiita.com/superbrothers/items/01872b8d05bd5dc70452)



# kubernetes 1.10 Major Themes
## Node

Dynamic Kubelet Configurationをベータにするあたって、たくさんの修正をしました。
あるPodのコンテナが一つのlinux PID namespaceを共有するようにすべきかの設定ができるようになりました。(alpha)
CRIもv1alpha2となり[Windows Container Configuration](https://github.com/kubernetes/features/issues/547)をサポートしました。また[CRI validation test suite](https://github.com/kubernetes/features/issues/292)もベータ版としてリリースしました。

Resource Management Working Groupは3つの機能をベータとして提供します。

- [CPU Manager](https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/)これはCPUコアを占有する要求を出せるようにするものです。
- [HugePages](https://kubernetes.io/docs/tasks/manage-hugepages/scheduling-hugepages/)は2Miか1GiのHuge Pageを使うことを許可するものです。多くのメモリを使用するアプリケーションに有用なものです。データベースやJVMのチューニングなどに利用できます。
- 最後が[Device Plugins](https://kubernetes.io/docs/concepts/cluster-administration/device-plugins/) です。これはベンダーがkubeletのコードに手を加えることなく機能拡張するためのフレームワークです。GPU、ハイパフォーマンスNIC、FPGA、InfiniBand、そしてベンダー固有の初期化や設定が必要なコンピューティングリソースについてこの仕組みが利用することを想定しています。

## Storage
今回のリリースではローカルストレージとPersistent Volumeを強化しました。
[Mount namespace propagation](https://github.com/kubernetes/features/issues/432)によりコンテナはrslaveでマウントして、ホストでのマウントがコンテナでも見えるようにできたり、rsharedでマウントして、コンテナ内でのマウントがhostからも見えるようにすることができるようになりました。（これは[Windowsではサポートされません](https://github.com/kubernetes/kubernetes/pull/60275)。）

[Local Ephemeral Storage Capacity Isolation](https://github.com/kubernetes/features/issues/361) により一時的なディスク容量を要求したり制限したりすることができるようになりました。
さらに[Local Persistent Storage](https://github.com/kubernetes/features/issues/121)により、Persistent Volumeをネットワークボリュームだけではなく、ローカルのディスクからも作ることができるようになりました。

下記の変更によりpodが使用中のVolumeが削除されないようになりました。

- [Prevent deletion of Persistent Volume Claims that are used by a pod](https://github.com/kubernetes/features/issues/498)
- [Prevent deletion of Persistent Volume that is bound to a Persistent Volume Claim](https://github.com/kubernetes/features/issues/499)

local persistent volumes のための[Topology Aware Volume Scheduling] (https://github.com/kubernetes/features/issues/490) （スケジューラがVolumeの制約を考慮するようになる機能）、
stableとして[Detailed storage metrics of internal state](https://github.com/kubernetes/features/issues/496)(ストレージの詳細なmetricsを取得できるようにする機能)、
betaとして[Out-of-tree CSI Volume Plugins](https://github.com/kubernetes/features/issues/178)(kubeletのプラグインとしてボリュームプラグインを利用できるようにする機能)
がリリースされました。

### :pencil: rslave, rshared
ホスト側でマウントしたボリュームをコンテナから使っている状況で、ホスト側でunmount/mountした時にコンテナの再起動をしたくない。
glusterfsのようなfuseを使ったアプリケーションでマウントしたボリュームを別のコンテナから参照する。

などの要求に応えるもののようです。

## Windows

下記機能を追加しました。

- CPUの制限を設定するようにした。( [#59333](https://github.com/kubernetes/kubernetes/pull/59333))
- ファイルシステムのstatsが正しく取れていなかったバグを修正した。[#59743](https://github.com/kubernetes/kubernetes/pull/59743)
- flexvolumeをサポートしました。[#56921](https://github.com/kubernetes/kubernetes/pull/56921)
- kubelet, kube-proxyがWindows serviceとして起動するようにしました。[#60144](https://github.com/kubernetes/kubernetes/pull/60144)
- HyperVを使ったPodの隔離をサポートしました。[#58751](https://github.com/kubernetes/kubernetes/pull/58751)
  - :pencil: featuregateでHyperVContainerが有効化されていて`windows.kubernetes.io/isolation-type=hyperv`というアノテーションをつけているとHyperVを使った隔離対象となる。また、1つのコンテナを含むPodのみをサポート対象としている。

## OpenStack

新しいAPIを使うようにしました。
コミュニティコードを1つのリポジトリに統合し、クラウドプロバイダのコードをそれぞれのリポジトリに移す計画をたて、プロバイダコードのテストを改善しました。

## API-machinery

[API Aggregation](https://github.com/kubernetes/features/issues/263)がstableになりました。

WebHookにも下記を含む多くの改良を行いました。

- [self-hosting authorizer webhook](https://github.com/kubernetes/features/issues/516)をalphaサポートしました。

## :pencil: self-hosting authorizer webhook

AuthorizerWebhook先に記載するserverにKubernetesのServiceリソースに紐づくDNS名を使うことができなかった問題を解決するものです。
この名前解決をDNSに任せずにAPIServerが自分で解決するようにします。

## Auth

このリリースでは、新しい認証方式の下地を用意しました。
[External client-go credential providers](https://github.com/kubernetes/features/issues/541)(:pencil: AuthProvidersで独自の認証をサポートするためのout of treeのプラグイン機構)
[TokenRequest API](https://github.com/kubernetes/features/issues/542)(:pencil: 期限付きのTokenや、用途を埋め込んだToken、Kubernetesのリソースに紐づいたTokenを作成できるようにするもの。より安全なServiceAccountのTokenのようなもの)

:pencil: PSP、limit node accessについて 改めて触れる文言があるが、今回のアップデートでapigroupが変わっただけで内容に関する変更は内容に見える。

## Azure

[cluster-autoscaler](https://github.com/kubernetes/features/issues/514)
[Azure Virtual Machine Scale Sets](https://github.com/kubernetes/features/issues/513)
などをリリースしました。

## CLI

[kubectl get and describe should work well with extensions](https://github.com/kubernetes/features/issues/515) (クライアントで実施していたgetやdescribeの整形処理をサーバ側で実装する）
などをリリースしました。

## Cluster Lifecycle

[Support out-of-process and out-of-tree cloud providers](https://github.com/kubernetes/features/issues/88) (:pencil: out-of-treeのcloud providerプラグインのサポート)のbeta版などをリリースしました。

## Network

下記のベータサポートをリリースしました。

- [configurable pod resolv.conf](https://github.com/kubernetes/features/issues/504)(resolv.confの内容をmanifestで設定できる機能)のベータ版
- [configuring the NodePort IP address](https://github.com/kubernetes/features/issues/539) (nodePortで受け付けるIP元を指定できるようにする機能)
- [Switch default DNS plugin to CoreDNS](https://github.com/kubernetes/features/issues/427) (デフォルトのDNSをCoreDNSにする)