Kubernetes の exec コマンド

KubernetesKubernetesBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Kubernetes ポッド内で実行されているコンテナ内でコマンドを実行するために、Kubernetes の exec コマンドをどのように使用するかを学びます。簡単な例から始めて、徐々により複雑なシナリオに進みます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/run("Run") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") subgraph Lab Skills kubernetes/initialization -.-> lab-8502{{"Kubernetes の exec コマンド"}} kubernetes/get -.-> lab-8502{{"Kubernetes の exec コマンド"}} kubernetes/run -.-> lab-8502{{"Kubernetes の exec コマンド"}} kubernetes/describe -.-> lab-8502{{"Kubernetes の exec コマンド"}} kubernetes/exec -.-> lab-8502{{"Kubernetes の exec コマンド"}} end

Minikube クラスタを起動する

リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカル マシン上で動作する軽量な Kubernetes 環境です。

  1. 作業ディレクトリに移動する:

    ターミナルを開き、デフォルトのプロジェクト フォルダに移動します。

    cd /home/labex/project
  2. Minikube を起動する:

    Minikube を起動して Kubernetes クラスタを初期化します。

    minikube start
    • このコマンドは、ローカル マシン上に単一ノードの Kubernetes クラスタをセットアップします。
    • Minikube は、システムの性能に応じて数分かかる場合があります。
  3. Minikube が動作していることを確認する:

    Minikube クラスタの状態を確認します。

    minikube status
    • kubeletapiserver などのコンポーネントが Running と表示されていることを確認します。
    • クラスタが動作していない場合は、minikube start を再度実行します。

Minikube を起動する際に問題が発生した場合は、必要に応じて minikube delete を使用して環境をリセットします。

kubectl exec コマンドを調べる

kubectl exec コマンドは、ポッド内のコンテナ内で直接コマンドを実行するために使用されます。特に、コンテナ環境のデバッグや調査に便利です。

kubectl exec の利用可能なオプションを表示するには、次のコマンドを実行します。

kubectl exec -h

次の出力が表示されます。

コンテナ内でコマンドを実行します。

例:
  ## デフォルトで最初のコンテナを使用して、ポッド mypod から 'date' コマンドを実行して出力を取得する
  kubectl exec mypod -- date

  ## ポッド mypod の ruby-container 内で 'date' コマンドを実行して出力を取得する
  kubectl exec mypod -c ruby-container -- date

  ## 生の端末モードに切り替えます。ポッド mypod の ruby-container 内の 'bash' に標準入力を送信し、
  ## 'bash' の標準出力/エラー出力をクライアントに戻します
  kubectl exec mypod -c ruby-container -i -t -- bash -il

  ## ポッド mypod の最初のコンテナから /usr の内容をリスト表示し、変更時刻でソートする
  ## ポッド内で実行したいコマンドに共通のフラグがある場合 (例: -i)、
  ## コマンドのフラグ/引数を区切るために 2 つのダッシュ (--) を使用する必要があります
  ## また、コマンドとそのフラグ/引数を引用符で囲まないでください
  ## 通常実行する方法 (つまり、ls -t /usr を実行する場合、"ls -t /usr" ではなく) を除きます
  kubectl exec mypod -i -t -- ls -t /usr

  ## デプロイ mydeployment の最初のポッドから 'date' コマンドを実行して出力を取得する
  ## デフォルトで最初のコンテナを使用する
  kubectl exec deploy/mydeployment -- date

  ## サービス myservice の最初のポッドから 'date' コマンドを実行して出力を取得する
  ## デフォルトで最初のコンテナを使用する
  kubectl exec svc/myservice -- date

コンテナ内でコマンドを実行する

このステップでは、ポッド内で実行されているコンテナ内でコマンドを実行する方法を学びます。

  1. 1 つのレプリカと Nginx コンテナを持つデプロイを作成します。

    kubectl create deployment nginx --image=nginx --replicas=1
  2. ポッドが準備完了するまで待ちます。

    kubectl wait --for=condition=Ready pod -l app=nginx
  3. kubectl exec コマンドを使用して、Nginx コンテナ内でコマンドを実行します。

    kubectl -it POD_NAME -- /bin/bash

    POD_NAME を、手順 1 で作成したポッドの名前に置き換えます。kubectl get pod -l app=nginx コマンドで POD_NAME を取得できます。

特定のコンテナ内でコマンドを実行する

このステップでは、複数のコンテナが実行されているポッド内の特定のコンテナ内でコマンドを実行する方法を学びます。

  1. Nginx と BusyBox の 2 つのコンテナを持つポッドを作成します。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx-busybox
    spec:
      containers:
      - name: nginx
        image: nginx
      - name: busybox
        image: busybox
        command:
          - sleep
          - "3600"
    EOF
  2. ポッドが準備完了するまで待ちます。

    kubectl wait --for=condition=Ready pod nginx-busybox
  3. kubectl exec コマンドを使用して、BusyBox コンテナ内でコマンドを実行します。

    kubectl exec nginx-busybox -c busybox -- ls /bin

Tty 付きでコマンドを実行する

このステップでは、コンテナ内で tty 付きでコマンドを実行する方法を学びます。

  1. -it オプション付きで kubectl exec コマンドを使用して、tty 付きでコマンドを実行します。

    kubectl exec -it nginx-busybox -- /bin/sh
  2. コンテナ シェル内に入ったら、コマンドを実行します。

    echo "Hello, world!"
  3. コンテナ シェルを終了します。

    exit

環境変数を使ってコマンドを実行する

このステップでは、コンテナ内で環境変数を使ってコマンドを実行する方法を学びます。

  1. 1 つのレプリカと環境変数を持つ Nginx コンテナを備えたデプロイを作成します。

    kubectl run nginx-env --image=nginx --env="MY_VAR=my-value"
  2. ポッドが準備完了するまで待ちます。

    kubectl wait --for=condition=Ready pod -l run=nginx-env
  3. kubectl exec コマンドを使用して、環境変数を出力する Nginx コンテナ内でコマンドを実行します。

    kubectl exec nginx-env -- sh -c 'echo $MY_VAR'

    nginx-env を、手順 1 で作成したポッドの名前に置き換えます。

まとめ

おめでとうございます。あなたは無事にコンテナオーケストレーションツール Kubernetes の exec コマンドの実験を完了しました!この実験では、Kubernetes のポッド内で実行されているコンテナ内でコマンドを実行するために kubectl exec コマンドをどのように使用するかを学びました。また、特定のコンテナ内でコマンドを実行したり、tty 付きでコマンドを実行したり、環境変数を使ってコマンドを実行したりする方法も学びました。これらのスキルは、Kubernetes クラスタ内の問題のデバッグに欠かせないものです。