All Products
Search
Document Center

Container Service for Kubernetes:Gunakan ConfigMap

Last Updated:May 07, 2026

Menjalankan gambar kontainer yang sama di lingkungan pengembangan, staging, dan produksi sering kali memerlukan nilai konfigurasi yang berbeda. ConfigMap memungkinkan Anda menyimpan nilai-nilai tersebut terpisah dari gambar, sehingga konfigurasi dapat diubah tanpa perlu membangun ulang atau menyebar ulang gambar tersebut. Bagian berikut mencakup tiga metode injeksi: variabel lingkungan, argumen baris perintah, dan file yang dimount melalui volume.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Kluster ACK dengan setidaknya satu node

  • kubectl yang telah dikonfigurasi untuk terhubung ke kluster Anda

Anda juga dapat menerapkan manifes YAML ini melalui Konsol ACK di https://cs.console.alibabacloud.com dengan menavigasi ke kluster Anda → Workloads > DeploymentsCreate from YAML.

Buat ConfigMap

Semua contoh di bawah merujuk pada ConfigMap bernama special-config dengan dua pasangan kunci-nilai.

Terapkan manifes berikut untuk membuatnya:

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  SPECIAL_LEVEL: very
  SPECIAL_TYPE: charm
Pod dan ConfigMap harus berada dalam kluster dan namespace yang sama.

Injeksikan Data ConfigMap sebagai Variabel Lingkungan

Injeksikan Satu Kunci

Gunakan valueFrom dengan configMapKeyRef untuk memetakan kunci ConfigMap tertentu ke variabel lingkungan.

apiVersion: v1
kind: Pod
metadata:
  name: config-pod-1
spec:
  containers:
    - name: test-container
      image: busybox
      command: ["/bin/sh", "-c", "env"]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config   # ConfigMap yang dirujuk
              key: SPECIAL_LEVEL     # Kunci dalam ConfigMap
  restartPolicy: Never

Setelah pod selesai dijalankan, verifikasi variabel yang diinjeksikan:

kubectl logs config-pod-1

Output mencakup:

SPECIAL_LEVEL_KEY=very

Injeksikan Semua Kunci

Gunakan envFrom dengan configMapRef untuk memuat setiap kunci dalam ConfigMap sebagai variabel lingkungan terpisah. Setiap kunci ConfigMap menjadi nama variabel lingkungan.

apiVersion: v1
kind: Pod
metadata:
  name: config-pod-2
spec:
  containers:
    - name: test-container
      image: busybox
      command: ["/bin/sh", "-c", "env"]
      envFrom:
        - configMapRef:
            name: special-config
  restartPolicy: Never

Verifikasi:

kubectl logs config-pod-2

Output yang diharapkan mencakup:

SPECIAL_LEVEL=very
SPECIAL_TYPE=charm

Gunakan Nilai ConfigMap sebagai Argumen Baris Perintah

Rujuk variabel lingkungan dalam bidang command kontainer menggunakan sintaks $(VAR_NAME). Pertama-tama injeksikan kunci ConfigMap sebagai variabel lingkungan, lalu rujuk variabel tersebut dalam perintah.

apiVersion: v1
kind: Pod
metadata:
  name: config-pod-3
spec:
  containers:
    - name: test-container
      image: busybox
      command: ["/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)"]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: SPECIAL_LEVEL
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: SPECIAL_TYPE
  restartPolicy: Never

Verifikasi:

kubectl logs config-pod-3

Output yang diharapkan:

very charm

Mount ConfigMap sebagai Volume

Memount ConfigMap sebagai volume akan mengekspos setiap kunci sebagai file. Nama kunci menjadi nama file dan nilai kunci menjadi isi file tersebut. File-file tersebut muncul di direktori yang ditentukan oleh mountPath.

apiVersion: v1
kind: Pod
metadata:
  name: config-pod-4
spec:
  containers:
    - name: test-container
      image: busybox
      command: ["/bin/sh", "-c", "ls /etc/config/"]
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config
  restartPolicy: Never

Verifikasi:

kubectl logs config-pod-4

Output yang diharapkan mencantumkan satu nama file untuk setiap kunci ConfigMap:

SPECIAL_TYPE
SPECIAL_LEVEL

Batasan

Diperlukan kluster dan namespace yang sama

Pod hanya dapat merujuk ConfigMap yang berada dalam kluster dan namespace yang sama.

Nama kunci tidak valid dengan envFrom

Kunci yang bukan merupakan nama variabel lingkungan yang valid akan dilewati secara diam-diam. Pod tetap dijalankan, tetapi kunci yang dilewati dicatat sebagai event InvalidEnvironmentVariableNames. Jalankan kubectl get events untuk memeriksanya.

ConfigMap harus ada sebelum pod dibuat

Jika pod merujuk ConfigMap yang tidak ada, pod gagal dijalankan. Untuk memungkinkan pod tetap dijalankan meskipun ConfigMap yang dirujuk tidak tersedia, atur optional: true pada referensi tersebut:

env:
  - name: SPECIAL_LEVEL_KEY
    valueFrom:
      configMapKeyRef:
        name: special-config
        key: SPECIAL_LEVEL
        optional: true   # Pod tetap dijalankan meskipun special-config tidak ada

Langkah Berikutnya

  • Configure a Pod to Use a ConfigMap — Referensi resmi Kubernetes dengan pola lanjutan tambahan, termasuk memount kunci tertentu ke path kustom dan pembaruan otomatis saat ConfigMap berubah

Referensi