🐻

Neco Weekly (2022-11-02号)

2022/11/04に公開

Neco Weekly (2022-11-02号)

サイボウズ Neco チームでは、 Neco Weekly という「最近気になる Kubernetes や Cloud Native 関連のネタを共有する会」を社内で開催しています。
本記事は共有会の中で紹介したネタをまとめたものです。

今回は第13回目の記事となります。

🤝 KubeCon + CloudNativeCon North America 2022

KubeCon で面白かったセッションをいくつか紹介します。
現在のところ動画は参加登録した人しか見ることはできませんが、1ヶ月後くらいに YouTube で公開されると思います。

Essential Patterns For Designing And Implementing Your Operator

Kubernetes の Operator をつくるときのアンチパターン、API Server の負荷を下げる方法、キャッシュの効率的な使い方、Multi-cluster Client の話など。
controller-runtime の詳しい使い方が紹介されているのでおすすめです。

Resize Your Pods In-Place With Deterministic eBPF Triggers

前半は、NecoWeekly 2022-10-21号でも紹介した In-Place Pod Resize の話です。
後半は、eBPF を利用して Pod 内で実行されるコマンドをトリガーにしてリソースを増減させる話です。

普段は Pod に 50MB しかメモリを割り当ててないけど、eBPF を利用して Pod 内で重たい処理(make)の実行を検出したら、In-Place Pod Resize の機能を利用してメモリを5GBに増やすという例を紹介していました。
非常にトリッキーではありますが面白い仕組みですね。

Towards Something Better Than CRDs In a Post-Operator World

kube-bind の APIBinding/APIExport という仕組みを使って、Operator を SaaS として利用・提供する仕組みの紹介です。
自分たちのクラスタに Operator を運用しなくても、Operator の機能を利用できるので非常に便利そうです。
また、1つの会社内でマルチクラスター Kubernetes を運用しているケースでも役立ちそうですし、いろいろ夢が広がりますね。

Cgroupv2 Is Coming Soon To a Cluster Near You

cgroup の基本的な説明から、v2 での変更点、Pod Spec とのマッピング、CPU Limits に関する議論、さらには将来的な機能の紹介など、非常に充実した内容でした。
おすすめのセッションです。

100Gbit/S Clusters With Cilium: Building Tomorrow’s Networking Data Plane

Cilium における IPv6 を利用した低レイテンシーネットワーク上の取り組みについて紹介しています。
Neco チームではそれほど高いパフォーマンスのネットワークを必要としているわけではありませんが、Cilium の目指している方向などがうかがい知れるセッションでした。

👀 Notable Articles

PromLabs and Chronosphere Open-Source the PromLens Query Builder

https://promlabs.com/blog/2022/10/25/promlabs-and-chronosphere-open-source-the-promlens-query-builder

PromLens が Prometheus コミュニティに寄付されて、OSS として利用できるようになるそうです。
PromLens は PromQL を解析して可視化するツールでとても便利そうなので、一度試してみたいところです。

The four Golden Signals of Kubernetes monitoring

https://sysdig.com/blog/golden-signals-kubernetes/

サービスをモニタリングする際の重要な観点として Error, Saturation, Traffic, Latency という4つの指標をあげ、Kubernetes ではそれぞれどのようなメトリクスを見ればいいのかを紹介しています。
イギリスの有名な童話「3びきのくま」をネタにしているのですが、日本人にはなじみがないのであまりピンとこないですね…。

client-go-examples

https://github.com/iximiuz/client-go-examples

Kubernetes のクライアントライブラリである client-go のいろいろな使い方を紹介しているリポジトリです。
Neco チームでは controller-runtime がラップしているクライアントを使うことが多いのですが、生の client-go の使い方を知っておくと役立つこともあるかと思います。

How to communicate effectively as a developer

https://www.karlsutt.com/articles/communicating-effectively-as-a-developer/

開発者がテキストベースのコミュニケーションをおこなう際に、解像度と共感性の高い文章を書くと良いという内容です。
Slack や GitHub でのやりとりなどを例に挙げて分かりやすく解説しています。

👀 Releases

Argo CD v2.5

https://github.com/argoproj/argo-cd/releases/tag/v2.5.0

待望の Argo CD v2.5 がリリースされました。

👀 Tools

Building re-usable operators with controller-idioms

https://www.youtube.com/watch?v=yHJR8d9oHFI

カスタムコントローラを作るときによくあるパターンの実装を提供するライブラリの紹介動画です。
例えば、owner ではないリソースを watch する仕組みや、特定のリソースの reconcile を一時停止する仕組みなど、カスタムコントローラを作ったことがある人なら欲しくなるような機能がいろいろ入っています。

Medik8s - Kubernetes Node Remediation

https://www.medik8s.io

ノード故障を検出すると kubectl cordon/drain したりノードを再起動したりして、自動的にワークロードの復旧を試みてくれるツールのようです。
Neco チームでもノードの自動復旧機能が欲しいと思っているところなので、非常に気になります。

mirrord

https://metalbear.co/blog/mirrord-3.0-is-out/

Telepresence のように、Kubernetes クラスタ内の特定の Pod の処理を手元のローカルプロセスとして動かし、開発やデバッグするためのツールです。
Telepresence との違いは、複数人で同じクラスタを共有可能だったり、コンテナではなくローカルプロセスとして動くので開発しやすいところのようです。

gobra

https://github.com/viperproject/gobra

Go のコード検証ツールです。
以下のように、Go のコードに事前条件や事後条件、純粋関数かどうかなどのアノテーションを付与して検証をおこなうようです。

package tutorial

ensures res == (n % 2 == 0)
pure func isEven(n int) (res bool) {
  return n % 2 == 0
}

ensures isEven(n) ==> res == n / 2
ensures !isEven(n) ==> res == n / 2 + 1
func halfRoundedUp(n int) (res int) {
  if isEven(n) {
    res = n / 2
  } else {
    res = n / 2 + 1
  }
  return res
}

あとがき

早いもので、今年もアドベントカレンダーの季節が近づいてきました。
Kubernetes Advent Calendar たのしみですね。

https://qiita.com/advent-calendar/2022/kubernetes

サイボウズ Necoチーム 😺

Discussion