K8s-临时容器 Ephemeral Containers

news/2024/5/1 8:49:01/文章来源:https://blog.csdn.net/weixin_45081220/article/details/127181033

在这里插入图片描述

临时容器 Ephemeral Containers

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

开启临时容器功能

开启特性

1. master 节点配置 APIServer 组件
[root@vms120 ~]# cat /etc/kubernetes/manifests/kube-apiserver.yaml
- --feature-gates=EphemeralContainers=true
...2. master 节点配置 controller-manager
[root@vms120 ~]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml
spec:containers:- command:- --feature-gates=EphemeralContainers=true            # 增加
...3. master 节点配置 kube-scheduler
[root@vms120 ~]# vim /etc/kubernetes/manifests/kube-scheduler.yaml
spec:containers:- command:- --feature-gates=EphemeralContainers=true            # 增加
# 重启服务 
[root@vms120 ~]# systemctl restart kubelet.service4. 所有 node 节点配置 kubelet 参数
添加 --feature-gates=EphemeralContainers=true
[root@vms121 kubernetes]# 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"
# 重启 node kubelet 服务
[root@vms121 kubernetes]# systemctl daemon-reload
[root@vms121 kubernetes]# systemctl restart kubelet

测试

1. 创建 pod
[root@vms120 ~]# kubectl run ephemeral-demo --image=registry.aliyuncs.com/google_containers/pause:3.2 --restart=Never
pod/ephemeral-demo created[root@vms120 ~]# kubectl  exec -it ephemeral-demo  -- sh
OCI runtime exec failed: exec failed: unable to start container process: exec: "sh": executable file not found in $PATH: unknown
command terminated with exit code 126
# 无法 kubectl exec

解决无法 exec ,我们创建一个临时容器添加到这个pod里

加上-i参数将直接进入添加的临时容器的控制台界面,因为是使用kubectl run 创建的pod ,所以需要-target 参数指定另一个容器的进程命名空间。因为 kubectl run 不能在它创建的pod中启用 共享进程命名空间

[root@vms120 ~]# kubectl debug -it ephemeral-demo --image=busybox --target=ephemeral-demo
Targeting container "ephemeral-demo". If you don't see processes from this container it may be because the container runtime doesn't support this feature.
Defaulting debug container name to debugger-bljnj.
If you don't see a command prompt, try pressing enter.
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # 

此时再去看pod 的信息会发现已经被添加了一个类型为ephemeralContainers的容器

[root@vms120 ~]# kubectl  get pod ephemeral-demo   -o json|jq .spec
{"containers": [{"image": "registry.aliyuncs.com/google_containers/pause:3.2","imagePullPolicy": "IfNotPresent","name": "ephemeral-demo","resources": {},"terminationMessagePath": "/dev/termination-log","terminationMessagePolicy": "File","volumeMounts": [{"mountPath": "/var/run/secrets/kubernetes.io/serviceaccount","name": "kube-api-access-sqmzl","readOnly": true}]}],"dnsPolicy": "ClusterFirst","enableServiceLinks": true,"ephemeralContainers": [{"image": "busbox","imagePullPolicy": "Always","name": "debugger-9l8mw","resources": {},"stdin": true,"targetContainerName": "ephemeral-demo","terminationMessagePath": "/dev/termination-log","terminationMessagePolicy": "File","tty": true},{"image": "busybox","imagePullPolicy": "Always","name": "debugger-slx6g","resources": {},"stdin": true,"targetContainerName": "ephemeral-demo","terminationMessagePath": "/dev/termination-log","terminationMessagePolicy": "File","tty": true},{"image": "busybox","imagePullPolicy": "Always","name": "debugger-gw6zt","resources": {},"stdin": true,"terminationMessagePath": "/dev/termination-log","terminationMessagePolicy": "File"},{"image": "busybox","imagePullPolicy": "Always","name": "debugger-cxc8b","resources": {},"stdin": true,"targetContainerName": "ephemeral-demo","terminationMessagePath": "/dev/termination-log","terminationMessagePolicy": "File","tty": true},{"image": "busybox","imagePullPolicy": "Always","name": "debugger-bljnj","resources": {},"stdin": true,"targetContainerName": "ephemeral-demo","terminationMessagePath": "/dev/termination-log","terminationMessagePolicy": "File","tty": true}],"nodeName": "vms121.rhce.cc","preemptionPolicy": "PreemptLowerPriority","priority": 0,"restartPolicy": "Never","schedulerName": "default-scheduler","securityContext": {},"serviceAccount": "default","serviceAccountName": "default","terminationGracePeriodSeconds": 30,"tolerations": [{"effect": "NoExecute","key": "node.kubernetes.io/not-ready","operator": "Exists","tolerationSeconds": 300},{"effect": "NoExecute","key": "node.kubernetes.io/unreachable","operator": "Exists","tolerationSeconds": 300}],"volumes": [{"name": "kube-api-access-sqmzl","projected": {"defaultMode": 420,"sources": [{"serviceAccountToken": {"expirationSeconds": 3607,"path": "token"}},{"configMap": {"items": [{"key": "ca.crt","path": "ca.crt"}],"name": "kube-root-ca.crt"}},{"downwardAPI": {"items": [{"fieldRef": {"apiVersion": "v1","fieldPath": "metadata.namespace"},"path": "namespace"}]}}]}}]
}

有些时候 Pod 的配置参数使得在某些情况下很难执行故障排查。例如,在容器镜像中不包含 shell 或者你的应用程序在启动时崩溃的情况下, 就不能通过运行 kubectl exec 来排查容器故障。在这些情况下,你可以使用 kubectl debug 来创建 Pod 的副本,通过更改配置帮助调试。

报错

error: ephemeral containers are disabled for this cluster (error from server: "the server could not find the requested resource").

未成功开启ephemeralContainers特性

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C | 枚举?看一遍就够了

CSDN话题挑战赛第2期 参赛话题:学习笔记 啊我摔倒了..有没有人扶我起来学习.... 目录前言枚举1. 枚举的定义2. 枚举的内存大小3. 枚举的优势4. 枚举需要注意的地方前言 结构体、枚举、联合体都是自定义类型,结构体主要知识点结构体内存对齐可参考《C | …

九月SLAM相关论文速递

九月SLAM相关论文速递 论文列表DirectTracker: 3D Multi-Object Tracking Using Direct Image Alignment and Photometric Bundle Adjustment3D VSG: Long-term Semantic Scene Change Prediction through 3D Variable Scene GraphsLeveraging Large Language Models for Robo…

使用服务器跑模型——案例1

案例1 该方法mac,linux,windows都通用。我们使用terminal or cmd进行操作。 假设我们本地具有一个需要跑的模型Unet,我们需要将该模型上传到服务器上跑,步骤如下: 使用tar压缩文件 我们定位到我们需要压缩的模型&a…

云原生之容器编排实践-以k8s的Service方式暴露SpringBoot服务

背景 上一篇文章云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩中,我们通过 Deployment 完成了将 SpringBoot 应用部署到 minikube 并测试了其弹性伸缩的丝滑体验。但是 Deployment 部署后我们还面临以下问题: 访问时…

Day761.Redis集群方案:Codis -Redis 核心技术与实战

Redis集群方案:Codis Hi,我是阿昌,今天学习记录的是关于Redis集群方案:Codis Redis 的切片集群使用多个实例保存数据,能够很好地应对大数据量的场景。哨兵集群, Redis 官方提供的切片集群方案 Redis Clus…

SPI总线通信——基于STM32MP157A

SPI总线概念 SPI总线是Motorola首先提出的全双工三线/四线同步串行总线,采用主从模式(Master Slave)架构;支持多从机(slave)模式应用,一般仅支持单主机,多从机。 时钟由主机控制&…

java培训技术处理模型数据之 ModelAndView

处理模型数据之 ModelAndView 1 ModelAndView介绍 控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型 数据信息。 2)添加模型数据: MoelAndView addObject(String attributeName, Object attributeValue) ModelAndView…

C#-设计模式学习笔记

目录前言:最近得到师傅指点,建议我多学习下设计模式,简单记录下学习过程中的一些知识点1.设计模式(创建型)1.单例模式:1. 单例模式的主要作用2.单例模式能解决的问题3.单例模式的使用场景4.怎么实现单例模式…

Charles安装和抓包原理

进行APP服务器开发,接口测试、bug定位,抓取移动端请求数据包在所难免,公司使用的Charles,后面有机会使用了其它软件再做对比。Charles并不是安装即可用,涉及一些参数配置,特此记录分享。 1 安装、破解Char…

C51之温湿度检测系统(自动开关风扇)

目录 DHT11 温湿度传感器 产品概述 特点 检测模块是否存在 温湿度数据管理系统 uart.c文件 uart.h文件 lcd1602.c文件 lcd1602.H文件 dht11.c文件 dht11.h文件 delay.c文件 delay.h文件 config.h文件 main.c文件 DHT11 温湿度传感器 产品概述 DHT11数字温湿度传感…

2022/10/6——基于stm32mp157a的SPI实验

SPI总线是Motorola首先提出的全双工三线/四线同步串行总线 采用主从模式架构,支持多从机模式应用,但一般仅支持单主机,多从机 时钟由主机控制,在时钟移位脉 冲下,数据按位传输,高位在前,低位在…

网课查题系统-题库量全网最多

网课查题系统-题库量全网最多 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台&#x…

React源码分析4-深度理解diff算法

上一章中 react 的 render 阶段,其中 begin 时会调用 reconcileChildren 函数, reconcileChildren 中做的事情就是 react 知名的 diff 过程,本章会对 diff 算法进行讲解。 diff 算法介绍 react 的每次更新,都会将新的 ReactElem…

Learning With Error(LWE)问题学习

概念 又称误差还原,容错学习问题,即已知一个矩阵AAA以及一个向量,求解 b^Axe\hat{b}A xe b^Axe 这里eee是一个固定数值范围内随机采集的一个随机噪音向量,所以这个问题就转化为通过AAA和b^\hat{b}b^来还原最初的未知向量xxx 可以…

android studio2021.3.1 最新xposed模块编写指南

前言 最新的xposed框架已经从xposed到Edxposed再到Lsposed,虽然xposed的api依然是通用的82版本,但现在网上大多数的在android studio上配置xposed的教程已经有点落后了,因此写下这篇来记录自己安装的流程。lsposed如何安装可以看我之前的小米…

CPU 和 CPU Core 有啥区别?多核 CPU?多个 CPU?单核 CPU 为何也支持多线程呢?

由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。 CPU 组成 CPU 全…

JavaSE --- 学Java你应该知道的历史

目录 一. Java的历史 1. Java的发明人詹姆斯高斯林 2. Java的logo 3. java的发展 二. Java 语言的特性 🐖🐖🐖🐖如果喜欢!!🐂🐂🐂🐂 🐖&#x1f4…

创建PyQt项目需要配置三个的External Tools

1. Qt Designer:Qt设计器 Qt Designer D:\PyQtLearning\venv\Lib\site-packages\QtDesigner\designer.exe $ProjectFileDir$ 2. PyUIC:将.ui文件转换为.py文件 PyUIC D:\PyQtLearning\venv\Scripts\pyuic5.exe -o $FileNameWithoutExtension$.py $Fi…

Apache HBase API及备份与还原

一、Apache HBase API Apache HBase也适用于多个外部API。有关更多信息,请参阅Apache HBase外部API(将在下一节的内容中介绍)。 有关使用本机HBase API的信息,请参阅User API Reference和HBase API章节。 示例: 使…

JVM-2.垃圾回收

目录 一、如何判断对象可以回收 1.1 引用计数法 1.2 可达性分析算法 二、五种引用 2.1 强引用 2.2 软引用(SoftReference) 2.3 弱引用(WeakReference) 2.4 虚引用(PhantomReference) 2.5 终结器引…