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

Argo-CD hiểu biết cơ bản

0 0 29

Người đăng: Duong Tuan Trinh

Theo Viblo Asia

Overview

container-native: ứng dụng được phát triển để có thể chạy được trên container, được triển khai bằng container.

ArgoCD là một mã nguồn mở container-native workflow engine phục vụ việc deploy service trên Kubernetes.

ArgoCD được triển khai trên Kubernetes như một Kubernetes CRD (Custom Resource Definition)

ArgoCD là một công cụ dễ sử dụng cho phép các nhóm phát triển triển khai và quản lý các ứng dụng mà không cần phải tìm hiểu nhiều về Kubernetes và không cần toàn quyền truy cập vào hệ thống Kubernetes.

Argo-CD được phát triển bởi Intuit, một công ty chuyên về sản phẩm phần mềm tài chính được thành lập năm 1983

Đầu năm 2018 Intuil quyết định sử dụng Kubernetes để tăng tốc độ GO CLOUD, ở thời điểm đó cũng có một vài CD tool apply thành công cho Kubernetes nhưng không sản phẩm nào đáp ứng được đủ các yêu cầu của Intuil. Vì vậy thay vì dùng giải pháp hiện có, Intuit quyết định đầu tư một dự án mới để làm Argo-CD. Vào năm 2020, Argo CD đã được Cloud Native Computing Foundation (CNCF) chấp nhận là một dự án được lưu trữ ở cấp độ ươm tạo.

Architecture

Các thành phần chính của Argo-CD

Argocd có 3 thành phần chính là API server, Repository server, Application controller

API server

là một gRPC/REST server nó phơi ra các APIs, các APIs này được sử dụng bởi Argocd Web UI, CLI, và các hệ thống CI/CD khác tích hợp. API Server có thực hiện các chức năng như: Quản lý ứng dụng và báo cáo trang thái gọi các tác vụ vận hành ứng dụng như sync, rollback hoặc các tác vụ do người dùng định nghĩa quản lý các credential của repository và cluster (store as k8s secret) xác thực và ủy quyền xác thực cho các nhà cung cấp dịch vụ định danh bên ngoài thực thi RBAC lắng nghe/chuyển tiếp các sự kiện git webhook

Repository server

là một internal service nó duy trì một local cache của git repository giữ các application manifests. Nó chịu trách nhiệm tạo ra và trả về các kubernetes manifests dựa vào các thông tin đầu vào như repository URL, revision (commit, tag, branch), application path (đường dẫn tới thư mục chưa manifest của ứng dụng được khai báo) và template specific settings: parameters, helm values.yaml

Đặc biệt với case manifest sử dụng helm dependencies đến một helm private registry thì chúng ta có thể thêm sidecar cho repository server để nó thực hiện việc authen helm registry qua đó argocd-repo-server có thể dùng để authorize helm registry và thực hiện thành công helm dependence build.

Application Controller

là một kubernetes controller nó tiếp tục thực hiện việc theo dõi trạng thái của ứng dụng đang chạy (trên kubernetes) và so sánh với trạng thái mong muốn (được định nghĩa trong git repo) . Nó phát hiện tình trạng OutOfSync của service và tùy chọn thực hiện các hành động sửa chữa, nó chịu trách nhiệm cho việc gọi bất kỳ user-defined hooks cho các lifecycle events (PreSync, Sync, PostSync)

Các thành phần khác

Ngoài 3 thành phần chính trên, các thành phần khác như Dex, notification, applicationSet, Redis cũng rất quan trọng, nó giúp chúng ta setup các config liên quan đến SSO, Noti và quản lý tập ArgoCD applications trong một applicationSet.

Argo-CD applicationset giúp chúng có thể quản lý việc deploy các common applications như Nginx, Prometheus, .. trên đồng thời nhiều cụm kubernetes hoặc quản lý deploy các services trên đồng thời trên 2 môi trường DC/DR

Dex giúp chúng ta setup config SSO

Noti giúp thực hiện các tác vụ noti các trạng thài của các argo-cd application

Redis giúp cài thiện hiệu suất của Argo-CD

Argo-CD hoạt động như thế nào.

Logic xử lý của ArgoCD được chia thành 3 giai đoạn, mỗi giải đoạn được xử lý bởi một thành phần được liệt kê ở trên. 3 giai đoạn của gồm:

  • Lấy source manifest từ remote git repo
  • Phát hiện và khắc phục những sai lệch giữa manifest đang chạy với manifest trên git.
  • Trình bày kết quả cho người dùng qua WebUI hoặc API

Lấy source manifest từ remote git repo

Được thực hiện bởi argocd repository server qua các công việc như sau:

Get thông tin manifest từ remote git repo - git pull Lưu thông tin manifest vào local storage của argocd repository server Tạo ra YAML manifest phục vụ cho argocd application controller sử dụng ở giai đoạn tiếp theo.

Phát hiện và khắc phục những sai lệch giữa manifest đang chạy với manifest trên git

Được thực hiện bởi ArgoCD application controller

Load manifest đang chạy trên target cluster (cụm k8s đích nới service được deploy) Call lấy yaml manifest từ argocd repo server So sánh 2 manifest (manifest trên k8s đích với manifest lưu trên git repo) Thực hiện kubectl apply để apply manifest lên k8s đích nếu các manifest khó sự khác biệt Nhận về thông tin application (manifest, sync, health status) và lưu vào redis.

Trình bày kết quả cho người dùng qua WebUI hoặc API

ArgoCD api server sẽ phụ trách việc show kết quả của 2 bước trước tới người dùng và tiếp nhập các tương tác của người dùng tới hệ thống như: Call API Xử lý argocd command Login Phân quyền

Cách argoCD làm việc với kubernetes target

ArgoCD tương tác với kubernetes target thông qua API với giao thức HTTPS vì vậy Argo-CD và Kubenetes taget có kể kết nối trức tiếp với nhau nếu firewall cho phép hoặc thông qua HTTP PROXY được config trong bản thân ArgoCD. Khi thêm một cụm kubernetes vào argocd thì yêu cần đảm bảo và thực hiện các bước sau: Config kubernetes context: đảm bảo người dùng có quyền khởi tạo service account resource trên cụm kubernetes Cài đặt argocd command tool Login argocd qua argocd command tool. khi thực hiện add một cụm kubernetes cluster vào argocd thì các resources sau sẽ được tạo ra với:

Cụm k8s triển khai cụm argocd:

k8s secret chưa thông tin bear token và tls config của cụm k8s target.

Cụm k8s target

Cluster role với đầy đủ quyền tương tác với cluster Cluster role binding để map cluster role với service account Service account - secret account token: chưa token và ca.cert access vào cluster, value của token là value của bear token ở secret của cụm k8s deploy argoCD Khi ArgoCD tương tac với K8S target thì nó sẽ check endpoint và lấy thông tin token và tls cert ở secret tương ứng để đẩy vào header của http request.

Bình luận

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

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

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 88

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

In calculus, love also means zero.

Mình nhớ hồi năm 2 đại học, thầy giáo môn calculus, trong một giây phút ngẫu hứng, đã đưa ra cái definition này. Lúc đấy mình cũng không nghĩ gì nhiều.

0 0 65

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

Chuyện thay đổi

Thay đổi là một thứ gì đó luôn luôn đáng sợ. Cách đây vài tháng mình có duyên đi làm cho một banking solution tên là X.

0 0 47

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

Pet vs Cattle - Thú cưng và gia súc

Khái niệm. Pets vs Cattle là một khái niệm cơ bản của DevOps. Bài viết này sẽ nói về sự phát triển của các mô hình dịch vụ từ cốt lõi Pets and Cattle. 1.

0 0 34

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

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 85

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

Kubernetes - Học cách sử dụng Kubernetes Namespace cơ bản

Namespace trong Kubernetes là gì. Tại sao nên sử dụng namespace.

0 0 113