Управление
1. Основные пользовательские ресурсы
Оператор вводит несколько ключевых Custom Resources (CR), с помощью которых задаётся желаемое состояние Argo CD.
-
ArgoCD. Описывает конфигурацию всего кластера Argo CD.
-
AppProject. Определяет проект — логическую группу приложений с ограничениями. Создаётся в том же пространстве имен, где развёрнут инстанс ArgoCD.
-
Application. Описывает конкретное GitOps‑приложение: откуда брать манифесты и куда выполнять развёртывание.
2. Интеграция со StarVault (SSO)
Для настройки единого входа через StarVault выполните шаги.
-
После развертывания оператора в пространстве имен argocd-operator необходимо добавить label:
kubectl label namespace argocd-operator nova-platform.io/trusted-ca-bundle=enabledПроверьте, что label добавился успешно с помощью команды:
kubectl get namespace argocd-operator -o yaml | grep trusted-ca-bundle -
Перейдите в StarVault в раздел Доступ → OIDC Провайдер. Нажмите + Создать приложение. Заполните обязательные поля.
-
Имя приложения:
oidc-auth-argocd -
Тип:
confidential -
URI перенаправления:
https://<Имя ingress ArgoCD инстанса>/auth/callback -
Под заголовком Назначить доступ выберите Ограничить доступ выбранным пользователям и в поле Название назначения укажите необходимое назначение (например,
kubeadmins-assignment)
-
-
Нажмите Создать.
-
Перейдите на страницу Доступ → OIDC Провайдер → Провайдеры → nova → Редактировать провайдера и добавьте созданное приложение в список разрешённых.
-
Перейдите в веб-интерфейс Nova на вкладку Операторы → Установленные операторы. Настроить ArgoCD можно двумя способами:
-
С помощью манифеста.
Ниже представлен пример манифеста Argo CD:
Пример манифеста
apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: argocd-sample namespace: argocd-operator spec: controller: respectRBAC: strict resources: limits: cpu: 2000m memory: 2048Mi requests: cpu: 250m memory: 1024Mi ha: enabled: false resources: limits: cpu: 500m memory: 256Mi requests: cpu: 250m memory: 128Mi redis: resources: limits: cpu: 500m memory: 256Mi requests: cpu: 250m memory: 128Mi repo: resources: limits: cpu: 1000m memory: 512Mi requests: cpu: 250m memory: 256Mi server: insecure: true trustedCA: volumes: - configMap: name: trusted-ca-bundle name: cluster-trusted-ca volumeMounts: - mountPath: /etc/ssl/certs/ca-certificates.crt name: cluster-trusted-ca subPath: ca-certificates.pem resources: limits: cpu: 500m memory: 256Mi requests: cpu: 125m memory: 128Mi host: argocd.apps.example.platform ingress: enabled: true ingressClassName: nginx-public tls: - hosts: - argocd.apps.example.platform secretName: default-ingress-certificate # Настройка SSO через StarVault (OIDC) oidcConfig: | name: Nova OAuth (1) issuer: https://<FQDN_StarVault>/v1/identity/oidc/provider/nova (2) clientID: <id> (3) clientSecret: <secret> (4) requestedScopes: (5) - openid - profile - email - groups requestedIDTokenClaims: (6) groups: essential: true # Настройка RBAC rbac: defaultPolicy: 'role:readonly' (7) policy: | (8) g, kubeadmins, role:admin p, role:tester, applications, sync, my-project/*, allow g, qa-team, role:tester policyMatcherMode: glob (9) scopes: '[email,groups]' (10)1 name— отображаемое имя метода авторизации (задаётся произвольно).2 issuer— URL OIDC‑провайдера в StarVault (формат:https://<FQDN_StarVault>/v1/identity/oidc/provider/nova).3 clientID— идентификатор приложения, созданного в StarVault для ArgoCD.4 clientSecret— секрет приложения, созданного в StarVault для ArgoCD.5 requestedScopes— запрашиваемые OAuth‑скопы:openid,profile,email,groups.6 requestedIDTokenClaims— дополнительные требования к ID‑токену. Здесь указано, что клеймgroupsявляется обязательным.7 defaultPolicy— роль, назначаемая пользователям по умолчанию (здесь —role:readonly).8 policy— правила RBAC в формате Casbin:
-
g, <subject>, <inherited-subject>— привязка группы к роли. -
p, <subject>, <resource>, <action>, <object>, <effect>— определение кастомной роли. ---
9 policyMatcherMode: glob— режим сопоставления шаблонов в политиках (glob‑маски).10 scopes: '[email,groups]'— список скопов, которые будут передаваться в политиках RBAC (используются для матчинга групп). -
-
С помощью формы. Заполните обязательные поля формы и после заполнения нажмите Создать.
-
|
Параметры |
3. Настройка веб-интерфейса для Rollout Extension
Для добавления расширения Rollout в веб-интерфейсе Argo CD необходимо предварительно установить само расширение.
Перейдите к Операторы→Установленные операторы. Нажмите на Argo CD. Перейдите ко вкладке Argo CD и нажмите на созданный экземпляр. Перейдите на вкладку YAML или нажмите по кнопке действия на Редактировать ArgoCD.
В манифест CR ArgoCD в секцию spec.server добавьте следующие строки:
initContainers:
- env:
- name: EXTENSION_URL
value: >-
https://s3.ru-msk.k2.cloud/downloads-nova-platform-io/community-operators/argoproj-labs/rollout-extension/releases/download/v0.3.6/extension.tar
image: >-
hub.nova-platform.io/registry/community-operators/argoprojlabs/argocd-extension-installer:v0.0.8
name: rollout-extension
securityContext:
allowPrivilegeEscalation: false
volumeMounts:
- mountPath: /tmp/extensions/
name: extensions
Также в spec добавьте:
volumes:
- emptyDir: {}
name: extensions
volumesMounts:
- mountPath: /tmp/extensions/
name: extensions
|
Для инсталляций, использующих Universe необходимо использовать ссылку для параметра |
4. Настройка секрета с учётными данными для подключения к репозиторию (для CR Application)
В пространстве имен, где развёрнут экземпляр Argo CD, создайте секрет с произвольным именем, содержащий необходимые ключи. Обязательно добавьте label argocd.argoproj.io/secret-type.
apiVersion: v1
kind: Secret
metadata:
name: secret-git-repo
namespace: argocd-operator
labels:
argocd.argoproj.io/secret-type: repository
data:
url: https://git.local/project/argo-demo.git
username: git-user
password: git-password
apiVersion: v1
kind: Secret
metadata:
name: secret-git-repo
namespace: argocd-operator
labels:
argocd.argoproj.io/secret-type: repo-creds
data:
url: https://git.local/project/ (1)
username: git-user
password: git-password
| 1 | Все репозитории внутри project |
apiVersion: v1
kind: Secret
metadata:
name: nova-git-ssh-creds
namespace: argocd-operator
labels:
argocd.argoproj.io/secret-type: repo-creds
stringData:
url: ssh://git.local/project/
sshPrivateKey: |
-----BEGIN OPENSSH PRIVATE KEY-----
...
-----END OPENSSH PRIVATE KEY-----
5. Добавление сертификатов для доверия к внешним git-репозиториям
Для подключения к репозиториям, использующим самоподписанные или корпоративные сертификаты, добавьте в манифест CR ArgoCD параметры:
Добавьте в spec.repo следующие строки:
systemCATrust:
configMaps:
- name: trusted-ca-bundle (1)
optional: true (2)
items:
- key: ca-certificates.pem (3)
path: nova-ca-bundle.crt (4)
secrets:
- name: fallback-ca-secret
items:
- key: ca.crt
path: fallback-ca.crt
| 1 | Имя CM |
| 2 | Необязательный параметр, позволяет игнорировать ошибки в случае отсутствия указанной CM/Secret |
| 3 | Ключ внутри CM |
| 4 | Имя файла, под которым оператор запишет содержимое в директорию с сертификатами внутри контейнера - обязательно в формате .crt |
6. Получение пароля учётной записи администратора
При создании экземпляра Argo CD оператор генерирует пароль локальной учётной записи admin и сохраняет его в секрете <имя_argocd_инстанса>-cluster в том же пространстве имён, где развёрнут экземпляр. Пароль хранится в ключе admin.password.
6.1. Получение пароля с помощью kubectl
kubectl -n argocd-operator get secret argocd-sample-cluster \
-o jsonpath='{.data.admin\.password}' | base64 -d; echo
Здесь argocd-sample — имя CR ArgoCD (metadata.name). Список секретов экземпляра можно получить командой:
kubectl -n argocd-operator get secrets -l app.kubernetes.io/part-of=argocd
NAME TYPE DATA AGE
argocd-sample-ca kubernetes.io/tls 3 5d
argocd-sample-cluster Opaque 1 5d
argocd-sample-default-cluster-config Opaque 5 5d
argocd-sample-tls kubernetes.io/tls 2 5d
6.2. Получение пароля через Nova Console
-
Перейдите в раздел Ресурсы → Secrets пространства имён, где развёрнут экземпляр Argo CD (по умолчанию
argocd-operator).
-
Выберите секрет
<имя_argocd_инстанса>-cluster. -
В блоке Данные нажмите Показать значения и скопируйте значение ключа
admin.password.
6.3. Вход и смена пароля
Для входа в веб-интерфейс используйте логин admin и полученный пароль. Кнопка входа по логину и паролю доступна на странице авторизации вместе с кнопкой входа через SSO.
Сменить пароль можно двумя способами:
-
из интерфейса или CLI Argo CD:
argocd login <Имя ingress ArgoCD инстанса> --username admin --password <текущий пароль> argocd account update-password -
изменив значение ключа
admin.passwordв секрете<имя_argocd_инстанса>-cluster. Оператор отследит изменение, пересчитает bcrypt-хэш и обновит секретargocd-secret, после чего новый пароль вступит в силу.
|
Если локальная учётная запись администратора не требуется (например, используется только SSO через StarVault), отключите её параметром |
7. Настройка Source Hydrator
Source Hydrator (гидратор манифестов) реализует паттерн rendered manifests: Argo CD самостоятельно рендерит Helm-, Kustomize- или Jsonnet-источник, коммитит полученные Kubernetes-манифесты в отдельную ветку git-репозитория и синхронизирует кластер уже из неё. Это позволяет видеть и хранить в git фактические манифесты, применяемые к кластеру, а также использовать ветки как границы окружений (dev/stage/prod).
|
Оператор Argo CD не управляет гидратором: в CR ArgoCD отсутствуют параметры для включения этой возможности и для развёртывания компонента commit server. При этом версия Argo CD, поставляемая с оператором |
Ограничения, которые следует учитывать перед включением:
-
в состав манифестов, попадающих в git, не должны подставляться секреты (плагины типа SOPS или Vault-плагин использовать нельзя — значения окажутся в репозитории в открытом виде);
-
параметр
syncSource.pathне может указывать на корень репозитория; -
одна и та же ветка не должна использоваться для гидрации несколькими экземплярами Argo CD;
-
начиная с Argo CD v3.3 гидратор не удаляет из целевого каталога файлы, отсутствующие в текущем результате рендеринга — устаревшие файлы удаляются вручную.
7.1. Включение гидратора в CR ArgoCD
Добавьте в манифест CR ArgoCD переменную окружения ARGOCD_HYDRATOR_ENABLED:
spec:
repo:
env:
- name: ARGOCD_HYDRATOR_ENABLED
value: 'true'
controller: (1)
env:
- name: ARGOCD_HYDRATOR_ENABLED
value: 'true'
| 1 | spec.controller — обязательный параметр, включает контроллер гидратора, который выполняет рендеринг и обращается к commit server. |
После сохранения CR оператор автоматически перезапускает соответствующие компоненты Argo CD, дополнительных действий не требуется.
7.2. Создание секрета с правом записи в репозиторий
Гидратор выполняет push в целевую ветку, поэтому обычного секрета с меткой argocd.argoproj.io/secret-type: repository (см. раздел 5) недостаточно. Создайте отдельный секрет с меткой argocd.argoproj.io/secret-type: repository-write и учётными данными сервисной учётной записи, имеющей право записи в репозиторий.
apiVersion: v1
kind: Secret
metadata:
name: git-write-creds
namespace: argocd-operator
labels:
argocd.argoproj.io/secret-type: repository-write
stringData:
url: https://git.local/project/argo-demo.git
username: <username>
password: <token>
7.3. Создание ресурсов commit server
Компонент commit server не создаётся оператором. Примените приведённый ниже манифест в пространстве имён, где развёрнут экземпляр Argo CD.
Пример манифеста
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: commit-server
app.kubernetes.io/name: argocd-commit-server
app.kubernetes.io/part-of: argocd
name: argocd-commit-server
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: commit-server
app.kubernetes.io/name: argocd-commit-server
app.kubernetes.io/part-of: argocd
name: argocd-commit-server (1)
spec:
ports:
- name: server
port: 8086
protocol: TCP
targetPort: 8086
- name: metrics
port: 8087
protocol: TCP
targetPort: 8087
selector:
app.kubernetes.io/name: argocd-commit-server
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: commit-server
app.kubernetes.io/name: argocd-commit-server
app.kubernetes.io/part-of: argocd
name: argocd-commit-server
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-commit-server
template:
metadata:
labels:
app.kubernetes.io/name: argocd-commit-server
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/name: argocd-commit-server
topologyKey: kubernetes.io/hostname
weight: 100
- podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/part-of: argocd
topologyKey: kubernetes.io/hostname
weight: 5
automountServiceAccountToken: false
containers:
- args:
- /usr/local/bin/argocd-commit-server
env:
- name: ARGOCD_COMMIT_SERVER_LISTEN_ADDRESS
valueFrom:
configMapKeyRef:
key: commitserver.listen.address
name: argocd-cmd-params-cm
optional: true
- name: ARGOCD_COMMIT_SERVER_METRICS_LISTEN_ADDRESS
valueFrom:
configMapKeyRef:
key: commitserver.metrics.listen.address
name: argocd-cmd-params-cm
optional: true
- name: ARGOCD_COMMIT_SERVER_LOGFORMAT
valueFrom:
configMapKeyRef:
key: commitserver.log.format
name: argocd-cmd-params-cm
optional: true
- name: ARGOCD_COMMIT_SERVER_LOGLEVEL
valueFrom:
configMapKeyRef:
key: commitserver.log.level
name: argocd-cmd-params-cm
optional: true
- name: ARGOCD_LOG_FORMAT_TIMESTAMP
valueFrom:
configMapKeyRef:
key: log.format.timestamp
name: argocd-cmd-params-cm
optional: true
image: hub.nova-platform.io/registry/community-operators/argoproj/argocd:v3.3.10 (2)
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
httpGet:
path: /healthz?full=true
port: 8087
initialDelaySeconds: 30
periodSeconds: 30
timeoutSeconds: 5
name: argocd-commit-server
ports:
- containerPort: 8086
- containerPort: 8087
readinessProbe:
httpGet:
path: /healthz
port: 8087
initialDelaySeconds: 5
periodSeconds: 10
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
volumeMounts:
- mountPath: /app/config/ssh
name: ssh-known-hosts
- mountPath: /app/config/tls
name: tls-certs
- mountPath: /app/config/gpg/source
name: gpg-keys
- mountPath: /app/config/gpg/keys
name: gpg-keyring
- mountPath: /tmp (3)
name: tmp
serviceAccountName: argocd-commit-server
volumes:
- configMap:
name: argocd-ssh-known-hosts-cm (4)
name: ssh-known-hosts
- configMap:
name: argocd-tls-certs-cm
name: tls-certs
- configMap:
name: argocd-gpg-keys-cm
name: gpg-keys
- emptyDir: {}
name: gpg-keyring
- emptyDir: {}
name: tmp
- name: argocd-commit-server-tls
secret:
items:
- key: tls.crt
path: tls.crt
- key: tls.key
path: tls.key
- key: ca.crt
path: ca.crt
optional: true
secretName: argocd-commit-server-tls
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
labels:
app.kubernetes.io/component: commit-server
app.kubernetes.io/name: argocd-commit-server
app.kubernetes.io/part-of: argocd
name: argocd-commit-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: <имя_argocd_инстанса>-application-controller (5)
ports:
- port: 8086
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 8087
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-commit-server
policyTypes:
- Ingress
7.4. Создание Application с использованием гидратора
В CR Application вместо секции spec.source указывается секция spec.sourceHydrator. Одновременное использование spec.source и spec.sourceHydrator не допускается.
Пример манифеста
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: argo-demo
namespace: argocd-operator
spec:
destination:
namespace: default
server: 'https://kubernetes.default.svc'
project: default
sourceHydrator:
drySource: (1)
path: helm-guestbook
repoURL: >-
https://git.local/project/argo-demo.git
targetRevision: hydro
syncSource: (2)
path: manifests
targetBranch: env/dev
hydrateTo: (3)
targetBranch: env/dev-next
| 1 | drySource — источник исходных манифестов: репозиторий, ветка или тег (targetRevision) и каталог с Helm-чартом либо Kustomize-конфигурацией. |
| 2 | syncSource — ветка (targetBranch) и каталог (path), в которые Argo CD записывает отрендеренные манифесты и из которых выполняет синхронизацию с кластером. Значение path не может быть корнем репозитория. |
| 3 | hydrateTo — необязательный параметр. Если он задан, отрендеренные манифесты записываются в указанную промежуточную ветку, а перенос изменений в ветку syncSource выполняется внешним процессом (например, через merge request). Такой режим применяется для согласования изменений перед выкаткой. |
7.5. Проверка настройки
-
Убедитесь, что под commit server запущен:
kubectl -n argocd-operator get deploy argocd-commit-server -
Убедитесь, что гидратор включён в контроллере:
kubectl -n argocd-operator get statefulset <имя_argocd_инстанса>-application-controller \ -o jsonpath='{.spec.template.spec.containers[0].env[?(@.name=="ARGOCD_HYDRATOR_ENABLED")].value}'; echo -
Проверьте состояние гидрации приложения:
kubectl -n argocd-operator get application argo-demo -o jsonpath='{.status.sourceHydrator}'; echoВ поле
status.sourceHydrator.lastSuccessfulOperationотображаются идентификаторы исходного (drySHA) и отрендеренного (hydratedSHA) коммитов. В целевой ветке репозитория должны появиться отрендеренные манифесты.
|
При обновлении оператора Argo CD ресурсы commit server не обновляются автоматически. После обновления приведите версию образа в манифесте commit server в соответствие с новой версией Argo CD см. примечание. Также обратите внимание, что ресурсы, созданные вручную, не удаляются при удалении CR ArgoCD — их необходимо удалить отдельно см. раздел Удаление с помощью OperatorHUB |