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

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

3天内不再提示

K8S API资源对象-CRD介绍

阿铭linux 来源:阿铭linux 2023-08-08 10:21 次阅读

在Kubernetes中,像Pod、Service和Deployment这样的资源是由内置的资源类型如Pod、Service和Deployment表示的。

而CustomResourceDefinition(CRD)允许你定义和创建自己的资源类型,以满足您的应用程序或基础设施需求。

一旦定义了CRD,可以通过Kubernetes API服务器创建和管理自定义资源的实例,就像处理任何其他本机资源一样。

这意味着您可以使用熟悉的Kubernetes工具如kubectl或Kubernetes控制器与管理您的自定义资源进行交互。

CRD提供了一种扩展Kubernetes平台以适应特定要求的方式,并能够构建自定义的运算符或控制器来自动化管理自定义资源。

运算符可以监视自定义资源的更改并相应地采取操作,例如提供额外的资源、扩展或执行自定义操作。

CRD已成为扩展Kubernetes的流行机制,在Kubernetes生态系统中的各种项目和框架中广泛使用,如Prometheus、Istio和Knative。 示例:

cat > crd-example.yaml << EOF
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myresources.example.com
spec:
  group: example.com
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          description: Define CronTab YAML Spec
          type: object
          properties:
            spec:
              type: object
              properties:
                name:
                  type: string
                age:
                  type: integer
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource
    shortNames:
      - mr
EOF

说明:

和我们定义普通的资源对象比较类似,这里可以随意定义一个自定义的资源对象,但是在创建资源的时候,肯定不是任由我们随意去编写 YAML 文件的,当我们把上面的 CRD 文件提交给 Kubernetes 之后,Kubernetes 会对我们提交的声明文件进行校验,从定义可以看出 CRD 是基于 OpenAPI v3 schem 进行规范的。

apiVersion:指定所使用的 CRD API 的版本,此示例使用了 apiextensions.k8s.io/v1 版本。

kind:定义资源类型为 CustomResourceDefinition。

metadata:定义元数据,其中 name 字段指定了 CRD 的名称为 myresources.example.com。

spec:定义了 CRD 的规范。

group:指定 CRD 所属的 API 组,此示例中为 example.com。

versions:定义 CRD 的版本列表。

name:指定版本的名称,此示例中为 v1。

served:指定此版本是否由 API 服务器提供服务,设为 true 表示提供服务。

storage:指定此版本是否持久化存储数据,设为 true 表示持久化存储。

openAPIV3Schema:指定自定义资源的 OpenAPI v3 架构定义

type:定义类型

properties:定义对象属性

name/age:自定义具体属性的名字

scope:指定资源的作用域,此示例中为 Namespaced,表示资源在命名空间级别进行管理。

names:定义了资源的名称相关信息

plural:指定资源的复数形式名称,此示例中为 myresources。

singular:指定资源的单数形式名称,此示例中为 myresource。

kind:指定资源的类型名称,此示例中为 MyResource。

shortNames:指定资源的缩略名称列表,此示例中只包含一个缩略名称 mr。

应用

kubectl apply -f crd-example.yaml
查看crd
kubectl get crd
一旦创建完自定义的CRD,那么就会生成一个自定义的API
/apis/example.com/v1/namespaces/*/myresources/...
创建自定义资源实例,基于前面CRD定义的资源
cat > myresource-instance.yaml <
应用
kubectl apply -f myresource-instance.yaml
查看MyResource
kubectl get MyResource  #或者用短名称
kubectl get mr

以上定义的CRD,仅仅是写入到了etcd中,并没有其它用处,要想让它有进一步作用,还得去定义Controller

而Controller更多的是开发范畴的事情,咱们暂时先不涉及。






审核编辑:刘清

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

    关注

    112

    文章

    16277

    浏览量

    177733
  • 存储器
    +关注

    关注

    38

    文章

    7473

    浏览量

    163711
  • CRD
    CRD
    +关注

    关注

    0

    文章

    14

    浏览量

    4008
  • YAML
    +关注

    关注

    0

    文章

    21

    浏览量

    2318

原文标题:K8S API资源对象--CRD

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    OpenStack与K8s结合的两种方案的详细介绍和比较

    OpenStack与K8S结合主要有两种方案。一是K8S部署在OpenStack平台之上,二是K8S和OpenStack组件集成。
    的头像 发表于 10-14 09:38 2.7w次阅读

    如何使用kubernetes client-go实践一个简单的与K8s交互过程

    【导读】Kubernetes项目使用Go语言编写,对Go api原生支持非常便捷。 本篇文章介绍了如何使用kubernetes client-go实践一个简单的与K8s交互过程
    的头像 发表于 02-02 11:16 6832次阅读
    如何使用kubernetes client-go实践一个简单的与<b class='flag-5'>K8s</b>交互过程

    Docker不香吗为什么还要用K8s

    Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。 这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营
    的头像 发表于 06-02 11:56 3430次阅读

    简单说明k8s和Docker之间的关系

    这篇文章主要介绍k8s和Docker关系简单说明,本文利用图文讲解的很透彻,有需要的同学可以研究下 最近项目用到kubernetes(以下简称k8sk
    的头像 发表于 06-24 15:48 3393次阅读

    K8S集群服务访问失败怎么办 K8S故障处理集锦

    问题1:K8S集群服务访问失败?     原因分析:证书不能被识别,其原因为:自定义证书,过期等。 解决方法:更新证书即可。 问题2:K8S集群服务访问失败? curl: (7) Failed
    的头像 发表于 09-01 11:11 1.6w次阅读
    <b class='flag-5'>K8S</b>集群服务访问失败怎么办 <b class='flag-5'>K8S</b>故障处理集锦

    K8S(kubernetes)学习指南

    K8S(kubernetes)学习指南
    发表于 06-29 14:14 0次下载

    CRD的概念及使用

    CRD的全称为 CustomResourceDefinitions,即自定义资源k8s拥有一些内置的资源,比如说Pod,Deployment,ReplicaSet等等,而
    的头像 发表于 09-07 09:49 5097次阅读

    mysql部署在k8s上的实现方案

    的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲 mysql 部署在 k8s 上,mysql 部署在 k8s 上的优势主要有以下几点。
    的头像 发表于 09-26 10:39 2496次阅读

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful
    发表于 07-19 13:14 1105次阅读

    什么是K3sK8sK3sK8s有什么区别?

    Kubernetes,通常缩写为 K8s,是领先的容器编排工具。该开源项目最初由 Google 开发,帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的一切。
    的头像 发表于 08-03 10:53 7463次阅读

    k8s生态链包含哪些威廉希尔官方网站

    1. Apache APISIX Ingress 定义   在 K8s 生态中,Ingress 作为表示 K8s 流量入口的一种资源,想要让其生效,就需要有一个 Ingress Controller
    的头像 发表于 08-07 10:56 1213次阅读
    <b class='flag-5'>k8s</b>生态链包含哪些威廉希尔官方网站

    K8s多集群管理:为什么需要多集群、多集群的优势是什么

    随着K8s和云原生威廉希尔官方网站 的快速发展,以及各大厂商在自己的数据中心使用K8sAPI进行容器化应用编排和管理,让应用交付本身变得越来越标准化和统一化,并且实现了与底层基础设施的完全解耦,为多集群和混合云提供了一个坚实威廉希尔官方网站 基础。
    发表于 09-14 10:48 1269次阅读
    <b class='flag-5'>K8s</b>多集群管理:为什么需要多集群、多集群的优势是什么

    k8s云原生开发要求

    Kubernetes(K8s)云原生开发对硬件有一定要求。CPU方面,建议至少配备2个逻辑核心,高性能CPU更佳。内存至少4GB,但8GB或更高更推荐。存储需至少20-30GB可用空间,SSD提升
    的头像 发表于 10-24 10:03 198次阅读
    <b class='flag-5'>k8s</b>云原生开发要求

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地与公有云分别建立K8s集群,并确保网络连接。接着,配置kubeconfig文件连接两集群,并安装云服务插件以实现资源互通。然后,编写Deployment文件部署应用,并使用kubectl命令
    的头像 发表于 11-07 09:37 125次阅读

    k8s和docker区别对比,哪个更强?

    Docker和Kubernetes(K8s)是容器化威廉希尔官方网站 的两大流行工具。Docker关注构建和打包容器,适用于本地开发和单主机管理;而K8s则提供容器编排和管理平台,适用于多主机或云环境,具备自动化
    的头像 发表于 12-11 13:55 27次阅读