From 5c8862e9bf1d67fb676113dbbb94ae840f212025 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:34:59 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20kubectl=20=D0=BA=20API=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D1=83=20Kind?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен --validate=false для отключения валидации при установке аддонов - kubectl теперь подключается напрямую к control-plane узлу - Контейнер k8s-controller автоматически подключается к сети kind - Все kubectl команды используют --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify --- scripts/create_k8s_cluster.py | 38 ++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/scripts/create_k8s_cluster.py b/scripts/create_k8s_cluster.py index 8fcb450..3ca5e40 100755 --- a/scripts/create_k8s_cluster.py +++ b/scripts/create_k8s_cluster.py @@ -159,6 +159,20 @@ def main(): else: print(f"🚀 Создание кластера: {name}") run_cmd(f"kind create cluster --name {name} --config {config_file}") + + # Подключаем контейнер k8s-controller к сети kind + print(f"🔗 Подключение контейнера к сети kind...") + result = subprocess.run(f"docker network inspect kind", shell=True, capture_output=True, text=True) + if result.returncode == 0: + # Получаем имя контейнера из аргументов (второй аргумент) + controller_name = sys.argv[2] if len(sys.argv) > 2 else "k8s-controller" + result = subprocess.run(f"docker network connect kind {controller_name}", shell=True, capture_output=True, text=True) + if result.returncode == 0: + print(f"✅ Контейнер {controller_name} подключен к сети kind") + else: + print(f"⚠️ Не удалось подключить контейнер к сети kind: {result.stderr}") + else: + print(f"⚠️ Сеть kind не найдена") # Устанавливаем аддоны addons = cluster.get('addons', {}) @@ -169,33 +183,33 @@ def main(): if addons.get('ingress_nginx'): print(" - Installing ingress-nginx") - run_cmd(f"kubectl --context kind-{name} apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml") - run_cmd(f"kubectl --context kind-{name} -n ingress-nginx rollout status deploy/ingress-nginx-controller --timeout=180s") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify apply --validate=false -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify -n ingress-nginx rollout status deploy/ingress-nginx-controller --timeout=180s") if addons.get('metrics_server'): print(" - Installing metrics-server") - run_cmd(f"kubectl --context kind-{name} apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify apply --validate=false -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml") patch_json = '{"spec":{"template":{"spec":{"containers":[{"name":"metrics-server","args":["--kubelet-insecure-tls","--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname"]}]}}}}' - run_cmd(f"kubectl --context kind-{name} -n kube-system patch deploy metrics-server -p '{patch_json}'") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify -n kube-system patch deploy metrics-server -p '{patch_json}'") if addons.get('istio'): print(" - Installing Istio") run_cmd(f"istioctl install -y --set profile=demo --context kind-{name}") - run_cmd(f"kubectl --context kind-{name} -n istio-system rollout status deploy/istiod --timeout=180s") - run_cmd(f"kubectl --context kind-{name} -n istio-system rollout status deploy/istio-ingressgateway --timeout=180s") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify -n istio-system rollout status deploy/istiod --timeout=180s") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify -n istio-system rollout status deploy/istio-ingressgateway --timeout=180s") if addons.get('kiali'): print(" - Installing Kiali") - run_cmd(f"kubectl --context kind-{name} create ns istio-system") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify create ns istio-system") run_cmd(f"helm upgrade --install kiali-server kiali/kiali-server --namespace istio-system --kube-context kind-{name} --set auth.strategy=anonymous --wait --timeout 180s") if addons.get('prometheus_stack'): print(" - Installing Prometheus Stack") run_cmd(f"helm repo add prometheus-community https://prometheus-community.github.io/helm-charts") run_cmd(f"helm repo update") - run_cmd(f"kubectl --context kind-{name} create ns monitoring") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify create ns monitoring") run_cmd(f"helm upgrade --install monitoring prometheus-community/kube-prometheus-stack --namespace monitoring --kube-context kind-{name} --set grafana.adminPassword=admin --set grafana.defaultDashboardsTimezone=browser --wait --timeout 600s") - run_cmd(f"kubectl --context kind-{name} -n monitoring rollout status deploy/monitoring-grafana --timeout=300s") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify -n monitoring rollout status deploy/monitoring-grafana --timeout=300s") # Настраиваем NodePort для аддонов addon_ports = cluster.get('addon_ports', {}) @@ -206,19 +220,19 @@ def main(): port = addon_ports['prometheus'] print(f" - Prometheus: {port}") patch_json = f'[{{"op": "replace", "path": "/spec/type", "value":"NodePort"}},{{"op": "replace", "path": "/spec/ports/0/nodePort", "value":{port}}}]' - run_cmd(f"kubectl --context kind-{name} patch svc -n monitoring monitoring-kube-prom-prometheus --type='json' -p='{patch_json}'") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify patch svc -n monitoring monitoring-kube-prom-prometheus --type='json' -p='{patch_json}'") if 'grafana' in addon_ports: port = addon_ports['grafana'] print(f" - Grafana: {port}") patch_json = f'[{{"op": "replace", "path": "/spec/type", "value":"NodePort"}},{{"op": "replace", "path": "/spec/ports/0/nodePort", "value":{port}}}]' - run_cmd(f"kubectl --context kind-{name} patch svc -n monitoring monitoring-grafana --type='json' -p='{patch_json}'") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify patch svc -n monitoring monitoring-grafana --type='json' -p='{patch_json}'") if 'kiali' in addon_ports: port = addon_ports['kiali'] print(f" - Kiali: {port}") patch_json = f'[{{"op": "replace", "path": "/spec/type", "value":"NodePort"}},{{"op": "replace", "path": "/spec/ports/0/nodePort", "value":{port}}}]' - run_cmd(f"kubectl --context kind-{name} patch svc -n istio-system kiali --type='json' -p='{patch_json}'") + run_cmd(f"kubectl --server=https://{name}-control-plane:6443 --insecure-skip-tls-verify patch svc -n istio-system kiali --type='json' -p='{patch_json}'") print(f"✅ Кластер '{name}' готов!")