CI/CD DevOps Kubernetes

5 bước triển khai Kubernetes sử dụng Argocd

argocd-logo

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 nodes

Lệ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 argocd

Sau đó, 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.yaml

Sau 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 argocd

Theo 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:443

Chuyể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 argocd

Lệ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:8080

Bạ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-k8s

Thao 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 default

Sau 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-guestbook

sync đồ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:80

Như 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.

Tags

Add Comment

Click here to post a comment