Pruning ใน Argo CD: ลบ Resource ที่ไม่ได้ใช้งานอัตโนมัติ
Pruning เป็นคุณสมบัติสำคัญของ Argo CD ที่ช่วยลบ Kubernetes Resource ที่ไม่ได้ระบุไว้ใน Git Repository อัตโนมัติ บทความนี้จะอธิบายวิธีการใช้งาน ประเภท และ Best Practices ของการลบ Resource
Pruning คืออะไร
Pruning ใน Argo CD หมายถึงกระบวนการลบ Kubernetes Resource ที่ไม่ได้ถูกนิยามไว้ในไฟล์ Git Repository โดยอัตโนมัติ เมื่อเปิดใช้งาน Pruning Argo CD จะติดตามและลบ Resource ที่เคยถูกสร้างโดย Argo CD แต่ไม่มีการอ้างอิงในแหล่งที่มา
ตัวอย่างเช่น หากลบไฟล์ Deployment จาก Git Repository Argo CD ที่เปิด Pruning จะลบ Deployment นั้นจากคลัสเตอร์ Kubernetes โดยอัตโนมัติ
ความสำคัญของ Pruning
- ลดการสึกหรอของทรัพยากร: ลบ Resource ที่ไม่ต้องการอัตโนมัติ เพื่อประหยัดการใช้ CPU และหน่วยความจำ
- รักษาความสอดคล้อง: ให้แน่ใจว่าสถานะคลัสเตอร์ตรงกับที่ระบุไว้ใน Git Repository
- ลดความซับซ้อน: หลีกเลี่ยงการจัดการ Resource ด้วยตนเองที่อาจนำไปสู่ข้อผิดพลาด
- ลดค่าใช้จ่าย: เมื่อใช้ Cloud VPS ของ ผู้ให้บริการโฮสติ้ง การลบ Resource ที่ไม่ใช้งาน จะช่วยลดค่าใช้จ่ายเซิร์ฟเวอร์
วิธีการเปิดใช้งาน Pruning
มี 3 วิธีหลักในการเปิดใช้งาน Pruning ใน Argo CD:
1. ผ่าน Application Manifest
เปิดใช้งาน Pruning ที่ระดับ Application โดยเพิ่มการตั้งค่าต่อไปนี้:
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: apps/my-app
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
2. ผ่าน Server-side Configuration
ตั้งค่า Pruning เป็นค่าเริ่มต้นสำหรับเซิร์ฟเวอร์ Argo CD ทั้งหมด:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
data:
server.disable.auth: 'false'
server.insecure: 'false'
application.instanceLabelKey: argocd.argoproj.io/instance
application.resourceTrackingMethod: annotation
3. ผ่าน Argo CD CLI
ใช้ CLI ในการเปิดใช้งาน Pruning:
argocd app create my-app \
--repo https://github.com/example/repo \
--path apps/my-app \
--sync-policy automated \
--prune
ประเภทของ Pruning Policy
Foreground Pruning
Argo CD จะรอให้ Resource ลบเสร็จสิ้นก่อนที่จะสิ้นสุด Sync นี่คือพฤติกรรมเริ่มต้น:
syncPolicy:
syncOptions:
- PrunePropagationPolicy=foreground
Background Pruning
Resource จะถูกลบในพื้นหลังหลังจาก Sync สิ้นสุด:
syncPolicy:
syncOptions:
- PrunePropagationPolicy=background
Orphan Pruning
Resource จะไม่ถูกลบเลย ใช้เมื่อต้องการรักษา Resource เดิม:
syncPolicy:
syncOptions:
- PrunePropagationPolicy=orphan
ข้อควรระวังและความเสี่ยง
- ข้อมูลสูญหาย: Pruning อาจลบ Resource ที่เก็บข้อมูลสำคัญ ใช้ Backup ก่อนเปิด Pruning
- ลบโดยไม่ได้ตั้งใจ: หากการตั้งค่า Git ผิดพลาด Resource ที่ต้องการจะถูกลบโดยไม่ตั้งใจ
- Performance Impact: Pruning ขนาดใหญ่อาจทำให้ Cluster ช้าลง
- Dependency Issues: ต้องแน่ใจว่า Resource ที่ลบไม่มี Dependency จาก Service อื่น
Best Practices สำหรับการใช้ Pruning
- ทดสอบก่อนใช้งานจริง: เปิด Pruning บน Development Environment ก่อน Production
- ใช้ Automated Cleanup Policy: กำหนดนโยบายการลบที่เหมาะสมเช่น TTL หรือ Grace Period
- ตรวจสอบ Git Repository: ตรวจสอบให้แน่ใจว่า Configuration File ถูกต้องและอัปเดตเป็นปัจจุบัน
- ใช้ Namespace Isolation: แบ่ง Namespace เพื่อป้องกันการลบ Resource ที่ไม่ต้องการข้ามแอปพลิเคชัน
- Monitor Sync Activity: ติดตาม Sync Log และ Event เพื่อรู้ว่า Resource ใดถูกลบ
- กำหนด Finalizers: ใช้ Finalizers เพื่อควบคุมกระบวนการลบ Resource ที่สำคัญ
Advanced Pruning Configuration
สำหรับการตั้งค่าที่ละเอียดมากขึ้น คุณสามารถใช้การตั้งค่าต่อไปนี้:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: advanced-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/example/repo
targetRevision: HEAD
path: apps
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=background
- RespectIgnoreDifferences=true
retry:
limit: 5
backoff:
duration: 5s
factor: 2
maxDuration: 3m
การใช้ Pruning กับ ผู้ให้บริการโฮสติ้ง Cloud VPS
เมื่อใช้บริการ ผู้ให้บริการโฮสติ้ง Cloud VPS การเปิดใช้งาน Pruning จะช่วยให้คุณ:
- ลดการใช้ทรัพยากร CPU และ Memory บนเซิร์ฟเวอร์
- ลดค่าใช้จ่าย Cloud Infrastructure ด้วยการลบ Resource ที่ไม่ใช้งาน
- รักษาเซิร์ฟเวอร์ให้สะอาดและปราศจาก Orphan Resource
- ใช้ Kubernetes Cluster ที่มีประสิทธิภาพสูงบน Cloud VPS ด้วยการออโตเมตที่ดี
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโซลูชัน Cloud VPS สำหรับ DevOps และ Kubernetes โปรดติดต่อ ผู้ให้บริการโฮสติ้ง ที่ https://de.co.th
การแก้ไขปัญหา Pruning
ปัญหา: Resource ไม่ถูกลบแม้ว่าเปิด Pruning แล้ว
วิธีแก้ไข:
- ตรวจสอบว่า Pruning เปิดอยู่ใน Application Spec
- ตรวจสอบ Argo CD Log สำหรับข้อมูลข้อผิดพลาด
- ตรวจสอบว่า Resource มี Owner Reference ที่ถูกต้อง
ปัญหา: Resource ถูกลบเมื่อไม่ควรลบ
วิธีแก้ไข:
- ปิด Pruning ชั่วคราวและตรวจสอบ Git Repository
- ใช้ Orphan Policy แทน Pruning
- กำหนด Namespace ที่ถูกต้องและใช้ RBAC สำหรับควบคุมการเข้าถึง
สรุป
Pruning ใน Argo CD เป็นคุณสมบัติที่มีประสิทธิภาพในการจัดการ Kubernetes Resource โดยอัตโนมัติ การเปิดใช้งาน Pruning อย่างถูกต้องจะช่วยให้คลัสเตอร์สะอาด ประหยัด และปลอดภัยมากขึ้น อย่างไรก็ตาม ต้องทำการทดสอบและติดตามอย่างสม่ำเสมอเพื่อหลีกเลี่ยงการลบ Resource ที่ไม่ต้องการ
หากคุณใช้ Kubernetes บน Cloud VPS ของ ผู้ให้บริการโฮสติ้ง ลองใช้ Pruning เพื่อลดค่าใช้จ่ายและปรับปรุงประสิทธิภาพของอินฟราสตรัคเจอร์ของคุณ

