k8s debug 浅谈

一 k8s debug 浅谈

bash 复制代码
说明: 本文只是基于对'kubectl debug'浅显认识总结的知识点,后续'实际使用'再补充案例

Kubernetes 官方出品调试工具上手指南(无需安装,开箱即用)

debug-application

简化 Pod 故障诊断: kubectl-debug 介绍

1.18 版本之前需要自己安装kubectl debug 下载位置 debug_0.1.1_linux_amd64.tar.gz

① 低版本安装kubectl-debug工具

bash 复制代码
# linux x86_64

export PLUGIN_VERSION=0.1.1

mv  debug_${PLUGIN_VERSION}_linux_amd64.tar.gz kubectl-debug.tar.gz

tar -zxvf kubectl-debug.tar.gz kubectl-debug

mv kubectl-debug /usr/local/bin/

机制: 关于为什么安装kubectl-debug,但是却可以使用'kubectl debug'命令参考'plugin的'机制

② 临时容器

bash 复制代码
1、 EphemeralContainer '临时容器'

Debugging using a copy of the Pod

③ debug的背景

bash 复制代码
1、kubectl是 k8s 管理员的日常工具,当'调试'或'排查 pod'问题时

2、一般情况使用 'logs'、describe、exec '子命令'便可以找到'问题'原因

java 排错  --> 镜像如果没有'提供相关'的工具,怎么排错呢? --> 'gcc 日志'分析、jvm性能分析

补充: 容器所在节点'执行nsenter',查看pod或容器  ps: 不一定有'worker节点的登陆权限'

​思考: 哪些场景'不满足'驱使我们使用'kubectl debug'
bash 复制代码
--feature-gates="EphemeralContainers=true"

④ kubectl debug原理

kubectl debug 调试运行中的pod

bash 复制代码
1、内置的 kubectl debug 命令其实很'简单'

2、通过 '--target' 参数指定'Pod中的哪个容器',给'正在运行中的 Pod' 增加一个'临时'容器

备注: 默认是'主'容器,'第一个',也即'业务容器'

补充:--image参数就是用于指定使用'哪个镜像来debug',这个镜像包含我们'常使用的工具'即可

3、'共享进程命名空间',容器文件系统通过 '/proc/$pid/root' 链接对 pod 中的'其他容器'可见

++++++++++++  "分割线"  ++++++++++++

运行 debug 命令, 把'日志级别'设置为 10 ,查看创建 debug 容器的'过程':

kubectl run ephemeral-demo --image=pause:3.5 --restart=Never

kubectl -v=10 debug -it ephemeral --image=busybox:1.33.1 --target=temp_demo  

GET 获取 pod -> 'PATCH' 增加临时容器 -> 'GET' 获取临时容器 -> 'POST' 进入临时容器

kubeadm 安装的集群如何启动 kubectl debug 调试容器

bash 复制代码
1、当'debug'连接到Pod后,使用 'chroot /host' 突破 chroot,并完全'进入'主机

2、可以获取到'节点完全的权限',查看到节点所有的文件,甚至'重启节点'

二 如何启动临时容器

① 在已经运行k8s集群中开启临时容器

bash 复制代码
需求: 在kubeadm 安装的'已经运行'的 Kubernetes 集群中开启'临时容器'功能

1、/etc/kubernetes/manifests/kube-apiserver.yaml

添加 'EphemeralContainers=true' 开启'临时容器'功能,如下'所示'

- --feature-gates=DynamicKubeletConfig=true,EphemeralContainers=true

备注: 如果要开启'多个特性'门控功能用 ',' 隔开

② 集群初始化的时候开启临时容器功能

bash 复制代码
说明: 如果想在'初始化' Kubernetes 集群时'开启'临时容器功能,则修改 'kubeadm' 配置文件

# init.yaml 
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.19.3
apiServer:
  extraArgs:
    feature-gates: EphemeralContainers=true

然后通过 'kubeadm init' 初始化 Kubernetes 集群:

kubeadm init --config init.yaml

③ 验证

bash 复制代码
1、随着集群的运行,我们需要'验证其有效性'

2、最简单方法是检查 'Pod API',它现在应该包含'临时容器'部分以及通常容器

kubectl explain pod.spec.ephemeralContainers

④ 容器进程共享

share-process-namespace

ephemeral-containers

feature-gates

bash 复制代码
1、验证 Pod 中是否允许'进程共享',那么可以运行:

kubectl get pod pod_name -o json  | jq .spec.shareProcessNamespace --> 'true'

docker 逃逸方法汇总

bash 复制代码
容器逃逸: 避免'忘记'密码,'重启'服务器  --> 弄一个备用'紧急的逃生'通路

引申: 镜像是否做过'安全'扫描
相关推荐
再ZzZ8 分钟前
Docker快速部署Kafka(内网通用版本)
docker·容器·kafka
亚马逊云开发者13 分钟前
告别手动部署:在 Amazon EKS 上用 CodePipeline + Argo CD 搭建 GitOps CI/CD
elasticsearch·ci/cd·kubernetes
@atweiwei20 分钟前
深入解析gRPC服务发现机制
微服务·云原生·rpc·go·服务发现·consul
AI精钢3 小时前
什么是面向 Agent 的 LLM?从 Qwen3.6-Plus 看大模型的新分水岭
网络·数据库·人工智能·云原生·aigc
AI精钢4 小时前
从 Prompt Engineering 到 Fine-Tuning:LLM 应用落地的理性决策框架
大数据·人工智能·云原生·prompt·aigc
正经教主5 小时前
安全养虾:[windows]Docker部署OpenClaw详细过程记录
安全·docker·容器
程序员 沐阳5 小时前
Docker 命令完全指南:从入门到实战
docker·容器·eureka
繁星星繁5 小时前
Docker(一)
java·c语言·数据结构·c++·docker·容器·eureka
Riu_Peter6 小时前
【技术】Docker 释放空间
运维·docker·容器
爱学习的程序媛6 小时前
【Day2】WSL2+Docker配置全攻略
运维·docker·容器·wls2