Инструмент GitOps Argo CD в действии

Архитектура
Инструмент GitOps Argo CD в действии

задний план

Концепция GitOps возникла из блога GitOps — Operations by Pull Request, опубликованного соучредителем Weaveworks Алексисом в августе 2017 года. Это быстрый и безопасный способ для разработчиков и операторов запускать и обновлять сложные приложения, работающие в Kubernetes, в кластере. В статье Алексиса описывается, как инженеры Weaveworks развертывают, управляют и отслеживают приложения SaaS на основе Kubernetes, используя Git как единственный источник достоверной информации.

основной:

  • GitOps — это операционная модель для K8s и других облачных технологий, предоставляющая набор передовых методов для унифицированного развертывания, управления и мониторинга контейнерных кластеров и приложений.
  • Как сквозные конвейеры CICD, так и рабочие процессы git используются для работы и разработки пути взаимодействия разработчиков к управлению приложениями;

Недавно я исследовал инструмент GitOps Arog и вошел в ворота GitOps в одной статье.Я испытал гладкий опыт объединения онлайн-развертывания в Git для разработчиков.Онлайн-выпуск и откат git commit/reserve стал таким простым.

I. Обзор

1.1 Когда Argo CD

argo CD — это декларативный инструмент непрерывной интеграции gitops для k8s.

1.2 Зачем использовать Argo CD

Определения/конфигурации и среды приложений должны быть объявлены и управляться версиями, а развертывание приложений и управление жизненным циклом должны быть автоматизированы, доступны для аудита и понятны.

1.3 Использование

1.3.1 Как это работает

Argo CD следует шаблону GitOps, который использует репозиторий Git в качестве источника истины для определения желаемого состояния приложения. Манифест Kubernetes можно указать несколькими способами:

  • kustomize applications
  • helm charts
  • ksonnet applications
  • jsonnet files
  • Plain directory of YAML/json manifests
  • Any custom config management tool configured as a config management plugin

Argo CD автоматически развертывает желаемое состояние приложения в указанной целевой среде. Развертывания приложений могут отслеживать обновления ветвей, тегов или прикрепленных к определенной версии манифеста по мере фиксации Git. Дополнительные сведения о различных доступных стратегиях трассировки см. в разделе Стратегии трассировки.

1.3.2 Архитектура

图片

Argo CD реализован в виде контроллера kubernetes, который постоянно отслеживает запущенные приложения и сравнивает текущее активное состояние с желаемым целевым состоянием (указано в репозитории Git). Развернутое приложение в активном нецелевом состоянии считается OutOfSync. Argo CD сообщает и визуализирует различия, предоставляя возможность автоматически или вручную синхронизировать состояние в реальном времени с желаемым целевым состоянием. Любые изменения, внесенные в желаемое целевое состояние в репозитории Git, автоматически применяются и отражаются в указанной целевой среде.

Две основные концепции

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

2.1 Понимание основ

2.1.1 очки знаний k8s

  • A Beginner-Friendly Introduction to Containers, VMs and Docker
  • Introduction to Kubernetes
  • Tutorials
  • Hands on labs

2.1.2 Пользовательский шаблон

  • Kustomize
  • Helm
  • Ksonnet

2.1.3 Интеграция с Дженкинсом

  • Jenkins User Guide

Три основные концепции

Предполагается, что вы знакомы с основными понятиями Git, Docker, Kubernetes, непрерывной доставки и GitOps.

  • Application: набор ресурсов Kubernetes, определенный манифестом. Это пользовательское определение ресурса (CRD).
  • Application source type: какой инструмент использовать для создания приложения
  • Target state: желаемое состояние приложения, представленное файлом в репозитории Git.
  • Live state: статус приложения в реальном времени. Какие модули развернуты и т. д.
  • Sync status: Соответствует ли состояние в реальном времени целевому состоянию. Является ли развернутое приложение таким же, каким его называет Git?
  • Sync: процесс перевода приложения в целевое состояние. Например. Применив изменения к кластеру Kubernetes.
  • Refresh: Сравните последний код в Git с текущим состоянием. Узнайте, что отличается.
  • Health: Работает ли работоспособность приложения? Может ли он выполнить запрос?
  • Tool: Инструмент для создания манифестов из файловых каталогов. Например. Настройка или Ксоннет. См. Типы источников приложений.

Четыре установки и развертывания

4.1 Установка компакт-диска Арго

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Это создаст новое пространство имен argocd, в котором будут находиться служба Argo CD и ресурсы приложения.

4.2 Загрузка интерфейса командной строки компакт-диска Argo

отGitHub.com/Арго про/AR…Инструменты компакт-диска

  • Mac можно установить следующим образом
brew tap argoproj/tap
brew install argoproj/tap/argocd
  • установка линукс
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
chmod +x /usr/local/bin/argocd

Вы можете обратиться к:Argo pro is.GitHub.IO/Argo-Chengdu/Processing…

4.3 Доступ к серверу Argo CD API

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

Перенаправление порта

[root@master ~]# kubectl port-forward svc/argocd-server -n argocd --address 0.0.0.0 8080:443

4.4 Вход в Argo через интерфейс командной строки

Начальный пароль будет автоматически сгенерирован как имя контейнера сервера Argo CD API. Его можно получить с помощью следующей команды:

\

使用用户名admin和上面的密码,登录到Argo CD的IP或主机名:
argocd login <ARGOCD_SERVER>

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

argocd account update-password
# 登录
[root@master ~]# argocd login localhost:8080
WARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)? yes
Username: admin
Password: 
'admin' logged in successfully
Context 'localhost:8080' updated
# 修改密码
[root@master ~]# argocd account update-password
*** Enter current password: 
*** Enter new password: 
*** Confirm new password: 
Password updated
Context 'localhost:8080' updated

4.5 Зарегистрируйте кластер для развертывания приложения (необязательно)

Этот шаг регистрирует учетные данные кластера на компакт-диске Argo и требуется только при развертывании во внешнем кластере. При внутреннем развертывании (в том же кластере, где работает Argo CD) https://kubernetes.default.svc следует использовать в качестве адреса сервера K8s API приложения.

Сначала перечислите все контексты кластера в текущем kubconfig:

argocd cluster add

Приведенная выше команда устанавливает ServiceAccount (argocd-manager) в пространство имен kube-system для этого контекста kubectl и привязывает учетную запись службы к роли ClusterRole на уровне администратора. Argo CD использует этот токен служебной учетной записи для выполнения своих административных задач (т. е. развертывания/мониторинга).

Правила роли argocd-manager-role можно изменить, чтобы иметь права на создание, обновление, исправление и удаление только для ограниченного набора пространств имен, групп и видов. Однако в области кластера для работы Argo CD требуются привилегии получения, списка и мониторинга.

4.6 Создание приложения из репозитория Git

Пример приложения гостевой книги для защиты репозитория, чтобы проиллюстрировать, как работает Argo CD:GitHub.com/Арго про/AR…

图片

4.6.1 Создание приложения через интерфейс командной строки

You can access Argo CD using port forwarding: add --port-forward-namespace argocd flag to every CLI command or set ARGOCD_OPTS environment variable: export ARGOCD_OPTS='--port-forward-namespace argocd':

argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default

4.6.2 Создание приложения через веб-интерфейс

Откройте в браузере внешний пользовательский интерфейс Argo CD, затем войдите в систему, посетив IP-адрес/имя хоста в браузере и используя учетные данные, заданные на шаге 4.

图片

Назовите свое приложение «Гостевая книга», используйте значения проекта по умолчанию и оставьте политику синхронизации «Вручную»:

图片

Connect the GitHub.com/RedHatSeries/AR…  repo to Argo CD by setting repository url to the github repo url, leave revision as HEAD, and set the path to guestbook:

Примечание: Склад может использовать мой форк.В настоящее время и адрес зеркала изменен, его можно тянуть нормально.

图片

Для цели установите кластер внутри кластера и установите пространство имен по умолчанию:

图片

После заполнения приведенной выше информации нажмите «Создать» в верхней части пользовательского интерфейса, чтобы создать приложение для гостевой книги:

图片

4.7 Синхронизация (развертывание) приложений

После создания приложения гостевой книги вы можете просмотреть его статус:

[root@master ~]# argocd app get guestbook
Name:               guestbook
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://localhost:8080/applications/guestbook
Repo:               https://github.com/redhatxl/argocd-example-apps.git
Target:             HEAD
Path:               guestbook
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        OutOfSync from HEAD (4973f15)
Health Status:      Missing

GROUP  KIND        NAMESPACE  NAME          STATUS     HEALTH   HOOK  MESSAGE
       Service     default    guestbook-ui  OutOfSync  Missing        
apps   Deployment  default    guestbook-ui  OutOfSync  Missing
由于尚未部署应用程序,并且尚未创建Kubernetes资源,因此应用程序状态最初处于OutOfSync状态。要同步(部署)应用程序,请运行:
[root@master ~]# argocd app sync guestbook
TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS    HEALTH        HOOK  MESSAGE
2020-01-24T12:59:13+08:00            Service     default          guestbook-ui  OutOfSync  Missing              
2020-01-24T12:59:13+08:00   apps  Deployment     default          guestbook-ui  OutOfSync  Missing              
2020-01-24T12:59:14+08:00            Service     default          guestbook-ui    Synced  Healthy              

Name:               guestbook
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://localhost:8080/applications/guestbook
Repo:               https://github.com/redhatxl/argocd-example-apps.git
Target:             HEAD
Path:               guestbook
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        Synced to HEAD (4973f15)
Health Status:      Progressing

Operation:          Sync
Sync Revision:      4973f150497aa18bc5fbd81b19102db2469eb6f0
Phase:              Succeeded
Start:              2020-01-24 12:59:11 +0800 CST
Finished:           2020-01-24 12:59:12 +0800 CST
Duration:           1s
Message:            successfully synced (all tasks run)

GROUP  KIND        NAMESPACE  NAME          STATUS  HEALTH       HOOK  MESSAGE
       Service     default    guestbook-ui  Synced  Healthy            service/guestbook-ui created
apps   Deployment  default    guestbook-ui  Synced  Progressing        deployment.apps/guestbook-ui created

图片

Эта команда извлекает манифест из репозитория и выполняет приложение kubectl к манифесту. Теперь приложение гостевой книги запущено, и теперь вы можете просматривать состояние работоспособности его компонентов ресурсов, журналов, событий и оценок:

Статус после развертывания:

图片

图片

[root@master ~]# kubectl  get all -l app=guestbook-ui
NAME                                READY   STATUS    RESTARTS   AGE
pod/guestbook-ui-7bc795dc8c-m69fl   1/1     Running   0          3m6s

NAME                                      DESIRED   CURRENT   READY   AGE
replicaset.apps/guestbook-ui-7bc795dc8c   1         1         1       3m6s

Измените способ доступа гостевой книги к NodePort.

图片

图片

Пятое руководство по эксплуатации

5.1 Обзор

Это руководство предназначено для администраторов и операторов, которые хотят установить и настроить компакт-диск Argo для других разработчиков.

5.2 Обзор архитектуры

图片

5.2.1 API Server

Сервер API — это сервер gRPC/REST, который предоставляет API, используемые системами веб-интерфейса, командной строки и CI/CD. На него возложены следующие обязанности:

  • Управление приложениями и отчеты о состоянии
  • Действия вызовов приложения (синхронизация, откат, определяемые пользователем)
  • Управление аутентификацией репозитория и кластера
  • Аутентификация и делегирование аутентификации внешним поставщикам удостоверений
  • Применение RBAC
  • Прослушивание/пересылка событий Git webhook

5.2.2 Repository Server

Служба репозитория — это внутренняя служба, которая поддерживает локальный репозиторий git, который кэширует манифесты приложений и использует его для создания и возврата манифестов kubernetes при предоставлении следующих входных данных.

  • URL репозитория
  • версия (коммит, тег, ветка)
  • Применить патч
  • Настройки шаблона

5.2.3 Application Controller

Контроллер приложений — это контроллер k8s, который использует его для постоянного мониторинга запущенного приложения и сравнения текущего состояния, а также назначения ожидаемого целевого состояния (из указанного репо) оставшемуся состоянию.Он обнаруживает состояние рассинхронизации приложения и необязательную задачу который вызывает любые пользовательские хуки для объявления периодических событий

5.3 Настройки объявления

5.3.1 Краткий справочник

Приложения, проекты и настройки Argo CD можно определять декларативно с помощью манифестов Kubernetes.

图片

5.3.2 Применение

CRD приложений — это объекты ресурсов Kubernetes, которые представляют развернутые экземпляры приложений в среде. Он определяется двумя ключевыми элементами информации:

  • Исходная ссылка (репозиторий, редакция, путь, среда) соответствует желаемому состоянию в Git.
  • Целевая ссылка для целевого кластера и пространства имен.

Минимальные технические характеристики приложения следующие:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    server: https://kubernetes.default.svc
    namespace: guestbook

Дополнительные поля см. в application.yaml.

Пространство имен должно совпадать с пространством имен компакт-диска Argo, обычно argocd.

По умолчанию удаление приложения не приводит к каскадному удалению, что приводит к удалению его ресурсов. Если вам нужно такое поведение, вам придется добавить финализаторы, которые вам, вероятно, не нужны.

Вы можете создать приложение, которое может создавать другие приложения, которые, в свою очередь, могут создавать другие приложения. Таким образом, вы можете декларативно управлять набором приложений, которые могут координировать развертывание и настройку. См. Начальная загрузка кластера.

CRD AppProject — это объекты ресурсов Kubernetes, представляющие логические группы приложений. Он определяется следующей ключевой информацией:

  • sourceRepos относится к репозиторию, из которого приложения в проекте могут извлекать манифесты.
  • Цель ссылается на кластер и пространство имен, в которых могут быть развернуты приложения в проекте.
  • Список ролей для сущностей и их определения прав доступа к ресурсам в проекте.