задний план
Концепция 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 относится к репозиторию, из которого приложения в проекте могут извлекать манифесты.
- Цель ссылается на кластер и пространство имен, в которых могут быть развернуты приложения в проекте.
- Список ролей для сущностей и их определения прав доступа к ресурсам в проекте.