はじめに
このエントリは、Kubernetes 1.10 の CHANGELOG から既知の問題 (Known Issues) と廃止予定の機能 (Deprecations) についてまとめています。翻訳に合わせて補足を追記しています。その他の内容は次のリンク先を参照してください。
- Kubernetes 1.10: 主な変更点 (Major Themes)
- Kubernetes 1.10: Before Upgrading
- Kubernetes 1.10: 既知の問題 (Known Issues) と廃止予定の機能 (Deprecations)
既知の問題 (Known Issues)
ここでは Kubernetes 1.10 のリリース時点で確認されている既知の問題を扱います。アップグレードする前に問題内容を把握し、必要であればパッチバージョンリリースでの修正を待ちましょう。
-
Volume subPath に関するいくつかの問題があります。
- hostPath Volume で subPath を利用しているかつ kubelet がダウンしている間にその Pod が削除されると、kubelet の復旧時に subPath のマウントが正常にクリーンアップされない問題があります。(#61446)
- hostPath Volume で subPath を利用しているかつコンテナ化された kubelet の場合、subPath が正常にマウントされない問題があります。 (#61456)
- これらの問題を回避するためには、hostPath Volume に完全なパスを指定します。
- ConfigMaps, Secrets, DownwardAPI, Projected を利用した Volumes (Atomic writer volumes) でネストされた subPath のマウントが正常に動作しません。 (#61545)
- ソケットファイルが subPath から読み込みできません。 (#61377)
- 現在これらの問題に取り組んでいます。
-
kubeadm は現在 self-hosted デプロイにおいて etcd の証明書を省略しています。これはポイントリリースで修正される予定です (#61322)
-
一部のユーザ、特にとても大きなクラスタにおいて、kube-controller-manager がメモリを大幅に消費することがあります。(#61041)
廃止予定の機能
ここでは Kubernetes 1.10 で廃止予定の API バージョン、オプション、フラグ、引数の概要について扱います。廃止予定とは、将来のリリースでその機能が削除されることを意味します。
-
etcd2 バックエンドは廃止予定となり、Kubernetes 1.13 でサポートが削除される予定です。
-
VolumeScheduling と LocalPersistentVolume 機能はベータとなりデフォルトで有効になりました。アルファの PersistentVolume NodeAffinity アノテーションは廃止予定となり、将来のリリースで削除される予定です。(#59391, @msau42)
-
volume.alpha.kubernetes.io/node-affinity
が PersistentVolume NodeAffinity アノテーションです。
-
-
アルファの
Accelerators
feature gate は廃止予定となり、v1.11 で削除される予定です。代わりに Device Plugins を利用してください。DevicePlugin
feature gate を有効にすることで利用できます。 (#57384, @mindprince)-
Accelerators
feature gate を無効にすることでalpha.kubernetes.io/nvidia-gpu
リソースも利用できなくなります。代わりにDevicePlugin
feature gate のnvidia.com/gpu
リソースを利用してください。
-
-
kubectl scale job
は廃止予定になりました。Job オブジェクト以外の全てのスケールはそのまま残りますが、Jobs オブジェクトのスケールは将来のリリースで削除される予定です。 (#60139, @soltysh)-
kubectl scale
が scale サブリソースを利用するようになったことに伴い (Generic scaler)、scale サブリソースを持つ Deployments などのオブジェクトに加えて CRD などにも対応しました。 -
一方で Jobs オブジェクトは scale サブリソースを持たず他のオブジェクトと一貫性がありませんでした。
kubectl scale
がスケールできるオブジェクトは HPA がスケール可能なオブジェクトであるべきという方針でkubectl scale
による Jobs オブジェクトのスケールは廃止予定になりました。
-
-
kubelet はファイルによる設定の利用を推奨することから、ファイルにより設定できるフラグは全て廃止される予定です。(#60148, @mtaufen)
-
kubectl の
--show-all
フラグ (Pod にのみ影響し、human readable/non-API プリンタだけ) はデフォルトで有効に設定されるとともに廃止予定になりました。このフラグは終了した状態の Pod を表示するかどうかを指定します。1.11 で変更できなくし、将来のリリースで削除される予定です。 (#60210, @deads2k)-
human readable プリンタは、
kubectl get
コマンドで出力されるAPI レスポンスを人間が読めるように加工するものです。--show-all
はその human readable プリンタにのみ影響するフラグのため、それを通した結果と-o name
や-o yaml
で出力された結果が異なる状況になっていました。 -
--show-all
フラグを利用して表示されるようになるのはフェイズがSucceeded
またはFailed
の Pod です。今回の変更でこれらが常に表示されるようになります。 https://github.com/kubernetes/kubernetes/blob/v1.10.0/pkg/kubectl/resource_filter.go#L40-L55
-
human readable プリンタは、
-
kube-controller-manager と cloud-controller-manager のセキュアでない HTTP ポートを使う機能が廃止予定になり、将来のリリースで削除される予定です。代わりに
--secure-port
と--bind-address
を利用してください。 (#59582, @sttts) -
kube-apiserver のセキュアでない
--insecure-bind-address
と--insecure-port
フラグが廃止予定になり、将来のリリースで削除される予定です。代わりに--secure-port
と--bind-address
を利用してください。 (#59018, @hzxuzhonghu) -
PersistentVolume の
persistentVolumeReclaimPolicy
(再要求ポリシー) のRecycle
(再利用) が廃止予定になりました。利用者は動的プロビジョニングを代わりに利用してください。 (#59063, @ayushpateria)-
PersistentVolumeReclaimPolicy Recycle は、PersistentVolumeClaim によるボリュームの要求がなくなったときに、そのボリューム上で
rm -rf /thevolume/*
を実行します。この方法はエラーが発生しやすく、全ての状況において有効とは限らないことが分かっており、別のユーザに以前のユーザのデータが利用される可能性が残っていました。
-
PersistentVolumeReclaimPolicy Recycle は、PersistentVolumeClaim によるボリュームの要求がなくなったときに、そのボリューム上で
-
kube-apiserver の
--tls-ca-file
フラグはしばらくの間効果がありませんでした。このフラグは廃止予定となり、1.11 で削除される予定です。もしこのフラグを指定しているなら、1.11 にアップグレードする前に起動時の設定から削除しなければなりません。 (#58968, @deads2k)- 少なくとも v1.7.6 では既に利用されていないフラグだったようです。 (#58952)
-
PodSecurityPolicy API は
policy/v1beta1
に移動されました。extensions/v1beta1
の PodSecurityPolicy API グループは廃止され、将来のリリースで削除される予定です。PodSecurityPolicy を利用するための認可 (Authorizations) は、1.11 にアップグレードする前にpolicy
API グループを参照するように変更する必要があります。 (#54933, @php-coder) -
--enable-admission-plugin
,--disable-admission-plugin
フラグが追加され、--admission-control
フラグは廃止予定になりました。分けられたフラグを利用する際に指定された順序は関係ありません。 (#58123, @hzxuzhonghu)-
--enable-admission-plugin
フラグは、デフォルトで有効なプラグインに追加して有効にするプラグインを指定します。--disable-admission-plugin
フラグは、デフォルトで有効なプラグインから無効にするプラグインを指定します。- 1.10.0 時点でデフォルトで有効なプラグインは、
NamespaceLifecycle, LimitRanger, ServiceAccount, PersistentVolumeLabel, DefaultStorageClass, DefaultTolerationSeconds, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota
です。 1
- 1.10.0 時点でデフォルトで有効なプラグインは、
-
--admission-control
フラグと--enable/disable-admission-plugin
フラグは排他です。同時に利用することはできません。 2-
--admission-control
フラグで明示的にプラグインを指定した場合は、指定したプラグインのみが有効になります。内部的に設定されたデフォルトのプラグインなどは無視されます。 3
-
-
--admission-control
フラグと--enable-admission-plugin
フラグで指定するプラグインの順序は意味がありません。内部的に定義された適切な順序でプラグインが設定されます。 4 - 1.10.0 時点で利用できるプラグインは https://github.com/kubernetes/kubernetes/blob/v1.10.0/pkg/kubeapiserver/options/plugins.go#L99-L129 です。
- ドキュメントに利用が推奨されているプラグイン一覧があります。 https://kubernetes.io/docs/admin/admission-controllers/#is-there-a-recommended-set-of-admission-controllers-to-use
-
kubeadm はデフォルトで設定するプラグインを独自に定義しており、
NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota
となっています。5
-
-
Pod 内の全てのコンテナでプロセスネームスペースを共有して Docker コンテナを実行する kubelet の
--docker-disable-shared-pid
フラグは廃止予定となり、将来のリリースで削除される予定です。この挙動の設定はv1.Pod.Spec.ShareProcessNamespace
に置き換えられます。この設定はアルファで--feature-gates=PodShareProcessNamespace=true
で有効になります。 (#58093, @verb)-
Container Runtime Interface (CRI) は、Docker 1.13.1 以上の際に Pod のコンテナでプロセスネームスペースをデフォルトで共有することから、それ以前のプロセスネームスペースが分離されている状態に戻すために
--docker-disable-shared-pid
がデフォルトで有効に設定されています。
-
Container Runtime Interface (CRI) は、Docker 1.13.1 以上の際に Pod のコンテナでプロセスネームスペースをデフォルトで共有することから、それ以前のプロセスネームスペースが分離されている状態に戻すために
-
kubelet の cadvisor ポートは廃止予定になりました。1.12 でデフォルトが 0 (無効) に変更され、1.13 で cadvisor ポートが削除される予定です。 (#59827, @dashpole)
-
rktnetes は rktlet の利用を推奨することから廃止される予定です。詳しくは https://github.com/kubernetes-incubator/rktlet を参照してください。 (#58418, @yujuhong)
-
kubelet は、全てのコマンドラインフラグを明示的に内部の flagset に登録します。これによりサードパーティのライブラリからフラグが意図せずに kubelet のコマンドライン API に漏れることを防ぎます。意図せず流出される多くのフラグは廃止予定とマークされ、それらのフラグが削除される前にマイグレートすることもできます。加えて以前流出した
--cloud-provider-gce-lb-src-cidrs
フラグは、kubelet のコマンドライン API から完全に削除されました。これは kubelet の操作と関係がないためです。(#57613, @mtaufen)-
flagset というのは Go の flag パッケージの FlagSet タイプのことで、グローバルな flagset はさまざまなライブラリが利用するため、意図しないところで値が晒される可能性があるため、グローバルではなく内部 (internal) の flagset を利用することでそれを防ぐ変更です。
- 廃止されるフラグは以下のとおりです。
- --application_metrics_count_limit
- --boot_id_file
- --container_hints
- --containerd
- --docker
- --docker_env_metadata_whitelist
- --docker_only
- --docker-tls
- --docker-tls-ca
- --docker-tls-cert
- --docker-tls-key
- --enable_load_reader
- --event_storage_age_limit
- --event_storage_event_limit
- --global_housekeeping_interval
- --google-json-key
- --log_cadvisor_usage
- --machine_id_file
- --storage_driver_user
- --storage_driver_password
- --storage_driver_host
- --storage_driver_db
- --storage_driver_table
- --storage_driver_secure
- --storage_driver_buffer_duration
-
flagset というのは Go の flag パッケージの FlagSet タイプのことで、グローバルな flagset はさまざまなライブラリが利用するため、意図しないところで値が晒される可能性があるため、グローバルではなく内部 (internal) の flagset を利用することでそれを防ぐ変更です。
-
cloud-provider
サービスアカウントのブートストラップの RBAC role と rolebinding は、廃止予定になりました。もしこのサービスアカウントを利用している場合は、新しいクラスタで自身で RBAC ポリシーを作成、適応しなければいけません。 (#59949, @nicksardo) -
/swagger.json
や/swagger-2.0.0.0.json
のような OpenAPI spec の区切られたフォーマットのエンドポイントは廃止予定になりました。古いエンドポイントは 1.10, 1.11, 1.12 まではそのままで、1.14 で削除される予定です。代わりに適切な Accept: ヘッダとともに単一の/openapi/v2
エンドポイントを利用してください。例えば以下のとおりです。 (#59293, @roycaihw)
以前 | v1.10 |
---|---|
GET /swagger.json | GET /openapi/v2 Accept: application/json |
GET /swagger-2.0.0.pb-v1 | GET /openapi/v2 Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf |
GET /swagger-2.0.0.pb-v1.gz | GET /openapi/v2 Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf Accept-Encoding: gzip |
-
https://github.com/kubernetes/kubernetes/blob/v1.10.0/pkg/kubeapiserver/options/plugins.go#L133-L142 ↩
-
https://github.com/kubernetes/kubernetes/blob/v1.10.0/pkg/kubeapiserver/options/admission.go#L87-L90 ↩
-
https://github.com/kubernetes/kubernetes/blob/v1.10.0/pkg/kubeapiserver/options/admission.go#L117-L120 ↩
-
https://github.com/kubernetes/kubernetes/blob/v1.10.0/pkg/kubeapiserver/options/plugins.go#L63-L97 ↩
-
https://github.com/kubernetes/kubernetes/blob/v1.10.0/cmd/kubeadm/app/phases/controlplane/manifests.go#L48 ↩