kubectlコマンドチートシート

便利だけど忘れがちなkubectlのコマンドをメモします。

マニフェスト適用前の確認

バージョン1.18で--dry-runオプションの仕様変更がありました。

# サーバのマニフェストとの差異を表示
kubectl diff -f file.yml
# マニフェストをローカルで検証
kubectl apply -f file.yml --dry-run=client
# マニフェストをサーバで検証
kubectl apply -f file.yml --dry-run=server

動的なマニフェストの適用

標準入力からマニフェストを受け取って、機械的に作成したマニフェストを適用します。

# "-"を指定
kustomize build . | kubectl diff -f -
kustomize build . | kubectl apply -f -

# .envファイルをsecretとして適用
kubectl create secret generic \
  env-secret \
  --from-env-file="path/to/.env" \
  -o yaml \
  --dry-run=client \
| kubectl apply -f -

Podの再起動

バージョン1.15から使えます。

kubectl rollout restart deployment/my-deploy

Podのログ確認

対象の指定方法がいくつかあります。

# 前のPodを指定
kubectl logs my-pod --previous
# コンテナが複数ある場合は-cでコンテナ名を指定
kubectl logs -f my-pod -c my-container
# ラベルを指定
kubectl logs -f -l name=my-label
# ラベルを指定(全コンテナ)
kubectl logs -f -l name=my-label --all-containers

Podのポートフォワード

指定したポートでPodにアクセスできます。

kubectl port-forward my-pod 8080:80
kubectl port-forward service/my-service 8080:80

使い捨てのPod作成

クラスタ上でデバッグするときに使えます。

kubectl run debug -it --image=busybox --rm --restart=Never -- /bin/sh

CronJobの一時停止

再開しない時はstartingDeadlineSecondsの設定を確認します。

# 一時停止
kubectl patch cronjob my-job -p '{"spec":{"suspend":true}}'
# 再開
kubectl patch cronjob my-job -p '{"spec":{"suspend":false}}'