全部产品
Search
文档中心

Elastic Compute Service:Gunakan Cloud Assistant untuk menjalankan perintah di dalam kontainer

更新时间:Jul 06, 2025

Anda dapat menjalankan perintah di dalam kontainer pada instans Elastic Compute Service (ECS) Linux. Biasanya, untuk menjalankan perintah di dalam kontainer pada instans Linux, Anda harus terhubung ke instans tersebut dan mengakses kontainer secara manual. Cloud Assistant menyederhanakan proses ini dengan memungkinkan Anda terhubung langsung ke kontainer tanpa kata sandi atau login, serta tanpa menggunakan jump server. Untuk menjalankan perintah di dalam kontainer, Anda dapat menetapkan parameter ContainerId atau ContainerName ke nama atau ID kontainer Kubernetes saat memanggil operasi RunCommand atau InvokeCommand.

Prasyarat

  • Instansinya berada dalam keadaan Running.

  • Cloud Assistant Agent telah terinstal pada instans, dengan versi Cloud Assistant Agent 2.2.3.344 atau yang lebih baru.

    Untuk informasi lebih lanjut, lihat Instal Cloud Assistant Agent.

Batasan

  • Cloud Assistant hanya dapat menjalankan perintah di dalam kontainer yang dikelola oleh Kubernetes berdasarkan Antarmuka Runtime Kontainer (CRI) dan berjalan di dalam runtime kontainer Docker, containerd, atau CRI-O.

  • Tabel berikut menjelaskan batasan yang diberlakukan oleh CRI saat menjalankan perintah di dalam kontainer, beserta solusi untuk mengatasinya.

    Batasan

    Deskripsi dan Solusi

    Hanya pengguna default dari sebuah kontainer yang dapat digunakan untuk menjalankan perintah di dalam kontainer tersebut.

    • Setelah menentukan parameter ContainerId, ContainerName, atau keduanya, parameter Username tidak akan berpengaruh. Pengguna default dari kontainer digunakan untuk menjalankan perintah.

    • Jika ingin mengubah pengguna yang digunakan untuk menjalankan perintah, jalankan perintah sudo di dalam kontainer. Pastikan bahwa gambar kontainer mendukung perubahan pengguna.

    Perintah hanya dapat dijalankan di direktori kerja default dari sebuah kontainer.

    • Setelah menentukan parameter ContainerId, ContainerName, atau keduanya, parameter WorkingDir tidak akan berpengaruh. Perintah dijalankan di direktori kerja default dari kontainer.

    • Untuk mengubah direktori kerja dari perintah, tambahkan perintah cd di awal skrip shell.

    Hanya skrip shell yang dapat dijalankan di dalam kontainer. Anda tidak dapat menambahkan perintah dalam format seperti #!/usr/bin/python di awal skrip untuk menentukan interpreter skrip.

    • Setelah menentukan parameter ContainerId, ContainerName, atau keduanya, skrip shell Linux dijalankan menggunakan /bin/sh di dalam kontainer. Interpreter skrip yang ditentukan oleh perintah yang dimulai dengan #! tidak dapat dikenali.

    • Untuk menjalankan skrip dalam bahasa lain di dalam kontainer, panggil interpreter bahasa tersebut di dalam kontainer dan masukkan skripnya. Sebagai contoh, Anda dapat menambahkan perintah /usr/bin/python -c 'import sys; print(sys.version_info)' di awal skrip untuk memanggil interpreter Python di dalam kontainer.

Prosedur

  1. Lihat ID dan nama dari sebuah kontainer Kubernetes.

    Metode 1: Jalankan perintah kubectl untuk melihat ID dan nama dari sebuah kontainer Kubernetes.

    Jalankan perintah kubectl --namespace <Namespace yang Ditentukan> describe pod <Pod yang Ditentukan> untuk melihat nilai ContainerId dari sebuah kontainer di dalam pod yang ditentukan, atau gunakan Kubernetes apiserver untuk menanyakan ID dan nama dari sebuah kontainer Kubernetes.

    1. Hubungkan ke sebuah instans.

      Untuk informasi lebih lanjut, lihat Hubungkan ke Instans Linux Menggunakan Kata Sandi atau Kunci.

    2. Jalankan perintah berikut untuk menanyakan ID dari sebuah kontainer Kubernetes:

      kubectl --namespace <Namespace yang Ditentukan> describe pod <Pod yang Ditentukan>

      Dalam contoh ini, namespace adalah kube-system dan kontainer di dalam pod yang ditentukan adalah kube-proxy-h4slq. Keluaran perintah serupa dengan yang berikut ini dikembalikan:

      [test@localhost ~]# kubectl --namespace kube-system describe pod kube-proxy-h4slq
      Nama:                 kube-proxy-h4slq
      Namespace:            kube-system
      Prioritas:             2000001000
      Nama Kelas Prioritas:  system-node-critical
      Node:                 master1/192.168.1.11
      Waktu Mulai:           Kam, 11 Agustus 2022 16:33:04 +0800
      Label:               controller-revision-hash=9c5d7****
                            k8s-app=kube-proxy
                            pod-template-generation=1
      Annotasi:          <none>
      Status:               Running
      IP:                   192.168.1.11
      IPs:
        IP:           192.168.1.11
      Dikendalikan Oleh:  DaemonSet/kube-proxy
      Kontainer:
        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
          Hitungan Restart:  0
          Lingkungan:
            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)

      Di bagian Containers, nilai Container ID dari kontainer kube-proxy adalah docker://fe17ab0409739e63f526aed7c79e87989e90d19f0429********************. Nilai ini menunjukkan bahwa kontainer menggunakan runtime Docker dan ID kontainer adalah fe17ab0409739e63f526aed7c79e87989e90d19f0429********************. Nama dari kontainer yang dikelola oleh Kubernetes berdasarkan CRI adalah kube-proxy.

    3. (Opsional) Jalankan perintah berikut untuk melihat jenis dan versi dari runtime kontainer yang digunakan pada node di dalam kluster Kubernetes:

      kubectl get nodes -o wide

      Keluaran perintah serupa dengan yang berikut ini dikembalikan:

      NAMA    STATUS     PERAN                  UMUR   VERSI   IP INTERNAL     IP EKSTERNAL   GAMBAR OS                         VERSI KERNEL                 RUNTIME KONTAINER
      node1   Siap      <none>                 17j   v1.23.6   192.168.1.101   <none>        Ubuntu 20.04.4 LTS               5.4.0-123-generic              containerd://1.6.7
      node2   Siap      <none>                 17j   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 Siap      control-plane,master   18j   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   Siap      <none>                 17j   v1.23.6   192.168.1.103   <none>        Debian GNU/Linux 11 (bullseye)   5.10.0-16-amd64                docker://20.10.17

      Kolom CONTAINER-RUNTIME pada output perintah menampilkan waktu proses kontainer yang berbeda di setiap node.

    Metode 2: Gunakan Cloud Assistant Agent untuk melihat ID dan nama dari sebuah kontainer Kubernetes.

    Cloud Assistant Agent pada instans Linux memungkinkan Anda menjalankan perintah di dalam kontainer. Cloud Assistant Agent mencantumkan kontainer yang dikelola oleh Kubernetes berdasarkan CRI dan berjalan di dalam runtime kontainer Docker, containerd, atau CRI-O. Cloud Assistant Agent juga memungkinkan Anda melihat kontainer pada instans tanpa perlu menjalankan perintah kubectl.

    Subperintah yang digunakan oleh Cloud Assistant Agent untuk mencantumkan kontainer pada instans adalah list-containers. Anda dapat menentukan parameter berdasarkan subperintah. Berikut adalah contoh cara menentukan parameter:

    • Jalankan perintah aliyun-service list-containers --source cri.

      Tentukan parameter --source cri untuk mencantumkan kontainer yang dikelola oleh Kubernetes berdasarkan CRI dan berjalan di dalam runtime kontainer Docker, containerd, atau CRI-O. Keluaran perintah serupa dengan yang berikut ini dikembalikan.

      [test@localhost ~]# aliyun-service list-containers --source cri
      ID Kontainer                                                      Nama Kontainer           Nama Pod                                         Runtime  Status    Sumber Data
      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

      Nilai ID Kontainer dan Nama Kontainer dalam keluaran perintah dapat digunakan untuk parameter ContainerId dan ContainerName dalam perintah yang ingin Anda jalankan di dalam kontainer. Kolom Nama Pod mencantumkan pod Kubernetes yang sesuai dengan kontainer.

    • Jalankan perintah aliyun-service list-containers --source cri --all.

      Tentukan parameter --all untuk mencantumkan semua kontainer yang dikelola oleh Kubernetes berdasarkan CRI dan ada di dalam runtime kontainer Docker, containerd, atau CRI-O. Keluaran perintah serupa dengan yang berikut ini dikembalikan.

      [test@localhost ~]# aliyun-service list-containers --source cri --all
      ID Kontainer                                                      Nama Kontainer           Nama Pod                                         Runtime  Status    Sumber Data
      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
    • Jalankan perintah aliyun-service list-containers.

      Jangan tentukan parameter --source. Dengan cara ini, kontainer berikut dicantumkan: kontainer yang dikelola oleh Kubernetes berdasarkan CRI dan berjalan di dalam runtime kontainer Docker, containerd, atau CRI-O, dan kontainer yang berjalan di dalam runtime Docker dan tidak sesuai dengan CRI. Keluaran perintah serupa dengan yang berikut ini dikembalikan.

      Penting

      Anda hanya dapat menjalankan perintah di dalam kontainer yang dikelola oleh Kubernetes berdasarkan CRI dan berjalan di dalam runtime kontainer Docker, containerd, atau CRI-O. Anda tidak dapat menjalankan perintah di dalam kontainer yang berjalan di dalam runtime Docker dan tidak sesuai dengan CRI.

      [test@localhost ~]# aliyun-service list-containers
      ID Kontainer                                                      Nama Kontainer                                                                                          Nama Pod                                         Runtime  Status    Sumber Data
      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

      Penjelasan nilai Sumber Data di kolom terakhir keluaran perintah:

      • CRI: menunjukkan kontainer yang dikelola oleh Kubernetes berdasarkan CRI.

      • docker: menunjukkan kontainer yang berjalan di dalam runtime Docker dan tidak sesuai dengan CRI.

    • Jalankan perintah aliyun-service list-containers --source cri --json.

      Tentukan parameter --json untuk mencantumkan informasi kontainer yang diperoleh dalam format JSON. Anda dapat menjalankan perintah menggunakan Cloud Assistant untuk menanyakan, mengurai, dan memperoleh kontainer pada sebuah instans, serta melakukan operasi O&M terkait.

      [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":"016bd6794042dad8d4eb3b8f5f90594bad104b360670d********************","podName":"kube-proxy-*****","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"}]
  2. Gunakan Cloud Assistant untuk menjalankan perintah di dalam kontainer.

    Anda hanya dapat menjalankan perintah di kontainer tertentu dengan memanggil operasi API. Saat memanggil operasi RunCommand atau InvokeCommand khusus untuk Cloud Assistant guna menjalankan perintah di kontainer tertentu, Anda harus menentukan parameter ContainerId, parameter ContainerName, atau keduanya.

    Catatan

    Untuk informasi tentang batasan penggunaan Cloud Assistant untuk menjalankan perintah, lihat bagian "Prasyarat" dan "Informasi Latar Belakang" dalam topik Gunakan Fitur Eksekusi Segera.

Hasil

Anda dapat memanggil operasi DescribeInvocations atau DescribeInvocationResults untuk menanyakan status eksekusi atau hasil eksekusi dari perintah. Anda dapat melihat nilai ContainerId dan ContainerName dalam respons.