- vừa được xem lúc

Quản lý cấu hình ứng dụng triển khai trên GKE cluster qua Google Artifact Registry, helm charts, Private helm registry và Argo-CD

0 0 9

Người đăng: Dương Tuấn Trình

Theo Viblo Asia

[ĐANG CẬP NHẬT]

Ngày nay xu hướng công nghệ được áp dụng để phát triển và phát hành một ứng dụng là sử dụng Container, cùng với yêu cầu ngày càng cao về tự động hóa, co giãn linh hoạt, tiết kiệm, giảm thiểu sai phạm thì Kuberntes là một lựa chọn hàng đầu vì độ phổ biến và khả năng đáp ứng đầy đủ các yêu cầu ở trên của nó.

Kubnernets đã có thể đáp ứng đúng, đủ yêu yêu về nền tảng để phát hành ứng dụng, dịch vụ nhưng những yêu cầu về vận hành, phát hành ứng dụng sẽ thường xuyên phát sinh những yêu cầu thay đổi cấu hình.

Các yêu cầu thay đổi cấu hình sẽ là không tốn thời gian, công sức vận hành đối với những hệ thống có số lượng ứng dụng, dịch vụ không lớn. Tuy nhiên với những hệ thống lớn thì những yêu cầu thay đổi này là là một thách thức không hề nhỏ, nó có thể ngốn hết khoảng thời gian tính bằng nhiều tháng với nhiều người thạm gia mới có thể thực hiện hết những thay đổi đó.

Để khắc phục vấn đề về yêu cầu cập nhật thay đổi thì việc xậy dựng một bộ mẫu để có thể định nghĩa được các cấu hình chung cho các ứng dụng và nó có thể được ghi đè nếu có yêu cầu đặc biệt hoặc tái sử dụng lại ở các ứng dụng khác nhau là môt việc cần thiết, để làm việc này thì Helm là một lựa chọn có thể nói là tốt nhất (trong hiểu biết hiện tại 😄).

Trong bài viết này chúng ta sẽ trình bày về việc vận hành ứng dụng được triển khai trên GKE cluster qua Google Artifact Registry, Helm charts, private helm registry và Argo-CD.

Vai trò của các thành phần

Google artifact registry

Nơi cung cập private helm registry, chứa các helm artifacts định nghĩ các bộ mẫu của k8s resource.

Helm charts

Khai báo các helm charts của các ứng dụng cần được triển khai, chứa các yaml files mô tả về resource và cấu hình của một kuberntes resource.

Private Helm Registry

Đóng gói và phần phối các ứng dụng triển khai trên kubernetes sử dụng helm charts, helm registry định nghĩa các helm template cho các kubernetes resources và nó được dùng kết hợp với helm values file được định nghĩa ở helm charts để tạo ra final k8s manifest file dùng để triển khai lên kubernets, nó cũng có thể được tái sử dụng để khai báo cho nhiều ứng dụng. Helm private registry được publish lên google artifact registry (GAR)

Argo-CD

CD tool giúp quản lý tập chung việc triển khai các tài nguyên của Kubernetes cách hoạt động của ArgoCD mọi người có thể tham khảo ở bài viết Argo-CD hiểu biết cơ bản

Quản lý cấu hình ứng dụng qua Helm charts và Argo-CD

Helm với Argo-CD

Helm là một thành phần được triển khai trong Argo-CD repo server, nó chịu trách nhiệm tạo ra k8s yaml manifest từ helm charts của ứng dụng, Argo-CD application sẽ dùng k8s yaml manifest apply lên k8s.

Với những helm charts có dependencies tới private helm registry thì để tạo ra được final k8s yaml manifest thì trước tiên helm client cần lấy được thống tin để xác thức với private helm registry.

Với trường hợp cụ thể là chúng ta publish một helm artifact lên google artifact registry và chỉ câp quyền truy cập helm repo cho một google service account cụ thể, và các helm charts của ứng dụng sẽ dependcies đến helm repo này thì chúng ta cần xác định và thực hiện các bước như chỉ định helm config, xác thực artifact registry.

Chỉ định helm config trong các containers của argocd repo server

Các configs của helm được định nghĩa các giá mặc định thông qua các ENV của container như

HELM_CONFIG_HOME="/tmp/.config/helm"
HELM_REGISTRY_CONFIG="/tmp/.config/helm/registry/config.json"
HELM_REPOSITORY_CONFIG="/tmp/.config/helm/repositories.yaml"

các configs này chỉ cho helm client biết cần lấy thông tin của registry và repo từ đâu.

Helm registry login

Helm client sẽ đọc thông tin từ HELM_REGISTRY_CONFIG để lấy thông tin truy cập helm registry, nếu HELM_REGISTRY_CONFIG không cung cấp đúng thông tin truy cập helm registry thì sẽ phát sinh lỗi không có quyền truy cập. Với config HELM_REGISTRY_CONFIG mặc định sẽ không có thông tin dùng để xác thực private helm registry và đương nhiên bước triển khải bên trên sẽ gặp lỗi, lúc này cần phải thực hiện helm registry login để có thể tiếp tục. Google Artifacts registry nơi publish helm registry cung cấp tính năng login bằng access token của user/service account qua command

gcloud auth print-access-token | helm registry login -u oauth2accesstoken --password-stdin https://asia-docker.pkg.dev --registry-config /tmp/.config/helm/registry/config.json

yêu cầu:

  • ArgoCD cũng được deploy trên GKE
  • GKE cluster support workload identidy để pod có thể dùng access token của SA xác thực resource của GCP
  • User/service account cần có quyền đọc artifact repo chứa helm artifact.

Container Argo-CD repo server không cung cấp Gcloud nên tai phải dùng tới sidecar và Shared Volume để thực hiện việc login registry và ghi thông tin login vào HELM_REGISTRY_CONFIG để làm việc này ta cần update argocd-repo-server deployment để thêm sidecar ,Shared Volume và update helm ENV

Cấu hình Sidecar (container gcp)

 - command: - /bin/sh - -c - while true; do echo 'Hit CTRL+C'; gcloud auth configure-docker asia-docker.pkg.dev -q; gcloud auth print-access-token | helm registry login -u oauth2accesstoken --password-stdin https://asia-docker.pkg.dev --registry-config /tmp/.config/helm/registry/config.json; chown -R 1001:1001 /tmp; sleep 900; done env: - name: HELM_REGISTRY_CONFIG value: /tmp/.config/helm/registry/config.json - name: HELM_REPOSITORY_CONFIG value: /tmp/.config/helm/repositories.yaml - name: HELM_CONFIG_HOME value: /tmp/.config/helm image: asia.gcr.io/devops/k8s-deployer:v3.11.0 // image có cung cập gcloud command imagePullPolicy: IfNotPresent name: gcp resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /tmp name: tmp-dir

Cấu hình Shared volume

volumes: - ... - emptyDir: {} name: tmp-dir

mount volume name tmp-dir cho 2 containers gcp và argocd-repo-server

 volumeMounts: - mountPath: /tmp name: tmp-dir

Cấu hình Helm ENV

Set helm ENV ở 2 containers gcp và argocd-repo-server

 env: - name: HELM_REGISTRY_CONFIG value: /tmp/.config/helm/registry/config.json - name: HELM_REPOSITORY_CONFIG value: /tmp/.config/helm/repositories.yaml - name: HELM_CONFIG_HOME value: /tmp/.config/helm

Xuyến suốt bài viết vấn đề được đề cập đến là quản lý việc triển khai ứng dụng qua GKE và Argo-CD có sử dụng

  • Google artifact registry để publish một private helm registry cho nội bộ một tổ chức
  • Helm charts dùng để định nghĩa kubernets resources cho một ứng dụng và sử dụng private helm registry là một dependencies
  • Cách cấu hình sử dụng sidecar container và Shared volume để tạo và chia sẻ thông tin xác thực private helm registry cho các containers của argocd repo server giúp đảm bảo tuân thủ bảo mật và độ ổn định của các dependencies.

Tài liệu tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hướng dẫn cài đặt và sử dụng ChartMuseum hỗ trợ việc custom chart với helm (k8s)

Những năm gần đây Devops ngày càng được ưa chuộng bởi Developer, những khái niệm docker, docker swarm, kubernetes không còn quá lạ lẫm nữa. Bản thân mình cũng vậy, mình áp dụng docker swarm cho dự án

0 1 49

- vừa được xem lúc

[K8S] Phần 16 - Hướng dẫn đóng gói ứng dụng bằng helm và cài đặt lên Kubernetes

Giới thiệu. Chào các bạn, theo dòng thời gian thì series chinh phục kubernetes cũng đã tiến tới những phần hấp dẫn hơn .

0 0 59

- vừa được xem lúc

[K8S] Phần 21 - Xây dựng luồng Gitops với Jenkins và ArgoCD

Lời đầu tiên xin chúc tất cả bạn đọc và gia đình năm mới mạnh khỏe, an khang thịnh vượng . .

0 0 13

- vừa được xem lúc

Kubernetes Practice (English) - User management and RBAC Configuration on ArgoCD

In this post, we will learn how to create new users and manage RBAC Configuration on ArgoCD. Create new account.

0 0 23

- vừa được xem lúc

XÂY DỰNG MÔ HÌNH GITOPS CƠ BẢN VỚI ARGOCD

Xin chào mọi người. Đây là dự án về DevOps đầu tiên của mình, dạo gần đây thì mình đọc qua nhiều JD thì thấy rất nhiều công ty đã, đang và chuẩn bị đưa hệ thống chay trên hệ thống Kubernetes, và mình

0 0 16

- vừa được xem lúc

[K8S] Phần 21 - Xây dựng luồng Gitops với Jenkins và ArgoCD

Lời đầu tiên xin chúc tất cả bạn đọc và gia đình năm mới mạnh khỏe, an khang thịnh vượng . .

0 0 13