Saya telah menggunakan K8S ConfigMap dan Secret untuk mengelola properti kami. Desain saya cukup sederhana, yang menyimpan file properti dalam git repo dan menggunakan server build seperti Thoughtworks GO untuk secara otomatis menerapkannya menjadi ConfigMaps atau Rahasia (dengan syarat pilihan) ke cluster k8s saya.
Saat ini, saya merasa tidak terlalu efisien sehingga saya harus selalu menghapus ConfigMap dan Rahasia yang ada dan membuat yang baru untuk diperbarui seperti di bawah ini:
kubectl delete configmap foo
kubectl create configmap foo --from-file foo.properties
Adakah cara yang bagus dan sederhana untuk membuat satu langkah di atas dan lebih efisien daripada menghapus arus? berpotensi apa yang saya lakukan sekarang dapat membahayakan container yang menggunakan configmaps ini jika mencoba untuk me-mount sementara configmap lama dihapus dan yang baru belum dibuat.
sumber
Jawaban:
Anda bisa mendapatkan YAML dari
kubectl create configmap
perintah dan menyalurkannya kekubectl replace
, seperti ini:kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f -
sumber
error: error validating "STDIN": error validating data: [apiVersion not set, kind not set]; if you choose to ignore these errors, turn validation off with --validate=false
kubectl apply
alih-alihkubectl replace
, akan berfungsi baik untuk configmap baru dan yang sudah adaUntuk referensi di masa mendatang,
kubectl replace
sekarang cara yang sangat berguna untuk mencapai inikubectl replace -f some_spec.yaml
Memungkinkan Anda memperbarui configMap lengkap (atau objek lain)Lihat dokumen dan contoh langsung di sini
Salin / tempel dari bantuan:
# Replace a pod using the data in pod.json. kubectl replace -f ./pod.json # Replace a pod based on the JSON passed into stdin. cat pod.json | kubectl replace -f - # Update a single-container pod's image version (tag) to v4 kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f - # Force replace, delete and then re-create the resource kubectl replace --force -f ./pod.json
sumber
--from-file
persyaratan. Configmaps dapat dibuat dari file arbitrer, bukan hanya yaml.--force
opsinya, apa yang memungkinkan kita menggunakan<dry-run ConfigMap creation> | kubectl replace --force -f -
perintah pendekatan bahkan untuk pertama kalinya, ketika ConfigMap belum ada. Tetapi saya tidak yakin apakah aman untuk menghapus ConfigMap karena Pod mungkin rusak selama kekurangannya karena tidak menemukannya. Mungkin lebih baik pendekatannya<dry-run ConfigMap creation> | kubectl apply -f -
? Poin ini diperkenalkan oleh @ karthic-c, bagaimana menurut Anda? Juga @ jordan-liggitt bagaimana menurutmu?Untuk perubahan kecil
configMap
, gunakanedit
kubectl edit configmap <cfg-name>
Ini akan membuka configMap di
vi
editor. Lakukan perubahan dan simpan.sumber
kubectl replace
gagal jika configmap sudah ada:$ kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f - Error from server (NotFound): error when replacing "STDIN": configmaps "falco-config" not found
Solusi terbaik adalah menggunakan
kubectl apply
yang akan membuat configmap jika tidak ada, perbarui configmap jika ada:$ kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl apply -f - configmap/falco-config configured
sumber
kubectl replace
gagal jika configmap belum ada".Ambil salinan dari configmap yang ada:
kubectl get configmap foo -o yaml > foo.yaml
Dan kemudian lakukan modifikasi dan gunakan perintah terapkan, ini harus berfungsi.
kubectl apply -f foo.yaml
Catatan: Memetikan jika Anda melihat salah satu masalah berikut, sertakan "resourceVersion" terbaru dari peta konfigurasi yang ada dan coba lagi.
"Operasi tidak dapat diselesaikan di configmaps" foo ": objek telah dimodifikasi; terapkan perubahan Anda ke versi terbaru dan coba lagi"
sumber