Изучение принципов декларативного управления инфраструктурой и развертывания приложений в Kubernetes с использованием методологии GitOps. Практическое освоение инструментов Minikube для локальной разработки и ArgoCD для непрерывной доставки (CD).
Minikube позволяет запустить одноузловой кластер Kubernetes внутри виртуальной машины или контейнера.
Рекомендации:
Команды выполнения:
minikube start --memory=4096 --cpus=2
kubectl cluster-info
ArgoCD — это декларативный инструмент для непрерывной доставки (Continuous Delivery) в Kubernetes, следующий принципам GitOps.
Команды выполнения:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl wait --for=condition=Ready pods --all -n argocd
admin) для входа в UI:kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
kubectl port-forward svc/argocd-server -n argocd 8080:443
Теперь UI доступен по адресу https://localhost:8080.Мы будем использовать стандартный пример guestbook из официального репозитория ArgoCD.
Команды выполнения:
Создайте объект Application, который свяжет Git-репозиторий с кластером:
kubectl apply -f - <<EOF
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: guestbook
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: HEAD
path: guestbook
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true
EOF
Перейдите в веб-интерфейс ArgoCD и убедитесь, что приложение появилось в списке и перешло в статус Synced.
Проверьте созданные ресурсы в пространстве имен default:
kubectl get all
Поскольку у нас нет реального DNS-сервера, мы заставим Windows перенаправлять запросы по выбранному домену на IP-адрес нашего кластера.
Рекомендации:
hosts требует прав администратора для редактирования.Команды выполнения:
minikube ip
(Допустим, адрес: 192.168.49.2).C:\Windows\System32\drivers\etc\hosts.192.168.49.2 argocd.cluster.k8s
ping argocd.cluster.k8s.Чтобы контроллер Ingress понял, какой трафик направлять в ArgoCD, необходимо описать правила маршрутизации.
Команды выполнения:
minikube addons enable ingress
argocd-ingress.yaml со следующим содержимым:apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
rules:
- host: argocd.cluster.k8s
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
number: 443
kubectl apply -f argocd-ingress.yaml
https://argocd.cluster.k8s.Важно: Браузер выдаст предупреждение о самоподписанном сертификате. Это нормально для локальной установки, нажмите «Дополнительно» -> «Перейти на сайт».
Для успешной защиты лабораторной работы необходимо продемонстрировать следующее:
kubectl get nodes возвращает статус Ready для узла Minikube.https://argocd.cluster.k8s (без использования port-forward).https://guestbook.cluster.k8s (без использования port-forward).default.kubectl get ingress -n argocd показывает назначенный IP-адрес, соответствующий адресу в файле hosts.