Kubectl

最終更新: 2025-10-02 07:12:04 +0800 +0800
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

kubectl は Kubernetes のコマンドラインクライアントです。kubeconfig から接続情報と認証情報を読み取り、コンテキストと名前空間を選択して、API サーバーにリクエストを送信します。kubeconfig ファイルにはベアラートークン、クライアント証明書、秘密鍵が含まれる可能性があるため、機密情報として扱ってください。

構成とコンテキストを選択する #

kubectl はまず明示的に指定された --kubeconfig ファイルを使用し、次に KUBECONFIG で指定されたファイル群を使用し、その後に $HOME/.kube/config を使用します。変更を行う前に、アクティブな対象を確認してください。

sh
kubectl config current-context
kubectl config view --minify
kubectl config view --minify -o jsonpath='{..namespace}'; echo

周囲の状態に依存してはならないスクリプトでは、--context と --namespace を使用してください。マシン間で有効期間の長い管理者認証情報をコピーするよりも、短期間のみ有効な exec 認証情報または OIDC 認証を優先してください。

作成、適用、パッチ、置換 #

これらのコマンドは、所有権と更新のセマンティクスがそれぞれ異なります。

  • kubectl create -f object.yaml はオブジェクトを作成し、すでに存在する場合は失敗します。
  • kubectl apply -f object.yaml は宣言的な適用を実行します。サーバーサイド適用はフィールドの所有権を追跡するため、複数のライターによる宣言的なワークフローでは一般に優先されます。
  • kubectl patch は既存オブジェクトの選択したフィールドを変更します。通常は運用上の例外に使用します。
  • kubectl replace -f object.yaml はオブジェクト仕様を置き換え、オブジェクトが存在している必要があります。日常的な更新のための安全な近道ではありません。
  • kubectl delete はオブジェクトを削除し、依存するオブジェクトの連鎖的な削除を引き起こす可能性があります。

宣言的な変更を適用する前にプレビューします。

sh
kubectl diff -f manifests/
kubectl apply --server-side --dry-run=server -f manifests/
kubectl apply --server-side -f manifests/

フィールドの所有権を理解しないまま、クライアントサイド適用、サーバーサイド適用、命令型パッチ、および同じフィールドを扱う複数のコントローラーを混在させないでください。競合は、別のアクターがそのフィールドを所有していることを示す有用な証拠になる場合があります。

調査とトラブルシューティング #

オブジェクトの望ましい状態、現在のステータス、イベント、コントローラーのログから確認を始めます。

sh
kubectl get deployment web -n app -o wide
kubectl describe deployment web -n app
kubectl get events -n app --sort-by=.lastTimestamp
kubectl logs deployment/web -n app --all-containers=true
kubectl rollout status deployment/web -n app

生成された名前に依存するのではなく、ラベルを使用してワークロードを選択してください。kubectl exec と kubectl port-forward は有用な診断ツールですが、本番環境での修正は宣言された構成に組み込むべきです。Krew を使用するとサードパーティ製プラグインをインストールできますが、インストールする前に、プラグインのソースと必要な権限を確認してください。

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)