Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Theo chị Hằng học ArgoCD - part 1

 

Lời nói đầu

Tình hình là hệ thống DevOps dự án phát triển được mấy năm nhưng chủ yếu là ở phần CI (dựa trên Jenkins) còn phần CD thì chưa thực sự hoàn hảo lắm, sử dụng SaltStack để thực hiện deploy lên các cụm server (Deploy cũng dùng Jenkins luôn). Sau đó phần CD được cải tiến thay thế bằng công cụ Spinnaker, Jenkins job sau khi build application thì trigger Spinnaker qua API để thực hiện deploy application lên EKS theo worflow như ở dưới. Kết quả deploy success/fail sẽ return về Jenkins job để notify user


CI/CD for Kubernetes With Jenkins and Spinnaker - DZone Cloud
Tuy nhiên xài Spinnaker một thời gian thấy chạy không được ổn định cho lắm nhất là đoạn autoscaling, pipeline spinnaker thỉnh thoảng lại bị lỗi giữa chừng khiến Jenkins build cũng fail theo. Mấy mẹ QA india không có chuyên môn cứ thấy Jenkins job fail là gào ré, đổ vạ
Code Jenkins job của mày bug roài, đúng là cái đồ code một ngày không nổi 1K LOC
Why this issue always happend? It blocked my task!
It happened again and again
Haizz, người trong cuộc mới hiểu được nỗi khổ của người trong ngành. Nhiều đêm rối loạn tiền đình và thiên đầu thống thì tôi có nằm mơ gặp chị Phương Hằng chị nhắn là 


Lúc đầu tôi cũng khá bất ngờ, ngỡ ngàng nhưng sau một thời gian thì bật ngửa “Đúng là tool này hay thiệt”. Mà đã là tool xịn thì không sớm thì chiều, không mai thì mốt cũng phải đưa vào sử dụng.

ArgoCD là gì

Đây là GitOps CD tools dành riêng cho việc deploy lên K8S. Trước đây mỗi khi deploy app lên K8S thì vẫn xài theo cách truyền thống như dùng kubeclt hay helm command (run bằng cơm, hoặc viết thành jenkins job để chạy) Tuy nhiên với ArgoCD thì việc deploy này hoàn toàn tự động


Lý thuyết về ArgoCD thì lên tra GG, bài này đi vào thực hành là chính

Deploy ArgoCD

Muốn xài argocd thì trước tiên phải deploy ArgoCD lên K8S trước. Bạn cần tạo 1 K8S cluster, ưu điểm của ArgoCD là khá nhẹ so với Spinnaker nên chỉ cần tạo 1 cluster 2 -3 nodes là chạy ngon lành

Tôi sử dụng Edge Stack Ambassador để thực hiện deploy, stack này không chỉ deploy argocd mà còn deploy cả prometheus, jaeger, telemetry …

Kết nối với cluster, tạo một ns là ambassador rồi thực hiện deploy một số resources

kubectl apply -f https://app.getambassador.io/initializer/yaml/4ae34333-d5b0-4955-812f-a2acf9ce91a1/crds && \
kubectl wait --for condition=established --timeout=90s crd -lproduct=aes
kubectl wait --for condition=established --timeout=90s crd -lproduct=aes-prometheus
kubectl wait --for condition=established --timeout=90s crd -lknative.dev/crd-install=true

kubectl apply -f https://app.getambassador.io/initializer/yaml/4ae34333-d5b0-4955-812f-a2acf9ce91a1/install && \
kubectl wait -n ambassador deploy -lproduct=aes --for condition=available --timeout=90s
kubectl wait -n keycloak deploy -lapp=keycloak --for condition=available --timeout=180s
kubectl wait -n argocd deploy -lapp.kubernetes.io/name=argocd-server --for condition=available --timeout=180s
kubectl wait -n knative-serving deploy --for condition=available --timeout=90s --all
kubectl wait -n consul pods --for condition=ready --timeout=180s --all

Deploy một số K8S resources như service account, cluster role, service, pod. Argocd được expose ra internet qua Load Balancer service

kubectl get service -n ambassador ambassador \
-o jsonpath='{.status.loadBalancer.ingress[0].ip}'

Sử dung IP này để update vào DNS entry giúp user có thể truy cập vào argocd thông qua domain name

Như vậy argocd đã được deploy trong vòng 1 nốt nhạc, giao diện của argocd khá đơn giản. ArgoCD cung cấp tool argocd command line để kỹ sư có thể tương tác với argocd

VER=$(curl --silent \
"https://api.github.com/repos/argoproj/argo-cd/releases/latest" \
| grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
curl -sSL -o /usr/local/bin/argocd \
https://github.com/argoproj/argo-cd/releases/download/$VER/argocd-linux-amd64
chmod +x /usr/local/bin/argocd

Test run command argocd version để verify

Bây giờ bạn có thể login vào argocd

argocd login <server_addr> --grpc-web-root-path /argo-cd

Nhập user/password –> done

Sau khi cài đặt thành công argocd, tôi mừng lắm tưởng mình sắp thành thiên tài DevOps đến nơi rồi thì bị chị mắng


Còn nhiều việc phải làm với argocd như config SSL, trigger ArgoCD build từ Jenkins, auto deploy app lên EKS, thay thế spinnaker bằng argocd.. Đợi bài tiếp theo

Đăng nhận xét

0 Nhận xét