- ConfigMaps memisahkan konfigurasi kode dan mengizinkan perubahan dinamis tanpa membangun kembali gambar
- Cara menggunakan clave: env, args, ficheros en volúmenes dan membaca melalui API dengan langganan dan perubahan
- Pembaruan otomatis dalam volume dan kebutuhan yang diperlukan untuk lingkungan; batas 1 MiB dan tanpa cacat
- Praktik-praktik yang baik: versi, Kustomisasi dengan hash, RBAC, hapus rahasia dan gunakan yang tidak dapat diubah ketika ada proses

Jika Anda bekerja dengan Kubernetes dan perlu memisahkan konfigurasi kode, ConfigMaps menjadi yang terbaik. Mengizinkan memasukkan beberapa clave-valor yang tidak masuk akal ke dalam Pod Anda tanpa konfigurasi apa pun di dalam gambar, fasilitas yang diperlukan untuk menjalankan limpio, perangkat portabel, dan pemeliharaan yang mudah.
Selain dari dasar, ada hal-hal penting yang perlu dilakukan: batas kecepatan, aktualisasi otomatis seperti volume, bagaimana mempengaruhi perubahan pada variabel lingkungan, praktik keamanan yang baik, dan strategi observasi yang tinggi. Ini adalah catatan praktis yang Anda perlukan untuk menguasai ConfigMaps tanpa mengeluarkan nada dan warna.
Itu adalah ConfigMap dan yang ingin Anda gunakan
ConfigMap adalah tujuan API Kubernetes yang dirancang untuk menyimpan data konfigurasi tanpa rahasia dan nilai clave-valor. Tujuan Anda adalah mengekstrak konfigurasi khusus dari entorno gambar wadah, jelas bahwa ia harus merekonstruksi setiap kali ia mengubah parameternya.
Pod dapat menggunakan ConfigMaps seperti variabel di dalam, argumen yang tidak teratur, jumlah file yang banyak, dan volume yang diminta langsung dari API. Perangkat ini dilengkapi dengan konfigurasi faktor dari Aplikasi 12‑Faktor dan memanfaatkan portabilitas di antara desarrollo, pruebas, dan produksi.
Bayangkan aplikasi Anda menggunakan variabel DATABASE_HOST. Di titik lokal dan host lokal, dan sekarang Anda menggunakan nama Layanan yang menampilkan basis data. Dengan ConfigMap, Anda dapat mengubah nilai-nilai tersebut tanpa menyimpan gambar atau binario, memutar kode lain ke dalam ruangan mana pun.
Hay una limitación clave: un ConfigMap harus melebihi 1 MiB. Jika diperlukan, bagilah konfigurasi ke dalam berbagai ConfigMaps atau gunakan layanan eksternal, volume, atau basis data konfigurasi.

Objeto ConfigMap: campos, nombres, dan clave validas
Perbedaan sebagian besar objek dengan spesifikasi yang ada, ConfigMap mendefinisikan konten di antara data dan data biner. data espera texto UTF‑8; binerData memiliki konten biner yang dikodekan dalam base64, ideal untuk format UTF‑8.
Nama ConfigMap adalah subdominium DNS yang valid dan kelas data kecil atau data biner berisi karakter alfanumerik, guion, guion bajo, atau punto. Kunci data tidak dapat diurai dengan data biner, karena organisasi tersebut memiliki kriteria untuk menghindari konflik.
Sejak Kubernetes v1.19 dapat membuat ConfigMaps yang tidak dapat diubah dan hal yang tidak dapat diubah: benar. Perubahan yang tidak disengaja ini, yang telah ditetapkan sejak v1.21, menghindari perubahan yang tidak disengaja dan mengurangi muatan di server API yang menyebabkan jam tangan, biayanya, jika perlu mengubah hal lain, cobalah untuk menghapus dan membuat ulang objek tersebut.
ConfigMaps dan Pod: cara konsumsinya
Agar Pod menggunakan ConfigMap, maka harus dipasang pada namespace yang berbeda. Ada cara-cara utama konsumsi jadi Anda memerlukan aplikasi tersebut.
- Pasar valores en command y args del contenedor, referensi data dari ConfigMap. Ini berguna untuk binario yang dapat dikonfigurasi hanya dengan argumen.
- Eksponer membagi nilai kelas sebagai variabel di dalam wadah. Pilihan ini lebih umum untuk aplikasi yang ada di dalam.
- Pasang ConfigMap seperti file dalam volume kuliah tunggal. Sempurna untuk aplikasi yang memerlukan arsip konfigurasi.
- Lihat ConfigMap dari API dengan kode yang Anda miliki. Izinkan berlangganan perubahan dan penyesuaian secara tepat, termasuk namespace lain jika menggunakan API.
Ketika digunakan seperti volume, Kubernetes membuat arsip dengan clave. Jika Anda mendefinisikan item dalam volume, Anda dapat memilih dan mengubah ukuran item menjadi konkret; jika tidak, itu proyek semuanya. Anda juga dapat memilih rute khusus dan izin POSIX untuk setiap file.
Memperbarui ConfigMaps yang dipasang dan variabel di dalamnya
Un detalle crítico: ketika ConfigMap dipasang dalam satu volume, perubahannya akan otomatis disebarkan ke beberapa retraso. Kubelet membaca konten dalam setiap sinkronisasi dan kemudian menggunakannya dalam cache lokal.
Hal ini biasanya bergantung pada configMapAndSecretChangeDetectionStrategy, yang dapat dilihat, berdasarkan pada TTL atau langsung ke server API. Perlambatan total akan terjadi pada jumlah periode sinkronisasi kubelet lebih dari propagasi cache; oleh karena itu, sinkronisasi 1 menit dan 1 menit TTL dapat dilakukan lebih dari 2 menit latensi.
Sebaliknya, Variabel yang diturunkan dari ConfigMaps tidak akan teraktualisasi secara otomatis. Anda perlu memulai kembali Pod atau melakukan peluncuran agar proses tersebut mendapatkan nilai baru. Sebuah upaya yang sering dilakukan untuk mengunduh ulang Deployment adalah memodifikasi catatan Templat Pod, menyebabkan ReplicaSet baru.
Crear ConfigMaps con kubectl
Anda dapat membuat kubectl membuat configmap, atau menghasilkan kustomisasi dalam kustomisasi.yaml. kubectl mengakui berbagai fuentes: direktori, file individu, literal, dan file env‑.
Desde un directorio
kubectl empaqueta semua file reguler dengan nama yang valid dari direktori, menggunakan nama setiap arsip seperti clave dan isinya sebagai keberanian. Entradas que no son ficheros regulares se ignoran seperti subdirektori atau menyertakan simbol.
kubectl create configmap game-config --from-file=configure-pod-container/configmap/
Penjelasan ConfigMap sebenarnya, misalnya, game.properties dan ui.properties hanya data, dengan teks asli. Ini adalah cara paling mudah untuk meningkatkan file konfigurasi yang sesuai dengan cluster.
Desde ficheros concretos
Anda juga dapat melakukan berbagai macam –dari file berulang untuk menggabungkan hasil. Oleh karena itu, clave adalah nama dasar arsip, meskipun Anda dapat menetapkan kelas yang berbeda.
kubectl create configmap game-config-2
--from-file=configure-pod-container/configmap/game.properties
--from-file=configure-pod-container/configmap/ui.properties
Jika Anda ingin mendefinisikan clave lain untuk file tersebut, gunakan bentuk clave=path. Ini berguna ketika berbagai arsip berbagi nama atau ingin nama yang lebih ekspresif.
kubectl create configmap game-config-3
--from-file=game-special-key=configure-pod-container/configmap/game.properties
Desde valores literales
Con –from-literal mendefinisikan pares clave-valor en linea, repitiendo la opción las veces necesarias. Ideal untuk menyesuaikan kecepatan atau kecepatan propiedades.
kubectl create configmap special-config
--from-literal=special.type=charm
--from-literal=special.how=very
Desde env‑files
–dari-env-file membuat kunci dari arsip variabel di dalam .env. Dari v1.23 dapat ditentukan secara spesifik beberapa kali –dari-env-file untuk menggabungkan keduanya.
kubectl create configmap my-config --from-env-file=app.env --from-env-file=extra.env
Buat ConfigMaps dengan Kustomize
Kustomisasi mengizinkan deklarasi generador dalam kustomisasi.yaml untuk menghasilkan ConfigMaps dari file atau literal. Nama yang dihasilkan termasuk hash sufi dari kontennya untuk menjamin objek baru untuk mengubah data.
configMapGenerator:
- name: game-config-4
files:
- configure-pod-container/configmap/game.properties
Juga mungkin membuka kunci yang berbeda dari nama file. Teknik ini memfasilitasi penyelesaian deklarasi dan menghindari masalah cache konfigurasi.
configMapGenerator:
- name: game-config-5
files:
- game-special-key=configure-pod-container/configmap/game.properties
Gunakan ConfigMaps sebagai variabel di dalamnya
Tienes dos patrones prinsipal. Dengan envFrom mengimpor semua kunci dari ConfigMap seperti variabel dari wadahnya. Cepat dan mudah ketika aplikasi membutuhkan banyak variabel.
envFrom:
- configMapRef:
name: my-config
Jika Anda hanya ingin menggunakan beberapa kunci atau nama baru, gunakan iri dan valueFrom.configMapKeyRef. Jika Anda memenuhi syarat untuk memilih poin dan nama variabel, maka itu bisa berbeda.
env:
- name: CONFIGMAP_USERNAME
valueFrom:
configMapKeyRef:
name: my-config
key: username
Ojo: nama-nama variabel dalam lingkungan diterima dalam rangkaian pembatasan karakter. Jika kelas ConfigMap tidak valid untuk suatu env var, hilangkan dan daftarkan acara seperti InvalidEnvironmentVariableNames, aunque el Pod arrancará.
Montar ConfigMaps seperti file
Untuk menampilkan data seperti arsip, tambahkan volume dan spec.volumes dengan configMap.name dan pasang volume ini dengan volumeMounts ke setiap konten yang Anda perlukan. Setiap kelas diproyeksi seperti arsip yang terletak di mountPath.
volumes:
- name: config-volume
configMap:
name: special-config
containers:
- name: app
image: my-image
volumeMounts:
- name: config-volume
mountPath: /etc/config
readOnly: true
Anda dapat memetakan beberapa rute dan nama yang tepat menggunakan item dan jalur, atau memasang satu clave dengan subPath. Anda juga dapat menyesuaikan izin pengarsipan dengan Mode default atau kelas.
volumes:
- name: config-volume
configMap:
name: special-config
items:
- key: SPECIAL_LEVEL
path: keys
Catatan penting: jika dalam gambar Anda ada file-file yang ada di direktori montaj, maka ada okultos oleh volumen. Hal ini dilakukan agar arsip tidak diperlukan pada saat penghapusan.
Teksnya ditampilkan dalam UTF‑8; untuk kode lain atau binario, gunakan binerData. Saat memperbarui ConfigMap, konten yang diproyeksikan akan diperbarui dengan penundaan sebelum disebutkan. Anda dapat mempercepat pembaruan anotasi Pod untuk memutar ulang.
Referensi pilihan, ruang nama, dan batasan
Referensi ke ConfigMap dapat disimpan sebagai opsional. Jika ConfigMap tidak ada, volume akan terisi dan variabel di dalam tidak ada nilai; jika clave concreta tidak ada, la ruta atau la variabel estarán ausentes.
Reglas a recordar: ConfigMap harus ada sebelum dijadikan referensi karena mereknya bersifat opsional, dan ini adalah Pod seperti ConfigMap yang harus dipasang pada namespace yang lain. ConfigMaps tidak kompatibel dengan pod statis yang dikelola langsung oleh kubelet.
ConfigMaps tidak dapat diubah
Fungsi ConfigMaps yang tidak dapat diubah dengan menampilkan beberapa angka dalam kelompok dengan banyak montase: anak didik dari perubahan yang tidak diinginkan yang menyebabkan jumlah dan mengurangi beban server API pada jam tangan. Suatu hal yang tidak dapat diubah adalah benar, tidak dapat mengedit data dan data biner; Anda harus membatalkan dan membuat ulang, dan biasanya memulai kembali Pod yang dipasang untuk menghindari referensi yang berlebihan.
Batasan, batas, dan penyimpanan internal
ConfigMaps disimpan dan lain-lain pada objek API yang dipulihkan. Tidak ada cifrados karena cacat; Anda tidak perlu mengakses dll atau cadangannya dapat membaca konten Anda, karena Anda tidak perlu menyimpan rahasia di sini.
Existe un límite de tamaño: objek yang lengkap harus lebih kecil dari 1 MiB. Sangat mungkin terjadi kesalahan besar dalam jumlah besar. Jika Anda mengetahui teknologi ini, ulangi konfigurasi di berbagai ConfigMaps atau ubah volume atau layanan eksternal.
Perbandingan cepat: ConfigMaps, variabel dalam dan Rahasia
Berbagai pilihan akan memulihkan konfigurasi. ConfigMaps memusatkan data tanpa alasan dan mengakui pembaruan dinamis. Variabel dalam ruangan juga memiliki konfigurasi terpisah, tetapi perlu diterapkan ulang untuk perubahan. Rahasia Almacenan Datas Sensible Codificados En Base64; tidak ada yang nyata, tetapi mengizinkan politik untuk mengakses separadas dan kontrol utama.
- ConfigMap: tidak ada akal, uang, kemudahan pemasangan seperti arsip atau lingkungan. Tidak ada cifrados karena cacat.
- Variabel Lingkungan: tentu saja, tetapi hanya sedikit praktik yang mungkin Anda lakukan dan tidak dapat aktualisasikan diri Anda.
- Rahasia: data masuk akal; memisahkan kredensial konfigurasi normal, memerlukan operasi khusus.
Praktik baik dan keselamatan
Jaga versi ConfigMaps Anda di git dan gunakan nama-nama deskripsi atau nama versi. Dengan Kustomisasi, hash konten akan membantu Anda mengingat kembali dan menghapusnya tanpa perlu menambahkan apa pun.
Evita memperkenalkan rahasia di ConfigMaps; Rahasia AS dan RBAC untuk membatasi akses. Validasi sintaksis dengan linter dan periksa dasar-dasarnya sebelum digunakan untuk mengurangi kesalahan format atau penulisan.
Kontrol akses dengan RBAC. Misalnya, un rol de solo lectura untuk configmaps di namespace:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: configmap-reader
rules:
- apiGroups: ['']
resources: ['configmaps']
verbs: ['get', 'list', 'watch']
Untuk melakukan perubahan, kubectl edit adalah aplikasi dan aplikasi en vivo, tetapi produksinya lebih baik jika diumumkan untuk diterapkan dan direvisi oleh PR. Jika Anda menggunakan variabel dalam ruangan, rencanakan peluncuran dan edit ConfigMap agar Pods mendapatkan nilai baru.
Pelanggan yang maju dan skenario yang sebenarnya
Beberapa di antaranya: membuat ConfigMaps khusus untuk pengembangan, pementasan, dan produksi. Ini akan membantu menyesuaikan dan mengurangi kesalahan pada versi promotor.
Salin seluruh cluster: jika Anda ingin melakukan sesuatu, Anda dapat memindahkan dan menerapkannya ke kubectl yang Anda perlukan. Esto agiliza migraciones o DR.
Aplikasi yang melakukan perubahan: jika Anda melihat ConfigMaps dari API, daftarkan peristiwa dan reaksi pada tampilan. Ini memungkinkan Anda untuk beradaptasi dengan mudah, meskipun implikasinya lebih lengkap dari kode.
Unduh dengan Deployments: referensi ConfigMaps dengan envFrom volume. Untuk membatalkan renovasi ketika Anda mengubah ConfigMap seperti biasa, tambahkan checksum catatan atau tambahkan etika pada Templat Pod, Anda ingin membuat ReplicaSet baru.
Detail jumlah proyek yang dihasilkan
Jika Pod menentukan volume dari berbagai sumber, gunakan volume yang diproyeksikan untuk digabungkan. Las clave mapeadas dengan item mengizinkan nama arsip yang koheren dengan aplikasi yang Anda inginkan. subPath berguna untuk membuat clave yang unik tanpa membuat direktori lengkap.
Menemukan montase ConfigMap setelah kuliah tunggal dan gambar dalam file di rute yang sama yang dilihat oleh volume. Rencanakan lokasi pemasangan yang tidak berisi artefak penting dari gambar.
Aktualisasi dan deteksi perubahan secara detail
Kubelet memutuskan bagaimana mendeteksi perubahan setelah configMapAndSecretChangeDetectionStrategy. tonton itu mode yang rusak, TTL menyimpan cache dengan caducidad dan berkonsultasi langsung dengan server API. Menjemput Anda yang lain mempengaruhi latensi dan muatan pesawat kendali.
Penyegaran yang efektif dari kumpulan kunci dapat terlambat hingga periode sinkronisasi lebih lama dari penyebaran cache. Jika diperlukan aktualisasi segera, ubah anotasi Pod untuk menampilkan sinkronisasi yang akan memutar ulang. Perlindungan ini sering terjadi ketika latensi karena cacat tidak dapat diterima.
Pembatasan dan perilaku dengan kesalahan
Jika Anda merujuk pada ConfigMap yang tidak ada, tetapi sebagai pilihan, Pod tidak akan diatur. Dengan cara yang sama, referensi kunci yang tidak ada menghalangi inisiasi yang merupakan referensi nyata dan opsional.
Ketika menggunakan envFrom, jumlah kunci yang tidak kompatibel untuk variabel di dalam akan dihilangkan dan malah sebaliknya dengan daftar kunci yang ada. Hal ini tidak terjadi karena kesalahan yang mungkin terjadi jika Anda mengharapkan variabel tersebut.
Contoh praktik kebiasaan
Buat dan jelaskan ConfigMap dari file tersebut
kubectl create configmap app-config --from-file=.env.local --from-file=.env.remote
kubectl describe configmap app-config
Kuncinya akan berisi nama-nama file dan kontennya, nilai-nilainya. Periksa objek dengan mendeskripsikan ayuda dan verifikasi bahwa kelasnya se han empaquetado sebagai esperabas.
Variabel entorno dari sebuah clave concreta
env:
- name: PORT
valueFrom:
configMapKeyRef:
name: app-config
key: port
Pelanggan ini menjaga kendalinya agar dapat mengekspor seluruh proses. Ini terutama berguna jika ConfigMap menyertakan fragmentasi multiklaf sehingga Anda tidak ingin eksponen terintegrasi.
Pasang pilihan dengan item dan izin
volumes:
- name: config-volume
configMap:
name: special-config
items:
- key: SPECIAL_TYPE
path: conf/type
mode: 0640
Memproyeksikan kunci-kunci dalam alur beton dengan izin yang memadai mengurangi kebocoran informasi dan menyelaraskan struktur dengan langkah-langkah yang diperlukan untuk aplikasi Anda. Gunakan defaultMode untuk keberanian karena kerusakan dan kesopanan oleh clave jika diperlukan.
Memecahkan masalah umum
Variabel yang tidak diberi nama: periksa kembali kunci di ConfigMap agar valid seperti nama env jika menggunakan envFrom. Konsultasikan acara di Pod untuk versi yang diunduh oleh nomor yang tidak valid.
Pemasangan arsip okultisme: jika Anda memasang volume arsip yang salah yang ada di gambar, kemungkinan besar mountPoint telah melampaui batas. Mueve el mountPath ke rute lain atau pasa ke subPath jika hanya diperlukan sebuah clave.
Pembaruan yang tidak perlu: dengan variabel-variabel yang diperlukan dalam peluncuran atau peluncuran; dengan volume yang besar, perlu untuk melakukan sinkronisasi atau memutar rekaman yang diperbarui dengan catatan. Jika Anda ingin melakukan hal ini, evaluasi strategi secara langsung untuk mendeteksi perubahan.
Kesalahan sebelumnya: Jika entitas menerima banyak hal, bagilah ConfigMap atau ubah strategi konfigurasi. Dapatkan batas 1 MiB berdasarkan tujuan.
Keamanan: simpan rahasia di ConfigMaps; Rahasia AS dan aplikasi RBAC. Pertimbangkan cifrado dalam repositori dll jika platform Anda mendukung dan politik Anda.
Pelanggan organisasi dan pemeliharaan
Pisahkan ConfigMaps berdasarkan fungsinya: basis data, API, UI. Ini mengurangi radius ledakan dan memfasilitasi rotasi nilai beton.
Dokumentasi yang tepat, kunci dan kontak. Meskipun kubectl mendapatkan daftar objek, dokumentasi tetap ada di repositori untuk menghindari hal-hal buruk. Termasuk contoh konsumsi dan volume untuk setiap ConfigMap.
Otomatiskan validasi koneksi dan pengujian konten pada aplikasi, mengenai semua hal yang dihasilkan dari beberapa sumber. Menggabungkan fungsi sintaksis YAML dengan pemeriksaan keberadaan kunci-kunci penting.
Untuk selanjutnya, strategi yang kuat adalah mencatat Template Pod dengan checksum dari ConfigMap, sehingga setiap perubahan memicu peluncuran. Ini menjamin bahwa para pemegang saham yang menggunakan dan menerima nilai-nilai baru.
Inti dari ConfigMaps adalah hal yang sederhana, tetapi keberanian Anda nyata ketika mendominasi varian konsumsi, politik aktualisasi, dan perubahan yang terjadi. Ikuti praktik sebelumnya, lakukan konfigurasi aman, kontrol, dan daftar untuk eskalasi.