Зайти в контейнер, не выясняя имя пода

Оболочка внутри пода с запасным вариантом на случай, если bash в образе нет, и обращение через deploy вместо имени пода

kubectl -n khorost exec -it deploy/khorost-tech-prod-khorost-tech-site -c site -- sh
kubectl exec -it -n vog vog-web-84954c8df5-xs47s -c vog-web -- sh -c "clear; (bash || ash || sh)"
kubectl -n khorost exec deploy/imgproxy-prod-imgproxy -c cache -- ls -la /cache

Обращение через deploy/имя избавляет от связки «сначала get pods, потом скопировать хеш из имени». Особенно заметно после каждого передеплоя, когда имя пода меняется целиком. Работает и для sts/, ds/, job/.

Связка bash || ash || sh закрывает разницу между образами: в Alpine нет bash, в дистрибутивах на Debian нет ash, а sh есть почти везде. Скобки нужны, чтобы || относился ко всей цепочке, clear просто убирает мусор от предыдущего вывода.

-c обязателен, если в поде больше одного контейнера — иначе kubectl выберет первый и вы попадёте не туда, где искали. Сайдкары вроде прокси или сборщика логов делают это обычной ситуацией.

Если оболочки нет вообще — образ distroless, — заходить некуда, и нужен kubectl debug с временным контейнером. Признак именно этого случая: команда падает не по правам, а с executable file not found.