k8s debug 浅谈

news2024/10/5 16:28:27

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1308291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【docker】Hello World

搜索hello-world镜像 docker search hello-world拉去镜像 docker pull hello-world查看本地镜像 docker images 运行镜像 docker run hello-world查看所有的容器 docker ps -a查询start状态容器 docker ps 输出介绍 CONTAINER ID: 容器 ID。IMAGE: 使用的镜像。COMMAN…

No module named ‘osgeo’解决办法

from osgeo import gdal 报错:No module named ‘osgeo’ pycharm安装osgeo、GDAL都失败 pip install osgeo失败 最后先下载对应版本的GDAL文件 再cmd命令行中用对应环境的python进行GDAL包安装 1.我将我的Anaconda某个环境文件夹D:\software\pinstall\Anaconda3…

window系统使用ESP8266开发板(CP2102)

连接开发板到电脑 虚拟机中选择连接的开发板硬件 查看设备管理器 更新驱动: CP210x USB to UART Bridge VCP Drivers - Silicon Labs 驱动安装成功

每日一练【将 x 减到 0 的最小操作数】

一、题目描述 给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 ,返回 最小…

为什么QLC NAND才是ZNS SSD最大的赢家?-part3

在ZNS SSD设计中,也有很多的挑战: Open Zones 对写入缓冲区的需求:保持大量的 open zones(例如 1K)会增加对带宽的需求,并要求控制器提供足够的缓冲空间来管理并发写入请求。这需要较大的高带宽写入缓冲区以…

【功能更新】HelpLook AI能力数据分析能力强化提升!

功能更新速览👇 AI能力: 1.AI搜索支持设置为手动查看 2.新增文心一言3.5机器人模型 3.支持多轮对话 数据分析: 1.搜索词新增对应点击文章的数据统计 2.支持统计内容创建作者及相关数据 3.新增操作日志 4.新增获取留资列表API AI能力 1.AI搜索支持…

【数组Array】力扣-5 最长回文子串

目录 题目描述 题解labuladong 题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab"…

C++系列第八篇 数据类型下篇 - 复合类型(指针及动态内存申请)

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建(WSL 方向)-CSDN博客 C 系列 第二篇 你真的了解C吗?本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 C 系列 第四篇 C 数据类型…

改善代码质量,试试这10种方法

那么,什么是高质量的代码?如何才能写出高质量的代码?为什么有的程序员工作 5年,写出来的代码质量还不如 3年的程序员?今天我们就来聊一聊。 1. 什么是高质量代码 代码的“好”与“坏”是一个相对的描述,因…

WEB渗透—PHP反序列化(一)

Web渗透—PHP反序列化 课程学习分享(课程非本人制作,仅提供学习分享) 靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场 课程地址:PHP反序列化漏洞学习_哔哩…

Vue3-16-【v-model】 表单数据绑定

作用描述 v-model 指令,实现了 表单输入组件的值 与 js 中的变量的值的绑定关系。 当我们在页面上执行输入动作时,js中变量的值也会同步发生变化。表单不仅仅局限于输入框,其他的如 : 单选按钮,复选框,下拉…

用AI画个女朋友回家过年,1行Python代码,免费实现

#这才是真功夫# 大家好,这里是程序员晚枫,全网同名。 马上过年了,还是单身的举个爪! 今年GPT系列的产品非常火爆,今天给大家分享一下,如何免费用AI代码画1个女朋友。👇 直接上代码 大家学习 或 …

【代码随想录】刷题笔记Day35

前言 日常学习,抵触心理5%;毫无指示的干活,抵触心理95% 122. 买卖股票的最佳时机 II - 力扣(LeetCode) 把整体利润拆分为每次利润,只要积上涨的就可以,so easy class Solution { public:int …

Android codec2 视频框架之编码输出内存管理

文章目录 pool的创建pool 中申请内存buffer 从service传递到clientC2buffer转换为MediaCodecBuffer编码 输出C2buffer的生命周期 buffer在框架中的流动流程,从buffer的申请、填充数据到binder中传递、转换为应用层数据、从应用层释放。 围绕以下的方面:…

业务代码-整合框架-存储-缓存常见错误详解一

一. java空指针和异常: 1.什么是空指针异常(java.lang.NullPointException): 1.1常见的空指针异常案例: public class WhatIsNpe {public static class User {private String name;private String[] address;public void print…

【C++11】右值引用与移动语义

一.左值与右值 左值:可以取地址的表示数据的表达式,左值可以出现在赋值符号左边 右值:不能取地址的表示数据的表达式,右值不能出现在赋值符号左边 int fun() {return 0; } int main() {int a 0;//a->左值const int b 1;//b-&…

Java 入门第四篇 集合

Java 入门第四篇 集合 一,什么是集合 在Java中,集合(Collection)是一种用于存储和操作一组对象的容器类。它提供了一系列的方法和功能,用于方便地管理和操作对象的集合。集合框架是Java中非常重要和常用的一部分&…

C++进阶篇9---类型转换

C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,C语言中总共有两种形式的类型转换:隐式类型 转换和…

参数学习——糖果问题(人工智能期末复习)

之前看了好久都不知道这题咋写,后来看了这篇机器智能-高频问题:糖果问题,大概看明白了,其实主要围绕着这两个公式 光看公式也看不懂,还是要结合题目来 己知有草莓味和酸橙味两种类型的糖果,分别放入5种不同…

深入了解—C++11特性

目录 一、 C11简介 二、初始化列表 2.1 C98中{}的初始化问题 2.2 内置类型的列表初始化 2.3 自定义类型的列表初始化 2.3.1. 标准库支持单个对象的列表初始化 2.3.2. 多个对象的列表初始化 三、变量类型推导 3.1 为什么需要类型推导 3.2 decltype类型推导 3.2.1. 推…