Thay thế biến môi trường trong tất cả các tệp khi kubectl áp dụng

Jan 14 2021

Giả sử chúng tôi có một số tệp cấu hình Kubernetes trong một thư mục kubernetesvà chúng tôi muốn áp dụng tất cả chúng:

kubectl apply -f kubernetes -n MyNamespace

Một số tệp này chứa các biến môi trường cần được thay thế trước (không tạo khuôn mẫu trong Kubernetes). Ví dụ: một số yamls triển khai chứa một số thứ như:

image: myregistry.com/myrepo:$TAG

Đối với một tệp yaml duy nhất, điều này có thể được thực hiện, ví dụ bằng cách sử dụng envsubst như sau:

envsubst < deploy.yml | kubectl apply -f -

Cách tốt nhất để thực hiện những thay thế này cho tất cả các tệp yaml là gì?

(Lặp qua các tệp trong thư mục và gọi envsubstnhư trên là một tùy chọn, nhưng tôi nghi ngờ rằng sẽ thích hợp hơn nếu chuyển toàn bộ thư mục kubectlchứ không phải các tệp riêng lẻ)

Trả lời

5 Inian Jan 13 2021 at 23:26

Bạn có thể cho phép envsubstđọc nội dung của nhiều tệp từ đầu vào chuẩn như thể nó đang đọc một tệp < deploy.yamlbằng cách sử dụng <(..)tính năng thay thế quy trình của bashhoặc sử dụng ol đơn giảncat

envsubst < <(cat *.yaml) | kubectl apply -f -

hoặc là

cat *.yaml | envsubst - | kubectl apply -f -
2 Max Jan 14 2021 at 07:39

Những công việc này:

for f in *.yaml; do envsubst < $f | kubectl apply -f -; done