devops cheatsheet

1661 commands · click to copy

1661 shown
tool
tag
Все поды с расположением на нодах и IP-адресами
kubectl get pods -A -o wide
#pods
Подробная информация: события, условия, монтирование томов
kubectl describe pod <name> -n <ns>
#pods#debug
Потоковые логи в реальном времени; добавьте -c <container> для мульти-контейнерных подов
kubectl logs -f <pod> -n <ns>
#logs#debug
Логи последнего упавшего или перезапущенного экземпляра контейнера
kubectl logs <pod> --previous -n <ns>
#logs#debug
Интерактивная оболочка внутри работающего контейнера
kubectl exec -it <pod> -n <ns> -- bash
#pods#debug
Туннелирование порта кластерного сервиса на localhost
kubectl port-forward svc/<name> 8080:80 -n <ns>
#debug#network
Блокировать до завершения деплоя или таймаута (используется в CI)
kubectl rollout status deployment/<name> -n <ns>
#deployments
Вернуться к предыдущей ревизии
kubectl rollout undo deployment/<name> -n <ns>
#deployments
Немедленно изменить количество реплик
kubectl scale deployment/<name> --replicas=3 -n <ns>
#deployments
Последние события кластера, сначала старые — удобно при post-incident разборе
kubectl get events -A --sort-by='.lastTimestamp'
#debug
Валидация манифеста через живой API без применения изменений
kubectl apply --server-side --dry-run=server -f file.yaml
#config
Текущее состояние без служебных полей; удобен как базовый шаблон
kubectl get deployment/<name> -n <ns> -o yaml
#config
Удалить под в состоянии Terminating немедленно (используйте с осторожностью)
kubectl delete pod <name> -n <ns> --grace-period=0 --force
#pods#debug
Извлечь файл из работающего контейнера
kubectl cp <ns>/<pod>:/remote/path ./local-path
#debug
Cordon ноды kubectl
Пометить ноду как неналиняющую — новые поды сюда не попадают
kubectl cordon <node>
#nodes
Drain ноды kubectl
Аккуратно вытеснить все поды перед обслуживанием
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
#nodes
Открыть ресурс в $EDITOR; изменения применяются при сохранении
kubectl edit deployment/<name> -n <ns>
#deployments#config
Проверить что ServiceAccount имеет право делать
kubectl auth can-i list pods --as=system:serviceaccount:<ns>:<sa> -n <ns>
#rbac#debug
Деплой чарта; создаёт неймспейс если не существует
helm install <release> <chart> -f values.yaml -n <ns> --create-namespace
#helm
Безопасно в CI — устанавливает если нет, обновляет если есть
helm upgrade --install <release> <chart> -f values.yaml -n <ns>
#helm
Показать что именно изменится (требует плагин helm-diff)
helm diff upgrade <release> <chart> -f values.yaml -n <ns>
#helm#debug
Вывести сгенерированный YAML в stdout без деплоя
helm template <release> <chart> -f values.yaml --debug
#helm#debug
Все вычисленные значения для задеплоенного релиза
helm get values <release> -n <ns> --all
#helm
Все Helm-релизы во всех неймспейсах
helm list -A --output table
#helm
Вернуться к конкретной исторической ревизии
helm rollback <release> <revision> -n <ns>
#helm
Удалить релиз и все управляемые им ресурсы
helm uninstall <release> -n <ns>
#helm
Проверка структуры чарта и values; падает на предупреждениях в режиме --strict
helm lint <chart-dir> -f values.yaml --strict
#helm#debug
Убедиться что все контроллеры Flux запущены и CRD установлены
flux check
#flux
Сводная таблица: Kustomizations, HelmReleases, Sources — со статусом синхронизации
flux get all -A
#flux
Инициировать немедленный git pull + apply
flux reconcile kustomization <name> --with-source -n <ns>
#flux
Немедленно повторить цикл Helm install/upgrade
flux reconcile helmrelease <name> --with-source -n <ns>
#flux
Показать какие объекты Flux владеют этим ресурсом
flux trace <kind>/<name> -n <ns>
#flux#debug
Поставить на паузу — удобно при ручных hotfix
flux suspend kustomization <name> -n <ns>
#flux
Включить приостановленный Kustomization или HelmRelease
flux resume kustomization <name> -n <ns>
#flux
Бэкап текущего конфига Flux как YAML для бутстрапа другого кластера
flux export kustomization --all > clusters/cluster.yaml
#flux#config
Кросс-компиляция и push в реестр с BuildKit
docker buildx build --platform linux/amd64,linux/arm64 -t reg/img:tag --push .
#docker
Локальный запуск с переменными из файла; --rm удаляет контейнер при выходе
docker run --rm -it --env-file .env -p 8000:8000 img:tag
#docker
Каждый слой, его команда и размер; поиск лишнего
docker history --no-trunc img:tag
#docker#debug
Удалить остановленные контейнеры, неиспользуемые образы, сети, тома
docker system prune -af --volumes
#docker
Перетегировать и запушить в другой реестр
docker pull src-reg/img:tag && docker tag src-reg/img:tag dst-reg/img:tag && docker push dst-reg/img:tag
#docker
Экспорт образа для передачи в изолированную среду
docker save img:tag | gzip > img.tar.gz
#docker
Показать изменения; сохранить артефакт плана для гейтинга в CI
terraform plan -var-file=prod.tfvars -out=plan.tfplan
#terraform
Применить именно ранее сгенерированный план — без интерактивных запросов
terraform apply plan.tfplan
#terraform
Взять уже существующий ресурс под управление Terraform
terraform import module.path.resource_type.name <remote-id>
#terraform
Атрибуты ресурса в Terraform state
terraform state show module.path.resource_type.name
#terraform
Переименовать/реорганизовать ресурс без удаления и пересоздания
terraform state mv old.address new.address
#terraform
Присоединить debug-контейнер (netshoot) к работающему поду — общие PID/net namespace
kubectl debug -it <pod> --image=nicolaka/netshoot -n <ns>
#debug#network#pods
CPU и память по каждой ноде (требует metrics-server)
kubectl top nodes
#nodes#monitoring
Поды отсортированные по памяти во всех неймспейсах — найти прожорливые
kubectl top pods -A --sort-by=memory
#pods#monitoring
Вывести только поле data; передайте в python -m json.tool для форматирования
kubectl get cm <name> -n <ns> -o jsonpath='{.data}'
#config#debug
Дамп и base64-декодирование всех полей k8s Secret
kubectl get secret <name> -n <ns> -o jsonpath='{.data}' | python3 -c "import sys,json,base64; [print(k,'=',base64.b64decode(v).decode()) for k,v in json.load(sys.stdin).items()]"
#secrets#debug
Перечислить все типы ресурсов в неймспейсе — удобно для аудита
kubectl api-resources --verbs=list --namespaced -o name | xargs -I{} kubectl get {} -n <ns> --ignore-not-found
#debug
Извлечь конкретные поля из объектов k8s API без jq
kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}\t{.metadata.name}\t{.status.phase}\n{end}'
#debug#pods
Вывести только нужные поля без jq
kubectl get pods -n <ns> -o custom-columns='NAME:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase'
#pods
Изменить поле ресурса без редактирования манифеста
kubectl patch deployment <name> -n <ns> -p '{"spec":{"replicas":2}}'
#deployments#config
Добавить/обновить аннотацию; --overwrite заменяет существующее значение
kubectl annotate pod <pod> -n <ns> key=value --overwrite
#config
Добавить или изменить лейбл на любом ресурсе
kubectl label node <node> role=worker --overwrite
#nodes#config
Запретить размещение подов без соответствующего toleration
kubectl taint nodes <node> key=value:NoSchedule
#nodes
Снять taint — поставить тире в конце
kubectl taint nodes <node> key=value:NoSchedule-
#nodes
Обновить образ контейнера без редактирования YAML
kubectl set image deployment/<name> <container>=image:tag -n <ns>
#deployments