Собираю единомышленников в телеграм канале -
Присоединяйся

Установка ArgoCD с доступом в интернет на серверах до банальности проста.
Другое дело затащить все компоненты в закрытый контур.

Online установка ArgoCD
Вытаскиваем версию в переменную ARGO_VERSION
1
| export ARGO_VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
|
Создаём окружение и применяем манифест:
1
2
| kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/$ARGO_VERSION/manifests/install.yaml
|
Готово, ArgoCD установлен.
Offline установка ArgoCD
Скачиваем компоненты
Перейдем к интересной инсталяции в закрытый контур. Подразумевается скачивание компонентов, а затем перенос архивов на закрытый от внешнего мира кластер Кубернетеса.
На машине (сервере) с инетом.
Вытаскиваем версию в переменную ARGO_VERSION
1
| export ARGO_VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
|
Скачиваем манифест
1
| curl -LO https://raw.githubusercontent.com/argoproj/argo-cd/$ARGO_VERSION/manifests/install.yaml
|
Достаём версии image
1
2
| DEX_VERSION=$(grep 'dex:' install.yaml | awk -F: '{print $NF}')
REDIS_VERSION=$(grep 'redis:' install.yaml | awk -F: '{print $NF}')
|
Качаем и упаковываем docker image:
1
2
3
4
5
6
7
| docker pull quay.io/argoproj/argocd:$ARGO_VERSION
docker pull redis:$REDIS_VERSION
docker pull ghcr.io/dexidp/dex:$DEX_VERSION
docker save quay.io/argoproj/argocd:$ARGO_VERSION -o argocd.tar
docker save redis:$REDIS_VERSION -o redis.tar
docker save ghcr.io/dexidp/dex:$DEX_VERSION -o dex.tar
|
Теперь у тебя 4 файла:
- argocd.tar
- redis.tar
- dex.tar
- install.yaml
Переноси их в закрытую зону.
Загружаем образы в Harbor
Среда выполнения: Закрытый кластер Кубернетес
Загружаем образы локально:
1
2
3
| docker load -i argocd.tar
docker load -i redis.tar
docker load -i dex.tar
|
Создать в Harbor новую диркторию project
Экспорт переменных окружения. Здесь в переменную ARGO_VERSION поместить скаченную версию ArgoCD, у меня v3.3.0.
Также указываете ваш репозиторий образов, у меня Harbor и проект (директория) внутри репозитория куда грузить образы.
1
2
3
4
5
| export ARGO_VERSION=v3.3.0
export HARBOR=harbor.domain.local
export PROJECT=platform
DEX_VERSION=$(grep 'dex:' install.yaml | awk -F: '{print $NF}')
REDIS_VERSION=$(grep 'redis:' install.yaml | awk -F: '{print $NF}')
|
Тегаем и заливаем в репозиторий Harbor:
1
2
3
4
5
6
| docker tag quay.io/argoproj/argocd:$ARGO_VERSION $HARBOR/platform/argocd:$ARGO_VERSION
docker push $HARBOR/platform/argocd:$ARGO_VERSION
docker tag redis:$REDIS_VERSION $HARBOR/platform/redis:$REDIS_VERSION
docker push $HARBOR/platform/redis:$REDIS_VERSION
docker tag ghcr.io/dexidp/dex:$DEX_VERSION $HARBOR/platform/dex:$DEX_VERSION
docker push $HARBOR/platform/dex:$DEX_VERSION
|
Заменяем репозиторий на приватный в install.yaml
1
2
3
| sed -i "s#quay.io/argoproj/argocd:$ARGO_VERSION#$HARBOR/$PROJECT/argocd:$ARGO_VERSION#g" install.yaml
sed -i "s#public.ecr.aws/docker/library/redis:$REDIS_VERSION#$HARBOR/$PROJECT/redis:$REDIS_VERSION#g" install.yaml
sed -i "s#ghcr.io/dexidp/dex:$DEX_VERSION#$HARBOR/$PROJECT/dex:$DEX_VERSION#g" install.yaml
|
Секреты для доступа ArgoCD в Harbor
Чтобы взаимодействовать с образами внутри куба создадим токен доступа и секрет внутри Harbor.
Создай Robot Account в Harbor
Harbor UI → Project platform → Robot Accounts → New
- Дай права минимум pull (read).
Получишь: - username вида:
argocd-puller - token/secret (пароль)
Нажимаем созать получаем токен (такого вида B9N0yv5123123oNa)
Имя получилось robot$platform+argocd-puller
Создаём namespace:
1
| kubectl create ns argocd
|
Создаём секрет в кубере:
1
2
3
4
5
| kubectl -n argocd create secret docker-registry cred-harbor \
--docker-server=harbor.domain.local \
--docker-username='robot$platform+argocd-puller' \
--docker-password='B9N0yv5123123oNa' \
--docker-email='gdemoemilo@milo.tut'
|
Установка и патч с секретом
Далее создаём GitOps структуру, чтобы добавлять с помощью патчей этот секрет в ArgoCD.
1
2
3
| mkdir -p ./argocd/base ./argocd/overlays
mv install.yaml ./argocd/base
nano ./argocd/overlays/kustomization.yaml
|
Вставляем:
1
2
3
4
| apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- install.yaml
|
Далее создаём патч:
1
| nano ./argocd/overlays/sa-patch.yaml
|
Где cred-harbor имя вашего секрета.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
| apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-server
spec:
template:
spec:
imagePullSecrets:
- name: cred-harbor
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-repo-server
spec:
template:
spec:
imagePullSecrets:
- name: cred-harbor
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-applicationset-controller
spec:
template:
spec:
imagePullSecrets:
- name: cred-harbor
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-dex-server
spec:
template:
spec:
imagePullSecrets:
- name: cred-harbor
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-redis
spec:
template:
spec:
imagePullSecrets:
- name: cred-harbor
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: argocd-notifications-controller
spec:
template:
spec:
imagePullSecrets:
- name: cred-harbor
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: argocd-application-controller
spec:
template:
spec:
imagePullSecrets:
- name: cred-harbor
|
Далее создаём kustomization в base:
1
| nano ./argocd/base/kustomization.yaml
|
В котором описываем где патч:
1
2
3
4
5
6
7
| apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: argocd
resources:
- ../base
patchesStrategicMerge:
- sa-patch.yaml
|
Получится такая структура:
1
2
3
4
5
6
| ├── base
│ ├── install.yaml
│ └── kustomization.yaml
└── overlays
├── kustomization.yaml
└── sa-patch.yaml
|
Теперь мы применяем нашу кастомную конфигурацию. Она автоматически подтянет файл install.yaml, поэтому его не нужно запускать отдельно.
1
| kubectl apply -k overlays/
|
ArgoCD по умолчанию работает в TLS режиме, поэтому пока мы настраиваем на 80 порт сделаем надстрийку --insecure.
1
2
| kubectl -n argocd patch configmap argocd-cmd-params-cm \
-p '{"data":{"server.insecure":"true"}}'
|
И рестартанём деплой:
1
| kubectl -n argocd rollout restart deploy argocd-server
|
Вход в web-интерфейс ArgoCD
Создаём манифест с Ingress контроллером. Доменное имя в argocd.k8s.domain.local делайте своё.
1
2
| mkdir ~/admin/manifests/
nano ~/admin/manifests/ingress-argo.yaml
|
Содержимое:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd
namespace: argocd
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
ingressClassName: nginx
rules:
- host: argocd.k8s.domain.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 80
|
Применяем:
1
| kubectl apply -f ingress-argo.yaml
|
Логин: admin
Пароль получить так:
1
2
| kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d
|
Установка завершена.
