Kubernetes1.9 Major Themes

このエントリは、[Kubernetes v1.9 CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.9.md#19-release-notes) からMajor Themes をまとめています。その他の項目は下記リンク先を参照してください。

- Kubernetes v1.9: 主な変更点 (Major Themes)
- [Kubernetes v1.9: Before Upgrading](https://qiita.com/inajob/items/943a634a1941030e5075)
- [Kubernetes v1.9: 既知の問題 (Known Issues)](https://qiita.com/tkusumi/items/8ce2a635f2f850bd1a17)
- [Kubernetes v1.9: 廃止予定の機能](https://qiita.com/superbrothers/items/8471d780aef7ae5ea70c)

# Major Themes

Kubernetsの開発はSIG（Special Interest Groups）の単位で組織化されて行われており、それぞれのテーマのもとに取り組んでいます。

# API Machinery
「拡張性」SIG API Machineryでは、admission control webhookに新しくMutatingAdmissionWebhookを追加しました。そして、admission controll webhookはベータになりました。

## メモ：MutatingAdmissionWebhook
必要に応じてリクエストを変更するようなadmission control。この機能はベータで、デフォルトで有効化されています。この機能を無効にするには、apiserver `--runtime-config`で　`admissionregistration/v1beta1` の `MutatingWebhookConfiguration` を無効に設定してください。

https://kubernetes.io/docs/admin/admission-controllers/#mutatingadmissionwebhook-beta-in-19

# Apps
"core workloads API"である DaemonSet,Deployment,ReplicaSet,StatefulSetがGAになりapps/v1となりました。apps/v1beta2は廃止予定になるので、apps/v1を使うようにしてください。

# Auth
認証機能の拡張周り改善
[cluster role aggrigation](https://kubernetes.io/docs/admin/authorization/rbac/#aggregated-clusterroles)を使ってビルトインのRBACである　admin/edit/viewの権限を追加することができます。
[Webhook authorizer](https://kubernetes.io/docs/admin/authorization/webhook/)を使うことで、短絡評価の認可を実現できます。ベータ版の[PodSecurityPolicy](https://kubernetes.io/docs/concepts/policy/pod-security-policy/)のパフォーマンス、使い勝手を向上させました。

## メモ PodSecurityPolicy周りの変更
- 利用可能なFlexVolumeの指定ができるようになった https://github.com/kubernetes/kubernetes/pull/53179
- 利用可能なPolicyを探してからValideateするのをやめ、Valideteを先に実施し、通ったものの中からそのユーザが利用可能なPolicyを絞り込む方式に変更。これによりパフォーマンスが向上した。 https://github.com/kubernetes/kubernetes/pull/55643
    - 利用可能なPSPを探すためには`全てのRoleBindings -> Role`をたどる必要があり遅い
- PSPが複数適合する場合にはデフォルティングによる変更が発生しないものを優先するようにした。デフォルティングが発生するものが複数ある場合は名前順となる。 https://github.com/kubernetes/kubernetes/pull/52849

# AWS

EBSの安定性を向上させました。ボリュームのアタッチ状態が長く続いたら、unschedulableのtaintがnodeに適用され、[管理者が手動でこの問題に対応できます。](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html)利用者はtaintを監視し、そのような状況のインスタンスを自動的に停止することを検討すべきです。
加えて、NVMeディスクのサポートを追加、type=LoadBalancerのバックエンドがELB(alpha)に替わりNLBとなりました。

memo：ELBはL7のロードバランサのようで、type=LoadBalancerの目的としてはNLBの方が良いということなのだろう。

# Azure
Azule Load Balancerの実装など、cloud providerの改善に取り組みました。

# Cluster Lifecycle
来たるべくGAのためにkubeadmを改善し、[Cluster API](https://github.com/kubernetes/kube-deploy/tree/master/cluster-api)の開発にも取り組みました。
kubeadmに関しては、CoreDNSのサポート、IPv6、動的なKubeletの設定などの機能をalpha版として実装しました。これらの機能は次のリリースでbetaにしたいと考えています。
Cluster APIに関してはGCE向けのサンプル実装を行い、2018年中には安定化させ、本番運用で使えるようにしたいです。

## メモ Cluster API
KubernetesのようなAPIでクラスタの作成、変更、管理ができるようにすることを目的としている。GCPで動作するプロトタイプが提供されている。

https://github.com/kubernetes/kube-deploy/tree/master/cluster-api

## メモ 動的なKubeletの設定
Kubeletの設定をConfigMapで起動中に変更できるようにする。変更することによりクラスタが壊れる危険性があることに注意して操作する必要がある。
この機能はアルファ版でfeature gate "DynamicKubeletConfig"を有効にし、kubelet `--dynamic-config-dir`を設定することにより利用できる。

https://kubernetes.io/docs/tasks/administer-cluster/reconfigure-kubelet/

# Instrumentation
Heapster, PrometheusとStackdriverのためのCustom Metrics APIアダプタなどの安定性向上に注力しました。

# メモ：もう少し詳しい変更内容
- Elasticsearch, kibanaのバージョンアップ https://github.com/kubernetes/kubernetes/pull/55400
- fluentdでCRIのログフォーマットに対応しました。 https://github.com/kubernetes/kubernetes/pull/54777
- elasticsearchのクラスタリングに必要なendpoint一覧取得のために利用するのServiceの名前を環境変数から取得するようにし、変更できるようにしました。 https://github.com/kubernetes/kubernetes/pull/54215

# Network
IPv6のアルファサポート、kube-dnsの代替としてCoreDNSのアルファサポートを実装しました。
加えて、 NetworkPolicy APIをnetworking.k8s.io/v1 とし、 extensions/v1beta1は廃止予定としました。

# Node
良いパフォーマンス、より高い信頼性で、より多くのワークロードをサポートするために尽力しました。ハードウェアアクセラレータ、デバイスプラグインの有効化、CPUのピニングポリシーなどののアルファ版の機能を改善し、将来のリリースでこれらの機能をベータ版にしようとしています。加えてnode全体での信頼性とパフォーマンスの強化を行いました。

# OpenStack
より良いデフォルト値の設定や、自動判別の仕組みを用いた設定の簡略化を行いました。
加えて、下記のバージョンに対応しました。

- BlockStorage(Cinder) V3 をサポートしました。
- Load Balancer(Octavia) V2 をサポートしました。（Neutron LBaaS V2に加えて）
- Neutron LBaas V1 はサポート終了

これにより、OpenStackのI/Fを持つクラウド環境を最大限、活用することができます。

# Storage
Container Storage Interface(CSI)のアルファ版を実装し、Kubernetesをよりプラガブルにしました。CSIを使うとpodをデプロイするくらい簡単に新しいボリュームプラグインを導入することができ、サードパーティのストレージ提供者はKubernetesのコードベースに触れることなくプラグインを開発することができるようになります。

また、コンテナにブロックデバイスとしてボリュームを晒す機能や、アルファ機能であるボリュームのリサイズをサポートするプラグインを増やしたり、トポロジを意識したボリュームのスケジューリングの機能を追加しました。

# Windows
KubernetesとWindows platformの機能の改善を続けつつ、Windows ServerとWindows Server Containers のベータサポートを進めています。
これによりWindows特有のアプリケーションやワークロードをKubernetesで実行することができます。