Серия вебинаров: Наборы инструментов GitOps для Kubernetes с CD CircleCI и Argo

[.Примечание]##

Серия вебинаров

Эта статья дополняетwebinar series on doing CI/CD with Kubernetes. В серии обсуждается, как использовать облачный подход к созданию, тестированию и развертыванию приложений, включая управление выпусками, собственные облачные инструменты, сервисные сетки и инструменты CI / CD, которые можно использовать с Kubernetes. Он предназначен для помощи разработчикам и компаниям, которые заинтересованы в интеграции лучших практик CI / CD с Kubernetes в свои рабочие процессы.

Этот учебник включает в себя концепции и команды из последнего сеанса серии, Наборы инструментов GitOps для Kubernetes с CircleCI и Argo CD.

[.warning] #Warning: Процедуры в этом руководстве предназначены только для демонстрационных целей. В результате они не соблюдают передовые практики и меры безопасности, необходимые для готового к эксплуатации развертывания.
#

Вступление

Использование Kubernetes для развертывания вашего приложения может обеспечить значительные инфраструктурные преимущества, такие как гибкое масштабирование, управление распределенными компонентами и контроль над различными версиями вашего приложения. Однако с усилением контроля становится все более сложным, что может особенно затруднить управление системами совместной разработки кода CI / CD, контроля версий, регистрации изменений, автоматического развертывания и отката. Чтобы учесть эти трудности, инженеры DevOps разработали несколько методов автоматизации Kubernetes CI / CD, включая систему инструментов и лучшие практики под названиемGitOps. GitOps, предложенныйWeaveworks в2017 blog post, используетGit как «единый источник истины» для процессов CI / CD, интегрируя изменения кода в едином общем репозитории для каждого проекта и использование запросов на вытягивание для управления инфраструктурой и развертыванием.

Существует множество инструментов, которые используют Git в качестве координационного центра для процессов DevOps в Kubernetes, в том числеGitkube, разработанныйHasura,Flux, Weaveworks, иJenkins X, тема second webinar in this series. В этом руководстве вы продемонстрируете два дополнительных инструмента, которые вы можете использовать для настройки собственной облачной системы GitOps CI / CD: инструмент непрерывной интеграцииCircleCI иArgo CD, декларативный Инструмент непрерывной доставки.

CircleCI использует репозиторииGitHub илиBitbucket для организации разработки приложений и автоматизации сборки и тестирования в Kubernetes. Благодаря интеграции с репозиторием Git проекты CircleCI могут обнаруживать, когда в код приложения вносятся изменения, и автоматически тестировать его, отправляя уведомления об изменении и результатах тестирования по электронной почте или другим средствам связи, таким какSlack. CircleCI ведет журналы всех этих изменений и результатов тестирования, а интерфейс на основе браузера позволяет пользователям контролировать тестирование в режиме реального времени, так что команда всегда знает статус своего проекта.

В качестве подпроекта механизма управления рабочим процессом Argo для Kubernetes, Argo CD предоставляет инструмент непрерывной доставки, который автоматически синхронизирует и развертывает ваше приложение всякий раз, когда в вашем репозитории GitHub вносятся изменения. Управляя развертыванием и жизненным циклом приложения, оно предоставляет решения для управления версиями, конфигурациями и определениями приложений в средах Kubernetes, упорядочивая сложные данные с помощью понятного пользовательского интерфейса. Он может обрабатывать несколько типов манифестов Kubernetes, включая приложенияksonnet, приложенияKustomize, диаграммыHelm и файлы YAML / json, а также поддерживает уведомления веб-перехватчиков от GitHub, GitLab и Bitbucket.

В этой последней статьеCI/CD with Kubernetes series вы попробуете эти инструменты GitOps:

  • Настройка конвейерных триггеров для автоматизации тестирования приложений с помощью CircleCI и GitHub.

  • Синхронизация и развертывание приложения из репозитория GitHub с помощью Argo CD.

К концу этого урока вы получите базовые знания о том, как построить конвейер CI / CD в Kubernetes с помощью набора инструментов GitOps.

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

  • Сервер Ubuntu 16.04 с 16 ГБ ОЗУ или выше. Поскольку это руководство предназначено только для демонстрационных целей, команды запускаются из учетной записиroot. Note that the unrestrained privileges of this account do not adhere to production-ready best practices and could affect your system. По этой причине рекомендуется выполнить эти шаги в тестовой среде, такой как виртуальная машина илиDigitalOcean Droplet.

  • ADocker Hub Account. Обзор начала работы с Docker Hub см. Вthese instructions.

  • АккаунтGitHub и базовые знания GitHub. Чтобы узнать, как использовать GitHub, ознакомьтесь с нашим руководством поHow To Create a Pull Request on GitHub.

  • Знакомство с понятиями Kubernetes. Пожалуйста, обратитесь к статьеAn Introduction to Kubernetes для более подробной информации.

  • Кластер Kubernetes с инструментом командной строкиkubectl. Это руководство было протестировано на смоделированном кластере Kubernetes, настроенном в локальной среде с помощьюMinikube, программы, которая позволяет вам опробовать инструменты Kubernetes на вашем собственном компьютере без необходимости настраивать настоящий кластер Kubernetes. Чтобы создать кластер Minikube, выполните шаг 1 второго вебинара из этой серии,Kubernetes Package Management with Helm and CI/CD with Jenkins X.

[[step-1 -—- setting-up-your-circleci-workflow]] == Шаг 1. Настройка рабочего процесса CircleCI

На этом этапе вы соберете стандартный рабочий процесс CircleCI, который включает три задания: тестирование кода, создание образа и его отправку в Docker Hub. На этапе тестирования CircleCI будет использоватьpytest для тестирования кода для образца приложения RSVP. Затем он создаст образ кода приложения и отправит его в DockerHub.

Во-первых, предоставьте CircleCI доступ к вашей учетной записи GitHub. Для этого перейдите кhttps://circleci.com/ в своем любимом веб-браузере:

CircleCI Landing Page

В правом верхнем углу страницы вы найдете кнопкуSign Up. Щелкните эту кнопку, затем щелкнитеSign Up with GitHub на следующей странице. Веб-сайт CircleCI предложит вам ввести учетные данные GitHub:

Sign In to GitHub CircleCI Page

Ввод здесь вашего имени пользователя и пароля дает CircleCI разрешение на чтение вашего адреса электронной почты GitHub, развертывание ключей и добавление служебных хуков в ваш репозиторий, создание списка ваших репозиториев и добавление ключа SSH в вашу учетную запись GitHub. Эти разрешения необходимы CircleCI для мониторинга и реагирования на изменения в вашем Git-репозитории. Если вы хотите узнать больше о запрошенных разрешениях, прежде чем предоставлять CircleCI информацию о своей учетной записи, см.CircleCI documentation.

После просмотра этих разрешений введите свои учетные данные GitHub и щелкнитеSign In. Затем CircleCI будет интегрирован с вашей учетной записью GitHub и перенаправит ваш браузер на страницу приветствия CircleCI:

Welcome page for CircleCI

Теперь, когда у вас есть доступ к панели управления CircleCI, откройте другое окно браузера и перейдите в репозиторий GitHub для этого вебинара,https://github.com/do-community/rsvpapp-webinar4. Если будет предложено войти в GitHub, введите имя пользователя и пароль. В этом репозитории вы найдете образец приложения RSVP, созданный командойCloudYuga. В целях данного руководства вы будете использовать это приложение для демонстрации рабочего процесса GitOps. Подключите этот репозиторий к своей учетной записи GitHub, нажав кнопкуFork в правом верхнем углу экрана.

Когда вы разветвите репозиторий, GitHub перенаправит вас наhttps://github.com/your_GitHub_username/rsvpapp-webinar4. В левой части экрана вы увидите кнопкуBranch: master. Нажмите эту кнопку, чтобы открыть список филиалов для этого проекта. Здесь веткаmaster относится к текущей официальной версии приложения. С другой стороны, веткаdev - это песочница для разработки, где вы можете протестировать изменения, прежде чем вносить их в официальную версию в веткеmaster. Выберите веткуdev.

Теперь, когда вы находитесь в разделе разработки этого демонстрационного репозитория, вы можете приступить к настройке конвейера. CircleCI требует файл конфигурации YAML в репозитории, который описывает шаги, которые необходимо предпринять для тестирования вашего приложения. В разветвленном репозитории этот файл уже находится в.circleci/config.yml; Чтобы попрактиковаться в настройке CircleCI, удалите этот файл и создайте свой собственный.

Чтобы создать этот файл конфигурации, нажмите кнопкуCreate new file и создайте файл с именем.circleci/config.yml:

GitHub Create a new file Page

Когда вы откроете этот файл в GitHub, вы сможете настроить рабочий процесс для CircleCI. Чтобы узнать содержимое этого файла, вы будете добавлять разделы по частям. Сначала добавьте следующее:

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

. . .

В предыдущем кодеversion относится к версии CircleCI, которую вы будете использовать. jobs:test: означает, что вы настраиваете тест для своего приложения, аmachine:image: указывает, где CircleCI будет проводить тестирование, в данном случае виртуальная машина на основе образаcircleci/classic:201808-01.

Затем добавьте шаги, которые вы хотели бы, чтобы CircleCI предпринял во время теста:

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

. . .

Шаги теста перечислены послеsteps:, начиная с- checkout, что позволит проверить исходный код вашего проекта и скопировать его в пространство задания. Затем шаг- run: name: install dependencies запускает перечисленные команды для установки зависимостей, необходимых для теста. В этом случае вы будете использовать встроенное средство запуска тестовDjango Web framework’s и инструмент тестированияpytest. После того, как CircleCI загрузит эти зависимости, шаг-run: name: run tests проинструктирует CircleCI запустить тесты в вашем приложении.

После завершения заданияtest добавьте следующее содержимое для описания задания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

. . .

Как и раньше,machine:image: означает, что CircleCI создаст приложение на виртуальной машине на основе указанного образа. Подsteps: вы снова найдете- checkout, за которым следует- run: name: build image. Это означает, что CircleCi создаст контейнер Docker из образаrsvpapp в вашем репозитории Docker Hub. Вы установите переменную среды$DOCKERHUB_USERNAME в интерфейсе CircleCI, который будет рассмотрен в учебнике после завершения этого файла YAML.

После выполнения заданияbuild заданиеpush отправит полученный образ в вашу учетную запись Docker Hub.

Наконец, добавьте следующие строки, чтобы определитьworkflows, которые координируют задания, которые вы определили ранее:

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

Эти строки гарантируют, что CircleCI выполняет заданияtest,build иpush в правильном порядке. context: DOCKERHUB относится к контексту, в котором будет проводиться тест. Вы создадите этот контекст после завершения этого файла YAML. Строкаonly: dev ограничивает запуск рабочего процесса только при изменении веткиdev вашего репозитория и гарантирует, что CircleCI построит и протестирует код изdev.

Теперь, когда вы добавили весь код для файла.circleci/config.yml, его содержимое должно быть следующим:

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

После того, как вы добавили этот файл в веткуdev своего репозитория, вернитесь на панель управления CircleCI.

Затем вы создадите контекст CircleCI для размещения переменных среды, необходимых для рабочего процесса, который вы описали в предыдущем файле YAML. В левой части экрана вы найдете кнопкуSETTINGS. Щелкните здесь, затем выберитеContexts под заголовкомORGANIZATION. Наконец, нажмите кнопкуCreate Context в правой части экрана:

Create Context Screen for CircleCI

Затем CircleCI спросит у вас название этого контекста. ВведитеDOCKERHUB, затем щелкнитеCreate. После создания контекста выберите контекстDOCKERHUB и нажмите кнопкуAdd Environment Variable. Для первого введите имяDOCKERHUB_USERNAME, а вValue введите свое имя пользователя Docker Hub.

Add Environment Variable Screen for CircleCI

Затем добавьте еще одну переменную среды, но на этот раз назовите ееDOCKERHUB_PASSWORD и заполните полеValue своим паролем Docker Hub.

Когда вы создадите две переменные среды для вашего контекстаDOCKERHUB, создайте проект CircleCI для тестового приложения RSVP. Для этого выберите кнопкуADD PROJECTS в левом меню. Это даст список проектов GitHub, привязанных к вашей учетной записи. Выберитеrsvpapp-webinar4 из списка и нажмите кнопкуSet Up Project.

[.note] #Note: Еслиrsvpapp-webinar4 не отображается в списке, перезагрузите страницу CircleCI. Иногда проекты GitHub появляются в интерфейсе CircleCI через некоторое время.
#

Вы окажетесь на страницеSet Up Project:

Set Up Project Screen for CircleCI

В верхней части экрана CircleCI инструктирует вас создать файлconfig.yml. Поскольку вы уже сделали это, прокрутите вниз и найдите кнопкуStart Building в правой части страницы. Выбрав это, вы скажете CircleCI начать мониторинг вашего приложения на предмет изменений.

Щелкните по кнопкеStart Building. CircleCI перенаправит вас на страницу прогресса / состояния сборки, которая пока не имеет сборки.

Чтобы протестировать триггер конвейера, перейдите в недавно созданный репозиторий вhttps://github.com/your_GitHub_username/rsvpapp-webinar4 и внесите некоторые изменения только в веткуdev. Поскольку вы добавили фильтр ветвленияonly: dev в свой файл.circleci/config, CI будет строиться только при изменении веткиdev. Внесите изменения в код веткиdev, и вы обнаружите, что CircleCI запустил новый рабочий процесс в пользовательском интерфейсе. Нажмите на запущенный рабочий процесс, и вы найдете подробную информацию о том, что делает CircleCI:

CircleCI Project Workflow Page

С вашим рабочим процессом CircleCI, заботящимся о аспекте непрерывной интеграции вашей системы GitOps CI / CD, вы можете установить и настроить Argo CD поверх кластера Kubernetes для решения проблем непрерывного развертывания.

[[step-2 -—- install-and-configuring-argo-cd-on-your-kubernetes-cluster]] == Шаг 2. Установка и настройка компакт-диска Argo на вашем кластере Kubernetes

Так же, как CircleCI использует GitHub для запуска автоматического тестирования изменений исходного кода, Argo CD подключает ваш кластер Kubernetes к вашему хранилищу GitHub для прослушивания изменений и автоматического развертывания обновленного приложения. Чтобы настроить это, вы должны сначала установить Argo CD в ваш кластер.

Сначала создайтеnamespace с именемargocd:

kubectl create namespace argocd

В этом пространстве имен Argo CD будет запускать все службы и ресурсы, необходимые для создания рабочего процесса непрерывного развертывания.

Затем загрузитеArgo CD manifest из официального репозитория GitHub для Argo:

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

В этой команде флаг-n указываетkubectl применить манифест к пространству именargocd, а-f указывает имя файла для манифеста, который он будет применять в этом case тот, который был загружен из репозитория Argo.

Используя командуkubectl get, вы можете найти модули, которые сейчас работают в пространстве именargocd:

kubectl get pod -n argocd

Использование этой команды приведет к выводу, подобному следующему:

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

Теперь, когда Argo CD работает в вашем кластере, загрузите инструмент Argo CD CLI, чтобы вы могли управлять программой из командной строки:

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

После загрузки файла используйтеchmod, чтобы сделать его исполняемым:

chmod +x /usr/local/bin/argocd

Чтобы найти службу Argo CD, выполните командуkubectl get в пространстве именargocd:

kubectl get svc -n argocd argocd-server

Вы получите вывод, подобный следующему:

OutputNAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
argocd-server   ClusterIP   10.109.189.243           80/TCP,443/TCP   8m

Теперь откройте сервер API Argo CD. Этот сервер не имеет автоматически внешнего IP-адреса, поэтому вы должны сначала предоставить API, чтобы получить доступ к нему из браузера на локальной рабочей станции. Для этого используйтеkubectl port-forward для перенаправления порта8080 на вашей локальной рабочей станции на TCP-порт80 службыargocd-server из предыдущего вывода:

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

Выход будет:

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

После того, как вы запустите командуport-forward, ваша командная строка исчезнет с вашего терминала. Чтобы ввести больше команд для своего кластера Kubernetes, откройте новое окно терминала и войдите на удаленный сервер.

Чтобы завершить соединение, используйтеssh для перенаправления порта8080 с вашего локального компьютера. Сначала откройте дополнительное окно терминала и с локальной рабочей станции введите следующую команду, заменивremote_server_IP_address IP-адресом удаленного сервера, на котором вы запускаете кластер Kubernetes:

ssh -L 8080:localhost:8080 root@remote_server_IP_address

Чтобы убедиться, что сервер Argo CD доступен для вашей локальной рабочей станции, откройте браузер и перейдите по URL-адресуlocalhost:8080. Вы увидите целевую страницу CD Argo:

Sign In Page for ArgoCD

Теперь, когда вы установили Argo CD и выставили его сервер на свою локальную рабочую станцию, вы можете перейти к следующему шагу, на котором вы подключите GitHub к службе Argo CD.

[[step-3 -—- connected-argo-cd-to-github]] == Шаг 3. Подключение Argo CD к GitHub

Чтобы позволить Argo CD прослушивать GitHub и синхронизировать развертывания с вашим репозиторием, сначала необходимо подключить Argo CD к GitHub. Для этого войдите в Арго.

По умолчанию пароль для вашей учетной записи Argo CD - это имя модуля для сервера API Argo CD. Вернитесь в окно терминала, которое зарегистрировано на вашем удаленном сервере, но не обрабатывает переадресацию портов. Восстановите пароль с помощью следующей команды:

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

Вы получите имя модуля, на котором работает API-сервер Argo:

Outputargocd-server-b686c584b-6ktwf

Введите следующую команду для входа в CLI:

argocd login localhost:8080

Вы получите следующее приглашение:

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

В целях демонстрации введитеy, чтобы продолжить работу без защищенного соединения. Argo CD предложит вам ввести имя пользователя и пароль. Введитеadmin в качестве имени пользователя и полное имя модуляargocd-server в качестве пароля. Как только вы введете свои учетные данные, вы получите следующее сообщение:

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

Теперь, когда вы вошли в систему, используйте следующую команду, чтобы изменить свой пароль:

argocd account update-password

Argo CD попросит вас указать ваш текущий пароль и пароль, на который вы хотите его сменить. Выберите безопасный пароль и введите его в подсказках. Сделав это, используйте новый пароль для повторной регистрации:

argocd relogin

Введите свой пароль еще раз, и вы получите:

OutputContext 'localhost:8080' updated

Если вы развертывали приложение в кластере, внешнем по отношению к кластеру Argo CD, вам необходимо зарегистрировать учетные данные кластера приложений на Argo CD. Если, как в случае с этим руководством, Argo CD и ваше приложение находятся в одном кластере, тогда вы будете использоватьhttps://kubernetes.default.svc в качестве сервера API Kubernetes при подключении Argo CD к вашему приложению.

Чтобы продемонстрировать, как можно зарегистрировать внешний кластер, сначала получите список ваших контекстов Kubernetes:

kubectl config get-contexts

Ты получишь:

OutputCURRENT   NAME       CLUSTER    AUTHINFO   NAMESPACE
*         minikube   minikube   minikube

Чтобы добавить кластер, введите следующую команду, указав имя кластера вместо выделенного имени:

argocd cluster add minikube

В этом случае предыдущая команда выдаст:

OutputINFO[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

Теперь, когда вы настроили учетные данные для входа на компакт-диск Argo и протестировали, как добавить внешний кластер, перейдите на целевую страницу компакт-диска Argo и войдите с локальной рабочей станции. Argo CD направит вас на страницу приложений Argo CD:

Argo CD Applications Screen

Отсюда щелкните значокSettings на левой панели инструментов, щелкнитеRepositories, затем щелкнитеCONNECT REPO. CD Argo предоставит вам три поля для информации о GitHub:

Argo CD Connect Git Repo Page

В поле дляRepository URL введитеhttps://github.com/your_GitHub_username/rsvpapp-webinar4, затем введите свое имя пользователя и пароль на GitHub. После ввода учетных данных нажмите кнопкуCONNECT вверху экрана.

После того как вы подключили репозиторий, содержащий демонстрационное приложение RSVP, к Argo CD, выберите значокApps на левой панели инструментов, нажмите кнопку+ в правом верхнем углу экрана и выберитеNew Application. На страницеSelect Repository выберите репозиторий GitHub для приложения RSVP и нажмите «Далее». Затем выберитеCREATE APP FROM DIRECTORY, чтобы перейти на страницу, на которой вас попросят просмотреть параметры вашего приложения:

Argo CD Review application parameters Page

ПолеPath указывает, где находится файл YAML для вашего приложения в вашем репозитории GitHub. Для этого проекта введитеk8s. ДляApplication Name введитеrsvpapp, а дляCluster URL выберитеhttps://kubernetes.default.svc из раскрывающегося меню, так как Argo CD и ваше приложение находятся в одном кластере Kubernetes. Наконец, введитеdefault дляNamespace.

После того, как вы заполнили параметры своего приложения, нажмитеCREATE в верхней части экрана. Появится окно, представляющее ваше приложение:

Argo CD APPLICATIONS Page with rsvpapp

ПослеStatus: вы увидите, что ваше приложениеOutOfSync с вашим репозиторием GitHub. Чтобы развернуть приложение, как оно есть на GitHub, щелкнитеACTIONS и выберитеSync. Через несколько секунд статус вашего приложения изменится наSynced, что означает, что Argo CD развернул ваше приложение.

После того, как ваше приложение будет развернуто, щелкните по полю вашего приложения, чтобы найти подробную диаграмму вашего приложения:

Argo CD Application Details Page for rsvpapp

Чтобы найти это развертывание в вашем кластере Kubernetes, вернитесь в окно терминала для вашего удаленного сервера и введите:

kubectl get pod

Вы получите вывод с модулями, на которых запущено ваше приложение:

OutputNAME                      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

Далее проверьте услуги:

kubectl get svc

Вы найдете службу для приложения RSVP и базы данных MongoDB, в дополнение к номеру порта, с которого запускается ваше приложение, выделенное следующим образом:

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

Вы можете найти развернутое приложение RSVP, перейдя кyour_remote_server_IP_address:app_port_number в своем браузере, используя предыдущее выделенное число дляapp_port_number:

RSVP Application

Теперь, когда вы развернули свое приложение с помощью Argo CD, вы можете протестировать свою систему непрерывного развертывания и настроить ее для автоматической синхронизации с GitHub.

[[step-4 -—- testing-your-continuous-deployment-setup]] == Шаг 4 - Тестирование настройки непрерывного развертывания

Установив Argo CD, протестируйте свою систему непрерывного развертывания, внеся изменения в проект и запустив новую сборку приложения.

В браузере перейдите кhttps://github.com/your_GitHub_username/rsvpapp-webinar4, щелкните веткуmaster и обновите файлk8s/rsvp.yaml, чтобы развернуть приложение, используя образ, созданный CircleCI в качестве основы. Добавьтеdev послеimage: nkhare/rsvpapp:, как показано ниже:

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

Вместо того, чтобы получать исходный образ из Docker Hub, Argo CD теперь будет использовать образdev, созданный в системе непрерывной интеграции, для сборки приложения.

Передайте изменения, затем вернитесь в пользовательский интерфейс ArgoCD. Вы заметите, что ничего еще не изменилось; это потому, что вы не активировали автоматическую синхронизацию и должны синхронизировать приложение вручную.

Чтобы вручную синхронизировать приложение, щелкните синий кружок в правом верхнем углу экрана и щелкнитеSync. Появится новое меню с полем для названия вашей новой ревизии и флажкомPRUNE:

Synchronization Page for Argo CD

Если установить этот флажок, то после запуска нового приложения Argo CD будет уничтожена устаревшая версия. Щелкните полеPRUNE, затем щелкнитеSYNCHRONIZE в верхней части экрана. Вы увидите, как старые элементы вашего приложения вращаются вниз, а новые - с созданным вами CircleCI-изображением. Если новое изображение включало какие-либо изменения, вы бы обнаружили, что эти изменения отражены в вашем приложении по URL-адресуyour_remote_server_IP_address:app_port_number.

Как упоминалось ранее, Argo CD также имеет функцию автоматической синхронизации, которая будет включать изменения в ваше приложение по мере их внесения. Чтобы включить это, откройте свой терминал для удаленного сервера и используйте следующую команду:

argocd app set rsvpapp --sync-policy automated

Чтобы убедиться, что редакции не были случайно удалены, по умолчанию автоматическая синхронизация отключена. Чтобы включить автоматическую обрезку, просто добавьте флаг--auto-prune в конец предыдущей команды.

Теперь, когда вы добавили возможности непрерывного развертывания в свой кластер Kubernetes, вы завершили демонстрационную систему GitOps CI / CD с CircleCI и Argo CD.

Заключение

В этом руководстве вы создали конвейер с CircleCI, который запускает тесты и создает обновленные изображения при изменении кода в репозитории GitHub. Вы также использовали Argo CD для развертывания приложения, автоматически включив в него изменения, встроенные в CircleCI. Теперь вы можете использовать эти инструменты для создания вашей собственной системы GitOps CI / CD, которая использует Git в качестве организующей темы.

Если вы хотите узнать больше о Git, ознакомьтесь с нашей серией руководствAn Introduction to Open Source. Чтобы изучить другие инструменты DevOps, которые интегрируются с репозиториями Git, взгляните наHow To Install and Configure GitLab on Ubuntu 18.04.

Related