Kind を利用してFeature Gates のGRPCContainerProbe を有効にしたKubernetes クラスターを構築してアルファー機能のgRPC Health Checkを試したいなー

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.io

そのため、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.io

ローカルで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

github.com

最後に

O11yCon での資料作成があるのにブログを書いてしまった。 試験前に漫画を読み始めるみたいな感じでブログを書いてしまった。 13歳からやってることは変わりません。お時間があれば見に来てください。

event.cloudnativedays.jp