Kind でGRPCContainerProbe がやりたいよ
はじめに
KubernetesではLiveness & Readiness Probeを使って、Pod内のコンテナ、プロセスのヘルスチェックが行える。Kubernetes上で動くgRPCサーバーのヘルスチェックする際にはgrpc-health-probe
で簡単に実装できます。readinessProbe やlivenessProbe,startupProbeにexec のcommand として実装する必要がある。どういうような方式があってみたいなのはHealth checking gRPC servers on Kubernetes | Kubernetes を参照していただければと思います。
現行の場合にはこのように設定が必要
containers: - name: server image: "[YOUR-DOCKER-IMAGE]" ports: - containerPort: 5000 readinessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:5000"] initialDelaySeconds: 5 livenessProbe: exec: command: ["/bin/grpc_health_probe", "-addr=:5000"] initialDelaySeconds: 10
tomioka-shogorila.hatenablog.com
gRPC health checking が alpha feature として追加
この、方式ではDockerfile内 にgrpc_health_probeを入れなくてはいけません。で、2022年2月で最新のKubernetes v1.23 では built-in gRPC health checking が alpha featureとして追加されました(同僚に教えてもらいました)。
そのため、Kubernetes上で動くgRPCサーバーのヘルスチェックする際にbuilt-in でできるようになりました。
containers: - name: server image: "[YOUR-DOCKER-IMAGE]" ports: - containerPort: 5000 readinessProbe: grpc: port: 5000 livenessProbe: grpc: port: 5000
しかし、これらの機能はまだ、alpha feature で機能 です。なので、defaultでは無効です。もし、試したい場合には--feature-gates
として有効にしてあげればならない
ローカルでKubernetes クラスターを構築するにはいくつか方法があるのですが今回は、Kind を利用しているので今回もこちらを利用する。
Kind でFeature Gates を利用するにはyaml で以下のように true にすることで適応できる。今回はGRPCContainerProbe
をtrue にすれば良い。kubeadm
でできることはKind でも大体できるのでkubeadmConfigPatches
みたいな設定も忘れたくない。
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 name: featuregates nodes: - role: control-plane image: kindest/node:v1.23.3@sha256:0df8215895129c0d3221cda19847d1296c4f29ec93487339149333bd9d899e5a featureGates: GRPCContainerProbe: true
最後に
O11yCon での資料作成があるのにブログを書いてしまった。 試験前に漫画を読み始めるみたいな感じでブログを書いてしまった。 13歳からやってることは変わりません。お時間があれば見に来てください。