2022年11月以降にリリースされる Kubernetes バージョンに入るかもしれない機能のなかで私が注目するものを紹介します。
TechFeed Experts Night#7 〜 コンテナ技術を語る - https://techfeed.io/events/techfeed-experts-night-7#1_18330ecfc6838a
TechFeed Experts Night#7 〜 コンテナ技術を語る (2022/11/02)SUDA Kazuki, Preferred Networks, Inc. (@superbrothers)Kubernetes にこれから⼊るかもしれない注⽬機能!2022年11月版!
View Slide
@superbrothersSUDA 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
@superbrothers紹介する機能は導⼊される可能性のあるものです。 ⼊るかもしれないし、⼊らないかもしれません。 少し先の Kubernetes の姿を想像して 楽しむことが⽬的のコンテンツです。3⚠ 注意アルファで入ったとしてもベータに昇格せずに削除される可能性があることにも注意してください!
@superbrothersIn-Place Update of Pod Resources #1287KEP: マージ済み、アルファターゲット: 1.26▶ Pod のリソース要求/制限を Pod の再作成なしに更新できる▶ ステートフルやバッチワークロードでは Pod を⽌めるコストが⼤きいので避けたい42018年11月からずっと取り組んでいる。いよいよ入りそうな予感!!! 入ったらすっごいインパクトがでかい。kube-apiserver🙂Pod リソース要求/制限の更新をリクエストImmutable なので変更不可kube-apiserver🙂KubeletContainer runtime更新されたリソース要求を 受け入れられるか判断。いけそうだったらCRI Runtime Service のUpdateContainerResources API で変更Pod resize サブリソースを使う
@superbrothersUse kubectl to view logs of system services on nodes #2258KEP: マージ済み、アルファターゲット: 1.26▶ kubelet のログをノードへの SSH なしに⾒られるようにしたい!+ systemd-journal と /var/log 以下のログファイルがサポートされる▶ kubelet はすでに隠れてログビューア機能を持っていたんだけど、クライアントがなかった+ systemd-journal のサポートは新たに追加された機能5kubectl node-logs --role master -q kubelet -q criokubelet (root) が journalctl を exec しているので、 実装ミスるとすぐセキュリティホールになりそうでちょっと怖い
@superbrothersKeystone containers KEP #2872KEP: 未マージ, アルファターゲット: 未定アプリケーションコンテナが終了したらサイドカーの状態の関わらず Pod の終了処理が開始される!▶ Job で要のアプリケーションコンテナの実⾏が完了したのも関わらず、サイドカーコンテナが 終了しないことで Job が完了しない問題がある▶ ワークアラウンドにアプリケーションコンテナが終了するときにサイドカーに 何らかのシグナルを送るというのあるが、こんなことはしたくない6apiVersion: v1kind: Podmetadata:name: myapp-podlabels:app: myappspec:containers:- name: myappimage: myappcommand: ['do something']lifecycle:type: Keystone- name: sidecarimage: sidecar-imagecommand: ["do something to help my app"]以前あった “Sidecar KEP” という 開始/終了順序も制御できる提案の派生です1.26 に入りそうだったんですが、”Sidecar KEP” のような順序制御なしで機能を追加しちゃってよいかが、Sidecar WG で議論されることになりました。
@superbrothersAuth API to get self user attributes #3325KEP: マージ済み、アルファターゲット: 1.26⾃⾝の属性を取得するための SubjectAttributesReview API が追加され、またその API を使う kubectl auth whoami コマンドが追加される!▶ Kubernetes にはユーザを表すリソースがない▶ X509 証明書や ID トークンからユーザ属性を取得する認証機能を持っているが、認証後にどのような属性を持っているのかをユーザが確認する⼿段がこれまでなかった7$ kubectl alpha auth whoamiATTRIBUTE VALUEUsername kubernetes-adminGroups [system:masters system:authenticated]ServiceAccount トークンにはSubjectAccessReview API が使えてそれとは別モノです!
@superbrothersKubelet Evented PLEG for Better Performance #3386KEP: マージ済み、アルファターゲット: 1.26PLEG がポーリングからイベントを受け取るように変わって “PLEG is not healthy” が起きにくくなる!▶ Kubelet がコンテナランタイムをポーリングしていたのをイベントを受け取るように変更▶ ポーリングは、ノード上のPod、コンテナの数が増えるとオーバーヘッドが⽣じて、CPU 使⽤率の悪化、パフォーマンス低下、コンテナランタイムの過負荷等の信頼性に起因する問題を起こす8PLEG は Pod Lifecycle Event Generator のことで、コンテナランタイムのリスト要求が遅延すると発生する!KubeletContainer runtime1 Pod 1 goroutine で1秒毎にリスト要求KubeletContainer runtime300秒に1度のリスト要求イベントのウォッチ(CRI Runtime Service GetContainerEvents API)
@superbrothersCEL for Admission Control #3488KEP: マージ済み、アルファターゲット: 1.26CEL を使ってビルトインリソースも含めて柔軟に Validating できるようになる!▶ Admission Webhook はパフォーマンスが悪く、サーバ運⽤も必要で管理者の負荷が⾼い+ CEL を kube-apiserver のインプロセスで処理することでこの課題が解決される9Mutating できないので、やりたければ 別のものも一緒に使わないといけない。API は Mutating も視野に入れて設計されている。Common Expression Language で Google が開発してますapiVersion: admissionregistration.k8s.io/v1alpha1kind: ValidatingAdmissionPolicymetadata:name: "replicalimit-policy.example.com"spec:paramSource:group: rules.example.comkind: ReplicaLimitversion: v1matchConstraints:resourceRules:- apiGroups: ["apps"]apiVersions: ["v1"]operations: ["CREATE", "UPDATE"]resources: ["deployments"]validations:- name: max-replicasexpression: "object.spec.replicas <= params.maxReplicas"messageExpression: "'object.spec.replicas must be no greater than ' + string(params.maxReplicas)"reason: InvalidapiVersion: admissionregistration.k8s.io/v1kind: PolicyBindingmetadata: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/v1kind: ReplicaLimitmetadata:name: "replica-limit-test.example.com"maxReplicas: 3“Bring Your Own CRD” デザインと 呼ばれている
@superbrothersFine-grained SupplementalGroups control #3619KEP: 未マージ、アルファターゲット: 未定PodSecurityContext.SupplementalGroups をコンテナイメージの内容を問わず上書きを強制する!▶ SupplementalGroups は指定した Linux グループで上書きするのではなく追加する実装になっている+ Container Runtime shim の実装によるが、containerd と cri-o はそう実装されている▶ KEP の提案を実現する runc ラッパーを提供してる+ https://github.com/pfnet-research/strict-supplementalgroups-container-runtime10追加する挙動について PFN からセキュリティイシューとして報告したが、 仕様と判断されたので KEP として機能追加を提案中!コンテナイメージUID: 1000GID: 1000Groups: 3000, 4000PodrunAsUser: 1000runAsGroup: 2000SupplementalGroups:5000UID: 1000GID: 2000Groups: 3000, 4000, 5000現状は コンテナイメージの Groups に SupplementalGroups が追加される
機械学習プラットフォームエンジニアWe're hiring! https://www.preferred.jp/ja/careers/▶ ⾃由度・拡張性・使いやすさのトレードオフが取れた⼤規模機械学習プラットフォームの機能設計と開発+ 例: 機械学習ワークフローツール、実験管理ツール、GPUやMN-Core向け統合開発環境の構築▶ ⼤規模機械学習プラットフォームの運⽤と運⽤改善(⾃動化等)+ 例: ⾃動サーバプロビジョニング、パブリッククラウド連携による運⽤効率化、 インフラ健全性の⾃動診断と保守省⼒化▶ ⼤規模機械学習プラットフォーム上での計算資源(GPU, MN-Coreを含む)配分の最適化+ 例: Kubernetes Schedulerの機能拡張、リソース利⽤量制限拡張の開発▶ 最先端の分散計算基盤技術の Proof of Concept 構築及びプラットフォームでの実⽤化+ 例: Kubernetes上での分散強化学習実⾏ツール