Thay thế biến môi trường trong tất cả các tệp khi kubectl áp dụng
Giả sử chúng tôi có một số tệp cấu hình Kubernetes trong một thư mục kubernetes
và 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 envsubst
như 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 kubectl
chứ không phải các tệp riêng lẻ)
Trả lời
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.yaml
bằng cách sử dụng <(..)
tính năng thay thế quy trình của bash
hoặc sử dụng ol đơn giảncat
envsubst < <(cat *.yaml) | kubectl apply -f -
hoặc là
cat *.yaml | envsubst - | kubectl apply -f -
Những công việc này:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done