В этом разделе описаны шаги, необходимые для запуска экземпляра Argo CD в кластере DKP:
- Подготовка к запуску Argo CD;
- Развёртывание одного или нескольких экземпляров Argo CD;
- Дополнительные настройки Argo CD.
Подготовка к запуску Argo CD
Прежде чем создавать экземпляры Argo CD, выполните следующие шаги:
-
Дождитесь, пока модуль перейдёт в состояние
Ready.Проверить состояние модуля можно в веб-интерфейсе DKP или с помощью команды:
d8 k get module operator-argo -w
Подробная информация о настройках модуля приведена в документации модуля operator-argo.
После включения модуля operator-argo в кластере DKP станут доступны кастомные ресурсы Argo CD.
Чтобы запустить экземпляр Argo CD, необходимо создать объект ArgoCD. Работа с кастомными ресурсами, относящимися к области экземпляра Argo CD, описана в разделе «Использование».
Развёртывание экземпляра Argo CD
Параметры, доступные для конфигурации экземпляра Argo CD, приведены в документации модуля operator-argo.
Чтобы развернуть экземпляр Argo CD в неймспейсе argocd и опубликовать веб-интерфейс Argo CD через Ingress, используйте следующий пример (укажите собственные значения для <ARGOCD_DOMAIN> и <TLS_SECRET_NAME>):
apiVersion: v1
kind: Namespace
metadata:
name: argocd
---
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: argocd
namespace: argocd
spec:
server:
host: <ARGOCD_DOMAIN>
ingress:
enabled: true
tls:
- hosts:
- <ARGOCD_DOMAIN>
secretName: <TLS_SECRET_NAME>
insecure: true
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: argocd-ingress
namespace: argocd
spec:
dnsNames:
- <ARGOCD_DOMAIN>
issuerRef:
kind: ClusterIssuer
name: letsencrypt
secretName: <TLS_SECRET_NAME>
Параметр spec.server.insecure: true в примере выше отключает внутренний TLS у API-сервера Argo CD. Это позволяет избежать циклических перенаправлений при публикации через Ingress.
После создания объекта ArgoCD в неймспейсе argocd будут запущены компоненты Argo CD:
d8 k -n argocd get pods
NAME READY STATUS RESTARTS AGE
argocd-application-controller-0 1/1 Running 0 35m
argocd-dex-server-759fff8444-zglp4 1/1 Running 0 2d23h
argocd-redis-568f5b889c-jg5dr 1/1 Running 0 4d
argocd-repo-server-78d9d6bcc6-9rwcm 1/1 Running 0 3d22h
argocd-server-76597597f9-kfqdl 1/1 Running 0 35m
podinfo-ccdb96645-zv5tm 1/1 Running 0 2d20h
Когда все компоненты перейдут в статус Running, веб-интерфейс экземпляра Argo CD станет доступен по адресу, указанному в параметре spec.server.ingress.tls.hosts (в примере — https://<ARGOCD_DOMAIN>).
Настройка аутентификации и получения учётных данных описана в разделе «Настройка аутентификации и авторизации».
Доставка пользовательских приложений с помощью Argo CD описана в разделе «Использование».
Для работы с Argo CD можно использовать не только веб-интерфейс и кастомные ресурсы, но и CLI-утилиту argocd. Бинарный файл можно загрузить из раздела «Documentation» веб-интерфейса Argo CD. Инструкцию по работе с CLI-утилитой можно получить, выполнив argocd --help.
Развёртывание нескольких экземпляров Argo CD
Если в кластере требуется несколько экземпляров Argo CD, создайте для каждого из них отдельный неймспейс (или проект DKP) и отдельный объект ArgoCD.
Например, создайте:
- отдельный экземпляр для production-окружения;
- отдельный экземпляр для тестовых окружений;
- отдельный экземпляр для конкретной команды или проекта.
При таком подходе каждый экземпляр Argo CD управляется независимо и имеет собственную конфигурацию.
В одном неймспейсе поддерживается создание не более одного объекта ArgoCD.
Расширенные настройки
Включение режима высокой доступности
Чтобы включить режим высокой доступности, установите параметр spec.ha.enabled: true в объекте ArgoCD.
Пример:
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: argocd
namespace: argocd
spec:
ha:
enabled: true
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1"
memory: "1Gi"
Режим высокой доступности обеспечивает высокую доступность только для хранилища состояния Redis с использованием HAProxy. Он не делает все компоненты Argo CD высокодоступными автоматически.
Для запуска Argo CD в режиме высокой доступности требуется не менее трёх узлов кластера из-за правил pod anti-affinity. Кластеры, работающие только с IPv6, не поддерживаются.
При включённом режиме высокой доступности изменения в .spec.redis.resources не применяются. Ограничения и запросы ресурсов для Redis настраивайте через параметр .spec.ha.resources.
Предоставление доступа к кластерным ресурсам
По умолчанию экземпляр Argo CD получает привилегии только на неймспейс, в котором он запущен, и неймспейсы, помеченные лейблом argocd.argoproj.io/managed-by. Значение лейбла должно совпадать с названием неймспейса, в котором запущен экземпляр Argo CD.
Чтобы разрешить создание cluster-wide-ресурсов, укажите в параметре clusterConfigNamespaces настроек модуля operator-argo имя неймспейса, в котором запущен целевой экземпляр Argo CD.
Пример:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: operator-argo
spec:
enabled: true
settings:
clusterConfigNamespaces: argocd
version: 1
Если экземпляров Argo CD несколько, перечислите их в параметре clusterConfigNamespaces через запятую.
После внесения изменений в ModuleConfig автоматически будут созданы следующие кластерные роли (ClusterRole) и кластерные биндинги (ClusterRoleBinding):
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
argocds.argoproj.io/name: argocd
argocds.argoproj.io/namespace: argocd
labels:
app.kubernetes.io/managed-by: argocd
app.kubernetes.io/name: argocd
app.kubernetes.io/part-of: argocd
name: argocd-argocd-argocd-application-controller
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- apiGroups:
- ""
resources:
- serviceaccounts
verbs:
- impersonate
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
argocds.argoproj.io/name: argocd
argocds.argoproj.io/namespace: argocd
labels:
app.kubernetes.io/managed-by: argocd
app.kubernetes.io/name: argocd-application-controller
app.kubernetes.io/part-of: argocd
name: argocd-argocd-argocd-application-controller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: argocd-argocd-argocd-application-controller
subjects:
- kind: ServiceAccount
name: argocd-argocd-application-controller
namespace: argocd
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
argocds.argoproj.io/name: argocd
argocds.argoproj.io/namespace: argocd
labels:
app.kubernetes.io/managed-by: argocd
app.kubernetes.io/name: argocd
app.kubernetes.io/part-of: argocd
name: argocd-argocd-argocd-server
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- get
- delete
- patch
- apiGroups:
- argoproj.io
resources:
- applications
- applicationsets
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- events
verbs:
- list
- apiGroups:
- batch
resources:
- jobs
- cronjobs
- cronjobs/finalizers
verbs:
- create
- update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
argocds.argoproj.io/name: argocd
argocds.argoproj.io/namespace: argocd
labels:
app.kubernetes.io/managed-by: argocd
app.kubernetes.io/name: argocd-server
app.kubernetes.io/part-of: argocd
name: argocd-argocd-argocd-server
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: argocd-argocd-argocd-server
subjects:
- kind: ServiceAccount
name: argocd-argocd-server
namespace: argocd
Если полномочия, описанные в кластерных ролях по умолчанию, избыточны, в настройках объекта ArgoCD укажите spec.defaultClusterScopedRoleDisabled: true. В этом случае кластерные роли не будут созданы автоматически, и вы сможете самостоятельно описать необходимый уровень привилегий для ServiceAccount, используемого экземпляром Argo CD.
При необходимости уровень доступа к кластерным ресурсам можно переопределить на уровне объекта AppProject, используя параметры spec.clusterResourceBlacklist и spec.clusterResourceWhitelist.
Использование собственного домена кластера
Если в кластере используется домен, отличный от cluster.local, укажите его в параметре spec.clusterDomain объекта ArgoCD.
Пример:
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
name: argocd
namespace: argocd
spec:
clusterDomain: prod.local