docs: удалённая машина теперь полная — kubectl + kubeconfig скопирован

This commit is contained in:
“Naeel”
2026-03-11 12:58:39 +04:00
parent 729658f9e2
commit f033ae0de0
+183
View File
@@ -0,0 +1,183 @@
# Run & Logs — инструкции по запуску и сбору логов
Дата: 2026-03-11 (обновлено 2026-03-11)
## ГЛАВНОЕ ОТКРЫТИЕ: запускать всё на удалённой машине
**Проблема:** lokальная машина (`remote_dev`) ходит в интернет через VPN, который нестабилен:
- `docker push` — TLS handshake timeout
- `terraform apply` — TLS timeout при скачивании провайдера
- HTTP-запросы к `sless-api.kube5s.ru` — иногда падают
**Решение:** удалённая машина `192.168.1.220` имеет **прямой выход в интернет без VPN**.
Все долгие операции нужно запускать **там через SSH**, а не локально.
Агент Copilot делает это автоматически: пишет команду через `sshpass ssh`, читает вывод/логи.
### Что запускаем на удалённой машине (192.168.1.220):
- `terraform init / apply / destroy` — все E2E и стресс-тесты
- `git pull / push`
- `docker build / push`
- `kubectl` деплой оператора — kubeconfig скопирован в `~/.kube/config` (2026-03-11)
- `run_stress_test.sh`, `run_e2e_tests.sh`
- HTTP-проверки к `sless-api.kube5s.ru`
- `go build / go test` (если нужно проверить без VPN)
### Что остаётся локально:
- VS Code + Copilot — правка кода
- `git commit + push` (файлы редактируются здесь)
### Шаблон: запустить команду на удалённой машине
```bash
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 '<команда>'
```
### Шаблон: запустить долгий скрипт в фоне и смотреть лог
```bash
# Запуск в фоне:
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 \
'cd /home/naeel/dev/sless && nohup bash run_stress_test.sh > /tmp/stress.log 2>&1 & echo PID=$!'
# Следить за логом:
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'tail -30 /tmp/stress.log'
```
---
1) Предварительные условия
- На локальной машине должен быть доступ в репозиторий (этот проект).
- Для удалённого запуска через SSH используйте ключ или пароль пользователя `naeel`.
- Если нужен неинтерактивный ввод пароля, установите `sshpass`.
**Реквизиты удалённой машины:**
- Host: `192.168.1.220`
- User: `naeel`
- Password: `p`
- Repo path: `/home/naeel/dev/sless`
Пример подключения:
```bash
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'echo OK'
```
2) Скрипты (подготовленные в репо)
- Диагностика системы: `.tmp/ssh_diag.sh`
- Сбор логов ssh: `.tmp/ssh_logs.sh`
- Тест пуша в pearlharbor: `test_pearlharbor_push.sh` (в корне репо)
3) Быстрый запуск диагностик (одной командой, безопасно)
Если `sshpass` установлен, запустить локально и направить вывод в файл на локальной машине:
```bash
sshpass -p 'p' ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'bash -s' < .tmp/ssh_diag.sh > /tmp/ssh_diag_output.txt 2>&1
scp -o StrictHostKeyChecking=no naeel@192.168.1.220:/tmp/ssh_diag_output.txt ./
```
Или интерактивно (ввести пароль вручную):
```bash
ssh -o StrictHostKeyChecking=no naeel@192.168.1.220 'bash -s' < .tmp/ssh_diag.sh
```
4) Сбор системных логов вручную (на хосте)
Запустите эти команды на хосте (через ssh) и сохраните результаты в `/tmp` для удобного скачивания:
```bash
sudo journalctl -u ssh -n 200 --no-pager > /tmp/ssh_journal.log
sudo tail -n 200 /var/log/auth.log > /tmp/auth.log
sudo systemctl status ssh --no-pager > /tmp/ssh_status.txt
sudo cat /etc/ssh/sshd_config > /tmp/sshd_config.txt
```
Docker логи и состояние:
```bash
docker --version > /tmp/docker_version.txt 2>&1 || true
docker ps -a > /tmp/docker_ps.txt 2>&1 || true
docker logs <container_name> > /tmp/docker_<container_name>.log 2>&1 || true
```
Если использовался `nohup` или фоновые скрипты, проверьте их лог-файлы (пример):
```bash
ls -la /tmp | grep pearlharbor
cat /tmp/pearlharbor_bg.log > /tmp/pearlharbor_bg.log.copy || true
```
5) Забрать логи на локальную машину
```bash
scp naeel@192.168.1.220:/tmp/ssh_journal.log ./
scp naeel@192.168.1.220:/tmp/auth.log ./
scp naeel@192.168.1.220:/tmp/docker_ps.txt ./
```
6) Запуск `test_pearlharbor_push.sh` (мультипуш тест)
Файл: `test_pearlharbor_push.sh` (в корне репозитория). Примеры использования:
```bash
# простая однократная прогонка (локально, когда docker настроен)
bash ./test_pearlharbor_push.sh
# с параметрами окружения
# NUM_PUSHES=5 CLEANUP=true ./test_pearlharbor_push.sh
# CREATE_PROJECT=true NUM_PUSHES=3 ./test_pearlharbor_push.sh
```
Скрипт печатает сводку по каждому пушу и возвращает HTTP/registry статусы. При включённом `CLEANUP=true` он попытается удалить тестовые теги через Harbor API.
7) Рекомендации по безопасности
- Никогда не выкладывайте содержимое `secrets/pearlharbor_registry.txt` публично.
- Если используете `sshpass`, убедитесь, что доступ к вашей машине ограничен и удалённый пароль меняется по окончании тестов.
8) Что делать при проблемах
- Если `docker push` даёт TLS handshake timeout — проверьте VPN/маршрутизацию и повторы (retry) сети.
- При `401 Unauthorized` — проверьте правильность тега `registry/PROJECT/REPO:TAG` и существование проекта в Harbor (создаётся через API либо через WebUI).
- Для ошибок ssh — смотрите `/var/log/auth.log` и `journalctl -u ssh`.
9) Контактные точки (быстрый чек-лист)
- Скрипты: `.tmp/ssh_diag.sh`, `.tmp/ssh_logs.sh`
- Тест пуш: `test_pearlharbor_push.sh`
- Логи на хосте: `/var/log/auth.log`, `journalctl -u ssh`, `docker logs <container>`
Файл создан автоматически агентом 2026-03-11.
10) Соответствие локальных и удалённых путей
На локальной машине репозиторий находится в `/home/naeel/remote_dev/sless`,
на удалённой — в `/home/naeel/dev/sless`.
Это не обязательно значит, что содержимое одинаково. При проверке в данной сессии было обнаружено,
что оба репозитория указывают на один и тот же коммит:
```
3dc39ddc20648b15e1f154d5e0b238ccf9789ba0
```
Команды для проверки соответствия и синхронизации:
- Проверить текущий git-HEAD локально и на удалённой машине:
```bash
git -C /home/naeel/remote_dev/sless rev-parse HEAD
ssh naeel@serv 'git -C /home/naeel/dev/sless rev-parse HEAD'
```
- Сравнить списки файлов (локально собрать и получить с удалённой):
```bash
find /home/naeel/remote_dev/sless -type f | sort > /tmp/files_local_sless.txt
ssh naeel@serv 'find /home/naeel/dev/sless -type f | sort' > /tmp/files_remote_sless.txt
diff -u /tmp/files_local_sless.txt /tmp/files_remote_sless.txt | less
```
- Быстрая проверка синхронизации через `rsync` (dry-run):
```bash
rsync -av --dry-run --delete /home/naeel/remote_dev/sless/ naeel@serv:/home/naeel/dev/sless/
```
Если хэши совпадают, репозитории находятся в одном состоянии на уровне коммита. Если нужно, могу
запустить подробный `diff` или предложить команды для синхронизации (rsync/пуш/клонирование).