K8s 1.27の新機能やコンテナレジストリミラーSpegelの紹介など: Neco Weekly (2023-03-17号)
Neco Weekly (2023-03-17号)
サイボウズ Neco チームでは、 Neco Weekly という「最近気になる Kubernetes や Cloud Native 関連のネタを共有する会」を社内で開催しています。
本記事は共有会の中で紹介したネタをまとめたものです。
今回は第26回目の記事となります。
👀 Notable Articles
#116054: KEP-3488: Implement secondary authz for ValidatingAdmissionPolicy
Kubernetes 1.27では、ValidatingAdmissionPolicyに新機能としてSecondary Authzが追加される予定です。
Kubernetes 1.26で、CEL(Common Expression Language)を用いてAdmission Controlのルールを記述できるようになりましたが、このPRによってCELを使ってRBACのチェックが行えるようになります。
その結果、フィールド単位での権限制御が可能となり、例えば特定のユーザーだけにfinalizerの変更を許可することができるようになります。
Kubernetes Operatorを開発していると、一部のフィールドは一般のユーザーが変更できないようにしたいケースが存在するため、この新機能は非常に役立ちそうです。
Pyroscope
Grafana Labsは、これまでGrafana Phlareというプロファイリングツールを提供していましたが、Pyroscope社を買収し、Grafana Pyroscopeというツールに生まれ変わるそうです。
Grafana Phlareはpprofにしか対応していませんでしたが、PyroscopeはJava, Python, Node.jsなどpprof以外の言語にも対応しているようです。
個人的にはMySQLのプロファイリングが可能になるとうれしいですね。
TinyGoのreflectサポート
TinyGoは組み込み環境やWASM向けのGoコンパイラです。
これまでTinyGoではreflectのサポートがなく、encoding/jsonが利用できないためKubernetesのオブジェクトのパッケージを利用できないという問題がありました。
KubewardenのようにWASMでAdmission Webhookを実装したり、kube-schedulerをWASMで拡張する際に、Kubernetesのオブジェクトのパッケージが使えないことは非常に不便でしたが、今後はその問題が改善されるのではないかと期待できます。
今後はKubernetes界隈でもWASMの活用がどんどん広がっていくかもしれませんね。
Kubebuilder - Experimental Helper to upgrade projects by re-scaffolding
Google Summer Code Program 2023のKubebuilderの開発テーマです。
古いKubebuilderで生成したPROJECTをもとに、新しいバージョンのKubebuilderでコードを再生成するサブコマンドを開発するようです。
Kubebuilderのアップグレードを完全に自動化できるというものではないようですが、少しでもアップグレードの手間が省けるようになるとうれしいですね。
container2wasm Converter: Running Linux-Based Containers on WASM and Browser
PythonやNode.JSなどのコンテナをWASMに変換してブラウザ上で動かしているとのこと。
そんなことができるのかととても驚きです。
これを利用して、ブラウザ上でPrometheusを動かしてPromQLの学習コンテンツを作ったりできるととても面白そう。
Painless controller testing with e2e-framework and tilt
TiltとKubernetesのe2e-frameworkを組み合わせた開発フレームワークについて紹介されています。
我々のチームではkindを利用したe2eテストとTiltを使うことが多いのですが、このフレームワークの使い勝手も試してみたいところです。
Grafana Labs Observability Survey 2023
Grafana LabsによるObservabilityに関するサーベイです。
オブザーバビリティのシステムを中央集権化した組織の83%がコストや時間を削減できた、66%の回答者がグループ内で4つ以上のオブザーバビリティツールを使用している、アクティブなGrafanaユーザーの68%が少なくとも4つのデータソースを使っているなど、興味深いデータがたくさん載っています。
我々のチームではVictoria Metrics使っているのですが、採用している組織は少ない(9%)ようですね…。
Understanding Event-Driven Metrics
メトリクスのデザイン方式として、RED, USE, Four Golden Signalsを紹介している記事です。
自分たちで開発しているシステムにメトリクスを組み込む際に参考にしたい内容です。
🛠️ Tools, Frameworks, Libraries
Write Loki queries easier with Grafana 9.4: Query validation, improved autocomplete, and more
Grafana 9.4では、LokiのLogQuery周りで多くの改善が行われているようです。
クエリの入力時に間違っている箇所に波線を引いてくれたり、オートコンプリートが改善されたり、クエリサイズの見積り結果が表示されるなど、どれも非常に便利そうです。
Vault 1.13
Vault 1.13がリリースされました。
数多くの新機能が含まれていますが、中でもVault Operatorの機能が気になります。
これまでKubernetesでVaultをシークレット管理に利用する場合、サイドカーコンテナーやCSIProviderを利用してシークレットを注入する必要があったのですが、やや使い勝手の面で課題がありました。
Vault OperatorによりKubernetesでのシークレット管理が改善されそうです。
リリースは3月下旬とのことなので、リリースされたら試してみたいです。
Spegel
クラスターローカルのコンテナレジストリーミラーの実装です。
コンテナレジストリーミラーの実装としては、containerdのipfsを利用したものやDragonflyなど、これまでにもいろいろなものが存在します。
Spegelはそれらと異なり、構成要素が少なくステートレス(バックエンドにMySQLやipfsなどの技術が不要)なのが大きな特徴のようです。
構成要素が少ないためエラーが起きにくく、また障害が起きたとしても問題を解決しやすいというメリットがあるそうです。
我々もコンテナレジストリミラーを改善したくてcontainerdのipfs機能を検証したこともあるのですが、運用に課題があり導入には至っていませんでした。
Spegelのようなシンプルな構成だと導入しやすいかもしれないので、評価してみたいですね。
Three years of Grafana dashboards as code
Grafana DashboardをGo言語で記述するためのGrabanaというツールと、Grafana DashboardをKubernetesで管理するためのオペレーターであるDARKの紹介記事です。
JSONではなくGo言語で記述することにより、ダッシュボードのレイアウトやフォーマットを標準化でき、開発者がダッシュボードを利用する際の認知負荷を軽減できたそうです。
connect-opentelemetry-go
Connectという新しいgRPCのフレームワーク用に、OpenTelemetryを利用したメトリクスとトレースデータの収集ライブラリが開発されたそうです。
OpenTelemetryを利用すると、アプリケーション側のコードを変更せずにテレメトリーを送信するバックエンドが変えられるというのは非常に大きなメリットですね。
OpenTelemetryの活用は今後ますます広がっていきそうなので要注目です。
stern v1.24.0
Kubernetesのログを見るためのツールであるsternのv1.24.0がリリースされました。
sternは最近活発に開発が進められており、タイムスタンプのフォーマット指定、ログを表示するPodのノードによるフィルタリング、ログにマッチする文字列の強調表示など、便利な機能がたくさん追加されています。
containerd 1.7.0
container 1.7.0がリリースされました。
このリリースでは、v2.0に向けた実験的な新機能がたくさん含まれています。
個人的にはUser Namespaceのサポートがうれしいですね。
Kubebuilder - stabilize go/v4 plugin
もうすぐKubebuilderのGoプラグインのv4がstableになりそうです。
現在のv3からかなり大きな変更が入り、生成されるコードのレイアウトがガラッと変わるので要注意です。
Announcing the Tracetest integration with Keptn, the control plane for cloud-native application life-cycle orchestration
この記事で紹介されていたTracetestというツールが気になります。
Tracetestでは、分散アプリケーションから収集したOpenTelemetryトレースのデータに基づいてテストを作成することができるそうです。
マイクロサービス化されたアプリケーションに対する結合テストやe2eテストを書く際に役立ちそうです。
📘 Books
100 Go Mistakes and How to Avoid Them
Goの開発者がよく犯すミスを避け、エラーの処理方法、並行処理、コードの最適化などの方法を紹介している書籍。
なかなか面白そうですね。
🤝 Events
Platform Engineeringへの招待
Platform Engineering Meetup #1の「Platform Engineeringへの招待」という発表のまとめ記事です。
我々Necoチームもプラットフォームをつくってるチームなので、非常に刺さるところが多い発表でした。
プラットフォームを利用しているチームの認知負荷や、チームトポロジーの話など、いろいろ気づきがあったので、今後のチーム運営に生かしていきたいです。
あとがき
先週のKubernetes Meetup Tokyo #56でKubernetesコントローラーのパフォーマンスチューニングという発表をおこないました。
KubernetesコントローラーやArgo CDのパフォーマンス問題に困っている方向けの情報をたくさん紹介していますので、よろしければぜひご覧ください。
Discussion