はじめに
このページではKubernetes 1.18のChangelogを基に、SIG Nodeに関連する変更内容をまとめています。
What's New(新情報)
Topology Manager がベータになりました
Topology Manager を利用すると、CPU とデバイス(SR-IOV VFs など)のリソース割り当てを調整し、低レイテンシ用に最適化された環境でワークロードが実行できます。
Topology Manager が導入される前は、CPU とデバイスマネージャーのリソース割り当て方法はお互いに独立していたため、複数の CPU を搭載したマルチソケットのサーバーで望ましくないリソースの割り当てが発生し、アプリケーション性能を低下させる可能性がありました。
Known Issues(既知の問題点)
- なし
Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)
kubelet:
-
--enable-cadvisor-endpoints
がデフォルトで無効になりました。cAdvisorのv1 Json APIへアクセスする必要があるときは明示的にkubeletのコマンドラインで有効にする必要があります。このフラグは1.15で非推奨になり、1.19で削除されます。(#87440, @dims)
Cahnges by Kind(種類別の変更)
Deprecation
kubelet:
-
StreamingProxyRedirects
と--redirect-container-streaming
フラグが非推奨になり、将来のリリースで削除される予定です。デフォルトの挙動(Kubeletを通してストリーミングリクエストをプロキシする)のみが唯一サポートされるオプションとなります。もし--redirect-container-streaming=true
に設定してあるなら、このコンフィグをオフにmigrateしなければなりません。そのフラグはv1.20から有効にできなくなります。フラグを設定していない場合、アクションは不要です。(#88290, @tallclair)- この機能の削除の詳細についてはこちらのKEPで確認できます
-
resouce metrics endpoint
/metrics/resource/v1alpha1
と、このエンドポイントで提供されるメトリクスは非推奨になりました。/metrics/resource
エンドポイントにより提供される次のメトリクスを利用するようにしてください。(#86282, @RainbowMango)-
scrape_error
-->scrape_error
-
node_cpu_usage_seconds_total
->node_cpu_usage_seconds
-
node_memory_working_set_bytes
-->node_memory_working_set_bytes
-
container_cpu_usage_seconds_total
-->container_cpu_usage_seconds
-
container_memory_working_set_bytes
-->container_memory_working_set_bytes
-
scrape_error
-->scrape_error
- scrape_errorがなぜ2回も登場しているのかわかりませんが、Change Log通りに記載しておきます
-
Other deprecations:
-
k8s.io/node-api
コンポーネントはアップデートされなくなりました。代わりにk8s.io/api
にあるRuntimeClass typeを利用し、生成されたクライアントはk8s.io/client-go内にあります。(#87503, @liggitt)
API Change
Configuration file changes
kube-proxy:
- Kubelet pod resources APIはアクティブなPodのみに関する情報を提供するようになりました。(#79409, @takmatsu)
- kube-proxyの項目に入っていましたが、kubeletの変更でした。
Features graduated to beta:
Feature(機能追加)
kubeletとデフォルトのdocker runtimeは、ターゲットコンテナのLinuxプロセス名前空間でのエフェメラルコンテナの実行をサポートするようになりました。他のコンテナ runtimeは、そのruntimeで使用可能なる前に、この機能のサポートを実装する必要があります。(#84731, @verb)
CPUManagerのステートファイルの基本的な形式が変更されました。アップグレードはシームレスである必要がありますが、以前の形式の読み取りに依存するサードパーティツールは更新する必要があります。(#84731, @verb)
"--node-ip ::"をkubeletへ渡して、ノードのプライマリアドレスとして使用するIPv6アドレスを自動検出する必要があることを示すことができます(#85850, @danwinship)
Metrics
- 証明書のローテーションを実行できない場合、
Kubeletはserver_expiration_renew_failure
およびclient_expiration_renew_failure
メトリックカウンターをエクスポートするようになりました。 (#84614、@rphillips)
その他
Windows contaiersでCPU limitsが尊重されるようになりました。ノードが過剰にプロビジョニングされている場合、重み付けは使用されず、limitsのみが考慮されます。(#86101, @PatrickLang)
Podがephemeral storageの制限を超えることによるevictionは
kubelet_evictions
メトリクスでアラート通知できるようになりました。(#87906, @smarterclayton)PodがIPアドレスを取得するのを防ぐリグレッションを修正しました(#85993, @chendotjs)
ノードのイベントで"involvedObject"の欠落している"apiVersion"を修正しました。(#87537, @uthark)
ポッドボリュームの処理が失敗したときに、kubeletによるPVC / PVオブジェクトの繰り返しフェッチを防止する修正。これにより、これらのエラーシナリオでAPIサーバーが破損するのを防ぐことができますが、ポッドの処理量のエラーによっては、再試行までに最大2〜3分かかることがあります。(#88141, @tedyu)
TopologyManagerのバグを修正しました。以前、TopologyMaangerは何らかの方法でシリアル化された場合にのみ配置を保証していました。コンテナ作成のすべてのシナリオで配置が保証されるようになりました。(#87759, @klueska)
kubeletがpodのreadyステータスの更新を失敗するというリグレッションを修正しました(#84951, @tedyu)
kubeletが誤って同時にPodのReconcilation loopsを動かし、クラッシュする問題が修正されました。(#89055, @tedyu)
削除または再作成されたPodでのkubeletによって報告されたPodのステータスに関する問題を修正しました。(#86320, @liggitt)
- metrics-serverまたはprometheusを介して収集されたKubeletメトリックは、4つ以上のポッドを実行しているWindowsノードでタイムアウトしなくなりました。(#87730, @marosset)
- Kubeletメトリックがバケットに変更されました。たとえば、exec/{podNamespace}/{podID}/{containerName}は単なるexecです。(#87913, @marosset)
- KubeletはAPIサーバに不必要なPodステータスの更新操作を実行しなくなりました(#88591, #smarterclayton)