From 60c2623fbc72ffc326a47a92147ae9b8facfdee6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=90=D0=BD=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BF=D0=BE=D0=B2?= Date: Sun, 26 Oct 2025 08:15:44 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=D0=B8=20Kind=20=D0=B8=D0=B7=20create.y?= =?UTF-8?q?ml=20=D0=B8=20destroy.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Удалены все задачи по созданию Kind кластеров из create.yml - Удалены все задачи по удалению Kind кластеров из destroy.yml - Добавлены комментарии о том, что все операции с Kind выполняются через make k8s - Теперь Kind кластеры полностью управляются через Python скрипт create_k8s_cluster.py --- molecule/default/create.yml | 132 +---------------------------------- molecule/default/destroy.yml | 17 +---- 2 files changed, 4 insertions(+), 145 deletions(-) diff --git a/molecule/default/create.yml b/molecule/default/create.yml index 4ad0db2..4e25d02 100644 --- a/molecule/default/create.yml +++ b/molecule/default/create.yml @@ -285,133 +285,5 @@ - DinD nodes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dind') | list | length }} - DOoD nodes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dood') | list | length }} - # ---------- Kind clusters (если определены) ---------- - - name: Create kind cluster configs - community.docker.docker_container_exec: - container: ansible-controller - command: > - bash -lc ' - mkdir -p /ansible/.kind; - cat > /ansible/.kind/{{ item.name }}.yaml < 0 - - - name: Create kind clusters - community.docker.docker_container_exec: - container: ansible-controller - command: > - bash -lc ' - set -e; - for n in {{ (kind_clusters | default([]) | map(attribute="name") | list) | map('quote') | join(' ') }}; do - if kind get clusters | grep -qx "$$n"; then - echo "[kind] cluster $$n already exists"; - else - echo "[kind] creating $$n"; - kind create cluster --name "$$n" --config "/ansible/.kind/$$n.yaml"; - fi - done - ' - when: (kind_clusters | default([])) | length > 0 - - - name: Install Ingress NGINX, Metrics Server, Istio, Kiali, Prometheus Stack (per cluster, if enabled) - community.docker.docker_container_exec: - container: ansible-controller - command: > - bash -lc ' - set -e; - helm repo add kiali https://kiali.org/helm-charts >/dev/null 2>&1 || true; - helm repo add prometheus-community https://prometheus-community.github.io/helm-charts >/dev/null 2>&1 || true; - helm repo update >/dev/null 2>&1 || true; - for n in {{ (kind_clusters | default([]) | map(attribute="name") | list) | map('quote') | join(' ') }}; do - # ingress-nginx - if {{ (kind_clusters | items2dict(key_name="name", value_name="addons")).get(n, {}).get("ingress_nginx", False) | to_json }}; then - echo "[addons] ingress-nginx on $$n"; - kubectl --context kind-$$n apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml || true; - kubectl --context kind-$$n -n ingress-nginx rollout status deploy/ingress-nginx-controller --timeout=180s || true; - fi - # metrics-server - if {{ (kind_clusters | items2dict(key_name="name", value_name="addons")).get(n, {}).get("metrics_server", False) | to_json }}; then - echo "[addons] metrics-server on $$n"; - kubectl --context kind-$$n apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml || true; - kubectl --context kind-$$n -n kube-system patch deploy metrics-server -p \ - "{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"metrics-server\",\"args\":[\"--kubelet-insecure-tls\",\"--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname\"]}]}}}}}" || true; - fi - # istio (demo profile) - if {{ (kind_clusters | items2dict(key_name="name", value_name="addons")).get(n, {}).get("istio", False) | to_json }}; then - echo "[addons] istio (demo profile) on $$n"; - istioctl install -y --set profile=demo --context kind-$$n; - kubectl --context kind-$$n -n istio-system rollout status deploy/istiod --timeout=180s || true; - kubectl --context kind-$$n -n istio-system rollout status deploy/istio-ingressgateway --timeout=180s || true; - fi - # kiali (server chart, anonymous auth) — требует istio/metrics - if {{ (kind_clusters | items2dict(key_name="name", value_name="addons")).get(n, {}).get("kiali", False) | to_json }}; then - echo "[addons] kiali on $$n"; - kubectl --context kind-$$n create ns istio-system >/dev/null 2>&1 || true; - helm upgrade --install kiali-server kiali/kiali-server \ - --namespace istio-system --kube-context kind-$$n \ - --set auth.strategy=anonymous --wait --timeout 180s; - fi - # kube-prometheus-stack (Prometheus + Grafana) - if {{ (kind_clusters | items2dict(key_name="name", value_name="addons")).get(n, {}).get("prometheus_stack", False) | to_json }}; then - echo "[addons] kube-prometheus-stack on $$n"; - kubectl --context kind-$$n create ns monitoring >/dev/null 2>&1 || true; - helm upgrade --install monitoring prometheus-community/kube-prometheus-stack \ - --namespace monitoring --kube-context kind-$$n \ - --set grafana.adminPassword=admin \ - --set grafana.defaultDashboardsTimezone=browser \ - --wait --timeout 600s; - # дождаться графаны - kubectl --context kind-$$n -n monitoring rollout status deploy/monitoring-grafana --timeout=300s || true; - fi - done - ' - when: (kind_clusters | default([])) | length > 0 - - - name: Setup NodePort for addons - community.docker.docker_container_exec: - container: ansible-controller - command: > - bash -lc ' - for n in {{ (kind_clusters | default([]) | map(attribute="name") | list) | map('quote') | join(' ') }}; do - {% for cluster in kind_clusters | default([]) %} - {% if cluster.addon_ports is defined %} - if [ "$$n" = "{{ cluster.name }}" ]; then - {% if cluster.addon_ports.prometheus is defined %} - echo "[ports] Prometheus: {{ cluster.addon_ports.prometheus }}"; - kubectl --context kind-{{ cluster.name }} patch svc -n monitoring monitoring-kube-prom-prometheus --type='json' -p='[{"op": "replace", "path": "/spec/type", "value":"NodePort"},{"op": "replace", "path": "/spec/ports/0/nodePort", "value":{{ cluster.addon_ports.prometheus }}}]' 2>/dev/null || true; - {% endif %} - {% if cluster.addon_ports.grafana is defined %} - echo "[ports] Grafana: {{ cluster.addon_ports.grafana }}"; - kubectl --context kind-{{ cluster.name }} patch svc -n monitoring monitoring-grafana --type='json' -p='[{"op": "replace", "path": "/spec/type", "value":"NodePort"},{"op": "replace", "path": "/spec/ports/0/nodePort", "value":{{ cluster.addon_ports.grafana }}}]' 2>/dev/null || true; - {% endif %} - {% if cluster.addon_ports.kiali is defined %} - echo "[ports] Kiali: {{ cluster.addon_ports.kiali }}"; - kubectl --context kind-{{ cluster.name }} patch svc -n istio-system kiali --type='json' -p='[{"op": "replace", "path": "/spec/type", "value":"NodePort"},{"op": "replace", "path": "/spec/ports/0/nodePort", "value":{{ cluster.addon_ports.kiali }}}]' 2>/dev/null || true; - {% endif %} - fi - {% endif %} - {% endfor %} - done - ' - when: (kind_clusters | default([])) | length > 0 \ No newline at end of file + # ---------- Kind clusters создаются через Python скрипт create_k8s_cluster.py ---------- + # Все задачи по созданию кластеров и установке аддонов выполняются через make k8s create \ No newline at end of file diff --git a/molecule/default/destroy.yml b/molecule/default/destroy.yml index f1b0aad..b29137f 100644 --- a/molecule/default/destroy.yml +++ b/molecule/default/destroy.yml @@ -76,21 +76,8 @@ # Используем переменную hosts из загруженного пресета hosts: "{{ hosts }}" - - name: Remove kind clusters - community.docker.docker_container_exec: - container: ansible-controller - command: > - bash -lc ' - set -e; - for n in {{ (kind_clusters | default([]) | map(attribute="name") | list) | map('quote') | join(' ') }}; do - if kind get clusters | grep -qx "$$n"; then - echo "[kind] deleting $$n"; - kind delete cluster --name "$$n" || true; - fi - done - ' - when: (kind_clusters | default([])) | length > 0 - ignore_errors: true + # ---------- Kind clusters удаляются через make k8s destroy ---------- + # Все задачи по удалению кластеров выполняются через команду make k8s destroy - name: Display cleanup summary debug: