临时容器
临时容器
一种特殊的容器,改容器在现有pod中临时运行,以便完成用户发起的操作,例如:故障排查。会使用容器来检查服务,而不是用它来构建应用程序。
由于临时容器奔溃或容器镜像不包含调试工具而导致kubectl exec 无用时,临时容器对于交互式故障排查很有用。
就是在原有的pod上,添加一个临时的Container,这个Container可以包含我们排查问题所有的工具,netstat、ps、top
创建临时容器前置条件
修改kube-apiserver、kube-scheduler、kube-controller-manager、 kube-proxy、kubelet启动配置参数,添加--feature-gates=EphemeralContainers=true 注意,--feature-gates=EphemeralContainers=true需要添加到最后,否则可能会出现意想不到的问题。 vim /usr/lib/systemd/system/kube-apiserver.service vim /usr/lib/systemd/system/kube-scheduler.service vim /usr/lib/systemd/system/kube-controller-manager.service vim /usr/lib/systemd/system/kube-proxy.service vim /usr/lib/systemd/system/kubelet.service
配置参数
--feature-gates=EphemeralContainers=true
重启服务
systemctl daemon-reload
systemctl restart kube-apiserver kube-scheduler kube-controller-manager kube-proxy kubelet
创建测试容器
kubectl run mynginxpod --image=nginx
创建临时容器配置
{ "apiVersion": "v1", "kind": "EphemeralContainers", "metadata": { "name": "mynginxpod" }, "ephemeralContainers": [{ "command": ["sh"], "image": "busybox:1.28", "name": "debugger", "stdin": true, "tty": true, "terminationMessagePolicy": "File" }] }
运行: 
namespaces:要与注入临时容器的namespaces相同,mynginxpod为注入临时容器的pod
kubectl replace --raw /api/v1/namespaces/default/pods/mynginxpod/ephemeralcontainers -f ec.json
进入临时容器
kubectl exec -it mynginxpod -c debugger sh
或者直接创建并进入临时容器
kubectl debug -it ephemeral-demo --image=busybox:1.28 --image-pull-policy=IfNotPresent --target=ephemeral-demo
创建 Pod 副本调试
创建测试容器
kubectl run myapp --image=nginx --restart=Never
通过运行以下命令,建立 myapp 的一个名为 myapp-debug 的副本, 新增了一个用于调试的 busybox容器
kubectl debug myapp -it --image=busybox --share-processes --copy-to=myapp-debug
                    
                
                
            
        
浙公网安备 33010602011771号