k8s #1

Merged
inecs merged 41 commits from k8s into main 2025-10-26 13:02:28 +03:00
Showing only changes of commit c2ab17b7b6 - Show all commits

View File

@@ -1,179 +0,0 @@
#!/usr/bin/env python3
"""
Скрипт для управления контейнером k8s-portforward
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
import sys
import yaml
import subprocess
import re
import os
CONTAINER_NAME = "k8s-portforward"
IMAGE_NAME = "inecs/ansible-lab:k8s-portforward-latest"
def get_ports_from_preset():
"""Получает список портов из preset"""
preset_file = "molecule/presets/k8s/kubernetes.yml"
with open(preset_file, 'r') as f:
preset = yaml.safe_load(f)
addon_ports = preset['kind_clusters'][0].get('addon_ports', {})
return addon_ports
def get_port_mappings(ports):
"""Генерирует список портов для -p"""
port_list = []
# Контейнер должен быть в той же Docker сети, что и Kind
# Пробрасываем порты как HOST_PORT:CONTAINER_PORT
if ports.get('ingress_http'):
port_list.append(f"{ports['ingress_http']}:{ports['ingress_http']}")
if ports.get('ingress_https'):
port_list.append(f"{ports['ingress_https']}:{ports['ingress_https']}")
if ports.get('prometheus'):
port_list.append(f"{ports['prometheus']}:{ports['prometheus']}")
if ports.get('grafana'):
port_list.append(f"{ports['grafana']}:{ports['grafana']}")
if ports.get('kiali'):
port_list.append(f"{ports['kiali']}:{ports['kiali']}")
if ports.get('metrics_server'):
port_list.append(f"{ports['metrics_server']}:{ports['metrics_server']}")
return port_list
def start_container():
"""Запускает контейнер port-forward через k8s-controller"""
print("🚀 Запуск контейнера k8s-portforward...")
# Проверяем, что k8s-controller запущен
result = subprocess.run(["docker", "ps", "--filter", "name=k8s-controller", "--format", "{{.Names}}"],
capture_output=True, text=True)
if "k8s-controller" not in result.stdout:
print("❌ Контейнер k8s-controller не запущен")
print("💡 Запустите: make k8s create kubernetes")
return
# Получаем порты из preset
ports = get_ports_from_preset()
port_mappings = get_port_mappings(ports)
if not port_mappings:
print("❌ Нет портов для проброса")
return
# Формируем команду docker run
cmd = [
"docker", "run",
"-d",
"--name", CONTAINER_NAME,
"--rm",
"--network", "kind", # Подключаемся к сети Kind
"-v", f"{os.getcwd()}:/workspace",
]
# Добавляем порты через -p
for port_map in port_mappings:
cmd.extend(["-p", port_map])
cmd.append(IMAGE_NAME)
print(f"📋 Команда: {' '.join(cmd)}")
# Выполняем команду через k8s-controller
cmd_str = ' '.join(['"' + arg.replace('"', '\\"') + '"' for arg in cmd])
result = subprocess.run(["docker", "exec", "k8s-controller", "sh", "-c", cmd_str],
capture_output=True, text=True)
if result.returncode == 0:
print(f"✅ Контейнер {CONTAINER_NAME} запущен")
print(f"📋 Проброшены порты: {', '.join(port_mappings)}")
else:
print(f"❌ Ошибка: {result.stderr}")
return
# Показываем логи
print("\n📋 Логи контейнера (первые 20 строк):")
subprocess.run(["docker", "logs", "--tail", "20", CONTAINER_NAME])
def stop_container():
"""Останавливает контейнер port-forward"""
print("🛑 Остановка контейнера k8s-portforward...")
# Проверяем, что k8s-controller запущен
result = subprocess.run(["docker", "ps", "--filter", "name=k8s-controller", "--format", "{{.Names}}"],
capture_output=True, text=True)
if "k8s-controller" not in result.stdout:
print("⚠️ Контейнер k8s-controller не запущен, пытаемся остановить локально...")
result = subprocess.run(["docker", "stop", CONTAINER_NAME],
capture_output=True, text=True)
else:
# Останавливаем через k8s-controller
result = subprocess.run(["docker", "exec", "k8s-controller", "docker", "stop", CONTAINER_NAME],
capture_output=True, text=True)
if result.returncode == 0:
print(f"✅ Контейнер {CONTAINER_NAME} остановлен")
else:
print(f"⚠️ {result.stderr}")
def restart_container():
"""Перезапускает контейнер port-forward"""
print("🔄 Перезапуск контейнера k8s-portforward...")
stop_container()
start_container()
def status_container():
"""Показывает статус контейнера"""
print("📊 Статус контейнера k8s-portforward:")
# Проверяем, что k8s-controller запущен
result = subprocess.run(["docker", "ps", "--filter", "name=k8s-controller", "--format", "{{.Names}}"],
capture_output=True, text=True)
if "k8s-controller" not in result.stdout:
print("⚠️ Контейнер k8s-controller не запущен, проверяем локально...")
result = subprocess.run(["docker", "ps", "-a", "--filter", f"name={CONTAINER_NAME}",
"--format", "table {{.Names}}\t{{.Status}}\t{{.Ports}}"],
capture_output=True, text=True)
else:
# Проверяем через k8s-controller
result = subprocess.run(["docker", "exec", "k8s-controller", "docker", "ps", "-a",
"--filter", f"name={CONTAINER_NAME}",
"--format", "table {{.Names}}\t{{.Status}}\t{{.Ports}}"],
capture_output=True, text=True)
if result.returncode == 0:
print(result.stdout)
else:
print("❌ Ошибка при получении статуса")
def logs_container():
"""Показывает логи контейнера"""
print("📋 Логи контейнера k8s-portforward:")
subprocess.run(["docker", "logs", "-f", CONTAINER_NAME])
def main():
if len(sys.argv) < 2:
print("Usage: portforward_container.py <start|stop|restart|status|logs>")
sys.exit(1)
command = sys.argv[1]
if command == "start":
start_container()
elif command == "stop":
stop_container()
elif command == "restart":
restart_container()
elif command == "status":
status_container()
elif command == "logs":
logs_container()
else:
print(f"❌ Неизвестная команда: {command}")
print("💡 Доступные команды: start, stop, restart, status, logs")
sys.exit(1)
if __name__ == "__main__":
main()