kustomize ช่วยให้คุณปรับแต่งไฟล์ YAML แบบดิบที่ปราศจากเทมเพลตเพื่อจุดประสงค์หลายอย่างโดยปล่อยให้ Yaml ดั้งเดิมไม่ได้แตะต้องและใช้งานได้ตามที่เป็นอยู่
kustomize เป้าหมาย Kubernetes; เข้าใจและสามารถแก้ไขวัตถุ API สไตล์ Kubernetes ได้ มัน make ว่าสิ่งที่มันทำในไฟล์และมันก็เหมือนกับ sed ในการที่มันปล่อยข้อความที่แก้ไข
เครื่องมือนี้ได้รับการสนับสนุนโดย Sig-Cli (KEP)
หากต้องการค้นหารุ่น Kustomize ที่ฝังอยู่ใน Kubectl เวอร์ชันล่าสุดเรียกใช้ kubectl version :
> kubectl version --client
Client Version: v1.31.0
Kustomize Version: v5.4.2Kustomize build flow ที่ v2.0.3 ถูกเพิ่มลงใน Kubectl v1.14 การไหลของ kustomize ใน kubectl ยังคงแช่แข็งที่ v2.0.3 จนกระทั่ง Kubectl v1.21 ซึ่งอัปเดตเป็น v4.0.5 มันจะได้รับการอัปเดตเป็นประจำในอนาคตและการอัปเดตดังกล่าวจะสะท้อนให้เห็นในบันทึกย่อของ Kubernetes
| Kubectl เวอร์ชัน | รุ่น kustomize |
|---|---|
| <v1.14 | N/A |
| v1.14-v1.20 | v2.0.3 |
| v1.21 | v4.0.5 |
| v1.22 | v4.2.0 |
| v1.23 | v4.4.1 |
| v1.24 | v4.5.4 |
| v1.25 | v4.5.7 |
| v1.26 | v4.5.7 |
| v1.27 | v5.0.1 |
ตัวอย่างและคำแนะนำสำหรับการใช้การรวม Kubectl โปรดดูเอกสาร Kubernetes
ในไดเรกทอรีบางอย่างที่มีไฟล์ทรัพยากร YAML ของคุณ (การปรับใช้, บริการ, configmaps, ฯลฯ ), สร้างไฟล์ kustomization
ไฟล์นี้ควรประกาศทรัพยากรเหล่านั้นและการปรับแต่งใด ๆ ที่จะนำไปใช้กับพวกเขาเช่น เพิ่มฉลากทั่วไป
base: kustomization + resources
kustomization.yaml deployment.yaml service.yaml
+---------------------------------------------+ +-------------------------------------------------------+ +-----------------------------------+
| apiVersion: kustomize.config.k8s.io/v1beta1 | | apiVersion: apps/v1 | | apiVersion: v1 |
| kind: Kustomization | | kind: Deployment | | kind: Service |
| commonLabels: | | metadata: | | metadata: |
| app: myapp | | name: myapp | | name: myapp |
| resources: | | spec: | | spec: |
| - deployment.yaml | | selector: | | selector: |
| - service.yaml | | matchLabels: | | app: myapp |
| configMapGenerator: | | app: myapp | | ports: |
| - name: myapp-map | | template: | | - port: 6060 |
| literals: | | metadata: | | targetPort: 6060 |
| - KEY=value | | labels: | +-----------------------------------+
+---------------------------------------------+ | app: myapp |
| spec: |
| containers: |
| - name: myapp |
| image: myapp |
| resources: |
| limits: |
| memory: "128Mi" |
| cpu: "500m" |
| ports: |
| - containerPort: 6060 |
+-------------------------------------------------------+
โครงสร้างไฟล์:
~/someApp ├── deployment.yaml ├── kustomization.yaml └── service.yaml
ทรัพยากรในไดเรกทอรีนี้อาจเป็นส้อมของการกำหนดค่าของคนอื่น ถ้าเป็นเช่นนั้นคุณสามารถรีดเบสจากแหล่งข้อมูลเพื่อจับภาพการปรับปรุงได้อย่างง่ายดายเพราะคุณไม่ได้แก้ไขทรัพยากรโดยตรง
สร้าง Yaml ที่กำหนดเองด้วย:
kustomize build ~/someApp
Yaml สามารถนำไปใช้โดยตรงกับคลัสเตอร์:
kustomize build ~/someApp | kubectl apply -f -
จัดการตัวแปรดั้งเดิมของการกำหนดค่า - เช่น การพัฒนาการ จัดเตรียม และ การผลิต - ใช้การซ้อนทับที่แก้ไขฐานทั่วไป
overlay: kustomization + patches
kustomization.yaml replica_count.yaml cpu_count.yaml
+-----------------------------------------------+ +-------------------------------+ +------------------------------------------+
| apiVersion: kustomize.config.k8s.io/v1beta1 | | apiVersion: apps/v1 | | apiVersion: apps/v1 |
| kind: Kustomization | | kind: Deployment | | kind: Deployment |
| commonLabels: | | metadata: | | metadata: |
| variant: prod | | name: myapp | | name: myapp |
| resources: | | spec: | | spec: |
| - ../../base | | replicas: 80 | | template: |
| patches: | +-------------------------------+ | spec: |
| - path: replica_count.yaml | | containers: |
| - path: cpu_count.yaml | | - name: myapp |
+-----------------------------------------------+ | resources: |
| limits: |
| memory: "128Mi" |
| cpu: "7000m" |
+------------------------------------------+
โครงสร้างไฟล์:
~/someApp ├── base │ ├── deployment.yaml │ ├── kustomization.yaml │ └── service.yaml └── overlays ├── development │ ├── cpu_count.yaml │ ├── kustomization.yaml │ └── replica_count.yaml └── production ├── cpu_count.yaml ├── kustomization.yaml └── replica_count.yaml
ใช้งานจากขั้นตอน (1) ด้านบนย้ายไปยังไดเรกทอรีย่อย someApp ที่เรียกว่า base จากนั้นวางซ้อนทับในไดเรกทอรีพี่น้อง
การซ้อนทับเป็นเพียงการทำให้เป็น kustomization อื่นอ้างถึงฐานและอ้างถึงแพตช์เพื่อนำไปใช้กับฐานนั้น
การจัดเรียงนี้ทำให้ง่ายต่อการจัดการการกำหนดค่าของคุณด้วย git ฐานอาจมีไฟล์จากที่เก็บต้นน้ำที่จัดการโดยคนอื่น การซ้อนทับอาจอยู่ในที่เก็บที่คุณเป็นเจ้าของ การจัดเรียงโคลนนิ่ง repo เป็นพี่น้องบนดิสก์หลีกเลี่ยงความจำเป็นในการ git submodules (แม้ว่ามันจะใช้งานได้ดีถ้าคุณเป็นแฟน submodule)
สร้าง Yaml ด้วย
kustomize build ~ /someApp/overlays/productionYaml สามารถนำไปใช้โดยตรงกับคลัสเตอร์:
kustomize build ~ /someApp/overlays/production | kubectl apply -f -
การมีส่วนร่วมในชุมชน Kubernetes ถูกควบคุมโดยจรรยาบรรณ Kubernetes