Какую операционную систему использует etcd

#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 или что-либо еще внутрь. В зависимости от вашей реальной цели, вы можете:

  1. Попробуйте скопировать файлы из контейнера с kubectl cp помощью (требуется tar внутри изображения);
  2. Войдите в узел узла контейнера и найдите файлы контейнера на хосте. Вы также можете использовать docker cp на хосте для отправки bash двоичного файла в работающий контейнер.

Ответ №2:

Судя по PRETTY_NAME тому , что он не имеет дистрибутива (https://github.com/GoogleContainerTools/distroless). На их README вы можете прочитать

Кто использует дистрибутив без дистрибутива?

  • Кубернетес, начиная с версии v1.15

Что, вероятно, и есть ваш случай.