🥇

Neco Weekly (2022-07-22号)

2022/07/25に公開

Neco Weekly (2022-07-22号)

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

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

Neco チームとは

Neco チームは、 Kubernetes を主要な部品として、自社クラウドサービス cybozu.com を運用するためのデータセンター管理基盤の開発および運用をおこなっています。

チームの取り組みに興味がある方は、ぜひ以下のページをご覧ください。

https://github.com/cybozu-neco

✨ Release Notes

Loki v2.6.0 リリース

https://github.com/grafana/loki/releases/tag/v2.6.0

Loki v2.6.0 がリリースされました。

これまでは長期間のログを指定したクエリの実行にとても時間がかかっていたのですが、クエリを30分ごとの小さなクエリに分割して並列実行するようになるそうです。

性能向上が期待できそうでとても楽しみです。

Cilium 1.12 リリース

https://isovalent.com/blog/post/cilium-release-112/

Cilium は活発に開発が進められており、今回のリリースノートはかなり膨大なものになっています。
Ingress や Service Mesh などたくさんの新機能が実装されており、Cilium はただの CNI 実装のひとつではなく、大きなネットワークエコシステムを目指しているように思えます。

今回は、リリースノートの中からいくつか気になるものをピックアップしてみます。

  • Sidecar-free datapath option:
    • Istio などのサービスメッシュ実装ではサイドカー方式が採用されているのですが、Cilium ではサイドカーなし方式がオプションとして選べるようになったとのこと。
    • 実装の複雑さや性能面でそれぞれメリット・デメリットがあり、どちらの方式がよいのか議論になっているようなので、少し様子を見守りたいところです。
  • Egress Gateway promoted to Stable:
    • Neco チームとしても Egress Gateway 機能を利用したいと考えています。しかし現状は HA 構成ではないためプロダクションで利用するのはちょっと難しいかもしれません。
  • Improved BGP control plane:
    • IPv6 対応のために MetalLB から GoBGP に置き換えていくことを決定。
    • Neco チームではロードバランサーの VIP を広告するために MetalLB を利用しているが、そこはまだ GoBGP に置き換えられていない模様。今後 MetalLB から GoBGP への置き換えが必要になりそうなので要注目。
  • Improved Multi-Homing for Load Balancer:
    • これまで複数のデバイスを持つノードで正しく経路が選択されていなかったがこれが改善された。これは Neco チームがコントリビュートしたものになります。

また、Neco チームでは現在 Cilium への移行を進めており、その中でかなりの数の不具合を見つけています。
今回のリリースでは、なんと7件もの PR が取り込まれました🎉🎉🎉

  • bgp: Check the Condition.Ready field when adding ready endpoints (#20176, @ysksuzuki)
  • daemon: Support the wildcard option for directRoutingDevice (#17930, @ysksuzuki)
  • bpf: Fix maglev hash with hostServices.hostNamespaceOnly (#18336, @ysksuzuki)
  • endpoint: Fix packets to host dropped with the chaining mode and host firewall (#19734, @ysksuzuki)
  • docs: Fix incorrect values for hubble-ui standalone install (#18661, @ysksuzuki)
  • neigh: Support multi device neighbor discovery (Backport PR #20333, Upstream PR #20092, @ysksuzuki)
  • test: Fix make target for k8s tests (Backport PR #20401, Upstream PR #20264, @ysksuzuki)

👀 Notable Articles

Kubernetes の Gateway API が beta に

https://kubernetes.io/blog/2022/07/13/gateway-api-graduates-to-beta/

https://www.groundcover.com/blog/k8s-gateway-api

Kubernetes の Ingress API の後継として開発が進められている Gateway API がついにベータとなりました。

Gateway API は Ingress API と比べて様々なメリットがあります。

  • リソース作成の役割分担が明確(管理者が Gateway/GatewayClass を作成し、アプリ開発者が HTTPRoute を作成するなど)
  • Ingress リソースは表現力が乏しく設定をアノテーションで書く必要があったが、Gateway API ではきちんと API の設計がおこなわれている。
  • Namespace をまたがったルーティング設定が可能

Neco では L7LB として Contour を採用し、サービスをクラスタ外に公開するために HTTPProxy というカスタムリソースを利用しています。

Contour はすでに Gateway API に対応しているようです。

今後、HTTPProxy から Gateway API への置き換えが発生することを考えるとやや気が重たいですね🙁

📘 Books

ピアリング戦記

Neco チームではデータセンターネットワークの実装に BGP を利用しているということもあり、最近話題になっているピアリング戦記を読んでみました。

https://www.lambdanote.com/products/peering

日本のインターネットがどのように構築されてきたのかという歴史を、たくさんのインタビューを通じて知ることができるとても面白い一冊でした。

🛠️ Frameworks, Libraries

Connect: A better gRPC

https://buf.build/blog/connect-a-better-grpc

これまで広く使われてきた gRPC の Go 実装は grpc-go です。
grpc-go は自前で HTTP/2 を実装しているため Go の HTTP のエコシステムが利用できなかったり、JavaScript から gRPC のサービスを呼び出すためにプロキシが必要だったり、いくつかの問題があります。
それらを解決するために Connect という新しい gRPC の実装が登場したようです。

Connect は現在ベータ版とのことですが、2022年10月には安定版のリリースが予定されているようです。
今後は gRPC 実装の一つの選択肢として検討してみてもいいかもしれませんね。

なお、Neco チームでは MOCOCoil の実装で gRPC を利用しています。
gRPC に興味がある方は、ぜひ以下のチュートリアルもご覧ください。

おわりに

Neco Weekly の取り組みは Cybozu Frontend Weekly, Productivity Weekly を参考にして始めました。
Cybozu Frontend Weekly や Productivity Weekly と同じ様に、長く続けていければいいなと思っています。

サイボウズ Necoチーム 😺

Discussion