全部产品
Search
文档中心

:Jadwalkan pod untuk berjalan pada instance kontainer elastis melalui node virtual

更新时间:Jul 06, 2025

Saat menggunakan kluster Container Service for Kubernetes (ACK), Anda mungkin perlu meluncurkan banyak pod dalam waktu singkat. Memperluas node Elastic Compute Service (ECS) untuk pod ini membutuhkan waktu terlalu lama, sementara menyediakan ECS instance tambahan yang menganggur membuang sumber daya. Solusi yang lebih baik adalah menjadwalkan pod untuk berjalan pada instance kontainer elastis melalui node virtual ACK. Dengan cara ini, Anda tidak perlu membeli atau mengelola ECS instance. Topik ini menjelaskan cara menjadwalkan pod ke instance kontainer elastis di kluster terdaftar ACK One.

Cara kerjanya

Elastic Container Instance adalah layanan komputasi serverless dari Alibaba Cloud yang menawarkan lingkungan runtime tanpa pemeliharaan, terisolasi, dan cepat dikerahkan untuk container Anda. Instance kontainer elastis memungkinkan Anda fokus pada aplikasi berbasis container tanpa perlu membeli atau mengelola ECS instance. Anda dapat membuat instance kontainer elastis sesuai kebutuhan, dengan biaya berdasarkan penggunaan sumber daya per detik.

Biasanya, kluster Anda memiliki setidaknya satu kelompok node pusat data. Setelah membuat pod, kluster akan menjadwalkan pod untuk berjalan pada node. Mode penjadwalan ini cocok untuk aplikasi dengan volume lalu lintas yang stabil. Namun, jika beban kerja Anda mengalami lonjakan mendadak atau tidak terduga, disarankan menggunakan node virtual untuk menjadwalkan pod langsung ke Elastic Container Instance. Solusi ini menghilangkan waktu pembuatan node dan menghindari biaya sumber daya yang menganggur.

Prasyarat

Langkah 1: Berikan izin RAM kepada ack-virtual-node

Gunakan onectl

  1. Instal onectl di mesin lokal Anda. Untuk informasi lebih lanjut, lihat Gunakan onectl untuk mengelola kluster terdaftar.

  2. Jalankan perintah berikut untuk memberikan izin Resource Access Management (RAM) kepada ack-virtual-node:

    onectl ram-user grant --addon ack-virtual-node

    Keluaran yang diharapkan:

    Ram policy ack-one-registered-cluster-policy-ack-virtual-node granted to ram user ack-one-user-ce313528c3 successfully.

Gunakan konsol

Sebelum menginstal komponen di kluster terdaftar, Anda harus menentukan pasangan AccessKey di kluster Kubernetes mandiri. Pasangan AccessKey diperlukan saat mengakses layanan Alibaba Cloud dari kluster Kubernetes mandiri. Sebelum menetapkan pasangan AccessKey, buat pengguna RAM dan berikan pengguna RAM izin untuk mengakses sumber daya Alibaba Cloud.

  1. Buat pengguna RAM.

  2. Opsional: Buat kebijakan kustom.

    Tampilkan contoh kode

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "vpc:DescribeVSwitches",
                    "vpc:DescribeVpcs"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "eci:CreateContainerGroup",
                    "eci:DeleteContainerGroup",
                    "eci:DescribeContainerGroups",
                    "eci:DescribeContainerGroupStatus",
                    "eci:DescribeContainerGroupEvents",
                    "eci:DescribeContainerLog",
                    "eci:UpdateContainerGroup",
                    "eci:UpdateContainerGroupByTemplate",
                    "eci:CreateContainerGroupFromTemplate",
                    "eci:RestartContainerGroup",
                    "eci:ExportContainerGroupTemplate",
                    "eci:DescribeContainerGroupMetric",
                    "eci:DescribeMultiContainerGroupMetric",
                    "eci:ExecContainerCommand",
                    "eci:CreateImageCache",
                    "eci:DescribeImageCaches",
                    "eci:DeleteImageCache",
                    "eci:DescribeContainerGroupMetaInfos",
                    "eci:UpdateImageCache",
                    "eci:RestartContainer",
                    "eci:RestartContainers"
                ],
                "Resource": [
                    "*"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "acc:DescribeZones",
                    "acc:CreateInstance",
                    "acc:UpdateInstance",
                    "acc:DeleteInstance",
                    "acc:RestartInstance",
                    "acc:DescribeInstances",
                    "acc:DescribeInstanceStatus",
                    "acc:DescribeInstanceEvents",
                    "acc:DescribeInstanceDetail",
                    "acc:DescribeMultiInstanceMetric",
                    "acc:DescribeContainerLog",
                    "acc:ResizeInstanceVolume",
                    "acc:CreateCustomResource",
                    "acc:UpdateCustomResource",
                    "acc:DeleteCustomResource",
                    "acc:DescribeCustomResources",
                    "acc:DescribeCustomResourceDetail"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  3. Lampirkan kebijakan ke pengguna RAM.

    Anda dapat memberikan izin kepada pengguna RAM dengan menambahkan kebijakan sistem seperti AliyunECIFullAccess, AliyunVPCReadOnlyAccess, dan AliyunAccFullAccess, atau kebijakan izin kustom.

  4. Buat pasangan AccessKey untuk pengguna RAM.

    Peringatan

    Kami merekomendasikan Anda konfigurasikan kebijakan berbasis pasangan AccessKey untuk kontrol akses jaringan, membatasi sumber panggilan AccessKey ke lingkungan jaringan tepercaya untuk meningkatkan keamanan AccessKey.

  5. Gunakan pasangan AccessKey untuk membuat Secret bernama alibaba-addon-secret di kluster terdaftar.

    Sistem secara otomatis menggunakan pasangan AccessKey untuk mengakses sumber daya cloud saat Anda menginstal ack-virtual-node.

    kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your access key id>' --from-literal='access-key-secret=<your access key secret>'
    Catatan

    Ganti <your access key id> dan <your access key secret> dengan pasangan AccessKey yang Anda peroleh di langkah sebelumnya.

Langkah 2: Instal ack-virtual-node

Gunakan onectl

Jalankan perintah berikut untuk menginstal ack-virtual-node:

onectl addon install ack-virtual-node

Keluaran yang diharapkan:

Addon ack-virtual-node, version **** installed.

Gunakan konsol

  1. Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, klik Clusters.

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi di sebelah kiri, klik Add-ons.

  3. Di halaman Add-ons, temukan ack-virtual-node dan klik Install.

    Di kotak dialog Note, klik OK. vSwitch default dan grup keamanan kluster digunakan untuk instance kontainer elastis yang diterapkan oleh ack-virtual-node. Untuk informasi lebih lanjut, lihat Apa yang harus dilakukan selanjutnya.

Langkah 3: Jadwalkan pod ke instance kontainer elastis

Setelah ack-virtual-node diterapkan di kluster Anda, Anda dapat menjadwalkan pod ke instance kontainer elastis yang diterapkan sebagai node virtual di kluster Anda. Anda dapat menggunakan salah satu metode berikut untuk menjadwalkan pod ke instance kontainer elastis di kluster terdaftar. Pastikan bahwa node virtual berada dalam status Ready sebelum menjadwalkan pod.

  1. Jalankan perintah berikut untuk memeriksa status node virtual:

    kubectl  get no |grep virtual-kubelet

    Keluaran yang diharapkan:

    virtual-kubelet-cn-hangzhou-b   Ready    agent                  18d   v1.20.11-aliyun.1

    Keluaran menunjukkan bahwa node virtual berada dalam status Ready.

  2. Anda dapat menggunakan salah satu dari tiga metode berikut untuk menjadwalkan pod ke instance kontainer elastis.

    Method 1: Add labels to pods (versi kluster lebih dari 1.16)

    Tambahkan label alibabacloud.com/eci=true ke pod yang ingin Anda buat. Kemudian, pod berbasis Elastic Container Instance dibuat dan dijadwalkan ke node virtual. Contoh:

    1. Jalankan perintah berikut untuk menambahkan label ke pod:

    2. kubectl run nginx --image nginx -l alibabacloud.com/eci=true
    3. Jalankan perintah berikut untuk memeriksa pod:

    4. kubectl get pod -o wide|grep virtual-kubelet
    5. Keluaran yang diharapkan:

    6. nginx-7fc9f746b6-r4xgx     0/1     ContainerCreating   0          20s   192.168.XX.XX   virtual-kubelet        <none>           <none>

    Method 2: Add labels to namespaces

    Tambahkan label alibabacloud.com/eci=true ke namespace tempat pod tersebut berada. Kemudian, pod berbasis Elastic Container Instance dibuat dan dijadwalkan ke node virtual. Contoh:

    1. Jalankan perintah berikut untuk membuat node virtual:

    2. kubectl create ns vk
    3. Jalankan perintah berikut untuk menambahkan label ke namespace tempat pod tersebut berada:

    4. kubectl label namespace vk alibabacloud.com/eci=true
    5. Jalankan perintah berikut untuk menjadwalkan pod ke node virtual:

    6. kubectl -n vk run nginx --image nginx
    7. Jalankan perintah berikut untuk memeriksa pod:

    8. kubectl -n vk get pod -o wide|grep virtual-kubelet
    9. Keluaran yang diharapkan:

    10. nginx-6f489b847d-vgj4d      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>

    Metode 3: Tentukan nama node

    Jadwalkan hanya pod tertentu ke node virtual. Tambahkan label nodeName: virtual-kubelet-cn-shanghai-k ke pod. Kemudian, pod berbasis Elastic Container Instance dibuat dan dijadwalkan ke node virtual. Contoh:

    1. Buat file bernama nginx-deployment.yaml dan salin konten berikut ke file:

      apiVersion: apps/v1 # untuk versi sebelum 1.8.0 gunakan apps/v1beta1
      kind: Deployment
      metadata:
        name: nginx-deployment-basic
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            nodeName: virtual-kubelet-cn-shanghai-k             # nodeName dari node virtual yang ditentukan
            containers:
            - name: nginx
              image: nginx:1.7.9 # ganti dengan <image_name:tags> Anda
              ports:
              - containerPort: 80
              resources:
                limits:
                  cpu: "500m"
    2. Jalankan perintah berikut untuk menerapkan aplikasi:

      kubectl apply -f nginx-deployment.yaml
    3. Jalankan perintah berikut untuk memeriksa pod:

      kubectl  get pod -o wide|grep virtual-kubelet
    4. Keluaran yang diharapkan:

      nginx-6f489b847d-XXX      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>
      nginx-6f489b847d-XXX      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>

Apa yang harus dilakukan selanjutnya

Ubah konfigurasi vSwitch yang terhubung ke instance kontainer elastis

Anda dapat mengubah variabel lingkungan ECI_VSWITCH untuk mengubah vSwitch dari pod yang dijadwalkan ke node virtual. Kami merekomendasikan Anda mengonfigurasi beberapa vSwitch yang diterapkan di zona berbeda untuk memastikan ketersediaan tinggi. Saat instance kontainer elastis di zona saat ini habis stok, controller node virtual membuat pod di zona lain.

Jalankan perintah berikut untuk mengubah konfigurasi vSwitch yang terhubung ke instance kontainer elastis:

kubectl edit configmap eci-profile -n kube-system

Contoh konfigurasi:

data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enablePrivateZone: "false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****     # vSwitch yang terhubung ke pod instance kontainer elastis. Pisahkan beberapa ID vSwitch dengan koma (,).
  vpcId: vpc-2zeghwzptn5zii0w7****

Untuk informasi lebih lanjut tentang cara mengonfigurasi eci-profile, lihat Konfigurasikan eci-profile.

Delete a virtual node

  1. Hapus instalasi ack-virtual-node dari kluster terdaftar.

    Gunakan onectl

    Jalankan perintah berikut untuk menghapus instalasi ack-virtual-node:

    onectl addon uninstall ack-virtual-node

    Keluaran yang diharapkan:

    Addon ack-virtual-node uninstalled.

    Gunakan konsol

    Pergi ke halaman Add-ons di Konsol ACK dan hapus instalasi ack-virtual-node.

  2. Jalankan kubectl delete node <node name> untuk menghapus node virtual yang tidak Anda butuhkan.

    Catatan

    Setelah Anda menghapus instalasi ack-virtual-node, instance kontainer elastis yang ada di kluster Anda tidak dihapus.