«kubectl запуск» redis-cli напрямую

#redis #kubectl #redis-cli

Вопрос:

Я хочу запустить контейнер и напрямую redis-cli интерактивно запустить его внутрь. По какой-то причине в моих попытках входные данные всегда игнорируются.

Запуск интерактивной оболочки, а затем запуск программы вручную работает:

 # in my local shell:
$ kubectl run redis-cli --image redis:latest --attach --leave-stdin-open --rm -it --command -- bash
# then in container shell:
root@redis-cli:/data# redis-cli -h redis.example.com
# now the redis-cli shell is open:
redis.example.com:6379>
 

Как мне объединить это в одну команду, которая приведет меня непосредственно в redis-cli оболочку? Я пробовал следующее, но не вижу подсказки, и все мои входные данные игнорируются. Я даже не могу нажать ctrl-C или ctrl-D из него.

 kubectl run redis-cli2 --image redis:latest --attach --leave-stdin-open --rm -it --command -- redis-cli -h redis.example.com --stat
# or
kubectl run redis-cli2 --image redis:latest --attach --leave-stdin-open --rm -it --command -- bash -ic -- "redis-cli -h redis.example.com --stat"
 

Если я выполню a --stat , я увижу вывод команды. Если я выполняю a ping , я вижу, что сигнал поступает на сервер Redis (используя monitor другой контейнер), но я никогда не вижу никаких выходных данных, и модуль CrashLoopBackOff запускается перед завершением.

На данный момент я не уверен, является ли это поведение специфичным для redis-cli изображения или redis для изображения, или это поведение одинаково для других интерактивных программ (ну, по крайней bash мере, кажется, что оно работает так, как ожидалось).

Комментарии:

1. Какой образ/развертывание используется для самого redis? Чтобы иметь минимальный воспроизводимый пример.

2. В моем случае это экземпляр AWS ElastiCache, но я не ожидаю, что это будет иметь значение. Запуск сервера Redis в том же кластере k8s, вероятно, является более простым способом воспроизвести ситуацию.

3. Ну, я видел, что ты сказал , я попытался добавить уровень многословия к максимальному --v=9 , бод запланирован и ждет чего-то другого. Кроме того, если вы нажмете 31 раз на любую клавишу, он покажет вам приглашение. То же самое происходит с другим изображением с. redis-cli Не знаю почему.

4. Кстати, какая версия kubectl кластера and используется? У него может быть другое поведение

Ответ №1:

Разместив это как вики-страницу сообщества, не стесняйтесь редактировать и расширять


Я нашел обходной путь, скорее всего, это связано с redis-cli контейнером и его реализацией. То же самое поведение наблюдается при различном изображении redis-cli docker.io/bitnami/redis:6.2.5-debian-10-r34

Когда выполняется команда из вопроса, после создания модуля redis-cli отображается это сообщение:

 $ kubectl run redis-cli3 --image redis:latest --attach --leave-stdin-open --env REDIS_PASSWORD=$REDIS_PASSWORD --rm -it -- redis-cli -h redis-master -a $REDIS_PASSWORD
If you don't see a command prompt, try pressing enter.
 

Он должен стать enter ключом, но он не работает.

Удивительно shift r , но комбинация принята и показывает redis-cli связь.

Комментарии:

1. Может подтвердить, shift r выводит запрос. Можете ли вы объяснить, почему это работает?

2. @BalzGuenat, К сожалению, я не знаю, по этой причине я сделал этот обходной путь в качестве вики-сообщества в надежде, что кто-то действительно сможет добавить это в мой ответ или добавить свой. Однако я думаю, что это следует адресовать redis-cli разработчикам приложений, чтобы они могли отслеживать, что, где и почему.