GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menggunakan ConfigMaps Untuk Konfigurasi Kubernetes

ConfigMap adalah resource Kubernetes untuk memasukkan konfigurasi ke dalam container Anda. Mereka membiarkan Anda mempertahankan pengaturan tumpukan Anda secara terpisah dari kodenya. Berikut cara bekerja dengan ConfigMaps dan memasoknya ke Pod Anda.

Untuk Apa ConfigMaps?

ConfigMaps dirancang khusus untuk merangkum sejumlah kecil data konfigurasi yang tidak sensitif. Mereka adalah mekanisme untuk memasukkan key-value pair arbitrer ke dalam Pod Anda. Mereka biasanya digunakan untuk menyimpan alamat IP server database Anda, alamat email keluar untuk aplikasi Anda, dan pengaturan khusus aplikasi lainnya yang perlu Anda konfigurasikan di luar Pod Anda.

ConfigMap memungkinkan Anda mengelola data ini di resource Kubernetes khusus. Pod menerima key-value pair sebagai variabel lingkungan atau file dalam volume yang di-mount.

Untuk Apa Tidak Digunakan?

Ada beberapa situasi di mana ConfigMap tidak digunakan.

ConfigMaps tidak disimpan dengan aman dan nilainya tidak memiliki enkripsi. Mereka tidak boleh berisi data sensitif atau rahasia apa pun yang dapat menimbulkan risiko keamanan atau privasi jika bocor.

Jangan memasukkan kata sandi, kunci API, atau kunci enkripsi ke dalam ConfigMap – gunakan Rahasia Kubernetes, karena fungsinya mirip dengan ConfigMaps tetapi dengan perlindungan tambahan. Sistem yang membutuhkan koneksi database harus menempatkan nama host di ConfigMap dan kredensial di Rahasia terpisah.

ConfigMaps individual tidak boleh lebih dari 1 MB. Sistem yang membutuhkan lebih banyak kunci konfigurasi mungkin lebih baik dilayani oleh pendekatan alternatif seperti injeksi file konfigurasi yang dibuat secara manual melalui volume.

Jika Anda ingin tetap menggunakan ConfigMaps, pertimbangkan untuk membagi konfigurasi Anda menjadi beberapa sumber daya ConfigMap. Pendekatan ini harus menghindari batas 1 MB sambil membiarkan Anda memasok setiap Pod Anda dengan set kunci konfigurasi minimal yang dibutuhkan.

Nilai ConfigMap dapat berupa string UTF-8 atau data biner yang dikodekan sebagai string base64. Nama kunci dapat berisi alfanumerik, . (titik), - (tanda hubung), dan _ (garis bawah) karakter. Beberapa bahasa dan kerangka kerja pemrograman mungkin memiliki konvensi yang berbeda untuk variabel konfigurasi, jadi pastikan Anda menggunakan format yang didukung oleh Kubernetes dan aplikasi Anda.

Membuat ConfigMap

ConfigMaps memiliki manifes YAML sederhana. Setiap ConfigMap membutuhkan name dalam format Kubernetes standar dan data bidang yang berisi pasangan nilai kunci Anda:

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
  database_host: "192.168.0.10"
  system_email: "[email protected]"

data bidang adalah untuk menentukan kunci dengan nilai string. Anda dapat menggunakan binaryData sebagai gantinya atau juga data untuk menambahkan nilai biner yang disandikan base64. Kunci harus unik di kedua data dan binaryData .

Terapkan manifes ke cluster Anda menggunakan kubectl atau alat pilihan Anda.

Menautkan ConfigMaps dan Pod

ConfigMap tidak melakukan apa pun sendiri. Anda telah menambahkan beberapa data ke cluster Anda; sekarang mari kita tautkan ke Pod:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: example-image:latest
      envFrom:
        - configMapRef:
            name: example-configmap

envFrom field menarik variabel lingkungan yang ditentukan oleh sumber referensi lain. Dalam hal ini, sebuah configMapRef mengidentifikasi ConfigMap yang dibuat sebelumnya. Kontainer Pod akan dimulai dengan database_host dan system_email variabel lingkungan didefinisikan.

Menambahkan Variabel Lingkungan Secara Selektif

envFrom berguna ketika Anda ingin menggunakan setiap kunci di ConfigMap dan Anda yakin tidak akan ada konflik dengan variabel lingkungan Pod Anda yang lain. Dalam situasi yang lebih terkontrol, gunakan env regular biasa bagian, tentukan kunci individual, dan tarik nilai setiap kunci dari ConfigMap:

env:
  - name: DATABASE_HOST_IP
    valueFrom:
      configMapKeyRef:
        name: example-configmap
        key: database_host

Contoh ini menunjukkan bagaimana sebuah Pod dapat dimulai hanya dengan database_host kunci dari ConfigMap. Key juga diganti namanya sebelum diinjeksi sehingga Pod akan menerimanya sebagai DATABASE_HOST_IP .

Menggunakan ConfigMaps Dengan Volume

ConfigMaps dapat di-mount sebagai file di dalam Pod. Kubernetes membuat volume, menyuntikkan konten ConfigMap sebagai kumpulan file, dan memasang volume ke Pod Anda.

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: example-image:latest
      volumeMounts:
        - name: app-config
          mountPath: "/etc/config-data"
          readOnly: true
  volumes:
    - name: app-config
      configMap:
        name: example-configmap

Manifes Pod ini membuat volume yang disebut app-config . configMap akan mengisi volume terlebih dahulu menggunakan data di ConfigMap yang ditentukan.

Pod me-mount volume ke /etc/config-data . Wadah Anda dapat membaca file di dalam direktori untuk mengakses nilai konfigurasi Anda. Setiap kunci ConfigMap akan memiliki filenya sendiri di dalam titik pemasangan.

Memperbarui Nilai ConfigMap

Karena ConfigMap adalah sumber daya Kubernetes API standar, Anda dapat memperbarui nilai kapan saja dengan memodifikasi manifes dan menerapkannya kembali ke cluster Anda. Cara nilai baru mencapai Pod Anda bergantung pada mekanisme injeksi yang Anda gunakan.

Volume Terpasang

ConfigMaps yang dipasang ke Pod melalui volume akan diperbarui oleh Kubernetes. Perubahan pada ConfigMaps diperiksa secara berkala; ketika perbedaan terdeteksi, file dalam volume Anda akan diperbarui, sehingga Pod Anda akan menerima data baru. Penundaan tergantung pada interval sinkronisasi yang dikonfigurasi untuk instance Kubelet pada node pekerja Anda.

Variabel Lingkungan

Mengubah variabel lingkungan Pod tidak mungkin dilakukan sehingga perubahan ConfigMap tidak akan mencapai Pod yang sudah ada yang mereferensikan kunci melalui mekanisme ini. Anda harus mengganti Pod Anda untuk menggunakan data baru.

Pod yang baru dibuat akan selalu menerima data ConfigMap saat ini, terlepas dari apakah Anda menggunakan volume atau variabel lingkungan. Jika Anda perlu memaksakan pembaruan konfigurasi, ubah anotasi pada Pod Anda agar Kubernetes membuatnya kembali.

ConfigMaps yang Tidak Dapat Diubah

ConfigMaps memiliki opsi immutable bidang yang mencegahnya diperbarui. Jika bidang ini disetel, Anda tidak dapat memperbarui data ConfigMap atau menghapus status yang tidak dapat diubah.

apiVersion: v1
kind: ConfigMap
metadata:
  name: immutable-configmap
data:
  foo: bar
immutable: true

Ini dapat berguna ketika Anda yakin bahwa nilai konfigurasi tidak akan pernah berubah. Ini meningkatkan keamanan dengan menghapus kemungkinan pengeditan yang tidak disengaja. Performa juga dapat ditingkatkan karena Kubernetes tidak perlu lagi memantau ConfigMap untuk menyebarkan perubahan nilai apa pun ke dalam Pod Anda.

Ringkasan

ConfigMaps harus menjadi pilihan Anda untuk memasok kunci konfigurasi yang tidak sensitif ke Pod Kubernetes Anda. Mereka adalah sumber daya API kelas satu yang dapat Anda gunakan sebagai variabel lingkungan atau file yang dipasang dalam volume.

Kata sandi dan kredensial lainnya termasuk dalam Rahasia. Fungsi ini sangat mirip dengan ConfigMaps dan direferensikan oleh Pod dengan cara yang sama. Pengganti configMapRef dengan secretRef untuk mengeluarkan kunci dari Rahasia bernama alih-alih ConfigMap.


Docker
  1. Bagaimana saya menggunakan Ansible dan anacron untuk otomatisasi

  2. Cara menggunakan Podman di dalam Kubernetes

  3. Cara Menggunakan Penyedia Terraform Kubernetes

  1. Cara menggunakan rsync lanjutan untuk cadangan Linux besar

  2. Cara menggunakan systemd-nspawn untuk pemulihan sistem Linux

  3. Bagaimana Cara Menggunakan Lightdm Untuk Sesi yang Ditentukan Pengguna?

  1. Bagaimana saya menggunakan Cockpit untuk manajemen server Linux di rumah saya

  2. Cara menggunakan CherryTree untuk mencatat

  3. Cara Membuat Sertifikat yang Ditandatangani Sendiri untuk Kubernetes