แทนที่ตัวแปรสภาพแวดล้อมในไฟล์ทั้งหมดเมื่อใช้ kubectl
สมมติว่าเรามีไฟล์การกำหนดค่า Kubernetes จำนวนหนึ่งในโฟลเดอร์kubernetes
และเราต้องการนำไปใช้ทั้งหมด:
kubectl apply -f kubernetes -n MyNamespace
ไฟล์เหล่านี้บางไฟล์มีตัวแปรสภาพแวดล้อมซึ่งจำเป็นต้องแทนที่ก่อน (ไม่มีเทมเพลตใน Kubernetes) ตัวอย่างเช่น yamls การปรับใช้หลายรายการประกอบด้วยสิ่งต่างๆเช่น:
image: myregistry.com/myrepo:$TAG
สำหรับไฟล์ yaml ไฟล์เดียวสามารถทำได้เช่นโดยใช้ envsubst ดังนี้:
envsubst < deploy.yml | kubectl apply -f -
อะไรคือวิธีที่ดีที่สุดในการแทนที่เหล่านี้สำหรับไฟล์ yaml ทั้งหมด?
(การวนซ้ำไฟล์ในโฟลเดอร์และการโทรenvsubst
ตามด้านบนเป็นทางเลือกหนึ่ง แต่ฉันสงสัยว่าจะดีกว่าที่จะส่งต่อทั้งโฟลเดอร์ไปkubectl
ยังแต่ละไฟล์)
คำตอบ
5 Inian
คุณสามารถปล่อยให้envsubst
อ่านเนื้อหาของไฟล์หลายไฟล์จากอินพุตมาตรฐานราวกับว่ามันกำลังอ่านไฟล์เดียว< deploy.yaml
โดยใช้<(..)
คุณสมบัติการทดแทนกระบวนการbash
หรือใช้ olcat
envsubst < <(cat *.yaml) | kubectl apply -f -
หรือ
cat *.yaml | envsubst - | kubectl apply -f -
2 Max
ใช้งานได้:
for f in *.yaml; do envsubst < $f | kubectl apply -f -; done