App of Apps Pattern ใน Argo CD จัดการหลาย Application ด้วย Application เดียว

App of Apps Pattern ใน Argo CD จัดการหลาย Application ด้วย Application เดียว

App of Apps Pattern เป็นรูปแบบการจัดการแอปพลิเคชันขั้นสูงใน Argo CD ที่ช่วยให้นักพัฒนาและผู้ดูแลระบบสามารถจัดการแอปพลิเคชันหลายตัวได้อย่างมีประสิทธิภาพ โดยใช้แอปพลิเคชันเดียวเป็นตัวจัดการหลัก (Parent Application) ที่ควบคุมแอปพลิเคชันลูก (Child Applications) ทั้งหมด

เมื่อคุณใช้ ผู้ให้บริการโฮสติ้ง Cloud VPS สำหรับการ Deploy โปรเจกต์ Kubernetes ขนาดใหญ่ การใช้ App of Apps Pattern จะช่วยให้คุณจัดการ Infrastructure เป็นหน่วยเล็ก ๆ ได้ง่ายขึ้น และสามารถ Scale ระบบได้อย่างราบรื่น

App of Apps Pattern คืออะไร

App of Apps Pattern เป็นรูปแบบ GitOps ที่อิงจากแนวคิดของ Declarative Management โดยจะมีแอปพลิเคชันหลักหนึ่งตัวที่ทำหน้าที่เป็น “Application Controller” เพื่อจัดการแอปพลิเคชันลูกหลายตัวพร้อม ๆ กัน

ลักษณะเด่นของ App of Apps Pattern

  • Centralized Management: จัดการแอปพลิเคชันทั้งหมดจากจุดเดียว ทำให้ง่ายต่อการติดตามสถานะและอัปเดต
  • Modular Architecture: แบ่งแอปพลิเคชันออกเป็นส่วน ๆ เล็ก ๆ ทำให้ง่ายต่อการบำรุงรักษาและพัฒนา
  • Scalability: เหมาะสำหรับการจัดการแอปพลิเคชันจำนวนมาก โดยไม่ต้องสร้าง Argo CD Application แยกสำหรับแต่ละตัว
  • Consistency: ป้องกันการไม่สอดคล้องกันของการ Deploy โดยทำให้ทุกแอปพลิเคชันอัปเดตพร้อม ๆ กัน
  • Flexibility: สามารถควบคุมการ Deploy ของแอปพลิเคชันลูกแต่ละตัวได้อย่างอิสระ

เหตุใดจึงควรใช้ App of Apps Pattern

เมื่อคุณมีโปรเจกต์ขนาดใหญ่ที่ต้องการจัดการแอปพลิเคชันหลายตัว App of Apps Pattern จะเป็นทางออกที่ดีที่สุด

ข้อดีของการใช้ App of Apps Pattern

  1. ลดความซับซ้อน: แทนที่จะจัดการแอปพลิเคชันแต่ละตัวใน Argo CD คุณจะจัดการแอปพลิเคชันเดียวที่ควบคุมทั้งหมด
  2. เพิ่มประสิทธิภาพ: ทำให้การ Deploy และอัปเดตเร็วขึ้น เพราะสามารถอัปเดตแอปพลิเคชันลูกหลายตัวพร้อม ๆ กัน
  3. ง่ายต่อการบำรุงรักษา: เมื่อมีการเปลี่ยนแปลงใด ๆ คุณเพียงแค่อัปเดต Parent Application ก็พอ
  4. สนับสนุนการ Scale: เมื่อโปรเจกต์เติบโต คุณสามารถเพิ่มแอปพลิเคชันลูกใหม่ได้ง่าย ๆ
  5. ควบคุมเวอร์ชัน: สามารถควบคุมเวอร์ชันของแต่ละแอปพลิเคชันลูกได้อย่างอิสระ

ขณะที่คุณใช้ ผู้ให้บริการโฮสติ้ง Cloud VPS สำหรับ Hosting โปรเจกต์ Kubernetes ของคุณ การใช้ App of Apps Pattern จะช่วยให้คุณสามารถจัดการ Infrastructure เป็นรูปแบบที่สะดวกและมีประสิทธิภาพ

โครงสร้างไดเรกทอรี่สำหรับ App of Apps

วิธีที่ดีที่สุดในการจัดการ App of Apps Pattern คือการสร้างโครงสร้างไดเรกทอรี่ที่เป็นระเบียบและง่ายต่อการเข้าใจ

ตัวอย่างโครงสร้างไดเรกทอรี่

my-app-of-apps/
├── argocd/
│   ├── parent/
│   │   └── application.yaml          # Parent Application
│   └── children/
│       ├── web-app.yaml              # Child Application 1
│       ├── api-app.yaml              # Child Application 2
│       ├── database-app.yaml         # Child Application 3
│       └── cache-app.yaml            # Child Application 4
├── apps/
│   ├── web-app/
│   │   ├── Chart.yaml
│   │   ├── values.yaml
│   │   └── templates/
│   ├── api-app/
│   │   ├── Chart.yaml
│   │   ├── values.yaml
│   │   └── templates/
│   ├── database-app/
│   │   ├── Chart.yaml
│   │   ├── values.yaml
│   │   └── templates/
│   └── cache-app/
│       ├── Chart.yaml
│       ├── values.yaml
│       └── templates/
├── environments/
│   ├── dev/
│   │   └── values.yaml
│   ├── staging/
│   │   └── values.yaml
│   └── production/
│       └── values.yaml
└── README.md

โครงสร้างนี้ช่วยให้คุณแยกแยะความแตกต่างระหว่าง Parent Application และ Child Applications ได้ชัดเจน ทำให้ง่ายต่อการบำรุงรักษา

Parent Application Manifest

Parent Application คือแอปพลิเคชันหลักที่ทำหน้าที่ควบคุมแอปพลิเคชันลูกทั้งหมด มันเป็น Argo CD Application ธรรมดาที่ชี้ไปยังไดเรกทอรี่ที่เก็บ Child Applications

ตัวอย่าง Parent Application Manifest

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app-of-apps
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/yourusername/my-app-of-apps.git
    targetRevision: main
    path: argocd/children
  destination:
    server: https://kubernetes.default.svc
    namespace: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

คำอธิบายของ Parent Application Manifest

  • metadata.name: ชื่อของ Parent Application ในระบบ Argo CD
  • source.repoURL: URL ของ Git repository ที่เก็บ Application Manifests
  • source.path: ชี้ไปยังไดเรกทอรี่ที่เก็บ Child Applications YAML files
  • destination.server: Kubernetes cluster ที่ Deploy ไป
  • syncPolicy: กำหนดนโยบายการ Sync อัตโนมัติ

เมื่อ Parent Application ชี้ไปยังไดเรกทอรี่ Argo CD จะสแกนไฟล์ YAML ทั้งหมดในไดเรกทอรีนั้นและสร้าง Application สำหรับแต่ละไฟล์โดยอัตโนมัติ

Child Application Manifests

Child Applications คือแอปพลิเคชันแต่ละตัวที่ถูกควบคุมโดย Parent Application แต่ละ Child Application สามารถมีการ Deploy แยกแต่งต่างได้

ตัวอย่าง Child Application 1: Web Application

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: web-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/yourusername/my-app-of-apps.git
    targetRevision: main
    path: apps/web-app
  destination:
    server: https://kubernetes.default.svc
    namespace: web-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

ตัวอย่าง Child Application 2: API Application

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: api-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/yourusername/my-app-of-apps.git
    targetRevision: main
    path: apps/api-app
  destination:
    server: https://kubernetes.default.svc
    namespace: api-app
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

ตัวอย่าง Child Application 3: Database Application

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: database-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/yourusername/my-app-of-apps.git
    targetRevision: main
    path: apps/database-app
  destination:
    server: https://kubernetes.default.svc
    namespace: database
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

โปรดทราบว่าแต่ละ Child Application มี namespace ที่แตกต่างกัน ซึ่งช่วยให้สามารถแยกการทำงานของแต่ละแอปพลิเคชันได้

พฤติกรรมการ Sync ของ App of Apps

เมื่อ Parent Application ทำการ Sync แอปพลิเคชันลูกจะ Sync ไปด้วยโดยอัตโนมัติ ขึ้นอยู่กับ syncPolicy ที่กำหนดไว้

วิธีการ Sync

  1. Manual Sync: ต้องกดปุ่ม Sync ด้วยตนเองผ่านทาง Argo CD UI หรือ CLI
  2. Automated Sync: เมื่อมีการเปลี่ยนแปลงใน Git repository Argo CD จะ Sync โดยอัตโนมัติ
  3. Selective Sync: สามารถเลือก Sync เฉพาะแอปพลิเคชันลูกที่ต้องการเท่านั้น

ตัวอย่างการตั้งค่า Automated Sync

syncPolicy:
  automated:
    prune: true      # ลบ resources ที่ไม่อยู่ใน Git
    selfHeal: true   # แก้ไขอัตโนมัติเมื่อมีการเปลี่ยนแปลง
  syncOptions:
    - CreateNamespace=true    # สร้าง namespace อัตโนมัติ
    - PrunePropagationPolicy=background  # ลบ background

ด้วยการตั้งค่านี้ Parent Application จะทำการ Sync Child Applications ทุกครั้งที่มีการเปลี่ยนแปลงใน Git repository

Best Practices สำหรับ App of Apps Pattern

การใช้ App of Apps Pattern อย่างถูกต้องต้องปฏิบัติตามข้อปฏิบัติที่ดีของ GitOps และ Argo CD

1. ใช้ Git Repository สำหรับจัดการการ Deploy

ทุกการเปลี่ยนแปลงควรอยู่ใน Git repository และสามารถ Track ได้ ช่วยให้สามารถ Rollback ได้ง่ายเมื่อมีปัญหา

2. แบ่ง Applications ตามหน้าที่

จัดกลุ่ม Applications ตามหน้าที่หลักเช่น web, api, database, cache เพื่อให้ง่ายต่อการจัดการและบำรุงรักษา

3. ใช้ Namespaces เพื่อแยก Applications

ให้แต่ละแอปพลิเคชัน Deploy ไปยัง namespace ที่แตกต่างกัน ช่วยให้ง่ายต่อการควบคุมการเข้าถึงและทำให้ปลอดภัยขึ้น

4. ตั้งค่า Resource Quotas และ Limits

กำหนด Resource Quotas สำหรับแต่ละ namespace เพื่อป้องกันแอปพลิเคชันใดแอปพลิเคชันหนึ่งใช้ resources มากเกินไป

5. ใช้ Kustomize หรือ Helm สำหรับ Templating

ใช้เครื่องมือ Templating เช่น Kustomize หรือ Helm เพื่อให้สามารถทำการ Deploy ไปยัง environments ต่าง ๆ ได้อย่างง่ายดาย

6. ตั้งค่า Health Check ที่เหมาะสม

ตรวจสอบให้แน่ใจว่า Health Check ของ Applications ถูกตั้งค่าให้สามารถตรวจจับปัญหาได้อย่างถูกต้องและเร็ว

7. ติดตาม Sync Status

จัดตั้งการแจ้งเตือน (Notifications) เพื่อได้รับข้อมูลเมื่อ Parent Application หรือ Child Applications ไม่ Sync

ตัวอย่างการปฏิบัติจริง

เมื่อคุณ Deploy โปรเจกต์ไปยัง ผู้ให้บริการโฮสติ้ง Cloud VPS โดยใช้ Argo CD และ App of Apps Pattern ให้ทำดังนี้

ขั้นตอนที่ 1: สร้าง Parent Application

สร้างไฟล์ parent-app.yaml ที่ชี้ไปยังไดเรกทอรี่ child applications

ขั้นตอนที่ 2: สร้าง Child Applications

สร้างไฟล์ YAML สำหรับแต่ละ child application เช่น web-app.yaml, api-app.yaml เป็นต้น

ขั้นตอนที่ 3: Apply Parent Application

kubectl apply -f parent-app.yaml

ขั้นตอนที่ 4: ตรวจสอบสถานะ

argocd app list
argocd app get my-app-of-apps

ด้วยวิธีนี้ Parent Application จะสร้าง Child Applications ทั้งหมดโดยอัตโนมัติและจัดการ Deploy ของแต่ละตัว

หัวข้อขั้นสูง

การใช้ App of Apps กับ Kustomize

Kustomize ช่วยให้คุณสามารถจัดการ Kubernetes manifests ได้อย่างมีประสิทธิภาพ โดยสามารถสร้าง overlays สำหรับ environments ต่าง ๆ

การใช้ App of Apps กับ Helm

Helm charts ช่วยให้คุณสามารถสร้าง reusable Kubernetes packages ได้ สำหรับ App of Apps Pattern คุณสามารถใช้ Helm charts สำหรับ Child Applications

Cross-Cluster Deployment

App of Apps Pattern สนับสนุนการ Deploy ไปยัง Multiple Kubernetes clusters พร้อมกัน ซึ่งเหมาะสำหรับการสร้าง High Availability

การแก้ปัญหาทั่วไป

Child Applications ไม่ Sync

หากพบว่า Child Applications ไม่ Sync ให้ตรวจสอบ

  • Git repository URL ถูกต้องหรือไม่
  • Access Token มีสิทธิ์เพียงพอหรือไม่
  • Argo CD Server มีการเชื่อมต่อ Kubernetes Cluster ถูกต้องหรือไม่

Resource Conflict

ถ้า Child Applications ใช้ resources ที่ชื่อเดียวกัน อาจเกิด conflict ให้ใช้ namespace ที่แตกต่างกันสำหรับแต่ละแอปพลิเคชัน

Performance Issues

เมื่อมี Child Applications จำนวนมาก ให้พิจารณาแบ่งเป็น Multiple Parent Applications เพื่อปรับปรุงประสิทธิภาพ

สรุป

App of Apps Pattern เป็นวิธีที่มีประสิทธิภาพสำหรับจัดการแอปพลิเคชัน Kubernetes หลายตัวด้วย Argo CD โดยให้ความสะดวกในการ Deploy, Update, และ Monitor applications ทั้งหมดจากจุดเดียว

เมื่อใช้ ผู้ให้บริการโฮสติ้ง Cloud VPS สำหรับการ Host Kubernetes cluster ของคุณ คุณสามารถใช้ App of Apps Pattern เพื่อให้การจัดการ Infrastructure เป็นไปอย่างมีประสิทธิภาพและเป็นระเบียบ

หากท่านต้องการความช่วยเหลือในการจัดตั้ง Argo CD หรือ App of Apps Pattern บน Kubernetes Cluster สามารถติดต่อ ผู้ให้บริการโฮสติ้ง Co, Ltd. ได้ที่ https://de.co.th หรือ https://de.co.th/cloud-vps

บทความนี้จัดทำโดย ผู้ให้บริการโฮสติ้ง Co, Ltd. เพื่อให้ความรู้กับผู้ใช้งาน Cloud VPS, Cloud Hosting, และบริการคลาวด์อื่น ๆ ของเรา