На сьогоднішній день автоматизація управління додатками в Kubernetes стає невід'ємною частиною щоденної роботи DevOps-інженерів. У цій статті ми поговоримо про те, як ArgoCD може спростити ваше життя, якщо ви працюєте DevOps-інженером або плануєте ним стати. Завдяки ArgoCD управління додатками стане інтуїтивно зрозумілим процесом.
Що таке ArgoCD і навіщо воно потрібно?
На початку варто визначити саме формальне визначення цього терміну, у офіційній документації написано таке: ArgoCD — це декларативний інструмент безперервної доставки GitOps для Kubernetes.
Якщо ви раніше працювали з Kubernetes, то знаєте, як важливо підтримувати узгодженість між інфраструктурою додатків та їх конфігураціями. Тут на допомогу приходить GitOps — це підхід, за якого сховище Git є єдиним “джерелом правди” для різних конфігурацій додатків. Якщо говорити простими словами, це підхід, який полягає в зберіганні різних конфігураційних файлів, таких як yaml або json, у Git-репозиторії, і цей репозиторій описує загальну настройку та стан всієї інфраструктури.
Уявімо, як довелося б управляти інфраструктурою, якщо б підходу GitOps не існувало. Швидше за все, довелося б самостійно писати складні скрипти та вручну застосовувати манифести. Також, можливо, довелося б використовувати сторонні CI/CD рішення. Усі ці підходи могли б працювати, однак цей процес був би надто трудомістким, а з ростом кількості різних мікросервісів та інфраструктур робота ставала б дуже складною. Тому виникає потреба в автоматизації управління додатками в Kubernetes з використанням підходів GitOps, і саме тут з'являється потреба в ArgoCD.
Принцип роботи ArgoCD
Як працює ArgoCD?
Тепер розглянемо, як працює ArgoCD, почнемо з того, з чого складається цей інструмент. Архітектура ArgoCD включає наступні основні компоненти:
- API Server;
- Repository Server;
- Application Controller.
API Server здійснює управління всім додатком, надаючи інтерфейс REST API для взаємодії через веб-браузер, CLI та інші інструменти. Його завдання включають, наприклад, управління даними доступу та аутентифікацію. Repository Server відповідає за клонування Git-репозиторію, а також за кешування даних локально. Такий підхід прискорює процес синхронізації, оскільки система не запитує інформацію з репозиторію кожного разу. Також цей компонент генерує манифести для Kubernetes, для виконання цієї задачі необхідні такі дані, як URL-адреса репозиторію, ревізія (коміт, тег, гілка), шлях до додатку, а також різні специфічні налаштування шаблону. Application Controller здійснює моніторинг за станом додатків у кластері Kubernetes. Якщо стан, описаний у Git-репозиторії, змінюється, то цей сервіс виконує синхронізацію.
Далі розглянемо основні етапи роботи:
- Визначення бажаного стану
- Створюються файли конфігурації для Kubernetes, наприклад, YAML;
- Ці конфігураційні файли зберігаються в Git-репозиторії, який є “джерелом правди”.
- Моніторинг змін
- ArgoCD асинхронно порівнює поточний стан кластера з бажаним станом, який описано в Git-репозиторії.
- Автоматична синхронізація
- Якщо виявлено відмінності, то система автоматично застосовує зміни, якщо налаштовано режим автосинхронізації, в іншому випадку система буде чекати підтвердження від користувача через інтерфейс або CLI для подальшої синхронізації.
4.
Візуалізація - ArgoCD надає інтуїтивно зрозумілий веб-інтерфейс, в якому відображаються наступні об'єкти та параметри: Стан додатків; Динамічна візуалізація зв'язків між компонентами додатка; Логи та історія змін.
Візуалізація в ArgoCD
Як почати працювати з ArgoCD?
Для того, щоб почати роботу з цим інструментом, спочатку його потрібно встановити (в даному випадку, швидше за все, розгорнути), це робиться за допомогою наступних команд:
kubectl create namespace argocd
kubectl apply -n argocd -f \
https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Перед тим, як вводити ці команди, необхідно переконатися, що кластер Kubernetes запущений. Також ці команди без проблем можна виконати в середовищі minikube, що я й робив, тому не дивуйтеся, якщо на моїх скріншотах ви побачите слово "minikube" перед командою. Після застосування цього yaml-файлу в середовищі Kubernetes запустяться необхідні ресурси, такі як Deployment, Service, ConfigMap та інші. Також необхідно встановити утиліту CLI для ArgoCD, щоб зручніше працювати з цим інструментом через консоль, це можна зробити наступними командами:
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
За замовчуванням ArgoCD Web UI доступний через сервіс argocd-server
, щоб отримати до нього доступ, можна виконати проброс порту, для цього використовується наступна команда:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Тепер веб-інтерфейс ArgoCD доступний за адресою: https://localhost:8080.
Веб-інтерфейс, форма входу
За замовчуванням створюється обліковий запис з ім'ям користувача “admin”, а пароль за замовчуванням — це ім'я пода, щоб дізнатися пароль, потрібно виконати наступну команду:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
Далі підключається репозиторій, але перед цим його необхідно створити. У цій статті для демонстрації буде представлений простий репозиторій з конфігурацією сервера Nginx.
Його структура буде виглядати ось так:
example_repo/
├── manifests/
│ ├── deployment.yaml
│ ├── service.yaml
Вміст deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Вміст service.yaml
:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
Щоб додати репозиторій в ArgoCD, необхідно виконати наступну команду:
argocd repo add https://github.com/lezchook/example_repo --server localhost:8080
Або можна зробити те саме через веб-інтерфейс. Для цього переходимо за адресою https://localhost:8080, входимо, переходимо до розділу Settings, потім в Repositories і вибираємо Connect Repo, у ньому вказуємо URL на наш репозиторій.
Репозиторій успішно підключено!
Тепер можна створити новий додаток, для цього потрібно виконати наступну команду:
argocd app create nginx-app \
--repo https://github.com/lezchook/example_repo \
--path manifests \
--dest-server https://
--dest-namespace default
Або аналогічно можна зробити через веб-інтерфейс. Для цього переходимо до розділу Applications і вибираємо New Application, в поля вводимо дані, як вказано в команді.
Тепер потрібно синхронізувати створений додаток з маніфестами, які вказані в репозиторії. Для цього потрібно виконати наступну команду:
argocd app sync nginx-app
Аналогічно через графічний інтерфейс можна вибрати створений додаток nginx-app
і натискати на кнопку Sync.
Додаток успішно створено та синхронізовано!
Візуалізація розгорнутого додатку
Все готово, тепер залишається тільки перевірити, що все успішно розгорнулося і працює. Для цього виконуємо наступні команди:
kubectl get pods -l app=nginx
kubectl get svc nginx
Сервіси успішно розгорнуті
Як видно, всі сервіси успішно розгорнуті та працюють! Для повної впевненості можна зробити проброс портів з localhost:8081 на 80, на якому працює Nginx, щоб остаточно перевірити, що все працює коректно.
Nginx успішно працює!
Висновок
Як ви бачите, ArgoCD — це чудова технологія, яка спрощує життя DevOps-інженера. Сподіваюся, що ця стаття була для вас корисною, і ви будете застосовувати ArgoCD у своїх робочих завданнях. Дякую за увагу!
Корисна документація
1. https://argo-cd.readthedocs.io/en/stable/
2. https://argo-cd.readthedocs.io/en/latest/getting_started/
Перекладено з: Управление приложениями с помощью ArgoCD в Kubernetes