はじめに
Kubernetes では、プローブはコンテナが稼働しておりトラフィックを受け付ける準備ができているかどうかを判断するために使用される診断ツールです。プローブには、生存性プローブと準備度プローブの 2 種類があります。この実験では、コンテナがトラフィックを受け付ける準備ができているかどうかを検出するために使用されるツールである ContainerProbe に焦点を当てます。
Minikube クラスタを起動する
リソースを作成する前に、稼働している Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で実行される軽量な Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。
cd /home/labex/projectMinikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start- このコマンドは、ローカル マシン上に単一ノードの Kubernetes クラスタをセットアップします。
- Minikube の起動には、システムのパフォーマンスに応じて数分かかる場合があります。
Minikube が実行されていることを確認する:
Minikube クラスタの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントがRunningと表示されていることを確認します。- クラスタが実行されていない場合は、
minikube startを再度実行します。
Minikube の起動に問題がある場合は、必要に応じて minikube delete を使用して環境をリセットします。
デプロイメントを作成する
最初のステップは、Kubernetes でデプロイメントを作成することです。このデプロイメントを使用して ContainerProbe をテストします。
/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
このコードは、1 つのレプリカを持つデプロイメント、app: containerprobe というラベルを持つセレクタ、および nginx イメージを実行するコンテナを作成します。
- クラスタにデプロイメントを適用します。
kubectl apply -f deployment.yaml
生存性プローブを追加する
次のステップは、nginx コンテナに生存性プローブを追加することです。生存性プローブは、コンテナが稼働しているかどうかを判断するために使用されます。プローブが失敗した場合、Kubernetes はコンテナを再起動します。
/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 要求を送信するように指定しています。
- デプロイメントを更新します。
kubectl apply -f deployment.yaml
生存性プローブをテストする
これで生存性プローブを追加したので、それが正しく機能しているかどうかをテストできます。
- ポッド名を取得する:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'
このコマンドは、デプロイメントによって作成されたポッドの名前を取得します。
- 生存性プローブの状態を取得する:
kubectl describe pod <pod-name>
<pod-name> を前のステップで取得したポッドの名前に置き換えます。
以下のような出力が表示されるはずです。
Liveness: http-get http://:80/ delay=0s timeout=1s period=10s #success=1 #failure=3
これは、生存性プローブが正しく構成されていることを示しています。
準備度プローブを追加する
次のステップは、nginx コンテナに準備度プローブを追加することです。準備度プローブは、コンテナがトラフィックを受け付ける準備ができているかどうかを判断するために使用されます。プローブが失敗した場合、Kubernetes はコンテナにトラフィックを送信しません。
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 要求を送信するように指定しています。
- デプロイメントを更新します。
kubectl apply -f deployment.yaml
準備度プローブをテストする
これで準備度プローブを追加したので、それが正しく機能しているかどうかをテストできます。
- ポッド名を取得する:
kubectl get pods -l app=containerprobe -o jsonpath='{.items[0].metadata.name}'
このコマンドは、デプロイメントによって作成されたポッドの名前を取得します。
- 準備度プローブの状態を取得する:
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 を使用することで、コンテナがトラフィックを受け付ける準備ができており、正常に機能していることを確認できます。


