etcd使用什么操作系统

What operating system etcd uses

我登录了 Kubernetes etcd pod

kubectl exec -it -n kube-system etcd-master -- /bin/sh

我不知道 OS 是什么。

ls 不起作用

sh-5.0# ls
sh: ls: command not found

猫不工作

sh-5.0# cat /etc/os-release
sh: cat: command not found

apt,无法识别 yum

sh-5.0# apt
sh: apt: command not found

sh-5.0# yum
sh: yum: command not found

我只能通过模式扩展来 cd 和列出文件

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?

/etc/os-release 声明图像基于 DistrolessSUPPORT_URL 给出的解释是:

"Distroless" images contain only your application and its runtime dependencies. They do not contain package managers, shells or any other programs you would expect to find in a standard Linux distribution.

For more information, see this talk (video).

这是使用容器的最佳做法之一,只保留绝对必要的内容。你可能会遇到很多这样的图片,有些甚至没有 sh 。此外,根文件系统是只读的and/or容器可能没有足够的权限来安装东西。

考虑到所有这些,您可能无法将 bash 或任何其他物品带入室内。根据您的实际目标,您可以:

  1. 尝试使用 kubectl cp 将文件从容器中复制出来(图像中需要 tar);
  2. 进入容器的宿主机节点,定位宿主机上的容器文件。您也可以在主机上使用 docker cpbash 二进制文件推送到 运行 容器中。

根据 PRETTY_NAME 判断,它是 Distroless (https://github.com/GoogleContainerTools/distroless)。在他们的自述文件中,您可以阅读

Who uses Distroless?

  • Kubernetes, since v1.15
  • ...

这可能是你的情况。