Какие способы взаимодействия с Kubernetes используются кроме UI, например консольные утилиты или REST API
Что проверяют
Можете ли вы сами разобраться, что происходит с тестовым стендом, не дожидаясь DevOps. Следом обычно спрашивают, как вы достанете логи упавшего сервиса, доберётесь до сервиса без внешнего адреса и проверите, что новая версия действительно раскатилась.
Как отвечать
Главный инструмент это kubectl, и лучше показать не список команд, а сценарии тестировщика:
- состояние:
kubectl get pods -n qa,kubectl describe podс событиями внизу,kubectl get eventsдля рестартов и ошибок загрузки образа; - логи:
kubectl logsс-cдля нужного контейнера,--previousдля контейнера, который уже перезапустился,-fдля потока; - доступ:
kubectl port-forward svc/api 8080:80открывает сервис локально,kubectl exec -itдаёт шелл внутри контейнера; - версия и раскатка:
kubectl rollout status deployment/apiи образ вdescribeпоказывают, что именно сейчас задеплоено; - устойчивость: удаление пода или
kubectl scaleпроверяют, как система переживает потерю реплики.
Второй способ это Kubernetes API, через который работает и сам kubectl. API-сервер отдаёт REST по HTTPS и требует аутентификации: токен сервисного аккаунта или сертификат из kubeconfig. Для быстрых экспериментов удобны kubectl proxy и kubectl get --raw /api/v1/namespaces/qa/pods. В автотестах берут клиентскую библиотеку: официальный клиент для Python или Java, fabric8 для Java, client-go для Go.
Рядом назовите Helm и Kustomize для развёртывания стенда, k9s как удобный терминальный интерфейс, kind, minikube или k3d для локального кластера. Если вы работали только с logs и port-forward, так и скажите: для QA это нормальный объём.
Где спотыкаются
Не проверяют контекст и namespace, а потом ищут под, которого «нет». Команда kubectl config current-context перед любыми действиями спасает и от удаления пода на чужом стенде.
Смотрят логи только текущего контейнера. После краша причина лежит в выводе с --previous, а новый контейнер стартовал с чистого листа.
Предлагают обращаться к API через curl по голому HTTP без токена. Так сервер не ответит, а список подов всего кластера требует прав, которых у тестировщика обычно нет.