k8s debug 浅谈

一   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_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的'机制

②  临时容器

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-gates="EphemeralContainers=true"

④   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 --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 调试容器

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

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

二   如何启动临时容器

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

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

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

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

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

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

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

说明: 如果想在'初始化' 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

③  验证

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 逃逸方法汇总

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

引申: 镜像是否做过'安全'扫描

相关推荐

  1. 低代码

    2023-12-14 03:48:05       62 阅读
  2. Web Component

    2023-12-14 03:48:05       59 阅读
  3. react hooks

    2023-12-14 03:48:05       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-14 03:48:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-14 03:48:05       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-14 03:48:05       82 阅读
  4. Python语言-面向对象

    2023-12-14 03:48:05       91 阅读

热门阅读

  1. RocketMQ的监控和管理工具有哪些❓

    2023-12-14 03:48:05       62 阅读
  2. python 多进程

    2023-12-14 03:48:05       48 阅读
  3. mysql select count 非常慢

    2023-12-14 03:48:05       53 阅读
  4. 项目优化过程

    2023-12-14 03:48:05       53 阅读
  5. ExecuteScalar()方法

    2023-12-14 03:48:05       58 阅读
  6. Android : LifeCycles_简单应用

    2023-12-14 03:48:05       65 阅读
  7. 【MyBatis】拦截查询结果同时动态替换

    2023-12-14 03:48:05       58 阅读
  8. 20230907docker安装MySQL配置

    2023-12-14 03:48:05       55 阅读
  9. linux 13-2day 日志轮转 日志目录 轮转参数

    2023-12-14 03:48:05       58 阅读
  10. libtorch常用函数记录

    2023-12-14 03:48:05       56 阅读
  11. 猎界新能源

    2023-12-14 03:48:05       63 阅读
  12. MATLAB Sub2ind下标值转化

    2023-12-14 03:48:05       66 阅读
  13. 配置Ubuntu18.04使iptables规则重启系统后仍然有效

    2023-12-14 03:48:05       68 阅读
  14. 计算机网络期末考试A卷及答案

    2023-12-14 03:48:05       53 阅读