このエントリは、Kubernetes v1.8 CHANGELOG から主な変更点 (Major Themes) をまとめています。その他の項目は下記リンク先を参照してください。
- Kubernetes v1.8: 主な変更点 (Major Themes)
- Kubernetes v1.8: Before Upgrading
- Kubernetes v1.8: 既知の問題 (Known Issues)
- Kubernetes v1.8: Deprecations
Kubernetes は、分野ごとに Special Interest Groups (SIGs) として組織されたコミュニティメンバーによって開発されており、v1.8 の CHANGELOG から SIG 毎にそのバージョンで取り組んだ事柄がそれぞれ記載されるようになった。
SIG API Machinery
リスト取得の小さなチャンクへの分解やカスタム API サーバや Custom Resource Definitions (CRDs) のサポートの改善、クライアントサイドでのイベントスパムフィルタリングなど。
kube-apiserver: [alpha] リストページネーションの実装
これまでリストの取得は全件取得のみしかできず、とても大きなリストの取得には CPU、メモリを多く消費していたが、etcd3 からリストの取得にリミットを指定できるようになったため、apiserver はこの機能によりリストの取得をチャンクに分割し取得できるようになった。
この機能はアルファであるため有効にするためには、apiserver --feature-gates
で APIListChunking
を指定する必要がある。1.9 リリースでこの機能はデフォルトになる予定となっている。
- Alpha list paging implementation by smarterclayton · Pull Request #48921 · kubernetes/kubernetes
- Design for consistent API chunking in Kubernetes by smarterclayton · Pull Request #896 · kubernetes/community
CustomResourceDefinitions (CRDs): [alpha] JSON scheme によるオブジェクトのバリデーションをサポート
CustomResourceDefinition (CRD) API は、JSON scheme をベースとした CRD スペックによりカスタムオブジェクトのバリデーションをサポートした。これまで CRDs オブジェクトはスペックが提供されておらず、どのような構造のオブジェクトでも書き込みが成功していた。
この機能を有効にするには、apiserver --feature-gates
で CustomResourceValidation
を指定する必要がある。
- apiextensions: validation for customresources by nikhita · Pull Request #47263 · kubernetes/kubernetes
- Proposal: Validation for CustomResources. by nikhita · Pull Request #708 · kubernetes/community
Go Client: クライアントサイドイベントスパムフィルタリングをサポート
クラスタ内コンポーネントからの apiserver への過剰なトラフィックを抑制するクライアントサイドイベントスパムフィルタリングが追加された。
- Add client side event spam filtering by derekwaynecarr · Pull Request #47367 · kubernetes/kubernetes
SIG Apps
Workload API が apps/v1beta2 への昇格し、DaemonSet, Deployment, ReplicaSet, StatefulSet オブジェクトがこの変更により影響が受ける。
Workload API (DaemonSet, Deployment, ReplicaSet, StatefulSet) が apps/v1beta2 へ昇格
Workload API が apps/v1beta2 に昇格した。この変更により DaemonSet, Deployment, ReplicaSet, StatefulSet オブジェクトが影響を受ける。apps/v1beta2 への移行に伴う主な変更は下記の通り。
- 全ての Workload API の
spec.revisionHistoryLimit
のデフォルト値が 10 に変更 - 全ての Workload API で
spec.selector
のデフォルティングの廃止 - StatefulSet、DaemonSet で
spec.updateStrategy
のデフォルトが OnDelete から RollingUpdate に変更 - CronJob で
spec.successfulJobsHistoryLimit
のデフォルトが 3、spec.failedJobsHistoryLimit
が 1 に変更
Workload API は 1.9 で stable への昇格を予定している。
- Move workload API objects to group version apps/v1beta2 · Issue #49135 · kubernetes/kubernetes
- Workload Controllers v1Beta2 · Issue #353 · kubernetes/features
- Workloads GA · Issue #484 · kubernetes/features
- remove apps/v1beta2 defaulting codes for obj.Spec.Selector and obj.Labels by crimsonfaith91 · Pull Request #50164 · kubernetes/kubernetes
SIG Auth
RBAC の stable への昇格や Advanced auditing の beta への昇格、リソースの暗号化の外部鍵管理システムとの連携など。リソースの暗号化は 1.8 で beta に昇格する予定だったが、alpha のままとなった。
RBAC: [stable] v1beta1 から v1 へ昇格
RBAC API グループが v1beta1 から v1 へ昇格した。API の変更は含まれていない。
Advanced auditing: [beta] alpha から beta へ昇格
Advanced auditing が alpha から beta に昇格した。alpha から後方互換性のない変更が入ったため、修正が必要かもしれないことに注意。
- Advanced Auditing Beta Changes · Issue #48561 · kubernetes/kubernetes
- Audit Logging for k8s · Issue #22 · kubernetes/features
Encrypting data: [alpha] シークレットなどのリソースの暗号化は、外部の鍵管理システム(KMS)に暗号化鍵を格納する仕組みをサポート
1.7 で提供されたシークレットなどのリソースの暗号化で外部の鍵管理システム (KMS) に暗号化キーを保存する仕組みが入った。これはもともとのファイルベースのストレージを補い、複数の KMS と連携できるようになる。Google Cloud KMS プラグインが追加され、Google 側の連携が完了すれば利用できるようになる。
SIG Autoscaling
Horizontal Pod Autoscaler (HPA) のカスタムメトリクスのサポート、Cluster Autoscaler のパフォーマンス改善やエラーレポートなど。
Horizontal Pod Autoscaler: [beta] カスタムメトリクスによるスケールをサポート
Horizontal Pod Autoscaler でカスタムメトリクスがサポートされて v1beta1 に昇格した。また関連する metrics APIs (カスタムメトリクスと resource/master メトリクスの提供) も合わせて v1beta1 に昇格した。
- Proposal: Horizontal Pod Autoscaler Version 2 by DirectXMan12 · Pull Request #120 · kubernetes/community
- Switch references in HPA docs from alpha to beta by DirectXMan12 · Pull Request #5671 · kubernetes/kubernetes.github.io
Cluster Autoscaler: [stable] GA に昇格
Cluster Autoscaler で下記の改善が行われ、GA に昇格した。詳しくはリリースページを参照。
SIG Cluster Lifecycle
kubeadm のクラスタの更新コマンドのサポートと alpha として self-hosted コントロールプレーンの作成をサポート。
kubeadm: [alpha] kubeadm init が self-hosted クラスタの作成をサポート
kubeadm init
での self-hosted クラスタの作成がサポートされた。self-hosted クラスタというのは Kubernetes クラスタの内部コンポーネントをそのクラスタ自身で管理することをいっている。より self-hosted クラスタのより詳しい情報は kubernetes/community#206 を参照。
これまで kubeadm で構築されるクラスタは Static Pod を利用していたが、self-hosted ではそのクラスタ内で DaemonSet によりデプロイされる。また1.8 時点ではコントロールプレーンのコンポーネント (apiserver, controller manager, scheduler) のみの self-hosted 化をサポートしている。
この機能を有効にするには、kubeadm init
に --feature-gates=SelfHosting=true
を設定し実行する必要がある。コントロールプレーンの self-hosted 化は次のリリース 1.9 でデフォルトになる予定になっている。
- Self-hosting support in kubeadm · Issue #415 · kubernetes/features
- Update docs/admin/kubeadm.md to cover self-hosting in 1.8. by mattmoyer · Pull Request #5497 · kubernetes/kubernetes.github.io
kubeadm: [beta] クラスタのアップグレードを行う upgrade
サブコマンドが追加
新たに upgrade サブコマンドが追加された。このコマンドによって Static Pod, self-hosted 双方のクラスタのアップグレードを行うことができる。
- Easy, automated upgrades with the `kubeadm upgrade` command · Issue #296 · kubernetes/features
- kubeadm upgrades design proposal - Google ドキュメント
- Add `kubeadm upgrade` docs by mhausenblas · Pull Request #4770 · kubernetes/kubernetes.github.io
- kubeadm: Add 'kubeadm upgrade plan' and 'kubeadm upgrade apply' CLI commands by luxas · Pull Request #50872 · kubernetes/kubernetes
- Implement the `kubeadm upgrade` command by luxas · Pull Request #48899 · kubernetes/kubernetes
SIG Instrumentation
Heapster に代わる metrics-server の提供など。
metrics-server を resource metrics API を提供する方法として推奨
metrics-server が新たにリソースメトリクス API を提供する方法として推奨されるようになった。metrics-server はこれまで Heapster をデプロイしていたのと同様にアドオンとしてデプロイする必要がある。これまで kubectl top
や Horizontal Pod Autoscaler (HPA) などのコントローラは Heapster の提供するメトリクスを利用していた。
metrics-server は extended-apiserver として実装されており、/apis/metrics.k8s.io
パスに登録される。
- kubernetes-incubator/metrics-server
- Metrics Server (for resource metrics API) · Issue #271 · kubernetes/features
- Added documentation for Metrics Server by piosz · Pull Request #5560 · kubernetes/kubernetes.github.io
SIG Multi-cluster (formerly known as SIG Federation)
Federation の stable リリース (GA) に向けての準備など。
SIG Node
ベンダー固有のコードを Kubelet に追加することなくハードウェアを利用できるようにする Device Plugin などの提供。
[alpha] Kubelet を拡張する Device Plugin のサポート
ベンダー固有のコードを Kubelet に追加することなく特定のハードウェアを利用できるようにする Device Plugin がサポートされた。ユースケースとしてベンダー固有の初期化やセットアップを必要とする GPUs やハイパフォーマンス NIC、FPGAs、InfiniBand、ストレージデバイスやそれらのようなコンピューティングリソースなどの利用が想定されている。これらの検出とコンテナからの利用、ヘルスチェックなどがこれにより提供される。
v1.8 では Nvidia GPUs のみがテストされている。またこの機能を有効にするには、kubelet --feature-gates
で DevicePlugins
を指定し、Device Plugin 実装をクラスタにデプロイしておく必要がある。
- Extension to support new compute resources · Issue #368 · kubernetes/features
- Deviceplugin jiayingz by jiayingz · Pull Request #51209 · kubernetes/kubernetes
- Device Plugins - Kubernetes
- container-engine-accelerators/cmd/nvidia_gpu at master · GoogleCloudPlatform/container-engine-accelerators
SIG Network
NetworkPolicy API のアウトバウンドトラフィックポリシーのサポートや CIDR に基づくポリシーの適用など。現在の iptables とユーザランドのモードに加えて alpha として IPVS モードが kube-proxy に追加された。
NetworkPolicy: [beta] EgressRules をサポート
従来の Ingress トラフィック(インバウンド)に加えて Egress トラフィック(アウトバウンド)が NetworkPolicy API でサポートされた。
egress:
- to:
- podSelector:
matchLabels:
role: backend
ports:
- protocol: TCP
port: 5978
NetworkPolicy API を利用するには、それに対応した Weave Net や Calico のような Pod Network アドオンを利用している必要がある。
NetworkPolicy: [beta] CIDR に基づくポリシーの適用をサポート
従来の namespaceSelector
, podSelector
に加えて CIDR に基づくポリシーを適用する ipBlock
がサポートされた。ipBlock
で指定した CIDR の範囲外のトラフィックが除外される。
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978
- Add IPBlock to Network Policy by cmluciano · Pull Request #50033 · kubernetes/kubernetes
- update network-policy by adding egress and ipBlock usage by Lion-Wei · Pull Request #5473 · kubernetes/kubernetes.github.io
kube-proxy: [alpha] ipvs モードをサポート
従来の userspace
, iptables
に加えて、IPVS を利用する ipvs
モードがサポートされた。現在の iptables によるアプローチは、Huawei において 50000 を超える services を利用した際にパフォーマンスに問題があったとされ、IPVS によるアプローチが提案されていた。iptables は本来ファイアウォール向けに設計されたものであるため、ロードバランシング向けにおいては IPVS はより高度な機能を備えパフォーマンスが優れている。
この機能を有効にするには、kube-proxy --feature-gates
で SupportIPVSProxyMode=true
を指定し、合わせて --proxy-mode
を ipvs
に設定する必要がある。
- Implement IPVS-based in-cluster service load balancing · Issue #265 · kubernetes/features
- Implement IPVS-based in-cluster service load balancing by dujun1990 · Pull Request #46580 · kubernetes/kubernetes
- add proxy-mode:ipvs in service.md by Lion-Wei · Pull Request #5571 · kubernetes/kubernetes.github.io
SIG Scalability
継続的インテグレーション環境による継続的なスケーラビリティテストの自動化や現在のスケーラビリティ限界点についてのドキュメントの作成、SLIs (Service Level Indicators)、SLOs (Service Level Objectives) の策定など。
SIG Scheduling
さまざまなワークロードを混在できるようにし、またより高いレベルのリソース使用率と可用性を実現する Pod Priority と Pod Preemption をサポート。
[alpha] PriorityClasses と Pod Priority のサポート
プライオリティを数値で定義する non-namespaced リソースの PriorityClasses が新たに追加された。このリソースは名前とプライオリティの数値で構成される。
apiVersion: v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false
description: "This priority class should be used for XYZ service pods only."
合わせて Pod Priority がサポートされた。Pod .spec.priorityClassName
に PriorityClass オブジェクト名を設定することで Pod にプライオリティが設定される。globalDefault
が true
に設定された PriorityClass オブジェクトが存在せず、priorityClassName が設定されていない Pod はプライオリティが 0 とみなされる。
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
priorityClassName: high-priority
この機能を有効にするには、kube-apiserver --feature-gates=PodPriority=true
を指定し、合わせて --runtime-config=scheduling.k8s.io/v1alpha1=true
に設定する必要がある。
- Add Priority to Kubernetes API by bsalamat · Pull Request #45610 · kubernetes/kubernetes
- Add Priority admission controller by bsalamat · Pull Request #49322 · kubernetes/kubernetes
- Add user docs for pod priority and preemption by bsalamat · Pull Request #5328 · kubernetes/kubernetes.github.io
[alpha] Pod Priority に基づく Preemption のサポート
Pod Priority に基づく Preemption (先取り、差し替え) がスケジューラでサポートされた。Pod P を作成するとノードのアサインがスケジュールされる。もし、その Pod P をスケジュールできるノードが見つからないと、スケジュールが保留された Pod P に対して Preeption ロジックが開始され、Pod P よりプライオリティが低い一つ以上の Pods を削除して Pod P をスケジュールできるノードを探す。もしそのようなノードが見つかればプライオリティの低い Pods を削除し、 Pod P がそのノードにスケジュールされる。この機能は Borg のリソース効率のよいスケジュール機能としてよく紹介されているものの Kubernetes 実装のようだ。
この機能を有効にするには、PodPriority を有効にする必要がある。
- Add pod preemption to the scheduler by bsalamat · Pull Request #50949 · kubernetes/kubernetes
- Add user docs for pod priority and preemption by bsalamat · Pull Request #5328 · kubernetes/kubernetes.github.io
SIG Storage
ボリュームのリサイズやスナップショット、マウントオプションの指定やメトリクスの拡充など。
PersistentVolume: [alpha] ボリュームのリサイズのサポート
PersistentVolume のボリュームサイズのリサイズがサポートされた。alpha においてはファイルシステムのリサイズを伴わないボリュームタイプのみをサポートしている。(現在は GlusterFS のみ)ボリュームのリサイズをサポートしている StorageClass から作成された PersistentVolumeClaim のボリュームサイズを編集することでボリュームのリサイズを行うことができる。ボリュームのリサイズによって新しい PersistentVolume が作成されることはない。
この機能を有効にするには、kube-apiserver --feature-gates=ExpandPersistentVolumes=true
を設定し、合わせて PersistentVolumeClaimResize
アドミッションプラグインを有効にする必要がある。
1.9 で beta, 1.10 で stable への昇格を予定している。
- Add support for resizing PVs · Issue #284 · kubernetes/features
- Proposal for growing persistent volumes by gnufied · Pull Request #657 · kubernetes/community
- Implement Controller for growing persistent volumes by gnufied · Pull Request #49727 · kubernetes/kubernetes
- Add docs for implementing resize by gnufied · Pull Request #5528 · kubernetes/kubernetes.github.io
- Using Admission Controllers - Kubernetes
PersistentVolume: [alpha] スナップショットのサポート
スナップショットの作成、リスト、削除、リストアがサポートされた。現在はプロトタイプであるため、バージョンの変更により以前のスナップショットのリストアが保証されていないため注意が必要。
1.9 で beta, 1.10 で stable への昇格を予定している。
- Storage Volume Snapshots · Issue #177 · kubernetes/features
- Add volume snapshots feature by tsmetana · Pull Request #331 · kubernetes-incubator/external-storage
PersistentVolume: [stable] マウントオプションが beta から stable に昇格
マウントオプションが beta から stable に昇格した。それに合わせて PersistentVolume に mountOptions
フィールドが追加された。これはアノテーションによる指定を置き換える。また同様に StorageClass に mountOptions
フィールドが追加された。
- Proposal for taking mount option to GA by gnufied · Pull Request #771 · kubernetes/community
- Take mount options to GA by adding PV.spec.mountOptions by wongma7 · Pull Request #50919 · kubernetes/kubernetes
- Support Volume Mount Options · Issue #168 · kubernetes/features
[stable] ボリュームの利用に関するメトリクスのサポート
さまざまなボリューム操作に関する高レベルなメトリクスがサポートされた。これは個々のボリュームタイプに依存しない形で PersistentVolume Controller (kube-controller-manager) に実装されている。Prometheus Metrics Format で出力されており、具体的に提供されるメトリクスは以下の通り。
Name | Help | Type | Labels |
---|---|---|---|
storage_operation_duration_seconds |
Storage operation duration |
Histogram |
volume_plugin , operation_name
|
storage_operation_errors_total |
Storage operation errors |
Histogram |
volume_plugin , operation_name
|
- Add support for high level volume operation metrics · Issue #349 · kubernetes/features
- Add a proposal for high level volume metrics by gnufied · Pull Request #809 · kubernetes/community
- Add volume operation metrics to operation executor and PV controller by wongma7 · Pull Request #50036 · kubernetes/kubernetes