🎍

Neco Weekly (2023-01-13号)

2023/01/16に公開

Neco Weekly (2023-01-13号)

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

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

👀 Notable Articles

How to debug large db size issue?

https://etcd.io/blog/2023/how_to_debug_large_db_size_issue/

etcd の DB サイズが大きいときのデバッグ方法についての記事です。

キーごとのオブジェクトの数を数える方法や、Compaction と Defragmentation を使ってサイズを小さく保つ方法などが紹介されています。

etcd は複数のバージョンの値を保持しているため、値を書き換え続けるとデータサイズがどんどん大きくなってしまいます。
そこで定期的に Compaction をおこない、古いデータを削除する必要があります。
ちなみに我々の環境では、5分ごとに Compaction をおこなう設定にしています。
また、 Compaction をおこなっただけでは実際のデータサイズは減らないため、 Defragmentation も実施する必要があります。

なお、etcd のデータサイズは最大 8GB がまでが推奨されていますが、大きなメモリのあるマシンがあれば、64GB でもいけるそうです。

Protect Your Mission-Critical Pods From Eviction With PriorityClass

https://kubernetes.io/blog/2023/01/12/protect-mission-critical-pods-priorityclass/

PriorityClass の仕組みや、どういった用途で利用できるのか、実際の使い方などが解説されている記事です。

PriorityClass は以下のようなケースで利用できると紹介されています。

  • Loki のようなノード上で必ず動いておいて欲しいコンポーネントを優先する
  • 1つのクラスタにプロダクションや開発用のPodが混在しているケースで優先順位をつける
  • データベースやキューのように退去させられるとしばらくの間トラフィックを処理できなくて困るようなコンポーネントを優先する

ValidationAdmissionPolicy や Kyverno, Gatekeeper などを利用して PriorityClass の設定に制約を加えることができるという話も紹介されています。

🛠️ Tools, Frameworks, Libraries

A Go framework for end-to-end testing of components running in Kubernetes clusters.

https://github.com/kubernetes-sigs/e2e-framework/

Kubernetes 上で動作するコンポーネントの e2e テストフレームワークです。
現在、Kubernetes のソースコード内にテスト用のコードが組み込まれており、これを外部から利用することは難しいため、独立して使えるフレームワークを開発したようです。
なお、Ginkgo/Gomega のようなフレームワークは利用せず、Go 標準の testing パッケージをベースにしています。
このフレームワークでは kind を使って Kubernetes クラスタを立ち上げたり、Pod 上でコマンドを実行するヘルパー関数なども提供されています。

The Dhall configuration language

https://dhall-lang.org

ML(関数型言語)的な記法で関数や型が利用できる設定記述言語です。
Jsonnet と似ていますが、型が使えるのが大きな特徴でしょうか。

Kubernetes 用の定義もあるようです。

https://github.com/dhall-lang/dhall-kubernetes

Monokle-CLI: Flexible Kubernetes YAML Validation

https://monokle.io/blog/monokle-cli-flexible-kubernetes-yaml-validation

YAML のバリデーションツールです。
いろいろなプラグインが用意されていて、ルールを細かく設定できるのが便利そうです。

🐤 Tweets

pod LifecycleHandler should support a sleep option

https://twitter.com/superbrothers/status/1607900662993661952

Pod を安全に終了させるために preStop に sleep コマンドを指定することがよくありますが、これを標準でサポートしてくれる機能です。
これにより、コンテナイメージに sleep のバイナリを含める必要がなくなるので助かりますね。

Resource Claims must be a map type, not set

https://twitter.com/superbrothers/status/1611544104089026562

カスタムコントローラーの開発者は、CRD に Pod Spec が含まれる場合、Kubernetes 1.26.0 に更新する際に注意が必要そうです。

Better structured concurrency for go

https://twitter.com/bells17_/status/1612995809934704641

conc という go の並列処理ライブラリです。

例えば、WaitGroupを使ったコードは以下のように書くことができて、 .Add(1).Done() の呼び忘れを防げるみたいです。
なかなか便利そうですね。

func main() {
    var wg conc.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Go(doSomething)
    }
    wg.Wait()
}

📘 Books

詳解 システム・パフォーマンス 第2版

https://www.oreilly.co.jp/books/9784814400072/

Linux のパフォーマンスの分析やチューニングの方法、各種ツールの使い方について書かれている良書です。
第2版では Solaris に関する記述が削除され、BPF 関連の内容が追記されています。

940ページもあり内容も高度ですが、事前に [試して理解]Linuxのしくみ を読んでおくと、理解しやすくなると思います。

オブザーバビリティ・エンジニアリング

https://www.oreilly.co.jp//books/9784814400126/

オブザーバビリティに関して、技術だけでなく人や組織に関する内容も含めて扱っている書籍です。
入門監視 よりも実践的な内容になっているようです。気になりますね。

あとがき

今回は Dhall を紹介しましたが、Kubernetes のマニフェストを書くためのツールには Kustomize, Helm, Jsonnet (Tanka), CUE, ytt, kpt などいろいろな特徴を備えたものがあります。
現状は用途に応じて使い分けているのですが、決定版といえるようなツールが出てきて欲しいですね~。

サイボウズ Necoチーム 😺

Discussion