0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

[ArgoCD] Hướng dẫn chi tiết Phần 3: Bootstrap Cluster với Mô hình App of Apps

Đăng vào 2 tuần trước

• 5 phút đọc

Giới thiệu

👋 Xin chào các bạn! Chắc hẳn nhiều anh em đã theo dõi các phần trước của chuỗi bài viết về ArgoCD. Trong phần này, chúng ta sẽ cùng nhau khám phá cách bootstrap cluster sử dụng mô hình App of Apps. Hãy cùng bắt đầu nhé!

Nội dung

1. Mở đầu

Trong phần trước, chúng ta đã tìm hiểu cách kết nối ArgoCD với Private Repository thông qua RepositoryCredential Template. Bây giờ, hãy cùng nhau tạo GitOps repository trên GitHub để lưu trữ các tệp cấu hình cần thiết cho cluster.

Chú ý:

  • Bài viết này tiếp tục dựa vào ArgoCD đã được cài đặt trong các phần trước. Vì vậy hãy chắc chắn bạn đã hoàn thành các bước ở phần 2.
  • Để truy cập Dashboard của ArgoCD, sử dụng lệnh sau để port-forwarding:
Copy
kubectl -n argocd port-forward svc/argocd-server 8080:443

2. Yêu cầu ban đầu

Trước khi bắt đầu, bạn cần:

  • Thành thục sử dụng Git và GitHub.
  • Có hiểu biết cơ bản về Kubernetes.
  • Đã quen thuộc với Helm và Kustomize.

3. Tạo GitOps Repository

3.1. Tạo Repository trên GitHub

Chúng ta cần một Git Repository để lưu trữ toàn bộ cấu hình của K8s Cluster. Bạn có thể tạo một repository mới trên GitHub với tên là devsuccess101/ds101-cluster để bắt đầu.

3.2. Cấu trúc Thư mục

Cấu trúc kinh điển cho GitOps Repository sẽ như sau:

Copy
bootstrap
├── apps.yaml               # 3.2. Application dùng để bootstrap các Applications khác
├── argocd                  # 1. Thư mục chứa cấu hình cài đặt ArgoCD
│   ├── kustomization.yaml  # -- Khai báo dùng Kustomize
│   ├── namespace.yaml      # -- Tạo namespace riêng cho argocd
│   └── values.yaml         # -- Helm values để cài ArgoCD
├── argocd-bootstrap.yaml   # 2. Application gốc dùng để bootstrap
└── argocd.yaml             # 3.1. Application dùng để self-managed ArgoCD

4. Chuẩn bị Manifest để Deploy ArgoCD

4.1. Tạo Thư mục cho cấu hình

Tạo một thư mục mới có tên là argocd để lưu trữ các tệp cần thiết cho việc cài đặt ArgoCD:

Copy
mkdir -p bootstrap/argocd

4.2. Khai báo Namespace

Khi bạn cài đặt ArgoCD trên một cluster mới, cần tạo một Namespace tên là argocd. Tạo tệp namespace.yaml như sau:

yaml Copy
apiVersion: v1
kind: Namespace
metadata:
  name: argocd
  annotations:
    argocd.argoproj.io/sync-options: Prune=false

4.3. Khai báo Helm Values

Tiếp theo, hãy sao chép nội dung tệp values.yaml mà bạn đã sử dụng trong các phần trước. Tệp này chứa cấu hình cho ArgoCD.

4.4. Sử dụng Kustomize

Để cài đặt ArgoCD bằng Kustomize, tạo tệp kustomization.yaml như sau:

yaml Copy
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - namespace.yaml

helmCharts:
  - name: argo-cd
    repo: https://argoproj.github.io/argo-helm
    version: 7.1.3
    namespace: argocd
    releaseName: argocd
    additionalValuesFiles:
      - values.yaml

Hãy chắc chắn rằng Kustomize có thể build lại các tệp YAML bằng lệnh sau:

Copy
kubectl kustomize --enable-helm bootstrap/argocd

5. Thiết lập Root Application

5.1. App of Apps Pattern

Tiếp theo, chúng ta sẽ sử dụng App of Apps pattern. Tạo tệp argocd-bootstrap.yaml để cấu hình Application gốc.

yaml Copy
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: argocd-bootstrap
  namespace: argocd
spec:
  destination:
    namespace: argocd
    name: in-cluster
  source:
    path: bootstrap
    repoURL: "https://github.com/devsuccess101/ds101-cluster"
    targetRevision: main
    directory:
      recurse: true
      exclude: "argocd/*"
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
      - ApplyOutOfSyncOnly=true

5.2. Tạo Application và Đồng bộ

Sử dụng lệnh sau để tạo Application argocd-bootstrap:

Copy
kubectl apply -f bootstrap/argocd-bootstrap.yaml

Truy cập vào ArgoCD Dashboard và nhấn vào Application argocd-bootstrap để theo dõi quá trình đồng bộ.

6. Self-Managed ArgoCD

Để ArgoCD có thể tự quản lý chính nó, bạn chỉ cần khai báo thêm một Application mới có tên là argocd trong thư mục bootstrap.

yaml Copy
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: argocd
  namespace: argocd
spec:
  destination:
    namespace: argocd
    name: in-cluster
  source:
    path: bootstrap/argocd
    repoURL: "https://github.com/devsuccess101/ds101-cluster"
    targetRevision: main
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true
      - ApplyOutOfSyncOnly=true

Sau đó, hãy cập nhật tệp values.yaml cho ArgoCD để cho phép Kustomize sử dụng Helm.

7. Bootstrap thêm các ứng dụng khác

Sử dụng App of Apps pattern, bạn có thể tạo thêm một Application mới tên là apps để quản lý các ứng dụng khác trong thư mục apps. Cấu hình sẽ tương tự như các Application trước đó.

yaml Copy
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: apps
  namespace: argocd
spec:
  destination:
    namespace: argocd
    name: in-cluster
  source:
    repoURL: "https://github.com/devsuccess101/ds101-cluster"
    targetRevision: main
    path: apps
    directory:
      recurse: true
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
      allowEmpty: true
    syncOptions:
      - CreateNamespace=true
      - ApplyOutOfSyncOnly=true

8. Tổng kết

Chúng ta đã hoàn thành việc bootstrap cluster thành công. Bây giờ, để triển khai thêm dịch vụ, bạn chỉ cần khai báo Application trong thư mục apps. Khi cần bootstrap lại, chỉ cần thực hiện các lệnh đã nêu trong phần hướng dẫn.

Bước tiếp theo

Hãy tìm hiểu thêm về các tùy chọn đồng bộ của ArgoCD để có thể sử dụng một cách linh hoạt và hiệu quả hơn trong quản lý các ứng dụng trên Kubernetes.


Cảm ơn các bạn đã theo dõi bài viết! Hãy ủng hộ mình bằng cách nhấn like và subscribe để không bỏ lỡ các bài viết hữu ích tiếp theo từ DevSuccess101.
Khám phá nhiều hơn qua các kênh của mình dưới đây:

source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào