🐷

Argo CD v2.13 RC、KubeCon Japan 2025開催決定など: Neco Weekly (2024-09-20号)

2024/09/24に公開

Neco Weekly (2024-09-20号)

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

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

👀 Notable Articles

Go製アプリケーション/ライブラリにおけるメンテナンス性を重視したGoのバージョン管理戦略

https://blog.arthur1.dev/entry/2024/08/27/120000

自分たちで開発しているアプリケーションやライブラリのGoバージョンをどのように管理する方法について紹介している記事です。
この記事を参考に、自分たちのGoプロジェクトのバージョン管理を見直してみようと思いました。

Kubernetesカスタムリソースの設計: リソース参照

https://zenn.dev/yutarohayakawa/articles/cc4b576a878a71

Kubernetesでカスタムリソースを設計する際に、理由がない限りリソース参照を使うのは避けましょうという記事です。

私の開発しているwebsite-operatorというプロジェクトでも設定の重複を避けるためにリソース参照を使っているのですが、無駄に実装が複雑になってしまっているので、この記事の内容には同意です。
設定の重複が発生するケースは、マニフェスト管理ツールでカバーするのがよさそうだと最近は感じています。

HA構成のArgoCDパフォーマンス最適化への道

https://ca-srg.dev/45d51b9059e44f62b2aafdd5b0e6f7f1

Argo CDのパフォーマンスを改善策について非常に詳細に解説している記事です。

サイボウズでもArgo CDのパフォーマンス問題には悩まされていて、この記事とほぼ同じような対策を実施しているので非常に共感できる内容でした。

KEP 4601: Authorize with Field and Label Selectors

https://github.com/kubernetes/enhancements/tree/master/keps/sig-auth/4601-authorize-with-selectors

Roleで指定するListなどのverbをラベルやフィールドセレクタで細かく生業できるようにするためのKEPです。

特定のラベルが付与されているPodにのみ権限を与えるような使い方ができるようになるのでとても便利そうです。

GitHub ActionsのJobが落ちたときに何をするべきかを記述するPlaybookの仕組みを作って運用している話

https://tech.newmo.me/entry/2024/09/04/130000

GitHub ActionsにはJob Summariesという機能があり、Jobの詳細な実行ログとは別にサマリーを表示する機能があるそうです。
この記事では、Job Summariesを使ってJobが失敗したときに何をすべきかを記述するPlaybookを作成して運用しているという内容です。

こういう丁寧な仕事っていいですよね。

Best Practices for Writing Kubernetes YAML Manifests

https://mogenius.com/blog-posts/best-practices-for-writing-kubernetes-yaml-manifests

KubernetesのYAMLマニフェストを書く際のベストプラクティスについて紹介している記事です。

アノテーションにいろいろな情報を埋め込んでおくとデバッグや監査の際に便利だというので、これは真似してみたいと思いました。
Mutating Webhookを利用して、必要なアノテーションを自動で埋め込んでもいいかもしれないですね。

Noisy Neighbor Detection with eBPF

https://netflixtechblog.com/noisy-neighbor-detection-with-ebpf-64b1f4b3bbdd

Kubernetesのように複数のコンテナが実行されているマルチテナント環境ではノイジーネイバーの検出は難しい問題ですが、この記事ではeBPFを使ってノイジーネイバーを検出する方法について解説しています。
各コンテナにCPUが割り当てられる前に、スケジューリングキューでどれくらい時間を費やしているかを計測することにより、パフォーマンス問題の原因を特定することができるそうです。

Goのiterの知らなくても良いこと

https://zenn.dev/koron/articles/0a89d036d946a8

Go 1.23で導入されたイテレータは通常のGoroutineとは異なる仕組みで動作しているため、注意が必要になる点について解説している記事です。

t.Helper()を呼ぶとテスト用のヘルパー関数をコールスタックから除外してくれるのですが、イテレータの中でこれを呼び出すと正しく機能しないことがあるそうです。
これは知らないとハマりそうなので、気をつけたいですね。

🛠️ Tools, Frameworks, Libraries

Argo CD v2.13 Release Candidate

https://blog.argoproj.io/argo-cd-v2-13-release-candidate-6cf5c98cc312

Argo CD v2.13のRC版がリリースされました。

今回特に注目したいのが Reconciliation performance for large apps です。
Argo CDでは、1つのApplicationが大量のリソースを扱っている場合に、getResourceTreeという関数で時間がかかるという問題があります。
Argo CD 2.13では、この関数の処理時間がO(n^2)からO(n)に改善されているそうです。
サイボウズでも同様の問題には悩まされているので、この改善がリリースされるのが非常に楽しみです。

LoxiLB

https://github.com/cncf/sandbox/issues/9

eBPFをベースとしたロードバランサー実装であるLoxiLBが、CNCFのSandboxプロジェクトに入ることが決定しました。
LoxiLBば、eBPFを利用しているためパフォーマンスが高く、他のCNIと組み合わせて利用することができ、多くの機能を備えているという特徴があります。

simkube - Record-and-replay Kubernetes simulator based on KWOK

https://github.com/acrlabs/simkube

KWOK (Kubernetes WithOut Kubelet) をベースにした、Kubernetesのシミュレータです。

本番環境でPodの作成などのイベントを記録しておき、それをシミュレータ上で再現することで、クラスターオートスケーラーの挙動などをシミュレートすることができるそうです。

sol - A de-minifier (formatter, exploder, beautifier) for shell one-liners

https://github.com/noperator/sol

ワンライナーのシェルを見やすくフォーマットしてくれるツールです。

📘 Books

絵で見てわかるLinuxカーネルの仕組み

https://www.shoeisha.co.jp/book/detail/9784798177847

弊社のsatさんが執筆に参加した「絵で見てわかるLinuxカーネルの仕組み」が10/23に発売されます。

ここ数年でLinuxカーネルに取り込まれたコンテナやセキュリティ関連の最新機能も解説されているとのことで、非常に楽しみな書籍です。

Software Design 2024年9月号 Goのエラーハンドリングと向き合う ベストな設計戦略を徹底解剖を寄稿しました

https://future-architect.github.io/articles/20240827a/

Goのエラーハンドリングについて、基本的なところから実践的な内容まで解説されている記事です。

deferの中で発生したエラーを返す方法については、なるほどそういう方法があったかと勉強になりました。

🤝 Events

KubeCon + CloudNativeCon Japan 2025🌸の開催が決定しました

https://x.com/CloudNativeComm/status/1834376748546621489

2025年にKubeCon + CloudNativeConが日本で開催されることが決定したそうです

日本での開催に向けてご尽力された方々には感謝です。弊社からも是非参加したいと思います。

第57回 情報科学若手の会

eBPFのこれまでとこれから

https://speakerdeck.com/yutarohayakawa/ebpfnokoremadetokorekara

先日発生したCrowdStrike事件を交えながら、eBPFがどのように活用できるのかを解説している発表です。

なぜオープンソースソフトウェアにコントリビュートすべきなのか

https://github.com/AkihiroSuda/AkihiroSuda/blob/master/slides/2024/20240914 [wakate.org (Japanese)] Why you should contribute to OSS.pdf

オーブンソースソフトウェアにただ乗りするだけではなく、持続可能性のためにコントリビュートすることの重要性について解説している発表です。

OSSの開発は承認欲求(感情論)ではなく経済的実益として解釈されるべきという話や、悪意を持ったメンテなによる乗っ取り事件により今後は匿名での活動が難しくなるのではないかという話、コントリビュートは開発だけではなく、テスト、ドキュメント、脆弱性対応、質問対応、リリースなども必要とされている話など、非常に興味深い内容でした。

サイボウズ Necoチーム 😺

Discussion