Установка ArgoCD в Unix/Linux

ArgoCD — это декларативный инструмент непрерывной доставки GitOps для Kubernetes. Т.е дает возможность выполнять деплой приложений в K8S и хранить все конфиги в гите.

Установка ArgoCD в Unix/Linux

Для начало что необходимо, так установить Кубернетес, у меня есть ряд статей на эту тему:

Установка Kubernetes кластера в Unix/Linux

Установка Kubernetes в Unix/Linux

Команды Kubernetes в Unix/Linux

Создание AWS EKS кластера в Unix/Linux

Установка minikube в Unix/Linux

После чего, создаем неймспейс:

sh
1 lines

$ kubectl create namespace argocd

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Установка ArgoCD через KubeCTL

Первое что необходимо, так — это поставить данную утилиту под названием kubectl!

Выполняем деплой:

sh
1 lines

.yaml

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно выполнить установку еще так (Non-HA):

sh
3 lines

$ export VESION=$(curl silent «https://api.github.com/repos/argoproj/argo-cd/releases/latest» | grep «tag_name» | sed E s/.*»([^»]+)».*/1/)
$ export ARGO_VERSION=«v1.8.0-rc1»

.yaml

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно выполнить установку еще так (HA):

sh
2 lines

$ export ARGO_VERSION=«v1.8.0-rc1»

.yaml

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Установка ArgoCD через Helm

Первое что необходимо, так — это поставить данную утилиту под названием helm!

И выполняем deploy:

sh
8 lines

$ helm repo add argo https://argoproj.github.io/argohelm

argocd

n argocd
set global.image.repository=«argoproj/argocd»
set global.image.tag=«v1.8.1»
set server.service.type=«LoadBalancer»
argo/argocd

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если используете локальный миникуб или что-то такое, то запускаем так:

sh
5 lines

argocd
n argocd
set global.image.repository=«argoproj/argocd»
set global.image.tag=«v1.8.1»
argo/argocd

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Проверим что все подымается так:

sh
2 lines

$ kubectl get po n argocd &&
kubectl get service n argocd

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можем идти дальше.

Кстати, пароль будет таким:

sh
1 lines

$ export OLD_ARGOCD_PWD=$(kubectl get pods n argocd l app.kubernetes.io/name=argocdserver o name | cut d/ f 2)

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Если что, его можно поменять.

Установка ArgoCD через Terraform

Я недавно писал модуль для работы с helm, и на примере ArgoCD выполнил деплой. Код выглядит так:

sh
35 lines

#
# MAINTAINER Vitaliy Natarov «vitaliy.natarov@yahoo.com»
#
terraform {
required_version = «~> 0.13»
}
module «helm_release» {
source = «../../modules/release»
enable_release = true
release_name = «argocd-dev»
release_chart = «argo-cd»
release_repository = «https://argoproj.github.io/argo-helm»
release_version = «v1.7.6»
release_namespace = «argocd-dev»
release_create_namespace = true
release_values = []
release_set = [
{
name = «server.service.type»
value = «LoadBalancer»
}
]
release_set_sensitive = []
release_postrender = []
release_timeout = 600
release_force_update = false
release_recreate_pods = true
release_lint = false
}

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Код с моими модулями можно найти тут — https://github.com/SebastianUA/terraform/blob/master/helm/examples/release/main.tf

Попозже дополню данную статью этим материалом.

Настройка ArgoCD в Unix/Linux

Поле того, как у вас задеплоится ArgoCD, вы не можете знать пароль от стандартного пользователя (admin), но его можно посмотреть тут:

sh
1 lines

$ kubectl get secret n argocd argocdsecret o yaml

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или, так:

sh
1 lines

$ kubectl get secret n argocd argocdsecret o yaml | grep Ei » admin.password: «

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Т.к кубернетес пишет все секреты в base64, то декодировать строку можно так:

sh
1 lines

$ kubectl get secret n argocd argocdsecret o yaml | grep Ei » admin.password: « | awk {print $2} | base64 decode

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Пока не понял как расшифровать пароль с BCrypt. По этому, пойду по простому пути, а именно — перепишу пароль на нужный, например, вы хотите поставить пароль «admin» — т.е как и логин. Дано:

sh
1 lines

$2b$10$ixLkbNDoNmoo3sHorEFequhJeEsZBtFVGlYjEhKZqBv2dlgTmbt.G

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

И выполняем патч:

sh
5 lines

$ kubectl n argocd patch secret argocdsecret
p {«stringData»: {
«admin.password»: «$2b$10$ixLkbNDoNmoo3sHorEFequhJeEsZBtFVGlYjEhKZqBv2dlgTmbt.G»,
«admin.passwordMtime»: «$(date +%FT%T%Z)«
}}

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно использовать login & password — admin.

Можно, просто выключить авторизацию так:

sh
1 lines

$ kubectl patch deploy argocdserver n argocd p [{«op»: «add», «path»: «/spec/template/spec/containers/0/command/-«, «value»: «—disable-auth»}] type json

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Добавление пользователей в ArgoCD

Посмотреть конфиг с юзерами и паролями, можно так:

sh
1 lines

$ kubectl get secret n argocd argocdsecret o yaml

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Первое что нужно — это отредактировать:

sh
1 lines

$ kubectl edit n argocd configmap/argocdcm

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

И приводим к виду:

sh
5 lines

data:
accounts.vnatarov: apiKey, login
accounts.vnatarov.enabled: «true»
accounts.test: apiKey, login
accounts.test.enabled: «true»

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Где:

Для пользователей я поставлю пароль по логину чтобы проверить как это будет работать.

Патчим пароли:

sh
11 lines

$ kubectl n argocd patch secret argocdsecret
p {«stringData»: {
«vnatarov.password»: «$2b$10$ySVNtxkJVrSmh2GQA2zTLOzNedw1QPtDMYXp0X21WYSFwqvVUdWfm»,
«vnatarov.passwordMtime»: «$(date +%FT%T%Z)«
}}
kubectl n argocd patch secret argocdsecret
p {«stringData»: {
«test.password»: «$2b$10$O1Jc1FgWcDN.PC0mA6xdPOT4OmUQXHupcO9/0k6r6MHYLhuH7ALP6»,
«test.passwordMtime»: «$(date +%FT%T%Z)«
}}

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или, можно отредактировать (но тогда нужно будет зашифровать фразу в base64):

sh
1 lines

$ kubectl edit secret n argocd argocdsecret

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Чет какие-то баги в аргоСД и я смог пофиксить способом что описал выше, по этому, выполнил вход в админку:

sh
1 lines

$ yes | argocd login 127.0.0.1:8080 username admin password admin

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно поглядеть учетки:

sh
5 lines

$ argocd account list
NAME ENABLED CAPABILITIES
admin true login
test true login, apiKey
vnatarov true apiKey, login

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Ну и обновляем пароль:

sh
1 lines

$ argocd account updatepassword account test newpassword test

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Точно так же для моего другого юзера:

sh
3 lines

$ argocd account updatepassword account vnatarov newpassword vnatarov
*** Enter current password:
Password updated

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Приведу полный вывод моего конфига configmap-ы argocd-cm:

sh
74 lines

$ kubectl get n argocd configmap/argocdcm o yaml
apiVersion: v1
data:
accounts.test: login,apiKey
accounts.test.enabled: «true»
accounts.vnatarov: apiKey,login
accounts.vnatarov.enabled: «true»

:

statusbadge.enabled: «true»
url: https://127.0.0.1:8080
users.anonymous.enabled: «true»
kind: ConfigMap
metadata:
annotations:
meta.helm.sh/releasename: argocd
meta.helm.sh/releasenamespace: argocd
creationTimestamp: «2021-01-05T18:18:34Z»
labels:
app.kubernetes.io/component: server

: argocd

app.kubernetes.io/managedby: Helm
app.kubernetes.io/name: argocdcm
app.kubernetes.io/partof: argocd
helm.sh/chart: argocd2.11.0
managedFields:
apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
: {}
f:metadata:
f:annotations:
.: {}
f:meta.helm.sh/releasename: {}
f:meta.helm.sh/releasenamespace: {}
f:labels:
.: {}
f:app.kubernetes.io/component: {}
: {}
f:app.kubernetes.io/managedby: {}
f:app.kubernetes.io/name: {}
f:app.kubernetes.io/partof: {}
f:helm.sh/chart: {}
manager: Gohttpclient
operation: Update
time: «2021-01-05T18:18:34Z»
apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
f:accounts.test.enabled: {}
f:accounts.vnatarov.enabled: {}
f:statusbadge.enabled: {}
f:url: {}
f:users.anonymous.enabled: {}
manager: kubectledit
operation: Update
time: «2021-01-05T21:18:04Z»
apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
f:accounts.test: {}
f:accounts.vnatarov: {}
manager: argocdserver
operation: Update
time: «2021-01-05T21:32:26Z»
name: argocdcm
namespace: argocd
resourceVersion: «122982»
selfLink: /api/v1/namespaces/argocd/configmaps/argocdcm
uid: adc7f9e5131844c7a59eba1625a8f887

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Приведу полный вывод моего конфига secret-а argocd-secret:

sh
89 lines

$ kubectl get secret n argocd argocdsecret o yaml
apiVersion: v1
data:
accounts.test.password: JDJhJDEwJEhyUW0uQlo2alFTRWxvT1J3N3BKMnVXOGVGLnVRUGc4cC5LQ2JSTGJqUzRtYWtWVDRZZ1dl
accounts.test.passwordMtime: MjAyMS0wMS0wNVQyMToyNzo0NFo=
accounts.test.tokens: bnVsbA==
accounts.vnatarov.password: JDJhJDEwJGExRElNNnk5SFhqM1h3ZmZjMkFNa094eGdROUYzTTg0OUQ2M1BoOFhnZXB3VkNrc2ZoZnYy
accounts.vnatarov.passwordMtime: MjAyMS0wMS0wNVQyMTozMjoyNlo=
accounts.vnatarov.tokens: bnVsbA==
admin.password: JDJiJDEwJGl4TGtiTkRvTm1vbzNzSG9yRUZlcXVoSmVFc1pCdEZWR2xZakVoS1pxQnYyZGxnVG1idC5H
admin.passwordMtime: MjAyMS0wMS0wNVQyMDoyMTowNFo=
server.secretkey: MDZ5QVA3WVZ4cTQ0ZDFDdXZzaEZqZjcydDZmUmVmdjQ0UXFsenhUWDZEcz0=
test.password: JDJiJDEwJE8xSmMxRmdXY0ROLlBDMG1BNnhkUE9UNE9tVVFYSHVwY085LzBrNnI2TUhZTGh1SDdBTFA2
test.passwordMtime: MjAyMS0wMS0wNVQyMjo0NTozNEVFVA==
tls.crt: YYYYY=
tls.key: XXXXXXX==
vnatarov.password: JDJiJDEwJHlTVk50eGtKVnJTbWgyR1FBMnpUTE96TmVkdzFRUHRETVlYcDBYMjFXWVNGd3F2VlVkV2Zt
vnatarov.passwordMtime: MjAyMS0wMS0wNVQyMjoyNjo0N0VFVA==
kind: Secret
metadata:
annotations:
meta.helm.sh/releasename: argocd
meta.helm.sh/releasenamespace: argocd
creationTimestamp: «2021-01-05T18:18:34Z»
labels:
app.kubernetes.io/component: server

: argocd

app.kubernetes.io/managedby: Helm
app.kubernetes.io/name: argocdsecret
app.kubernetes.io/partof: argocd
helm.sh/chart: argocd2.11.0
managedFields:
apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.: {}
f:meta.helm.sh/releasename: {}
f:meta.helm.sh/releasenamespace: {}
f:labels:
.: {}
f:app.kubernetes.io/component: {}
: {}
f:app.kubernetes.io/managedby: {}
f:app.kubernetes.io/name: {}
f:app.kubernetes.io/partof: {}
f:helm.sh/chart: {}
f:type: {}
manager: Gohttpclient
operation: Update
time: «2021-01-05T18:18:34Z»
apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
f:admin.password: {}
f:test.password: {}
f:test.passwordMtime: {}
f:vnatarov.password: {}
f:vnatarov.passwordMtime: {}
manager: kubectlpatch
operation: Update
time: «2021-01-05T20:45:35Z»
apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:accounts.test.password: {}
f:accounts.test.passwordMtime: {}
f:accounts.test.tokens: {}
f:accounts.vnatarov.password: {}
f:accounts.vnatarov.passwordMtime: {}
f:accounts.vnatarov.tokens: {}
f:admin.passwordMtime: {}
f:server.secretkey: {}
f:tls.crt: {}
f:tls.key: {}
manager: argocdserver
operation: Update
time: «2021-01-05T21:32:26Z»
name: argocdsecret
namespace: argocd
resourceVersion: «122983»
selfLink: /api/v1/namespaces/argocd/secrets/argocdsecret
uid: 17e9ff5c946d4655bd05c983091ef210
type: Opaque

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Приведу полный вывод моего конфига secret-а argocd-secret:

sh
95 lines

$ kubectl get n argocd configmap/argocdrbaccm o yaml
apiVersion: v1
data:
policy.csv: |
# Built-in policy which defines two roles: role:readonly and role:admin,
# and additionally assigns the admin user to the role:admin role.
# There are two policy formats:
# 1. Applications (which belong to a project):
# p, <user/group>, <resource>, <action>, <project>/<object>
# 2. All other resources:
# p, <user/group>, <resource>, <action>, <object>
p, role:readonly, applications, get, */*, allow
p, role:readonly, certificates, get, *, allow
p, role:readonly, clusters, get, *, allow
p, role:readonly, repositories, get, *, allow
p, role:readonly, projects, get, *, allow
p, role:readonly, accounts, get, *, allow
p, role:readonly, gpgkeys, get, *, allow
p, role:admin, applications, create, */*, allow
p, role:admin, applications, update, */*, allow
p, role:admin, applications, delete, */*, allow
p, role:admin, applications, sync, */*, allow
p, role:admin, applications, override, */*, allow
p, role:admin, applications, action/*, */*, allow
p, role:admin, certificates, create, *, allow
p, role:admin, certificates, update, *, allow
p, role:admin, certificates, delete, *, allow
p, role:admin, clusters, create, *, allow
p, role:admin, clusters, update, *, allow
p, role:admin, clusters, delete, *, allow
p, role:admin, repositories, create, *, allow
p, role:admin, repositories, update, *, allow
p, role:admin, repositories, delete, *, allow
p, role:admin, projects, create, *, allow
p, role:admin, projects, update, *, allow
p, role:admin, projects, delete, *, allow
p, role:admin, accounts, update, *, allow
p, role:admin, gpgkeys, create, *, allow
p, role:admin, gpgkeys, delete, *, allow
g, role:admin, role:readonly
g, admin, role:admin
g, vnatarov, role:admin
policy.default: role:readonly
kind: ConfigMap
metadata:
annotations:
meta.helm.sh/releasename: argocd
meta.helm.sh/releasenamespace: argocd
creationTimestamp: «2021-01-05T18:18:34Z»
labels:
app.kubernetes.io/component: server

: argocd

app.kubernetes.io/managedby: Helm
app.kubernetes.io/name: argocdrbaccm
app.kubernetes.io/partof: argocd
helm.sh/chart: argocd2.11.0
managedFields:
apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:metadata:
f:annotations:
.: {}
f:meta.helm.sh/releasename: {}
f:meta.helm.sh/releasenamespace: {}
f:labels:
.: {}
f:app.kubernetes.io/component: {}
: {}
f:app.kubernetes.io/managedby: {}
f:app.kubernetes.io/name: {}
f:app.kubernetes.io/partof: {}
f:helm.sh/chart: {}
manager: Gohttpclient
operation: Update
time: «2021-01-05T18:18:34Z»
apiVersion: v1
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:policy.csv: {}
f:policy.default: {}
manager: kubectledit
operation: Update
time: «2021-01-05T20:34:00Z»
name: argocdrbaccm
namespace: argocd
resourceVersion: «116734»
selfLink: /api/v1/namespaces/argocd/configmaps/argocdrbaccm
uid: aa1649dfd4774258bb3af7219326ad84

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно юзать!

Убрать HTTPS в ArgoCD

Патчим:

sh
1 lines

type json

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

И потом все норм.

Создание RBAC для пользователей

Команда простая (на примере дефолтного админа):

sh
1 lines

$ kubectl n argocd create rolebinding defaultadmin clusterrole=admin serviceaccount=argo:default

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Дальше — больше.

Создание ArtifactRepository для ArgoCD

Создаем это так:

sh
8 lines

$ cat <<EoF > argopatch.yaml
data:
config: |
artifactRepository:
s3:
endpoint: s3.amazonaws.com
bucket: batch-artifact-repository
EoF

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Где:

И применяем:

sh
3 lines

$ kubectl n argocd patch
configmap/argocdcm
patch «$(cat argopatch.yaml)«

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Вот так вот.

Установка оператора (Argo CD Operator) для ArgoCD (Helm)

Установка очень простая:

sh
1 lines

/argocdoperatorhelm.yaml

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

После чего, проверяем:

sh
1 lines

$ kubectl get csv n myargocdoperatorhelm

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Или, еще проще способ:

sh
1 lines

.sh | bash s v0.17.0

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

После чего, проверяем:

sh
1 lines

$ kubectl get csv n olm

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Вот и все.

Использование ArgoCD в Unix/Linux

Пропишу команду для дальнейшего использования:

sh
1 lines

$ export ARGOCD_SERVER=$(kubectl get pods n argocd l app.kubernetes.io/name=argocdserver o name | cut d/ f 2)

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Т.к я выбрал локальный запуск и приложение не смотрит в мир, то нужно выполнить форвардинг порта:

sh
1 lines

$ kubectl portforward service/argocdserver n argocd 8080:443

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

И после данного действия, у вас будет работать argoCD на 127.0.0.1:8080

Т.к я использую макбук, то следующая команда установит argocd CLI на мой мак:

sh
1 lines

argocd

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Далее, выполним логин:

sh
1 lines

username admin grpcweb

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

NOTE: Нужно знать пароль!

Далее, ставим 1-е приложение:

sh
5 lines

$ argocd app create guestbook
repo https://github.com/pcrete/argocdexampleapps.git
path guestbook
destserver https://kubernetes.default.svc
destnamespace guestbook

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

И далее, ставим 2-е приложение:

sh
8 lines

$ argocd app create webapp
repo https://gitlab.com/gitopsargocddemo/webappchart.git
path .
destserver https://kubernetes.default.svc
destnamespace hellogitops
syncpolicy automated
autoprune
selfheal

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Можно открыть в браузере аргоСД и поглядеть что оно будет делать.

Вот и все, статья «Установка ArgoCD в Unix/Linux» завершена.

Was this helpful?

0 / 0