Thứ ba, 05/03/2019 | 00:00 GMT+7

Chuỗi hội thảo trên web: Bộ công cụ GitOps trên Kubernetes với CircleCI và Argo CD


Chuỗi hội thảo trên web

Bài viết này bổ sung một loạt hội thảo trên web về làm CI / CD với Kubernetes . Loạt bài thảo luận về cách thực hiện phương pháp tiếp cận root cloud để xây dựng, thử nghiệm và triển khai ứng dụng, bao gồm quản lý phát hành, công cụ root cloud , lưới dịch vụ và các công cụ CI / CD được dùng với Kubernetes. Nó được thiết kế để giúp các nhà phát triển và doanh nghiệp quan tâm đến việc tích hợp các phương pháp hay nhất về CI / CD với Kubernetes vào quy trình làm việc của họ.

Hướng dẫn này bao gồm các khái niệm và lệnh từ phiên cuối cùng của loạt bài, Bộ công cụ GitOps trên Kubernetes với CircleCI và Argo CD.

Cảnh báo: Các quy trình trong hướng dẫn này chỉ nhằm mục đích demo . Do đó, họ không tuân theo các phương pháp tốt nhất và các biện pháp bảo mật cần thiết cho việc triển khai sẵn sàng production .

Việc sử dụng Kubernetes để triển khai ứng dụng của bạn có thể mang lại những lợi thế đáng kể về cơ sở hạ tầng, chẳng hạn như mở rộng linh hoạt, quản lý các thành phần phân tán và kiểm soát các version khác nhau của ứng dụng. Tuy nhiên, với việc tăng cường kiểm soát, sự phức tạp ngày càng tăng có thể làm cho các hệ thống CI / CD phát triển mã hợp tác, kiểm soát version , ghi log thay đổi và triển khai tự động và khôi phục đặc biệt khó quản lý theo cách thủ công. Để giải quyết những khó khăn này, các kỹ sư DevOps đã phát triển một số phương pháp tự động hóa Kubernetes CI / CD, bao gồm hệ thống công cụ và các phương pháp hay nhất được gọi là GitOps . GitOps, theo đề xuất của Weaveworks trong một bài đăng trên blog năm 2017 , sử dụng Git như một “nguồn sự thật duy nhất” cho các quy trình CI / CD, tích hợp các thay đổi mã trong một repository được chia sẻ duy nhất cho mỗi dự án và sử dụng các yêu cầu kéo để quản lý cơ sở hạ tầng và triển khai.

Có nhiều công cụ sử dụng Git như một tâm điểm cho quá trình DevOps trên Kubernetes, bao gồm Gitkube phát triển bởi Hasura , Flux bởi Weaveworks, và Jenkins X , chủ đề của hội thảo trên web thứ hai trong loạt bài này . Trong hướng dẫn này, bạn sẽ trình diễn hai công cụ bổ sung mà bạn có thể sử dụng để cài đặt hệ thống GitOps CI / CD dựa trên cloud của riêng mình: Công cụ tích hợp liên tục CircleCIArgo CD , một công cụ Phân phối liên tục mang tính khai báo.

CircleCI sử dụng repository GitHub hoặc Bitbucket để tổ chức phát triển ứng dụng và tự động hóa việc xây dựng và thử nghiệm trên Kubernetes. Bằng cách tích hợp với repository Git, các dự án CircleCI có thể phát hiện khi có thay đổi nào đối với mã ứng dụng và tự động kiểm tra nó, gửi thông báo về thay đổi và kết quả kiểm tra qua email hoặc các công cụ giao tiếp khác như Slack . CircleCI lưu giữ log của tất cả những thay đổi này và kết quả kiểm tra, đồng thời giao diện dựa trên trình duyệt cho phép user theo dõi quá trình kiểm tra trong thời gian thực, để một group luôn biết trạng thái của dự án của họ.

Là một dự án con của công cụ quản lý quy trình làm việc Argo dành cho Kubernetes, Argo CD cung cấp công cụ Phân phối liên tục tự động đồng bộ hóa và triển khai ứng dụng của bạn khi nào có thay đổi trong repository lưu trữ GitHub của bạn. Bằng cách quản lý việc triển khai và vòng đời của ứng dụng, nó cung cấp các giải pháp kiểm soát version , cấu hình và định nghĩa ứng dụng trong môi trường Kubernetes, tổ chức dữ liệu phức tạp với giao diện user dễ hiểu.Nó có thể xử lý một số loại file kê khai Kubernetes, bao gồm ứng dụng ksonnet , ứng dụng Kustomize , biểu đồ Helm và file YAML / json và hỗ trợ thông báo webhook từ GitHub, GitLab và Bitbucket.

Trong bài viết cuối cùng của loạt bàiCI / CD với Kubernetes , bạn sẽ thử các công cụ GitOps này bằng cách:

  • Cài đặt trình kích hoạt đường ống để tự động kiểm tra ứng dụng với CircleCI và GitHub.

  • Đồng bộ hóa và triển khai ứng dụng từ repository GitHub với Argo CD.

Đến cuối hướng dẫn này, bạn sẽ có hiểu biết cơ bản về cách xây dựng đường ống CI / CD trên Kubernetes với bộ công cụ GitOps.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Server Ubuntu 16.04 có RAM 16 GB trở lên. Vì hướng dẫn này chỉ dành cho mục đích demo , các lệnh được chạy từ account gốc . Lưu ý các quyền không bị hạn chế của account này không tuân theo các phương pháp hay nhất dành cho production và có thể ảnh hưởng đến hệ thống của bạn. Vì lý do này, bạn nên làm theo các bước sau trong môi trường thử nghiệm như máy ảo hoặc DigitalOcean Server .

  • Tài khoản Docker Hub . Để biết tổng quan về cách bắt đầu với Docker Hub, vui lòng xem các hướng dẫn sau .

  • Tài khoản GitHub và kiến thức cơ bản về GitHub. Để biết sơ lược về cách sử dụng GitHub, hãy xem hướng dẫn Cách tạo Yêu cầu kéo trên GitHub của ta .

  • Quen thuộc 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.

  • Một cụm Kubernetes với công cụ dòng lệnh kubectl . Hướng dẫn này đã được thử nghiệm trên một cụm Kubernetes mô phỏng, được cài đặt trong môi trường local với Minikube , một chương trình cho phép bạn dùng thử các công cụ Kubernetes trên máy của chính mình mà không cần phải cài đặt một cụm Kubernetes thực sự. Để tạo một cụm Minikube, hãy làm theo Bước 1 của hội thảo trên web thứ hai trong loạt bài này, Quản lý gói Kubernetes với Helm và CI / CD với Jenkins X.

Bước 1 - Cài đặt quy trình làm việc CircleCI của bạn

Trong bước này, bạn sẽ tập hợp một quy trình công việc tiêu chuẩn của CircleCI bao gồm ba công việc: kiểm tra mã, xây dựng hình ảnh và đẩy hình ảnh đó lên Docker Hub. Trong giai đoạn thử nghiệm, CircleCI sẽ sử dụng pytest để kiểm tra mã cho ứng dụng RSVP mẫu. Sau đó, nó sẽ xây dựng hình ảnh của mã ứng dụng và đẩy hình ảnh lên DockerHub.

Đầu tiên, cấp cho CircleCI quyền truy cập vào account GitHub của bạn. Để thực hiện việc này, hãy chuyển đến https://circleci.com/ trong trình duyệt web yêu thích của bạn:

Trang đích CircleCI

Ở trên cùng bên phải của trang, bạn sẽ tìm thấy nút Đăng ký . Nhấp vào nút này, sau đó nhấp vào Đăng ký với GitHub trên trang sau. Trang web CircleCI sẽ nhắc bạn nhập thông tin đăng nhập GitHub của bạn:

Đăng nhập vào Trang GitHub CircleCI

Nhập tên user và password của bạn tại đây cấp cho CircleCI quyền đọc địa chỉ email GitHub của bạn, triển khai khóa và thêm móc dịch vụ vào repository của bạn, tạo danh sách các repository và thêm SSH key vào account GitHub của bạn. Các quyền này là cần thiết để CircleCI giám sát và phản ứng với những thay đổi trong repository lưu trữ Git của bạn.Nếu bạn muốn đọc thêm về các quyền được yêu cầu trước khi cung cấp cho CircleCI thông tin account của bạn, hãy xem tài liệu CircleCI .

Khi bạn đã xem xét các quyền này, hãy nhập thông tin đăng nhập GitHub của bạn và nhấp vào Đăng nhập . Sau đó CircleCI sẽ tích hợp với account GitHub của bạn và chuyển hướng trình duyệt của bạn đến trang chào mừng CircleCI:

Trang chào mừng dành cho CircleCI

Đến đây bạn có quyền truy cập vào console CircleCI của bạn , hãy mở một cửa sổ trình duyệt khác và chuyển đến repository GitHub cho hội thảo trên web này, https://github.com/do-community/rsvpapp-webinar4 . Nếu được yêu cầu đăng nhập vào GitHub, hãy nhập tên user và password của bạn. Trong kho này, bạn sẽ tìm thấy một ứng dụng RSVP mẫu được tạo bởi group CloudYuga . Theo mục đích của hướng dẫn này, bạn sẽ sử dụng ứng dụng này để chứng minh quy trình làm việc GitOps. Chuyển repository này vào account GitHub của bạn bằng cách nhấp vào nút Fork ở trên cùng bên phải của màn hình.

Khi bạn đã chia nhỏ repository , GitHub sẽ chuyển hướng bạn đến https://github.com/ your_GitHub_username /rsvpapp-webinar4 . Ở phía bên trái của màn hình, bạn sẽ thấy nút Branch: master . Nhấp vào nút này để hiển thị danh sách các chi nhánh cho dự án này. Tại đây, các chi nhánh tổng thể đề cập đến version chính thức hiện tại của ứng dụng. Mặt khác, chi nhánh dev là một sandbox phát triển, nơi bạn có thể kiểm tra những thay đổi trước khi thúc đẩy họ lên version chính thức tại các chi nhánh chủ. Chọn ngành dev.

Đến đây bạn đang ở trong phần phát triển của repository trình diễn này, bạn có thể bắt đầu cài đặt một đường dẫn. CircleCI yêu cầu file cấu hình YAML trong repository lưu trữ mô tả các bước cần thực hiện để kiểm tra ứng dụng của bạn. Kho lưu trữ bạn đã phân tách đã có file này tại .circleci/config.yml ; để thực hành cài đặt CircleCI, hãy xóa file này và tạo file của bạn .

Để tạo file cấu hình này, hãy nhấp vào nút Tạo file mới và tạo file có tên .circleci/config.yml :

GitHub Tạo trang file  mới

Sau khi mở file này trong GitHub, bạn có thể cấu hình quy trình làm việc cho CircleCI. Để tìm hiểu về nội dung của file này, bạn sẽ thêm từng phần một. Đầu tiên, hãy thêm những thứ sau:

.circleci / config.yml
version: 2 jobs:   test:     machine:       image: circleci/classic:201808-01       docker_layer_caching: true     working_directory: ~/repo  . . . 

Trong mã trước đó, version đề cập đến version CircleCI mà bạn sẽ sử dụng. jobs:test: nghĩa là bạn đang cài đặt thử nghiệm cho ứng dụng của bạn và machine:image: cho biết nơi CircleCI sẽ thực hiện thử nghiệm, trong trường hợp này là máy ảo dựa trên hình ảnh circleci/classic:201808-01 .

Tiếp theo, thêm các bước bạn muốn CircleCI thực hiện trong quá trình kiểm tra:

.circleci / config.yml
. . .     steps:       - checkout       - run:           name: install dependencies           command: |             sudo rm /var/lib/dpkg/lock             sudo dpkg --configure -a             sudo apt-get install software-properties-common             sudo add-apt-repository ppa:fkrull/deadsnakes             sudo apt-get update             sleep 5             sudo rm /var/lib/dpkg/lock             sudo dpkg --configure -a             sudo apt-get install python3.5             sleep 5             python -m pip install -r requirements.txt        # run tests!       # this example uses Django's built-in test-runner       # other common Python testing frameworks include pytest and nose       # https://pytest.org       # https://nose.readthedocs.io        - run:           name: run tests           command: |             python -m pytest tests/test_rsvpapp.py    . . . 

Các bước của bài kiểm tra được liệt kê sau steps: :, bắt đầu bằng - checkout , sẽ kiểm tra mã nguồn của dự án của bạn và sao chép nó vào không gian của công việc. Tiếp theo, bước - run: name: install dependencies chạy các lệnh được liệt kê để cài đặt các phụ thuộc cần thiết cho quá trình kiểm tra. Trong trường hợp này, bạn sẽ sử dụng trình chạy thử nghiệm có sẵn của khuôn khổ Django Web và công cụ thử nghiệm pytest . Sau khi CircleCI download các phần phụ thuộc này, bước -run -run: name: run tests sẽ hướng dẫn CircleCI chạy thử nghiệm trên ứng dụng của bạn.

Khi công việc test đã hoàn thành, hãy thêm các nội dung sau để mô tả công việc build :

.circleci / config.yml
. . .   build:      machine:       image: circleci/classic:201808-01       docker_layer_caching: true     working_directory: ~/repo      steps:       - checkout        - run:           name: build image           command: |             docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .    push:     machine:       image: circleci/classic:201808-01       docker_layer_caching: true     working_directory: ~/repo     steps:       - checkout        - run:           name: Push image           command: |             docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .             echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin             docker push $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1      . . . 

Như trước đây, machine:image: nghĩa là CircleCI sẽ xây dựng ứng dụng trong một máy ảo dựa trên hình ảnh được chỉ định. Theo steps: bạn sẽ tìm - checkout lại, tiếp theo là - run: name: build image . Điều này nghĩa là CircleCi sẽ xây dựng containers Docker từ hình ảnh rsvpapp trong repository lưu trữ Docker Hub của bạn. Bạn sẽ đặt biến môi trường $DOCKERHUB_USERNAME trong giao diện CircleCI, mà hướng dẫn sẽ trình bày sau khi hoàn tất file YAML này.

Sau khi build công việc được thực hiện, push công việc sẽ đẩy hình ảnh kết quả vào account Docker Hub của bạn.

Cuối cùng, thêm các dòng sau để xác định workflows điều phối các công việc bạn đã xác định trước đó:

.circleci / config.yml
. . . workflows:   version: 2   build-deploy:     jobs:       - test:           context: DOCKERHUB           filters:             branches:               only: dev               - build:           context: DOCKERHUB            requires:             - test           filters:             branches:               only: dev       - push:           context: DOCKERHUB           requires:             - build           filters:             branches:               only: dev 

Các dòng này đảm bảo CircleCI thực hiện các công việc test , buildpush theo đúng thứ tự. context: DOCKERHUB đề cập đến bối cảnh mà bài kiểm tra sẽ diễn ra. Bạn sẽ tạo ngữ cảnh này sau khi hoàn tất file YAML này. Các only: dev dòng kiềm chế các quy trình làm việc để kích hoạt chỉ khi có sự thay đổi đến chi nhánh dev của repository của bạn, và đảm bảo circleCI sẽ xây dựng và kiểm tra mã từ dev.

Đến đây bạn đã thêm tất cả mã cho .circleci/config.yml , nội dung của nó sẽ như sau:

.circleci / config.yml
version: 2 jobs:   test:     machine:       image: circleci/classic:201808-01       docker_layer_caching: true     working_directory: ~/repo      steps:       - checkout       - run:           name: install dependencies           command: |             sudo rm /var/lib/dpkg/lock             sudo dpkg --configure -a             sudo apt-get install software-properties-common             sudo add-apt-repository ppa:fkrull/deadsnakes             sudo apt-get update             sleep 5             sudo rm /var/lib/dpkg/lock             sudo dpkg --configure -a             sudo apt-get install python3.5             sleep 5             python -m pip install -r requirements.txt        # run tests!       # this example uses Django's built-in test-runner       # other common Python testing frameworks include pytest and nose       # https://pytest.org       # https://nose.readthedocs.io        - run:           name: run tests           command: |             python -m pytest tests/test_rsvpapp.py      build:      machine:       image: circleci/classic:201808-01       docker_layer_caching: true     working_directory: ~/repo      steps:       - checkout        - run:           name: build image           command: |             docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .    push:     machine:       image: circleci/classic:201808-01       docker_layer_caching: true     working_directory: ~/repo     steps:       - checkout        - run:           name: Push image           command: |             docker build -t $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1 .             echo $DOCKERHUB_PASSWORD | docker login --username $DOCKERHUB_USERNAME --password-stdin             docker push $DOCKERHUB_USERNAME/rsvpapp:$CIRCLE_SHA1      workflows:   version: 2   build-deploy:     jobs:       - test:           context: DOCKERHUB           filters:             branches:               only: dev               - build:           context: DOCKERHUB            requires:             - test           filters:             branches:               only: dev       - push:           context: DOCKERHUB           requires:             - build           filters:             branches:               only: dev 

Một khi bạn đã thêm vào file này để các chi nhánh dev của repository của bạn, trở về console circleCI.

Tiếp theo, bạn sẽ tạo ngữ cảnh CircleCI để chứa các biến môi trường cần thiết cho quy trình làm việc mà bạn đã phác thảo trong file YAML trước đó. Ở phía bên trái của màn hình, bạn sẽ tìm thấy nút CÀI ĐẶT . Bấm vào đây, sau đó chọn Bối cảnh trong tiêu đề TỔ CHỨC . Cuối cùng, nhấp vào nút Tạo ngữ cảnh ở phía bên phải của màn hình:

Tạo màn hình ngữ cảnh cho CircleCI

Sau đó CircleCI sẽ hỏi bạn tên của ngữ cảnh này. Nhập DOCKERHUB , sau đó nhấp vào Tạo . Khi bạn đã tạo ngữ cảnh, hãy chọn ngữ cảnh DOCKERHUB và nhấp vào nút Thêm biến môi trường . Đầu tiên, hãy nhập tên DOCKERHUB_USERNAME và trong Giá trị, hãy nhập tên user Docker Hub của bạn.

Thêm màn hình biến môi trường cho CircleCI

Sau đó, thêm một biến môi trường khác, nhưng lần này, đặt tên là DOCKERHUB_PASSWORD và điền vào trường Giá trị bằng password Docker Hub của bạn.

Khi bạn đã tạo hai biến môi trường cho ngữ cảnh DOCKERHUB của bạn , hãy tạo dự án CircleCI cho ứng dụng RSVP thử nghiệm. Để thực hiện việc này, hãy chọn nút THÊM DỰ ÁN từ menu bên trái. Điều này sẽ mang lại danh sách các dự án GitHub được liên kết với account của bạn. Chọn rsvpapp-webinar4 từ danh sách và nhấp vào nút Cài đặt dự án .

Lưu ý: Nếu rsvpapp-webinar4 không hiển thị trong danh sách, hãy reload trang CircleCI. Đôi khi có thể mất một chút thời gian để các dự án GitHub hiển thị trong giao diện CircleCI.

Đến đây bạn sẽ thấy mình trên trang Cài đặt Dự án :

 Cài đặt  màn hình dự án cho CircleCI

Ở đầu màn hình, CircleCI hướng dẫn bạn tạo file config.yml . Vì bạn đã thực hiện việc này, hãy cuộn xuống để tìm nút Bắt đầu xây dựng ở phía bên phải của trang. Bằng cách chọn này, bạn sẽ yêu cầu CircleCI bắt đầu theo dõi ứng dụng của bạn để biết các thay đổi.

Bấm vào nút Bắt đầu xây dựng . CircleCI sẽ chuyển hướng bạn đến trang trạng thái / tiến trình xây dựng, trang này vẫn chưa có trang nào.

Để kiểm tra các đường ống dẫn kích hoạt, đi đến repository thời gian gần đây chia hai tại https://github.com/ your_GitHub_username /rsvpapp-webinar4 và thực hiện một số thay đổi trong dev chỉ chi nhánh. Vì bạn đã chỉ thêm bộ lọc nhánh only: dev vào .circleci/config , CI sẽ chỉ tạo khi có thay đổi trong nhánh dev . Thực hiện thay đổi mã ngành dev, và bạn sẽ thấy rằng circleCI đã châm ngòi cho một công việc mới trong giao diện user . Nhấp vào dòng công việc đang chạy và bạn sẽ tìm thấy chi tiết về những gì CircleCI đang làm:

Trang quy trình làm việc của dự án CircleCI

Với quy trình làm việc CircleCI của bạn quan tâm đến khía cạnh Tích hợp liên tục của hệ thống GitOps CI / CD, bạn có thể cài đặt và cấu hình Argo CD trên đầu cụm Kubernetes của bạn để giải quyết Triển khai liên tục.

Bước 2 - Cài đặt và cấu hình Argo CD trên Kubernetes Cluster của bạn

Cũng giống như CircleCI sử dụng GitHub để kích hoạt kiểm tra tự động về các thay đổi đối với mã nguồn, Argo CD kết nối cụm Kubernetes của bạn với repository GitHub của bạn để lắng nghe các thay đổi và tự động triển khai ứng dụng đã cập nhật. Để cài đặt điều này, trước tiên bạn phải cài đặt Argo CD vào cụm của bạn .

Đầu tiên, tạo một không gian tên có tên là argocd :

  • kubectl create namespace argocd

Trong không gian tên này, Argo CD sẽ chạy tất cả các dịch vụ và tài nguyên mà nó cần để tạo ra dòng công việc Triển khai Liên tục.

Tiếp theo, download tệp kê khai CD Argo từ repository GitHub chính thức cho Argo:

  • kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v0.9.2/manifests/install.yaml

Trong lệnh này, cờ -n chỉ đạo kubectl áp dụng file kê khai cho không gian tên argocd-f chỉ định tên file cho file kê khai mà nó sẽ áp dụng, trong trường hợp này là tên file được download từ repository Argo.

Bằng cách sử dụng lệnh kubectl get , bạn có thể tìm thấy các group hiện đang chạy trong không gian tên argocd :

  • kubectl get pod -n argocd

Sử dụng lệnh này sẽ tạo ra kết quả tương tự như sau:

NAME                                      READY     STATUS    RESTARTS   AGE application-controller-6d68475cd4-j4jtj   1/1       Running   0          1m argocd-repo-server-78f556f55b-tmkvj       1/1       Running   0          1m argocd-server-78f47bf789-trrbw            1/1       Running   0          1m dex-server-74dc6c5ff4-fbr5g               1/1       Running   0          1m 

Bây giờ Argo CD đang chạy trên cụm của bạn, hãy download công cụ Argo CD CLI để bạn có thể điều khiển chương trình từ dòng lệnh của bạn :

  • curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v0.9.2/argocd-linux-amd64

Khi bạn đã download file , hãy sử dụng chmod để làm cho file có thể thực thi được:

  • chmod +x /usr/local/bin/argocd

Để tìm dịch vụ Argo CD, hãy chạy lệnh kubectl get trong không gian tên argocd :

  • kubectl get svc -n argocd argocd-server

Bạn sẽ nhận được kết quả tương tự như sau:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE argocd-server ClusterIP 10.109.189.243 <none> 80/TCP,443/TCP 8m

Bây giờ, hãy truy cập server Argo CD API. Server này không tự động có IP bên ngoài, vì vậy trước tiên bạn phải để lộ API để bạn có thể truy cập nó từ trình duyệt tại máy trạm local của bạn . Để thực hiện việc này, hãy sử dụng kubectl port-forward để chuyển tiếp cổng 8080 trên máy trạm local của bạn tới cổng 80 TCP của dịch vụ argocd-server từ kết quả trước đó:

  • kubectl port-forward svc/argocd-server -n argocd 8080:80

Đầu ra sẽ là:

Output
Forwarding from 127.0.0.1:8080 -> 8080 Forwarding from [::1]:8080 -> 8080

Khi bạn chạy lệnh port-forward , dấu nhắc lệnh của bạn sẽ không xuất hiện khỏi terminal của bạn. Để nhập thêm lệnh cho cụm Kubernetes của bạn, hãy mở một cửa sổ terminal mới và đăng nhập vào server từ xa của bạn.

Để hoàn tất kết nối, sử dụng ssh để chuyển tiếp cổng 8080 từ máy local của bạn. Đầu tiên, mở một cửa sổ terminal bổ sung và từ máy trạm local của bạn, nhập lệnh sau, với remote_server_IP_address thay thế bằng địa chỉ IP của server từ xa mà bạn đang chạy cụm Kubernetes của bạn :

  • ssh -L 8080:localhost:8080 root@remote_server_IP_address

Để đảm bảo server Argo CD được tiếp xúc với máy trạm local của bạn, hãy mở trình duyệt và chuyển đến URL localhost:8080 . Bạn sẽ thấy trang đích của Argo CD:

Trang đăng nhập cho ArgoCD

Đến đây bạn đã cài đặt Argo CD và tiếp xúc server của nó với máy trạm local của bạn, bạn có thể tiếp tục bước tiếp theo, trong đó bạn sẽ kết nối GitHub với dịch vụ Argo CD của bạn .

Bước 3 - Kết nối Argo CD với GitHub

Để cho phép Argo CD nghe GitHub và đồng bộ hóa các triển khai với repository của bạn, trước tiên bạn phải kết nối Argo CD với GitHub. Để làm điều này, hãy đăng nhập vào Argo.

Theo mặc định, password cho account Argo CD của bạn là tên của group cho server Argo CD API. Chuyển trở lại cửa sổ terminal đã đăng nhập vào server từ xa của bạn nhưng không xử lý chuyển tiếp cổng. Lấy lại password bằng lệnh sau:

  • kubectl get pods -n argocd -l app=argocd-server -o name | cut -d'/' -f 2

Bạn sẽ nhận được tên của group đang chạy server Argo API:

Output
argocd-server-b686c584b-6ktwf

Nhập lệnh sau để đăng nhập từ CLI:

  • argocd login localhost:8080

Bạn sẽ nhận được dấu nhắc sau:

Output
WARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)?

Đối với mục đích của phần trình diễn này, hãy nhập y để tiếp tục mà không cần kết nối an toàn. Argo CD sau đó sẽ nhắc bạn nhập tên user và password của bạn. Nhập admin cho tên user và tên pod argocd-server đầy đủ cho password của bạn. Sau khi nhập thông tin đăng nhập của bạn , bạn sẽ nhận được thông báo sau:

Output
'admin' logged in successfully Context 'localhost:8080' updated

Đến đây bạn đã đăng nhập, hãy sử dụng lệnh sau để thay đổi password của bạn:

  • argocd account update-password

Argo CD sẽ yêu cầu bạn nhập password hiện tại và password bạn muốn đổi thành. Chọn một password an toàn và nhập password đó theo dấu nhắc . Khi bạn đã thực hiện xong việc này, hãy sử dụng password mới của bạn để đăng nhập lại:

  • argocd relogin

Nhập lại password của bạn và bạn sẽ nhận được:

Output
Context 'localhost:8080' updated

Nếu bạn đang triển khai ứng dụng trên một cụm bên ngoài cụm Argo CD, bạn cần đăng ký thông tin đăng nhập của cụm ứng dụng với Argo CD. Nếu như trường hợp của hướng dẫn này, Argo CD và ứng dụng của bạn nằm trên cùng một cụm, thì bạn sẽ sử dụng https://kubernetes.default.svc làm server Kubernetes API khi kết nối Argo CD với ứng dụng của bạn.

Để chứng minh cách người ta có thể đăng ký một cụm bên ngoài, trước tiên hãy lấy danh sách các ngữ cảnh Kubernetes của bạn:

  • kubectl config get-contexts

Bạn sẽ nhận được:

Output
CURRENT NAME CLUSTER AUTHINFO NAMESPACE * minikube minikube minikube

Để thêm một cụm, hãy nhập lệnh sau, với tên của cụm của bạn thay cho tên được đánh dấu:

  • argocd cluster add minikube

Trong trường hợp này, lệnh trước sẽ mang lại:

Output
INFO[0000] ServiceAccount "argocd-manager" created INFO[0000] ClusterRole "argocd-manager-role" created INFO[0000] ClusterRoleBinding "argocd-manager-role-binding" created, bound "argocd-manager" to "argocd-manager-role" Cluster 'minikube' added

Đến đây bạn đã cài đặt thông tin đăng nhập cho Argo CD và thử nghiệm cách thêm cụm bên ngoài, hãy chuyển đến trang đích của Argo CD và đăng nhập từ máy trạm local của bạn. Argo CD sẽ dẫn bạn đến trang ứng dụng Argo CD:

Màn hình ứng dụng Argo CD

Từ đây, nhấp vào biểu tượng Cài đặt từ thanh công cụ bên trái, nhấp vào Kho lưu trữ , sau đó nhấp vào KẾT NỐI REPO . Argo CD sẽ cung cấp cho bạn ba trường cho thông tin GitHub của bạn:

Trang Repo của Argo CD Connect Git

Trong trường dành cho URL repository , hãy nhập https://github.com/ your_GitHub_username /rsvpapp-webinar4 , sau đó nhập tên user và password GitHub của bạn. Khi bạn đã nhập thông tin đăng nhập của bạn , hãy nhấp vào nút KẾT NỐI ở đầu màn hình.

Khi bạn đã kết nối kho chứa ứng dụng RSVP demo với Argo CD, hãy chọn biểu tượng Ứng dụng từ thanh công cụ bên trái, nhấp vào nút + ở góc trên cùng bên phải của màn hình và chọn Ứng dụng mới . Từ trang Chọn repository , chọn repository GitHub của bạn cho ứng dụng RSVP và nhấp vào tiếp theo. Sau đó, chọn TẠO ỨNG DỤNG TỪ TRỰC TIẾP để chuyển đến trang yêu cầu bạn xem lại các thông số ứng dụng của bạn :

Argo CD Xem lại các thông số ứng dụng Trang

Trường Đường dẫn chỉ định nơi file YAML cho ứng dụng của bạn nằm trong repository lưu trữ GitHub của bạn. Đối với dự án này, nhập k8s . Đối với Tên ứng dụng , hãy nhập rsvpapp và đối với URL cụm , hãy chọn https://kubernetes.default.svc từ trình đơn thả xuống, vì Argo CD và ứng dụng của bạn nằm trên cùng một cụm Kubernetes. Cuối cùng, nhập default cho Không gian tên .

Khi bạn đã điền các thông số ứng dụng của bạn , hãy nhấp vào TẠO ở đầu màn hình. Một hộp sẽ xuất hiện, đại diện cho ứng dụng của bạn:

Trang ỨNG DỤNG Argo CD với rsvpapp

Sau Trạng thái :, bạn sẽ thấy rằng ứng dụng của bạn là OutOfSync với repository GitHub của bạn. Để triển khai ứng dụng của bạn như trên GitHub, hãy nhấp vào HÀNH ĐỘNG và chọn Đồng bộ hóa . Sau một lúc, trạng thái ứng dụng của bạn sẽ thay đổi thành Đã đồng bộ hóa , nghĩa là Argo CD đã triển khai ứng dụng của bạn.

Khi ứng dụng của bạn đã được triển khai, hãy nhấp vào hộp ứng dụng của bạn để tìm sơ đồ chi tiết về ứng dụng của bạn:

Trang chi tiết ứng dụng Argo CD cho rsvpapp

Để tìm thấy triển khai này trên cụm Kubernetes của bạn, hãy chuyển trở lại cửa sổ terminal cho server từ xa của bạn và nhập:

  • kubectl get pod

Bạn sẽ nhận được kết quả với các group đang chạy ứng dụng của bạn:

Output
NAME READY STATUS RESTARTS AGE rsvp-755d87f66b-hgfb5 1/1 Running 0 12m rsvp-755d87f66b-p2bsh 1/1 Running 0 12m rsvp-db-54996bf89-gljjz 1/1 Running 0 12m

Tiếp theo, hãy kiểm tra các dịch vụ:

  • kubectl get svc

Bạn sẽ tìm thấy một dịch vụ cho ứng dụng RSVP và database MongoDB của bạn , ngoài số cổng mà ứng dụng của bạn đang chạy, được đánh dấu trong phần sau:

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        2h mongodb      ClusterIP   10.102.150.54   <none>        27017/TCP      25m rsvp         NodePort    10.106.91.108   <none>        80:31350/TCP   25m 

Bạn có thể tìm thấy ứng dụng RSVP đã triển khai của bạn bằng cách chuyển đến your_remote_server_IP_address : app_port_number trong trình duyệt của bạn , sử dụng số được đánh dấu trước cho app_port_number :

Ứng dụng RSVP

Đến đây bạn đã triển khai ứng dụng của bạn bằng Argo CD, bạn có thể kiểm tra hệ thống Triển khai liên tục và điều chỉnh để tự động đồng bộ hóa với GitHub.

Bước 4 - Kiểm tra cài đặt triển khai liên tục của bạn

Với Argo CD được cài đặt , hãy kiểm tra hệ thống Triển khai liên tục của bạn bằng cách thực hiện thay đổi trong dự án của bạn và kích hoạt một bản dựng mới của ứng dụng của bạn.

Trong trình duyệt của bạn, chuyển đến https://github.com/ your_GitHub_username /rsvpapp-webinar4 , nhấp vào ngành thạc sĩ, và cập nhật các k8s/rsvp.yaml file để triển khai ứng dụng của bạn bằng cách sử dụng hình ảnh được xây dựng bởi circleCI làm căn cứ. Thêm dev sau image: nkhare/rsvpapp: như trong hình sau:

rsvpapp-webinar2 / k8s / rsvp.yaml
apiVersion: apps/v1 kind: Deployment metadata:   name: rsvp spec:   replicas: 2   selector:     matchLabels:       app: rsvp   template:     metadata:       labels:         app: rsvp     spec:       containers:       - name: rsvp-app         image: nkhare/rsvpapp: dev         imagePullPolicy: Always         livenessProbe:           httpGet:             path: /             port: 5000           periodSeconds: 30           timeoutSeconds: 1           initialDelaySeconds: 50         env:         - name: MONGODB_HOST           value: mongodb         ports:         - containerPort: 5000           name: web-port . . . 

Thay vì kéo hình ảnh ban đầu từ Docker Hub, bây giờ Argo CD sẽ sử dụng hình ảnh dev tạo ra trong hệ thống tích hợp liên tục để xây dựng các ứng dụng.

Commit thay đổi, sau đó quay lại giao diện user ArgoCD. Bạn sẽ nhận thấy rằng vẫn chưa có gì thay đổi; điều này là do bạn chưa kích hoạt đồng bộ hóa tự động và phải đồng bộ hóa ứng dụng theo cách thủ công.

Để đồng bộ hóa ứng dụng theo cách thủ công, hãy nhấp vào vòng tròn màu xanh lam ở trên cùng bên phải của màn hình và nhấp vào Đồng bộ hóa . Một menu mới sẽ xuất hiện, với một trường để đặt tên cho bản sửa đổi mới của bạn và một hộp kiểm có nhãn PRUNE :

Trang đồng bộ hóa cho Argo CD

Nhấp vào hộp kiểm này sẽ đảm bảo , một khi Argo CD quay ứng dụng mới của bạn, nó sẽ phá hủy version lỗi thời. Nhấp vào hộp PRUNE , sau đó nhấp vào ĐỒNG BỘ HÓA ở đầu màn hình. Bạn sẽ thấy các phần tử cũ trong ứng dụng của bạn quay xuống và các phần tử mới quay lên với hình ảnh do CircleCI tạo của bạn. Nếu hình ảnh mới bao gồm bất kỳ thay đổi nào, bạn sẽ thấy những thay đổi mới này được phản ánh trong ứng dụng của bạn tại URL your_remote_server_IP_address : app_port_number .

Như đã đề cập trước đây, Argo CD cũng có tùy chọn tự động đồng bộ hóa sẽ kết hợp các thay đổi vào ứng dụng của bạn khi bạn thực hiện chúng. Để kích hoạt tính năng này, hãy mở terminal cho server từ xa của bạn và sử dụng lệnh sau:

  • argocd app set rsvpapp --sync-policy automated

Để đảm bảo các bản sửa đổi không vô tình bị xóa, mặc định cho đồng bộ hóa tự động đã bị tắt. Để bật tính năng cắt tỉa tự động, chỉ cần thêm cờ --auto-prune vào cuối lệnh trước.

Đến đây bạn đã thêm khả năng Triển khai liên tục vào cụm Kubernetes của bạn , bạn đã hoàn thành hệ thống GitOps CI / CD trình diễn với CircleCI và Argo CD.

Kết luận

Trong hướng dẫn này, bạn đã tạo một đường dẫn với CircleCI để kích hoạt các thử nghiệm và xây dựng hình ảnh cập nhật khi bạn thay đổi mã trong repository lưu trữ GitHub của bạn . Bạn cũng đã sử dụng Argo CD để triển khai một ứng dụng, tự động kết hợp các thay đổi được CircleCI tích hợp. Đến đây bạn có thể sử dụng các công cụ này để tạo hệ thống GitOps CI / CD của bạn sử dụng Git làm chủ đề tổ chức của nó.

Nếu bạn muốn tìm hiểu thêm về Git, hãy xem loạt bài hướng dẫn Giới thiệu về Nguồn mở của ta . Để khám phá thêm các công cụ DevOps tích hợp với kho Git, hãy xem Cách cài đặt và cấu hình GitLab trên Ubuntu 18.04 .


Tags:

Các tin liên quan