แทนที่ตัวแปรสภาพแวดล้อมในไฟล์ทั้งหมดเมื่อใช้ kubectl

Jan 14 2021

สมมติว่าเรามีไฟล์การกำหนดค่า 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 Jan 13 2021 at 23:26

คุณสามารถปล่อยให้envsubstอ่านเนื้อหาของไฟล์หลายไฟล์จากอินพุตมาตรฐานราวกับว่ามันกำลังอ่านไฟล์เดียว< deploy.yamlโดยใช้<(..)คุณสมบัติการทดแทนกระบวนการbashหรือใช้ olcat

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

หรือ

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

ใช้งานได้:

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