0

🚀 Chapter 5 — Platform: Phần E — Triển khai Google Online Boutique trên Amazon EKS bằng Argo CD và GitOps

Chapter 5D, chúng ta đã sử dụng Helm để triển khai Google Online Boutique lên Amazon EKS bằng các lệnh:

helm install
helm upgrade
helm rollback

Cách này đã tốt hơn việc sử dụng nhiều Kubernetes manifest riêng lẻ. Tuy nhiên, quá trình deploy vẫn phụ thuộc vào máy cá nhân của developer.

Trong Chapter 5E, chúng ta sẽ tiếp tục sử dụng:

  • Google Online Boutique
  • Amazon EKS từ Chapter 5B
  • Helm chart từ Chapter 5D
  • Amazon ECR từ Chapter 4 nếu đã sử dụng
  • GitHub
  • Argo CD

Mục tiêu là chuyển từ:

Developer
    ↓
helm upgrade
    ↓
Amazon EKS

sang:

Developer
    ↓
GitHub
    ↓
Argo CD
    ↓
Helm
    ↓
Amazon EKS

Git trở thành nơi lưu trữ trạng thái mong muốn của hệ thống. Argo CD sẽ tự động đồng bộ trạng thái đó vào Amazon EKS.


1. Mục tiêu

Sau khi hoàn thành Chapter 5E, chúng ta sẽ có:

  • Argo CD được cài đặt trên Amazon EKS.
  • Argo CD kết nối được với GitHub.
  • Online Boutique được quản lý bằng Helm thông qua Argo CD.
  • Thay đổi cấu hình bằng Git thay vì chạy helm upgrade thủ công.
  • Tự động đồng bộ deployment từ GitHub vào EKS.
  • Kiểm tra trạng thái Synced, OutOfSyncHealthy.
  • Thử nghiệm cơ chế tự sửa drift bằng selfHeal.
  • Thử rollback bằng Git revert.

Kiến trúc cuối Chapter:

Developer
    │
    ▼
GitHub Repository
    │
    ▼
Helm Chart / GitOps Configuration
    │
    ▼
Argo CD
    │
    ▼
Amazon EKS
    │
    ▼
Google Online Boutique

2. Điều kiện trước khi bắt đầu

Chapter này nối tiếp Chapter 5D.

Bạn cần có:

  • Amazon EKS cluster đang ở trạng thái ACTIVE.
  • kubectl đã kết nối được với EKS.
  • Helm đã được cài đặt.
  • Google Online Boutique đã được triển khai thành công ở Chapter 5D.
  • Có tài khoản GitHub.
  • Có Git được cài đặt trên máy local.

Kiểm tra các công cụ:

aws --version
kubectl version --client
helm version
git --version

Kiểm tra EKS:

aws eks describe-cluster \
  --name online-boutique-eks \
  --region ap-northeast-1 \
  --query 'cluster.status' \
  --output text

Kết quả mong đợi:

ACTIVE

Kiểm tra node:

kubectl get nodes

Kết quả mong đợi:

NAME                                            STATUS   ROLES    AGE   VERSION
ip-xxx-xxx-xxx-xxx.ap-northeast-1.compute.internal   Ready    <none>   ...   ...

Kiểm tra namespace:

kubectl get namespace online-boutique

Kiểm tra các Pod:

kubectl get pods -n online-boutique

Kiểm tra Helm release:

helm list -n online-boutique

Kết quả cần có release tương tự:

NAME             NAMESPACE          STATUS
online-boutique  online-boutique    deployed

3. Kiểm tra trạng thái ứng dụng hiện tại

Kiểm tra Deployment:

kubectl get deployments -n online-boutique

Kiểm tra Service:

kubectl get services -n online-boutique

Kiểm tra frontend:

kubectl get service frontend -n online-boutique

Lấy địa chỉ frontend:

export FRONTEND_URL=$(
  kubectl get service frontend \
    -n online-boutique \
    -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
)

Kiểm tra:

echo "$FRONTEND_URL"

Test:

curl -I "http://$FRONTEND_URL"

Kết quả mong đợi:

HTTP/1.1 200 OK

Mở trình duyệt:

http://<FRONTEND_URL>

Nếu ứng dụng vẫn hoạt động, chúng ta có thể bắt đầu cài đặt Argo CD.


4. Argo CD là gì?

Argo CD là một công cụ GitOps dành cho Kubernetes.

Argo CD theo dõi trạng thái mong muốn trong Git và so sánh với trạng thái thực tế trong Kubernetes.

Git
 └── Desired State
          │
          ▼
       Argo CD
          │
          ▼
   Kubernetes Cluster

Ví dụ:

Trong Git, frontend có:

replicas: 2

Nhưng trong EKS, frontend chỉ có:

replicas: 1

Argo CD sẽ phát hiện sự khác biệt:

Git desired state: 2 replicas
Cluster state:     1 replica

Trạng thái ứng dụng có thể trở thành:

OutOfSync

Nếu bật automated sync và self-healing, Argo CD có thể tự động đưa cluster về trạng thái được khai báo trong Git.


5. Tạo namespace cho Argo CD

Tạo namespace:

kubectl create namespace argocd

Nếu namespace đã tồn tại, có thể bỏ qua lỗi:

kubectl get namespace argocd

Kết quả:

NAME      STATUS   AGE
argocd    Active   ...

6. Cài đặt Argo CD trên Amazon EKS

Cài Argo CD bằng manifest chính thức:

kubectl apply \
  -n argocd \
  -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Kiểm tra các Pod:

kubectl get pods -n argocd

Theo dõi quá trình khởi động:

kubectl get pods -n argocd -w

Dừng theo dõi bằng:

Ctrl + C

Các Pod chính cần chuyển sang trạng thái Running:

argocd-application-controller
argocd-repo-server
argocd-server
argocd-redis
argocd-dex-server

Kiểm tra chi tiết:

kubectl get pods -n argocd -o wide

Nếu Pod gặp lỗi:

kubectl describe pod <POD_NAME> -n argocd

Xem logs:

kubectl logs <POD_NAME> -n argocd

7. Kiểm tra các Service của Argo CD

Chạy:

kubectl get services -n argocd

Bạn sẽ thấy Service tương tự:

NAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)
argocd-applicationset-controller         ClusterIP   ...
argocd-dex-server                         ClusterIP   ...
argocd-metrics                            ClusterIP   ...
argocd-notifications-controller-metrics  ClusterIP   ...
argocd-redis                              ClusterIP   ...
argocd-repo-server                        ClusterIP   ...
argocd-server                             ClusterIP   ...
argocd-server-metrics                    ClusterIP   ...

Mặc định, argocd-server thường sử dụng ClusterIP.

Để truy cập Argo CD từ máy local, chúng ta sẽ sử dụng port forwarding.


8. Truy cập giao diện Argo CD bằng port-forward

Mở một terminal mới và chạy:

kubectl port-forward \
  svc/argocd-server \
  -n argocd \
  8080:443

Kết quả tương tự:

Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

Giữ terminal này luôn mở.

Mở trình duyệt:

https://localhost:8080

Trình duyệt có thể hiển thị cảnh báo chứng chỉ do Argo CD sử dụng certificate mặc định. Chọn tiếp tục truy cập trong môi trường lab.


9. Lấy mật khẩu admin ban đầu

Argo CD tạo mật khẩu ban đầu trong Secret:

kubectl -n argocd get secret argocd-initial-admin-secret

Lấy mật khẩu:

kubectl -n argocd get secret \
  argocd-initial-admin-secret \
  -o jsonpath="{.data.password}" \
  | base64 -d

Lưu lại mật khẩu được trả về.

Thông tin đăng nhập:

Username: admin
Password: <PASSWORD_FROM_COMMAND>

Đăng nhập vào:

https://localhost:8080

Sau khi đăng nhập thành công, bạn sẽ thấy giao diện Argo CD.


10. Cài đặt Argo CD CLI

10.1. Trên macOS

Nếu sử dụng Homebrew:

brew install argocd

Kiểm tra:

argocd version --client

10.2. Trên Ubuntu

Tải Argo CD CLI:

curl -sSL \
  -o argocd-linux-amd64 \
  https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64

Cấp quyền thực thi:

chmod +x argocd-linux-amd64

Di chuyển binary:

sudo mv argocd-linux-amd64 /usr/local/bin/argocd

Kiểm tra:

argocd version --client

11. Đăng nhập Argo CD bằng CLI

Vì Argo CD đang được truy cập thông qua port-forward, mở một terminal khác và chạy:

argocd login localhost:8080 \
  --username admin \
  --password '<ARGOCD_ADMIN_PASSWORD>' \
  --insecure

Thay:

<ARGOCD_ADMIN_PASSWORD>

bằng mật khẩu lấy ở bước trước.

Kiểm tra phiên đăng nhập:

argocd account get-user-info

Kết quả cần hiển thị user:

Logged In: true
Username: admin

12. Kiểm tra cluster mà Argo CD đang quản lý

Chạy:

argocd cluster list

Argo CD thường đã có cluster nội bộ:

https://kubernetes.default.svc

Cluster này chính là Kubernetes cluster nơi Argo CD đang chạy.

Kết quả tương tự:

SERVER                         NAME        VERSION   STATUS
https://kubernetes.default.svc in-cluster  v1.xx     Successful

Chúng ta sẽ deploy Online Boutique vào chính cluster này.


13. Tạo GitOps repository

Không nên dùng trực tiếp repository source code của Online Boutique để lưu toàn bộ cấu hình GitOps trong lab đầu tiên.

Tạo một repository mới trên GitHub.

Ví dụ tên repository:

online-boutique-gitops

Repository có thể có cấu trúc:

online-boutique-gitops/
├── README.md
├── charts/
│   └── online-boutique/
└── environments/
    └── dev/
        └── values.yaml

Trong Chapter 5E, chúng ta sẽ sử dụng Helm chart đã có từ Chapter 5D.

Có hai cách tổ chức:

Phương án A — Lưu Helm chart vào GitOps repository

online-boutique-gitops/
└── helm-chart/
    ├── Chart.yaml
    ├── values.yaml
    └── templates/

Phương án B — Sử dụng Helm chart từ repository Online Boutique

Google Online Boutique Repository
        ↓
helm-chart/
        ↓
Argo CD
        ↓
Amazon EKS

Để dễ kiểm soát cấu hình và phục vụ mục đích học GitOps, Chapter này sử dụng Phương án A.


14. Clone repository GitOps về máy local

Thay đổi URL repository bên dưới thành repository của bạn:

git clone https://github.com/<YOUR_GITHUB_USERNAME>/online-boutique-gitops.git

Di chuyển vào thư mục:

cd online-boutique-gitops

Tạo thư mục Helm chart:

mkdir -p helm-chart

15. Copy Helm chart từ Chapter 5D

Nếu Helm chart đang nằm trong repository microservices-demo, quay lại thư mục source:

cd ../microservices-demo

Kiểm tra:

ls helm-chart

Copy Helm chart sang GitOps repository:

cp -R helm-chart ../online-boutique-gitops/

Quay lại GitOps repository:

cd ../online-boutique-gitops

Kiểm tra:

find helm-chart -maxdepth 2 -type f

Kết quả tương tự:

helm-chart/Chart.yaml
helm-chart/values.yaml
helm-chart/templates/...

Nếu bạn đã tự xây dựng Helm chart riêng trong Chapter 5D, hãy copy chart của bạn thay vì copy chart mặc định.


16. Kiểm tra Helm chart trong GitOps repository

Chạy:

helm lint ./helm-chart

Kết quả mong đợi:

1 chart(s) linted, 0 chart(s) failed

Render chart:

helm template online-boutique ./helm-chart \
  --namespace online-boutique

Nếu chart sử dụng được, tiếp tục kiểm tra bằng lệnh:

helm template online-boutique ./helm-chart \
  --namespace online-boutique \
  > /tmp/online-boutique-gitops-rendered.yaml

Kiểm tra resource:

grep '^kind:' /tmp/online-boutique-gitops-rendered.yaml

17. Tạo file values cho môi trường dev

Tạo thư mục:

mkdir -p environments/dev

Tạo file:

touch environments/dev/values.yaml

Mở file:

nano environments/dev/values.yaml

Thêm các cấu hình override phù hợp với Helm chart của bạn.

Ví dụ:

frontend:
  replicaCount: 2

Lưu ý:

  • Chỉ sử dụng field thực sự tồn tại trong helm-chart/values.yaml.
  • Không tự tạo replicaCount nếu chart không hỗ trợ field này.
  • Kiểm tra bằng:
helm show values ./helm-chart

Sau đó kiểm tra render:

helm template online-boutique ./helm-chart \
  --namespace online-boutique \
  -f environments/dev/values.yaml

18. Commit và push GitOps repository

Kiểm tra các file:

git status

Thêm file:

git add helm-chart environments

Commit:

git commit -m "add Online Boutique Helm chart for dev"

Push:

git push origin main

Kiểm tra repository trên GitHub.

Cấu trúc cuối cùng:

online-boutique-gitops/
├── helm-chart/
│   ├── Chart.yaml
│   ├── values.yaml
│   └── templates/
│
└── environments/
    └── dev/
        └── values.yaml

19. Tạo Argo CD Application

Argo CD sử dụng resource Application để mô tả:

  • Git repository nào cần theo dõi.
  • Branch hoặc revision nào.
  • Thư mục Helm chart nào.
  • Deploy vào cluster nào.
  • Deploy vào namespace nào.
  • Có tự động sync hay không.

Tạo file:

mkdir -p argocd
touch argocd/online-boutique-dev.yaml

Mở file:

nano argocd/online-boutique-dev.yaml

Thêm nội dung:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: online-boutique-dev
  namespace: argocd
spec:
  project: default

  source:
    repoURL: https://github.com/<YOUR_GITHUB_USERNAME>/online-boutique-gitops.git
    targetRevision: main
    path: helm-chart
    helm:
      valueFiles:
        - ../environments/dev/values.yaml

  destination:
    server: https://kubernetes.default.svc
    namespace: online-boutique

  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

Thay:

<YOUR_GITHUB_USERNAME>

bằng GitHub username của bạn.

Ý nghĩa các field chính

repoURL

Repository GitOps mà Argo CD sẽ theo dõi.

targetRevision: main

Branch được sử dụng.

path: helm-chart

Thư mục chứa Helm chart.

valueFiles

File values override dành cho môi trường dev.

destination.server

Cluster đích. Giá trị:

https://kubernetes.default.svc

nghĩa là cluster nơi Argo CD đang chạy.

destination.namespace

Namespace deploy Online Boutique.

automated

Cho phép Argo CD tự động đồng bộ.

prune: true

Cho phép Argo CD xóa resource không còn được khai báo trong Git.

selfHeal: true

Cho phép Argo CD tự sửa những thay đổi thủ công trên cluster.

CreateNamespace=true

Tự tạo namespace nếu namespace chưa tồn tại.


20. Kiểm tra đường dẫn values của Helm

Trước khi apply Application, cần kiểm tra Helm có đọc được file values hay không.

Chạy:

helm template online-boutique ./helm-chart \
  --namespace online-boutique \
  -f environments/dev/values.yaml

Nếu Helm báo lỗi:

file not found

thì cần kiểm tra lại cấu trúc repository.

Một cách tổ chức đơn giản hơn là đặt file values bên trong chart:

helm-chart/
├── Chart.yaml
├── values.yaml
├── values-dev.yaml
└── templates/

Khi đó Application có thể sử dụng:

source:
  repoURL: https://github.com/<YOUR_GITHUB_USERNAME>/online-boutique-gitops.git
  targetRevision: main
  path: helm-chart
  helm:
    valueFiles:
      - values-dev.yaml

Nếu sử dụng cách này, file values-dev.yaml phải nằm trong thư mục helm-chart.


21. Tạo Application trên EKS

Commit file Application:

git add argocd/online-boutique-dev.yaml

Commit:

git commit -m "add Argo CD application for Online Boutique"

Push:

git push origin main

Sau đó apply Application vào Argo CD:

kubectl apply \
  -f argocd/online-boutique-dev.yaml

Kiểm tra Application:

kubectl get applications -n argocd

Kết quả tương tự:

NAME                  SYNC STATUS   HEALTH STATUS
online-boutique-dev   OutOfSync     Missing

Trạng thái ban đầu có thể là OutOfSync vì Argo CD chưa đồng bộ resource.


22. Kiểm tra Application bằng Argo CD CLI

Chạy:

argocd app list

Kết quả có thể tương tự:

NAME                  CLUSTER                         NAMESPACE          PROJECT  STATUS     HEALTH
argocd/online-boutique-dev  https://kubernetes.default.svc  online-boutique  default  OutOfSync   Missing

Xem chi tiết:

argocd app get online-boutique-dev

Thông tin cần kiểm tra:

Project: default
Server: https://kubernetes.default.svc
Namespace: online-boutique
Sync Status: OutOfSync
Health Status: Missing

23. Đồng bộ Application lần đầu

Nếu muốn sync thủ công lần đầu:

argocd app sync online-boutique-dev

Theo dõi quá trình:

argocd app wait online-boutique-dev

Kiểm tra lại:

argocd app get online-boutique-dev

Kết quả mong đợi:

Sync Status: Synced
Health Status: Healthy

Kiểm tra bằng Kubernetes:

kubectl get deployments -n online-boutique
kubectl get pods -n online-boutique
kubectl get services -n online-boutique

24. Kiểm tra giao diện Argo CD

Mở:

https://localhost:8080

Trong giao diện Argo CD, bạn sẽ thấy Application:

online-boutique-dev

Application có thể hiển thị cây resource:

online-boutique-dev
├── Deployment/frontend
├── Deployment/cartservice
├── Deployment/paymentservice
├── Deployment/checkoutservice
├── Service/frontend
├── Service/cartservice
├── Service/paymentservice
└── ...

Các trạng thái quan trọng:

Trạng thái Ý nghĩa
Synced Cluster khớp với Git
OutOfSync Cluster khác với Git
Healthy Resource đang hoạt động bình thường
Progressing Resource đang trong quá trình triển khai
Degraded Resource có vấn đề
Missing Resource chưa tồn tại trên cluster

25. Kiểm tra frontend sau khi Argo CD deploy

Lấy Service frontend:

kubectl get service frontend -n online-boutique

Lấy hostname:

export FRONTEND_URL=$(
  kubectl get service frontend \
    -n online-boutique \
    -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
)

Kiểm tra:

echo "$FRONTEND_URL"

Test:

curl -I "http://$FRONTEND_URL"

Mở trình duyệt:

http://<FRONTEND_URL>

Kiểm tra các chức năng:

  • Hiển thị sản phẩm.
  • Thêm sản phẩm vào giỏ hàng.
  • Xem giỏ hàng.
  • Thực hiện checkout.
  • Kiểm tra các microservice giao tiếp với nhau.

26. Thử nghiệm thay đổi cấu hình bằng Git

Bây giờ chúng ta sẽ không chạy:

helm upgrade

thủ công nữa.

Thay vào đó, thay đổi cấu hình trong Git.

Mở file:

nano environments/dev/values.yaml

Ví dụ thay đổi số replica nếu chart hỗ trợ:

frontend:
  replicaCount: 2

Lưu file.

Render để kiểm tra:

helm template online-boutique ./helm-chart \
  --namespace online-boutique \
  -f environments/dev/values.yaml

Commit:

git add environments/dev/values.yaml
git commit -m "scale frontend in dev"

Push:

git push origin main

27. Theo dõi Argo CD tự động sync

Kiểm tra Application:

argocd app get online-boutique-dev

Theo dõi trạng thái:

argocd app wait online-boutique-dev

Kiểm tra Deployment:

kubectl get deployment frontend \
  -n online-boutique

Kiểm tra replica:

kubectl get deployment frontend \
  -n online-boutique \
  -o jsonpath='{.spec.replicas}'

Kết quả mong đợi:

2

Kiểm tra Pod:

kubectl get pods -n online-boutique

Khi đó flow đã trở thành:

Git change
    ↓
git push
    ↓
Argo CD detects change
    ↓
Helm render
    ↓
Kubernetes apply
    ↓
EKS updated

28. Thử nghiệm trạng thái OutOfSync

Để kiểm tra GitOps, chúng ta sẽ thay đổi trực tiếp resource trên EKS.

Chạy:

kubectl scale deployment frontend \
  -n online-boutique \
  --replicas=1

Kiểm tra:

kubectl get deployment frontend \
  -n online-boutique

Nếu trong Git vẫn khai báo:

frontend:
  replicaCount: 2

thì trạng thái thực tế đã khác trạng thái mong muốn.

Kiểm tra Argo CD:

argocd app get online-boutique-dev

Nếu chart render được field replica, Application có thể chuyển sang:

OutOfSync

29. Kiểm tra self-healing

Vì Application đã cấu hình:

syncPolicy:
  automated:
    prune: true
    selfHeal: true

Argo CD sẽ cố gắng đưa cluster về trạng thái được khai báo trong Git.

Theo dõi Deployment:

kubectl get deployment frontend \
  -n online-boutique \
  -w

Sau đó kiểm tra replica:

kubectl get deployment frontend \
  -n online-boutique \
  -o jsonpath='{.spec.replicas}'

Kết quả mong đợi sau khi Argo CD đồng bộ lại:

2

Kiểm tra Application:

argocd app get online-boutique-dev

Kết quả mong đợi:

Sync Status: Synced
Health Status: Healthy

Nếu selfHeal không hoạt động, kiểm tra xem resource có thực sự được Helm chart quản lý hay không và kiểm tra logs của Argo CD Application Controller.


30. Kiểm tra lịch sử đồng bộ

Xem lịch sử sync:

argocd app history online-boutique-dev

Kết quả có thể tương tự:

ID    DATE                     REVISION
0     2026-09-14 10:00:00      abc123
1     2026-09-14 10:15:00      def456

Xem thông tin sync trong Kubernetes:

kubectl describe application \
  online-boutique-dev \
  -n argocd

31. Rollback bằng Git revert

Trong GitOps, rollback nên thực hiện bằng cách thay đổi Git về phiên bản trước đó.

Không nên ưu tiên chạy trực tiếp:

helm rollback

vì thay đổi đó sẽ không được ghi nhận trong Git.

Xem lịch sử commit:

git log --oneline --max-count=5

Ví dụ:

def4567 scale frontend in dev
abc1234 add Argo CD application

Rollback commit gần nhất:

git revert def4567

Push thay đổi:

git push origin main

Argo CD sẽ phát hiện commit mới và đồng bộ cấu hình cũ trở lại EKS.

Kiểm tra:

argocd app get online-boutique-dev

Theo dõi:

argocd app wait online-boutique-dev

Kiểm tra Deployment:

kubectl get deployment frontend \
  -n online-boutique

32. Kiểm tra Argo CD logs khi deployment lỗi

32.1. Application Controller

kubectl logs \
  -n argocd \
  deployment/argocd-application-controller \
  --tail=100

32.2. Repo Server

kubectl logs \
  -n argocd \
  deployment/argocd-repo-server \
  --tail=100

32.3. Argo CD Server

kubectl logs \
  -n argocd \
  deployment/argocd-server \
  --tail=100

32.4. Xem chi tiết Application

argocd app get online-boutique-dev

32.5. Xem các resource bị lỗi

kubectl get all -n online-boutique

Nếu Pod lỗi:

kubectl describe pod <POD_NAME> \
  -n online-boutique

Xem logs:

kubectl logs <POD_NAME> \
  -n online-boutique

33. Các lỗi thường gặp

Lỗi 1: Argo CD không truy cập được GitHub

Kiểm tra URL repository:

repoURL: https://github.com/<YOUR_GITHUB_USERNAME>/online-boutique-gitops.git

Kiểm tra repository có public hay không.

Nếu repository private, cần cấu hình repository credentials trong Argo CD.


Lỗi 2: Helm chart không tìm thấy values file

Kiểm tra cấu trúc:

find . -maxdepth 3 -type f

Kiểm tra valueFiles trong Application.

Đảm bảo file values nằm trong phạm vi mà Helm/Argo CD có thể truy cập.


Lỗi 3: Application ở trạng thái OutOfSync

Chạy:

argocd app diff online-boutique-dev

Sau đó kiểm tra:

argocd app get online-boutique-dev

Nếu muốn sync thủ công:

argocd app sync online-boutique-dev

Lỗi 4: Application ở trạng thái Degraded

Kiểm tra Pod:

kubectl get pods -n online-boutique

Kiểm tra Pod lỗi:

kubectl describe pod <POD_NAME> \
  -n online-boutique

Xem logs:

kubectl logs <POD_NAME> \
  -n online-boutique

Lỗi 5: Frontend không có External IP

Kiểm tra Service:

kubectl get service frontend \
  -n online-boutique

Theo dõi:

kubectl get service frontend \
  -n online-boutique \
  -w

Kiểm tra AWS Load Balancer Controller nếu Service không tạo được Load Balancer.


34. So sánh trước và sau Chapter 5E

Trước Chapter 5E

Developer
    ↓
helm upgrade
    ↓
Amazon EKS

Các vấn đề:

  • Phụ thuộc vào máy developer.
  • Khó biết ai đã deploy.
  • Thay đổi có thể không được commit vào Git.
  • Khó kiểm tra sự khác biệt giữa Git và cluster.
  • Khó tự động sửa drift.

Sau Chapter 5E

Developer
    ↓
git push
    ↓
GitHub
    ↓
Argo CD
    ↓
Helm
    ↓
Amazon EKS

Lợi ích:

  • Git lưu trữ desired state.
  • Deployment có lịch sử commit.
  • Argo CD hiển thị trạng thái sync.
  • Có thể phát hiện drift.
  • Có thể tự động sửa drift.
  • Rollback bằng Git revert.
  • Không cần chạy helm upgrade thủ công cho mỗi thay đổi.

35. Kiểm tra cuối Chapter

Chạy lần lượt:

kubectl get pods -n argocd
argocd app list
argocd app get online-boutique-dev
kubectl get deployments -n online-boutique
kubectl get pods -n online-boutique
kubectl get services -n online-boutique

Trạng thái mong đợi:

Argo CD Pods       Running
Application        Synced
Application Health Healthy
Online Boutique    Running
Frontend           Accessible

36. Kiến trúc sau Chapter 5E

                         Developer
                             │
                             ▼
                          GitHub
                             │
                ┌────────────┴────────────┐
                │                         │
                ▼                         ▼
        Application Code            GitOps Repository
                │                         │
                ▼                         ▼
        GitHub Actions              Helm Chart
                │                         │
                ▼                         ▼
             ECR                    Argo CD
                │                         │
                └────────────┬────────────┘
                             ▼
                        Amazon EKS
                             │
                             ▼
                    Google Online Boutique

Kết quả đạt được

Ở cuối Chapter 5E, chúng ta đã chuyển Online Boutique từ mô hình:

Manual Helm Deployment

sang:

GitOps Deployment with Argo CD

Đây là nền tảng để tiếp tục mở rộng ở các phần sau:

  • Multi-environment: Dev, Staging, Production.
  • App of Apps.
  • ApplicationSet.
  • GitOps kết hợp Amazon ECR.
  • Quản lý nhiều microservice.
  • Quản lý nhiều EKS cluster.
  • Self-service deployment platform.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.