--- title: kubectlチートシート content_type: concept card: name: reference weight: 30 --- [Kubectl概要](/ja/docs/reference/kubectl/overview/)と[JsonPathガイド](/docs/reference/kubectl/jsonpath)も合わせてご覧ください。 このページは`kubectl`コマンドの概要です。 # kubectl - チートシート ## Kubectlコマンドの補完 ### BASH ```bash source <(kubectl completion bash) # 現在のbashシェルにコマンド補完を設定するには、最初にbash-completionパッケージをインストールする必要があります。 echo "source <(kubectl completion bash)" >> ~/.bashrc # bashシェルでのコマンド補完を永続化するために.bashrcに追記します。 ``` また、エイリアスを使用している場合にも`kubectl`コマンドを補完できます。 ```bash alias k=kubectl complete -F __start_kubectl k ``` ### ZSH ```bash source <(kubectl completion zsh) # 現在のzshシェルにコマンド補完を設定します echo "[[ $commands[kubectl] ]] && source <(kubectl completion zsh)" >> ~/.zshrc # zshシェルでのコマンド補完を永続化するために.zshrcに追記します。 ``` ## Kubectlコンテキストの設定 `kubectl`がどのKubernetesクラスターと通信するかを設定します。 設定ファイル詳細については[kubeconfigを使用した複数クラスターとの認証](/ja/docs/tasks/access-application-cluster/configure-access-multiple-clusters/)をご覧ください。 ```bash kubectl config view # マージされたkubeconfigの設定を表示します。 # 複数のkubeconfigファイルを同時に読み込む場合はこのように記述します。 KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view # e2eユーザのパスワードを取得します。 kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}' kubectl config view -o jsonpath='{.users[].name}' # 最初のユーザー名を表示します kubectl config view -o jsonpath='{.users[*].name}' # ユーザー名のリストを表示します kubectl config get-contexts # コンテキストのリストを表示します kubectl config current-context # 現在のコンテキストを表示します kubectl config use-context my-cluster-name # デフォルトのコンテキストをmy-cluster-nameに設定します # basic認証をサポートする新たなユーザーをkubeconfigに追加します kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword # 現在のコンテキストでkubectlのサブコマンドのネームスペースを永続的に変更します kubectl config set-context --current --namespace=ggckad-s2 # 特定のユーザー名と名前空間を使用してコンテキストを設定します kubectl config set-context gce --user=cluster-admin --namespace=foo \ && kubectl config use-context gce kubectl config unset users.foo # ユーザーfooを削除します ``` ## Apply `apply`はKubernetesリソースを定義するファイルを通じてアプリケーションを管理します。`kubectl apply`を実行して、クラスター内のリソースを作成および更新します。これは、本番環境でKubernetesアプリケーションを管理する推奨方法です。 詳しくは[Kubectl Book](https://kubectl.docs.kubernetes.io)をご覧ください。 ## Objectの作成 Kubernetesのマニフェストファイルは、JSONまたはYAMLで定義できます。ファイル拡張子として、`.yaml`や`.yml`、`.json`が使えます。 ```bash kubectl apply -f ./my-manifest.yaml # リソースを作成します kubectl apply -f ./my1.yaml -f ./my2.yaml # 複数のファイルからリソースを作成します kubectl apply -f ./dir # dirディレクトリ内のすべてのマニフェストファイルからリソースを作成します kubectl apply -f https://git.io/vPieo # urlで公開されているファイルからリソースを作成します kubectl create deployment nginx --image=nginx # 単一のnginx Deploymentを作成します kubectl explain pods # Podマニフェストのドキュメントを取得します # 標準入力から複数のYAMLオブジェクトを作成します cat <>>>>>> 8d357bf1e (finished translating cheartsheet.md) ```bash kubectl set image deployment/frontend www=image:v2 # frontend Deploymentのwwwコンテナイメージをv2にローリングアップデートします kubectl rollout history deployment/frontend # frontend Deploymentの改訂履歴を確認します kubectl rollout undo deployment/frontend # 1つ前のDeploymentにロールバックします kubectl rollout undo deployment/frontend --to-revision=2 # 特定のバージョンにロールバックします kubectl rollout status -w deployment/frontend # frontend Deploymentのローリングアップデートを状態をwatchします kubectl rollout restart deployment/frontend # frontend Deployment を再起動します cat pod.json | kubectl replace -f - # 標準入力から渡されたJSONに基づいてPodを置き換えます # リソースを強制的に削除してから再生成し、置き換えます。サービスの停止が発生します kubectl replace --force -f ./pod.json # ReplicaSetリソースで作られたnginxについてServiceを作成します。これは、ポート80で提供され、コンテナへはポート8000で接続します kubectl expose rc nginx --port=80 --target-port=8000 # 単一コンテナのPodイメージのバージョン(タグ)をv4に更新します kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f - kubectl label pods my-pod new-label=awesome # ラベルを追加します kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # アノテーションを追加します kubectl autoscale deployment foo --min=2 --max=10 # "foo" Deploymentのオートスケーリングを行います ``` ## リソースへのパッチ適用 ```bash # ノードを部分的に更新します kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}' # コンテナのイメージを更新します。spec.containers[*].nameはマージキーであるため必須です kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}' # ポテンシャル配列を含むJSONパッチを使用して、コンテナのイメージを更新します kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]' # ポテンシャル配列のJSONパッチを使用してDeploymentのlivenessProbeを無効にします kubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]' # ポテンシャル配列に新たな要素を追加します kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]' ``` ## リソースの編集 任意のエディターでAPIリソースを編集します。 ```bash kubectl edit svc/docker-registry # docker-registryという名前のサービスを編集します KUBE_EDITOR="nano" kubectl edit svc/docker-registry # エディターを指定します ``` ## リソースのスケーリング ```bash kubectl scale --replicas=3 rs/foo # 「foo」という名前のレプリカセットを3にスケーリングします kubectl scale --replicas=3 -f foo.yaml # 「foo.yaml」で指定されたリソースを3にスケーリングします kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # mysqlと名付けられたdeploymentの現在のサイズが2であれば、mysqlを3にスケーリングします kubectl scale --replicas=5 rc/foo rc/bar rc/baz # 複数のReplication controllerをスケーリングします ``` ## リソースの削除 ```bash kubectl delete -f ./pod.json # pod.jsonで指定されたタイプと名前を使用してPodを削除します kubectl delete pod,service baz foo # 「baz」と「foo」の名前を持つPodとServiceを削除します kubectl delete pods,services -l name=myLabel # name=myLabelラベルを持つのPodとServiceを削除します kubectl -n my-ns delete pod,svc --all # 名前空間my-ns内のすべてのPodとServiceを削除します # awkコマンドのpattern1またはpattern2に一致するすべてのPodを削除します。 kubectl get pods -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs kubectl delete -n mynamespace pod ``` ## 実行中のポッドとの対話処理 ```bash kubectl logs my-pod # Podのログをダンプします(標準出力) kubectl logs -l name=myLabel # name=myLabelラベルの持つPodのログをダンプします(標準出力) kubectl logs my-pod --previous # 以前に存在したコンテナのPodログをダンプします(標準出力) kubectl logs my-pod -c my-container # 複数コンテナがあるPodで、特定のコンテナのログをダンプします(標準出力) kubectl logs -l name=myLabel -c my-container # name=mylabelラベルを持つPodのログをダンプします(標準出力) kubectl logs my-pod -c my-container --previous # 複数コンテナがあるPodで、以前に作成した特定のコンテナのログをダンプします(標準出力) kubectl logs -f my-pod # Podのログをストリームで確認します(標準出力) kubectl logs -f my-pod -c my-container # 複数のコンテナがあるPodで、特定のコンテナのログをストリームで確認します(標準出力) kubectl logs -f -l name=myLabel --all-containers # name-myLabelラベルを持つすべてのコンテナのログをストリームで確認します(標準出力) kubectl run -i --tty busybox --image=busybox -- sh # Podをインタラクティブシェルとして実行します kubectl run nginx --image=nginx -n mynamespace # 特定のネームスペースでnginx Podを実行します kkubectl run nginx --image=nginx # nginx Podを実行し、マニフェストファイルをpod.yamlという名前で書き込みます --dry-run=client -o yaml > pod.yaml kubectl attach my-pod -i # 実行中のコンテナに接続します kubectl port-forward my-pod 5000:6000 # ローカルマシンのポート5000を、my-podのポート6000に転送します kubectl exec my-pod -- ls / # 既存のPodでコマンドを実行(単一コンテナの場合) kubectl exec my-pod -c my-container -- ls / # 既存のPodでコマンドを実行(複数コンテナがある場合) kubectl top pod POD_NAME --containers # 特定のPodとそのコンテナのメトリクスを表示します ``` ## ノードおよびクラスターとの対話処理 ```bash kubectl cordon my-node # my-nodeをスケーリングされないように設定します kubectl drain my-node # メンテナンスの準備としてmy-nodeで動作中のPodを空にします kubectl uncordon my-node # my-nodeをスケーリングされるように設定します kubectl top node my-node # 特定のノードのメトリクスを表示します kubectl cluster-info # Kubernetesクラスターのマスターとサービスのアドレスを表示します kubectl cluster-info dump # 現在のクラスター状態を標準出力にダンプします kubectl cluster-info dump --output-directory=/path/to/cluster-state # 現在のクラスター状態を/path/to/cluster-stateにダンプします # special-userキーとNoScheduleエフェクトを持つTaintがすでに存在する場合、その値は指定されたとおりに置き換えられます kubectl taint nodes foo dedicated=special-user:NoSchedule ``` ### リソースタイプ サポートされているすべてのリソースタイプを、それらが[API group](/ja/docs/concepts/overview/kubernetes-api/#api-groups)か[Namespaced](/ja/docs/concepts/overview/working-with-objects/namespaces)、[Kind](/ja/docs/concepts/overview/working-with-objects/kubernetes-objects)に関わらずその短縮名をリストします。 ```bash kubectl api-resources ``` APIリソースを探索するためのその他の操作: ```bash kubectl api-resources --namespaced=true # 名前空間付きのすべてのリソースを表示します kubectl api-resources --namespaced=false # 名前空間のないすべてのリソースを表示します kubectl api-resources -o name # すべてのリソースを単純な出力(リソース名のみ)で表示します kubectl api-resources -o wide # すべてのリソースを拡張された形(別名 "wide")で表示します kubectl api-resources --verbs=list,get # "list"および"get"操作をサポートするすべてのリソースを表示します kubectl api-resources --api-group=extensions # "extensions" APIグループのすべてのリソースを表示します ``` ### 出力のフォーマット 特定の形式で端末ウィンドウに詳細を出力するには、サポートされている`kubectl`コマンドに`-o`(または`--output`)フラグを追加します。 出力フォーマット | 説明 ---------------- | ----------- `-o=custom-columns=` | コンマ区切りされたカスタムカラムのリストを指定してテーブルを表示します `-o=custom-columns-file=` | ``ファイル内のカスタムカラムテンプレートを使用してテーブルを表示します `-o=json` | JSON形式のAPIオブジェクトを出力します `-o=jsonpath=