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
kubectlyang 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 > Deployments → Create 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: charmPod 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: NeverSetelah pod selesai dijalankan, verifikasi variabel yang diinjeksikan:
kubectl logs config-pod-1Output mencakup:
SPECIAL_LEVEL_KEY=veryInjeksikan 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: NeverVerifikasi:
kubectl logs config-pod-2Output yang diharapkan mencakup:
SPECIAL_LEVEL=very
SPECIAL_TYPE=charmGunakan 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: NeverVerifikasi:
kubectl logs config-pod-3Output yang diharapkan:
very charmMount 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: NeverVerifikasi:
kubectl logs config-pod-4Output yang diharapkan mencantumkan satu nama file untuk setiap kunci ConfigMap:
SPECIAL_TYPE
SPECIAL_LEVELBatasan
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 adaLangkah 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