K8s: Kubernetes扩展之自定义资源

Kubernetes 实战 一 CRD 自定义资源 文章目录1. CRD 简介2. 使用场景3. 操作环境4. 自定义资源5. 自定义资源-validations6. 自定义资源-additionalPrinterColumns7. 自定义资源-subresources 1. CRD 简介 Custom resources:是对K8S API的扩展,代表了一个特定的kubetnetes的定制化安装。在一个运行中的集群中,自定义资源可以动态注册到集... 阅读详情

自定义资源

  • 自定义资源是 K8s 的扩展,有时候需要对K8s进行一个扩展
  • 在默认的K8s集群里面提供的资源对象是一个有限的集合
  • 比如常用的pod, deployment, service,这些都是K8s原生的资源
  • 之所以它资源,是因为它能够对外提供API接口变成一个resource进行访问
  • 通过 kubectl 创建,也能把这些资源创建出来
  • 当有限的K8s的资源,不能满足你的需求的情况下
  • 就需要通过 Custom Resource 来实现自定义的这个资源
  • 实现了自定义资源之后,就可以使用 kubectl 来访问和创建其中的对象
  • 为什么需要有这个应用场景
    • 比如K8s提供了这个job类型的这个资源
    • 它能够去按照这个任务的一次性的任务的方式去执行或者多次任务去执行某一个任务
    • 它是没有提供一个 CronJob,类似于这样的一个定时任务的这么一个资源对象
    • 那么在这个时候就需要我们自行来扩展K8s对象
    • 自己去创建一个叫 CustomerResource 这种类型的资源,去满足我们自己的业务需求
    • 所以, 这样的业务需求,在企业落地开发的时候是非常常见的
  • 什么时候应该使用自定义资源
    • 你希望使用 K8s 客户端库和 CLI 来创建和更改新的资源
    • 你希望 kubectl 能够直接支持你的资源;例如,kubectl get my-object object-name
    • 你希望构造新的自动化机制,监测新对象上的更新事件
    • 并对其他对象执行 CRUD 操作,或者监测后者更新前者
    • 你希望编写自动化组件来处理对对象的更新
    • 你希望使用 K8s API 对诸如 .spec、.status 和 .metadata 等字段的约定
    • 你希望对象是对一组受控资源的抽象,或者对其他资源的归纳提炼
  • 这个看起来似乎有些像 ConfigMap, 我们来看下何时使用 ConfigMap
    • 存在一个已有的,文档完毕的配置文件格式约定,如 mysql.cnf 或 pom.xml
    • 你希望将整个配置文件放到某 configMap 中的一个主键下面
    • 配置文件的主要用途是针对运行在集群中 Pod 内的程序,供后者依据文件数据配置自身行为
    • 文件的使用者期望以 Pod 内文件或者 Pod 内环境变量的形式来使用文件数据, 而不是通过 K8s API
    • 你希望当文件被更新时通过类似 Deployment 之类的资源完成滚动更新操作

创建一个 CRD


1 )概述

  • 当你创建新的 CustomResourceDefinition(CRD)时
  • Kubernetes API 服务器会为你所指定的每一个版本生成一个 RESTful 的 资源路径
  • CRD 可以是命名空间作用域的,也可以是集群作用域的取决于 CRD 的 scope 字段设置
  • 和其他现有的内置对象一样,删除一个命名空间时,该命名空间下的所有定制对象也会被删除
  • CustomResourceDefinition 本身是不受命名空间限制的,对所有命名空间可用

2 )创建

  • $ vi rd-demo1.yaml
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: crontabs.stable.example.com
    spec:
      group: stable.example.com
      versions:
      - name: v1
        # Each version can be enabled/disabled by Served flag.
        served: true
        # One and only one version must be marked as the storage version.
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              spec:
                type: object
                properties:
                  cronSpec:
                    type: string
                  image:
                    type: string
                    pattern: '^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$' # 数据校验
                  replicas:
                    type: integer
                    minimum: 1
                    maximum: 10
    scope: Namespaced
    names:
      plural: crontabs
      singular: crontab
      kind: CronTab
      shortNames:
      - ct
    
  • 在这里面,它是基于这个 openAPIV3Schema 这个版本的schema去定义比如类型,属性
  • 相当于有一个类似于面向对象的这么一个定义方式描述这个对象应该长成什么样,有什么字段
  • 这里面值得一提的就是说在这个 scope 字段, 它的scope 可以被限定在 namespace 的这么一个范围
  • 也就是说,如果你scope设置了 namespace 之后, 当你删除某一个namespace名字空间的时候
  • 空间下所有的定制对象也会被删除, 如果你不定义的话,那个 custom resource 不受命名名间的限制
  • 在所有命名空间生效,这里声明一个名字叫 crontabs 的对象,这个版本的版本是 v1
  • group 是这个网站: stable.example.com, metadata 名称叫 crontabs.stable.example.com
  • schema 下的 cronSpec 就是定时任务的一个规范,可以输入一些正则表达式
  • 还定义了的镜像字段,副本数字段,有了这样的文件后,可进行创建
  • 可定制资源是通过OpenAPI v3模式定义来执行合法性检查的
  • 模式定义是在 CustomResourceDefinition 中设置的
  • 在下面的例子中, CustomResourceDefinition 对定制对象执行
  • 以下是合法性检查:
    • spec.cronSpec 必须是一个字符串,必须是正则表达式所描述的形式
    • spec.replicas 必须是一个整数,且其最小值为 1、最大值为 10
  • 执行 $ kubectl apply -f rd-demo1.yaml
    customresourcedefinition.apiextensions.k8s.io/crontabs.stable.example.com created
    
  • $ kubectl get crd 获取资源类型
    NAME                            CREATED AT
    crontabs.stable.example.com     2024-04-30T13:05
    
  • 现在定义好了资源,我们还要创建这个资源的对象
    • 在创建了 CustomResourceDefinition 对象之后
    • 你可以创建定制对象(Custom Objects)定制对象可以包含定制字段
    • 这些字段可以包含任意的 JSON 数据
    • 在下面的例子中,在类别为 CrontTab 的定制对象中,设置了cronSpec 和 image 定制字段
    • 类别 CronTab 来自你在上面所创建的 CRD 的规约
  • 创建对象 $ vi my-crontab.yaml
    apiVersion: "stable.example.com/v1"
    kind: CronTab
    metadata:
      name: my-new-cron-object
    spec:
      cronSpec: "* * * * */5"
      image: my-awesome-cron-image # 这个可以是任意的镜像
    
  • $ kubectl apply -f my-crontab.yaml
    crontabs.stable.example.com/my-new-cron-object created
    
  • $ kubectl get crontab 获取实例
    NAME                  AGE
    my-new-cron-object    8s
    
  • $ kubectl get crontab -o yaml 可以输出实例,可以看到很多细节
  • 所以通过简单的定义就发现,通过 K8s 我能自己实现一个 crontab 这么一个类型的一个任务
  • 然后有这个对象之后,就能实现 crontab 的这个命令
  • 这就是一个最简单的 chrome type 任务的一个定义
  • 有了这样的能力之后,对 K8s 进行一个很好的扩展
k8s深度讲解:无限的扩展性 - CRD 与 Operator 今天,我们站在了 Kubernetes 这座技术巨塔的顶端,窥见了其设计的终极智慧。我们从etcd的数据一致性出发,见证了Scheduler和Controller的决策之舞,下沉到Kubelet的具体执行,探索了Service的网络魔法,最终,我们学会了如何通过CRD 和 Operator,成为这个生态的创造者。我们深刻地认识到,Kubernetes 不仅仅是一个“容器编排器”,它是一个通用的、声明式的、事件驱动的、可无限扩展的控制平面框架。 阅读详情

相关推荐

[Kubernetes]1.Kubernetes(K8S)介绍,基于腾讯云的K8S环境搭建集群以及裸机搭建K8S集群

Kubernetes(K8S)介绍,基于腾讯云的K8S环境搭建集群以及裸机搭建K8S集群

资深系统架构,深耕高并发研发与 AI 大模型工程化落地。技术栈以 Python (AI/NLP/RAG/Agent) 与 Golang (高并发架构) 为双核心,兼具 PHP 大型应用经验。专注算法落地、复杂系统设计及团队技术赋能 3221

[Kubernetes] k8s中的自定义资源定义 Custom Resource Definitions(CRD):入门

在Kubernetes中,自定义资源定义(CRD)是一种扩展机制,允许用户定义和使用非原生的资源类型。CRD实际上是Kubernetes API的一部分,它允许用户创建和操作自定义资源。

异构算力老群群(在读985计算机博士生)的技术博客 2327

【Kubernetes】以LOL的视角打开K8s

LOL和K8s都上手之后,其实我觉得相比较起来,LOL的上手难度要高多了,这么多个英雄,每个英雄有不同的机制和技能,这些可比K8s的内容多多了,所以如果大家LOL都能上手的话,上手K8s肯定不会是问题的!

ThisIsClark 2075

如何用 Kubernetes 自定义资源?

CRD的全称为,即自定义资源。k8s拥有一些内置的资源,比如说Pod,Deployment,ReplicaSet等等,而CRD则提供了一种方式,使用户可以自定义新的资源,以扩展k8s的功能。

LinkSLA的博客 1221

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

Kubernetes资源定义了可以存储在集群中的数据类型。它们是通过KubernetesAPI访问的,该API提供了用于在每种资源类型中创建、列出和修改项目的端点。您可以添加自定义资源以在集群中存储您自己的任意数据。您创建的项目将由etcd控制平面组件与内置资源的实例一起存储。API会自动显示自定义资源,因此您无需设置自己的工具来创建项目实例。默认情况下,CRD充当简单的数据结构。虽然野外的CRD通常有自己的行为,但这不是CRD机制提供的。...

学海无涯苦作舟的博客 1326

19、Kubernetes 存储与扩展:从单例到自定义资源

本文深入探讨了Kubernetes中从基础存储到高级扩展的多种方案。内容涵盖可靠单例MySQL实例的部署、基于StorageClass的动态卷供应机制、使用StatefulSets实现有状态应用(如MongoDB集群)的高可用部署,并进一步介绍如何通过CustomResourceDefinition扩展API以支持自定义资源。文章还详细说明了控制器实现、准入控制(验证与默认值注入)等扩展技术,结合流程图和对比表格,帮助读者根据实际场景选择合适的存储与扩展策略,提升云原生应用的灵活性与可靠性。

backprop5master的博客 77

k8s CRD相关

1、CRD的意义 Kubernetes 1.7之后,提供了CRD(CustomResourceDefinitions)自定义资源的二次开发能力来扩展kubernetes API,通过此扩展可以向kubernetes API中增加新的资源类型,会比修改kubernetes apiserver的源代码或创建自定义的apiserver来的更加的简洁和容易, 2、在k8s上创建资源的过程 用户创建一个资源,实际上是把k8s抽象的资源根据资源清单(yaml文件)做实例化。具体过程如下...

fourierr的博客 8525

23、Kubernetes 自定义资源与操作符:扩展集群功能的利器

本文详细介绍了 Kubernetes 中的自定义资源定义(CRD)和操作符模式,探讨了如何通过它们动态扩展集群功能并简化应用组件的部署与管理。内容涵盖 CRD 的创建与监控、操作符的工作机制,以及通过 Postgres 操作符实现高可用数据库的实例。此外,还总结了 CRD 和操作符的应用优势、注意事项,以及相关常见问题的解答,帮助读者更好地理解和运用 Kubernetes 的扩展能力。

f0g1h2的博客 105

【Kubernetes】(二十三)CRD1

摘要: CRD(CustomResourceDefinition)是Kubernetes扩展API的核心机制,允许用户自定义资源类型,实现原生K8s不支持的功能。其核心价值包括扩展能力、业务逻辑封装及统一管理,典型应用场景涵盖数据库托管(如MySQL Operator)、CI/CD流水线(如Argo Workflows)等。CRD需配合Controller实现自动化运维,形成Operator模式。 实战流程: 定义CRD:通过YAML声明资源结构和校验规则(如myapps.example.com)。 部署C

2401_83961180的博客 947

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程 1.NVIDIA驱动检测及安装 2.Anaconda的安装 3.安装cuda、cudnn、pytorch 4.其他报错

aaaccc444的博客 2424

基于phpstudy搭建pikachu靶场

一、phpstudy下载安装配置 phpstudy介绍 简单介绍一下phpstudy,详细请参考百度解读。pikachu是基于PHP环境搭建的,需要数据库支持,所以装pikachu之前需要先安装它需要的环境,就像你养鱼需要给它提供水环境一样。安装phpstudy能满足pikachu的需求,所以先安装phpstudy。 phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是

ptxybird的博客 1万+

Helm自定义资源:扩展Kubernetes应用能力

在Kubernetes生态系统中,自定义资源(Custom Resource,CR)是扩展Kubernetes API的核心机制。Helm作为Kubernetes的包管理器,为自定义资源提供了强大的支持,让开发者能够: - ???? 扩展Kubernetes原生功能 - ???? 打包复杂应用逻辑 - ???? 创建领域特定语言(DSL) - ???? 实现声明式应用管理 ## Helm中的CRD支持架构 ...

gitblog_00367的博客 680

STC8G1K08A的10位PWM避坑指南:为什么你的占空比调节总失效?(附寄存器操作时序图)

本文深入剖析了STC8G1K08A单片机10位PWM功能中占空比调节失效的核心原因,揭示了数据手册未明确指出的寄存器操作时序陷阱。通过对比错误与正确配置的波形,文章指出关键在于更新占空比高2位前需临时关闭PWM输出,并提供了经过验证的安全操作宏与函数库,帮助开发者彻底解决此问题,实现0%-100%的平滑控制。

yyy34的博客 751

突破K8s边界:自定义资源与扩展机制实战指南

在云原生应用开发中,你是否曾遇到Kubernetes(K8s)内置资源无法满足业务需求的困境?当Deployment、Service等标准资源不足以描述你的业务实体时,自定义资源(Custom Resource,CR)与自定义资源定义(CustomResourceDefinition,CRD)将成为你的解决方案。本文将通过实战案例,带你掌握K8s扩展机制的核心原理与应用方法,让你的应用真正适配Ku

gitblog_00543的博客 1052

从Oracle迁移数据到Hadoop

目标:把Oracle 下的数据文件迁移到 Hadoop , 数据表都是上亿条,每个数据表的空间都超过100G。 关键是建立数据文件是UTF8格式,这样数据中的汉字在Hadoop 里显示才正常。 平台:CentOS 6.10 工具:Python 2.7 cx_Oracle 库 Oracle10.2.0.4.0 Hadoop 2.7.2-transwarp-5.2.1 1. 查看表...

预则立 4237

后台扫描工具 - 御剑(珍藏版)附下载

版本说明:御剑后台扫描珍藏版 下载地址:安装包放下方网盘里了 链接:https://pan.baidu.com/s/1Bn7GtWb7AStcjzVahFOjSQ 提取码:zkaq 使用环境:windows 标题工具说明: 御剑后台扫描珍藏版是T00LS大牛的作品,方便查找用户后台登陆地址,同时也为程序开发人员增加了难度,尽量独特的后台目录结构。 附带很强大的字典,字典我们也是可以自己修改的,继续增加规则。 一、御剑后台扫描工具简介: 1、扫描线程自定义:用户可根据自身电脑的配置来设置调节扫描线程 2、

hackzkaq的博客 4万+

如何扩展 Kubernetes JavaScript 客户端:自定义资源与插件开发

Kubernetes JavaScript 客户端是一个功能强大的工具,允许开发者通过 JavaScript 与 Kubernetes 集群进行交互。本文将详细介绍如何扩展该客户端,实现自定义资源的管理和插件开发,帮助你更灵活地应对各种 Kubernetes 应用场景。 ## 了解 Kubernetes JavaScript 客户端基础 Kubernetes JavaScript 客户端提供了

gitblog_00344的博客 483

dolphinscheduler集群服务一键安装启动实现流程剖析

通过以上分析我们基本梳理清楚了整个dolphinscheduler项目的一键安装启动逻辑, 我们现在在通过一张图正好理一下整个实现流程。关于一键停止集群服务及一件查询集群各个角色服务实例运行状态的实现也都在stop-all.sh/status-all.sh及dolphinscheduler-daemon.sh这三个脚本中, 有兴趣自行研究。写这篇文章的核心目的不仅在于给大家分享如何优秀的开源项目的一键安装部署的实现过程。

最爱嫣夜来 1208

终极指南:如何通过Helm自定义资源(CRD)扩展K8s应用能力

Helm作为Kubernetes的包管理器,不仅能简化应用部署流程,还能通过自定义资源(CRD)扩展Kubernetes的原生能力。本文将详细介绍如何利用Helm管理和部署CRD,帮助你轻松扩展K8s集群功能。 ## 什么是CRD?为什么需要用Helm管理? 自定义资源(Custom Resource Definition, CRD)是Kubernetes提供的强大扩展机制,允许用户定义新的资

gitblog_00716的博客 474

Unity中语法糖带来的GC问题 ——那些看起来优雅、实际上在背后偷偷生垃圾的代码

*语法糖(Syntactic Sugar)**指的是编程语言中为了让代码更简洁、易读而提供的简便写法。比如C#中的foreachlambda表达式LINQ自动属性等。语法糖本身不是坏事,但在Unity等对GC敏感的环境下,要警惕语法糖带来的隐式内存分配。合理使用语法糖,关键场合用更“丑陋”但高效的写法,才能保证游戏流畅运行。下面我将更深入地分析Unity中语法糖导致GC的原理、具体场景、检测与优化技巧,并补充一些容易忽视的细节。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 518

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

w0shishabi的博客 5685

kubernetes-handbook 实战:使用自定义资源(CRD)扩展 Kubernetes API 与构建自定义控制器

自定义资源(Custom Resource)是 Kubernetes 对外提供的最重要扩展机制之一:它允许你在不修改 Kubernetes 官方源码的前提下,向集群 API 中注入新的对象类型,并用 `kubectl`、RBAC、watch、CRUD 等内建能力像管理原生对象一样管理它们。本文以 kubernetes-handbook 中 [使用自定义资源扩展 API](https://link.

gitblog_00733的博客 437

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

K8S CRD完整详解:CRD即Kubernetes自定义资源定义

K8s中CRD全称CustomResourceDefinition,本质是自定义资源定义,用于扩展Kubernetes原生API,新增用户专属自定义资源类型;注册CRD后可像原生资源一样通过kubectl管理CR实例,搭配Operator自定义控制器能够实现数据库、中间件等复杂业务组件自动化运维,是云原生扩展K8s集群能力的标准官方方案。

专注分享优质干货资源与零基础实用教程 115

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

k8s自定义资源CRD

k8s自定义资源CRD

Jacson__的博客 2292

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Kubernetes 使用自定义资源(CRD)扩展API

K8s CRD 即 Kubernetes CustomResourceDefinition,是 Kubernetes 提供的一种扩展机制,允许用户在 Kubernetes 集群中定义和使用自定义的资源类型。通过定义 CRD,用户可以在 Kubernetes 集群中创建、读取、更新和删除自定义资源对象,就像使用原生的 Pod、Service 等资源一样。本文主要介绍如何使用kubebuilder快速创建自定义资源类型。

zhangj1125的专栏 767

Kubernetes K8S 基于 Docker 安装部署

在 Docker 容器技术被炒得热火朝天之时,大家发现,如果想要将 Docker 应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对 Docker 及容器进行更高级更灵活的管理。就在这个时候,K8S 出现了。K8S,就是基于容器的集群管理平台,它的全称,是 Kubernetes。 本次主题将会为你分享: K8S 起源 K8S 集群 为什...

GitChat 1万+
上一篇: K8s: Prometheus结合Grafana监控应用数据及相关配置 (三)
下一篇: K8s: Helm搭建mongodb集群(1)
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值