Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubernetes にこれから入るかもしれない注目機能!(2022年11月版)

Kazuki Suda
November 02, 2022

Kubernetes にこれから入るかもしれない注目機能!(2022年11月版)

2022年11月以降にリリースされる Kubernetes バージョンに入るかもしれない機能のなかで私が注目するものを紹介します。

TechFeed Experts Night#7 〜 コンテナ技術を語る - https://techfeed.io/events/techfeed-experts-night-7#1_18330ecfc6838a

Kazuki Suda

November 02, 2022
Tweet

More Decks by Kazuki Suda

Other Decks in Technology

Transcript

  1. TechFeed Experts Night#7 〜 コンテナ技術を語る (2022/11/02) SUDA Kazuki, Preferred Networks,

    Inc. (@superbrothers) Kubernetes に これから⼊るかもしれない注⽬機能! 2022年11月版!
  2. @superbrothers  SUDA Kazuki / @superbrothers ▶ Preferred Networks, Inc.

    / エンジニア ▶ Scalar, Inc. / 技術アドバイザ ▶ Kubernetes Meetup Tokyo, [email protected] 共同主催者 ▶ Cloud Native Ambassador (CNCF) ▶ 技術評論社「Kubernetes実践⼊⾨」、「みんなのDocker/Kubernetes」共著書 ▶ オライリー「⼊⾨ Prometheus」、「Kubernetes で実践するクラウドネイティブ DevOps」監訳書 ▶ stern ツールメンテナ(https://github.com/stern/stern) 2
  3. @superbrothers  紹介する機能は導⼊される可能性のあるものです。 
 ⼊るかもしれないし、⼊らないかもしれません。 
 少し先の Kubernetes の姿を想像して 


    楽しむことが⽬的のコンテンツです。 3 ⚠ 注意 アルファで入ったとしてもベータに昇格せずに 削除される可能性があることにも注意してください!
  4. @superbrothers  In-Place Update of Pod Resources #1287 KEP: マージ済み、アルファターゲット:

    1.26 ▶ Pod のリソース要求/制限を Pod の再作成なしに更新できる ▶ ステートフルやバッチワークロードでは Pod を⽌めるコストが⼤きいので避けたい 4 2018年11月からずっと取り組んでいる。 いよいよ入りそうな予感!!! 入ったらすっごいインパクトがでかい。 kube-apiserver 🙂 Pod リソース要求/制限の 更新をリクエスト Immutable なので変更不可 kube-apiserver 🙂 Kubelet Container 
 runtime 更新されたリソース要求を
 受け入れられるか判断。 いけそうだったら CRI Runtime Service の UpdateContainerResources API で変更 Pod resize サブリソースを使う
  5. @superbrothers  Use kubectl to view logs of system services

    on nodes #2258 KEP: マージ済み、アルファターゲット: 1.26 ▶ kubelet のログをノードへの SSH なしに⾒られるようにしたい! + systemd-journal と /var/log 以下のログファイルがサポートされる ▶ kubelet はすでに隠れてログビューア機能を持っていたんだけど、クライアントがなかった + systemd-journal のサポートは新たに追加された機能 5 kubectl node-logs --role master -q kubelet -q crio kubelet (root) が journalctl を exec しているので、
 実装ミスるとすぐセキュリティホールになりそうでちょっと怖い
  6. @superbrothers  Keystone containers KEP #2872 KEP: 未マージ, アルファターゲット: 未定

    アプリケーションコンテナが終了したらサイドカーの状態の関わらず Pod の終了処理が開始される! ▶ Job で要のアプリケーションコンテナの実⾏が完了したのも関わらず、サイドカーコンテナが 
 終了しないことで Job が完了しない問題がある ▶ ワークアラウンドにアプリケーションコンテナが終了するときにサイドカーに 
 何らかのシグナルを送るというのあるが、こんなことはしたくない 6 apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp image: myapp command: ['do something'] lifecycle: type: Keystone - name: sidecar image: sidecar-image command: ["do something to help my app"] 以前あった “Sidecar KEP” という
 開始/終了順序も制御できる提案の派生です 1.26 に入りそうだったんですが、”Sidecar KEP” のような順序制御なしで 機能を追加しちゃってよいかが、Sidecar WG で議論されることになりました。
  7. @superbrothers  Auth API to get self user attributes #3325

    KEP: マージ済み、アルファターゲット: 1.26 ⾃⾝の属性を取得するための SubjectAttributesReview API が追加され、またその API を使う 
 kubectl auth whoami コマンドが追加される! ▶ Kubernetes にはユーザを表すリソースがない ▶ X509 証明書や ID トークンからユーザ属性を取得する認証機能を持っているが、認証後にどのよう な属性を持っているのかをユーザが確認する⼿段がこれまでなかった 7 $ kubectl alpha auth whoami ATTRIBUTE VALUE Username kubernetes-admin Groups [system:masters system:authenticated] ServiceAccount トークンには SubjectAccessReview API が使えてそれとは別モノです!
  8. @superbrothers  Kubelet Evented PLEG for Better Performance #3386 KEP:

    マージ済み、アルファターゲット: 1.26 PLEG がポーリングからイベントを受け取るように変わって “PLEG is not healthy” が起きにくくなる! ▶ Kubelet がコンテナランタイムをポーリングしていたのをイベントを受け取るように変更 ▶ ポーリングは、ノード上のPod、コンテナの数が増えるとオーバーヘッドが⽣じて、CPU 使⽤率の 悪化、パフォーマンス低下、コンテナランタイムの過負荷等の信頼性に起因する問題を起こす 8 PLEG は Pod Lifecycle Event Generator のことで、 コンテナランタイムのリスト要求が遅延すると発生する! Kubelet Container 
 runtime 1 Pod 1 goroutine で1秒毎にリスト要求 Kubelet Container 
 runtime 300秒に1度のリスト要求 イベントのウォッチ (CRI Runtime Service GetContainerEvents API)
  9. @superbrothers  CEL for Admission Control #3488 KEP: マージ済み、アルファターゲット: 1.26

    CEL を使ってビルトインリソースも含めて柔軟に Validating できるようになる! ▶ Admission Webhook はパフォーマンスが悪く、サーバ運⽤も必要で管理者の負荷が⾼い + CEL を kube-apiserver のインプロセスで処理することでこの課題が解決される 9 Mutating できないので、やりたければ
 別のものも一緒に使わないといけない。 API は Mutating も視野に入れて設計されている。 Common Expression Language で Google が開発してます apiVersion: admissionregistration.k8s.io/v1alpha1 kind: ValidatingAdmissionPolicy metadata: name: "replicalimit-policy.example.com" spec: paramSource: group: rules.example.com kind: ReplicaLimit version: v1 matchConstraints: resourceRules: - apiGroups: ["apps"] apiVersions: ["v1"] operations: ["CREATE", "UPDATE"] resources: ["deployments"] validations: - name: max-replicas expression: "object.spec.replicas <= params.maxReplicas" messageExpression: "'object.spec.replicas must be no greater than ' + string(params.maxReplicas)" reason: Invalid apiVersion: admissionregistration.k8s.io/v1 kind: PolicyBinding metadata: name: "replicalimit-binding-test.example.com" spec: policy: "replicalimit-policy.example.com" params: "replica-limit-test.example.com" matchResources: namespaceSelectors: - key: environment, operator: In, values: ["test"] apiVersion: rules.example.com/v1 kind: ReplicaLimit metadata: name: "replica-limit-test.example.com" maxReplicas: 3 “Bring Your Own CRD” デザインと
 呼ばれている
  10. @superbrothers  Fine-grained SupplementalGroups control #3619 KEP: 未マージ、アルファターゲット: 未定 PodSecurityContext.SupplementalGroups

    をコンテナイメージの内容を問わず上書きを強制する! ▶ SupplementalGroups は指定した Linux グループで上書きするのではなく追加する実装になっている + Container Runtime shim の実装によるが、containerd と cri-o はそう実装されている ▶ KEP の提案を実現する runc ラッパーを提供してる + https://github.com/pfnet-research/strict-supplementalgroups-container-runtime 10 追加する挙動について PFN からセキュリティイシューとして報告したが、
 仕様と判断されたので KEP として機能追加を提案中! コンテナイメージ UID: 1000 GID: 1000 Groups: 3000, 4000 Pod runAsUser: 1000 runAsGroup: 2000 SupplementalGroups: 5000 UID: 1000 GID: 2000 Groups: 
 3000, 4000, 5000 現状は コンテナイメージの Groups に
 SupplementalGroups が追加される
  11. 機械学習プラットフォームエンジニア We're hiring! https://www.preferred.jp/ja/careers/ ▶ ⾃由度・拡張性・使いやすさのトレードオフが取れた⼤規模機械学習プラットフォームの機能設計と開発 + 例: 機械学習ワークフローツール、実験管理ツール、GPUやMN-Core向け統合開発環境の構築 ▶

    ⼤規模機械学習プラットフォームの運⽤と運⽤改善(⾃動化等) + 例: ⾃動サーバプロビジョニング、パブリッククラウド連携による運⽤効率化、 
 インフラ健全性の⾃動診断と保守省⼒化 ▶ ⼤規模機械学習プラットフォーム上での計算資源(GPU, MN-Coreを含む)配分の最適化 + 例: Kubernetes Schedulerの機能拡張、リソース利⽤量制限拡張の開発 ▶ 最先端の分散計算基盤技術の Proof of Concept 構築及びプラットフォームでの実⽤化 + 例: Kubernetes上での分散強化学習実⾏ツール