K8S 临时容器使用方法

背景:

生产环境中 发现 ingress 三个POD 状态都有问题 POD 也是无法登陆进去的
image
查看日志很明显发现 有项目 ingress 配置有问题 有30个域名 但是无法定位到具体是哪个域名导致的
image

1.临时容器介绍:

  1. 当由于容器崩溃或容器镜像不包含调试工具而导致 kubectl exec 无用时, 临时容器对于交互式故障排查很有用。
  2. 尤其是,Distroless 镜像 允许用户部署最小的容器镜像,从而减少攻击面并减少故障和漏洞的暴露。 由于 distroless镜像不包含 Shell 或任何的调试工具,因此很难单独使用 kubectl exec 命令进行故障排查。
  3. 使用临时容器时,启用 进程名字空间共享 很有帮助,可以查看其他容器中的进程。
    image

2.创建临时容器

2.1 修改配置master

先对master节点做备份
cp /etc/kubernetes/manifests/ /media/0314
将所有master节点的三个配置文件 添加  - --feature-gates=EphemeralContainers=true

cat /etc/kubernetes/manifests/kube-apiserver.yaml
cat /etc/kubernetes/manifests/kube-controller-manager.yaml
cat /etc/kubernetes/manifests/kube-scheduler.yaml

重启kubelet systemctl restart kubelet

2.2 修改node节点配置

添加 --feature-gates=EphemeralContainers=true 配置即可

cat /var/lib/kubelet/kubeadm-flags.env
KUBELET_KUBEADM_ARGS="--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6 --feature-gates=EphemeralContainers=true"

重启kubelet systemctl restart kubelet

2.3 创建临时容器

参考官网

kubectl debug ingress-nginx-controller-7459f9df5d-hspps -it --image=ubuntu --share-processes --copy-to=myapp-debug1

登陆容器临时查看
kubectl exec -it pods/myapp-debug1 /bin/bash
查看ingress-nginx配置信息 此时能找到所有的配置
image

3. 临时容器用于调试

生产环境中有的POD 无法登陆

image

创建临时容器
kubectl debug -it nfs-client-provisioner-5d6df6d98-bq8k6 --image=busybox:1.28
image

posted @ 2023-03-14 11:54  小星奕的快乐  阅读(299)  评论(0)    收藏  举报