Kubernetes での Containerprobe

KubernetesBeginner
オンラインで実践に進む

はじめに

Kubernetes では、プローブはコンテナが稼働しておりトラフィックを受け付ける準備ができているかどうかを判断するために使用される診断ツールです。プローブには、生存性プローブと準備度プローブの 2 種類があります。この実験では、コンテナがトラフィックを受け付ける準備ができているかどうかを検出するために使用されるツールである ContainerProbe に焦点を当てます。

Minikube クラスタを起動する

リソースを作成する前に、稼働している Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で実行される軽量な Kubernetes 環境です。

  1. 作業ディレクトリに移動する:

    ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。

    cd /home/labex/project
    
  2. Minikube を起動する:

    Minikube を起動して Kubernetes クラスタを初期化します。

    minikube start
    
    • このコマンドは、ローカル マシン上に単一ノードの Kubernetes クラスタをセットアップします。
    • Minikube の起動には、システムのパフォーマンスに応じて数分かかる場合があります。
  3. Minikube が実行されていることを確認する:

    Minikube クラスタの状態を確認します。

    minikube status
    
    • kubeletapiserver などのコンポーネントが Running と表示されていることを確認します。
    • クラスタが実行されていない場合は、minikube start を再度実行します。

Minikube の起動に問題がある場合は、必要に応じて minikube delete を使用して環境をリセットします。

デプロイメントを作成する

最初のステップは、Kubernetes でデプロイメントを作成することです。このデプロイメントを使用して ContainerProbe をテストします。

  1. /home/labex/project ディレクトリに deployment.yaml という名前の新しいファイルを作成します。
  2. 次のコードをファイルにコピーして貼り付けます。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80

このコードは、1 つのレプリカを持つデプロイメント、app: containerprobe というラベルを持つセレクタ、および nginx イメージを実行するコンテナを作成します。

  1. クラスタにデプロイメントを適用します。
kubectl apply -f deployment.yaml

生存性プローブを追加する

次のステップは、nginx コンテナに生存性プローブを追加することです。生存性プローブは、コンテナが稼働しているかどうかを判断するために使用されます。プローブが失敗した場合、Kubernetes はコンテナを再起動します。

  1. /home/labex/project ディレクトリの deployment.yaml を以下の内容で更新します。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80

このコードは、生存性プローブがポート 80 のルート パスに HTTP GET 要求を送信するように指定しています。

  1. デプロイメントを更新します。
kubectl apply -f deployment.yaml

生存性プローブをテストする

これで生存性プローブを追加したので、それが正しく機能しているかどうかをテストできます。

  1. ポッド名を取得する:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

このコマンドは、デプロイメントによって作成されたポッドの名前を取得します。

  1. 生存性プローブの状態を取得する:
kubectl describe pod <pod-name>

<pod-name> を前のステップで取得したポッドの名前に置き換えます。

以下のような出力が表示されるはずです。

Liveness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

これは、生存性プローブが正しく構成されていることを示しています。

準備度プローブを追加する

次のステップは、nginx コンテナに準備度プローブを追加することです。準備度プローブは、コンテナがトラフィックを受け付ける準備ができているかどうかを判断するために使用されます。プローブが失敗した場合、Kubernetes はコンテナにトラフィックを送信しません。

  1. deployment.yaml のコンテナ定義に以下のコードを追加します。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: containerprobe-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: containerprobe
  template:
    metadata:
      labels:
        app: containerprobe
    spec:
      containers:
        - name: containerprobe
          image: nginx
          ports:
            - containerPort: 80
          livenessProbe:
            httpGet:
              path: /
              port: 80
          readinessProbe:
            httpGet:
              path: /
              port: 80

このコードは、準備度プローブがポート 80 のルート パスに HTTP GET 要求を送信するように指定しています。

  1. デプロイメントを更新します。
kubectl apply -f deployment.yaml

準備度プローブをテストする

これで準備度プローブを追加したので、それが正しく機能しているかどうかをテストできます。

  1. ポッド名を取得する:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'

このコマンドは、デプロイメントによって作成されたポッドの名前を取得します。

  1. 準備度プローブの状態を取得する:
kubectl describe pod <pod-name>

<pod-name> を前のステップで取得したポッドの名前に置き換えます。

以下のような出力が表示されるはずです。

Readiness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3

これは、準備度プローブが正しく構成されていることを示しています。

まとめ

この実験では、Kubernetes で ContainerProbe を使用する方法を学びました。デプロイメントを作成し、生存性プローブを追加し、生存性プローブをテストし、準備度プローブを追加し、準備度プローブをテストしました。ContainerProbe を使用することで、コンテナがトラフィックを受け付ける準備ができており、正常に機能していることを確認できます。