【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

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

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

相关文章

助力打造智慧数字课堂,基于YOLOv8全系列【n/s/m/l/x】不同参数量级模型开发构建教学课堂场景下学生课堂行为检测识别分析系统

近年来,随着行为检测技术的发展,分析学生在课堂视频中的行为,以获取他们的课堂状态和学习表现信息已经成为可能。这项技术对学校的教师、管理人员、学生和家长都非常重要。使用深度学习方法自动检测学生的课堂行为是分析学生课堂表现和提高教…

计算机视觉技术-目标检测数据集

目标检测领域没有像MNIST和Fashion-MNIST那样的小数据集。 为了快速测试目标检测模型,我们收集并标记了一个小型数据集。 首先,我们拍摄了一组香蕉的照片,并生成了1000张不同角度和大小的香蕉图像。 然后,我们在一些背景图片的随机…

分享好用稳定快递查询api接口(对接简单)

提供实时查询和自动识别单号信息。稳定高效,调用简单方便,性价比高,一条链接即可对接成功。 使用数据平台该API接口需要先注册后申请此API接口。申请成功后赠送免费次数,可直接在线请求接口数据。 接口地址:https://…

ArkUI中自定义组件的生命周期

文章概叙 本文主要是介绍下在作为page以及component的时候的生命周期,以及调用API等应该在哪个生命周期使用。 书接上回 之前的博客已经结束了对底部栏的操作,现在开始需要关注到具体内容的对接了。 而开发的第一步,我们对页面的生命周期…

你了解螺杆螺纹吗?

螺杆的螺纹部分是其核心部分之一,主要作用是传递旋转运动和力矩,丝杆的螺纹形状和参数对其性能和使用寿命有着重要影响;常用的螺杆螺纹可以分为:三角牙螺纹、梯形牙螺纹、矩形牙螺纹、锯齿牙螺纹、滚珠螺纹。 1、三角牙&#xff1…

Tomcat与Servlet是什么关系

Tomcat与Servlet是什么关系 Apache Tomcat和Servlet之间存在密切的关系,可以说它们是一对密切合作的组件。下面是它们的关系: Tomcat是Servlet容器: Tomcat是一个开源的、轻量级的Servlet容器。Servlet容器是一个Web服务器扩展,用…

【YOLOV8实例分割——详细记录环境配置、自定义数据处理到模型训练与部署】

前言 Ultralytics YOLOv8是一种前沿的、最先进的(SOTA)模型,它在前代YOLO版本的成功基础上进行了进一步的创新,引入了全新的特性和改进,以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计,YOL…

LOAM: Lidar Odometry and Mapping in Real-time 论文阅读

论文链接 LOAM: Lidar Odometry and Mapping in Real-time 0. Abstract 提出了一种使用二维激光雷达在6自由度运动中的距离测量进行即时测距和建图的方法 距离测量是在不同的时间接收到的,并且运动估计中的误差可能导致生成的点云的错误配准 本文的方法在不需要高…

软件工程期末复习习题

知识点总结 第一章:软件工程概述 1、软件的定义:在运行中能提供所希望的功能与性能的程序使程序能够正确运行的数据及其结构描述软件研制过程和方法所用的文档。 2、软件危机:软件开发的生产率远远不能满足客观需要。开发的软件产品往往不能…

MyBatis-config.xml配置文件

1、基本介绍: mybatis的核心配置文件(mybatis-config.xml),比如配置jdbc连接信息,注册mapper等等,我们需要对这个配置文件有详细的了解。 官网地址有详细介绍 mybatis – MyBatis 3 | 配置 2、properties属性 在通常的情况下&am…

【Apache Doris】自定义函数之 JAVA UDF 详解

【Apache Doris】自定义函数之 JAVA UDF 详解 一、背景说明二、原理简介三、环境信息3.1 硬件信息3.2 软件信息 四、IDE准备五、JAVA UDF开发流程5.1 源码准备5.1.1 pom.xml5.1.2 JAVA代码 5.2 mvn打包5.2.1 clean5.2.2 package 5.3 函数使用5.3.1 upload5.3.2 使用 六、注意事…

TV端Web页面性能优化实践

01 背景 随着互联网技术的持续创新和电视行业的高速发展,通过电视观看在线视频已经逐渐成为大众的重要娱乐方式。奇异果App作为在TV设备上用户活跃度最高的应用之一,为广大用户提供了丰富的内容播放服务,除此之外,同样有会员运营、…

苹果CMS超级播放器专业版无授权全开源,附带安装教程

源码介绍 超级播放器专业版v1.0.8,内置六大主流播放器,支持各种格式的视频播放,支持主要功能在每一个播放器内核中都相同效果。 搭建教程 1.不兼容IE浏览器 2.php版本推荐7.4 支持7.1~7.4 3.框架引入不支持同时引入多个播放器 json对接教…

【Linux】Linux

Linux 文章目录 Linux1. 简介2. 目录结构3. vi/vim 的使用4. 网络配置4.1 配置网络ip地址4.2 配置主机名或ip映射4.3 远程登陆及上传下载 5. 系统管理5.1 service 服务管理(CentOS 6 版本)5.2 systemctl 服务管理(CentOS 7 版本)5…

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

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

tcpdump出现permission denied

在使用tcpdump -i eth0 src host 192.168.0.184 and ip and port 22 -nn -w ping.pacp命令抓包并把抓到的数据保存到ping.pacp时,出现了权限错误的报错。但实际上我这里用的是root用户执行的命令。 查阅man手册发现: 在tcpdump中,-Z选项用于在启动数据…

思维训练-怎样设计一个MQ

架构师需要做各种设计,要不断地提高自己的设计能力。这有没有方法可以训练呢?有的,就是看到什么、想到什么,就假设对面坐着产品经理,一起讨论怎么把它设计出来。比如怎样设计一个MQ 我:首先我确认一下需求。…

nodejs+vue+ElementUi摄影预约服务网站系统91f0v

本系统提供给管理员对首页,个人中心,用户管理,员工管理,摄影套餐管理,套餐系列管理,客片欣赏管理,摄影预约管理,摄影订单管理,取片通知管理,摄影评价管理&…

优化算法3D可视化

编程实现优化算法,并3D可视化 1. 函数3D可视化 分别画出 和 的3D图 import numpy as np from matplotlib import pyplot as plt import torch# 画出x**2 class Op(object):def __init__(self):passdef __call__(self, inputs):return self.forward(inputs)def for…

分布式系统架构设计之分布式数据存储的分类和组合策略

在现下科技发展迅猛的背景下,分布式系统已经成为许多大规模应用和服务的基础架构。分布式架构的设计不仅仅是一项技术挑战,更是对数据存储、管理和处理能力的严峻考验。随着云原生、大数据、人工智能等技术的崛起,分布式系统对于数据的高效存…