Penerapan aplikasi enterprise memerlukan manajemen konfigurasi yang ekstensif. Menyematkan konfigurasi langsung ke dalam gambar aplikasi mengaitkan aplikasi tersebut dengan lingkungan tertentu, sehingga Anda harus membuat gambar baru untuk setiap lingkungan. ConfigMap Kubernetes mengatasi masalah ini dengan memisahkan konfigurasi dari kode aplikasi. ConfigMap memungkinkan Anda menyimpan data konfigurasi non-sensitif secara eksternal dan menyuntikkannya ke dalam pod pada waktu proses, sehingga gambar aplikasi yang sama dapat digunakan di berbagai lingkungan. Untuk data sensitif, gunakan Secrets.
Panduan pemilihan
Mount sebagai volume (Direkomendasikan): Metode ini mengekspos data konfigurasi sebagai file. Perubahan pada ConfigMap secara otomatis disinkronkan ke file yang dimount tanpa perlu me-restart pod. Gunakan metode ini untuk mengelola file konfigurasi lengkap dan skenario yang memerlukan pembaruan dinamis.
Suntikkan sebagai environment variables: Metode ini menyuntikkan konfigurasi langsung ke dalam kontainer sebagai environment variables. Gunakan metode ini untuk parameter pasangan kunci-nilai sederhana, seperti argumen waktu proses atau fitur flags.
Buat item konfigurasi
Bagian ini menjelaskan cara membuat ConfigMap untuk deployment Nginx.
Konsol
Login ke Container Service for Kubernetes (ACK) console. Di panel navigasi sebelah kiri, klik Clusters.Klik nama kluster target. Di panel navigasi sebelah kiri, pilih .
Buat item konfigurasi contoh: atur Namespace ke
default, lalu klik Create.Masukkan nama untuk ConfigMap, lalu klik + Add, masukkan Name dan Value untuk item konfigurasi, kemudian klik OK.
ConfigMap Name: app-config
Tambahkan item konfigurasi dengan memasukkan nama dan nilai. Anda juga dapat mengklik Import from File untuk membuat ConfigMap dari file JSON.
nginx.conf:server { listen 80; location / { root /usr/share/nginx/html; index index.html; } location /health { return 200 "healthy\n"; add_header Content-Type text/plain; } }
kubectl
Buat ConfigMap.
kubectl create configmap app-config \ --namespace=default \ --from-literal=nginx.conf="$(cat <<'EOF' server { listen 80; location / { root /usr/share/nginx/html; index index.html; } location /health { return 200 "healthy\n"; add_header Content-Type text/plain; } } EOF )"Periksa ConfigMap. Output
DATA: 1menunjukkan bahwa item konfigurasi telah dibuat.kubectl get configmap app-config
Gunakan ConfigMap dalam pod
Workload dan ConfigMap yang digunakannya harus berada dalam kluster dan namespace yang sama.
Metode 1: Pemasangan volume
Konfigurasi Konsol
Login ke ACK console. Di panel navigasi sebelah kiri, klik Clusters.Klik nama kluster target. Di panel navigasi sebelah kiri, pilih .
Buat deployment.
Pada halaman Stateless, klik Create From Image.
Pada halaman Basic Information, konfigurasikan informasi dasar untuk aplikasi.
Name:
nginx-volume-demo. Namespace:default.Replicas:
2. Type:Stateless (Deployment).
Klik Next untuk melanjutkan ke halaman Container Configuration.
Konfigurasikan Image Name dan Port.
Image Name:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6Container Port: 80, Protocol: TCP.
PentingSebelum Anda dapat menarik gambar ini, kluster harus memiliki akses jaringan publik. Jika Anda memilih Configure SNAT for VPC saat membuat kluster—yang diaktifkan secara default—tidak diperlukan konfigurasi tambahan. Jika tidak, untuk informasi lebih lanjut, lihat Enable an ACK cluster to access the internet.
Di bagian Volumes, klik Add Local Storage untuk menambahkan mount untuk ConfigMap.Setelah mengonfigurasi informasi, klik Next.
PV Type: ConfigMap. Name:
nginx-config. Mount Source:app-config. Container Path:/etc/nginx/conf.d.
Pada halaman Advanced Configuration, konfigurasikan scaling, penjadwalan, serta label dan anotasi sesuai kebutuhan, lalu klik Create.
Pada halaman Creation Complete, lihat tugas aplikasi.
Di panel Application Creation Task Submitted, klik View Application Details dan pastikan status aplikasi terkontainerisasi adalah
Running.
Verifikasi bahwa file ConfigMap telah di-mount.
Pilih kontainer yang ingin Anda login, misalnya nginx-volume-demo-7xxxxxx****. Di kolom Actions, klik Terminal dan pilih nginx untuk login ke kontainer.
Output berisi file nginx.conf. Hal ini menunjukkan bahwa ConfigMap telah dimount.
ls -la /etc/nginx/conf.d/Verifikasi isi file.
cat /etc/nginx/conf.d/nginx.confOutputnya sama dengan isi item konfigurasi. Hal ini menunjukkan bahwa aplikasi dapat mengakses data ConfigMap dengan memount ConfigMap sebagai volume.
Konfigurasi kubectl
Buat file bernama nginx-volume-demo.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-volume-demo namespace: default spec: replicas: 2 selector: matchLabels: app: nginx-volume template: metadata: labels: app: nginx-volume spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: nginx-config mountPath: /etc/nginx/conf.d volumes: - name: nginx-config configMap: name: app-config items: - key: nginx.conf path: nginx.confBuat deployment.
kubectl apply -f nginx-volume-demo.yamlPeriksa deployment. Jika status pod adalah
Running, aplikasi telah dibuat.kubectl get pods -l app=nginx-volume -n defaultOutput berisi file nginx.conf. Hal ini menunjukkan bahwa ConfigMap telah dimount.
kubectl exec deployment/nginx-volume-demo -n default -- ls -la /etc/nginx/conf.d/Verifikasi isi file.
kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/conf.d/nginx.confOutputnya sama dengan isi item konfigurasi. Hal ini menunjukkan bahwa aplikasi dapat mengakses data ConfigMap dengan memount ConfigMap sebagai volume.
Metode 2: Penyuntikan Environment Variable
Konfigurasi Konsol
Login ke ACK console. Di panel navigasi sebelah kiri, klik Clusters.Klik nama kluster target. Di panel navigasi sebelah kiri, pilih .
Buat deployment.
Pada halaman Stateless, klik Create From Image.
Pada halaman Basic Information, konfigurasikan informasi dasar untuk aplikasi.
Application Name:
nginx-env-demo. Namespace:default.Replicas:
2. Type:Stateless (Deployment).
Klik Next untuk melanjutkan ke halaman Container Configuration.
Konfigurasikan Image Name dan Port.
Image Name:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6Container Port: 80, Protocol: TCP.
PentingSebelum Anda dapat menarik gambar ini, kluster harus memiliki akses jaringan publik. Jika Anda memilih Configure SNAT for VPC saat membuat kluster—yang diaktifkan secara default—tidak diperlukan konfigurasi tambahan. Jika tidak, untuk informasi lebih lanjut, lihat Enable an ACK cluster to access the internet.
Di bagian Environment Variables, klik Add.Setelah mengonfigurasi informasi, klik Next.
Type: configuration item, Name:
CONFIG_, Variable/Variable reference:app-config.
Pada halaman Advanced Configuration, konfigurasikan scaling, penjadwalan, serta label dan anotasi sesuai kebutuhan, lalu klik Create.
Pada halaman Creation Complete, lihat tugas aplikasi.
Di panel Application Creation Task Submitted, klik View Application Details dan pastikan status kontainer adalah
Running.
Verifikasi bahwa environment variables telah disuntikkan.
Pilih kontainer yang ingin Anda login, misalnya nginx-env-demo-7xxxxxx****. Di kolom Actions, klik Terminal dan pilih nginx untuk login ke dalamnya.
env | grep CONFIG_Outputnya sama dengan isi item konfigurasi. Hal ini menunjukkan bahwa aplikasi dapat mengakses data ConfigMap melalui environment variables.
Konfigurasi kubectl
Buat file bernama nginx-env-demo.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-env-demo namespace: default spec: replicas: 2 selector: matchLabels: app: nginx-env template: metadata: labels: app: nginx-env spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 # Suntikkan semua pasangan kunci-nilai dari ConfigMap. envFrom: - prefix: CONFIG_ configMapRef: name: app-configBuat deployment.
kubectl apply -f nginx-env-demo.yamlPeriksa deployment. Jika status pod adalah
Running, aplikasi telah dibuat.kubectl get pods -l app=nginx-env -n defaultVerifikasi bahwa variabel lingkungan telah di-inject.
kubectl exec deployment/nginx-env-demo -n default -- env | grep CONFIG_Outputnya sama dengan isi item konfigurasi. Hal ini menegaskan bahwa aplikasi dapat mengakses data ConfigMap melalui environment variables.
Mengelola ConfigMap
Setelah membuat item konfigurasi, Anda dapat melakukan operasi berikut di halaman Configuration Item:
Operasi | Deskripsi |
Edit ConfigMap | Di kolom Actions ConfigMap target, klik Edit. Anda dapat mengubah Name dan Value dari item konfigurasi. Penting Memodifikasi ConfigMap yang sedang digunakan secara langsung memengaruhi aplikasi terkait, yang dapat menyebabkan restart layanan atau error. Evaluasi dampaknya sebelum melakukan perubahan, dan lakukan operasi tersebut pada jam sepi. |
Delete a configuration item | Di kolom Actions ConfigMap target, klik Delete untuk menghapus ConfigMap yang tidak lagi digunakan. Penting Jangan menghapus ConfigMap yang dihasilkan sistem di namespace kube-system dan kube-public, seperti konfigurasi CoreDNS. Menghapusnya dapat memengaruhi stabilitas kluster. |
Referensi
Untuk informasi lebih lanjut tentang proses diagnosis, metode troubleshooting, masalah umum, dan solusi untuk exception pod, lihat Troubleshoot pod exceptions.
Untuk informasi lebih lanjut tentang cara membuat aplikasi tanpa status di kluster ACK menggunakan konsol dan kubectl, lihat Create a stateless Deployment.
Untuk informasi lebih lanjut, lihat dokumentasi Kubernetes tentang ConfigMaps.