更新失敗をシミュレートして診断する
このステップでは、問題のあるイメージ更新をシミュレートし、Kubernetes の診断ツールを使用して、潜在的な展開更新の失敗を診断する方法を学びます。
まず、プロジェクトディレクトリに移動します。
cd ~/project/k8s-manifests
無効なイメージを持つ展開マニフェストを作成します。
nano problematic-deployment.yaml
以下の内容を追加します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: troubleshoot-app
labels:
app: troubleshoot
spec:
replicas: 3
selector:
matchLabels:
app: troubleshoot
template:
metadata:
labels:
app: troubleshoot
spec:
containers:
- name: nginx
image: nginx:non-existent-tag
ports:
- containerPort: 80
問題のある展開を適用します。
kubectl apply -f problematic-deployment.yaml
出力例:
deployment.apps/troubleshoot-app created
展開の状態を確認します。
kubectl rollout status deployment troubleshoot-app
出力例:
Waiting for deployment "troubleshoot-app" to roll out...
Ctrl+C を押して展開状態を終了します。
ポッドのイベントと状態を確認します。
kubectl get pods -l app=troubleshoot
出力例:
NAME READY STATUS RESTARTS AGE
troubleshoot-app-6b8986c555-gcjj9 0/1 ImagePullBackOff 0 2m56s
troubleshoot-app-6b8986c555-p29dp 0/1 ImagePullBackOff 0 2m56s
troubleshoot-app-6b8986c555-vpv5q 0/1 ImagePullBackOff 0 2m56s
ポッドの詳細とログを調べます。
## 'xxx-yyy'を実際のポッド名に置き換えてください
POD_NAME=$(kubectl get pods -l app=troubleshoot -o jsonpath='{.items[0].metadata.name}')
kubectl describe pod $POD_NAME
kubectl logs $POD_NAME
イメージのプルに失敗していることを示すポッドの状態とログが表示されます。
Failed to pull image "nginx:non-existent-tag"
イメージを修正して問題を解決します。
nano problematic-deployment.yaml
イメージを有効なタグに更新します。
image: nginx:1.24.0-alpine
修正された展開を再適用します。
kubectl apply -f problematic-deployment.yaml
再度ポッドの状態を確認します。
kubectl get pods -l app=troubleshoot
出力例:
NAME READY STATUS RESTARTS AGE
troubleshoot-app-5dc9b58d57-bvqbr 1/1 Running 0 5s
troubleshoot-app-5dc9b58d57-tdksb 1/1 Running 0 8s
troubleshoot-app-5dc9b58d57-xdq5n 1/1 Running 0 6s
失敗の診断に関するポイント:
kubectl describe を使用して展開とポッドのイベントを表示します。
ImagePullBackOff やその他のエラー状態をポッドの状態で確認します。
- 詳細なエラー情報を取得するためにポッドのログを調べます。
- イメージの可用性とタグの正確性を確認します。