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:unauthenticated
kubectl 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
ラベルはpod
andcontainer
ラベルとともに移行期間は存在しますが、将来的に削除されます。(#69099, @ehashman)-
Kubernetes Metrics Overhaul というメトリクス見直しの一貫で、一貫性をもったラベル名に統一されました。いままではメトリクスによって
pod_name
とpod
別のラベルが使われており、同時に使う場合は label_replace を使った workaround が必要でした。
-
Kubernetes Metrics Overhaul というメトリクス見直しの一貫で、一貫性をもったラベル名に統一されました。いままではメトリクスによって
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/os
andbeta.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 で削除されます
CustomPodDNS
HugePages
MountPropagation
PersistentLocalVolumes
- CoreDNS: 以下のディレクティブまたはキーワードは deprecated となり、v1.15 で削除されます
-
kubernetes
プラグインのupstream
オプション。v1.15 ではデフォルトの挙動になります -
proxy
プラグイン。forward
プラグインに置き換えられます
-
削除または deprecated となったメトリクス
削除されたメトリクス
reflector_items_per_list
reflector_items_per_watch
reflector_last_resource_version
reflector_list_duration_seconds
reflector_lists_total
reflector_short_watches_total
reflector_watch_duration_seconds
reflector_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)