Files
resume/stack/kubernetes/USAGE.md
2026-07-18 23:33:26 +03:00

133 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# USAGE: как пользоваться стендом (запуск / остановка / проверка)
Операционная шпаргалка, а не учебный материал — сюда смотришь, когда нужно просто поднять/погасить стенд между сессиями курса, без объяснений «зачем». Учебный курс — [LEARNING.md](LEARNING.md), окружение и характеристики сервера — [SERVER.md](SERVER.md), на чём остановился по модулям — [PROGRESS.md](PROGRESS.md), разбор каждой команды — [COMMANDS.md](COMMANDS.md).
## 1. Подключение
```bash
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 "..."`:
```bash
ssh totserver@192.168.31.163 'bash -lc "kubectl get nodes"'
```
`kubectl` (snap) и `docker` видны в обоих случаях без исключений.
## 2. Быстрая проверка состояния
Одним блоком — что вообще сейчас поднято:
```bash
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-*` пусто) — создать заново:
```bash
# одна нода, как сейчас (модули 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`, сами не поднимаются) — поднять существующие без потери состояния:
```bash
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 смотрит именно в этот кластер:
```bash
ssh totserver@192.168.31.163 'bash -lc "kubectl config current-context"'
# ожидается: kind-lab
```
## 4. Остановка кластера (пауза, не удаление)
Когда заканчиваешь сессию курса и не хочешь держать кластер прогретым (он ест ~500 МБ RAM и часть ядра в простое — не критично, но незачем без нужды):
```bash
ssh totserver@192.168.31.163 'docker stop $(docker ps -aq --filter "name=^lab-")'
```
Поды, PVC, всё состояние кластера остаётся на диске и возвращается как было после `docker start` (раздел 3).
## 5. Полный снос кластера
Когда нужно чистое состояние — например, начиная модуль 2 с новой топологией (см. [PROGRESS.md](PROGRESS.md) → «Осталось на следующую сессию»):
```bash
ssh totserver@192.168.31.163 'bash -lc "kind delete cluster --name lab"'
```
Безопасно для остального на сервере — kind-образы отдельные от всего, что использует Gitea.
## 6. Чего не трогать
Рядом на том же Docker крутится боевой CI-стек Gitea — не часть курса, но легко случайно задеть. Коротко (полный чек-лист — [SERVER.md → «CI-инфраструктура на сервере — что нельзя ломать»](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](PROGRESS.md).
- Что проходить дальше и как — [LEARNING.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
```