บทนำ: Sync Options ในการจัดการแอปพลิเคชัน
เมื่อทำงานกับ Argo CD ในสภาพแวดล้อม Kubernetes บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง คุณจะต้องเข้าใจวิธีการควบคุมพฤติกรรมการซิงโครไนซ์ (Sync) ของแอปพลิเคชัน Sync Options เป็นการตั้งค่าที่ช่วยให้คุณมีความสามารถในการปรับแต่งวิธีที่ Argo CD ทำการประมวลผล และปรับใช้การเปลี่ยนแปลงกับคลัสเตอร์ของคุณ
Sync Options คืออะไร
Sync Options เป็นการตั้งค่าในไฟล์ Application manifest ที่ช่วยควบคุมพฤติกรรมการซิงโครไนซ์ของ Argo CD ด้วย Sync Options คุณสามารถ:
- ควบคุมวิธีการตรวจสอบความถูกต้องของทรัพยากร (Validate)
- สร้างเนมสเปส (Namespace) โดยอัตโนมัติ
- กำหนดนโยบายการลบทรัพยากร (Prune Policy)
- ใช้การแทนที่ทรัพยากร (Replace)
- ใช้การใช้งานฝั่งเซิร์ฟเวอร์ (Server-Side Apply)
ตัวเลือก Sync Options ทั้งหมด
1. Validate – ตรวจสอบความถูกต้องของทรัพยากร
Validate Option ใช้ในการตรวจสอบว่าทรัพยากร YAML ที่ผู้ใช้ส่งมานั้นถูกต้องหรือไม่ หากตั้งเป็น false จะข้ามการตรวจสอบและสามารถปรับใช้ได้แม้ว่า YAML อาจมีข้อผิดพลาด
กรณีการใช้งาน: ใช้เมื่อต้องการปรับใช้ custom resource definitions (CRDs) ที่ไม่มี schema ที่ชัดเจน
2. CreateNamespace – สร้างเนมสเปสโดยอัตโนมัติ
เมื่อตั้ง CreateNamespace เป็น true Argo CD จะสร้างเนมสเปสที่ระบุในแอปพลิเคชันโดยอัตโนมัติหากไม่มีอยู่
3. PrunePropagationPolicy – นโยบายการลบ Cascade
Option นี้กำหนดว่าควรลบทรัพยากรที่เกี่ยวข้องด้วยหรือไม่ เมื่อ Argo CD ลบทรัพยากรหลัก ค่าดีฟอลต์คือ “foreground” ซึ่งจะรอให้ทรัพยากรย่อยถูกลบก่อน
4. PruneLast – ลบทรัพยากรเป็นครั้งสุดท้าย
เมื่อตั้ง PruneLast เป็น true Argo CD จะลบทรัพยากรเป็นขั้นตอนสุดท้ายของการซิงโครไนซ์ สิ่งนี้มีประโยชน์เมื่อต้องการให้การลบเกิดขึ้นหลังจากที่ทรัพยากรใหม่มีการจัดการอย่างสมบูรณ์
5. Replace – แทนที่ทรัพยากร
เมื่อตั้ง Replace เป็น true Argo CD จะลบและสร้างทรัพยากรใหม่แทนที่จะแก้ไขทรัพยากรที่มีอยู่
6. ServerSideApply – ใช้การใช้งานฝั่งเซิร์ฟเวอร์
Server-Side Apply เป็นวิธีการใหม่ในการแก้ไข resources ใน Kubernetes หากตั้ง ServerSideApply เป็น true Argo CD จะใช้ Server-Side Apply แทน Client-Side Apply ซึ่งให้การแก้ไขที่ดีขึ้นสำหรับ resources ที่มี controllers ที่เขียนค่า fields
7. FailOnSharedResource – ล้มเหลวหากมีทรัพยากรที่ใช้ร่วมกัน
เมื่อตั้ง FailOnSharedResource เป็น true Argo CD จะล้มเหลวการซิงโครไนซ์หากพบว่าทรัพยากรกำลังถูกจัดการโดยแอปพลิเคชันอื่นด้วย
8. RespectIgnoreDifferences – เคารพการไม่สนใจความแตกต่าง
Option นี้ช่วยให้ Argo CD เคารพการตั้ง ignoreDifferences ในแอปพลิเคชัน แล้วจึงไม่พิจารณาความแตกต่างในบางฟิลด์เมื่อเปรียบเทียบสถานะปัจจุบัน
9. ApplyOutOfSyncOnly – ใช้งานเฉพาะสำหรับทรัพยากรที่ out-of-sync
เมื่อตั้ง ApplyOutOfSyncOnly เป็น true Argo CD จะใช้งานเฉพาะทรัพยากรที่อยู่ในสถานะ out-of-sync
วิธีการตั้งค่า Sync Options ใน Application YAML
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/repo
targetRevision: HEAD
path: manifests
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- Validate=true
- PrunePropagationPolicy=foreground
- RespectIgnoreDifferences=true
ตัวอย่างการใช้งาน Sync Options
ตัวอย่าง 1: สร้างเนมสเปสและซิงโครไนซ์โดยอัตโนมัติ
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: new-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/repo
path: apps/new-app
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: new-namespace
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
ตัวอย่าง 2: ใช้ Server-Side Apply และป้องกันความขัดแย้ง
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: secure-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/repo
path: apps/secure-app
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
syncOptions:
- ServerSideApply=true
- FailOnSharedResource=true
- RespectIgnoreDifferences=true
ตัวอย่าง 3: ลบทรัพยากรเป็นครั้งสุดท้าย
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: stateful-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/repo
path: apps/stateful
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
syncOptions:
- PruneLast=true
- PrunePropagationPolicy=background
การรวมตัวเลือกหลายอย่างเข้าด้วยกัน
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: production-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/repo
path: apps/production
targetRevision: main
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- Validate=true
- ServerSideApply=true
- RespectIgnoreDifferences=true
- FailOnSharedResource=true
- PruneLast=true
- PrunePropagationPolicy=foreground
กรณีการใช้งานตามสภาพแวดล้อม
สภาพแวดล้อมการพัฒนา (Development)
syncOptions:
- CreateNamespace=true
- Replace=true
สภาพแวดล้อมการผลิต (Production)
บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง คุณต้องระมัดระวังมากขึ้น:
syncOptions:
- Validate=true
- ServerSideApply=true
- FailOnSharedResource=true
- RespectIgnoreDifferences=true
- PruneLast=true
แนวปฏิบัติที่ดีที่สุด (Best Practices)
1. ใช้ Validate อย่างเสมอในสภาพแวดล้อมการผลิต – การตรวจสอบ YAML ช่วยป้องกันการปรับใช้ manifest ที่มีข้อผิดพลาด
2. เข้าใจความแตกต่างระหว่าง Prune Policies – foreground, background, และ orphan เป็นค่าต่างกัน สำหรับแอปพลิเคชัน stateful ใช้ background หรือ orphan
3. ใช้ PruneLast สำหรับการลบที่ปลอดภัย – เมื่อลบแอปพลิเคชัน ตั้ง PruneLast=true เพื่อให้ยุติการลบจนกว่า resources ใหม่จะพร้อม
4. ใช้ ServerSideApply สำหรับการจัดการฟิลด์ที่ดีขึ้น – ServerSideApply ให้การจัดการ field ownership ที่ดีขึ้น
5. ตั้ง FailOnSharedResource เพื่อป้องกันความขัดแย้ง
6. ทดสอบใน Staging ก่อน Production – ทุกครั้งที่เปลี่ยน Sync Options ให้ทดสอบใน staging environment ก่อน
การแก้ไขปัญหาทั่วไป
Argo CD ไม่สามารถสร้างเนมสเปสได้
ตรวจสอบว่า CreateNamespace=true ถูกตั้งอย่างถูกต้องใน syncOptions และ Argo CD controller มีสิทธิ์ที่จำเป็น
Sync ล้มเหลวเนื่องจาก shared resource
หากจำเป็นต้องแชร์ resources ระหว่างแอปพลิเคชัน ตั้ง FailOnSharedResource=false และปรับ ignoreDifferences ให้เหมาะสม
Validation ล้มเหลวแต่ YAML ถูกต้อง
อาจเป็นปัญหากับ CRD definitions ตั้ง Validate=false ชั่วคราวเพื่อ debugging หรือตรวจสอบว่า CRD ถูก install อย่างถูกต้อง
สรุป
Sync Options เป็นเครื่องมือที่ทรงพลังในการปรับแต่งพฤติกรรมการซิงโครไนซ์ของ Argo CD ด้วยการเข้าใจและใช้ตัวเลือกเหล่านี้อย่างถูกต้อง คุณสามารถสร้าง deployment workflows ที่ปลอดภัย มั่นคง และมีประสิทธิภาพสูง สำหรับสภาพแวดล้อมการผลิต เราแนะนำให้ใช้ Cloud VPS ของ ผู้ให้บริการโฮสติ้ง เพื่อให้ได้ผลประโยชน์จากการจัดการโครงสร้างพื้นฐานที่มืออาชีพและการสนับสนุน 24/7

