Giới thiệu
Chào mọi người, bài viết hôm nay mình sẽ chia sẻ chi tiết cách triển khai một ứng dụng lên K8S với ArgoCD. Trước tiên chúng ta hãy nói về ArgoCD, ArgoCD là một công cụ triển khai liên tục (Continuous Delivery - CD) theo mô hình GitOps dành cho Kubernetes. Nó giúp tự động hóa việc triển khai và quản lý trạng thái của các ứng dụng Kubernetes dựa trên các manifest được lưu trữ trong Git repository.
Nào hãy cùng mình tìm hiểu chi tiết cách triển khai một ứng dụng với ArgoCD.
Chuẩn bị
Trước khi bắt đầu, hãy đảm bảo rằng mọi người đã cài đặt và chuẩn bị những công cụ cần thiết
- K8S cluster: Mình sẽ sử dụng kind(kubernetes in docker), kind là một công cụ hỗ trợ cho việc setup Kubernetes ở local, và rất dễ dàng cài đặt.
- kubectl: Cài đặt K8S command-line, kubectl để tương tác trực tiếp với cụm K8S.
- Git, Github: Github sẽ là nơi mình dùng để lưu trữ manifest cho ứng dụng của mình, cũng là nơi mà ArgoCD pull manifest về để triển khai.
Ở bài viết này, mình chọn Keycloak làm ứng dụng mà sẽ được triển khai bằng ArgoCD. Lý do mình chọn nó là do Keycloak là một giải pháp quản lý danh tính và truy cập mã nguồn mở, cung cấp các tính năng như xác thực, ủy quyền và quản lý người dùng. Vì nó là mã nguồn mở nên được sử dụng rộng rãi ở nhiều tổ chức lớn.
Dưới đây là diagram mô tả về kiến trúc mà chúng ta sẽ triển khai.
Các bước triển khai ứng dụng
Tạo K8S cluster bằng kind và setup Ingress cho cluster
Tạo 1 file kind-argocd.yaml với cấu hình dưới đây:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
Chạy câu lệnh này để tạo kind cluster có tên bienhnit
kind create cluster --config=kind-argocd.yaml --name bienhnit
Để add ingress cho cluster, chúng ta sẽ cài đặt Ingress controller bằng câu lệnh sau đây:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml
Cài đặt ArgoCD lên cluster
Để cài đặt ArgoCD lên cluster, chúng ta chạy câu lệnh sau đây:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Để truy cập vào ArgoCD sau này, chúng ta cần setup ingress. Tạo một file ingress-argocd.yaml với cấu hình sau đây
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
alb.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
spec:
rules:
- host: argocd-server-bienhnit.local
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: argocd-server
port:
number: 443
Sau đó chạy câu lệnh này để cài đặt ingress cho ArgoCD:
kubectl apply -f ingress-argocd.yaml
Kiểm tra xem các pods của ArgoCD đã running chưa:
Để login vào ArgoCD, chúng ta cần lấy được mật khẩu của admin:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo
Để có thể truy cập ArgoCD server bằng URL https://argocd-server-bienhnit.local, chúng ta sẽ cần chỉnh sửa file /etc/hosts trên máy của mình.
Tạo manifest cho ứng dụng Keycloak trên Github
Tạo một repo trên git với cấu trúc dưới đây(tham khảo repo của mìnhargocd-lab)
argocd-lab
keycloak
deployment.yaml
service.yaml
Cấu hình của file deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: keycloak
namespace: bienhnit-auth
labels:
app: keycloak
spec:
replicas: 1
selector:
matchLabels:
app: keycloak
template:
metadata:
labels:
app: keycloak
spec:
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:24.0.5
args: ["start-dev"]
ports:
- name: http
containerPort: 8080
env:
- name: KEYCLOAK_ADMIN
value: "admin"
- name: KEYCLOAK_ADMIN_PASSWORD
value: "admin"
- name: KC_PROXY
value: "edge"
- name: KC_HTTP_PORT
value: "8080"
- name: KC_HOSTNAME_STRICT
value: "false"
- name: KC_HOSTNAME_STRICT_HTTPS
value: "false"
- name: KC_HTTP_ENABLED
value: "true"
- name: KC_PROXY_ADDRESS_FORWARDING
value: "true"
readinessProbe:
httpGet:
path: /realms/master
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 3
resources:
limits:
cpu: "1"
memory: "1024Mi"
requests:
cpu: "500m"
memory: "512Mi"
Cấu hình của file service.yaml
apiVersion: v1
kind: Service
metadata:
name: keycloak
namespace: bienhnit-auth
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30008
selector:
app: keycloak
Trên cluster, tạo một namespace để triển khai keycloak.
kubectl create namespace bienhnit-auth
Truy cập vào ArgoCD và triển khai ứng dụng Keycloak
Truy cập vào https://argocd-server-bienhnit.local với username là admin và mật khẩu là chuỗi mà mình đã lấy được ở bước trên.
Kết nối ArgoCD với github repo mình đã tạo ở trên.
Khi kết nối thành công, status sẽ chuyển thành Successful.
Sau đó, tạo mới một application với cấu hình dưới đây:
- Application Name: keycloak
- Project: default
- Sync Policy: Automatic
- Repository URL: https://github.com/bienblue/argocd-lab.git
- Path: keycloak
- Cluster: https://kubernetes.default.svc
- Namespace: bienhnit-auth
Sau khi triển khai thành công, cấu hình của ứng dụng sẽ được hiển thị như thế này.
Kiểm tra resource trên cluster.
Sau đó chúng ta sẽ thử truy cập vào ứng dụng Keycloak để xem kết quả.
Kể từ bây giờ, nếu chúng ta cần thay đổi bất kỳ cấu hình nào của Keycloak, mình chỉ cần chỉnh sửa code và commit lên repo https://github.com/bienblue/argocd-lab.git thì argocd sẽ tự động sync về và apply những cái thay đổi lên Keycloak application.
Kiểm tra chức năng sync automatically - gitops
Chúng ta hãy thử chỉnh sửa cấu hình hiện tại của keycloak và để xem ArgoCD sẽ xử lý như thế nào nhé.
Hiện tại thì replicas của Keycloak đang là 1, mình sẽ thử chỉnh sửa manifest và tăng số replicas lên thành 2 với commit này: https://github.com/bienblue/argocd-lab/pull/4/commits/76ec33337a15312effa36f36dc3c1a1ff22e7abb
Và hãy xem Application Keycloak trên ArgoCD nhé, số pod Keycloak đã tăng lên thành 2.
Kiểm tra resource trên cluster lại nhé -> số pods của Keyloak đã tăng lên thành 2 pod:
Kết Luận
Như vậy là mình đã cùng mọi người thực hiện triển khai ứng dụng Keycloak lên K8S cluster bằng ArgoCD. Với ArgoCD, việc quản lý và triển khai các ứng dụng Kubernetes trở nên dễ dàng và hiệu quả hơn rất nhiều. Hy vọng bài viết này sẽ giúp các bạn hiểu rõ hơn về cách sử dụng ArgoCD để triển khai các ứng dụng của mình.
Hẹn gặp lại mọi người ở những bài viết tiếp theo.
Bình luận