【Kubernetes】什么是 kubectl ?

什么是 kubectl ?

  • 1.什么是 kubectl ?
  • 2.Kubernetes 内部结构
  • 3.Kubernetes API 的作用

1.什么是 kubectl ?

在学习如何更有效地使用 kubectl 之前,您应该对它是什么以及它如何工作有一个基本的了解。从用户的角度来看,kubectl 是你控制 Kubernetes 的驾驶舱。它允许您执行所有可能的 Kubernetes 操作。从技术角度来看,kubectl 是 Kubernetes API 的客户端。

Kubernetes API 是一个 HTTP REST API。这个 API 是真正的 Kubernetes 用户界面。 Kubernetes 完全通过该 API 进行控制。这意味着每个 Kubernetes 操作都作为 API 端点公开,并且可以通过对此端点的 HTTP 请求来执行。

因此,kubectl 的主要工作是向 Kubernetes API 执行 HTTP 请求:

在这里插入图片描述
Kubernetes 是一个完全以资源为中心的系统。这意味着,Kubernetes 维护了资源的内部状态,所有 Kubernetes 操作都是对这些资源的 CRUD 操作。您可以通过操纵这些资源来完全控制 Kubernetes(并且 Kubernetes 根据资源的当前状态来确定要做什么)。因此,Kubernetes API 参考被组织为资源类型及其关联操作的列表。

让我们来看一个例子。假设您想要创建一个 ReplicaSet 资源。为此,您需要在名为 replicaset.yaml 的文件中定义 ReplicaSet,然后运行以下命令:

$ kubectl create -f replicaset.yaml

显然,这会在 Kubernetes 中创建您的 ReplicaSet。但幕后发生了什么?

Kubernetes 有一个 create ReplicaSet 操作,与所有 Kubernetes 操作一样,它作为 API 端点公开。该操作的具体API端点如下:

POST /apis/apps/v1/namespaces/{namespace}/replicasets

您可以在 API 参考中找到所有 Kubernetes 操作的 API 端点(包括上述端点)。要向端点发出实际请求,您需要将 API 服务器的 URL 添加到 API 参考中列出的端点路径前面。

因此,当您执行上述命令时,kubectl 会向上述 API 端点发出 HTTP POST 请求。 ReplicaSet 定义(您在 replicaset.yaml 文件中提供)在请求正文中传递。

这就是 kubectl 适用于与 Kubernetes 集群交互的所有命令的方式。在所有这些情况下,kubectl 只是向适当的 Kubernetes API 端点发出 HTTP 请求。

请注意,完全可以使用像 curl 这样的工具通过手动向 Kubernetes API 发出 HTTP 请求来控制 Kubernetes。kubectl 只是让您更轻松地使用 Kubernetes API。

这些是 kubectl 是什么及其工作原理的基础知识。但每个 kubectl 用户都应该了解有关 Kubernetes API 的更多信息。为此,让我们简要深入了解 Kubernetes 的内部结构。

2.Kubernetes 内部结构

Kubernetes 由一组独立的组件组成,这些组件作为单独的进程在集群的节点上运行。有些组件运行在主节点上,其他组件运行在工作节点上,每个组件都有非常特定的功能。

这些是主节点上最重要的组件:

  • 存储后端(storage backend):存储资源定义(通常使用 etcd)。
  • API 服务器:提供 Kubernetes API,并管理存储后端控制器管理器;确保资源状态符合规范调度器;将 Pod 调度到工作节点。Pod 是工作节点上最重要的组件。
  • kubelet:管理工作节点上容器的执行。

要了解这些组件如何协同工作,让我们考虑一个示例。假设您刚刚执行了 kubectl create -f replicaset.yaml,此时 kubectlcreate ReplicaSet API 端点发出了 HTTP POST 请求(传递您的 ReplicaSet 资源定义)。

集群中出现这种情况的原因是什么?

在这里插入图片描述
kubectl create -f replicaset.yaml 之后,API 服务器将您的 ReplicaSet 资源定义保存在存储后端中。
在这里插入图片描述
这会触发控制器管理器(controller manager)中的 ReplicaSet 控制器(ReplicaSet controller),该控制器监视 ReplicaSet 资源的创建、更新和删除。

在这里插入图片描述
ReplicaSet 控制器为 ReplicaSet 的每个副本创建一个 Pod 定义(根据 ReplicaSet 定义中的 Pod 模板)并将其保存在存储后端。

在这里插入图片描述
这会触发调度程序(scheduler)监视尚未分配给工作节点的 Pod。

在这里插入图片描述
调度程序为每个 Pod 选择合适的工作节点,并将此信息添加到存储后端的 Pod 定义中。

在这里插入图片描述
这会触发 Pod 已调度到的工作节点上的 kubelet,该节点会监视已调度到其工作节点的 Pod。
在这里插入图片描述
kubelet 从存储后端读取 Pod 定义,并指示 container runtime(例如 Docker)在工作节点上运行容器。

以下是文字描述:

  • 对创建 ReplicaSet 端点的 API 请求由 API 服务器处理。 API 服务器对请求进行身份验证并将您的 ReplicaSet 资源定义保存在存储后端中。
  • 该事件会触发 ReplicaSet 控制器,它是控制器管理器的子进程。 ReplicaSet 控制器监视存储后端中 ReplicaSet 资源的创建、更新和删除,并在发生这种情况时收到事件通知。
  • ReplicaSet 控制器的工作是确保 ReplicaSet 存在所需数量的副本 Pod。在我们的示例中,尚不存在 Pod,因此 ReplicaSet 控制器创建这些 Pod 定义(根据 ReplicaSet 定义中的 Pod 模板)并将它们保存在存储后端。
  • 新 Pod 的创建会触发调度程序,调度程序会监视尚未调度到工作节点的 Pod 定义。调度程序为每个 Pod 选择合适的工作节点,并使用此信息更新存储后端中的 Pod 定义。
  • 请注意,到目前为止,集群中的任何位置都没有运行任何工作负载代码。到目前为止所做的只是在主节点上的存储后端中创建和更新资源。
  • 此事件会触发 kubelet 来监视调度到其工作节点的 Pod。您的 ReplicaSet Pod 已调度的工作节点的 kubelet 指示配置的 container runtime(可能是 Docker)下载所需的容器映像并运行容器。

至此,您的 ReplicaSet 应用程序终于开始运行了!

3.Kubernetes API 的作用

从上面的例子可以看出,Kubernetes 组件(除了 API 服务器和存储后端)通过监视存储后端的资源变化并操作存储后端的资源来工作。

然而,这些组件并不直接访问存储后端,而是只能通过 Kubernetes API 访问。

看一个示例

ReplicaSet 控制器使用 list ReplicaSets API 端点 API 携带监视参数的操作来监视 ReplicaSet 资源的更改。 ReplicaSet 控制器使用 create Pod API 端点来创建 Pod。调度程序使用 patch Pod API 端点来更新 Pod,其中包含有关所选工作节点的信息。如您所见,kubectl 也使用相同的 API。

内部组件和外部用户双重使用 Kubernetes API 是 Kubernetes 的基本设计理念。

有了这些知识,您可以总结 Kubernetes 的工作原理如下:

存储后端存储 Kubernetes 的状态(即资源)。 API 服务器以 Kubernetes API 的形式提供与存储后端的接口。所有其他 Kubernetes 组件和用户都通过 Kubernetes API 读取、观察和操作 Kubernetes 的状态(即资源)。熟悉这些概念将有助于您更好地理解 `kubectl` 并充分利用它!

# 4.使用技巧 现在让我们看看一系列具体的提示和技巧,以帮助您提高 `kubectl` 生产力。

提高 kubectl 生产力的最有用但经常被忽视的技巧之一是 completion 命令。

completion 命令允许您使用 Tab 键自动完成 kubectl 命令的各个部分。这适用于子命令、选项和参数,包括资源名称等难以输入的内容。

在这里您可以看到 kubectl 命令完成的实际效果:

在这里插入图片描述
命令补全适用于 Bash 和 Zsh shell。

一般来说,completion 命令是一种通过 completion 脚本来工作的 shell 功能。completion 脚本是定义特定命令的完成行为的 shell 脚本。获取完成脚本可以完成相应的命令。

Kubectl 可以使用以下命令自动生成并打印出 Bash 和 Zsh 的完成脚本:

kubectl completion bash
# or
kubectl completion zsh

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

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

相关文章

软件设计师——数据库系统(三)

📑前言 本文主要是【数据库系统】——软件设计师——数据库系统的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1…

设计模式(4)--对象行为(8)--状态

1. 意图 允许一个对象在其内部状态改变时改变它的行为。 2. 三种角色 上下文环境(Context)、抽象状态(State)、具体状态(Concrete State) 3. 优点 3.1 将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。 3.2 使得状态转换显式化。 3.3 State对象可被共…

探索 3D 图形处理的奥秘

最近一年多来,在 3Dfx、Intel 们的狂轰滥炸中,在 Quake、古墓丽影们的推波助澜下,三维图形已经成为计算机迷眼中的又一个热点。3D 世界到底是怎样的神奇,我们又是怎样享受它的乐趣呢?就让我们来一探究竟吧。 图形基础…

Halcon纹理分析texture_laws/trans_from_rgb

Halcon纹理分析 文章目录 Halcon纹理分析1. 纹理滤波器2. 织物折痕检测 纹理是图像表面的一种灰度变化。有的纹理很规则,会以局部小区域为单元重复出现,而有的纹理则呈现出随机性。对于规则的纹理,可以很容易地从中分辨出重复的区域&#xff…

二级路由的配置以及注意项

二级路由 比如说LayOut组件是父亲,LayOut和ArtComp是儿子,那我们怎么给儿子配路由呢? 1、首先在router下的index.js导入组件,配置规则,详细如下 // 导入路由相关组件 import LayOut from /views/LayOut import UserC…

C#中使用as关键字将对象转换为指定类型

目录 一、定义 二、示例 三、生成 使用as关键字可以将对象转换为指定类型,与is关键字不同,is关键字用于检查对象是否与给定类型兼容,如果兼容则返回true,如果不兼容则返回false。而as关键字会直接进行类型转换,如果…

【VS】NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。

问题描述 报错 NETSDK1045 严重性代码说明项目文件行禁止显示状态错误NETSDK1045当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低版本设置为目标,或使用支持 .NET 6.0 的 .NET SDK 版本。RCSoftDrawMicrosoft.NET.TargetFrameworkInference.ta…

【每日一题】一周中的第几天

文章目录 Tag题目来源解题思路方法一:模拟 写在最后 Tag 【模拟】【数学】【2023-12-30】 题目来源 1185. 一周中的第几天 解题思路 方法一:模拟 思路 题目中的日期是在 1971 到 2100 年之间的有效日期,即 1971-01-01 到 2100-12-31 范围…

精致旅游公司Treker网页设计 html模板

一、需求分析 旅游网站通常具有多种功能,以下是一些常见的旅游网站功能: 酒店预订:旅游网站可以提供酒店预订服务,让用户搜索并预订符合其需求和预算的酒店房间。 机票预订:用户可以通过旅游网站搜索、比较和预订机票…

前端 js 基础(2)

js For In for in 循环遍历 person 对象每次迭代返回一个键 (x)键用于访问键的值键的值为 person[x] 如果索引顺序很重要,请不要在数组上使用 for in。 索引顺序依赖于实现,可能不会按照您期望的顺序访问数组值。 当顺序很重要时,最好使用 f…

c++哈希表——超实用的数据结构

文章目录 1. 概念引入1.1 整数哈希1.1.1 直接取余法。1.1.2 哈希冲突1.1.2.1 开放寻址法1.1.2.2 拉链法 1.2 字符串哈希 3.结语 1. 概念引入 哈希表是一种高效的数据结构 。 H a s h Hash Hash表又称为散列表,一般由 H a s h Hash Hash函数(散列函数)与链表结构共同…

[电磁学]猴博士不挂科

1 利用表格求场强 2 利用叠加求场强 3 利用积分求场强 电场立库仑力 球的面积公式是4πr,其中r为球的半径。 球的体积公式是(4/3)πr,其中r为球的半径。 带电物体有体积:

数据采集遇到验证码校验的一般破解方式简述

背景 百度自动采集是一种高效的数据采集方法,但是在采集过程中经常会遇到图片验证码的问题,从而导致采集失败。那么有没有什么方法可以绕过图片验证呢?本文将为您详细介绍。 解决方案 一、使用OCR技术识别验证码 OCR技术可以识别图片中的…

【AI生活】“智能家居:要便利,也要隐私保护“

智能家居:要便利,也要隐私保护 在数字化时代,人工智能(AI)已经深入到我们的生活中,为我们带来了极大的便利。从智能家居到自动驾驶,从智能医疗到智能金融,AI正以前所未有的速度和规…

解决RestHighLevelClient报错missing authentication credentials for REST request

使用ElasticSearch Java API时遇到错误 "missing authentication credentials for REST request" 这是代码: RestHighLevelClient esClient new RestHighLevelClient(RestClient.builder(new HttpHost("localhost",9200,"http")));CreateIndexR…

openGauss学习笔记-180 openGauss 数据库运维-升级-升级前必读

文章目录 openGauss学习笔记-180 openGauss 数据库运维-升级-升级前必读180.1 升级方案180.2 升级前的版本要求180.3 升级影响和升级约束 openGauss学习笔记-180 openGauss 数据库运维-升级-升级前必读 180.1 升级方案 本节为指导用户选择升级方式。 用户根据openGauss提供的…

鸿蒙OS应用开发之气泡提示

前面学习了弹窗提示,其实有时候只是想在旁边做一些说明,那么采用弹窗的方式就比较麻烦一些,这时可以采用系统里面的气泡提示方式。 系统也提供了几种方式弹出气泡提示,最简单的一种是采用bindPopup属性。它的定义如下: 在后面的参数设置里,也是比较复杂的形式。我们先来演…

ESP32入门六(读取引脚的模拟信号[3]:信号出现误差的原因[硬件篇])

在之前的文章中,我们介绍了ESP32在读取模拟信号时出现的误差的软件方面原因,在这一篇中,将会介绍并测试由于硬件或其它方面导致数据出现误差的原因。 一、厂商原因 首先,我们需要知道,在每块EPS32中,在出…

网络安全—认证技术

文章目录 加密认证对称密钥体制公钥密码体制公钥的加密公钥身份认证和加密 鉴别码认证MAC鉴别码 报文摘要认证认证 加密只认证数字签名 通过了解以前前辈们使用的消息认证慢慢渐进到现代的完整的认证体系。所以在学习的时候也很蒙圈,因为前期的很多技术都是有很严重…

第七课:计算机网络、互联网及万维网(WWW)

第七课:计算机网络、互联网及万维网(WWW) 第二十八章:计算机网络1、局域网 Local Area Networks - LAN2、媒体访问控制地址 Media Access Control address - MAC3、载波侦听多路访问 Carrier Sense Multiple Access - CSMA4、指数…