Kubernetes 1.14 の Changelog の Urgent Upgrade Notes, Deprecations, Removed and deprecated metrics, API Changes についてまとめました。
Urgent Upgrade Notes
アップグレード前に読むべきもの
kube-apiserver
- デフォルトの RBAC ポリシーで、未認証 (unauthenticated) ユーザに対してディスカバリとパーミッションチェックの API (
kubectl auth can-iで利用)のアクセスを許可しなくなりました。アップグレードされたクラスタは以前の許可設定が引き継がれますが、新クラスタで設定でも引き続きアクセス許可を行いたい場合、以下のコマンドで設定できます。kubectl create clusterrolebinding anonymous-discovery --clusterrole=system:discovery --group=system:unauthenticatedkubectl create clusterrolebinding anonymous-access-review --clusterrole=system:basic-user --group=system:unauthenticated-
CVE-2018-1002105 の脆弱性の post-mortem で RBAC の Discovery ロールを見直す という話が出たようです
- deprecated だった
--storage-versionsフラグが削除されました。ストレージバージョンは常に kube-apiserver バイナリにビルトインされたものが使われます (#67678, @caesarxuchao) - deprecated だった
--repair-malformed-updatesフラグが削除されました。 (#73663, @danielqsj) -
/openapi/v2スキーマ によって置き換えられたため、1.7 から deprecated となっていた/swaggerapi/*のスキーマは削除されました (#72924, @liggitt) -
/openapi/v2スキーマ によって置き換えられたため、v1.10 から deprecated になっていた/swagger.jsonと/swagger-2.0.0.pb-v1のスキーマは削除されました (#73148, @liggitt) -
kube-apiserverは aggregated された API サーバー の/openapi/v2エンドポイントの openapi スキーマのみを集約するようになりました。/swagger.jsonにフォールバックして集約する仕組みは削除されました。aggregated された API サーバーがスキーマを/openapi/v2(v1.10 から使える) で提供していることを確認してください (#73441, @roycaihw) - 1.9 から deprecated となっている "io.k8s.kubernetes.pkg" のプレフィクスで始まる OpenAPI の定義が削除されました。 (#74596, @sttts)
-
ValidateProxyRedirects機能はベータとなりデフォルトで有効になりました。この機能は API サーバーが同じ host に対してのリダイレクトだけを許可するように制限するものです。もし、ノードが API サーバーがリクエストしたホストのインタフェースと別のインタフェースから CRI のストリーミングリクエストに返答するようになっていた場合はうまく動作しません(ビルトインの dockershim を利用せずに、kubelet の--redirect-container-streaming=trueを設定したときのみ起こり得る)。その場合、ノードの設定を修正するまで、この機能を一時的に無効にすることができます。問題を避けるため kubelet では--redirect-container-streaming=falseの設定をいれると良いでしょう (#72552, @tallclair)
kubectl
- deprecated だった
kubectl getの--show-allフラグが削除されました (#69255, @Pingan2017)
kubelet
- deprecated だった
--experimental-fail-swap-onフラグが削除されました (#69552, @Pingan2017)-

--fail-swap-on"という正式版のフラグで引き続き設定できます。ノードの swap が有効のときに kubelet を起動させないフラグで、デフォルトで有効になっています。
-
- HTTPGetAction を指定したヘルスチェック(liveness & readiness) の probe は異なるホスト名のリダイレクトを処理しないようになりました。代わりにローカルでないリダイレクトは成功として扱われます(ドキュメントに記載されている挙動)。この場合、"ProbeWarning" という reason のイベントが生成され、リダイレクトが無視されたことが示されます。もし別のエンドポイントへのリダイレクトに依存していた場合、リダイレクトではなくプロクシーするような kubelet の外でヘルスチェックをするためのロジックが必要となります (#75416, @tallclair)
-
liveness/readiness probe のドキュメントでは、もともと 200以上、400未満のステータスコードが成功と記載されていました
-
client-go
- deprecated だったバージョンなしの API グループのアクセッサ (例えば
clientset.Apps())は削除されました。明示的なバージョンの方 (例えばclientset.AppsV1()) を利用してください。(#74422, @liggitt) - disk-cached discovery のクライアントが k8s.io/client-go/discovery から k8s.io/client-go/discovery/cached/disk に移動しました。memory-cached discovery のクライアントが k8s.io/client-go/discovery/cached から k8s.io/client-go/discovery/cached/memory に移動しました (#72214, @caesarxuchao)
kubeadm
-
kubeadm alpha preflightとkubeadm alpha preflight nodeが削除されました。代わりにkubeadm join phase preflightを利用してください (#73718, @fabriziopandini)
その他
- deprecated だった taint
node.alpha.kubernetes.io/notReadyとnode.alpha.kubernetes.io/unreachableはサポートされなくなりました。代わりにnode.kubernetes.io/not-readyとnode.kubernetes.io/unreachableを利用してください。 (#73001, @shivnagarajan) - Prometheus のクエリで
pod_nameとcontainer_nameのラベル(cadvisor か kubelet probe のメトリクス) を使っているものは、代わりにpodとcontainerを使うようにしてください。pod_nameとcontainer_nameラベルはpodandcontainerラベルとともに移行期間は存在しますが、将来的に削除されます。(#69099, @ehashman)-
Kubernetes Metrics Overhaul というメトリクス見直しの一貫で、一貫性をもったラベル名に統一されました。いままではメトリクスによって pod_nameとpod別のラベルが使われており、同時に使う場合は label_replace を使った workaround が必要でした。
-
Deprecations
kubectl
-
kubectl convertが deprecated になり、v1.17 で削除予定です -
kubectl getの--exportフラグ が deprecated になり、 v1.18 で削除予定です (#73787, @soltysh)
kubelet
- OS とアーキテクチャの情報が Node の
kubernetes.io/osとkubernetes.io/archラベルに記録されるようになりました。以前までのラベル (beta.kubernetes.io/osandbeta.kubernetes.io/arch) はまだ記録されますが、deprecated となり v1.18 で削除されます (#73333, @yujuhong)
hyperkube
API
- Ingress リソースが
networking.k8s.io/v1beta1で有効になりました。extensions/v1beta1の Ingress リソースは deprecated となり v1.18 以降は提供されなくなります。既存の永続化されたデータは 新しい API グループ/バージョンでも取得できます (#74057, @liggitt) - v1.16 から NetworkPolicy リソースは
extensions/v1beta1では提供されなくなります。v1.8 からあるnetworking.k8s.io/v1を利用するように変更してください。既存の永続化されたデータはnetworking.k8s.io/v1からも取得できます。 - v1.16 から PodSecurityPolicy リソースは
extensions/v1beta1では提供されなくなります。v1.10 からあるpolicy/v1beta1を利用するように変更してください。既存の永続化されたデータはpolicy/v1beta1からも取得できます。 - v1.16 から DaemonSet, Deployment, ReplicaSet リソースは
extensions/v1beta1,apps/v1beta1,apps/v1beta2では提供されなくります。v1.9 からあるapps/v1に以降してください。既存の永続化されたデータはapps/v1からも取得できます。 - PriorityClass リソースが
scheduling.k8s.io/v1に昇格しました。scheduling.k8s.io/v1beta1とscheduling.k8s.io/v1alpha1は deprecated になり、v1.17 から無効になります。 (#73555, #74465, @bsalamat) - list API コールの
exportクエリパラメタは deprecated になり v1.18 で削除されます (#73783, @deads2k)
リソースバージョンのまとめ
旧バージョンのカッコは提供されなくなる Kubernetes のバージョンです。
リソース | 新バージョン | 旧バージョン
--- | --- | --- | ---
Ingress | networking.k8s.io/v1beta1 | extensions/v1beta1 (v1.18)
NetworkPolicy | networking.k8s.io/v1 | extensions/v1beta1 (v1.16)
PodSecurityPolicy | policy/v1beta1 | extensions/v1beta1 (v1.16)
DaemonSet | apps/v1 | extensions/v1beta1, apps/v1beta1, apps/v1beta2 (v1.16)
Deployment | apps/v1 | extensions/v1beta1, apps/v1beta1, apps/v1beta2 (v1.16)
ReplicaSet | apps/v1 | extensions/v1beta1, apps/v1beta1, apps/v1beta2 (v1.16)
PriorityClass | scheduling.k8s.io/v1 | scheduling.k8s.io/v1beta1, scheduling.k8s.io/v1alpha1 (v1.17)
その他
- 以下の機能が GA になりました。関連する feature gate は deprecated となり v1.15 で削除されます
CustomPodDNSHugePagesMountPropagationPersistentLocalVolumes
- CoreDNS: 以下のディレクティブまたはキーワードは deprecated となり、v1.15 で削除されます
-
kubernetesプラグインのupstreamオプション。v1.15 ではデフォルトの挙動になります -
proxyプラグイン。forwardプラグインに置き換えられます
-
削除または deprecated となったメトリクス
削除されたメトリクス
reflector_items_per_listreflector_items_per_watchreflector_last_resource_versionreflector_list_duration_secondsreflector_lists_totalreflector_short_watches_totalreflector_watch_duration_secondsreflector_watches_total
これらのメトリクス(reflector metrrics)はラベルが動的に生成されるため、kubelet のメモリリークの原因となっていました。このメトリクスをモニタリングに使うのは難しかったという理由もあり削除されました。
参考: Remove reflector metrics since they are causing a memory leak #74636
deprecated となったメトリクス
-
rest_client_request_latency_seconds->rest_client_request_duration_seconds -
apiserver_proxy_tunnel_sync_latency_secs->apiserver_proxy_tunnel_sync_duration_seconds -
scheduler_scheduling_latency_seconds->scheduler_scheduling_duration_seconds -
kubelet_pod_worker_latency_microseconds->kubelet_pod_worker_duration_seconds -
kubelet_pod_start_latency_microseconds->kubelet_pod_start_duration_seconds -
kubelet_cgroup_manager_latency_microseconds->kubelet_cgroup_manager_duration_seconds -
kubelet_pod_worker_start_latency_microseconds->kubelet_pod_worker_start_duration_seconds -
kubelet_pleg_relist_latency_microseconds->kubelet_pleg_relist_duration_seconds -
kubelet_pleg_relist_interval_microseconds->kubelet_pleg_relist_interval_seconds -
kubelet_eviction_stats_age_microseconds->kubelet_eviction_stats_age_seconds -
kubelet_runtime_operations->kubelet_runtime_operations_total -
kubelet_runtime_operations_latency_microseconds->kubelet_runtime_operations_duration_seconds -
kubelet_runtime_operations_errors->kubelet_runtime_operations_errors_total -
kubelet_device_plugin_registration_count->kubelet_device_plugin_registration_total -
kubelet_device_plugin_alloc_latency_microseconds->kubelet_device_plugin_alloc_duration_seconds -
docker_operations->docker_operations_total -
docker_operations_latency_microseconds->docker_operations_latency_seconds -
docker_operations_errors->docker_operations_errors_total -
docker_operations_timeout->docker_operations_timeout_total -
network_plugin_operations_latency_microseconds->network_plugin_operations_latency_seconds -
sync_proxy_rules_latency_microseconds->sync_proxy_rules_latency_seconds -
apiserver_request_count->apiserver_request_total -
apiserver_request_latencies->apiserver_request_latency_seconds -
apiserver_request_latencies_summary->apiserver_request_latency_seconds -
apiserver_dropped_requests->apiserver_dropped_requests_total -
etcd_helper_cache_hit_count->etcd_helper_cache_hit_total -
etcd_helper_cache_miss_count->etcd_helper_cache_miss_total -
etcd_helper_cache_entry_count->etcd_helper_cache_entry_total -
etcd_request_cache_get_latencies_summary->etcd_request_cache_get_latency_seconds -
etcd_request_cache_add_latencies_summary->etcd_request_cache_add_latency_seconds -
etcd_request_latencies_summary->etcd_request_latency_seconds -
transformation_latencies_microseconds->transformation_latencies_seconds -
data_key_generation_latencies_microseconds->data_key_generation_latencies_seconds
Kubernetes Metrics Overhaul という Kubernetes のメトリクスの見直しがあり、一貫性を持ったメトリクス名に変更されました。
API Changes
- [CRI]
PodSandboxとPodSandboxStatusにruntime_handlerという Pod のRuntimeClassの情報をトラックするためのフィールドが追加されました (#73833, @haiyanmeng)