5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Kubernetes 1.23: SIG-Node (kubelet) 変更内容

Last updated at Posted at 2022-01-05

本記事は,Kubernetes 変更内容共有会(v1.23) の SIG-Node(kubelet)に関する資料として準備されました.Kubernetes 1.23の CHANGELOG から,SIG-Nodeに関するところを抜粋して紹介します.

:pencil: は筆者(@y1r96)による補足です.

所感

:pencil: エフェメラルコンテナ(Pod作成後に,デバッグ用のコンテナなどを追加して同じnamespaceでデバッグする機能)がBetaに昇格しました.小さいイメージを使っている場合にもデバッグがやりやすくなっていいですね.また,Generic エフェメラルボリューム がGAしました.これは,色々なstorageClass上にエフェメラル(podと同じ生存期間)なPVを設定できる機能で,ローカルボリュームやメモリでは足りない大きな容量のエフェメラルなPVを設定するときに便利そうです.また,CPU Managerの機能拡張(ポリシーオプションの追加や様々なNUMA環境のサポート)も行われており,高性能計算的な計算負荷が大きいワークロードをKubernetesに載せることがやりやすくなりました.

Urgent Upgrade Notes

  • seccomp annotations seccomp.security.alpha.kubernetes.io/podcontainer.seccomp.security.alpha.kubernetes.io/[name] が v1.19 からdeprecatedになり,v1.25で削除されることになりました.かわりに,seccompProfile API を使って設定してください.(#104389, @saschagrunert)

Changes by Kind

Deprecation

  • kubeletのdeprecatedだったオプション --experimental-bootstrap-kubeconfig が削除されました.かわりに, --bootstrap-kubeconfig を使って設定してください. (#103172, @niulechuan)

API Change

  • エフェメラルコンテナがBetaになり,デフォルトで有効になりました. (#105405, @verb)
  • UDPサービスにおける接続がstaleであることを判定するロジックがエンドポイントのreadinessを考慮していなかった,kube-proxyのregression bugを修正しました.(#106163, @aojea)
  • Kubeletにおけるlogのverbosityとflush頻度をコマンドライン引数でしか設定できませんでしたが,設定ファイルからも設定できるようになりました. (#106090, @pohly)
  • JSON log outputが設定可能になり,infoメッセージを標準出力,errorメッセージを標準エラー出力に出力できるようになりました.infoメッセージはバッファリングにも対応しています.デフォルトの動作は,以前のようにどちらも標準出力にバッファリングなしで出力します. (#104873, @pohly)
  • KubeletがノードのOSラベルとpodのOSラベルを照合して,一致しない場合は拒否するようにします. (#105292, @ravisantoshgudimetla)
    • :pencil: v1.23から追加されたpodSpec.os の情報を使って照合を行うようです.
  • KubeletConfigration v1beta1 の ResolverConfig の型が string から *string に変更になりました. (#104624, @Haleygo)
  • v1.17からgraduateしてstableになった NodeLease feature gateが削除されました. (#105222, @cyclinder)
  • deprecated だった --seccomp-profile-root 引数と, seccompProfileRoot config が削除されました. (#103941, @saschagrunert)
  • pod priority ベースの graceful なノードシャットダウンをサポートしました. (#102915, @wzshiming)
    • :pencil: プライオリティごとにpodの終了に要する時間を設定することができます.例えば高プライオリティなpodは,通常のプライオリティのpodに比べ停止まで長時間待つ,というふうな設定をすることができます.詳しくはKEP-2712 をご参照ください.
  • Generic エフェメラルボリューム が GA しました.現在は無条件に有効です.(#105609, @pohly)
    • :pencil: エフェメラルボリューム とは,podの生存期間と同じ生存期間を持つボリュームのことで,有名な例としては emptyDir があります. Generic エフェメラルボリュームとは,このようなボリュームを任意の PersistentVolumeClaimTemplate をインラインに埋め込んで定義できる機能です.
  • Kubeletの --register-with-taints オプションが,config fileの registerWithTaints というフィールドから設定するようになりました. (#105437, @cmssczy)

Feature

  • CPUManager のポリシーオプションがBetaになり,標準で使えるようになりました,また,ポリシーオプションについてそれぞれAlphaやBetaが設定されるようになりました. (#105012, @fromanirh)
  • CPUManager のstaticポリシーに distribute-cpus-across-numa オプションが追加されました.有効にすると,CPUManager がCPU割り当てに複数のNUMAノードが必要な場合,その複数個のNUMAノード上にCPUを均等に割り付けることになります.
    • :pencil: CPUManager とは,v1.12からbetaになったPodのCPU要求を予めCPUコアに割り付ける機能のことです.policyには何も行わないnoneと,割り付けを行うことで予めpodが使うコアを決めておくstaticがあります.これまではstaticポリシーのオプションとしてfull-pcpus-onlyがあり,これは仮想コア(vCPU)ではなく物理コアを割り付けるものでした.この変更ではさらに,複数のNUMAノードに均等に割り付けるdistribute-cpus-across-numaオプションを追加することになります.
  • Portworxプラグインのサポートがcsi-translation-libに追加されました.これにより,CSIMigrationPortworx feature gateが使えるようになります.(#103447, @trierra)
    • :pencil: PortworxはPure Storage社のストレージ・ソリューションで,同社製のストレージ・アプライアンス上のストレージと連携する機能のようです.
  • PodAndContainerStatsFromCRI feature gateが実装され,ユーザがcAdvisorではなくCRI由来のPod Statsを利用することができるようになります. (#103095, @haircommander)
  • pinされたimageのgarbage collectionを行わないように,ユーザが設定できるようになりました. (#103299, @wgahnagl)
  • CRIのv1 APIがデフォルトで使われるようになりました.コンテナランタイムがv1 APIをサポートしていない場合は,v1alpha2 APIが利用されます. (#106501, @ehashman)
  • ノードラベルのreconciliationが,フラグ --node-status-update-frequencyで設定できる間隔で実行されます (#104613, @ravisantoshgudimetla)
    • :pencil: ノードのラベル(kubernetes.io/os, kubernetes.io/arch)が定期的にreconcileされているので,podSpec.os などと照合したpod schedulingが行えるようになりました.
  • PodResource API の GetAllocatableResources エンドポイントがBetaになり,デフォルトで有効になりました.(#105003, @swatisehgal)
  • CSIMigrationGCE フラグがデフォルトで有効になりました.(#104722, @leiyiz)
  • feature DownwardAPIHugePages がデフォルトで有効になりました.(#106271, @mysunshine92)
    • :pencil: DownwardAPI (環境変数Volume によってコンテナ情報をPodに共有する) に,hugepage に関する情報が含まれるようになりました.
  • system-validators ライブラリが v1.6.0 になりました (#106323, @neolit123)

Bug or Regression

  • Kubeletがrejectしたpodがしばらくの間acceptだと考慮されてしまい,ノードにフィットするいくらかのpodがrejectされていました.また,終了中のpod(ただし,failedだと表示されている)もリソースを使ってしまっていたことも考慮されるようになりました. (#104817, @smarterclayton)
  • Kubelet Graceful Shutdown に関するKubernetes Eventが追加されました (#101081, @rphillips)
  • ContainerdにおけるWindows Networkの統計情報がサポートされるようになりました (#105744, @jsturtevant)
  • SecretやConfigMapが正しくマウントできない問題を修正するため,watch based managerの初期化が遅いときにリフレクタを早く終了しないようにします.(#104604, @wojtek-t)
  • Kubeletにおいて証明書のローテーションを行わない場合,カスタムダイヤラを使用しないようにしてください.そうすることでTCP接続を再利用でき,apiserverとkubelet間に1つの接続が存在するようにできます.もし,ユーザがHTTP/1.1を利用してstaleな接続についての問題を実験したい場合は,kubeletに環境変数 DISABLE_HTTP2 を設定することで以前の振る舞いを強制することができます.(#104844, @aojea)
  • exec probe がtimeout した場合のevent messageを改善しました (#106201, @yxxhero)
  • Evicted や他の terminated なpodが, Running phase に戻らないようにします. (#105462, @ehashman)
  • どれだけのリソースが現在使用されていて,いつ,より多くのpodを受け入れることができるのか判断する計算から,Kubeletが既に完了したpodを正しく除くことができていないregressionを修正しました.(#104577, @smarterclayton)
  • Credential Provider Config fileで与えられた環境変数を追加していなかったことで,外部のcredential provider binaryが正しく実行できていなかった問題を修正しました. https://github.com/kubernetes/kubernetes/issues/102750 を参照ください.(#103231, @n4j)
  • cgroup v1とsystemd driverを利用しているとき,たまにpodのcgroupがフリーズする問題を修正しました (#104528, @kolyshkin)
  • Graceful node シャットダウンによって,期待されるinhibit delayよりも実際のinhibit delayの方が大きくなることを許します. (#103137, @wzshiming)
  • Kubelet が Generic Ephemeral Volumes に関する kubelet_volume_stats_* メトリクスを報告していない問題を修正しました (#105569, @pohly)
  • KubeletのNode Grace Shutdownがshutdown時にprobeを終了するようにします (#105215, @rphillips)
  • Kubeletのログローテーションに関するファイルディスクリプタがリークしていたのを修正します (#106382, @rphillips)
  • Kubeletが起動時にフラグを出力するとき,最終的なロギング設定が利用されるようにします (#106520, @pohly)
  • Pod SecurityContext の sysctls の名前にスラッシュが入っているのをサポートするようにします.(#102393, @mengjiao-liu)
  • InitコンテナがOOM Killされた場合に,Podがスタートしない.(#104650, @yxxhero)
  • PodResources interface が変更され,isolated CPUsしか返さないようになった.(#97415, @AlexeyPerevalov)
  • dockershim経由で統計情報を取得するためdockerを呼び出す回数を減らした.Windows環境においてレイテンシが小さくなり,Linux環境においてはcpu cyclesが削減された.(#104287, @jsturtevant)
  • kubelet_started_pods_errors_toral メトリクスからエラーメッセージラベルを取り除いた (#105213, @yxxhero)
  • static podsを更新するときに,grace periodが尊重されるようになった (#104743, @gjkim42)
  • バイナリをPIEモードでビルドするようにしたのをやめた (#105352, @ehashman)
  • dockershim CRI API version を v1alpha2 に戻した (#106808, @saschagrunert)
  • static pod が削除され,固定されたUIDで再作成されたとき,podが正しく再起動されていなかった (#104847, @smarterclayton)

Other (Cleanup or Flake)

  • socketとNUMAノードの対応が1:1でないとき,NUMAノード全体をCPUManagerにおいて割り当てることができるようにしました (#102015, @klueska)
    • :pencil: 近年のCPUはCPUソケットとNUMAノードが1:1対応していないことがあります.例えばAMD EPYCは各CPUソケット内に複数のメモリコントローラを内蔵しており,各コアから見ると近いメモリコントローラと,遠いメモリコントローラがあります.それを考慮してtask schedulingを行うためにNUMAとしてOSに見せる設定をしている場合は,CPUソケット内に複数のNUMAノードがあることになります.
  • StartupProbe feature gate は, v1.20からGAしており,無条件に有効です.このfeature gateが指定できなくなりました.(#104168, @ialidzhikov)
  • SupportPodPidsLimitSupportNodePidsLimit feature gate は,v1.20からGAしており,無条件に有効です.これらのfeature gateが指定できなくなりました. (#104163, @ialidzhikov)
  • cri-tools の依存が v1.22.0 に更新されました (#104430, @saschagrunert)
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?