kubectl 执行一条命令之后发生了什么?

news2024/11/14 19:24:56

kubectl 是与 Kubernetes 集群交互的命令行工具,用户通过它可以对集群资源进行操作和管理。你有没有想过,当我们执行一条 kubectl 命令之后,背后都发生了什么?

详细过程

kubectl -> kube-api-server

根据通信类型,我把 kubectl 命令分为两类:单向通信和双向通信。

  • 单向通信:kubectl 通过 HTTPSkube-api-server 发起请求并接收响应。大部分 kubectl 命令都是单向通信的,比如资源的创建、删除、修改和查询等。
  • 双向通信:在执行某些持续性操作时,例如 execattachport-forwardlogs 等等少数命令,kubectlkube-api-server 之间会使用 WebSocket 进行双向通信,此时双方可以进行持续性的双向的消息传递。

对于大部分单向通信的命令,kube-api-server 处理(可能与 etcd 交互)之后就会响应给 kubectl,虽然集群内其它组件可能会有后续动作,但是 kubectlkube-api-server 的过程则到这里就结束了。

然而,双向通信的命令,其处理的链路会更长。下文以 kubectl exec -it nginx -- bash 这条命令为例进行详细说明。

如上图所示,kubectl 会先向 kube-api-server 发起 HTTPS 请求,并协商升级为 WebSocket,至此 kubectlkube-api-server 之间可以持续的收发消息。

kube-api-server -> kubelet

kubelet 会启动以下三个 server:

  • HTTPS server:这是 kubelet 的主要服务,提供了完整的与 kube-api-server 和其他组件交互的接口,处理和控制所有与容器、Pod 生命周期相关的重要操作,包括 /healthz 健康检查、/metrics 指标采集、/pods pod 管理,以及 /exec、/attach、/portForward 等等接口:
/exec/{podNamespace}/{podID}/{containerName}
/attach/{podNamespace}/{podID}/{containerName}
/portForward/{podNamespace}/{podID}/{containerName}
/containerLogs/{podNamespace}/{podID}/{containerName}
  • HTTP Read-Only server:提供只读的 API,用于公开一些状态信息,出于安全考虑默认禁用。可以通过 --read-only-port 参数启用,但不建议在生产环境中使用。
  • gRPC server:专门用于查询节点上 Pod 和容器的资源分配情况。

kube-api-server 收到 kubectl exec 请求后,会通过 HTTPSkubelet 发起请求,由 kubelet 负责进一步处理。

kubelet -> CRI

kubelet 通过 gRPC 调用 CRI 组件,向容器运行时传递指令。

gRPC 协议定义了 RuntimeServiceImageService 两种服务及多种方法,其中就包括:

  • RuntimeServer.ExecSync
  • RuntimeServer.Exec
  • RuntimeServer.Attach
  • RuntimeServer.PortForward

CRI 组件最终执行指令,并将执行结果(stdout/stderr)依次经由 kubeletkube-api-server 最后返回给 kubectl 并在客户端显示。这就是完整的过程。

总结

文本讲述了 kubectl 命令执行背后的整个过程,以 kubectl exec 为例,涉及 kube-api-serverkubeletCRI 等多个组件的协作,以及 HTTPSWebSocketgRPC 等多种通信协议。

(关注我,无广告,专注于技术,不煽动情绪)


参考资料:

  • https://kubernetes.io/docs/reference/kubectl/generated/
  • https://erkanerol.github.io/post/how-kubectl-exec-works/
  • https://github.com/kubernetes/kubernetes/blob/v1.31.1/pkg/kubelet/server/server.go

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

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

相关文章

【大模型】AutoDL部署AI绘图大模型Stable Diffusion使用详解

目录 一、前言 二、AI绘图大模型概述 2.1 AI绘图大模型介绍 2.2 AI绘图大模型特点 2.3 AI绘图大模型优势 三、主流的AI绘图大模型介绍 3.1 Midjourney 3.1.1 Midjourney介绍 3.1.2 Midjourney功能特点 3.1.3 Midjourney使用场景 3.2 Stable Diffusion 3.2.1 Stable …

zynq的PS端mac与RTL8211F的连接要点

目录 1 VCCO_MIO12 PS_MIO_VREF3 PS的引脚4 RXDLY TXDLY5 ZYNQ的MAC可以调整延时吗 1 VCCO_MIO1 接1.8V 2 PS_MIO_VREF 接0.9V,可通过电阻分压 可通过电阻分压 3 PS的引脚 4 RXDLY TXDLY RXDLY RXD[0] TXDLY RXD[1] 与XC7Z020的PS端MAC连接,必须…

python画正方形、平行四边形、六边形、五角星、风车(四个半圆)

画正方形、平行四边形、六边形、五角星、风车(四个半圆) import turtle def square(side_length):"""正方形"""for _ in range(4):turtle.forward(side_length)turtle.right(90)def parallelogram(base, height):"&q…

C++——模拟实现string

1.再谈string string为什么要被设计成模板?日常使用string好像都是char*,char*不够使用吗,为什么要设计成模板呢? 1.1 关于编码 //计算机的存储如何区分呢?int main() {//比如在C语言中,有整型//如果是有…

Linux网络——HTTP协议详解(2)

文章目录 HTTP方法GET方法POST方法 状态码与报头状态码报头 会话 HTTP方法 HTTP方法有这些 但是怎么说呢,这些方法只有GET和POST方法是99%情况用到的 剩下的几乎不太用,如果有兴趣可以找《图解HTTP》,是处于了解的范畴 大家肯定一看就明白…

Qt Creator项目模板介绍

在Qt Creator中创建项目时,用户可以从多个模板类别中进行选择,以满足不同的开发需求。 Application(Qt) 在Application(Qt)类别下,Qt Creator提供了多种用于创建不同类型Qt应用程序的模板。这些模板主要包括: Qt Widgets Applic…

专业解析:移动硬盘“要求格式化”背后的真相与数据救援策略

引言:格式化预警下的数据危机 在日常的数字生活中,移动硬盘作为数据存储与传输的重要工具,其稳定性与安全性直接关系到用户资料的安全。然而,不少用户遭遇过这样一个令人头疼的问题——移动硬盘在接入电脑后,系统突然…

Tcping:一款实用的端口存活检测工具

简介 tcping 是一个基于TCP协议的网络诊断工具,通过发送 TCP SYN/ACK包来检测目标主机的端口状态。 官网:tcping.exe - ping over a tcp connection 优点: (1)监听服务器端口状态:tcping 可以检测指定端口的状态,默认是80端口,也可以指定其他端口。 (2)显示ping返…

MATLAB系列08:输入/输入函数

MATLAB系列08:输入/输入函数 8. 输入/输入函数8.1 函数textread8.2 关于load和save命令的进一步说明8.3 MATLAB文件过程简介8.4 文件的打开和关闭8.4.1 fopen函数8.4.2 fclose函数 8.5 二进制 I/O 函数8.5.1 fwrite 函数8.5.2 fread函数 8.6 格式化 I/O 函数8.6.1 f…

【漏洞复现】金斗云 HKMP download 任意文件读取漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

[Meachines] [Medium] Sniper RFI包含远程SMB+ powershell用户横向+CHM武器化权限提升

信息收集 IP AddressOpening Ports10.10.10.151TCP:80,135,139,445,49667 $ nmap -p- 10.10.10.151 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 80/tcp open http Microsoft IIS httpd 10.0 |_http-server-header: Microsoft-IIS/10.…

【算法业务】互联网风控业务中的拒绝推断场景算法应用分享(涉及半监督算法、异常检测、变分自编码、样本权重自适应调整、迁移学习等)

1. 业务目标和任务描述 该项目是很早期的一个工作,属于互联网信贷风控场景,研究并应用信贷中的拒绝推断任务,处理方式也许对于目前的一些业务还有参考意义,因此这里做下分享。拒绝推断是指在信贷业务中,利用已知的接受…

植物大战僵尸【源代码分享+核心思路讲解】

植物大战僵尸已经正式完结,今天和大家分享一下,话不多说,直接上链接!!!(如果大家在运行这个游戏遇到了问题或者bug,那么请私我谢谢) 大家写的时候可以参考一下我的代码思…

网络安全-shire写任务计划、反弹shell、写私钥、反序列化

目录 一、环境 二、 介绍 三、开始做题 四、写公钥 一、环境 网上自己找 二、 介绍 我们经过前面文章很清楚知道,shiro是将数据存储在内存当中,内存落盘实现一个数据存储,而当其结合python,python将登录的session存储到shiro里…

矩阵范数介绍

这里写目录标题 理论1 诱导范数 (induced norm)2 “元素形式”范数(“entrywise" norm)3 Schatten 范数 论文中常用范数的书写 理论 参考张贤达矩阵分析page 34 矩阵范数主要有三种类型:诱导范数,元素形式范数和Schatten范数 1 诱导范数 (induce…

AiAutoPrediction足球网与泊松分布足球预测比赛模型介绍

AiAutoPrediction足球软件上线于2020年9月,是国内首家将泊松分布概率公式应用于足球比赛比分预测的软件。 AiAutoPrediction足球系列软件如下: AIAutoPrediction SoccerPredictor |走地大小球|走地让球|走地角球|数据分析 AiScorePredictor 泊松分布…

这可能又是一款 Java 程序员的必备插件了,无需解压直接编辑修改 jar 包内文件,神器!(附源码)

作为一名 Java 程序员,在维护一些古老的程序时,可能会遇到这种情况:项目依赖的 jar 包过于久远,已经没有源码了,但是有不得不修改的 bug 要处理。这时候就得想办法反编译 jar 包进行修改,并且重新打包&…

基于51单片机的可燃性气体报警器设计

文章目录 前言资料获取设计介绍设计程序具体实现截图设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

《财富之眼:用经济思维看清世界》pdf电子书下载

《财富之眼:用经济思维看清世界》pdf电子书下载 内容简介 一切社会现象都是经济现象,我们只能赚到自己认知范围内的 钱。我国社会主要矛盾已经转化为人民日益增长的美好生活需要和不 平衡不充分的发展之间的矛盾,其中“不平衡不充分”很大程…

无法删除选定的端口,不支持请求【笔记】

场景:在删除打印机端口时,提示:“无法删除选定的端口,不支持请求”,如下图所示。 以下以删除USB036端口为示例,操作步骤如下: 在注册表编辑器中,从以下注册表项中“计算机\HKEY_LO…