Minikube部署的Otel Collector容器无法执行ls等Linux命令怎么办
问题原因
你使用的otel/opentelemetry-collector-contrib:0.37.1是官方默认的distroless最小镜像,这类镜像裁剪了所有非必要的系统组件,仅保留otel-collector核心可执行文件,没有内置ls、bash、sh这类基础命令和shell环境,所以执行exec操作会报找不到可执行文件的错误,属于镜像设计特性,并非镜像损坏或Pod运行异常。
解决方案
方案1:无需进入容器,直接用kubectl原生命令获取信息
查看容器运行日志:kubectl logs -n adalyu-k8s otel-collector-lzvwv拷贝容器内文件到本地查看(以配置文件为例):
kubectl cp -n adalyu-k8s otel-collector-lzvwv:/etc/otel/config.yaml ./local-otel-config.yaml方案2:更换带调试工具的镜像版本
官方提供了同版本带-debug后缀的镜像,内置基础命令和shell环境,把DaemonSet的镜像替换为otel/opentelemetry-collector-contrib:0.37.1-debug重新发布后,即可正常执行kubectl exec操作。方案3:临时调试(无需修改原有Pod配置)
若使用的K8s版本≥1.20,可以用kubectl debug命令注入临时调试容器,共享原Pod的进程和文件空间:kubectl debug -n adalyu-k8s -it otel-collector-lzvwv --image=busybox:1.36 --share-processes进入调试容器后可直接使用busybox内置的各类工具完成排查,调试结束后临时容器会自动销毁,不影响原有业务运行。
内容的提问来源于stack exchange,提问作者dashenswen
相关产品推荐
相关产品推荐

