0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Kubernetes开发指南之深入理解CRD

马哥Linux运维 来源:稀土掘金 2023-12-13 18:19 次阅读

CRD本身是Kubernetes内置的资源类型,全称是CustomResourceDefinition,可以通过命令查看,kubectl get查看集群内定义的CRD资源。


NAME                         CREATED AT
apps.app.o0w0o.cn            2019-07-25T07:02:47Z
microservices.app.o0w0o.cn   2019-07-25T07:02:47Z

在与人们谈论CRD时,我发现人们对CRD存在一些常见的误解,因此需要提前澄清一些概念:

在 Kubernetes 中,一切都称为资源,如 Yaml 中的 Kind 项所述。

但除了 Deployment 等常见的内置资源之外,Kube 还允许用户定义资源(CR)。

CRD 并不是真正的自定义资源,而是自定义资源的定义(描述我们定义的资源的样子)

对于 CRD,它本质上是一个 Open Api 架构,正如 Kuber 博客文章 ( kubernetes.io/blog/2019/0…) 所说,R 和 CR 都需要 Yaml。但是如何保证Yaml描述的资源是规范的、合法的,这就是schema的作用,而CRD的作用就是向集群注册一个新的资源,并告诉ApiServer这个资源是如何合法定义的。

控制器模式

在详细介绍 CRD 之前,我们先简要解释一下控制器模型。如果你对 Kubernetes 有了解的话,就知道我们可以通过创建 Deployment 来管理 Pod,但是 Deployment 并不是直接创建 Pod,而是 Deployment 管理 RS,RS 管理 Pod,这实际上就是控制器模式。

0c34693a-999c-11ee-8b88-92fbcf53809c.png

控制器模式允许基于现有资源定义更高阶的控制器,以实现更复杂的功能,当然,具体细节肯定会更复杂。

CRD 可以做什么

总的来说,我们用CRD定义的CR是一个新的控制器,我们可以自定义Controller的逻辑来完成一些Kubernetes集群原生不支持的功能。

举个具体的例子,我使用 Kubebulder 创建了一个简单的 CRD(github.com/Coderhypo/K…),尝试将微服务管理构建到 Kubernetes 集群中。

我创建了两个资源,一个名为App,负责管理整个应用程序生命周期,另一个名为MicroService,负责管理微服务的生命周期。

具体逻辑结构可以理解如下

0c3998ce-999c-11ee-8b88-92fbcf53809c.png

App可以直接管理多个MicroServices,每个都MicroService支持多个版本,并且得益于控制器模型,MicroService可以Deployment为每个版本创建一个,允许多个版本同时部署。

如果管理应用部署过于简单,MicroService支持创建Service并Ingress为每个微服务启用四层负载均衡和七层负载均衡。

0c51e776-999c-11ee-8b88-92fbcf53809c.png

并且,如果启用负载平衡,将为每个版本创建一个 SVC,因此一个服务将有 n + 1 个 SVC,其中 n 为每个版本 1 个,额外的 1 个 SVC 在运行后不会更改(名称和 clusterIP)MicroService。微服务创建完成后,该SVC的Selector将始终与CurrentVersion SVC相同。

换句话说,存在一个稳定的SVC,它向其他组件提供当前版本的服务,而其他组件则可以访问特定版本的服务。这种SVC+CurrentVersion使得实现蓝绿发布能力变得非常容易。

除了SVC之外,MicroService还基于nginx Ingress控制器的能力实现灰度发布,通过修改canaryLoadBalance中的配置,可以通过scale/header/cookie实现灰度发布。

在这个例子中,App并MicroService没有创建new capabilities,而是通过组合 Kubernetes 中已有的资源来实现新功能。

但是,除了快速蓝绿化和灰化微服务之外,还有什么新价值吗App?MicroService另一个看不见的价值是管理的标准化,以前应用程序下的任何操作都需要翻译成“Kube语言”,即对Deployment或Ingress进行管理,现在可以通过统一的入口点规范化进行管理。

概括

通过一个简单的小演示来描述 CRD 是什么,很容易概括。从我目前的想法来看,我认为CRD有两个非常重要的能力。

首先,从功能上来说,CRD 将 Kubernetes 中已有的资源和能力变成了乐高积木,我们可以轻松地使用它来扩展 Kubernetes 原生不具备的能力。

其次,基于Kubernetes的产品不可避免地要求我们将产品术语与Kube术语保持一致,例如服务是Deployment,实例是Pod等等。但CRD让我们可以根据产品创建自己的概念(或者资源),让Kube现有的资源为我们的概念服务,这让产品更专注于它解决的场景,而不是考虑如何将场景应用到Kubernetes上。

链接:https://juejin.cn/post/7277387014046810146







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15235

    浏览量

    171213
  • SVC
    SVC
    +关注

    关注

    0

    文章

    33

    浏览量

    11930
  • CRD
    CRD
    +关注

    关注

    0

    文章

    14

    浏览量

    3984

原文标题:图解Kubernetes开发指南之深入理解CRD

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入理解Android

    深入理解Android
    发表于 08-20 15:30

    深入理解和实现RTOS_连载

    和trcohili的帖子。深入理解和实现RTOS_连载1_RTOS的前生今世今天发布的是第一篇,"RTOS的前生今世"。通过软件系统结构的比对简要的介绍rtos为何而生。如果读者对RTOS
    发表于 05-29 11:20

    深入理解和实现RTOS_连载

    和trcohili的帖子。trochili rtos完全是作者兴趣所在,且行且坚持,比没有duo。深入理解和实现RTOS_连载1_RTOS的前生今世今天发布的是第一篇,"RTOS的前生今世"
    发表于 05-30 01:02

    深入理解lte-a

    深入理解LTE-A
    发表于 02-26 10:21

    如何深入理解ES6函数

    深入理解ES6函数
    发表于 05-22 07:40

    深入理解STM32

    时钟系统是处理器的核心,所以在学习STM32所有外设之前,认真学习时钟系统是必要的,有助于深入理解STM32。下面是从网上找的一个STM32时钟框图,比《STM32中文参考手册》里面的是中途看起来清晰一些:重要的时钟:PLLCLK,SYSCLK,HCKL,PCLK1,...
    发表于 08-12 07:46

    深入理解SQLite3sqlite3_exec及回调函数sqlite3

    深入理解SQLite3sqlite3_exec及回调函数sqlite3:深入理解sqlite3_stmt 机制sqlite3: sqlite3_step 函数sqlite3
    发表于 11-04 07:11

    对栈的深入理解

    为什么要深入理解栈?做C语言开发如果栈设置不合理或者使用不对,栈就会溢出,溢出就会遇到无法预测乱飞现象。所以对栈的深入理解是非常重要的。注:动画如果看不清楚可以电脑看更清晰啥是栈先来看一段动画:没有
    发表于 02-15 07:01

    为什么要深入理解

    [导读] 从这篇文章开始,将会不定期更新关于嵌入式C语言编程相关的个人认为比较重要的知识点,或者踩过的坑。为什么要深入理解栈?做C语言开发如果栈设置不合理或者使用不对,栈就会溢出,溢出就会遇到无法
    发表于 02-15 06:09

    深入理解三极管

    深入理解三极管的相应资料,有需要的可以下载,不喜勿喷
    发表于 01-14 16:19 24次下载

    深入理解Android之资源文件

    深入理解Android之资源文件
    发表于 01-22 21:11 22次下载

    深入理解Android》文前

    深入理解Android》文前
    发表于 03-19 11:23 0次下载

    深入理解Android:卷I》

    深入理解Android:卷I》
    发表于 03-19 11:23 0次下载

    深入理解Android网络编程

    深入理解Android网络编程
    发表于 03-19 11:26 1次下载

    深入理解LED开发过程

    不知道你是否想过,一个LED灯点亮过程的本质是什么。当你是一个小白的时候,点亮一个LED灯,IDE都会帮你做好所有的事情,你只需要点击一下编译即可。但是,当你成长到一定程度时,就需要好好想想,一个LED的点亮,其实是对单片机中背后原理机制真正的深入理解。今天我就带你,来深入理解
    发表于 12-22 19:08 9次下载
    <b class='flag-5'>深入理解</b>LED<b class='flag-5'>开发</b>过程