現在表示しているのは、次のバージョン向けのドキュメントです。Kubernetesバージョン: v1.33
Kubernetes v1.33 のドキュメントは積極的にメンテナンスされていません。現在表示されているバージョンはスナップショットです。最新のドキュメントはこちらです: 最新バージョン
実行中のコンテナへのシェルを取得する
このページはkubectl execを使用して実行中のコンテナへのシェルを取得する方法を説明します。
始める前に
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:
コンテナへのシェルの取得
このエクササイズでは、1つのコンテナを持つPodを作成します。 コンテナはnginxのイメージを実行します。以下がそのPodの設定ファイルです:
apiVersion: v1 kind: Pod metadata: name: shell-demo spec: volumes: - name: shared-data emptyDir: {} containers: - name: nginx image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html Podを作成します:
kubectl apply -f https://k8s.io/examples/application/shell-demo.yaml コンテナが実行中であることを確認します:
kubectl get pod shell-demo 実行中のコンテナへのシェルを取得します:
kubectl exec --stdin --tty shell-demo -- /bin/bash 備考:
ダブルダッシュ(--)のセパレーターは、コマンドに渡す引数とkubectlの引数を分離します。シェル内で、ルートディレクトリーのファイル一覧を表示します:
# このコマンドをコンテナ内で実行します ls / シェル内で、他のコマンドを試しましょう。以下がいくつかの例です:
# これらのサンプルコマンドをコンテナ内で実行することができます ls / cat /proc/mounts cat /proc/1/maps apt-get update apt-get install -y tcpdump tcpdump apt-get install -y lsof lsof apt-get install -y procps ps aux ps aux | grep nginx nginxのルートページへの書き込み
Podの設定ファイルを再度確認します。PodはemptyDirボリュームを持ち、 コンテナは/usr/share/nginx/htmlボリュームをマウントします。
シェル内で、/usr/share/nginx/htmlディレクトリにindex.htmlを作成します。
# このコマンドをコンテナ内で実行します echo 'Hello shell demo' > /usr/share/nginx/html/index.html シェル内で、nginxサーバーにGETリクエストを送信します:
# これらのコマンドをコンテナ内のシェルで実行します apt-get update apt-get install curl curl http://localhost/ 出力にindex.htmlファイルに書き込んだ文字列が表示されます:
Hello shell demo シェルを終了する場合、exitを入力します。
exit # コンテナ内のシェルを終了する コンテナ内での各コマンドの実行
シェルではない通常のコマンドウインドウ内で、実行中のコンテナの環境変数の一覧を表示します:
kubectl exec shell-demo -- env 他のコマンドを試します。以下がいくつかの例です:
kubectl exec shell-demo -- ps aux kubectl exec shell-demo -- ls / kubectl exec shell-demo -- cat /proc/1/mounts Podが1つ以上のコンテナを持つ場合にシェルを開く
Podが1つ以上のコンテナを持つ場合、--containerか-cを使用して、kubectl execコマンド内でコンテナを指定します。 例えば、my-podという名前のPodがあり、そのPodが main-app と helper-app という2つのコンテナを持つとします。 以下のコマンドは main-app のコンテナへのシェルを開きます。
kubectl exec -i -t my-pod --container main-app -- /bin/bash 備考:
ショートオプションの-iと-tは、ロングオプションの--stdinと--ttyと同様です。次の項目
- kubectl execについて読む