合肥做网站多少钱,海口网站制作策划,网站访问量的单位,肇庆建设局网站一 k8s debug 浅谈
说明#xff1a; 本文只是基于对kubectl debug浅显认识总结的知识点,后续实际使用再补充案例
Kubernetes 官方出品调试工具上手指南(无需安装#xff0c;开箱即用)
debug-application
简化 Pod 故障诊断: kubectl-debug 介绍
1.18 版本之前需要自己…一 k8s debug 浅谈
说明 本文只是基于对kubectl debug浅显认识总结的知识点,后续实际使用再补充案例
Kubernetes 官方出品调试工具上手指南(无需安装开箱即用)
debug-application
简化 Pod 故障诊断: kubectl-debug 介绍
1.18 版本之前需要自己安装kubectl debug 下载位置 debug_0.1.1_linux_amd64.tar.gz
① 低版本安装kubectl-debug工具
# linux x86_64export PLUGIN_VERSION0.1.1mv debug_${PLUGIN_VERSION}_linux_amd64.tar.gz kubectl-debug.tar.gztar -zxvf kubectl-debug.tar.gz kubectl-debugmv kubectl-debug /usr/local/bin/机制 关于为什么安装kubectl-debug,但是却可以使用kubectl debug命令参考plugin的机制 推荐下面的方式,而不是plugin插件的方式 1、在 v1.23 及以上版本中该功能默认开启2、针对 1.23 以下的 K8S 版本需要通过以下方式,手动开启1) 控制面 开启 EphemeralContainers featureGate2) 进入 master 节点,编辑 /etc/kubernetes/manifests/ 下的 kube-apiserver.yaml、kube-controller-manager.yaml、kube-scheduler.yaml备注 实际操作只修改kube-apiserver.yaml即可3) 在 command 部分添加 - --feature-gatesEphemeralContainerstrue4) kubelet 服务开启该功能5) 在节点上编辑 /var/lib/kubelet/kubeadm-flags.env添加 --feature-gatesEphemeralContainerstrue或者设置KUBELET_EXTRA_ARGS--feature-gatesEphemeralContainerstrue#6) 重启 kubeletsystemctl restart kubelet细节 v1.18.4 版本中 必须使用 kubectl alpha debug ② 临时容器
1、 EphemeralContainer 临时容器 Debugging using a copy of the Pod
③ debug的背景
1、kubectl是 k8s 管理员的日常工具,当调试或排查 pod问题时2、一般情况使用 logs、describe、exec 子命令便可以找到问题原因java 排错 -- 镜像如果没有提供相关的工具,怎么排错呢? -- gcc 日志分析、jvm性能分析补充 容器所在节点执行nsenter,查看pod或容器 ps: 不一定有worker节点的登陆权限思考 哪些场景不满足驱使我们使用kubectl debug --feature-gatesEphemeralContainerstrue
④ kubectl debug原理
kubectl debug 调试运行中的pod 1、内置的 kubectl debug 命令其实很简单2、通过 --target 参数指定Pod中的哪个容器,给正在运行中的 Pod 增加一个临时容器备注 默认是主容器,第一个,也即业务容器补充--image参数就是用于指定使用哪个镜像来debug,这个镜像包含我们常使用的工具即可3、共享进程命名空间,容器文件系统通过 /proc/$pid/root 链接对 pod 中的其他容器可见 分割线 运行 debug 命令, 把日志级别设置为 10 ,查看创建 debug 容器的过程kubectl run ephemeral-demo --imagepause:3.5 --restartNeverkubectl -v10 debug -it ephemeral --imagebusybox:1.33.1 --targettemp_demo GET 获取 pod - PATCH 增加临时容器 - GET 获取临时容器 - POST 进入临时容器 kubeadm 安装的集群如何启动 kubectl debug 调试容器
1、当debug连接到Pod后使用 chroot /host 突破 chroot并完全进入主机2、可以获取到节点完全的权限,查看到节点所有的文件,甚至重启节点
二 如何启动临时容器
① 在已经运行k8s集群中开启临时容器
需求 在kubeadm 安装的已经运行的 Kubernetes 集群中开启临时容器功能1、/etc/kubernetes/manifests/kube-apiserver.yaml添加 EphemeralContainerstrue 开启临时容器功能,如下所示- --feature-gatesDynamicKubeletConfigtrue,EphemeralContainerstrue备注 如果要开启多个特性门控功能用 , 隔开 ② 集群初始化的时候开启临时容器功能
说明 如果想在初始化 Kubernetes 集群时开启临时容器功能,则修改 kubeadm 配置文件# init.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.19.3
apiServer:extraArgs:feature-gates: EphemeralContainerstrue然后通过 kubeadm init 初始化 Kubernetes 集群kubeadm init --config init.yaml
③ 验证
1、随着集群的运行我们需要验证其有效性2、最简单方法是检查 Pod API,它现在应该包含临时容器部分以及通常容器kubectl explain pod.spec.ephemeralContainers ④ 容器进程共享 share-process-namespace
ephemeral-containers
feature-gates
1、验证 Pod 中是否允许进程共享,那么可以运行kubectl get pod pod_name -o json | jq .spec.shareProcessNamespace -- true
⑤ docker 逃逸方法汇总
容器逃逸: 避免忘记密码,重启服务器 -- 弄一个备用紧急的逃生通路引申 镜像是否做过安全扫描