はじめに
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/os
とbeta.kubernetes.io/arch
ラベルはv1.14から非推奨です。これらはv1.18で削除される予定です。 - v1.14から非推奨となっている
--containerized
は将来のバージョンで削除されます。(#74267, @dims)-
--containerized
フラグについてはKubernetes 1.14: SIG Node の変更内容で@yuanyingさんがまとめています。
-
- cAdvisorのjson endpointが非推奨となりました。(#78504, @dashpole)
-
/spec
,/stats/*
が非推奨になりました。
-
注目機能 (Notable Features)
Stable
- サードパーティデバイスモニタリングがデフォルトで有効になりました(
KubeletPodResources
がベータへ)(#77274, @RenaudWasTaken)- v1.13, v1.14ではKubeletPodResourcesのfeature gatesを有効にすることで利用可能でした。CHANGELOGにはStableに記載されていましたがv1.15でKubeletPodResourcesはbetaに昇格しています
- この機能を使うとサードパーティデバイスのメトリクスを作成する際に、そのデバイスを利用しているPodやnamespaceなどの情報をkubelet経由で取得し、メトリクスのラベルに追加出来るような機能のようです。手元にGPUが無かったため検証できませんでしたが、例えばこういう実装があるようです。
Beta
-
SupportNodePidsLimit
がベータになり、デフォルトで有効になっています。feature gatesにてSupportNodePidsLimit = true
を設定する必要はもうありません。(#76221, @RobertKrawitz)-
cpuやメモリと同様に
--system-reserved
や--kube-reserved
でpidがデフォルトで指定可能になりました。
-
cpuやメモリと同様に
Alpha
なし
Staging Repositries
Misc
- Kubeletプラグインの登録に、プラグインの登録(CSIやデバイスプラグインなど)が失敗した場合の再試行およびexponential backoffロジックが追加されました。(#73891, @taragu)
その他の注目機能(Other notable changes)
- dockershimコンテナランタイムは、RuntimeClassからdockerランタイムハンドラを受け取るようになりました。 (#78323, @talclair)
-
下記のようなRuntimeClassを作成するとき
docker
をhandlerとして指定することができます。- v1.14.3で同じようにRuntimeClassを作成し、そのRumtimeClassを指定してもエラーでPodは起動できません。
Failed create pod sandbox: rpc error: code = Unknown desc = RuntimeHandler "docker" not supported
- v1.14.3で同じようにRuntimeClassを作成し、そのRumtimeClassを指定してもエラーでPodは起動できません。
-
下記のようなRuntimeClassを作成するとき
apiVersion: node.k8s.io/v1beta1
kind: RuntimeClass
metadata:
name: docker
handler: docker
- initコンテナはinitコンテナ自身のフィールドの値を環境変数として取得できるようになりました。(#75109, @yuchengwu)
-
initコンテナが
env.valuesFrom.resourceFieldRef.containerName
で検索されるコンテナの対象に含まれるようになりました。
-
initコンテナが
-
UpdateContainerResources
オペレーションを行った際にcontainer_status
ラベルとして記録されなくなりました。現在はupdate_container
ラベルを使用しています。 (#75278, @Nessex)- メトリクスのラベルが変わったようです。
- ブートストラップまたはクライアント証明書のローテーションが無効になっているとハートビート失敗時にkubelet-> API接続を閉じることができない問題を修正しました (#78016, @gaorong)
- プラグインのソケットディレクトリに対してSELinuxラベルをセットする(#73241, @vikaschoudhary16)
- SELinuxが有効かつUnprivilegedなプラグインを起動した場合にプラグインが正常に起動できないバグが修正されたようです。
- コンテナイメージの中で指定されているRoot以外のユーザIDの検出を修正しました。(#78261, @tallclair)
-
securityContext
でrunAsNonRoot: true
を指定し、Dockerfile等の中でRoot以外のユーザを指定しているイメージを利用しても検知されずError: container has runAsNonRoot and image will run as root
が発生するバグがありました。
-
- シグナル処理はそれを必要とするhyperkubeのそれぞれ(apiserverやkubeletなど)で初期化されるようになりました。(#76659, @S-Chan)
- Kubeletは、apiserverからサポートされている場所でprotobufオブジェクトを適切に要求するようになり、大規模クラスタでの負荷が軽減されます。(#75602, @smarterclayton)