feat: Добавлена универсальная лаборатория для тестирования Ansible ролей
- Создана структура molecule/universal/ с поддержкой DinD и DOoD - Добавлена поддержка Kind кластеров для Kubernetes тестирования - Интегрированы Helm charts (nginx, prometheus-stack) - Добавлена поддержка Istio service mesh с Kiali - Создан Makefile с lab-целями для управления лабораторией - Добавлена поддержка Prometheus + Grafana с автопровижинингом - Создан README с подробной документацией Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
91
Makefile
91
Makefile
@@ -154,4 +154,93 @@ git:
|
||||
git checkout -b $$NEW_BRANCH; \
|
||||
echo "Создана и переключена на новую ветку: $$NEW_BRANCH";; \
|
||||
*) echo "Unknown action. Available actions: push, pull, cluster-branch";; \
|
||||
esac
|
||||
esac
|
||||
|
||||
# ====== УНИВЕРСАЛЬНАЯ ЛАБОРАТОРИЯ (Molecule universal) ======
|
||||
SCENARIO ?= universal
|
||||
COMPOSE ?= docker compose
|
||||
|
||||
lab-up: ## Поднять контроллер
|
||||
$(COMPOSE) up -d
|
||||
|
||||
lab-down: ## Погасить контроллер
|
||||
$(COMPOSE) down -v
|
||||
|
||||
lab-sh: ## Войти в контроллер
|
||||
docker exec -it ansible-controller bash
|
||||
|
||||
lab-test: lab-up ## Полный цикл Molecule (create+converge+verify+destroy)
|
||||
docker exec -e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule ansible-controller \
|
||||
bash -lc 'cd /ansible && molecule test -s $(SCENARIO)'
|
||||
|
||||
lab-create: lab-up ## Создать инфраструктуру лаборатории
|
||||
docker exec -e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule ansible-controller \
|
||||
bash -lc 'cd /ansible && molecule create -s $(SCENARIO)'
|
||||
|
||||
lab-converge: ## Запустить роли в лаборатории
|
||||
docker exec -e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule ansible-controller \
|
||||
bash -lc 'cd /ansible && molecule converge -s $(SCENARIO)'
|
||||
|
||||
lab-verify: ## Проверить работу лаборатории
|
||||
docker exec -e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule ansible-controller \
|
||||
bash -lc 'cd /ansible && molecule verify -s $(SCENARIO)'
|
||||
|
||||
lab-destroy: ## Уничтожить инфраструктуру лаборатории
|
||||
docker exec -e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule ansible-controller \
|
||||
bash -lc 'cd /ansible && molecule destroy -s $(SCENARIO)'
|
||||
|
||||
lab-reset: lab-destroy lab-down lab-up ## Полный сброс лаборатории
|
||||
|
||||
# ====== K8S ХЕЛПЕРЫ ======
|
||||
kube-sh: ## Shell с kubectl/helm/istioctl внутри контейнера
|
||||
docker exec -it ansible-controller bash
|
||||
|
||||
kube-cmd: ## make kube-cmd CLUSTER=lab CMD="get pods -A"
|
||||
ifeq ($(strip $(CLUSTER)),)
|
||||
@echo "Usage: make kube-cmd CLUSTER=lab CMD=\"get pods -A\""; exit 1
|
||||
endif
|
||||
docker exec -it ansible-controller bash -lc 'kubectl --context kind-$(CLUSTER) $(CMD)'
|
||||
|
||||
kube-enter: ## make kube-enter CLUSTER=lab
|
||||
ifeq ($(strip $(CLUSTER)),)
|
||||
@echo "Usage: make kube-enter CLUSTER=lab"; exit 1
|
||||
endif
|
||||
docker exec -it ansible-controller bash -lc '\
|
||||
POD=$$(kubectl --context kind-$(CLUSTER) -n lab-demo get pod -l app=toolbox -o jsonpath="{.items[0].metadata.name}"); \
|
||||
[ -n "$$POD" ] || { echo "toolbox pod not found"; exit 1; }; \
|
||||
kubectl --context kind-$(CLUSTER) -n lab-demo exec -it $$POD -- /bin/sh'
|
||||
|
||||
# Port-forward Kiali (http://localhost:20001)
|
||||
kiali-port-forward: ## make kiali-port-forward CLUSTER=lab
|
||||
ifeq ($(strip $(CLUSTER)),)
|
||||
@echo "Usage: make kiali-port-forward CLUSTER=lab"; exit 1
|
||||
endif
|
||||
docker exec -d ansible-controller bash -lc 'kubectl --context kind-$(CLUSTER) -n istio-system port-forward svc/kiali 20001:20001'
|
||||
|
||||
# Port-forward Istio IngressGateway (HTTP 8082, HTTPS 8444)
|
||||
istio-gw-port-forward: ## make istio-gw-port-forward CLUSTER=lab
|
||||
ifeq ($(strip $(CLUSTER)),)
|
||||
@echo "Usage: make istio-gw-port-forward CLUSTER=lab"; exit 1
|
||||
endif
|
||||
docker exec -d ansible-controller bash -lc 'kubectl --context kind-$(CLUSTER) -n istio-system port-forward svc/istio-ingressgateway 8082:80 8444:443'
|
||||
@echo "Istio GW forwarded: http://localhost:8082 https://localhost:8444"
|
||||
|
||||
# Port-forward Grafana (http://localhost:3000)
|
||||
grafana-port-forward: ## make grafana-port-forward CLUSTER=lab
|
||||
ifeq ($(strip $(CLUSTER)),)
|
||||
@echo "Usage: make grafana-port-forward CLUSTER=lab"; exit 1
|
||||
endif
|
||||
docker exec -d ansible-controller bash -lc 'kubectl --context kind-$(CLUSTER) -n monitoring port-forward svc/monitoring-grafana 3000:80'
|
||||
@echo "Grafana: http://localhost:3000 (admin/admin)"
|
||||
|
||||
# Port-forward Prometheus (http://localhost:9090)
|
||||
prom-port-forward: ## make prom-port-forward CLUSTER=lab
|
||||
ifeq ($(strip $(CLUSTER)),)
|
||||
@echo "Usage: make prom-port-forward CLUSTER=lab"; exit 1
|
||||
endif
|
||||
docker exec -d ansible-controller bash -lc 'kubectl --context kind-$(CLUSTER) -n monitoring port-forward svc/monitoring-kube-prometheus-prometheus 9090:9090'
|
||||
@echo "Prometheus: http://localhost:9090"
|
||||
|
||||
# Stop all port-forwards
|
||||
kube-pf-stop: ## убить все port-forward в контроллере
|
||||
docker exec -it ansible-controller bash -lc 'pkill -f "kubectl .* port-forward" || true'
|
||||
Reference in New Issue
Block a user