はじめに
このエントリは、Kubernetes 1.11 の CHANGELOG から、新たに廃止予定となった機能(New Deprecations)、削除された機能(Removed Deprecations)、Stable/GA になった機能(Graduated to Stable/GA)、ベータになった機能(Graduated to Beta)、新しくアルファになった機能(New alpha features)についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。
- Kubernetes 1.11: 主な変更点 (Major Themes) Part.1
- Kubernetes 1.11: 主な変更点 (Major Themes) Part.2
- Kubernetes 1.11: Urgent Upgrade Notes と 既知の問題 (Known Issues)
- Kubernetes 1.11: Before Upgrading
- Kubernetes 1.11: 廃止予定の機能 (Deprecations) と 新機能 (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 ネイティブサポートを利用するか、ない場合は代替ソリューションを利用することを検討してください。-
InfluxDB クラスタモニタリングは、Heapster のメトリクスを保存するバックエンドとしての InfluxDB と、その可視化のための Grafana を提供するアドオンです。これは、v1.12 で削除されます。Heapster 自体はv1.13 で廃止されます。
-
- kubelet の
--rotate-certificates
フラグが廃止予定になりました。同じ機能は、kubelet 設定ファイルの.RotateCertificates
フィールドで有効にできます。-
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の変更点:
MasterConfiguration
とNodeConfiguration
の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)-
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)-
master-count
endpoint reconciler は、kube-apiserver を HA 構成にした時に、ダウンした apiserverの IP アドレス が更新されず、 apiserver へのリクエストが一定確率で失敗するという不具合がありました。
-
- ビルトインの Openstack cloud provider は廃止予定になりました。OpenStack を使用する場合は、外部 Cloud provider を利用してください。 (#63524, @dims)
-
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 リポジトリを使用してプロビジョニングする場合は、EmptyDir
をInitContainer
にマウントして 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)-
これは本来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)
-
従来の iptables から IPVS に移行することで、スケーラビリティの向上と大きなクラスタでのパフォーマンス向上が期待できます。詳しくは、こちらも参照して下さい。
-
- CoreDNS が Kubernetes の DNS プラグインとして有効化されました。 (ref)
- Azure Go SDK が GA になりました。 (#63063, @feiskyer)
- ClusterRole aggregation が GA になりました。 (ref)
-
この機能を使うことで、ユーザーが使用するデフォルトの 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)
-
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)-
Subresources は CRUD 以外のオペレーションを追加できるものです(e.g.
pods/log
)。CRD では、status
とscale
の2つのサブリソースが利用できます。
-
新しくアルファになった機能(New alpha features)
- kube-scheduler が DaemonSet の Pod をスケジューリングできるようになりました。 (ref)
- オフラインにしなくても PersistentVolumes のサイズを変更できるようになりました。 (ref)
- maximum volume count を設定できるようになりました。 (ref)
- subpath マウントで環境変数の展開ができるようになりました。 (ref)
- 特定のグループを指定して Pod 内でコンテナを実行できるようになりました。 (ref)
-
セキュリティ向上のため、Pod と PodSecurityPolicy の spec で、
runAsGroup
を指定できるようになりました。
-
- サービスリクエストとトークンを紐付けられるようになりました。 (ref)
-
TokenRequest API で特定のサービスに限定されたサービスアカウントトークンを取得することができます。
-
- kubelet の --experimental-qos-reserve フラグが、アルファの --qos-reserved フラグ、または kubeletconfig の QOSReserved フィールドで置き換えられました。これらは、QOSReserved feature gate を有効にする必要があります。 (#62509, @sjenning)