#kubernetes #etcd
Вопрос:
Я вошел в модуль Kubernetes etcd
kubectl exec -it -n kube-system etcd-master -- /bin/sh
Я не могу понять, что это за ОС.
ls не работает
sh-5.0# ls
sh: ls: command not found
кошка не работает
sh-5.0# cat /etc/os-release
sh: cat: command not found
меткий,вкуснятина не распознана
sh-5.0# apt
sh: apt: command not found
sh-5.0# yum
sh: yum: command not found
Я могу только записывать и перечислять файлы с помощью расширения шаблона
sh-5.0# cd /etc
sh-5.0# echo *
debian_version default dpkg group host.conf hostname hosts issue issue.net kubernetes network nsswitch.conf os-release passwd profile.d protocols resolv.conf rpc services skel ssl update-motd.d
sh-5.0# echo `<os-release`
PRETTY_NAME="Distroless" NAME="Debian GNU/Linux" ID="debian" VERSION_ID="9" VERSION="Debian GNU/Linux 9 (stretch)" HOME_URL="https://github.com/GoogleContainerTools/distroless" SUPPORT_URL="https://github.com/GoogleContainerTools/distroless/blob/master/README.md" BUG_REPORT_URL="https://github.com/GoogleContainerTools/distroless/issues/new"
Что это за операционная система? Как установить bash здесь?
Ответ №1:
/etc/os-release
состояния, на которых основано изображение Distroless
. Приведенный там SUPPORT_URL объясняет, что:
Изображения «Без дистрибутива» содержат только ваше приложение и его зависимости во время выполнения. Они не содержат менеджеров пакетов, оболочек или каких-либо других программ, которые вы ожидали бы найти в стандартном дистрибутиве Linux.
Для получения дополнительной информации смотрите этот доклад (видео).
Это одна из лучших практик с контейнерами, чтобы оставлять внутри только то, что абсолютно необходимо. Вы можете столкнуться со многими такими изображениями, а некоторых в нем даже не будет sh
. Кроме того, корневая файловая система может быть доступна только для чтения, и/или у контейнера может быть недостаточно прав для установки.
Имея все это в виду, может случиться так, что вы не сможете принести bash
или что-либо еще внутрь. В зависимости от вашей реальной цели, вы можете:
- Попробуйте скопировать файлы из контейнера с
kubectl cp
помощью (требуетсяtar
внутри изображения); - Войдите в узел узла контейнера и найдите файлы контейнера на хосте. Вы также можете использовать
docker cp
на хосте для отправкиbash
двоичного файла в работающий контейнер.
Ответ №2:
Судя по PRETTY_NAME
тому , что он не имеет дистрибутива (https://github.com/GoogleContainerTools/distroless). На их README вы можете прочитать
Кто использует дистрибутив без дистрибутива?
- Кубернетес, начиная с версии v1.15
- …
Что, вероятно, и есть ваш случай.