K8S学习指南(66)-CRD介绍

文章目录

    • 引言
    • 什么是自定义资源定义(CRD)?
    • CRD 对于 Kubernetes 的意义
      • 1. 定制资源类型
      • 2. 统一管理
      • 3. 更好的扩展性
      • 4. 与生态系统集成
    • 如何使用 CRD
    • CRD 的规范详解
      • 1. `apiVersion` 和 `kind`
      • 2. `metadata.name`
      • 3. `spec.group` 和 `spec.versions`
      • 4. `spec.scope`
      • 5. `spec.names`
    • 结语

引言

Kubernetes (K8S) 作为容器编排领域的领军者,提供了强大的资源管理和编排能力。然而,有时候我们需要在 Kubernetes 中引入一些自定义的资源类型,以满足特定业务需求。为了实现这一点,Kubernetes 引入了自定义资源定义(Custom Resource Definition,CRD)的概念。本文将深入探讨 CRD 的意义以及如何在 Kubernetes 中使用它。

什么是自定义资源定义(CRD)?

CRD 是 Kubernetes 中的一种扩展机制,允许用户定义自己的资源类型。通常情况下,Kubernetes 提供了一系列内建的资源类型,如 Pod、Service、Deployment 等。然而,这些内建资源并不能满足所有业务需求,因此引入了 CRD,使得用户可以定义和使用自己的资源类型。

通过定义 CRD,用户可以将自己的应用程序或服务的业务逻辑抽象为 Kubernetes 中的一种资源类型,从而更方便、更一致地进行管理和编排。

CRD 对于 Kubernetes 的意义

CRD 为 Kubernetes 提供了以下重要的优势和意义:

1. 定制资源类型

CRD 允许用户在 Kubernetes 中定义自己的资源类型,这些资源类型可以完全适应用户的应用程序或服务的需求。这种灵活性使得 Kubernetes 能够更好地支持各种不同类型的工作负载。

2. 统一管理

CRD 将自定义资源纳入 Kubernetes 统一的管理体系中,使得用户可以使用相同的工具和流程来管理自定义资源和内建资源。这种一致性有助于简化管理工作,降低学习成本。

3. 更好的扩展性

通过引入 CRD,Kubernetes 的架构变得更加灵活和可扩展。用户可以根据自己的需求,轻松扩展 Kubernetes 的能力,而无需修改 Kubernetes 的核心代码。

4. 与生态系统集成

CRD 使得用户可以更好地将自己的应用程序或服务整合到 Kubernetes 生态系统中。例如,使用 Helm 等工具,可以轻松地部署和管理包含 CRD 的应用程序。

如何使用 CRD

为了使用 CRD,首先需要定义一个 CRD 的规范,然后将其注册到 Kubernetes 集群中。以下是一个简单的示例,演示如何定义一个名为 Example 的 CRD:

# example-crd.yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:name: examples.example.com
spec:group: example.comversions:- name: v1served: truestorage: truescope: Namespacednames:plural: examplessingular: examplekind: ExampleshortNames:- ex

在上述示例中,我们定义了一个名为 Example 的 CRD,其 API Group 为 example.com,版本为 v1。该 CRD 允许在命名空间中使用,并定义了资源名称的复数和单数形式,以及资源的简称。

接下来,我们可以使用 kubectl apply 命令将这个 CRD 注册到 Kubernetes 集群中:

kubectl apply -f example-crd.yaml

现在,我们可以创建一个 Example 资源实例:

# example-instance.yaml
apiVersion: example.com/v1
kind: Example
metadata:name: example-instance
spec:foo: "bar"

使用 kubectl apply 命令将这个资源实例创建到 Kubernetes 集群中:

kubectl apply -f example-instance.yaml

通过以下命令,我们可以查看 Example 资源的详细信息:

kubectl get example example-instance -o yaml

这样,我们就成功地使用了一个简单的 CRD,并创建了一个相应的资源实例。

CRD 的规范详解

上面的示例中,我们已经简要介绍了一个 CRD 的定义,下面我们将详细解释一个 CRD 的各个部分。

1. apiVersionkind

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition

这两个字段指定了 YAML 文件的 API 版本和资源类型。在定义 CRD 时,通常都使用 apiextensions.k8s.io/v1 版本的 CustomResourceDefinition 类型。

2. metadata.name

metadata:name: examples.example.com

metadata.name 字段定义了 CRD 的名称。这个名称应该是唯一的,并且符合 DNS 子域名的命名规范。

3. spec.groupspec.versions

spec:group: example.comversions:- name: v1served: truestorage: true

spec.group 定义了 CRD 的 API 组。spec.versions 字段定义了支持的 API 版本。每个版本包含 name(版本名称)、served(是否提供服务,即是否可以创建资源实例)和 storage(是否进行持久化存储)等属性。

4. spec.scope

spec:scope: Namespaced

spec.scope 字段定义了资源的作用域。可以是 Cluster(全局作用域)或 Namespaced(命名空间作用域)。

5. spec.names

spec:names:plural: examplessingular: examplekind: ExampleshortNames:- ex

spec.names 字段定义了 CRD 中资源名称的一些属性。其中包括 plural(资源名称的复数形式)、singular(资源名称的单数形式)、kind(资源的 Kubernetes 类型)和 shortNames(资源的简称)。

结语

自定义资源定义(CRD)是 Kubernetes 中非常强大的一项特性,它为用户提供了定义和使用自定义资源类型的能力。通过 CRD,用户可以更灵活地扩展 Kubernetes,适应各种不同类型的工作负载。CRD 的设计和使用需要谨慎,但在合适的场景下,它将是 Kubernetes 中实现自定义需求的理想选择。希望本文对你理解和使用 Kubernetes 中的 CRD 提供了有益的指导。

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

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

相关文章

061:vue中通过map修改一维数组,增加一些变量

第061个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

K8S-应用部署

1 应用管理解读 2 应用部署实践 资源对象管理关系 资源对象管理实践 手工方式: kubectl run pod名称 --imageimage地址资源清单方式: apiVersion: v1 kind: Pod metadata:labels:run: my-podname: my-pod spec:containers:- image: kubernetes-register.sswang.co…

Ubuntun构建本地源详细教程

联网主机上下载软件包并打包 首先使用一台已连接互联网的同版本ubuntu主机添加国内镜像源 mv /etc/apt/sources.list /etc/apt/sources.list.bak vim /etc/apt/sources.list# 写入下面的内容: deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiv…

jenkins安装报错:No such plugin: cloudbees-folder

jenkins安装报错:No such plugin: cloudbees-folder 原因是缺少cloudbees-folder.hpi插件 解决: 一,重新启动 http://xxx:8800/restart 二,跳到重启界面时,点击系统设置 三,找到安装插件,然…

1-03C语言超基础语法

一、概述 为了更好的进行后续的课程,避免出现"老师,我还没学过的东西,你怎么直接用?"诸如此类疑问,本小节就诞生了。 实际上,整个第一个大章节的所有小节都是"C语言基础语法"&#x…

【js逆向】爬虫之进程,线程,协程

目录 1、进程 1.1 进程定义 1.2 创建进程 1.2.1 创建单个进程 1.2.2 进程池 2、线程 2.1 线程定义 2.2 创建线程 2.2.1 创建单个线程 2.2.2 线程池

C/C++ 枚举

目录 枚举概述 枚举的使用 枚举的大小计算 枚举的优点 C语言中的自定义类型有:结构 位段 枚举 联合 枚举概述 枚举顾名思义就是一一列举,把可能的取值一一列举。 比如我们现实生活中:一周的星期一到星期日是有限的7天&#xff0c…

动手学深度学习之卷积神经网络之池化层

池化层 卷积层对位置太敏感了,可能一点点变化就会导致输出的变化,这时候就需要池化层了,池化层的主要作用就是缓解卷积层对位置的敏感性 二维最大池化 这里有一个窗口,来滑动,每次我们将窗口中最大的值给拿出来 还是上…

【REST2SQL】02 GO连接Oracle数据库

Oracle数据库我用的最多,先研究Oracle,Go连接Oracle并实现REST和SQL服务。 1 Oracle数据库的安装 我这里安装使用的是Oracle 11g , 安装过程省略5217字。 2 安装Go-ora依赖 go get github.com/sijms/go-ora/v2 安装成功后在GOPATH目录可见: 3 创建一…

python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 题外话: 由于发送邮件的时候需要: 开通STMP的邮件功能邮件授权码需要写正确端口号也需要写正确而且在测试163 或者 qq邮箱服务器的时候,都能正确发送 但是换成公司邮件的时候,使用公司的域名会出现发送失败! 对于补充的知…

Spring MVC之HandlerMapping

1. 前言 Spring MVC将请求处理器定义为handler,因为handler可以以很多形式存在,所以Spring并没有限制handler的类型,用Object来表示。然后又因为这个原因,Spring MVC针对不同的handler设计了不同的HandlerAdapter来协调handler处…

基于ElementUI封装的下拉树选择可搜索单选多选清空功能

效果&#xff1a; 组件代码 /*** 树形下拉选择组件&#xff0c;下拉框展示树形结构&#xff0c;提供选择某节点功能&#xff0c;方便其他模块调用* author wy* date 2024-01-03 * 调用示例&#xff1a;* <tree-select * :height"400" // 下拉框中树形高度* …

【数据结构】二叉树的概念及堆

前言 我们已经学过了顺序表、链表、栈和队列这些属于线性结构的数据结构&#xff0c;那么下面我们就要学习我们第一个非线性结构&#xff0c;非线性结构又有哪些值得我们使用的呢&#xff1f;那么接下来我们就将谈谈树的概念了。 1.树的概念与结构 1.1树的概念 树是一种非线性…

python数据可视化之折线图案例讲解

学习完python基础知识点&#xff0c;终于来到了新的模块——数据可视化。 我理解的数据可视化是对大量的数据进行分析以更直观的形式展现出来。 今天我们用python数据可视化来实现一个2023年三大购物平台销售额比重的折线图。 准备工作&#xff1a;我们需要下载用于生成图表的第…

2024苹果Mac电脑免费文件数据恢复软件EasyRecovery

EasyRecovery是一个操作安全、价格便宜、用户自主操作的非破坏性的只读应用程序&#xff0c;它不会往源驱上写任何东西&#xff0c;也不会对源驱做任何改变&#xff01;EasyRecovery是一个操作安全、价格便宜、用户自主操作的非破坏性的只读应用程序&#xff0c;它不会往源驱上…

Android 15即将到来,或将推出5大新功能特性

Android15 OneUI电池优化 三星最近完成了对其所有设备的稳定版 One UI 6.0 更新的推出&#xff0c;引起了用户的极大兴奋。据新出现的互联网统计数据显示&#xff0c;即将发布的基于 Android 15 的 One UI 7 将通过优化电池和功耗来重新定义用户体验&#xff0c;这是一项具有突…

【开源项目】WPF 扩展组件 -- Com.Gitusme.Net.Extensiones.Wpf

一、项目简介 Com.Gitusme.Net.Extensiones.Wpf 是一款 Wpf 扩展组件。基于.Net Core 3.1 开发&#xff0c;当前最新 1.0.1 版本。包含 核心扩展库&#xff08;Com.Gitusme.Net.Extensiones.Core&#xff09;、视频渲染&#xff08;Com.Gitusme.Media.Video&#xff09;、串口…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)线程池的启动和从线程池中取出一个反应堆实例

一、线程池的启动 &#xff08;主线程&#xff09; // 启动线程池 &#xff08;主线程&#xff09; void threadPoolRun(struct ThreadPool* pool) {/*线程池被创建出来之后&#xff0c;接下来就需要让线程池运行起来&#xff0c;其实就是让线程池里的若干个子线程运行起来*//…

小微企业在银行信贷相关产品和机器学习建模案例_论文科研_企业调研

各银行小微企业贷款业务 互联网的时代&#xff0c;大量新信息技术的涌现和网络的无处不在&#xff0c;想要抢占这片金融天地&#xff0c;必须重视小微金融业务&#xff0c;小微企业是一直具有重大潜力的客户&#xff0c;商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

java公交系统毕业论文

公交系统毕业论文 毕业设计题目:基于Java的公交车查询系统的设计与实现 年 月 日 毕 业 设 计 中 文 摘 要 随着中国经济的快速发展&#xff0c;我国交通运输业也在不断的优化发展。公交车的站点和线路的增多也给人们的出行带来了极大的不便&#xff0c;特别是针对一些旅客…