はじめに
このページではKubernetes 1.19のChangelogを基に、SIG Nodeに関連する変更内容をまとめています。
What's New(新情報)
seccompがGeneral Availabilityへ
KubernetesのseccompサポートがGeneral Available(GA)となりました。この機能はワークロードセキュリティをPodやコンテナのシステムコールを制限することで高めるために利用されます。
これにより、seccompProfile
フィールドが Pod と Container securityContext
オブジェクトに追加されました。
securityContext:
seccompProfile:
type: RuntimeDefault|Localhost|Unconfined # choose one of the three
localhostProfile: my-profiles/profile-allow.json # only necessary if type == Localhost
seccomp.security.alpha.kubernetes.io/pod
とcontainer.seccomp.security.alpha.kubernetes.io/...
のannotationは非推奨となり、Kubernetes v1.22.0で削除予定です。
いまのところ上記の新たに追加されたフィールドとannotationは相互に変換されるため、クラスタ内の既存のワークロードを変換するアクションは必要ありません。
- 利用可能なseccompを制御するPodSecurityPolicyはv1.19.0時点では専用フィールドはなく、annotationにより制御するようです
Known Issues(既知の問題点)
- 特になし
Urgent Upgrade Notes(必ず一読してからアップグレードしなければならない事項)
- 特になし
Changes by Kind(種類別の変更)
Deprecation
- 特になし
API Change
- KubeletがGPUのようなアクセラレータのメトリクス収集を無効化する機能を追加しました(#91930, @RenaudWasTaken)
- cAdvisorからこれらベンダー依存の強いGPUのようなメトリクスを取得しないようにするものです
- これらの移行手段としてはPod Resources APIやベンダーが各自実装したメトリクスを利用するようです
-
FeatureGatesの
DisableAcceleratorUsageMetrics
で制御が可能です
- クラスターアドミンはkubeletのコンフィグファイルで
enableSystemLogHander
をfalseに設定することで、/logs
エンドポイントをオフにできるようになりました。enableSystemLogHandler は enableDebuggingHandlers も true に設定されている場合のみ true に設定できます。(#87273, @SaranBalaji90) - ログのタイムスタンプに末尾のゼロが含まれ、固定幅を維持するようになりました。(#91207, @iamchuckss)
- Kubelet の --runonce オプションは、Kubelet の設定ファイルでも
runOnce
として利用できるようになりました。(#89128, @vincent178) - Kubeletは
--logging-format
フラグにより、構造化ロギングをサポートするようになりました。(#91532, @afrouzMashaykhi)- textやjsonがフォーマットとして指定できるようです
- Feature Gatesの
HugePageStorageMediumSize
がデフォルトで有効になり、コンテナレベルで複数のサイズのHugePageリソースを利用できるようになりました (#90592, @bart0sh)- HugePageに関する公式ドキュメントはこちら
- Kubelet の --node-status-max-images オプションは、Kubelet の設定ファイルのnodeStatusMaxImageで利用できるようになりました。(#91275, @knabben)
- kubeletの
--bootstrap-checkpoint-path
は削除されました。(#91577, @knabben) - kubeletの
--cloud-provider
や--cloud-config
オプションは非推奨としてマークされました。(#90408, @knabben) - kubeletの
--enable-server
と--provider-id
オプションがkubeletのコンフィグファイルのenableServer
とproviderID
フィールドで利用可能になりました。 (#90494, @knabben) - kubeletの
--kernel-memcg-notification
オプションがkubeletのコンフィグファイルのkernelMemcgNotificationで利用できるようになりました。(#91863, @knabben) - kubeletの
--really-crash-for-testing
と--chaos-chance
オプションは非推奨としてマークされました。(#90499, @knabben) - kubeletの
--volume-plugin-dir
オプションはkubeletのコンフィグファイルのVolumePluginDirで利用できるようになりました。 (#88480, @savitharaghunathan)
Features
- CRI-APIのImageSpecオブジェクトへアノテーションを追加しました (#90061, @marosset)
- cgroups v2ノードバリデーションのサポートが追加されました(#89901, @neolit123)
- ノードレベルで異なるサイズのHugePageを事前に割り当てるサポートを追加しました(#89252, @odinuge)
-
v1beta1
device plugin APIへ新たにGetPreferredAllocation()
が追加されました。(#92665, @klueska) - アドミッションプラグインのNodeRestrictionは新しいノードで作成する際にkubeletが許可されるノードラベルを、1.16以上でkubeletsが許容する
--node-labels
パラメータに制限するようになりました(#90307, @liggitt) - 証明書のローテートするよう設定されたkubeletは、証明書切れのまでの残り時間を
certificate_manager_server_ttl_seconds
をゲージのメトリクスとして出よくするようになりました。(#91148, @liggitt) - cgroups v2 ユニファイドモードを使用するホスト上での実行をサポート(#85218, @giuseppe)
- Feature Gatesの
RotateKubeletClientCertificate
はGAへ昇格し、kubeletの--feature-gate RotateKubeletClientCertificate パラメータは1.20で削除される予定です。(#91780, @liggitt)
Documentation
- 特になし
Failing Test
- 特になし
Bug or Regression
- CVE-2020-8557 (Medium)。コンテナ /etc/hosts ファイルを経由したノードローカルのサービス拒否(#92916, @joelsmith)
-
/etc/hosts
がephemeral storageの使用量としてカウントされない問題があったようです - これはv1.18.6, 1.17.9, 1.16.13でも修正されています
-
-
startupProbe
は設定しているがreadinessProbe
を設定しないコンテナは、startupProbe
が完了する前ready
とみなされていましたが、現在はnot ready
となるように修正されています(#92196, @thockin) - Dockershim security: Podのsandboxは常に
no-new-privileges
とruntime/default
seccompプロファイルで動くようになりました。Custom ProfileがPodレベルでセットされた時、より小さなseccompプロファイルを持つようになりました。(#90948, @pjbgf) - 犠牲者がコンテナであるSystemOOMの検知を修正(#88871, @dashpole)
- サポートされているhuge pageのサイズが変更された場合の問題を修正(#80831, @odinuge)
- Topology Managerを有効にすると、再利用可能なCPUやdeviceの割り当てが行われない不具合を修正しました(#93189, @klueska)
- CPUManager で、排他的な CPU を誤ったタイミングで解放する原因となっていたリグレッションを修正(#90377, @cbf123)
- initContainerから継承したapp Containerで排他的なCPUを稀に開放する可能性があったCPUManagerのリグレッションを修正 (#90419
- kubeletでパラメータcgroupPerQoS=falseかつcgroupRoot=/dockerとした時、cm.NodeAllocatableRootは
nodeAllocatableRoot=/docker/kubepods
を間違えて返す。正しくは/docker
を返すべきである. (#88970, @mysunshine92) - kubelet resource metricsエンドポイントである/metrics/resourceにおいて、以下のメトリクスの名前を変更します
- Kubelet: kubeletのヘルプ情報に正しいタイプのフラグが表示されないバグを修正(#88515, @SataQiu)
- cluster/ge/manifestsにあるコントロールプレーンマニフェストで静的なコントロールプレーンのPodのプライオリティをリストアします(#89970, @liggitt)
- 1.19rc1で追加されたWindowsノードのためのdevicemanagerをrevertします(#93263, @liggitt)
- mirror podからpod specのterminationGracePeriodSecondsを尊重するよう修正 (#92442, @tedyu)
- この修正はv1.19にしか入っていないようです
- status subresource経由でPodのstatusをアップデートすると、
status.podIP
とstatus.podIPs
のフィールドが整形されているか検証されるようになりました。(#90628, @liggitt) - Evictionするとき、Pending状態のPodはPDBのチェックなしに削除されます(#83906, @michaelgugino)
- [security] golang.org/x/text/encoding/unicodeの脆弱性対応 (#92219, @voor)
Other (Cleanup and Flake)
- Kubeletの
experimental-allocatable-ignore-eviction
オプションは非推奨としてマークされました(#91578, @knabben) - Feature GateのPodShareProcessNamespaceは削除され、PodShareProcessNamespaceは無条件に有効となります。(#90099, @tanjunchen)
- kube-apiserver の
--kubelet-https
フラグは非推奨です。 kube-apiserver の kubelets への接続は無条件にhttps
を使うようになりました (kubelets は v1.0 以前から apiserver が通信するエンドポイントには無条件にhttps
を利用しています)。(#91630, @liggitt - corefile-migrationライブラリをv1.0.8へアップデート(#91856, @wawa0210)
- opencontainers/runtime-specをv1.0.2へアップデート(#89644, @saschagrunert)
-
beta.kubernetes.io/os
とbeta.kubernetes.io/arch
のノードラベルは非推奨です。node selectorをkubernetes.io/os
とkubernetes.io/arch
を使うように更新してください。(#91046, @wawa0210)