【Kubernetes】什么是 kubectl ?

news2025/4/23 15:26:04

什么是 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.coloradmin.cn/o/1345811.html

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

相关文章

Vue小练习--任务列表

这是一个非常实用的例子,主要实用的是v-model、v-on、v-for指令,javaScript的数组也会涉及一些,javaScript数组方法有很多,本文使用的添加元素和删除元素非常实用,可以记下来。 设计思路 很多例子看起来很难&#xf…

SpringMVC源码解析——DispatcherServlet的逻辑处理

DispatcherServlet类相关的结构图如下: 其中jakarta.servlet.http.HttpServlet的父类是jakarta.servlet.GenericServlet,实现接口jakarta.servlet.Servlet。我们先看一下jakarta.servlet.Servlet接口的源码如下: /*** 定义所有servlet必须实…

Java EE Servlet之服务器版表白墙

文章目录 1. 准备工作2. 约定前后端交互接口3. 编写提交消息4. 数据存入文件5. 引入数据库 1. 准备工作 我们要把表白墙程序修改成服务器版本 这样即使页面关闭, 表白墙的内容也不会丢失 此处,服务器要实现的功能,主要是两个方面: 页面加载…

CSS 动态提示框

​​ <template> <div class"terminal-loader"><div class"terminal-header"><div class"terminal-title">提示框</div><div class"terminal-controls"><div class"control close"…

Qt 5.9.4 转 Qt 6.6.1 遇到的问题总结(一)

最近公司对大家的开发的硬件环境进行了升级&#xff0c;电脑主机的配置、显示器&#xff08;两台大屏显示器&#xff09;变得的逼格高多了。既然电脑上的开发环境都需要重装&#xff0c;就打算把开发环境也升级到最新版本&#xff0c;要用就用最新版本。下面对升级后的开发环境…

数据库开发之子查询案例的详细解析

1.5 案例 基于之前设计的多表案例的表结构&#xff0c;我们来完成今天的多表查询案例需求。 准备环境 将资料中准备好的多表查询的数据准备的SQL脚本导入数据库中。 分类表&#xff1a;category 菜品表&#xff1a;dish 套餐表&#xff1a;setmeal 套餐菜品关系表&#x…

LeetCode刷题--- 黄金矿工

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述…

2017年喜茶数字营销变化

1. 什么是数字营销&#xff1f;数字化时代&#xff0c;消费者行为模式发生了哪些变化&#xff1f; 数字营销是指使用数字渠道和平台&#xff0c;通过在线手段推广产品或服务&#xff0c;与目标受众进行互动和沟通的一种营销方式。它涵盖了多种在线渠道&#xff0c;包括社交媒…

【赠书第15期】案例学Python(基础篇)

文章目录 前言 1 简介 2 功能列表 3 实现 3.1 学生类 3.2 学生管理系统类 3.3 使用示例 4 推荐图书 5 粉丝福利 前言 当涉及案例学 Python 时&#xff0c;可以选择一个具体的问题或场景&#xff0c;通过编写代码来解决或模拟这个问题。以下是一个例子&#xff0c;通过…

自动化测试系列 之 Python单元测试框架unittest

一、概述 什么是单元测试 单元测试是一种软件测试方法&#xff0c;是测试最小的可测试单元&#xff0c;通常是一个函数或一个方法。 在软件开发过程中&#xff0c;单元测试作为一项重要的测试方法被广泛应用。 为什么需要单元测试 单元测试是软件开发中重要的一环&#xf…

HackTheBox - Medium - Linux - Interface

Interface Interface 是一种中等难度的 Linux 机器&#xff0c;具有“DomPDF”API 端点&#xff0c;该端点通过将“CSS”注入处理后的数据而容易受到远程命令执行的影响。“DomPDF”可以被诱骗在其字体缓存中存储带有“PHP”文件扩展名的恶意字体&#xff0c;然后可以通过从其…

前端开发工具之HBuilder X

HBuilderX&#xff08;简称HX&#xff09;是一款由DCloud开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为前端开发者设计。它不仅是一个编辑器&#xff0c;也可以看作是一个通用的IDE&#xff0c;类似于VSCode、Sublime和WebStorm。HBuilderX支持开发各种Web项…

论文阅读——EfficientViT(cvpr2023)

EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention 1、 从三个角度探讨如何提高vision transformers的效率&#xff1a;内存访问、计算冗余和参数使用。 2.1. Memory Efficiency 红色字体表示操作所花费的时间主要由内存访问决定&#xff0c;…

RSA加密解密——用shell加密java解密

功能描述 使用shell opensll对明文进行RSA加密&#xff0c;将密文用java的RSA工具对密文解密。这应该是全网第一个同时用到shell和java的RSA加密解密教程。中间有很多坑&#xff0c;都踩过了&#xff0c;可以放心使用代码。 正确的实现流程 shell端 首先生成公钥私钥 &…

C/C++ 对象、继承和引用

ostream和ofstream类凸现了引用的一个有趣属性。正如ofstream 对象可以使用 ostream类的方法&#xff0c;这使得文件输入/输出的格式与控制台输入/输出相同。使得能够将特性从一个类传递给另一个类的语言特性被称为继承。 简单地说&#xff0c;ostream 是基类&#xff0c;而ofs…

<软考高项备考>《论文专题 - 37 采购管理(1) 》

1 成本管理基础 1.1 写作要点 过程定义、作用写作要点、思路规划采购管理规划采购管理是记录项目采购决策、明确采购方法&#xff0c;及识别潜在卖方的过程。作用:确定是否从项目外部获取货物和服务&#xff0c;如果是&#xff0c;则还要确定将在什么时间、以什么方式获取什么…

OSPF的DR与BDR-新版(16)

目录 整体拓扑 操作步骤 1.基本配置 1.1 配置R1的IP 1.2 配置R2的IP 1.3 配置R3的IP 1.4 配置R4的IP 1.5 检测R1与R4连通性 1.6 检测R1与R2连通性 1.7 检测R1与R3连通性 2.搭建基本的OSPF网络 2.1 配置R1 OSPF 2.2 配置R2 OSPF 2.3 配置R3 OSPF 2.4 配置R4 OSPF…

力扣刷题总结 栈与队列

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 一、栈和队列的基础知识 队列是先进先出&#xff0c;栈是先进后出。同时二者都是容器适配器而不是容器。 二、题目实战 232.用栈…

帆软报表如何灵活控制水印的显示

在帆软报表中如果要显示水印,如果要全部都要显示,只需要到决策系统--安装设置中打开水印开关。如果想要某个报表显示水印,可以在设计器的水印设置中为该报表设置水印。 但是如果碰到这种需求,比如某些人或者某些角色需要显示水印,其他人不显示。或者是预览报表需要显示水印…

conda环境下face_alignment.LandmarksType._2D AttributeError: _2D解决方法

1 问题描述 运行retalking模型时&#xff0c;代码抛出异常&#xff0c;信息如下所示&#xff1a; Traceback (most recent call last):File "D:/ml/video-retalking/inference.py", line 345, in <module>main()File "D:/ml/video-retalking/inference.…