Kubernetes的etcd Pod使用什么操作系统?如何在其中安装bash?
问题解答
1. 所用操作系统说明
该etcd Pod使用的是Distroless 最小化运行时镜像,底层基于 Debian GNU/Linux 9(stretch)版本。
Distroless是专为生产环境设计的精简镜像,仅保留应用运行必须的依赖组件,默认不集成ls、cat等基础工具,也没有apt、yum这类包管理程序,因此执行常用命令时会提示找不到。
2. 安装/使用bash的方案
针对不同需求有两种可行方案:
临时调试场景
不需要修改原有Pod,使用Kubernetes官方临时调试容器功能即可,执行命令:kubectl debug -it -n kube-system etcd-master --image=busybox:1.36 --share-processes
启动的临时容器自带bash、ls等常用命令,且共享原etcd Pod的进程、网络、存储资源,可满足调试需求。
持久化支持bash场景
需要重新构建自定义etcd镜像,将bash提前打包进镜像,参考Dockerfile多阶段构建逻辑:
# 构建阶段:下载bash及依赖库 FROM debian:9 AS builder RUN apt update && apt install -y bash \ && mkdir -p /tmp/output/bin /tmp/output/lib \ && cp /bin/bash /tmp/output/bin/ \ && ldd /bin/bash | grep "=> /" | awk '{print $3}' | xargs cp -t /tmp/output/lib/ # 合并阶段:将bash复制到官方etcd镜像 FROM k8s.gcr.io/etcd:v3.5.7 # 替换为你当前使用的etcd镜像版本 COPY --from=builder /tmp/output/bin /bin COPY --from=builder /tmp/output/lib /lib
使用构建完成的新镜像替换原有etcd Pod的镜像即可。
内容的提问来源于stack exchange,提问作者Grzegorz Wilanowski
相关产品推荐
相关产品推荐

