Open90

Kubernetes - 2023

  • sidecar container の起動停止順に関する本命の KEP 来ました。initContainer にフィールドを追加して起動しっぱなしにできるだけで、変更は最小限に (KEP 3761)
  • Pod の TCP/HTTP probe でソケット解放できずに conntrack table を占有する話 (k/k#115143, video, blog)
  • Pod 内の loopback interface の必要性 (containerd/containerd#8006)
  • KEP 3759 の流れで initContainer と Container で type を共有するの辞めたい話(k/k#115362)
  • Kubernetes の開発に関わりたいならアントニオさんに余計な負荷 (メンタリング) を掛けずに壊れたテストを修正できる人になるのが良さそう (comment - kubernetes/enhancements#3788)
  • 大規模クラスタでパフォーマンスが改善したと話題の iptables のリストア周りの最適化が 1.27 で β に昇格してデフォルト有効化 (k/k#115138)
  • k8s.gcr.io でのイメージの公開が 2023/4/1 から停止される KEP がマージ、まだ移行してない人は registry.k8s.io に移行が必要 (kubernetes/enhancent#3723, blog)
  • kubectl get/describe でタイムゾーンが異なる理由 (comment - k/k#102316)
  • kubelet やコンテナランタイムのログを kubectl で見たい要望が EKS / AKS からあるのが不思議。GKE だと Fluent Bit がデフォで転送するから不要?(comment - k/k#96120)
  • リージョンを跨いだコントロールプレーンと etcd の立地の近い 2 リージョンクラスタ化の事例 (comment - k/k#3765)
  • Kubernetes コミュニティのイメージを registry.k8s.io 経由で ECR からも提供するために rclone で GCS -> S3 に同期してるらしい (kubernetes/enhancement#3723)
    • OCI 準拠で GAR -> ECR に同期できるツールを作るまでは GCR 消せない
  • Job などから Pod を生成する際に、リソース名の一部をサーバー側でランダム生成させると同名で衝突してしまうことがある (k/k#115489)
  • クラウドプロバイダー毎の Service type LoadBalancer のヘルスチェックの違いとそれぞれに欠点がある話 (comment - KEP 3458)
  • 最新の iptables の改善により大規模環境で eBPF 実装より高速化している?(comment - kubernetes/enhancement#3824)
  • seccomp をデフォルト有効化する議論の中で、ワークロードのパフォーマンス悪化の可能性が問題に (comment - KEP-2413)
    • kernel 5.16 でデフォルトの挙動が変わっているが、パッチが入っていないと Spectre の脆弱性回避でパフォーマンスが 1.5 倍程度悪化する可能性がある (comment - KEP-2413)
  • Go で特定の network namespace 内で HTTP リクエストを送る方法 (blog)
  • Kubernetes の flaky テストの調査方法 (gist)
  • EKS クラスタ内の証明書管理のコントローラー (eks-certificate-controller) を OSS 化予定 (comment- aws/container-roadmap#1947)
  • 昔は NodePort のポート番号でソケットを開くことでユーザーの誤用を避けていた (k/k#108496)
  • 削除されたノードの情報を使って処理を追加したい場合は、ノードに finalizer 付けられず informer キャッシュが使えないので、workqueue を別に用意してあげれば良い (slack, k/k#115529)
  • ノード上のカーネルパラメータの調整など oneshot な処理を DaemonSet + affinity + ラベル操作で実現すると思わぬ副作用をもたらすことがある (comment - k/k#64623)
  • EKS の人が顧客に頼まれて Argo CD の負荷の指標を知るためのベンチマークを作りたいって話 (slack)
    • nimakaviani は以前 Knative にも関わっていて、AWS に移って Spinnaker とか CI/CD 周りを見てたはずだけど Argo CD を見るようになったっぽい? (blog)
  • Web 上でコンテナイメージのマニフェストを調べるツール (site)
    • Cloud Run 上で crane のコマンド実行して結果を表示しているだけ
  • KEP-127 user namespace で使われようとしている idmapped mounts の話 (video, kubernetes/enhancements#3811)
  • Karpenter はノードに finalizer 付けてるからノードを消すと VM が消えることが保証されている (comment - kk#115139)
    • 起動時にノードに taints を付与する機能もあって、Pod がスケジュールされる前に事前処理が必要なケース (e.g. Cilium のネットワーク周りのセットアップ) に対応できるようにしている (aws/karpenter#1727)
  • 作成してすぐにオブジェクトを消した場合にエッジケース (e.g. watch し直し) で DELETE のイベントを検知できないことがある (k/k#115620)
    • CREATE の処理が終わっていないオブジェクトは informer のキャッシュに含められない (comment - k/k#115658)
  • 存在しない ConfigMap/Secret をマウントした Pod を削除すると消すのに時間が掛かるバグ (k/k#115459)
  • Pod の probe 失敗のログにレスポンスボディを含められない (comment - k/k#99425, k/k#115670)
    • Pod の probe が NetworkPolicy をバイパスできるため、同一ノード上の別の namespace の Pod に対してリクエストを投げられてしまう
  • Go 1.20 に上げて Kubernetes の ARM ビルドが失敗する問題の調査 (slack, golang/go#58425)
  • CRIU でメモリマップを含めたコンテナの状態のチェックポイント (スナップショット) を取得してリストアする機能を containerd に入れたい話 (comment - containerd/containerd#6965, KEP - 2008)
    • Podman <-> CRI-O の相互運用は可能だけど、containerd の独自フォーマットがコンテナイメージ内に含まれているらしく containerd 以外でリストアできないらしい
    • opencontainers/image-spec#962 で CRIU のチェックポイント用の OCI イメージの仕様の議論を進めているが、結論が出ていない
    • OCI で仕様化されていない実装を containerd に入れたくないけど、Podman / CRI-O / containerd で実装すれば仕様の議論が進めやすいのはあるので悩みどころ
  • Kubernetes コミュニティが所有する GCR / Artifact Registry から S3 にイメージをコピーするための rclone の置き換えツール (kubernetes/registry.k8s.io#151)
  • KEP- 2008 の FOSDEM 2023 での発表 (video)
    • CRIU 自体は本番利用が既にあって、Google の Borg だと優先度の低いジョブ (e.g. Youtube の録画) を他のノードに移動させている
    • CRIU は ptrace で対象のプロセスを捕まえてパラサイトコードと呼ばれるものに置き換えてメモリページをダンプして終わったらパラサイトコードを消す (site)
    • GPU とか外部のハードウェアにある状態まではチェックポイントに含められないのが欠点だが、CRIU 対応した GPGCPU の plugin が提供されてたりする
    • 理論的には ESTABLISHED な TCP コネクションも復元できなくはないけど、5-tuple が同じ必要があったり、マイグレーション中にコネクションがタイムアウトして切れるだろうし、需要があるかは微妙な感じらしい
    • kubectl に統合するときは kubectl checkpoint/migration も良いけど、kubectl drain に組み込んだらどうか
  • iptables の設定変更の反映時間 (a.k.a. network latency) が減った (k/k#114181) ことで、recync の間隔を狭めた (k/k#114229) ら逆にノード全体の CPU 使用率が上がって他のワークロードに影響が出ちゃったケース (k/k#115720)
    • resync の間隔は Service、ノード、Endpoint、iptables のルールの数から動的に計算できた方が良いってのはきっとそう
  • Kubernetes のノードイメージ内に必要なコンテナイメージを事前キャッシュする場合は、ctr image pull じゃなくて ctr image fetch で unpack しない方がディスク容量を圧迫せずに済む (awslabs/amazon-eks-ami#1144)
    • ノードがディスク容量 85% を超えた状態で起動するので、Kublet のイメージ GC が発動して未使用のイメージの削除処理が走り、ノードの状態が Ready になるのが遅れる (comment - awslabs/amazon-eks-ami#1142)
  • Unhealthy なノードがある場合に、NoExecute の taint を付ける controller と処理する controller を分けたいらしい (k/k#115779)
    • scheduler みたいに taint を処理するカスタム controller を挟み込めるようにしたいらしい
    • Apple でこれまでは taint manager を無効化して自作の eviction 処理をするコントローラーを入れていたっぽいけど、Kubernetes 1.27 から taint manager を無効化できなくなる (無効化するフラグがなくなる) ので困っている
  • CRI に準拠したランタイムは、--grace-period の値を変更して連続で反映しても最初に反映したときの値が優先される (comment - k/k#113717)
  • Seccomp が GA するけど、デフォルトで有効化すると、1.27 にアップグレードした後で起動できない Pod が出てきそうだから、デフォルト無効に戻す話 (k/k#115719)
  • ECS のタスクが ELB から外れてから停止処理に入るようになった (blog)
  • リファレンス実装だからって konnectivity の名前をリポジトリに含めずに細々やるよりは、含めて SEO 対策した方が困惑しないって話 (kubernetes-sigs/apiserver-network-proxy#461)
  • Checkpoint で生成されたイメージはベースイメージ以外の差分で、リストアする時にノード上にベースイメージが存在しなければダウンロード必要。それをスマートにやる方法はない (comment - kubernetes/enhancements#2008)
  • gRPC probe を使う場合は、liveness/readiness で指定する service を変えるかポート番号を変える想定 (comment - k/k#115651, video)
  • static Pod と通常の Pod の見落としやすい違いは UID を再利用できるかどうか (comment - k/k#113145)
  • NEG コントローラーが Pod の deletionTimestsamp しか考慮しておらず、フェーズの確認が漏れているので NotReady な Pod が含まれてしまう可能性がある? (kubernetes/ingress-gce#1957)
  • Pod の eviction で terminationGracePeriodSeconds が守られてしまっているバグ? (k/k#115819)
    • terminationGracePeriodSeconds を 0 に上書きする処理の中でバグがあり、SIGKILL が送られるず terminationGracePeriodSeconds 経ってから終了してしまう
  • preStop hook に問題がある場合に terminationGracePeriodSeconds * 2 秒後にしか Pod が SIGKILL されない問題 (k/k#115817, k/k#115835)
    • SIGTERM が飛ばない影響で、preStop hook の実行時間が SIGKILL までの時間として考慮されておらず、terminationGracePeriodSeconds を超えてから更に terminationGracePeriodSeconds 秒待ってから Pod が SIGKILL されている
  • proxy-mode=ipvs の諸悪の根源は仮想インターフェイスに VIP 割り振らないといけないこと (comment - kubernetes/enhancements#3824)
  • ノード名を直接指定すると最悪起動に失敗した Pod が再起動を繰り返すので非推奨 (kubernetes/website#39452)
    • デバッグ目的でスケジュールさせることはあるけど、通常のワークロードで使うケースは稀なはず
    • nodeName のように意図した使われ方をしていないフィールドが残っている背景 (comment - k/k#113907)
  • kong/blixt
  • GKE の Ingress の問題を診断するための CLI ツール作ろうとしている (kubernetes/ingress-gce#1960)
  • AWS の Gateway controller の実装は AWS Lattice ベースで gRPC route サポート予定 (slack)
  • Kind 上で動かしてクラウドプロバイダの挙動をチェック可能なダミーの controller 実装 (aojea/cloud-provider-kind)
  • 何らかの問題で kube-apiserver が再起動して全断しても、クラスタ内から kube-apiserver と通信するための Service から kube-apiserver の IP が削除されない問題 (k/k#115804)
    • クラスタ内のクライアントから kube-apiserver に接続して失敗したときのエラーが分かりづらい
    • 一時的な再起動で初期化中など不完全な状態でクライアントから接続してしまう可能性がある

2023/2/23

  • GKE 1.22 + Preemptible node の組み合わせで evict 周りでまだバグってるらしい (comment - kubernetes/ingress-gce#1963)
  • GKE の Service LB で複数のプロトコルを喋る KEP- 1435 をサポートしていないので注意 (kubernetes/cloud-provider-gcp#475)
    • 今も出来るか分からないけど、IP 予約しておいて 2 つ Service を作ると良いらしい (comment - k/k#23880)
  • 永続コネクションの場合、Service の名前解決を DNS ラウンドロビン + シャッフルしても、バックエンドのローリングアップデート後にコネクションが偏る (comment - k/k#37932)
    • 永続コネクションはちゃんと idle タイムアウト時間を調整して、定期的に再接続し直す必要がある
  • 重複した Pod IP を EndpointSlice controller で公開するか (k/k#115907, slack)
    • Pod が正常もしくは異常終了 (Completed or Error) して再起動した場合に、Pod IP が再利用されることはある
    • 同一 IP の Endpoint の重複を許容するか Ready な Endpoint だけを公開するようにするか議論中
  • annotation は Event API の一部ではないため、同一の Event で annotation の値を変えても最初の値が返ってくるはず (comment - k/k#115963)
  • KEP-3488 CEL for Admission Control で複数の validation を定義した場合に最初に失敗した validation のエラーしか返ってこないのは仕様 (comment - k/k#115920)
  • 外部サービスの正常性を readinessProbe に含めたときにカスケード障害で全ての Pod がサービスアウトしてしまうのを防ぐ方法がないかの議論 (k/k#115917)
  • aws/zone-aware-controllers-for-k8s
    • PDB で同一ゾーンの Pod 障害は許容する Admission Webhook
  • jetstack/knet-stress
    • クラスタ内の各種通信をチェックするためのツール (slack)

2023/2/25

  • k/k の tests/e2e/framework を staging に外出しする予定は今のところない (slack)
    • kubernetes-sigs/e2e-framework は外出ししたことでパッチが定期的に来ていて羨ましそう
    • tests/e2e/framework の方が使い易かったので外出ししてくれると嬉しい

2023/2/26

  • コンテナのログファイルをローテーションする処理を並列化する PR を AWS の人が早くマージしたがっている (k/k#114301)

2023/2/27

  • aws/amazon-eks-pod-identity-webhook
    • GKE の Workload Identity みたいなのでコントロールプレーンで動いてる
    • kube2iam とか Kiam の公式置き換えっぽい
  • ResourceQuota が Pod の resource request/limits じゃなくて実際の使用量で制限をかけたい要望 (k/k#116063)
    • ノード毎に使用量を API サーバに高頻度に報告してたらスケールしないよね

2023/2/28

  • GKE で Cilium + WireGuard でノード間通信を暗号化できるようにしようとしている? (GoogleCloudPlatform/netd#199, GoogleCloudPlatform/netd#202)
    • WireGuard によるノード間通信の制約は 1 つを除いて解消されている (cilium/cilium#15462)
  • NEG の Pod IP の管理を EndpointSlice のみで行う変更の中に、kubernetes/ingress-gce#1957 を打ち消す commit が含まれている (kubernetes/ingress-gce#1973)
    • kubernetes/ingress-gce#1957 の処理があったのは、Endpoints が Terminating の情報を公開しておらず、EndpointsDataFromEndpoints で Terminating な Endpoint を綺麗に排除できていなかったから
    • Endpoints の処理を完全に削除できたから分岐も消せるようになっただけで間違っていない
  • KEP 1287 - In-place Update of Pod Resources の最初の実装がついにマージされた (k/k#102884)
  • ECR でプッシュ時にリポジトリが作成できないのは、ECR のリポジトリのセキュリティに関する設定 (e.g. アクセス制御、不変なタグ) がデフォルトで none だからユースケースに合ったリポジトリが作られないかららしい (comment - aws/containers-roadmap#853)
    • aws/containers-roadmap#799 にあるようにリポジトリのプロファイルを作れるようにしてデフォルト値を埋める形にする予定
  • 何回目かのヘルスチェックに外部サービスの正常性を含めるな (comment - k/k#115917)
  • マイナーバージョン更新時に Pod が動いている状態で kubelet を in-place 更新すると、ディスクの互換性の観点から static Pods 用のマニフェストは消える (comment - k/k#116080)
  • ノードがパブリック IP を持っている場合、kubelet が公開している 10250 番ポートで外部から叩ける可能性がある (k/k#115896)
    • 基本認証認可があるから大丈夫だけど、kubelet をコマンドラインフラグで起動するか、設定ファイルで起動するかでデフォルト値が変わるから間違えやすい

2023/3/1

  • iptables と ipvs の conntrack table 処理のまとめ (k/k#116104)
  • でっかい KEP の実装の進め方 by Tim Hockin (comment - k/k#115934)
  • Deployment の replicas を手動で変えても rollingUpdate.maxSurgerollingUpdate.maxUnavailable を考慮しながら徐々に Pod の数を変えたいらしい (k/k#116132)
    • ローリングアップデートの際は考慮されるのに replicas を手動で変えた場合は、一気に台数が増減したりするの変えるオプションを追加したいって話だけど、そんなに Deployment の replicas を直接変えることある?
    • Deployment の replicas を直接いじってるってことは HPA 使ってなさそう
    • HPA の minReplicas/maxReplicas の変更時の挙動は behavior で制御できるので、それ使えば良いのにユースケースがよく分からない
  • SOCI と Fargate を連携させてコンテナイメージのプル時間を短縮しようとしているらしい (comment - aws/containers-roadmap#696)
  • CPU 割り当てを 1.2 と書いて kubectl apply すると毎回変更された扱いになる (k/k#116135)
    • 1.2 とか 1200m とか色々指定できるのが根本原因で、サーバー側で正規化されて最終的に etcd に保存された値が apply する値と違うから起きる問題。少なくとも現状はどうしようもない (comment - k/k#116135)

2023/3/2

  • kubelet がコンテナイメージを並列プルする際に、レート制限を掛ける機能がマージされた (k/k#115220)
    • kubelet はデフォルトで直列にイメージを落とすので、重いイメージがあるとブロックされる
    • 並列プルに変更するオプションはあったが、並列プルするイメージの数を制限できなかったので、帯域やノードの CPU リソースの消費が激しくて安定しなかった
    • FeatureGate もないので、GKE 1.27 以降で並列プルに置き換わったりするかも
  • kubectl delete にインタラクティブモードを追加する機能は KEP が必要ということで 1.28 以降に (comment - k/k#114530)
  • Service の責務が重く (セレクタだけじゃなく、ポートマッピングの機能もある) 今更簡単に変更もできないので、PodSelector 的なリソースを新しく作って Gateway API や Issue の要件などなどに対応できるようにすれば良くない議論 (k/k#56440)
    • こういうの実装できたらカッコ良いけど、ステークホルダー大量にいる案件なので素人には手が出せません
  • 1.26 で StatefulSet の volumeClaimTemplates に非推奨となった StorageClass の annotation を設定すると無視される問題を修正 (k/k#116089)
    • 非推奨でも無視されるのは間違ってるけど、流石にもうこの annotation 使ってる人いなさそうなのと、1.26 行く頃には cherry-pick 済みのバージョンになってそう

2023/3/4

  • コミュニティのコンテナイメージがまだ k8s.gcr.io からプルされまくっていて GCP のバジェット使い切りそうだから、どうにかユーザーを registry.k8s.io のコンテナイメージに移行させられないかの悪巧みスレッド (slack)
    • CVE スキャンの開発者に協力して貰って重大なセキュリティバグがあるって表示して貰って移行させる案が優勝 😈
  • 結局、去年 Google から追加でお金貰ってた (slack)
    • レイオフを見ても分かる通り、Google のお財布の引き締めがきついので、今年は援助期待できない
    • けど、Kubernetes プロジェクトが去年よりインフラコストが高くなっててやばいから、BigQuery のコストを見直したり、負荷テストなどの実行頻度を見直さないといけなくなっている。で、やりたくないけど k8s.gcr.io -> registry.k8s.io へのリダイレクトも検討している。
  • 2:20-11:33 まで cloud-provider-kind のデモ (youtube)
    • E2E テストで GCLB を作ってテスト実行するの時間が掛かるので、Kind 上で HAProxy を使ったクラウドプロバイダーのダミー実装で時間を減らす作戦
    • 1 つの GCP アカウントで複数のテスト実行しているからか、CI で LB ができるの待つのに 45 分掛かるらしいけど、それが数十秒で立ち上がるようになる
    • kubernetes-sigs/cloud-provider-kind
  • EKS も containerd のミラー設定で k8s.gcr.io -> registry.k8s.io にリダイレクト予定 (awslabs/amazon-eks-ami#1211)
    • k8s.gcr.io の古いイメージが削除される可能性がある (議論中) ので、コンテナイメージが急に落とせなくなったりしないための措置
    • ユーザー影響ある可能性あるので事前にユーザーに知らせて話し合う予定
  • Kubernetes はリソース毎に etcd のコネクションを使い回していて、TLS 有効の場合のみ大量のリソース (e.g. 10k+ Pods) を複数のコントローラーが同時に LIST すると詰まって世界が止まる問題 (etcd-io/etcd#15402, comment - k/k#114458)
    • 根本原因は Go の http2 の PriorityWriteScheduler の実装の問題らしい (golang/go#58804)
  • runc である CVE を修正したら以前直した CVE がまた再発しちゃって、それがまた新しい CVE として登録された (opencontainers/runc#3751, link)

2023/3/5

  • wasi-http が本格的に動き出してた (WebAssembly/wasi-http#3)
    • Kubernetes の生みの親の一人である Brendan Burns (現 Microsoft で Azure の CVP) がランタイム側の対応やってて本気でコンテナを置き換えようとしてる感がある (bytecodealliance/wasmtime#5929)
    • Brendan Burns は想像力豊かな天才で 2 日一緒にいると 10 個の世界を変えるアイデアが降ってくるって他の Kubernetes 共同創始者からも言われている人なので、何か起こりそうな感じがする (youtube)

2023/3/6

  • user namespaces が idmapped mounts による実装に変わり、CRI を拡張中。これまで、kubelet がやってたことを kernel がやることになった。問題は user namespaces が stateful Pods (ConfigMap / Secret / PV...) をサポートしたときで、既存の Pod が再スケジュールされるまでファイルの所有者が変わって読めなくなるかも (containerd/containerd#8209)
  • GKE には standalone モード (kube-apiserver に登録されていない) の kubelet を使ったテストがある (comment - k/k#116271)

2023/3/7

  • このままだと今年のどこかで GCP から貰っている予算を使い切って Kubernetes の開発が止まる (CI 動かせなくなる) 可能性があるので、Google / AWS / RedHat / Microsoft / CNCF の人たちで作戦会議スレッド (slack)
    • k8s.gcr.io から registry.k8s.io にリダイレクトできないのは、古いバージョンを使い続けている (放置している) ユーザーの環境を壊したくないからと、去年は緊急で $700k 追加で予算を貰えたからリダイレクトの検証を止めた (registry.k8s.io に移したのに思ったよりコスト減らなかった)
    • GCR チームがリダイレクトの処理を入れたくないのは、k8s.gcr.io に問題が起きると顧客から問い合わせが来るから
    • 完全に k8s.gcr.io のイメージを消さずに一部のよく使われているけど、クラスタの運用に致命的ではないイメージを消すかリダイレクトするかのどちらかで、3/7 辺りに再度リダイレクトに関しては GCR チームと話し合う予定
    • リダイレクトするにしても期間で ON/OFF を繰り返すやり方が良さそう案
    • 今後オンプレとかで自前運用しているならこれを胸に刻んだ方が良さそう
    • opencontainers/image-specopencontainers/distribution-spec の策定や google/go-containerregistry のメンテナでも有名な jonjohnsonjr が Google を辞めて Chainguard に連れて行かれたせいで、ご立腹。本当に最近辞めてた。(twitter)

2023/3/8

  • APF によりリクエストの優先順位に従ってサーバー側で安定して処理できるようになったので、クライアント側でのレート制限を緩和する PR がマージ (k/k#116121)

2023/3/9

  • GCR のチームと相談して、k8s.gcr.io から registry.k8s.io にリダイレクトすることになった (slack)
    • リダイレクトする場合、ネットワークの設定によってはコンテナイメージをプルできなくなるので、リダイレクトされる前に自分たちのタイミングで移行しておいた方が良い
    • k8s.gcr.io のイメージを使っているかは公式ブログに記載されたコマンドか、AWS の人が開発した kubectl plugin を使用する
    • Gatekeeper や Kyverno を使っていて、ユーザーが registry.k8s.io のイメージを使えなくしたいなら、これもまた AWS の人たちが作ったポリシーがある (source)
  • k8s.gcr.io のトラフィックは平均で 2,500 RPS (150,000 RPM) (slack)
  • Bottelerocket は 1.13.0 (EKS 1.26) から cgroup v2 に移行(bottlerocket-os/bottlerocket#2874)

2023/3/11

  • 3/20 (月) に k8s.gcr.io -> registry.k8s.io のリダイレクトを開始 (blog)
  • 別ブランチで作業中だった sidecar containers の実装が準備できて API レビュー中 (k/k#116429)

2023/3/12

  • preStop hook 内でサービスアカウントトークンを使用した処理を行っている場合に、terminationGracePeriodSeconds とサービスアカウントトークンの有効期限の設定によっては、トークンの有効期限が切れて preStop hook がエラー終了する問題(comment - k/k#116481)
    • Pod が Terminating 状態に入ると Volume の更新が止まっているっぽく、サービスアカウントがローテーションされた後の変更が反映されていないっぽい
  • Pod などで使用する自動生成されたランダム文字列は 5 文字であることを保証していないが、依存した実装がいくつかある (comment - k/k#116430)
    • ランダム文字列が衝突している可能性があり、ランダム文字列を 10 文字に増やして衝突しにくくしようとした時に発覚した問題
  • containerd v1.7.0 がリリース (containerd/containerd#v1.7.0)
    • v2.0.0 に向けて実験的な機能がいくつか入った

2023/3/13

2023/3/15

  • DockerHub の Free Team organization が廃止されるらしく、有料プランに移行しろメールが来たそう (twitter)
    • Docker-Sponsored Open Source プログラムに入っていない OSS プロジェクトのコンテナイメージが消されるかも?で荒れてます (link)

2023/3/16

  • GKE 上の kubelet の並列イメージプルの機能要求が IssueTracker に上がっていた (link)
  • 1.28 で kubectl だけが含まれたイメージが registry.k8s.io から提供されそう (k/k#116672, k/k#116667)
  • Cilium agent が停止したときにノードに NoSchedule の taints を付け直す PR (k/k#23486)

2023/3/18

  • 既存の VM、microVM、コンテナをベースとした Serverless v1 から wasm ベースの Serverless v2 時代に変えるのが Fermyon の狙い。起動時間が数百 ms から 1 ms に変わる (blog)

2023/3/22

  • sozercan/kubectl-ai
    • GPT を使ってデバッグとかテスト目的で適当なマニフェストを生成する kubectl plugin
  • k8s.gcr.io -> registry.k8s.io のリダイレクト実況してたみたい
    • https://kubernetes.slack.com/archives/CCK68P2Q2/p1679420278418599
    • GCR のロールアウトの裏側話していて面白い
      • 4 日で 50% の IP のバックエンドに設定を反映して、来週また 4 日間で残りの 50% にロールアウトする
      • 最初はコストの掛かっていたイメージだけ対象
      • ユーザーが文句言われるから GCP 内からの通信はリダイレクト対象から外すようにしたっぽい
    • 途中で設定ミスがあったらしい。僕らは GCL/borgcfg を触る必要がなくて、YAML だけ触っていれば良いから良いねって

2023/3/23

  • Docker + Wasm で WasmEdge 以外の spin (Fermyon), slight (Microsoft), wasmtime (Bytecode Aliance) のランタイムもサポート (blog)
  • Wasm でサーバーレスなアプリケーションを書くためのフレームワークの Spin 1.0 がリリース (blog)
    • Go, Rust 以外の言語も SDK でサポートしたのと、一通りの開発フローが安定化
    • 今後数ヶ月で WASI preview 2 や WebAssembly の component model に対応して更に良い感じになっていくそう
  • Cilium が動いていない時に、Cilium Operator がそのノードに Pod がスケジュールされないように taint を付け直してくれるように、次のバージョンからなりそう (cilium/cilium#23486)
    • GKE + Spot インスタンスだと VM は裏側で再起動するけど、Kubernetes の node オブジェクトは再利用するらしく、Cilium が止まるとノード起動時に付けてる (Pod がスケジュールされないようにする) taint を付け直さないから問題になっていた (cilium/cilium#21594, kubernetes/cloud-provider-gcp#404)

2023/3/24

  • Reddit で 3/14 (円周率の日) に 314 分 (偶然?) サービスが止まる繋がりにくくなる障害があったようでそのポストモーテム (blog)
    • kubeadm で管理している Kubernetes クラスタを 1.23 -> 1.24 に上げた時に問題が起きた
    • 1.20 で非推奨になっていたノードラベルが 1.24 で完全に消えて、Calico の設定のラベルセレクタで参照していて...

2023/3/25

  • k8s.gcr.io -> registry.k8s.io のリダイレクトは予定通り全リージョンの IP の 50% に反映が終わった
    • 来週また 4 日間掛けて全リージョンの 50% -> 100% の IP に反映して終了予定
  • Docker は Free Team Plan を辞めるのを辞めました (blog)

2023/3/30

  • EKS に Kubernetes のユニットテストの一部を移行したらパフォーマンスの問題が発生 (k/k#116990, slack)
    • Go のランタイム (GOMAXPROCS) が cgroup 内の割り当て情報を正確に取れず、ホスト上の CPU コア数が自動的に設定されてしまったのが原因
    • EKS ノード (ホスト) が 16 CPU でテスト実行のコンテナが resources.limits.cpu 4 CPU (CFS quota 有効) 割り当てで、GOMAXPROCS: 16 になっていたので、明示的に GOMAXPROCS: 4 を環境変数で指定 (kubernetes/test-infra#29181)
    • Kubernetes のメンテナも uber-go/automaxprocs があるのは知ってるが、Go ランタイム側で対応した方が無駄に依存関係を持たなくて良いという判断 (slack, golang/go#33803)

2023/3/31

  • CronJob が短期間かつエラー終了するせいで Pod が増殖し再起動を繰り返すと、シングルクラスタ構成の場合は普通に Pod がスケジュールされなくなる危険性がある (k/k#76570)
    • 短い間隔で実行するなら concurrencyPolicy か activeDeadlineSeconds は必ず設定しましょう (comment - k/k#76570)
  • KubeCon EU 2023 で 1 万人のオフラインチケットが完売した話 (twitter)
  • EKS に Kubernetes のユニットテストの一部を移行したら、GOMAXPROCS の設定によりパフォーマンスの問題が発生 (k/k#116990)
    • EKS のノード (ホストマシン) は 16 コア CPU で、ユニットテストを実行しているコンテナの resources.limits.cpu が 4 だった
    • limits を設定しているので CPU CFS Quota による制限が適用されている状態
    • Go のランタイムは CPU CFS-aware ではないので、GOMAXPROCS: 16 が自動的に設定されていた
    • 明示的に環境変数で GOMAXPROCS: 4 を指定して解決
    • 定期的にこの話を見る気がするので Go で書かれている計算量高めなサービスかつコンテナ上で動かす場合はこれ入れておく方が良さそう (uber-go/automaxprocs)
    • あと、CPUつよつよのホストマシン上でいっぱいマイクロサービスを動かしている場合
    • Go のランタイム側の対応はまだなので、今は明示的に環境変数を指定するか uber-go/automaxprocs を入れるかしかない (golang/go#33803)

2023/4/1

  • 4/20 の KubeCon 2023 Europe で Envoy のドキュメンタリーが初公開されるらしい (twitter)
  • AWS の Gateway API controller for VPC Lattice が OSS として公開された (aws/aws-application-networking-k8s, blog)
    • Multi-cluster Services API を使ってマルチクラスタ対応してる
    • GKE Hub みたいな面倒な概念がないのは良さそう
    • Gateway を default namespace に作らないといけない縛りがあるの辛そう (aws/aws-application-networking-k8s#130)
  • AI/ML や HPC の世界の Deployment/Statefulaset を目指した JobSet を wg-batch が作ろうとしている (docs)
    • kubernetes-sigs/jobset
    • 複数の Job のテンプレートを指定可能で、リストの最初から順番に Job を実行
    • spec.completionsreplicas みたいに使ってスケール可能
    • Job に繋がる Headless Service が自動で作られる
    • JobSetConfig も作って Job で共通の設定を良い感じにテンプレートエンジンをつかって埋め込める仕組みを作る
    • failurePolicy とか successPolicy を指定可能

2023/4/4

  • bash で再実装する Kubernetes v2 の KEP powered by ChatGPT (kubernetes/enhancements#3934)
  • Argo CD の CRD のバージョンは未定だけどいつか Argo CD 3.0 が来たら v1 に上げるかも (slack)
    • v1alpha1 の間はフィールドの追加だけで、名前を変えたり、消したりせずに互換性を保つポリシー
    • Argo CD 3.0 が来て v1 に上げる時は、破壊的変更を加えていろいろ整理するかも

2023/4/5

  • HashiCorp の共同創業者の Mitchell Hashimoto の AI がプラットフォームを転換するかの洞察記事 (blog)
  • fork したプロセスが OOMKill した場合にコンテナ内の全ての PID を kill するように変更しそう?(k/k#117070)
  • DaemonSet コントローラーが Succeeded 状態を処理するようになっていなかったバグの対応 (k/k#117073)
    • k/k#115331RestartPolicy=Always な Pod が Graceful Node Shutdown で終了した時にSucceeded 状態になった影響でバグが顕在化

2023/4/7

  • initContainer でファイルに書き込んだものを main container の環境変数として自動的に読み込んでくれると source せずに済むから嬉しい (e.g. TensorFlow の TF_CONFIG) 話が意外と賛成多いから KEP になるかも (k/k#116993)

2023/4/11

  • Nvidia GPU の Multi-instance GPUs (MIGs) のパーティションを Dynamic Resource Allocation で動的に生成するための Kubernetes Device Plugin (k8s-dra-driver)

2023/4/12

  • 予定通り Kubernetes 1.27 がリリース (CHANGELOG-1.27)
  • Kubernetes のトラブルシューティングの流れが細かく書かれていて凄く良い (blog)

2023/4/13

  • CNCF から Platform Engineering に関するホワイトペーパーが公開 (paper)

2023/4/14

  • Go のサプライチェーンセキュリティへの取り組み (blog)
    • Go のパッケージのドキュメントサイトに Open Source Insights のリンク貼るようにした
    • Go の脆弱性情報データベースのレビューに Go のセキュリティチームが関わるようになって脆弱性診断の精度が上がった
    • govulncheck を新しく作ったことで偽陽性が減った

2023/4/15

  • Argo CD に Flux を組み込んで足りない機能を補った Flamingo (blog)

2023/4/16

  • Kubernetes 1.20 -> 1.24 への更新でランダムで StatefulSet の Pod に接続できなくなる問題 (k/k#117193)
    • PostgreSQL のコントローラーが Endpoints にパッチを当てていて、1.20 -> 1.24 に一気に更新した影響か他の原因で Endpoints <-> EndpointSlices の同期が壊れている?

2023/4/17

  • Spot VM のノードが強制停止した時に Pod が Error や Completed で残ることがある問題の修正がやっと入った (release note)
    • Spot VM が再作成される時に同一のノード名で起動してくる。Kubernetes の Node オブジェクトを使い回しているので、Pod GC のタイミングによっては stale な Pod が残ったままになることがある。ノードをクラスタに登録する時に残っている Pod を全部削除したれ (kubernetes/cloud-provider-gcp#368)

2023/4/18

  • EKS 1.26 で Service type LoadBalancer (ELB, NLB どちらも) を eTP=Local で作成した場合に、LB のターゲットグループにノードが正しく登録されないことがある問題の修正 (k/k#117388)
    • タイミングによっては、Cloud Controller Manager (KCCM) が providerID の設定されていないノードを cloud-provider-aws に渡すことがあって、cloud-provider-aws が providerID のないノードは同期しないようになってるから Service type LoadBalancer に変更があるまで同期されなくなるらしい (kubernetes/cloud-provider-aws#585)
    • KCCM が prividerID のあるノードだけを cloud-provider-aws に渡すように修正
    • cloud-provider-aws の Issue だと Kubernetes 1.25.1 で報告があるけど、この変更の元になった修正が 1.25.3 で revert されているので Kubernetes 1.26 以降で発生している
  • Cilium Mesh - One Mesh to Connect Them All - Isovalent

2023/4/19

  • 10 月に Gateway API が GA するかも (twitter)
  • Kubernetes の LTS については KubeCon で議論してたみたい (docs)
    • 新しいバージョンの承認に 18-24 ヶ月かかる規制業界で、今の 12 + 2 ヶ月サポートだと厳しいがきっかけらしく、2 年 (可能なら 3 年) の LTS を目指すらしい
    • やっぱり問題になるのは LTS -> LTS の更新経路をどうするか。一気に更新できるようにするには開発者が互換性壊れないようにもっと気をつけたり、労力が凄い掛かる
    • Azure が LTS サポートを発表して一人ではやりたくないみたいだから、WG-LTS を復活させるかみたいな流れっぽい
    • 何を基準に LTS を決めるかとか、サポートバージョンを増やすと CI のコストが増えるから各ベンダーが入らないと厳しいとか、脆弱性やバグ修正の cherry-pick の責任誰が持つんだよとかいろいろ問題はあるから、どうなるかまだ分かんない

2023/4/20

  • mmap でファイルの中身をメモリ上に載せたときの RssFile の話 (comment - k/k#116895)
    • メモリ逼迫すると回収可能なメモリマップが自動的に破棄されるだけなので、RssFile の使用量は cgroup で制限されない
    • kubectl top pods で表示されるメモリ使用量に含まれてないのも同じ理由なはず

2023/4/21

  • Envoy Proxy のドキュメンタリ (youtube)
    • Twitter 時代に前身の Twitter Streaming Aggregator (TSA) を開発して、ある時に日付処理のバグで障害を起こし、それが原因で Lyft に移って、モノリス -> マイクロサービス移行やっていたけど余り上手く行っておらず、ALB 含め既存の Nginx や HAProxy も当時は Observability が弱くて Envoy を作った。成功に火を付けたのは Google との協調 (gRPC の開発チームと密に連携したり、Google 社内で Envoy の採用が始まったり) と CNCF への寄贈
    • 「Envoyを革命的なものではなく、進化的なものと捉えている」で締めるのかっこいい
    • ブログの内容を良い感じにまとめてる (blog

2023/4/22

  • preStop hook に httpGet と exec の他に新しく sleep を追加する KEP (KEP-3960)
    • みんな大好き preStop hook の exec で sleep して SIGTERM を受けるのを遅らせるのはコンテナイメージ内に sleep のバイナリが必要なのでそれを楽にしたい
    • もともと Tim Hockin が挙げてる要望で sig-node からも賛同は受けているのと、実装方法も明確なので機能としては入りそう (実装者の根気次第なところはあるけど、これなら最悪引き継げそう)

2023/4/25

  • Ephemeral Container も Pod Security Admission の制約を受けるので、デバッグで強い権限が必要な場合は、apiserver の設定で exemptions を追加して特定のユーザーを除外する必要がある (comment - k/k#117130)
    • GKE だと無理なので諦めるしかなさそう
  • EKS の CoreDNS Addon v1.9.3-eksbuild.3 から affinity や tolerations などが設定できるようになってるらしい (comment - aws/containers-roadmap#1930)

2023/4/27

  • Google Cloud のフランスリージョンの大規模障害の影響で registry.k8s.io が不安定になっているらしい (kubernetes/registry.k8s.io#234)
    • LB から外そうにも Google Cloud コンソールにアクセスできないし、gcloud も 500 エラーが返ってきてどうにもできない (slack)
    • やっと LB からフランスリージョン外せたみたい (slack)
  • フランス周辺の地域で registry.k8s.io に繋がらなくなった問題のポストモーテムがもう書かれてた (comment - kubernetes/registry.k8s.io#23)

2023/4/29

  • Brendan Gregg 先生の新作 (blog)
    • 単に既存の eBPF ベースの Observability ツールを組み合わせて、セキュリティ監視製品が作れるとは思うなよって話だった
    • セキュリティ監視製品を作る上で eBPF にポテンシャルはあるけど、オーバーヘッドの問題とかいろいろ大変だから、ペネトレーションテストの経験のある良いセキュリティエンジニアを雇ってね
  • Kubernetes 1.26 + kube-proxy の mode=ipvs でリグレッションがあり、ノード IP を loadBalancer IP として使っている場合に動作しなくなる問題の修正 (k/k#115019)
  • Kubernetes 1.26 + kube-proxy の mode=ipvs でバグがもう一つ (k/k#117621)

2023/5/3

  • Kubernetes 1.23 と 1.26 で確認されている (1.27 では再現しないらしい) 変なバグで、RestartPolicy=Never の Pod の initContainer の子プロセスが OOMKill されると、プロセスが exit code 0 (通常は 137) で終了して、Pod の状態が Pending になって Pod GC でお掃除されない (k/k#116676)

2023/5/5

  • さようなら kube-dns
    • デフォルトで Cloud DNS for GKE を使うようにして、kube-dns とさよならするっぽい (doc)
  • AWS から Rust エンジニアが辞めていってるらしい。オフィス回帰が嫌で辞めたり、レイオフの対象になったり (twitter)
    • Rust in Action の作者はレイオフにあい、Rust for Rustaceans の作者で Crust of Rust シリーズの人もオフィス回帰でやめるかもらしい

2023/5/6

  • Kubernetes 1.28 から MutatingWebhookConfiguration と ValidatingWebhookConfiguration を kubectl で扱い時に mwc と vwc の短縮名が使えるようになる (k/k#117535)

2023/5/10

  • Helm の values ファイルって昔は TOML 形式だった (helm/helm#768)
    • 未だに TOML に戻してくれってコメントあるけど、あんなネストした values ファイルを TOML で書きたいのか...?

2023/5/11

  • DNSWatch is a DNS snooping utility (facebookincubator/dnswatch)
  • Argo CD でソースに Git と Helm repo 以外に OCI registry を追加する提案。Kustomize や Jsonnet、Helm に生の YAML もサポートする予定らしい (argoproj/argo-cd#13516)
    • Flux の後追いっぽい
    • Media Types が独自なのでいろんなツールで使えないだろうし、その辺りも標準化して欲しい
  • Kubernetes の wg-lts は賛成多数で復活する模様 (kubernetes/community#7287)
    • MS / AWS / Google からそれぞれリードが出ている
    • liggitt さんがリードになってるの意外だったけど、こういうお気持ちらしい

      While I'm personally skeptical that the community can afford to support additional versions, and I think a "same thing but for longer" approach mostly just time-shifts issues people currently have N months into the future, I'm on board with identifying/driving efforts that provide broad benefit to users, specifically improve the lives of users/vendors that need to support Kubernetes longer than OSS currently does, and can be afforded by the community.

    • 最初はエンドユーザーへの調査から始める
      • 現在使っているバージョンは?
      • デプロイとアップグレードの方法や流れに対する各業界の制約は?
      • ユーザーとベンダーそれぞれどれくらいサポート延長して欲しい?
      • Kubernetes のコアな依存関係をサポートする期間は?
      • Kubernetes クラスタを動かすための OS やネットワーク、ストレージなどをサポートする期間は?
        OSS の EoL を過ぎたバージョンをサポートするために、ユーザーとベンダーそれぞれがやってることは何?
        現在、ユーザーとベンダーそれぞれが EoL を過ぎたクラスタをどう扱っている?EoL が N ヶ月延長されるとどうするのか?
    • 上記の情報をもとに、Kubernetes プロジェクトとして取り組めることを調査する
      • 全てのマイナーバージョンのサポート期間の延長
      • 特定のマイナーバージョンのサポート期間の延長
      • 現在の EoL を過ぎたリリースブランチに対して、パッチバージョンを切らずにセキュリティ修正を適用する
      • 現在の EoL を過ぎたリリースブランチに対して、パッチバージョンを切らずにセキュリティ修正と影響範囲のデカい修正を適用する
      • バージョンスキューのポリシーを広げる
      • EoL になったクラスタのアップグレード方法の改善
    • なので、LTS バージョンが登場するかはまだ分からないし、LTS バージョンをやるにしてもベンダー側でやれるように整備していく感じになりそう
  • control plane な RedHat の Stefan さん、Crossplane な Upbound に行っちゃうらしい (blog)

2023/5/12

  • RedHat の Stefan さん、Crossplane な Upbound に行っちゃうのか (blog)

2023/5/13

  • kubelet が Pod を起動する時にコンテナイメージを並列でプルする機能があったのですが、並列で処理する数を制限できず、ネットワーク帯域を圧迫する可能性があったので使えず、直列で一つずつダウンロードしていました。並列処理数の制限を指定できる機能が 1.27 からアルファ機能として入っていて、GKE は 1.27 から有効化する予定らしい (comment- kubernetes/enhancements#3673)
    • 新しくノードが追加されて、重めのコンテナイメージで Pod がたくさん起動するときなどに起動時間が早くなるはず
    • アルファ機能ではあるけど、新しい API リソースの追加とかではなく etcd にも影響ないのと、何かあっても設定なくせば元の挙動に戻るから安全と判断してそう
    • 最大並列数をどう決めるのかは気になるけど、ノードあたりの Pod の最大数とかノードのスペックで動的に変えるのか、ディスクスロットリングが起き辛い小さな数から始めるのか
  • registry.k8s.io で存在しない S3 バケットを参照しているリージョンがあった問題 (kubernetes/registry.k8s.io#247)
    • 悪意のある第三者が同名で S3 バケットを作成し、適当な blob をアップロードすることで、コンテナレジストリのクライアントのダイジェスト検証に失敗して、リトライを繰り返すことで DoS 攻撃になってしまう可能性があった
    • この問題に気付いた報告者が S3 バケットをすぐに作成して、悪意のある第三者が作れない状況にしてくれていたので実害はなかった
    • 存在しない S3 バケットの参照を外して、自動テストの中で少なくとも 1 つは S3 バケットから取得できるかチェックするようにした

2023/5/14

  • Sidecar container の機能は順調に実装が進んでいて、実装済みの機能を Istio で検証してみたら想定通りに動いてそうとのこと (comment - k/k#116429)
  • Alpine (musl libc) で名前解決時に A / AAAA の DNS クエリが並列実行されますが、
    負荷などの影響で DNS クエリがタイムアウトすると、5 秒程度待ってからリトライされるので詰まる問題がありました。Alpine 3.18 (musl 1.2.4) から UDP でタイムアウトすると、TCP にフォールバックするようになったので直ったかもらしい (comment - k/k#56903)

2023/5/16

  • SIG Scheduling による Scheduler の WASM 拡張のプロジェクトが開始 (twitter)

2023/5/17

  • コンテナイメージのベースイメージで脆弱性が見つかった時に、アプリケーション側は触らずにベースイメージだけ修正版に rebase で差し替えたれというやり方 (doc)
  • TAG Observability で Query Standardization Working Group が立ち上がった話 (twitter)

2023/5/18

  • DevPod
    • DevContainer の仕様に準拠して作られた GitHub CodeSpaces / Google Cloud Workstation 的なやつで、Provider で拡張可能でベンダーロックイン避けられるのとローカル環境でも使えるらしい (blog)
  • Keyverno の Playground が登場 (twitter)

2023/5/21

  • Russ Cox が Kubernetes に Issue を上げていて何かと思ったら、Go の proposal: spec: less error-prone loop variable scoping で紹介しているツールで発見した感じっぽい

    • for loop のスコープが期待通りに動かないやつで、以下のコードだと items の最後の要素が loop の回数追加されちゃうので、
    var all []*Item
    for _, item := range items {
    	all = append(all, &item)
    }
    
    • こうしないといけないやつ
    var all []*Item
    for _, item := range items {
    	item := item
    	all = append(all, &item)
    }
    
    • 大規模な Go のコードで proposal の変更がバグの発見には役に立つけど、悪い影響を与えないことを確認していて発見したらしい (comment - golang/go#60078)

2023/5/24

  • Microsoft Build 2023 で Fleet に登録した複数の AKS クラスタを好きな順番で更新できる機能が発表されてた (doc)
  • Argo Rollouts の Gateway API に対応した plugin と GKE + Internal HTTP LoadBalancer でカナリアリリースをやる例 (example)

2023/5/25

  • EKS にも Kubernetes 1.27 が来てた (blog)
    • GKE から 1 週間ちょっと遅れ
    • GKE や AKS に比べて追従遅れてるイメージあったけど、巻き返しててすごい

2023/5/26

  • GKE 1.27 から private cluster でもコントロールプレーンとノード間の通信に Konnectivity Service を使い始めるみたいなので、Firewall ルールで Egress 全遮断して必要なポートだけ許可してる場合は注意です (release note)
    • public cluster はもう Konnectivity Service を使うようになってます。Egress 遮断してたので、その時に kubectl logs/exec や API Aggregation Layer を使ったサービス (e.g. metrics-server, Agones) がタイムアウトして正常に動作しなくなる問題が起きました
    • 8132 番ポートでノードのネットワークタグからコントロールプレーンの IP 範囲に外向きで繋がるようにすれば良い (doc)

2023/5/27

  • gke-gcloud-auth-plugin のシングルバイナリ提供が順調に進んでいるようなので、パッケージマネージャや gcloud components install でインストールしなくてもよい世界になりそう (comment - kubernetes/cloud-provider-gcp#433)

2023/5/30

  • VictoriaMetrics の vmui の Cardinality Explore 良さそう。指定した日付とメトリクスの量比較してくれる (playground)
  • HPC のワークロードのコンテナイメージ大きくなりがちなので、CRI 経由でコンテナランタイムからイメージプルの経過を教えて貰えるようにする KEP-3542 の PoC (k/k#118326)
    • 今は streaming で途中経過をもらう実装だけど、Pod の数に比例して kubelet の負荷が高くなったり stream の管理コストもあるので polling に変わるかも
    • 途中経過は N 秒毎、イメージサイズの N バイト数毎 (デフォルト)、イメージサイズの N% 毎から選べる
    • Event に書き込んで kubectl describe とかで見れるようになるはず。コンテナランタイム側の API 決めるための PoC なのと、KEP-3542 はその情報をどう表示するか範囲外 (レビューで指摘はされてるので後々入る?) なので、まだまだ掛かりそう。
  • eBPF を使ったプロダクトが GPL + 何かのデュアルライセンスになっちゃうけど、CNCF のポリシーだと GPL 系は許可されていないので CNCF プロジェクトに影響が出ているらしい (docs)
    • カーネル側でロードする時に eBPF module のライセンス検証があって GPL 互換なライセンスじゃないといけないので、GPL + 何かのデュアルライセンスにするしかないので、eBPF の場合は特別に許してねって相談に行く予定
    • Cilium の CNCF Graduation のストッパーにもなっているらしい
    • Istio の CNCF Graduation は試験的に入っている eBPF 関連のコードを外に出して通すっぽい (comment cncf/toc#1000)
  • EKS の API で aws-auth の ConfigMap に権限を追加する機能がほんとのほんとにそろそろ来るらしい (comment - aws/containers-roadmap#185)

2023/6/1

  • Karpenter のコア部分を Kubernetes のサブプロジェクトに移して、他のクラウドプロバイダーが実装できるように働きかけていくらしい (kubernetes/org#4258)

    • Karpenter が生まれた理由がこれなので、今後 Cluster Autoscaler が Karpenter に切り替わっていくのかいかないのかは気になる

    AWS approached SIG Autoscaling in 2019 and later in 2020, described the challenges our customers were facing with the Cluster Autoscaler, and proposed changes to better meet their needs. The SIG expressed reasonable concerns about how to prove out these ideas while maintaining backwards compatibility with the broadly adopted Kubernetes Cluster Autoscaler, and recommended we explore the ideas in a separate project, so we made github.com/aws/karpenter.

    • Karpenter と Cluster Autoscaler の思想の違い (twitter)
    • Karpenter の GKE プロバイダーを昔作ろうとしたけどできなかったのは、GKE は単体のノード (GCE インスタンス) をクラスタに追加できず、ノードプールとして追加する必要があったかららしい (comment - kubernetes/autoscaler#5394)

2023/6/2

  • ECR のプルスルーキャッシュで registry.k8s.io をサポート開始 (blog)
    • Kubernetes コミュニティの援助資金の大部分がコンテナイメージの配布で使われているので、プルスルーキャッシュを使って配布のコストを減らしたい思惑

2023/6/4

  • Kubernetes 上で複数の Kubernetes コントロールプレーンを動かして、どこで動いているかに関わらず k0s のノードを追加できるツール。エッジ用途でエッジ側にコントロールプレーンを動かさなくていいとか、CI/CD や開発環境でコントロールプレーンを動かさなくて良いとかの用途らしい (blog)
    • Cluster API と違ってコントロールプレーンを Kubernetes (管理用の Kubernetes) 内で動かしているのと、vcluster と違ってノードは管理用の Kubernetes のを使うのではなく別の場所にあるのをトークン食わせて参加させて Konnectivity サービス経由で繋げる

2023/6/6

  • Kubernetes 1.26 以降で重複したエントリのある env や containerPorts を指定した Pod が ClusterAutoscaler によって evict されて別のノードに移ったのに古い Pod が GC されずに残っちゃう問題 (k/k#118261)
    • ややこしい問題で、Pod を作成するときの重複チェックが甘く、Server Side Apply の重複チェックがキツすぎるのが原因。Kubernetes 1.26 で KEP-3329 の Pod Disruption Condition がベータになりデフォルト有効になったことで、Pod を GC するときに Server Side Apply で Pod の condition を更新しようとする時に重複エラーになって処理が進まなくなっている
    • SSA の重複エラーの場合に処理を進める PR だけど、SSA のエラーコードが 500 で reason フィールドも使えそうな情報がないからエラーメッセージで判別しようとしてるけど、さすがにメッセージに依存するのはまずいから、SSA 側でステータスコードを変えようとしてそう (k/k#118398)
    • SSA の重複チェックを緩めて、変更内容に重複したキーに関わる変更がないのと、SSA で 反映した形跡 (Field Manager) がない場合はエラーにしないようにすれば良いという話。SSA でリソースを作るときは重複したエントリを許さないので解決できそう (comment - k/k#118261, kubernetes-sigs/structured-merge-diff#234)
    • env や containerPorts を重複したキーを許さない map として扱うのをやめて、マージ時に全部置き換えちゃう atomic に変えちゃえパターン (k/k#118475)
ログインするとコメントできます