Cloud Assistant le permite ejecutar comandos directamente en contenedores de Kubernetes sobre instancias ECS con Linux, sin necesidad de iniciar sesión en las instancias ni utilizar servidores de salto. Especifique ContainerId o ContainerName al invocar RunCommand o InvokeCommand.
Requisitos previos
Las instancias se encuentran en estado Running.
-
Cloud Assistant Agent 2.2.3.344 o posterior está instalado en las instancias.
Consulte Install Cloud Assistant Agent.
Límites
Cloud Assistant solo admite contenedores de Kubernetes gestionados por CRI que se ejecutan en Docker, containerd o CRI-O.
-
El CRI impone los siguientes límites al ejecutar comandos en contenedores.
Límite
Solución alternativa
Solo el usuario predeterminado del contenedor puede ejecutar comandos.
-
Cuando se especifica
ContainerIdoContainerName, se ignora el parámetroUsername. Los comandos se ejecutan como el usuario predeterminado del contenedor. -
Para cambiar de usuario, ejecute
sudodentro del contenedor. Asegúrese de que la imagen del contenedor admita el cambio de usuario.
Los comandos solo se ejecutan en el directorio de trabajo predeterminado.
-
Cuando se especifica
ContainerIdoContainerName, se ignora el parámetroWorkingDir. -
Para cambiar el directorio de trabajo, agregue un comando
cdal inicio del script.
Solo se admiten scripts de shell. No se reconocen las líneas shebang como
#!/usr/bin/python.-
Cuando se especifica
ContainerIdoContainerName, los scripts se ejecutan con/bin/shen el contenedor. Se ignora la directiva shebang#!. -
Para ejecutar un script que no sea de shell, invoque directamente el intérprete. Por ejemplo, agregue
/usr/bin/python -c 'import sys; print(sys.version_info)'para llamar al intérprete de Python.
-
Procedimiento
-
Obtenga el ID y el nombre de un contenedor de Kubernetes.
Método 1: Usar kubectl para obtener el ID y el nombre del contenedor
Ejecute
kubectl --namespace <Specified namespace> describe pod <Specified pod>para consultar elContainerIdde un contenedor, o bien consulte elKubernetes apiserverpara obtener el ID y el nombre del contenedor.-
Conéctese a la instancia.
Consulte Connect to a Linux instance by using a password or key.
-
Consulte el ID del contenedor:
kubectl --namespace <Specified namespace> describe pod <Specified pod>En este ejemplo, el namespace es kube-system y el pod es kube-proxy-h4slq. Salida de ejemplo:
[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)En la sección
Containers, elContainer IDdel contenedorkube-proxyesdocker://fe17ab0409739e63f526aed7c79e87989e90d19f0429********************. Esto indica un entorno de ejecución Docker con el ID de contenedorfe17ab0409739e63f526aed7c79e87989e90d19f0429********************. El nombre del contenedor gestionado por CRI es kube-proxy. -
(Opcional) Consulte los tipos y versiones del entorno de ejecución de contenedores en cada nodo:
kubectl get nodes -o wideSalida de ejemplo:
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.17La columna
CONTAINER-RUNTIMEmuestra el entorno de ejecución de contenedores en cada nodo.
Método 2: Usar **Cloud Assistant Agent** para obtener el ID y el nombre del contenedor
Cloud Assistant Agent en instancias Linux puede listar contenedores de Kubernetes gestionados por CRI que se ejecutan en Docker, containerd o CRI-O sin necesidad de usar kubectl.
El subcomando
list-containerslista los contenedores en las instancias. Ejemplos:-
Ejecute
aliyun-service list-containers --source cri.El parámetro
--source crilista únicamente los contenedores en ejecución gestionados por CRI. Salida de ejemplo:[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 CRIUtilice los valores de
Container IdyContainer Namepara los parámetrosContainerIdyContainerName. La columnaPod Namemuestra los pods de Kubernetes correspondientes. -
Ejecute
aliyun-service list-containers --source cri --all.El parámetro
--allincluye contenedores en todos los estados (incluidos los finalizados). Salida de ejemplo:[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 -
Ejecute
aliyun-service list-containers.Sin
--source, el comando lista tanto los contenedores gestionados por CRI como los contenedores Docker no gestionados por CRI. Salida de ejemplo:ImportanteLos comandos solo pueden ejecutarse en contenedores gestionados por CRI. Los contenedores Docker no gestionados por CRI no son compatibles.
[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 dockerValores de la columna
Data Source:CRI: Contenedores de Kubernetes gestionados por CRI.docker: Contenedores Docker no gestionados por CRI.
-
Ejecute
aliyun-service list-containers --source cri --json.El parámetro
--jsongenera la información de los contenedores en formato JSON. Puede usar Cloud Assistant para consultar y analizar los datos de los contenedores con fines de automatización de operaciones y mantenimiento.[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"}]
-
-
Ejecute comandos en contenedores con Cloud Assistant.
Solo puede ejecutar comandos en contenedores específicos mediante llamadas a operaciones de API. Al invocar RunCommand o InvokeCommand, especifique
ContainerId,ContainerNameo ambos.NotaPara conocer los límites de los comandos de Cloud Assistant, consulte las secciones "Requisitos previos" y "Contexto" en Use the immediate execution feature.
Resultado
Invoque DescribeInvocations o DescribeInvocationResults para consultar el estado o los resultados de la ejecución. La respuesta incluye los valores de ContainerId y ContainerName.