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 Repository và Credential 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:
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:
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:
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
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
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:
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
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
:
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
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
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:
- Website: https://devsuccess101.com
- YouTube: https://l.devsuccess101.com/youtube
- Discord: https://l.devsuccess101.com/discord
- Facebook: https://l.devsuccess101.com/facebook
source: viblo