Giới thiệu
Việc sử dụng Kubernetes làm nền tảng triển khai của bạn mang lại nhiều lợi thế cho các ứng dụng của bạn, bao gồm khả năng mở rộng động, quản lý hiệu quả các thành phần phân tán và khả năng kiểm soát các phiên bản ứng dụng khác nhau. Tuy nhiên, những lợi ích này thường đi kèm với sự phức tạp gia tăng. Các hệ thống Tích hợp liên tục và Triển khai liên tục (CI/CD) thường hoạt động ở mức trừu tượng cao, cung cấp các tính năng như kiểm soát phiên bản, theo dõi thay đổi và khả năng khôi phục. Một cách tiếp cận được áp dụng rộng rãi để đạt được lớp trừu tượng này được gọi là GitOps.
GitOps, ban đầu được Weaveworks giới thiệu trong bài đăng trên blog năm 2017, sử dụng Git làm “nguồn duy nhất của sự thật” để điều phối các quy trình CI/CD. Nó tập trung các thay đổi mã trong kho lưu trữ được chia sẻ cho mỗi dự án và tận dụng các yêu cầu kéo để quản lý cơ sở hạ tầng và các tác vụ triển khai.
Nhiều công cụ khác nhau đã xuất hiện, đưa Git vào cốt lõi của quy trình làm việc DevOps trong môi trường Kubernetes. Trong hướng dẫn này, chúng ta sẽ đi sâu vào Argo CD, một công cụ Phân phối liên tục khai báo. Argo CD đơn giản hóa Phân phối liên tục bằng cách tự động đồng bộ hóa và triển khai các ứng dụng bất cứ khi nào phát hiện ra những thay đổi trong kho lưu trữ GitHub của bạn. Bằng cách giám sát các quy trình triển khai và vòng đời ứng dụng, công cụ này giải quyết các thách thức liên quan đến kiểm soát phiên bản, cấu hình và định nghĩa ứng dụng trong môi trường Kubernetes. Công cụ này sắp xếp dữ liệu phức tạp bằng giao diện thân thiện với người dùng, có khả năng quản lý nhiều loại bản kê khai Kubernetes, bao gồm Jsonnet, ứng dụng Kustomize, biểu đồ Helm và tệp YAML/json. Ngoài ra, Argo CD tích hợp liền mạch các thông báo webhook từ GitHub, GitLab và Bitbucket.
Trong bài viết này, chúng ta sẽ khám phá cách khai thác sức mạnh của Argo CD để đồng bộ hóa và triển khai ứng dụng trực tiếp từ kho lưu trữ GitHub.
Đối với những ai quan tâm đến giải pháp lưu trữ Kubernetes được quản lý, hãy khám phá dịch vụ Kubernetes được quản lý toàn diện của chúng tôi được thiết kế để đáp ứng nhu cầu mở rộng của bạn.
Điều kiện tiên quyết
Để làm theo hướng dẫn này, bạn sẽ cần:
- Một cặp khóa SSH trên máy Linux/MacOS/BSD cục bộ của bạn. Nếu bạn chưa từng sử dụng khóa SSH trước đây, bạn có thể tìm hiểu cách thiết lập chúng bằng cách làm theo giải thích này về cách thiết lập khóa SSH trên máy cục bộ của bạn . Nếu bạn đang sử dụng Windows, bạn nên làm việc trong môi trường Windows Subsystem for Linux .
- Một cụm Kubernetes hiện có bao gồm ít nhất một nút công nhân. kubectl phải được cài đặt trong môi trường làm việc của bạn và có thể kết nối với cụm của bạn.
- Làm quen với các khái niệm Kubernetes. Vui lòng tham khảo bài viết Giới thiệu về Kubernetes để biết thêm chi tiết.
Bước 1 — Cài đặt Argo CD
Để cài đặt Argo CD, trước tiên bạn phải có cấu hình Kubernetes hợp lệ được thiết lập với kubectl, từ đó bạn có thể ping các nút worker của mình. Bạn có thể kiểm tra điều này bằng cách chạy kubectl get nodes:
kubectl get nodesLệnh này sẽ trả về danh sách các nút có trạng thái Sẵn sàng:
Đầu ra
NAME STATUS ROLES AGE VERSION
pool-uqv8a47h0-ul5a7 Ready <none> 22m v1.21.5
pool-uqv8a47h0-ul5am Ready <none> 21m v1.21.5
pool-uqv8a47h0-ul5aq Ready <none> 21m v1.21.5
Nếu kubectl không trả về một tập hợp các nút có Ready trạng thái, bạn nên xem lại cấu hình cụm và tài liệu Kubernetes .
Tiếp theo, tạo không gian tên argocd trong cụm của bạn, nơi sẽ chứa Argo CD và các dịch vụ liên quan:
kubectl create namespace argocdSau đó, bạn có thể chạy tập lệnh cài đặt Argo CD do người bảo trì dự án cung cấp.
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yamlSau khi quá trình cài đặt hoàn tất thành công, bạn có thể sử dụng watchlệnh để kiểm tra trạng thái của pod Kubernetes:
watch kubectl get pods -n argocdTheo mặc định, sẽ có năm pod cuối cùng nhận được Running trạng thái như một phần của cài đặt Argo CD gốc.
Đầu ra
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 2m28s
argocd-dex-server-66f865ffb4-chwwg 1/1 Running 0 2m30s
argocd-redis-5b6967fdfc-q4klp 1/1 Running 0 2m30s
argocd-repo-server-656c76778f-vsn7l 1/1 Running 0 2m29s
argocd-server-cd68f46f8-zg7hq 1/1 Running 0 2m28s
Bạn có thể nhấn Ctrl+C để thoát khỏi watch giao diện. Bây giờ bạn có Argo CD đang chạy trong cụm Kubernetes của mình! Tuy nhiên, do cách Kubernetes tạo ra các trừu tượng xung quanh giao diện mạng của bạn, bạn sẽ không thể truy cập trực tiếp mà không chuyển tiếp các cổng từ bên trong cụm của mình. Bạn sẽ tìm hiểu cách xử lý điều đó trong bước tiếp theo.
Bước 2 — Chuyển tiếp cổng để truy cập Argo CD
Vì Kubernetes triển khai các dịch vụ đến các địa chỉ mạng tùy ý bên trong cụm của bạn, bạn sẽ cần chuyển tiếp các cổng có liên quan để truy cập chúng từ máy cục bộ của mình. Argo CD thiết lập một dịch vụ có tên argocd-server trên cổng 443 nội bộ. Vì cổng 443 là cổng HTTPS mặc định và bạn có thể đang chạy một số dịch vụ HTTP/HTTPS khác, nên thông lệ chung là chuyển tiếp các dịch vụ đó đến các cổng khác được chọn tùy ý, như 8080, như sau:
kubectl port-forward svc/argocd-server -n argocd 8080:443Chuyển tiếp cổng sẽ chặn thiết bị đầu cuối mà nó đang chạy miễn là nó đang hoạt động, vì vậy bạn có thể muốn chạy nó trong một cửa sổ thiết bị đầu cuối mới trong khi bạn tiếp tục làm việc. Bạn có thể nhấn Ctrl+C để thoát một cách nhẹ nhàng một quy trình chặn như thế này khi bạn muốn dừng chuyển tiếp cổng.
Trong khi đó, bạn có thể truy cập Argo CD trong trình duyệt web bằng cách điều hướng đến localhost:8080. Tuy nhiên, bạn sẽ được nhắc nhập mật khẩu đăng nhập mà bạn cần sử dụng dòng lệnh để lấy lại trong bước tiếp theo. Có thể bạn sẽ cần nhấp vào cảnh báo bảo mật vì Argo CD vẫn chưa được cấu hình với chứng chỉ SSL hợp lệ.
Lưu ý: Sử dụng chứng chỉ HTTPS LetsEncrypt với Kubernetes tốt nhất khi sử dụng các công cụ bổ sung như Cert-Manager .
Bước 3 — Làm việc với Argo CD
Đối với các bước tiếp theo, bạn sẽ muốn argocd cài đặt lệnh cục bộ để giao tiếp và thay đổi cài đặt trong phiên bản Argo CD của mình. Tài liệu chính thức của Argo CD khuyến nghị bạn cài đặt lệnh thông qua trình quản lý gói Homebrew . Homebrew rất phổ biến để quản lý các công cụ dòng lệnh trên MacOS và gần đây đã được chuyển sang Linux để tạo điều kiện duy trì các công cụ như thế này.
Nếu bạn chưa cài đặt Homebrew, bạn có thể tải xuống và cài đặt nó bằng lệnh một dòng:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Bạn có thể được nhắc nhập mật khẩu trong quá trình cài đặt. Sau đó, bạn sẽ có brewlệnh trong terminal của mình. Bạn có thể sử dụng lệnh này để cài đặt Argo CD:
brew install argocdLệnh này sẽ cung cấp argocd lệnh. Trước khi sử dụng, bạn sẽ muốn sử dụng kubectllại để lấy lại mật khẩu quản trị viên được tạo tự động trong quá trình cài đặt, để bạn có thể sử dụng mật khẩu đó để đăng nhập. Bạn sẽ truyền cho nó một đường dẫn đến tệp JSON cụ thể được lưu trữ bằng Kubernetes secrets và trích xuất giá trị có liên quan:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echoĐầu ra
fbP20pvw-o-D5uxH
Sau đó, bạn có thể đăng nhập vào bảng điều khiển Argo CD của mình bằng cách quay lại localhost:8080 trình duyệt và đăng nhập với tư cách là admin người dùng có mật khẩu của riêng bạn:

Khi mọi thứ hoạt động, bạn có thể sử dụng cùng thông tin đăng nhập để đăng nhập vào Argo CD qua dòng lệnh, bằng cách chạy argocd login. Điều này sẽ cần thiết để triển khai từ dòng lệnh sau này:
argocd login localhost:8080Bạn sẽ nhận được cảnh báo chứng chỉ tương đương một lần nữa trên dòng lệnh ở đây và nên nhập y để tiếp tục khi được nhắc. Nếu muốn, sau đó bạn có thể thay đổi mật khẩu của mình thành mật khẩu an toàn hơn hoặc dễ nhớ hơn bằng cách chạy argocd account update-password. Sau đó, bạn sẽ có cấu hình Argo CD hoạt động hoàn chỉnh. Trong các bước cuối cùng của hướng dẫn này, bạn sẽ học cách sử dụng nó để thực sự triển khai một số ứng dụng ví dụ.
Bước 4 — Xử lý nhiều cụm (Tùy chọn)
Trước khi triển khai một ứng dụng, bạn nên xem xét nơi bạn thực sự muốn triển khai nó. Theo mặc định, Argo CD sẽ triển khai các ứng dụng vào cùng một cụm mà Argo CD đang chạy, điều này tốt cho bản demo, nhưng có lẽ không phải là điều bạn muốn trong sản xuất. Để liệt kê tất cả các cụm mà máy hiện tại của bạn biết, bạn có thể sử dụng kubectl config:
kubectl config get-contexts -o nameĐầu ra
test-deploy-cluster
test-target-cluster
Giả sử bạn đã cài đặt Argo CD vào test-deploy-cluster, và bạn muốn sử dụng nó để triển khai các ứng dụng vào test-target-cluster, bạn có thể đăng ký test-target-cluster với Argo CD bằng cách chạy argocd cluster add:
argocd cluster add target-k8sThao tác này sẽ thêm thông tin đăng nhập của cụm bổ sung vào Argo CD và cho phép Argo CD triển khai các dịch vụ trên cụm.
Bước 5 — Triển khai ứng dụng mẫu (Tùy chọn)
Bây giờ bạn đã chạy Argo CD và hiểu cách triển khai ứng dụng cho các cụm Kubernetes khác nhau, đã đến lúc đưa nó vào thực tế. Dự án Argo CD duy trì kho lưu trữ các ứng dụng ví dụ đã được thiết kế để giới thiệu các nguyên tắc cơ bản của GitOps. Nhiều ví dụ trong số này là các cổng của cùng một guestbook ứng dụng demo cho các loại bản kê khai Kubernetes khác nhau, chẳng hạn như Jsonnet . Trong trường hợp này, bạn sẽ triển khai helm-guestbook ví dụ, sử dụng biểu đồ Helm , một trong những giải pháp quản lý Kubernetes bền bỉ nhất.
Để thực hiện điều đó, bạn sẽ sử dụng argocd app create lệnh, cung cấp đường dẫn đến kho lưu trữ Git, helm-guestbookví dụ cụ thể và truyền đích và không gian tên mặc định của bạn:
argocd app create helm-guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path helm-guestbook --dest-server https://kubernetes.default.svc --dest-namespace defaultSau khi “tạo” ứng dụng bên trong Argo CD, bạn có thể kiểm tra trạng thái của ứng dụng bằng argocd app get:
argocd app get helm-guestbookĐầu ra
Name: helm-guestbook
Project: default
Server: https://kubernetes.default.svc
Namespace: default
URL: https://localhost:8080/applications/helm-guestbook
Repo: https://github.com/argoproj/argocd-example-apps.git
Target:
Path: helm-guestbook
SyncWindow: Sync Allowed
Sync Policy: <none>
Sync Status: OutOfSync from (53e28ff)
Health Status: Missing
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Service default helm-guestbook OutOfSync Missing
apps Deployment default helm-guestbook OutOfSync Missing
Trạng OutOfSync thái ứng dụng là bình thường. Bạn đã lấy biểu đồ helm của ứng dụng từ Github và tạo mục nhập cho nó trong Argo CD, nhưng bạn vẫn chưa thực sự tạo bất kỳ tài nguyên Kubernetes nào cho nó. Để thực sự triển khai ứng dụng, bạn sẽ chạy argocd app sync:
argocd app sync helm-guestbooksync đồng nghĩa với việc triển khai ở đây theo các nguyên tắc của GitOps – mục tiêu khi sử dụng Argo CD là để ứng dụng của bạn luôn theo dõi 1:1 với cấu hình thượng nguồn của nó.
Đầu ra
TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
2022-01-19T11:01:48-08:00 Service default helm-guestbook OutOfSync Missing
2022-01-19T11:01:48-08:00 apps Deployment default helm-guestbook OutOfSync Missing
2022-01-19T11:01:48-08:00 Service default helm-guestbook Synced Healthy
2022-01-19T11:01:48-08:00 Service default helm-guestbook Synced Healthy service/helm-guestbook created
2022-01-19T11:01:48-08:00 apps Deployment default helm-guestbook OutOfSync Missing deployment.apps/helm-guestbook created
2022-01-19T11:01:49-08:00 apps Deployment default helm-guestbook Synced Progressing deployment.apps/helm-guestbook created
Name: helm-guestbook
Project: default
Server: https://kubernetes.default.svc
Namespace: default
URL: https://localhost:8080/applications/helm-guestbook
Repo: https://github.com/argoproj/argocd-example-apps.git
Target:
Path: helm-guestbook
SyncWindow: Sync Allowed
Sync Policy: <none>
Sync Status: Synced to (53e28ff)
Health Status: Progressing
Operation: Sync
Sync Revision: 53e28ff20cc530b9ada2173fbbd64d48338583ba
Phase: Succeeded
Start: 2022-01-19 11:01:49 -0800 PST
Finished: 2022-01-19 11:01:50 -0800 PST
Duration: 1s
Message: successfully synced (all tasks run)
GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE
Service default helm-guestbook Synced Healthy service/helm-guestbook created
apps Deployment default helm-guestbook Synced Progressing deployment.apps/helm-guestbook created
Bây giờ bạn đã triển khai thành công một ứng dụng bằng Argo CD! Bạn có thể thực hiện cùng một việc từ giao diện web Argo CD, nhưng thường thì triển khai qua dòng lệnh sẽ nhanh hơn và dễ tái tạo hơn. Tuy nhiên, sẽ rất hữu ích nếu bạn kiểm tra bảng điều khiển web Argo CD của mình sau khi triển khai để xác minh rằng các ứng dụng của bạn đang chạy đúng cách. Bạn có thể thấy điều đó bằng cách mở localhost:8080 trong trình duyệt:

Tại thời điểm này, điều cuối cùng cần làm là đảm bảo bạn có thể truy cập triển khai mới của mình trong trình duyệt. Để thực hiện điều đó, bạn sẽ chuyển tiếp một cổng khác, theo cách bạn đã làm với Argo CD. Về mặt nội bộ, ứng helm-guestbook dụng chạy trên cổng HTTP thông thường 80và để tránh xung đột với bất kỳ thứ gì có thể đang chạy trên cổng của riêng bạn 80 hoặc trên cổng 8080 bạn đang sử dụng cho Argo CD, bạn có thể chuyển tiếp nó đến cổng 9090:
kubectl port-forward svc/helm-guestbook 9090:80Như trước đây, bạn có thể muốn thực hiện việc này trong một terminal khác, vì nó sẽ chặn terminal đó cho đến khi bạn nhấn Ctrl+C để dừng chuyển tiếp cổng. Sau đó, bạn có thể mở localhost:9090 trong cửa sổ trình duyệt để xem ứng dụng sổ lưu bút mẫu của mình:

Bất kỳ lần đẩy nào tới kho lưu trữ Github này sẽ tự động được phản ánh trong ArgoCD, nơi sẽ đồng bộ lại quá trình triển khai của bạn đồng thời cung cấp tính khả dụng liên tục.
Phần kết luận
Tóm lại, bạn đã có được cái nhìn sâu sắc về các khía cạnh cốt lõi của việc thiết lập và khởi chạy ứng dụng thông qua Argo CD. Với bản chất đa diện của Kubernetes, việc duy trì khả năng triển khai của bạn là vô cùng quan trọng, khiến việc áp dụng phương pháp GitOps trở thành một lựa chọn có giá trị.
Tiến về phía trước, một hướng khám phá hấp dẫn liên quan đến việc thành thạo triển khai TOBS, The Observability Stack. Điều này trao cho bạn khả năng giám sát tình trạng sức khỏe, thời gian hoạt động và các khía cạnh ghi nhật ký của cụm Kubernetes của bạn một cách toàn diện.










Add Comment