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


はじめに

このエントリは、Kubernetes 1.11 の CHANGELOG から、新たに廃止予定となった機能(New Deprecations)、削除された機能(Removed Deprecations)、Stable/GA になった機能(Graduated to Stable/GA)、ベータになった機能(Graduated to Beta)、新しくアルファになった機能(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 ネイティブサポートを利用するか、ない場合は代替ソリューションを利用することを検討してください。



    • :pencil: InfluxDB クラスタモニタリングは、Heapster のメトリクスを保存するバックエンドとしての InfluxDB と、その可視化のための Grafana を提供するアドオンです。これは、v1.12 で削除されます。Heapster 自体はv1.13 で廃止されます。



  • kubelet の --rotate-certificates フラグが廃止予定になりました。同じ機能は、kubelet 設定ファイルの .RotateCertificates フィールドで有効にできます。



    • :pencil: kubelet の設定ファイルは、v1.10 でベータになりました。これまではフラグで kubelet のパラメータをセットしていましたが、現在は設定ファイルでセットする方法が推奨されています。詳しくはこちらを参照してください。



  • 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 を使用してマウントすることができます。


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, @luxas)


  • kubeadm v1alpha2の変更点: MasterConfiguration オブジェクトのトークン関連のフィールドがリファクタリングされています。.Token, .TokenTTL, .TokenUsages, .TokenGroups の代わりに、BootstrapToken の slice である BootstrapTokens を利用できます。これは、.Token, .TTL, .Usages, .Groups フィールド以下の機能と同等の機能をサポートしています。 (#64408, @luxas)


  • kubeadm v1alpha2の変更点: MasterConfigurationNodeConfiguration のv1alpha1のオブジェクト .NodeName.CRISocket は、v1alpha2では、それぞれ .NodeRegistration.Name.NodeRegistration.CRISocket になっています。.NoTaintMaster フィールドは v1alpha2 では削除されています。 (#64210, @luxas)


  • kubeadm v1alpha2の変更点: .AuthorizationModes のサポートが v1alpha2 では削除されました。代わりに、.APIServerExtraArgs.APIServerExtraVolumes を利用することで同じ効果が得られます。v1alpha1 API でこのフィールドを使用している設定ファイルは、自動的に v1alpha2 API に更新され、値が保持されます。 (#64068, @luxas)


  • service.alpha.kubernetes.io/tolerate-unready-endpoints アノテーションが廃止予定になりました。代わりに、Service.spec.publishNotReadyAddresses を利用してください。 (#63742, @thockin)



    • :pencil: 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, @charrywanganthony)


  • kubectl rolling-update は廃止予定になりました。代わりに、kubectl rollout を使用してください。 (#61285, @soltysh)

  • kube-apiserver: --endpoint-reconciler-type のデフォルト値が lease になりました。 master-count タイプは廃止予定になり、v1.13で削除されます。 (#63383, @liggitt)



  • ビルトインの Openstack cloud provider は廃止予定になりました。OpenStack を使用する場合は、外部 Cloud provider を利用してください。 (#63524, @dims)



    • :pencil: v1.6からクラウドプロバイダ特有の処理をするために、kube-controller-managerとは独立したcloud-controller-managerが追加されました。これにより、各クラウドプロバイダが Kubernetes コアプロジェクトとは独立したサイクルで開発できるようになっています。



  • kubelet の廃止予定の --allow-privileged フラグのデフォルト値が true になりました。これにより、ユーザーは PodSecurityPolicy への移行のために --allow-privileged フラグをセットする必要がなくなります。これまでは、デフォルト値が false だったため、ユーザーは(PodSecurityPolicyを設定後も引き続き)--allow-privileged をセットしておく必要がありました。 (#63442, @mtaufen)

  • dynamic client が新しいものに置き換えられました。以前のdynamic clientは、1マイナーバージョンリリース期間だけclient-go/deprecated-dynamicに残されますが、早急に新しいものに移行してください。 (#63446, @deads2k)

  • OpenStack クレデンシャルの In-tree サポートが廃止予定になりました。cloud-provider-openstack リポジトリの "client-keystone-auth" を利用してください。使用方法の詳細はこちらを参照してください。 (#64346, @dims)

  • volume の gitRepo が廃止予定になりました。コンテナを Git リポジトリを使用してプロビジョニングする場合は、EmptyDirInitContainer にマウントして git clone した後、 その EmptyDir を Pod のコンテナにマウントしてください。
    (#63445, @ericchiang)

  • PersistentVolume.nodeAffinity のアルファ用のアノテーションが削除されました。アップグレード前にベータ用の PersistentVolume.nodeAffinity フィールドを使用するように更新してください。 (#61816, @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, @luxas)

  • kubeadm の configuration API から .Etcd.SelfHosting が削除されました。この値は一度も使用されていませんでした。 (#63871, @luxas)

  • 廃止予定で使われていなかった --enable-custom-metrics が1.11で削除されました。 (#60699, @CaoShuFeng)


  • #32894で廃止予定となった--include-extended-apisが削除されました。 (#62803, @deads2k)

  • kubelet が node spec の externalID をセットしなくなりました。これはv1.1から廃止予定となっていました。 (#61877, @mikedanese)


  • initresource アドミッションプラグインが削除されました。 (#58784, @wackxu)

  • コアAPIグループから、ObjectMeta, ListOptions, DeleteOptions が削除されました。代わりにmeta/v1のものを参照してください。 (#61809, @hzxuzhonghu)

  • 廃止予定だった check-network-mode--mode フラグが削除されました。 (#60102, @satyasm)

  • 1.10で廃止予定となった alpha.kubernetes.io/nvidia-gpu リソースのサポートが削除されました。代わりにDevicePluginsで提供されるリソースnvidia.com/gpuを使用してください。 (#61498, @mindprince)


  • kube-cloud-controller-manager--service-account-private-key-file フラグが削除されました。代わりに、--use-service-account-credentials フラグを使用してください。 (#60875, @charrywanganthony)

  • 1.10で廃止予定となった rktnetes のコードが削除されました。代わりに、 rktlet と CRI を使用してください。 (#61432, @filbranden)


  • アルファの ScheduleDaemonSetPods フラグに紐づいた DaemonSet のスケジューリングが削除されました。 この機能の状況は、https://github.com/kubernetes/features/issues/548 を参照してください。 (#61411, @liggitt)



    • :pencil: これは本来1.10向けのリリースノートに記載されるべき内容だったようです。ScheduleDaemonSetPodsは、Daemonset の Pod を 従来の DaemonSetController ではなく、scheduler が担当するようにする機能で、1.11ではアルファで追加されています。



  • metadata agent version に一貫性を持たせるため、METADATA_AGENT_VERSION 設定オプションが削除されました。 (#63000, @kawych)

  • 廃止予定だった --service-account-private-key-file フラグが、 cloud-controller-manager から削除されました。 このフラグは kube-controller-manager では今もサポートされています。 (#65182, @liggitt)

  • アルファだった controller-manager による kubelet のサーバー証明書の承認を許可する機能を削除しました。この機能は、ノード(kubelet)側のサーバー証明書署名要求の検証と承認を自動化することで置き換えられるべきです。 (#62471, @mikedanese)


Stable/GA になった機能(Graduated to Stable/GA)


  • IPVSベースのクラスタ内ロードバランシングが GA になりました。 (ref)



    • :pencil: 従来の iptables から IPVS に移行することで、スケーラビリティの向上と大きなクラスタでのパフォーマンス向上が期待できます。詳しくは、こちらも参照して下さい。



  • CoreDNS が Kubernetes の DNS プラグインとして有効化されました。 (ref)

  • Azure Go SDK が GA になりました。 (#63063, @feiskyer)

  • ClusterRole aggregation が GA になりました。 (ref)



    • :pencil: この機能を使うことで、ユーザーが使用するデフォルトの Role に 、CRD や Aggregated API server を使って作成したカスタムリソースに関するルールを含めることができるようになります。詳しくは、こちらを参照してください。



  • CRI 検証テストスイートが GA になりました。 (ref)

  • StorageObjectInUseProtection が GA になりました。 (ref) and (ref)


ベータになった機能(Graduated to Beta)


  • out-of-tree/外部の(プラガブルな)クラウドプロバイダサポートがベータになりました。 (ref)

  • Pod 再起動後の PersistentVolumes のサイズ変更がベータになりました。 (ref)

  • sysctl サポートがベータになりました。 (ref)

  • Azure Virtual Machine Scale Sets サポートがベータになりました。 (ref)

  • Cluster Autoscaler の Azure サポートがベータになりました。 (ref)

  • ノードから特定のAPIへのアクセスを制限する機能がベータになりました。 (ref)

  • CustomResource のバージョニングがベータになりました。 (ref)



    • :pencil: spec の versions に複数のバージョンを定義できるようになっています。それに伴い、従来の version は非推奨になっています。



  • CRI の Windows コンテナ設定がベータになりました。 (ref)

  • CRI のロギング、統計がベータになりました。 (ref)

  • DynamicKubeletConfig がベータになり、デフォルト有効になりました。DynamicKubeletConfig を使用するには、--dynamic-config-dirフラグがセットされていることを確認してください。 (#64275, @mtaufen)

  • sysctl の実験的な機能がベータに昇格(Sysctls feature フラグ経由でデフォルト有効)しました。PodSecurityPolicy と Pod に sysctls を制御するフィールドが追加されています。アルファの sysctl アノテーションは、1.11以降の kubelet では無視されます。Deployment にセットされている sysctl アノテーションは、API フィールドに変換する必要があります。 (#6371, @ingvagabund)

  • ボリュームの拡張機能がベータになりました。 (#64288, @gnufied)

  • CRI コンテナログのローテーションがベータになり、デフォルトで有効化されました。 (#64046, @yujuhong)


  • PriorityClass API が scheduling.k8s.io/v1beta1 に昇格しました。 (#63100, @ravisantoshgudimetla)

  • priorityClass がベータになりました。 (#63724, @ravisantoshgudimetla)

  • client-go: credential exec プラグインがベータになりました。 (#64482, @ericchiang)

  • Custom resources の Subresources がベータになり、デフォルトで有効化されました。この変更で、/statusサブリソースの更新は、 .status以外の全てのフィールドの更新を許可しなくなります(以前は.spec.metadataだけ許可されていませんでした)。また、/status サブリソースが有効な場合は、CRD OpenAPI検証スキーマのルートでrequiredを使用することができます。 (#63598, @nikhita)



    • :pencil: Subresources は CRUD 以外のオペレーションを追加できるものです(e.g. pods/log)。CRD では、statusscaleの2つのサブリソースが利用できます。




新しくアルファになった機能(New alpha features)


  • kube-scheduler が DaemonSet の Pod をスケジューリングできるようになりました。 (ref)

  • オフラインにしなくても PersistentVolumes のサイズを変更できるようになりました。 (ref)

  • maximum volume count を設定できるようになりました。 (ref)

  • subpath マウントで環境変数の展開ができるようになりました。 (ref)

  • 特定のグループを指定して Pod 内でコンテナを実行できるようになりました。 (ref)



    • :pencil: セキュリティ向上のため、Pod と PodSecurityPolicy の spec で、runAsGroup を指定できるようになりました。



  • サービスリクエストとトークンを紐付けられるようになりました。 (ref)



    • :pencil: TokenRequest API で特定のサービスに限定されたサービスアカウントトークンを取得することができます。



  • kubelet の --experimental-qos-reserve フラグが、アルファの --qos-reserved フラグ、または kubeletconfig の QOSReserved フィールドで置き換えられました。これらは、QOSReserved feature gate を有効にする必要があります。 (#62509, @sjenning)