Cloud Assistant を使用すると、インスタンスへのログインやジャンプサーバーを使用せずに、Linux Elastic Compute Service (ECS) インスタンス上の Kubernetes コンテナ内で直接コマンドを実行できます。RunCommand または InvokeCommand を呼び出す際に、ContainerId または ContainerName を指定してください。
前提条件
-
インスタンスは [実行中] 状態です。
-
インスタンスに Cloud Assistant Agent 2.2.3.344 以降がインストールされています。
「Cloud Assistant エージェントをインストールする」をご参照ください。
制限事項
-
Cloud Assistant は、Docker、containerd、または CRI-O 上で実行される CRI 管理の Kubernetes コンテナのみをサポートします。
-
コンテナ内でコマンドを実行する際、CRI により以下の制限が適用されます。
制限
回避策
デフォルトのコンテナユーザーのみがコマンドを実行できます。
-
ContainerIdまたはContainerNameが指定されている場合、Usernameパラメーターは無視されます。コマンドはデフォルトのコンテナユーザーとして実行されます。 -
ユーザーを切り替えるには、コンテナで
sudoを実行します。コンテナイメージがユーザーの切り替えに対応していることを確認してください。
コマンドはデフォルトの作業ディレクトリでのみ実行されます。
-
ContainerIdまたはContainerNameが指定されている場合、WorkingDirパラメーターは無視されます。 -
ワーキングディレクトリを変更するには、スクリプトの先頭に
cdコマンドを追加します。
シェルスクリプトのみがサポートされています。
#!/usr/bin/pythonなどのシェバン行は認識されません。-
ContainerIdまたはContainerNameが指定された場合、スクリプトはコンテナ内で/bin/shで実行されます。#!シェバンディレクティブは無視されます。 -
非シェルスクリプトを実行するには、インタープリターを直接呼び出します。 たとえば、
/usr/bin/python -c 'import sys; print(sys.version_info)'を実行して Python インタープリターを呼び出します。
-
手順
-
Kubernetes コンテナの ID と名前を取得します。
方法 1:kubectl を使用してコンテナ ID と名前を取得する
kubectl --namespace <Specified namespace> describe pod <Specified pod>を実行してコンテナのContainerIdを表示するか、Kubernetes apiserverにクエリしてコンテナ ID と名前を取得します。-
インスタンスに接続します。
詳細については、「パスワードまたはキーを使用して Linux インスタンスに接続する」をご参照ください。
-
コンテナ ID を照会します。
kubectl --namespace <指定した名前空間> describe pod <指定した Pod>この例では、名前空間は kube-system、Pod は 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)Containersセクションで、kube-proxyコンテナのContainer IDはdocker://fe17ab0409739e63f526aed7c79e87989e90d19f0429********************です。これは、Docker ランタイムが使用されており、コンテナ ID がfe17ab0409739e63f526aed7c79e87989e90d19f0429********************であることを示します。CRI 管理のコンテナ名は kube-proxy です。 -
(オプション) 各ノードのコンテナランタイムのタイプとバージョンを確認します。
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.17CONTAINER-RUNTIME列には、各ノードのコンテナランタイムが表示されます。
方法 2: Cloud Assistant Agent を使用してコンテナ ID と名前を取得
Linux インスタンス上の Cloud Assistant Agent は、kubectl を必要とせずに、Docker、containerd、または CRI-O 上で実行されている、CRI で管理された Kubernetes コンテナを一覧表示できます。
list-containersサブコマンドは、インスタンス上のコンテナを一覧表示します。例:-
aliyun-service list-containers --source criを実行します。--source criパラメーターは、CRI で管理されている実行中のコンテナのみを一覧表示します。出力例:[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コンテナ IDとコンテナ名の値を、ContainerIdパラメーターとContainerNameパラメーターに使用します。ポッド名列には、対応する Kubernetes ポッドが表示されます。 -
aliyun-service list-containers --source cri --allを実行します。--allパラメーターは、すべての状態 (終了済みを含む) のコンテナを含みます。出力例:[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 で管理されるコンテナと CRI で管理されていない Docker コンテナの両方が一覧表示されます。出力例:重要コマンドは CRI 管理のコンテナ内でのみ実行できます。非 CRI の Docker コンテナはサポートされていません。
[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: 非CRI の Docker コンテナ。
-
-
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"}]
-
-
Cloud Assistant を使用してコンテナ内でコマンドを実行します。
API オペレーションを呼び出すことによってのみ、特定のコンテナ内でコマンドを実行できます。RunCommand または InvokeCommand を呼び出す際に、
ContainerId、ContainerName、またはその両方を指定してください。説明Cloud Assistant コマンドの制限については、「即時実行機能を使用する」の「前提条件」および「背景情報」セクションをご参照ください。
結果
DescribeInvocations または DescribeInvocationResults を呼び出して、実行ステータスまたは結果を照会します。レスポンスには ContainerId および ContainerName の値が含まれます。