133 lines
7.4 KiB
Markdown
133 lines
7.4 KiB
Markdown
# 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
|
||
``` |