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月版!

    View Slide

  2. @superbrothers

    SUDA Kazuki / @superbrothers
    ▶ Preferred Networks, Inc. / エンジニア
    ▶ Scalar, Inc. / 技術アドバイザ
    ▶ Kubernetes Meetup Tokyo, K8s@home 共同主催者
    ▶ Cloud Native Ambassador (CNCF)
    ▶ 技術評論社「Kubernetes実践⼊⾨」、「みんなのDocker/Kubernetes」共著書
    ▶ オライリー「⼊⾨ Prometheus」、「Kubernetes で実践するクラウドネイティブ DevOps」監訳書
    ▶ stern ツールメンテナ(https://github.com/stern/stern)
    2

    View Slide

  3. @superbrothers

    紹介する機能は導⼊される可能性のあるものです。

    ⼊るかもしれないし、⼊らないかもしれません。

    少し先の Kubernetes の姿を想像して

    楽しむことが⽬的のコンテンツです。
    3
    ⚠ 注意
    アルファで入ったとしてもベータに昇格せずに


    削除される可能性があることにも注意してください!

    View Slide

  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 サブリソースを使う

    View Slide

  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 しているので、

    実装ミスるとすぐセキュリティホールになりそうでちょっと怖い

    View Slide

  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 で議論されることになりました。

    View Slide

  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 が使えてそれとは別モノです!

    View Slide

  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)

    View Slide

  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” デザインと

    呼ばれている

    View Slide

  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 が追加される

    View Slide

  11. 機械学習プラットフォームエンジニア
    We're hiring! https://www.preferred.jp/ja/careers/
    ▶ ⾃由度・拡張性・使いやすさのトレードオフが取れた⼤規模機械学習プラットフォームの機能設計と開発
    + 例: 機械学習ワークフローツール、実験管理ツール、GPUやMN-Core向け統合開発環境の構築
    ▶ ⼤規模機械学習プラットフォームの運⽤と運⽤改善(⾃動化等)
    + 例: ⾃動サーバプロビジョニング、パブリッククラウド連携による運⽤効率化、

    インフラ健全性の⾃動診断と保守省⼒化
    ▶ ⼤規模機械学習プラットフォーム上での計算資源(GPU, MN-Coreを含む)配分の最適化
    + 例: Kubernetes Schedulerの機能拡張、リソース利⽤量制限拡張の開発
    ▶ 最先端の分散計算基盤技術の Proof of Concept 構築及びプラットフォームでの実⽤化
    + 例: Kubernetes上での分散強化学習実⾏ツール

    View Slide