Установка Argo CD
Argo CD
Перед началом работы
-
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id. -
Убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Установите kubectl
и настройте его на работу с созданным кластером.
Установка с помощью Yandex Cloud Marketplace
- Перейдите на страницу каталога
и выберите сервис Managed Service for Kubernetes. - Нажмите на имя нужного кластера и выберите вкладку
Marketplace. - В разделе Доступные для установки приложения выберите Argo CD и нажмите кнопку Перейти к установке.
- Задайте настройки приложения:
- Пространство имен — создайте новое пространство имен (например,
argo-cd-space). Если вы оставите пространство имен по умолчанию, Argo CD может работать некорректно. - Название приложения — укажите название приложения.
- Пространство имен — создайте новое пространство имен (например,
- Нажмите кнопку Установить.
- Дождитесь перехода приложения в статус
Deployed.
Установка с помощью Helm-чарта
-
Установите менеджер пакетов Helm
версии не ниже 3.8.0. -
Для установки Helm-чарта
с Argo CD выполните команду:helm pull oci://cr.yandex/yc-marketplace/yandex-cloud/argo/chart/argo-cd \ --version 7.3.11-2 \ --untar && \ helm install \ --namespace <пространство_имен> \ --create-namespace \ argo-cd ./argo-cd/Примечание
Если вы используете версию Helm ниже 3.8.0, добавьте в начало команды строку
export HELM_EXPERIMENTAL_OCI=1 && \, чтобы включить поддержку Open Container Initiative (OCI) в клиенте Helm.Если вы укажете в параметре
namespaceпространство имен по умолчанию, Argo CD может работать некорректно. Рекомендуем указывать значение, отличное от всех существующих пространств имен (например,argo-cd-space).
Доступ к приложению
Вы можете открыть приложение Argo CD через localhost, по выделенному IP-адресу через сетевой балансировщик Yandex Network Load Balancer или по URL через L7-балансировщик Yandex Application Load Balancer. Первый способ проще в настройке и не требует дополнительных затрат на балансировщики. Однако через localhost приложение доступно, только пока активна переадресация портов, а балансировщики обеспечивают постоянный доступ к Argo CD.
Перед тем как настроить доступ к Argo CD, получите пароль администратора (admin):
kubectl --namespace <пространство_имен> get secret argocd-initial-admin-secret \
--output jsonpath="{.data.password}" | base64 -d
Пароль понадобится для авторизации в Argo CD.
Открыть приложение через localhost
-
Настройте переадресацию порта Argo CD на локальный компьютер:
kubectl port-forward service/<название_приложения>-argocd-server \ --namespace <пространство_имен> 8080:443В команде укажите название приложения, которое вы задали при установке.
-
Перейдите по ссылке
https://localhost:8080и авторизуйтесь с учетными данными администратора.
Открыть приложение по выделенному IP-адресу через Network Load Balancer
-
Сохраните следующую спецификацию для создания сервиса типа
LoadBalancerв файлload-balancer.yaml. В результате вы создадите балансировщик Network Load Balancer:apiVersion: v1 kind: Service metadata: name: argocd-load-balancer namespace: <пространство_имен> spec: type: LoadBalancer ports: - port: 443 name: load-balancer-port-ssl targetPort: 8080 # Kubernetes-метка селектора, использованная в объекте Deployment с именем <название_приложения>-argocd-server. selector: app.kubernetes.io/name: argocd-serverВ спецификации укажите пространство имен, в котором вы установили приложение Argo CD.
Так как в спецификации не задан IP-адрес, балансировщику будет присвоен динамический публичный IP-адрес. Вы можете добавить поле
spec.loadBalancerIPи указать в нем заранее зарезервированный статический IP-адрес.Подробнее о спецификации см. в справочнике сервиса.
-
Примените спецификацию и создайте сетевой балансировщик нагрузки:
kubectl apply -f load-balancer.yaml --namespace <пространство_имен> -
Получите IP-адрес созданного сетевого балансировщика:
Консоль управления-
В консоли управления
выберите каталог, где развернут кластер Managed Service for Kubernetes. -
Выберите сервис Network Load Balancer.
В разделе Балансировщики отображен сетевой балансировщик нагрузки с префиксом
k8sв имени и уникальным идентификатором кластера Kubernetes в описании. -
Скопируйте значение поля IP-адрес для нужного балансировщика.
-
-
Перейдите по ссылке
https://<IP-адрес_балансировщика>и авторизуйтесь с учетными данными администратора.
Открыть приложение по URL через Application Load Balancer
-
Зарегистрируйте публичную доменную зону и делегируйте домен.
-
Если у вас уже есть сертификат для доменной зоны, добавьте сведения о нем в сервис Yandex Certificate Manager. Если нет, выпустите новый сертификат от Let's Encrypt® и добавьте его в Certificate Manager.
-
Получите идентификатор сертификата:
yc certificate-manager certificate listРезультат выполнения команды:
+----------------------+-----------+----------------+---------------------+----------+--------+ | ID | NAME | DOMAINS | NOT AFTER | TYPE | STATUS | +----------------------+-----------+----------------+---------------------+----------+--------+ | fpq8diorouhp******** | cert-test | test.ru | 2022-01-06 17:19:37 | IMPORTED | ISSUED | +----------------------+-----------+----------------+---------------------+----------+--------+ -
Настройте группы безопасности, необходимые для работы L7-балансировщика Application Load Balancer.
-
Установите Ingress-контроллер Application Load Balancer.
Совет
Вместо Ingress-контроллера Application Load Balancer рекомендуется использовать новый контроллер Yandex Cloud Gwin.
-
Для работы с L7-балансировщиком Application Load Balancer требуется сервис типа
NodePort, но Argo CD запускает сервер с сервисом типаClusterIP. Измените тип сервиса:-
Откройте файл с описанием объекта
Service:kubectl -n <пространство_имен> edit svc <название_приложения>-argocd-server -
Замените значение
typeнаNodePort:spec: ... type: NodePort ...
-
-
L7-балансировщик Application Load Balancer снимает TLS-шифрование с входящего трафика. Чтобы избежать бесконечного перенаправления, отключите для Argo CD перенаправление с HTTP на HTTPS:
-
Откройте конфигурационный файл
argocd-cmd-params-cm:kubectl -n <пространство_имен> edit configmap argocd-cmd-params-cm -
Замените значение
server.insecureнаtrue:data: ... server.insecure: "true" ...
-
-
Создайте файл
ingress.yamlи укажите в нем настройки L7-балансировщика Application Load Balancer:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: argocd-ingress namespace: argo-cd-space annotations: ingress.alb.yc.io/subnets: <идентификатор_подсети_балансировщика> ingress.alb.yc.io/security-groups: <идентификатор_группы_безопасности_балансировщика> ingress.alb.yc.io/external-ipv4-address: auto ingress.alb.yc.io/group-name: my-ingress-group spec: tls: - hosts: - <доменное_имя> secretName: yc-certmgr-cert-id-<идентификатор_TLS-сертификата> rules: - host: <доменное_имя> http: paths: - path: / pathType: Prefix backend: service: name: argo-cd-argocd-server port: number: 80Подробнее о настройках см. в разделе Настройка L7-балансировщика Yandex Application Load Balancer с помощью Ingress-контроллера.
-
В директории с файлом
ingress.yamlвыполните команду:kubectl apply -f ingress.yamlБудет создан ресурс
Ingress. По его конфигурации ALB Ingress Controller автоматически развернет L7-балансировщик Application Load Balancer. -
Убедитесь, что L7-балансировщик создан. Для этого выполните команду:
kubectl get ingress argocd-ingressИзучите результат выполнения команды. Если L7-балансировщик создан, в поле
ADDRESSдолжен отображаться его IP-адрес:NAME CLASS HOSTS ADDRESS PORTS AGE argocd-ingress <none> <доменное_имя> 51.250.**.*** 80, 443 15h -
Добавьте A-запись в зону вашего домена. В поле Значение укажите публичный IP-адрес L7-балансировщика Application Load Balancer.
-
Откройте в браузере ссылку
https://<доменное_имя>и авторизуйтесь с учетными данными администратора.Примечание
Если ресурс недоступен по указанному URL, то убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.