7.4 KiB
USAGE: как пользоваться стендом (запуск / остановка / проверка)
Операционная шпаргалка, а не учебный материал — сюда смотришь, когда нужно просто поднять/погасить стенд между сессиями курса, без объяснений «зачем». Учебный курс — LEARNING.md, окружение и характеристики сервера — SERVER.md, на чём остановился по модулям — PROGRESS.md, разбор каждой команды — COMMANDS.md.
1. Подключение
ssh totserver@192.168.31.163
Ключ уже настроен, пароль не спросит. Дальше два варианта:
- Обычная интерактивная SSH-сессия (просто зашёл и работаешь в терминале) — это login shell,
kind/helm/kubectl/dockerуже все видны вPATHбез танцев. - Одна неинтерактивная команда с хоста (
ssh totserver@192.168.31.163 'команда') — это non-login shell,~/.local/bin(где лежатkindиhelm) вPATHне попадает. Либо вызывать по полному пути (~/.local/bin/kind ...), либо оборачивать вbash -lc "...":
ssh totserver@192.168.31.163 'bash -lc "kubectl get nodes"'
kubectl (snap) и docker видны в обоих случаях без исключений.
2. Быстрая проверка состояния
Одним блоком — что вообще сейчас поднято:
bash -lc '
echo "--- kind-контейнеры ---"
docker ps -a --filter "name=^lab-" --format "{{.Names}}\t{{.Status}}"
echo "--- kubectl context ---"
kubectl config current-context 2>&1
echo "--- ноды ---"
kubectl get nodes -o wide 2>&1
echo "--- поды по всем namespace ---"
kubectl get pods -A 2>&1
echo "--- helm-релизы ---"
helm list -A 2>&1
echo "--- CI-стек Gitea (не трогать, но убедиться, что жив) ---"
docker ps --filter name=gitea --format "{{.Names}}\t{{.Status}}"
'
Если первый блок (docker ps -a --filter "name=^lab-") пустой — кластера нет вообще, нужно создавать (раздел 3). Если контейнеры есть, но статус Exited — кластер существует, но остановлен, поднимать без пересоздания (раздел 3). Если Up — кластер уже работает, kubectl get nodes покажет Ready.
3. Запуск кластера
Кластера нет вообще (docker ps -a по lab-* пусто) — создать заново:
# одна нода, как сейчас (модули 0-1 пройдены на таком)
bash -lc "kind create cluster --name lab"
# либо с топологией модуля 2 (1 control-plane + 2 worker), если уже дошёл до неё —
# см. kind-config.yaml с extraPortMappings 8080/8443 в SERVER.md
bash -lc "kind create cluster --name lab --config kind-config.yaml"
Занимает ~50-60 секунд с нуля (в основном скачивание образа ноды при первом разе).
Контейнеры есть, но Exited (типичная ситуация после перезагрузки сервера — у kind-нод, в отличие от Gitea, нет restart: unless-stopped, сами не поднимаются) — поднять существующие без потери состояния:
ssh totserver@192.168.31.163 'docker start $(docker ps -aq --filter "name=^lab-")'
ssh totserver@192.168.31.163 'bash -lc "kubectl wait --for=condition=Ready nodes --all --timeout=120s"'
После любого из двух вариантов — проверить, что kubectl смотрит именно в этот кластер:
ssh totserver@192.168.31.163 'bash -lc "kubectl config current-context"'
# ожидается: kind-lab
4. Остановка кластера (пауза, не удаление)
Когда заканчиваешь сессию курса и не хочешь держать кластер прогретым (он ест ~500 МБ RAM и часть ядра в простое — не критично, но незачем без нужды):
ssh totserver@192.168.31.163 'docker stop $(docker ps -aq --filter "name=^lab-")'
Поды, PVC, всё состояние кластера остаётся на диске и возвращается как было после docker start (раздел 3).
5. Полный снос кластера
Когда нужно чистое состояние — например, начиная модуль 2 с новой топологией (см. PROGRESS.md → «Осталось на следующую сессию»):
ssh totserver@192.168.31.163 'bash -lc "kind delete cluster --name lab"'
Безопасно для остального на сервере — kind-образы отдельные от всего, что использует Gitea.
6. Чего не трогать
Рядом на том же Docker крутится боевой CI-стек Gitea — не часть курса, но легко случайно задеть. Коротко (полный чек-лист — SERVER.md → «CI-инфраструктура на сервере — что нельзя ломать»):
- Не занимать порты 80, 443, 3000, 3030, 222, 4400, 9090 в
kind-config.yaml(extraPortMappings— только 8080/8443). - Не выполнять
docker system prune -a/docker image prune -a— унесёт локально собранный образgitea-runner-armhf, которого больше нигде нет. - Не удалять
.runner-файлы раннеров (/opt/gitea/runner*/) и.envрядом. - Не запускать
docker-compose ... --remove-orphansвнутри/opt/gitea. kind delete cluster(раздел 5) — безопасен, гасит только кластер, Gitea не задевает.
7. Куда дальше
- На чём остановился по модулям курса — PROGRESS.md.
- Что проходить дальше и как — LEARNING.md.
Шпаргалка
# === СОСТОЯНИЕ КЛАСТЕРА ===
kubectl get nodes -o wide
kubectl get pods -A
kubectl get pods,svc,deploy # pods, services, deployments разом
# === ДЕТАЛИ ===
kubectl describe pod <имя>
kubectl logs <имя-пода> --tail=20
kubectl logs -f <имя-пода> # follow
# === ВНУТРЬ ПОДА ===
kubectl exec -it <имя-пода> -- /bin/sh
kubectl exec <имя-пода> -- ls /app
# === СОЗДАТЬ/УДАЛИТЬ ===
kubectl apply -f файл.yaml
kubectl delete -f файл.yaml
kubectl delete pod <имя>
# === ПОМОЩЬ ===
kubectl api-resources | grep -v "^NAME" | less # что бывает
kubectl explain deployment --recursive | less # все поля deployment