All Products
Search
Document Center

Container Service for Kubernetes:Deploy and manage the Cloud-native AI Suite

Last Updated:Jun 24, 2026

Instal komponen AI/ML, pantau resource GPU, dan kelola kuota tim pada kluster ACK Pro.

Tiga tugas inti: instal suite, lihat dasbor resource, dan kelola pengguna serta kuota dengan penjadwalan kapasitas.

Prasyarat

Sebelum memulai:

  • Kluster ACK Pro yang menjalankan Kubernetes 1.18 atau versi lebih baru

  • add-on monitoring dan Simple Log Service diaktifkan pada halaman Component Configurations selama pembuatan kluster

Konsep utama

Batas keamanan

Kubernetes adalah orchestrator single-tenant: satu control plane melayani semua tenant dalam sebuah kluster. Kluster merupakan satu-satunya batas keamanan yang bersifat mutlak. Struktur pohon kuota, grup pengguna, dan namespace menyediakan pembatas organisasi dan isolasi logis—bukan jaminan keamanan yang setara dengan pemisahan tingkat kluster. Rancang arsitektur multi-tenant Anda sesuai dengan prinsip ini.

Cara kerja penjadwalan kapasitas

Setiap node kuota dalam pohon kuota memiliki dua parameter:

  • Min: resource minimum yang dijamin dapat selalu diklaim oleh namespace, bahkan ketika kluster mengalami tekanan

  • Max: resource maksimum yang dapat digunakan namespace saat kapasitas idle tersedia

Namespace lain dapat meminjam kapasitas idle hingga mencapai nilai Max-nya. Ketika namespace pemilik membutuhkan kembali alokasi minimumnya, penjadwal akan menarik kembali resource tersebut dengan mempertimbangkan prioritas workload, ketersediaan, dan waktu pembuatan.

Objek sumber daya

Object Role
Quota tree Struktur alokasi resource hierarkis
Quota node Node dalam pohon; setiap leaf node dipetakan ke satu atau beberapa namespace
User group Unit alokasi terkecil; dipetakan ke leaf quota node
User Memiliki akun layanan Kubernetes untuk mengirim pekerjaan dan mengakses konsol
Namespace Namespace Kubernetes yang di-bind ke leaf quota node

Peran pengguna

Role Permissions
admin Masuk ke AI Dashboard, kelola komponen kluster, dan memiliki semua izin peneliti
researcher Kirim pekerjaan, gunakan resource kluster, masuk ke AI Developer Console

Langkah 1: Instal Cloud-native AI Suite

Suite ini memiliki enam kategori komponen—instal hanya yang dibutuhkan oleh workload Anda. Arena dipilih secara default dan wajib diinstal.

Component category Purpose Install separately?
Task elasticity Skalakan workload AI secara dinamis Tidak
Data acceleration Percepat akses dataset Tidak
AI task scheduling Jadwalkan workload AI dengan kebijakan yang mempertimbangkan kapasitas Tidak
AI task lifecycle management Kelola siklus hidup pekerjaan pelatihan Tidak
AI Dashboard Pantau resource GPU dan kuota Ya (memerlukan izin RAM)
AI Developer Console Kirim dan kelola pekerjaan AI Ya (memerlukan izin RAM)

Deploy suite

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

  2. Klik nama kluster, lalu pilih Applications > Cloud-native AI Suite di panel kiri.

  3. Klik Deploy.

  4. Pilih komponen dan klik Deploy Cloud-native AI Suite. Sistem akan memeriksa dependensi sebelum melakukan deployment. Setelah instalasi, daftar Components memungkinkan Anda untuk Deploy, Upgrade, atau Uninstall komponen individual.

  5. Setelah menginstal ack-ai-dashboard dan ack-ai-dev-console, tautan ke AI Dashboard dan AI Developer Console akan muncul di halaman Cloud-native AI Suite.

    Console

Konfigurasi AI Dashboard

Penting

Sejak 22 Januari 2025, AI Console (AI Dashboard dan AI Developer Console) memerlukan akses daftar putih. Deployment yang dilakukan sebelum tanggal tersebut tidak terpengaruh. Pengguna yang tidak termasuk dalam daftar putih dapat menggunakan Open-source AI Console sebagai gantinya.

Berikan izin RAM ke peran pekerja

Sebelum AI Dashboard dapat mengakses data kluster, sambungkan kebijakan RAM kustom ke peran worker kluster.

  1. Buat kebijakan kustom.

    1. Masuk ke Konsol RAM, lalu pilih Permissions > Policies pada panel navigasi kiri.

    2. Klik Create Policy, pilih tab JSON, lalu tambahkan kebijakan berikut:

      {
          "Version": "1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "cs:*",
                      "log:GetProject",
                      "log:GetLogStore",
                      "log:GetConfig",
                      "log:GetMachineGroup",
                      "log:GetAppliedMachineGroups",
                      "log:GetAppliedConfigs",
                      "log:GetIndex",
                      "log:GetSavedSearch",
                      "log:GetDashboard",
                      "log:GetJob",
                      "ecs:DescribeInstances",
                      "ecs:DescribeSpotPriceHistory",
                      "ecs:DescribePrice",
                      "eci:DescribeContainerGroups",
                      "eci:DescribeContainerGroupPrice",
                      "log:GetLogStoreLogs",
                      "ims:CreateApplication",
                      "ims:UpdateApplication",
                      "ims:GetApplication",
                      "ims:ListApplications",
                      "ims:DeleteApplication",
                      "ims:CreateAppSecret",
                      "ims:GetAppSecret",
                      "ims:ListAppSecretIds",
                      "ims:ListUsers"
                  ],
                  "Resource": "*"
              }
          ]
      }
    3. Beri nama kebijakan k8sWorkerRolePolicy-{ClusterID} dan klik OK.

  2. Sambungkan kebijakan ke peran worker kluster.

    1. Di Konsol RAM, pilih Identities > Roles dan cari KubernetesWorkerRole-{ClusterID}.

    2. Klik Grant Permission.

    3. Di Select Policy, klik Custom Policy, cari k8sWorkerRolePolicy-{ClusterID}, pilih, lalu klik OK.

Selesaikan penyiapan AI Dashboard

  1. Di halaman Cloud-native AI Suite, pilih Sample Console untuk Interaction Mode. Kotak dialog Note akan muncul.

    • Jika ditampilkan Authorized, lanjutkan ke langkah 3.

    • Jika muncul Unauthorized berwarna merah, lengkapi izin RAM seperti di atas dan klik Authorization Check. Setelah otorisasi berhasil, status Authorized akan ditampilkan. Prompt dialog Authorized

  2. Atur Console Data Storage: Pre-installed MySQL untuk pengujian atau ApsaraDB RDS untuk produksi. Lihat Instal dan konfigurasi AI Dashboard dan AI Developer Console.

  3. Klik Deploy Cloud-native AI Suite. AI Dashboard siap digunakan ketika statusnya menunjukkan Ready.

(Opsional) Buat dan percepat dataset

Mount dataset dari Object Storage Service (OSS) sebagai persistent volume (PV) dan percepat aksesnya di AI Dashboard.

Buat PV dan PVC

  1. Buat namespace:

    kubectl create ns demo-ns
  2. Buat file bernama fashion-mnist.yaml:

    Placeholder Description Example
    fashion-mnist Nama bucket OSS my-dataset-bucket
    oss-cn-beijing.aliyuncs.com Titik akhir OSS untuk wilayah bucket oss-cn-hangzhou.aliyuncs.com
    AKID AccessKey ID LTAI5tXxx
    AKSECRET Rahasia AccessKey xXxXxXx
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: fashion-demo-pv
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 10Gi
      csi:
        driver: ossplugin.csi.alibabacloud.com
        volumeAttributes:
          bucket: fashion-mnist
          otherOpts: "-o max_stat_cache_size=0 -o allow_other"
          url: oss-cn-beijing.aliyuncs.com
          akId: "AKID"
          akSecret: "AKSECRET"
        volumeHandle: fashion-demo-pv
      persistentVolumeReclaimPolicy: Retain
      storageClassName: oss
      volumeMode: Filesystem
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: fashion-demo-pvc
      namespace: demo-ns
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      selector:
        matchLabels:
          alicloud-pvname: fashion-demo-pv
      storageClassName: oss
      volumeMode: Filesystem
      volumeName: fashion-demo-pv

    Ganti placeholder berikut:

  3. Terapkan manifes:

    kubectl create -f fashion-mnist.yaml
  4. Verifikasi PV dan PVC telah terikat:

    kubectl get pv fashion-demo-pv
    kubectl get pvc fashion-demo-pvc -n demo-ns

    Output yang diharapkan untuk PV:

    NAME              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                        STORAGECLASS   AGE
    fashion-demo-pv   10Gi       RWX            Retain           Bound    demo-ns/fashion-demo-pvc     oss            8h

    Output yang diharapkan untuk PVC:

    NAME               STATUS   VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    fashion-demo-pvc   Bound    fashion-demo-pv   10Gi       RWX            oss            8h

Accelerate the dataset

  1. Masuk ke AI Dashboard sebagai administrator.

  2. Pilih Dataset > Dataset List di panel navigasi kiri.

  3. Temukan dataset (fashion-demo-pvc) dan klik Accelerate di kolom ActionsOperator.

    image

Langkah 2: Lihat dasbor resource

AI Dashboard menyediakan empat tampilan, masing-masing mencakup aspek berbeda dari kondisi resource GPU.

Penting

Batasan daftar putih AI Console berlaku di sini. Pengguna yang tidak termasuk dalam daftar putih dapat mengakses dasbor melalui Open-source AI Console.

Dasbor kluster

AI Dashboard membuka dasbor kluster secara default, menampilkan kondisi dan alokasi GPU secara keseluruhan kluster.

Metric What it shows
GPU Summary Of Cluster Total node GPU, node GPU yang dialokasikan, node GPU tidak sehat
Total GPU Nodes Total node berakselerasi GPU
Unhealthy GPU Nodes Node GPU dengan isu terdeteksi
GPU Memory (Used/Total) Memori GPU yang digunakan / total memori GPU
GPU Memory (Allocated/Total) Memori GPU yang dialokasikan / total memori GPU
GPU Utilization Rata-rata pemanfaatan GPU secara keseluruhan kluster
GPUs (Allocated/Total) GPU yang dialokasikan / total GPU
Training Job Summary Of Cluster Pekerjaan pelatihan berdasarkan status: Running, Pending, Succeeded, Failed
GPU Utilization menunjukkan apakah GPU menjalankan pekerjaan apa pun selama jendela sampel, bukan seberapa efisien. Node dengan 100% mungkin menjalankan kernel ringan alih-alih beban kerja paralel berat. Gabungkan dengan GPU Memory (Used/Total) untuk gambaran yang lebih lengkap.

Dasbor node

Klik Nodes di pojok kanan atas halaman Cluster untuk melihat metrik GPU per node dan per perangkat GPU.

Metric What it shows
GPU Node Details Tabel per node: nama, IP, peran, mode GPU (eksklusif atau bersama), jumlah GPU, total memori GPU, GPU yang dialokasikan, memori GPU yang dialokasikan, memori GPU yang digunakan, rata-rata pemanfaatan GPU
GPU Duty Cycle Pemanfaatan per perangkat GPU per node
GPU Memory Usage Memori yang digunakan per perangkat GPU per node
GPU Memory Usage Percentage Persentase penggunaan memori per GPU per node
Allocated GPUs Per Node GPU yang dialokasikan per node
GPU Number Per Node Total GPU per node
Total GPU Memory Per Node Total memori GPU per node

Dasbor pekerjaan pelatihan

Klik TrainingJobs di pojok kanan atas halaman Nodes untuk melihat konsumsi resource dan efisiensi GPU per pekerjaan.

Metric What it shows
Training Jobs Tabel per pekerjaan: namespace, nama, jenis, status, durasi, GPU yang diminta, memori GPU yang diminta, memori GPU yang digunakan, rata-rata pemanfaatan GPU
Job Instance Used GPU Memory Memori GPU yang digunakan per instans pekerjaan
Job Instance Used GPU Memory Percentage Persentase memori GPU yang digunakan per instans pekerjaan
Job Instance GPU Duty Cycle Pemanfaatan GPU per instans pekerjaan

Dasbor kuota resource

Klik Quota di pojok kanan atas halaman Training Jobs untuk melihat konsumsi kuota berdasarkan jenis resource (CPU, memori, nvidia.com/gpu, aliyun.com/gpu-mem, aliyun.com/gpu).

Column What it shows
Elastic Quota Name Nama grup kuota
Namespace Namespace tempat kuota diterapkan
Resource Name Jenis resource
Max Quota Resource maksimum yang tersedia
Min Quota Minimum yang dijamin, diprioritaskan saat kluster mengalami tekanan
Used Quota Resource yang sedang digunakan

Langkah 3: Kelola pengguna dan kuota

Cloud-native AI Suite menggunakan pohon kuota untuk memberlakukan batasan resource hierarkis dan berbagi resource antar tim.

Concept relationships

Struktur organisasi dipetakan ke pohon kuota:

orgchart

Setiap departemen atau tim dipetakan ke cabang pohon kuota; leaf node di-bind ke namespace. Menetapkan Min dan Max di setiap level memungkinkan tim berbagi resource idle sekaligus menjamin alokasi minimum.

Pohon kuota dan kontrol tingkat namespace menyediakan pembatas organisasi, bukan batas keamanan mutlak. Untuk isolasi tenant yang kuat, gunakan kluster terpisah. Lihat catatan batas keamanan di Konsep utama.

Siapkan pohon kuota

  1. Buat namespace untuk setiap tim. Namespace yang sudah ada harus tidak memiliki Pod yang sedang berjalan sebelum dikaitkan dengan node kuota.

    kubectl create ns namespace1
    kubectl create ns namespace2
    kubectl create ns namespace3
    kubectl create ns namespace4
  2. Di AI Dashboard, buat node kuota dan kaitkan setiap leaf node dengan namespace. Tetapkan Min dan Max untuk setiap node.

Buat pengguna dan grup pengguna

Seorang pengguna dapat menjadi anggota beberapa grup, dan satu grup dapat berisi banyak pengguna. Kaitkan pengguna dengan grup untuk memberikan akses ke resource yang dialokasikan.

  1. Buat pengguna. Lihat Buat file kubeconfig dan token login untuk pengguna baru.

  2. Buat grup pengguna. Lihat Tambahkan grup pengguna.

Contoh penjadwalan kapasitas

Contoh ini menunjukkan cara penjadwal berbagi dan menarik kembali resource CPU di empat namespace. Pohon kuota memiliki struktur berikut:

orgchart2

Konfigurasi kuota:

Quota node Min (CPU cores) Max (core CPU)
root 40 40
root.a 20 40
root.b 20 40
root.a.1 10 20
root.a.2 10 20
root.b.1 10 20
root.b.2 10 20

Panduan:

Tanpa kuota elastis, setiap namespace leaf hanya menggunakan Min-nya (10 core = 2 Pod dengan 5 core/Pod). Dengan kuota elastis dan 40 core kluster tersedia, namespace meminjam kapasitas idle hingga mencapai Max-nya.

Langkah 1: Deploy lima Pod ke namespace1, masing-masing meminta 5 core CPU (total 25 core).

Dengan Max root.a.1 diatur ke 20 core, 4 Pod berjalan (20 core). Pod kelima tetap dalam status Pending.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
  namespace: namespace1
  labels:
    app: nginx1
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      name: nginx1
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx1
        image: nginx
        resources:
          limits:
            cpu: 5
          requests:
            cpu: 5

Langkah 2: Deploy lima Pod ke namespace2, masing-masing meminta 5 core CPU.

Dengan 20 core tersisa (40 - 20 dari namespace1), 4 Pod berjalan. Pod kelima tetap dalam status Pending. Baik namespace1 maupun namespace2 kini mengonsumsi seluruh 40 core root.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx2
  namespace: namespace2
  labels:
    app: nginx2
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx2
  template:
    metadata:
      name: nginx2
      labels:
        app: nginx2
    spec:
      containers:
      - name: nginx2
        image: nginx
        resources:
          limits:
            cpu: 5
          requests:
            cpu: 5

Langkah 3: Deploy lima Pod ke namespace3, masing-masing meminta 5 core CPU.

Tidak ada kapasitas idle yang tersisa. Penjadwal menarik kembali 10 core dari root.a untuk menjamin minimum root.b.1. Penjadwal menarik 5 core dari root.a.1 (mengurangi namespace1 dari 4 Pod berjalan menjadi 3) dan 5 core dari root.a.2 (mengurangi namespace2 dari 4 Pod berjalan menjadi 3). Dengan 10 core yang ditarik kembali, 2 Pod berjalan di namespace3.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx3
  namespace: namespace3
  labels:
    app: nginx3
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx3
  template:
    metadata:
      name: nginx3
      labels:
        app: nginx3
    spec:
      containers:
      - name: nginx3
        image: nginx
        resources:
          limits:
            cpu: 5
          requests:
            cpu: 5

Langkah 4: Deploy lima Pod ke namespace4, masing-masing meminta 5 core CPU.

Penjadwal menarik kembali 10 core lagi dari root.a untuk menjamin minimum root.b.2: 5 core dari root.a.1 dan 5 dari root.a.2. Setelah penarikan kembali, namespace1 dan namespace2 masing-masing memiliki 2 Pod berjalan (10 core), dan namespace4 mendapatkan 2 Pod berjalan.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx4
  namespace: namespace4
  labels:
    app: nginx4
spec:
  replicas: 5
  selector:
    matchLabels:
      app: nginx4
  template:
    metadata:
      name: nginx4
      labels:
        app: nginx4
    spec:
      containers:
      - name: nginx4
        image: nginx
        resources:
          limits:
            cpu: 5
          requests:
            cpu: 5

Hasil:

Namespace Quota node Running pods CPU cores in use
namespace1 root.a.1 2 10
namespace2 root.a.2 2 10
namespace3 root.b.1 2 10
namespace4 root.b.2 2 10

Jaminan minimum setiap tim dipenuhi. Kapasitas yang dipinjam ditarik kembali ketika tim lain membutuhkan alokasi minimum mereka.

Langkah selanjutnya