Kubernetes是否总是给正在运行的容器一个shell
我的 Pod 清单如下:
apiVersion: v1
kind: Pod
metadata:
name: pod-nginx-container
spec:
containers:
- name: nginx-alpine-container-1
image: nginx:alpine
ports:
- containerPort: 80
我可以使用运行我的 Nginx 的容器获得一个 shell kubectl exec --stdin --tty pod-nginx-container -- /bin/sh
我的问题是 Kubernetes 是否总是为正在运行的容器提供一个 shell?我的意思是假设我已经创建了自己的 Tomcat 网络服务器映像,当我使用该映像时,我是否仍然可以让 shell 登录到运行 Tomcat 的容器?
回答
Kubernetes
Kubernetes时间表豆荚的节点。一个 Pod 由一个或多个容器组成——这些容器是从容器镜像中实例化的。
容器镜像
容器映像包含一个将作为主进程运行的命令,但它也可以包含其他二进制文件以及完整的 Linux“用户空间”,例如带有 shell 和许多工具的 Ubuntu。
容器镜像可以“从头开始”构建,除了您的应用程序之外,无需任何其他软件,但通常包含一些更多的软件供您的应用程序运行,例如glibc. 有关不包含shell 的最小基础映像,请参阅distroless。
结论
我的问题是 Kubernetes 是否总是为正在运行的容器提供一个 shell?我的意思是假设我已经创建了自己的 Tomcat 网络服务器映像,当我使用该映像时,我是否仍然可以让 shell 登录到运行 Tomcat 的容器?
您的容器包含外壳,仅当您内置外壳时 - 最有可能使用包含外壳的基本映像,例如 alpine 或 ubuntu。
这取决于你Dockerfile在构建容器镜像之前做什么docker build