Edited at

Kubernetes 1.15: SIG Node の変更内容


はじめに

Kubernetes 1.15 の CHANGELOG から SIG Node の取り組みについてまとめます。


What's new

なし


既知の問題点(Known Issues)

なし


アップグレード時の注意点 (Urgent Upgrade Notes)


  • 非推奨であったkubeletのセキュリティコントロールであるAllowPrivileged, HostNetworkSources, HostPIDSources, HostIPCSourcesは削除されました。代わりにPodSecurityPolicyなどのAdmission Controllを介してこれらの制御をする必要があります。 (#77820, @msau42)


  • 非推奨であったkubeletの--allow-privilegedは削除されました。kubeletのスクリプトまたはマニフェストから、このフラグを削除してください。(#77820, @msau42)


  • kubeletはノード、コンテナランタイム、kubelet、pod、コンテナのcgroupsのメトリクスのみを収集するようになりました。(#72787, @dashpole)



非推奨・廃止される機能 (Deprecations and Removals)

kubelet



  • beta.kubernetes.io/osbeta.kubernetes.io/archラベルはv1.14から非推奨です。これらはv1.18で削除される予定です。

  • v1.14から非推奨となっている--containerizedは将来のバージョンで削除されます。(#74267, @dims)



  • cAdvisorのjson endpointが非推奨となりました。(#78504, @dashpole)



    • :pencil: /spec, /stats/*が非推奨になりました。




注目機能 (Notable Features)

Stable


  • サードパーティデバイスモニタリングがデフォルトで有効になりました(KubeletPodResourcesがベータへ)(#77274, @RenaudWasTaken)



    • :pencil: v1.13, v1.14ではKubeletPodResourcesのfeature gatesを有効にすることで利用可能でした。CHANGELOGにはStableに記載されていましたがv1.15でKubeletPodResourcesはbetaに昇格しています


    • :pencil: この機能を使うとサードパーティデバイスのメトリクスを作成する際に、そのデバイスを利用しているPodやnamespaceなどの情報をkubelet経由で取得し、メトリクスのラベルに追加出来るような機能のようです。手元にGPUが無かったため検証できませんでしたが、例えばこういう実装があるようです。



Beta



  • SupportNodePidsLimitがベータになり、デフォルトで有効になっています。feature gatesにてSupportNodePidsLimit = trueを設定する必要はもうありません。(#76221, @RobertKrawitz)



    • :pencil: cpuやメモリと同様に--system-reserved--kube-reservedでpidがデフォルトで指定可能になりました。



Alpha

なし

Staging Repositries

Misc


  • Kubeletプラグインの登録に、プラグインの登録(CSIやデバイスプラグインなど)が失敗した場合の再試行およびexponential backoffロジックが追加されました。(#73891, @taragu)


その他の注目機能(Other notable changes)


  • dockershimコンテナランタイムは、RuntimeClassからdockerランタイムハンドラを受け取るようになりました。 (#78323, @talclair



    • :pencil: 下記のようなRuntimeClassを作成するときdockerをhandlerとして指定することができます。

    • v1.14.3で同じようにRuntimeClassを作成し、そのRumtimeClassを指定してもエラーでPodは起動できません。Failed create pod sandbox: rpc error: code = Unknown desc = RuntimeHandler "docker" not supported



apiVersion: node.k8s.io/v1beta1

kind: RuntimeClass
metadata:
name: docker
handler: docker


  • initコンテナはinitコンテナ自身のフィールドの値を環境変数として取得できるようになりました。(#75109, @yuchengwu)




  • UpdateContainerResourcesオペレーションを行った際にcontainer_statusラベルとして記録されなくなりました。現在はupdate_containerラベルを使用しています。 (#75278, @Nessex)



    • :pencil: メトリクスのラベルが変わったようです。



  • ブートストラップまたはクライアント証明書のローテーションが無効になっているとハートビート失敗時にkubelet-> API接続を閉じることができない問題を修正しました (#78016, @gaorong)

  • プラグインのソケットディレクトリに対してSELinuxラベルをセットする(#73241, @vikaschoudhary16)



    • :pencil: SELinuxが有効かつUnprivilegedなプラグインを起動した場合にプラグインが正常に起動できないバグが修正されたようです。



  • コンテナイメージの中で指定されているRoot以外のユーザIDの検出を修正しました。(#78261, @tallclair)



    • :pencil: securityContextrunAsNonRoot: trueを指定し、Dockerfile等の中でRoot以外のユーザを指定しているイメージを利用しても検知されず Error: container has runAsNonRoot and image will run as rootが発生するバグがありました。



  • シグナル処理はそれを必要とするhyperkubeのそれぞれ(apiserverやkubeletなど)で初期化されるようになりました。(#76659, @S-Chan)

  • Kubeletは、apiserverからサポートされている場所でprotobufオブジェクトを適切に要求するようになり、大規模クラスタでの負荷が軽減されます。(#75602, @smarterclayton)