Инсталляция ArgoCD на Kind с помощью Helm
Делаю:
2026.01.28
https://artifacthub.io/packages/helm/argo-cd-oci/argo-cd
Актуальная версия: 9.3.7
Взято в книге: [Book][Andrew Block, Christian Hernandez] Argo CD: Up and Running: A Hands-On Guide to GitOps and Kubernetes [ENG, 2025]
Установить Argo CD CLI
Запустить kind
$ cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 55s v1.34.0
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm repo update
$ cd ~/tmp
$ cat > values-ingress-nginx.yaml <<EOF
controller:
service:
type: NodePort
hostPort:
enabled: true
updateStrategy:
type: Recreate
EOF
$ helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--values values-ingress-nginx.yaml
// Дожидаемся запуска pod
$ kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
$ kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-c98c9b6d4-gs5rz 1/1 Running 0 67s
$ kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.96.27.157 <none> 80:31117/TCP,443:30497/TCP 2m6s
ingress-nginx-controller-admission ClusterIP 10.96.244.156 <none> 443/TCP 2m6s
// OK!
$ curl http://127.0.0.1
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
Инсталляция argocd
$ helm repo add argo \
https://argoproj.github.io/argo-helm
// Посмотреть какие версии есть
$ helm repo add argo/argo-cd --versions
$ cat > values-argocd-ingress.yaml <<EOF
server:
ingress:
enabled: true
hostname: argocd.k8s.local
ingressClassName: nginx
extraArgs:
- --insecure
EOF
// Сделано заранее
// $ kubectl get pods -n argocd -o jsonpath='{.items[*].spec.containers[*].image} {.items[*].spec.initContainers[*].image}' | tr ' ' '\n' | grep -v '^$' | sort -u
Тот, что с ecr-public.aws.com прям вообще долго качается. Заменим его.
ecr-public.aws.com/docker/library/redis:8.2.2-alpine
ghcr.io/dexidp/dex:v2.44.0
quay.io/argoproj/argocd:v3.2.6
// Скачаю образы до инсталляции
$ {
docker pull ghcr.io/dexidp/dex:v2.44.0
docker pull quay.io/argoproj/argocd:v3.2.6
docker pull redis:8.2.2-alpine
}
$ helm upgrade argo-cd argo/argo-cd \
--install \
--namespace argocd \
--create-namespace \
--values values-argocd-ingress.yaml \
--version 9.3.7
// Прописываю image
$ kubectl set image deployment/argo-cd-argocd-redis redis=redis:8.2.2-alpine
$ {
TIMEFORMAT="⏱ Прошло времени: %R сек."
time {
kubectl wait --namespace argocd \
--for=condition=ready pod \
--selector=app.kubernetes.io/instance=argo-cd \
--timeout=300s && \
echo "✅ Успех: Все поды ArgoCD запущены!" || \
(echo "❌ Ошибка: Тайм-аут!"; exit 1)
}
}
$ kubectl get pods -n argocd
NAME READY STATUS RESTARTS AGE
argo-cd-argocd-application-controller-0 1/1 Running 0 10m
argo-cd-argocd-applicationset-controller-586d475675-ch7zs 1/1 Running 0 10m
argo-cd-argocd-dex-server-949d55f49-lrjzw 1/1 Running 0 10m
argo-cd-argocd-notifications-controller-78c4879795-hl9k2 1/1 Running 0 10m
argo-cd-argocd-redis-9b58f4d5c-jd7dn 1/1 Running 0 10m
argo-cd-argocd-repo-server-bfc967df4-5lrzv 1/1 Running 0 10m
argo-cd-argocd-server-678b78f468-j5dkb 1/1 Running 0 10m
$ kubectl get ingress -n argocd
NAME CLASS HOSTS ADDRESS PORTS AGE
argo-cd-argocd-server nginx argocd.k8s.local 80 2s
// Добавить в hosts
$ echo "127.0.0.1 argocd.k8s.local" | sudo tee -a /etc/hosts
$ export ARGOCD_PASSWORD=$(kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d)
$ echo ${ARGOCD_PASSWORD}
// Подключаюсь в консоли
$ argocd login argocd.k8s.local \
--insecure \
--username admin \
--password $ARGOCD_PASSWORD \
--grpc-web
// Меняю пароль
$ ARGOCD_PASSWORD_NEW_PASSWORD=ABCDEFGH123
$ argocd account update-password \
--current-password ${ARGOCD_PASSWORD} \
--new-password ${ARGOCD_PASSWORD_NEW_PASSWORD}
$ ARGOCD_PASSWORD=${ARGOCD_PASSWORD_NEW_PASSWORD}
$ echo ${ARGOCD_PASSWORD}
// OK!
// admin / ABCDEFGH123
http://argocd.k8s.local
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 13m v1.34.0
// Удалить
// $ kind delete cluster