すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Cloud Assistantを使用してコンテナーでコマンドを実行する

最終更新日:Aug 26, 2024

コマンドは、Linux ECS (Elastic Compute Service) インスタンスのコンテナーで実行できます。 従来、Linuxインスタンスのコンテナでコマンドを実行するには、インスタンスに接続してから、インスタンスのコンテナにアクセスする必要があります。 Cloud Assistantは、このプロセスを簡素化します。 Cloud Assistantを使用すると、ジャンプサーバーを使用せずに、パスワードなしでログインなしでコンテナに直接接続し、コンテナでコマンドを実行できます。 RunCommandまたはInvokeCommand操作を呼び出してコンテナーでコマンドを実行するときに、ContainerIdまたはContainerNameパラメーターをKubernetesコンテナーの名前またはIDに設定できます。

前提条件

  • インスタンスは実行中 (実行中) 状態です。

  • インスタンスにCloud Assistant Agentがインストールされ、Cloud Assistant Agentのバージョンは2.2.3.344以降です。

    詳細については、「Cloud Assistant Agentのインストール」をご参照ください。

制限事項

  • Cloud Assistantを使用すると、Container Runtime Interface (CRI) に基づいてKubernetesによって管理され、Dockercontainerd、またはCRI-Oコンテナランタイム内で実行されるコンテナーでのみコマンドを実行できます。

  • 次の表で説明する制限は、コンテナーでコマンドを実行するときにCRIによって課されます。 この表は、制限を解決するためのソリューションも提供します。

    制限

    説明と対策

    コンテナ内でコマンドを実行するには、コンテナのデフォルトユーザーのみを使用できます。

    • ContainerIdパラメーター、ContainerNameパラメーター、またはその両方を指定した後、Usernameパラメーターは有効になりません。 コンテナーのデフォルトユーザーは、コマンドの実行に使用されます。

    • コマンドの実行に使用するユーザーを変更する場合は、コンテナーでsudoコマンドを実行します。 コンテナーイメージがユーザー変更をサポートしていることを確認します。

    コマンドは、コンテナの既定の作業ディレクトリでのみ実行できます。

    • ContainerIdパラメーター、ContainerNameパラメーター、またはその両方を指定した後、WorkingDirパラメーターは有効になりません。 コマンドは、コンテナの既定の作業ディレクトリで実行されます。

    • コマンドの作業ディレクトリを変更する場合は、シェルスクリプトの先頭にcdコマンドを追加します。

    コンテナ内のシェルスクリプトのみを実行できます。 スクリプトの先頭に #!/usr/bin/pythonのような形式のコマンドを追加して、スクリプトインタプリタを指定することはできません。

    • ContainerIdパラメーター、ContainerNameパラメーター、またはその両方を指定すると、コンテナーで /bin/shを使用してLinuxシェルスクリプトが実行されます。 #! で始まるコマンドで指定されたスクリプトインタプリタ 認識できません。

    • コンテナ内で別の言語でスクリプトを実行するには、コンテナ内の言語のインタプリタを呼び出し、スクリプトを渡します。 たとえば、/usr/bin/python -c 'import sys; print(sys.version_info)' コマンドをスクリプトの先頭に追加して、コンテナ内のPythonインタープリターを呼び出すことができます。

手順

  1. KubernetesコンテナーのIDと名前を表示します。

    方法1: kubectlコマンドを実行して、KubernetesコンテナーのIDと名前を表示します。

    kubectl -- namespace <Specified namespace> describe pod <Specified pod> コマンドを実行して、指定したポッド内のコンテナーのContainerId値を表示するか、Kubernetes apiserverを使用してKubernetesコンテナーのIDと名前を照会します。

    1. インスタンスに接続します。

      詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。

    2. 次のコマンドを実行して、KubernetesコンテナーのIDを照会します。

      kubectl --namespace <Specified namespace> describe pod <Specified pod>

      この例では、名前空間はkube-systemで、指定されたポッドのコンテナーはkube-proxy-h4slqです。 以下のようなコマンド出力が返されます。

      [test@localhost ~]# kubectl --namespace kube-system describe pod kube-proxy-h4slq
      Name:                 kube-proxy-h4slq
      Namespace:            kube-system
      Priority:             2000001000
      Priority Class Name:  system-node-critical
      Node:                 master1/192.168.1.11
      Start Time:           Thu, 11 Aug 2022 16:33:04 +0800
      Labels:               controller-revision-hash=9c5d7****
                            k8s-app=kube-proxy
                            pod-template-generation=1
      Annotations:          <none>
      Status:               Running
      IP:                   192.168.1.11
      IPs:
        IP:           192.168.1.11
      Controlled By:  DaemonSet/kube-proxy
      Containers:
        kube-proxy:
          Container ID:  docker://fe17ab0409739e63f526aed7c79e87989e90d19f0429********************
          Image:         k8s.gcr.io/kube-proxy:v1.23.9
          Image ID:      docker://sha256:9e6a540eeeb62a64450dad488760cc3769b23d19fc21********************
          Port:          <none>
          Host Port:     <none>
          Command:
            /usr/local/bin/kube-proxy
            --config=/var/lib/kube-proxy/config.conf
            --hostname-override=$(NODE_NAME)
          State:          Running
            Started:      Thu, 11 Aug 2022 16:33:06 +0800
          Ready:          True
          Restart Count:  0
          Environment:
            NODE_NAME:   (v1:spec.nodeName)
          Mounts:
            /lib/modules from lib-modules (ro)
            /run/xtables.lock from xtables-lock (rw)
            /var/lib/kube-proxy from kube-proxy (rw)
            /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-69g97 (ro)

      [コンテナー] セクションのkube-proxyコンテナーのコンテナーID値はdocker:// fe17ab0409739e63f526aed7c79e87989e90d19f0429 ******************** です。 値は、コンテナーがDockerランタイムを使用し、コンテナーIDがfe17ab0409739e63f526aed7c79e87989e90d19f0429 ******************** であることを示します。 CRIに基づいてKubernetesによって管理されるコンテナーの名前はkube-proxyです。

    3. (オプション) 次のコマンドを実行して、Kubernetesクラスターのノードで使用されているコンテナランタイムのタイプとバージョンを表示します。

      kubectl get nodes -o wide

      以下のようなコマンド出力が返されます。

      NAME    STATUS     ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION                 CONTAINER-RUNTIME
      node1   Ready      <none>                 17h   v1.23.6   192.168.1.101   <none>        Ubuntu 20.04.4 LTS               5.4.0-123-generic              containerd://1.6.7
      node2   Ready      <none>                 17h   v1.23.6   192.168.1.102   <none>        openSUSE Leap 15.4               5.14.21-150400.24.11-default   cri-o://1.22.0
      master1 Ready      control-plane,master   18h   v1.23.6   192.168.1.11    <none>        CentOS Linux 7 (Core)            3.10.0-1160.71.1.el7.x86_64    docker://20.10.17
      node3   Ready      <none>                 17h   v1.23.6   192.168.1.103   <none>        Debian GNU/Linux 11 (bullseye)   5.10.0-16-amd64                docker://20.10.17

      コマンド出力のCONTAINER-RUNTIME列には、ノードごとに異なるコンテナランタイムが一覧表示されます。

    方法2: Cloud Assistant Agentを使用してKubernetesコンテナーのIDと名前を表示します。

    LinuxインスタンスのCloud Assistant Agentでは、コンテナーでコマンドを実行できます。 Cloud Assistant Agentは、CRIに基づいてKubernetesによって管理され、Docker、containerd、またはCRI-Oのコンテナランタイム内で実行されるコンテナを一覧表示します。 Cloud Assistant Agentを使用すると、kubectlコマンドを実行することなく、インスタンス上のコンテナを表示することもできます。

    Cloud Assistant Agentがインスタンス上のコンテナを一覧表示するために使用するサブコマンドはlist-containersです。 サブコマンドに基づいてパラメーターを指定できます。 サブコマンドに基づいてパラメーターを指定する方法の例を次に示します。

    • aliyun-service list-containers -- source criコマンドを実行します。

      -- source criパラメーターを指定して、CRIに基づいてKubernetesによって管理され、Docker、containerd、またはCRI-Oのコンテナランタイム内で実行されているコンテナーを一覧表示します。 以下のようなコマンド出力が返されます。

      [test@localhost ~]# aliyun-service list-containers --source cri
      Container Id                                                      Container Name           Pod Name                                         Runtime  State    Data Source
      4f14883f30580007b2b386be16c743048d7b7b6a6522********************  etcd                     etcd-izbp199sm5j54**********                     docker   RUNNING  CRI
      60775315aa50765de7332764322f7697ded2783e4860********************  kube-apiserver           kube-apiserver-izbp199sm5j54**********           docker   RUNNING  CRI
      8d8dd01f09f451109285a0094eef0c144bdfdef6913e********************  coredns                  coredns-64897**********                          docker   RUNNING  CRI
      aee068814a7b10419186bb944832e65df2a8b3cab32b********************  kube-scheduler           kube-scheduler-izbp199sm5j54**********           docker   RUNNING  CRI
      b06609d4246be717c324b366d4e6c392fcf226ecbc4b********************  kube-flannel             kube-flanne**********                            docker   RUNNING  CRI
      c0992c3401ad52b3fce105ce5188026f28db7d5fe202********************  kube-controller-manager  kube-controller-manager-izbp199sm5j54**********  docker   RUNNING  CRI
      d1add169bb596f53d31030f84d69e494e7b23135acd2********************  coredns                  coredns-64897**********                          docker   RUNNING  CRI
      fe17ab0409739e63f526aed7c79e87989e90d19f0429********************  kube-proxy               kube-proxy-*****                                 docker   RUNNING  CRI

      コマンド出力の [Container Id] および [Container Name] の値は、コンテナーで実行するコマンドのContainerIdおよびContainerNameパラメーターに使用できます。 [ポッド名] 列には、コンテナーに対応するKubernetesポッドが一覧表示されます。

    • aliyun-service list-containers -- source cri -- allコマンドを実行します。

      -- allパラメーターを指定して、CRIに基づいてKubernetesによって管理され、Docker、containerd、またはCRI-Oコンテナランタイム内に存在するすべてのコンテナーを一覧表示します。 以下のようなコマンド出力が返されます。

      [test@localhost ~]# aliyun-service list-containers --source cri --all
      Container Id                                                      Container Name           Pod Name                                         Runtime  State    Data Source
      240246ecbb7b4bfc3e0fd1bad51a76d43603c9cdee6a********************  install-cni              kube-flannel-ds-*****                            docker   EXITED   CRI
      4f14883f30580007b2b386be16c743048d7b7b6a6522********************  etcd                     etcd-izbp199sm5j************                     docker   RUNNING  CRI
      60775315aa50765de7332764322f7697ded2783e4860********************  kube-apiserver           kube-apiserver-izbp199sm5j************           docker   RUNNING  CRI
      8d8dd01f09f451109285a0094eef0c144bdfdef6913e********************  coredns                  coredns-64897985d-8qz25                          docker   RUNNING  CRI
      aee068814a7b10419186bb944832e65df2a8b3cab32b********************  kube-scheduler           kube-scheduler-izbp199sm5j************           docker   RUNNING  CRI
      b06609d4246be717c324b366d4e6c392fcf226ecbc4b********************  kube-flannel             kube-flannel-ds-*****                            docker   RUNNING  CRI
      bdf9a2aff47a6858897d5c734c481535f7bb70321c8b********************  install-cni-plugin       kube-flannel-ds-*****                            docker   EXITED   CRI
      c0992c3401ad52b3fce105ce5188026f28db7d5fe202********************  kube-controller-manager  kube-controller-manager-izbp199sm53************  docker   RUNNING  CRI
      d1add169bb596f53d31030f84d69e494e7b23135acd2********************  coredns                  coredns-***************                          docker   RUNNING  CRI
      fe17ab0409739e63f526aed7c79e87989e90d19f0429********************  kube-proxy               kube-proxy-*****                                 docker   RUNNING  CRI
    • aliyun-service list-containersコマンドを実行します。

      -- sourceパラメーターを指定しないでください。 このようにして、CRIに基づいてKubernetesによって管理され、Docker、containerd、またはCRI-Oのコンテナランタイム内で実行されるコンテナ、およびDockerランタイム内で実行され、CRIに準拠しないコンテナがリストされます。 以下のようなコマンド出力が返されます。

      重要

      コマンドは、CRIに基づいてKubernetesによって管理され、Docker、containerd、またはCRI-Oのコンテナランタイム内で実行されるコンテナーでのみ実行できます。 Dockerランタイム内で実行されており、CRIに準拠していないコンテナでは、コマンドを実行できません。

      [test@localhost ~]# aliyun-service list-containers
      Container Id                                                      Container Name                                                                                          Pod Name                                         Runtime  State    Data Source
      4f14883f30580007b2b386be16c743048d7b7b6a6522********************  etcd                                                                                                    etcd-izbp199sm5j************                     docker   RUNNING  CRI
      60775315aa50765de7332764322f7697ded2783e4860********************  kube-apiserver                                                                                          kube-apiserver-izbp199sm5j************           docker   RUNNING  CRI
      8d8dd01f09f451109285a0094eef0c144bdfdef6913e********************  coredns                                                                                                 coredns-648************                          docker   RUNNING  CRI
      aee068814a7b10419186bb944832e65df2a8b3cab32b********************  kube-scheduler                                                                                          kube-scheduler-izbp199sm5j************           docker   RUNNING  CRI
      b06609d4246be717c324b366d4e6c392fcf226ecbc4b********************  kube-flannel                                                                                            kube-flannel-********                            docker   RUNNING  CRI
      c0992c3401ad52b3fce105ce5188026f28db7d5fe202********************  kube-controller-manager                                                                                 kube-controller-manager-izbp199sm5j************  docker   RUNNING  CRI
      d1add169bb596f53d31030f84d69e494e7b23135acd2********************  coredns                                                                                                 coredns-648************                          docker   RUNNING  CRI
      fe17ab0409739e63f526aed7c79e87989e90d19f0429********************  kube-proxy                                                                                              kube-proxy-*****                                 docker   RUNNING  CRI
      b6864279148b3cef6e72c983f7ffa041dfe7ab5e2c57********************  k8s_POD_coredns-64897985d-8qz25_kube-system_5422418e******************************                                                                       docker   RUNNING  docker
      fa99eaa067927e47f4e30795ad45065383efc8669687********************  k8s_POD_coredns-64897985d-cxvdq_kube-system_f59766f0******************************                                                                       docker   RUNNING  docker
      3236c0f21b4a8f15fadeaaf813afb21d59889163056c********************  k8s_POD_kube-flannel-ds-qwf9p_kube-flannel_66c0205*******************************                                                                        docker   RUNNING  docker
      016bd6794042da8d4eb3b8f5f90594bad104b360670d********************  k8s_POD_kube-proxy-h4slq_kube-system_e2ce593*******************************                                                                              docker   RUNNING  docker
      ae30393668288624472d1a594be2cb45996798d6b750********************  k8s_POD_kube-scheduler-izbp199sm5j54yl36as4h9z_kube-system_f77f******************************                                                            docker   RUNNING  docker
      c2ced280d972f54aab32fda8de1f74f8799237cc51e2********************  k8s_POD_kube-controller-manager-izbp199sm5j54yl36as4h9z_kube-system_5c6*******************************                                                   docker   RUNNING  docker
      c92bce6b84d133b807d0310d215423870101d730ede2********************  k8s_POD_kube-apiserver-izbp199sm5j54yl36as4h9z_kube-system_7f6f******************************                                                            docker   RUNNING  docker
      4a5fe93977ad8eb945889cffe29f9d99d1540e870e69********************  k8s_POD_etcd-izbp199sm5j54yl36as4h9z_kube-system_4a85******************************                                                                      docker   RUNNING  docker
      a87c87c7dc162e99749cb78f8f270765e90f3df921d2********************  modest_bose                                                                                                                                              docker   RUNNING  docker

      コマンド出力の最後の列にあるデータソース値の説明:

      • CRI: CRIに基づいてKubernetesによって管理されるコンテナーを示します。

      • docker: Dockerランタイム内で実行され、CRIに準拠しないコンテナーを示します。

    • aliyun-service list-containers -- source cri -- jsonコマンドを実行します。

      -- jsonパラメーターを指定して、取得したコンテナー情報をJSON形式で一覧表示します。 Cloud Assistantを使用してコマンドを実行し、インスタンス上のコンテナを照会、解析、取得し、関連するO&M操作を実行できます。

      [test@localhost ~]# aliyun-service list-containers --source cri --json
      [{"id":"4f14883f30580007b2b386be16c743048d7b7b6a6522********************","name":"etcd","podId":"4a5fe93977ad8eb945889cffe29f9d99d1540e870e6*********************","podName":"etcd-izbp199sm5j54**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"60775315aa50765de7332764322f7697ded2783e4860********************","name":"kube-apiserver","podId":"c92bce6b84d133b807d0310d215423870101d730ede2********************","podName":"kube-apiserver-izbp199sm5j54**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"8d8dd01f09f451109285a0094eef0c144bdfdef6913e********************","name":"coredns","podId":"b6864279148b3cef6e72c983f7ffa041dfe7ab5e2c57********************","podName":"coredns-64897**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"aee068814a7b10419186bb944832e65df2a8b3cab32b********************","name":"kube-scheduler","podId":"ae30393668288624472d1a594be2cb45996798d6b750********************","podName":"kube-scheduler-izbp199sm5j54**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"b06609d4246be717c324b366d4e6c392fcf226ecbc4b********************","name":"kube-flannel","podId":"3236c0f21b4a8f15fadeaaf813afb21d59889163056c********************","podName":"kube-flannel-ds-*****","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"c0992c3401ad52b3fce105ce5188026f28db7d5fe202********************","name":"kube-controller-manager","podId":"c2ced280d972f54aab32fda8de1f74f8799237cc51e2********************","podName":"kube-controller-manager-izbp199sm5j54**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"d1add169bb596f53d31030f84d69e494e7b23135acd2********************","name":"coredns","podId":"fa99eaa067927e47f4e30795ad45065383efc8669687********************","podName":"coredns-64897**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"fe17ab0409739e63f526aed7c79e87989e90d19f0429********************","name":"kube-proxy","podId":"016bd6794042da8d4eb3b8f5f90594bad104b360670d********************","podName":"kube-proxy-*****","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"}]
  2. Cloud Assistantを使用して、コンテナーでコマンドを実行します。

    特定のコンテナでは、API操作を呼び出すことによってのみコマンドを実行できます。 Cloud Assistantに固有のRunCommandまたはInvokeCommand操作を呼び出して、特定のコンテナーでコマンドを実行する場合、ContainerIdパラメーター、ContainerNameパラメーター、またはその両方を指定する必要があります。

    説明

    Cloud Assistantを使用してコマンドを実行する際の制限については、「即時実行機能の使用」の「前提条件」および「背景情報」のセクションをご参照ください。

結果

DescribeInvocationsまたはDescribeInvocationResults操作を呼び出して、コマンドの実行ステータスまたは実行結果を照会できます。 レスポンスでContainerIdContainerNameの値を表示できます。