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

    文章

    15223

    浏览量

    171192
  • 存储器
    +关注

    关注

    38

    文章

    7148

    浏览量

    161986
  • CRD
    CRD
    +关注

    关注

    0

    文章

    14

    浏览量

    3984
  • YAML
    +关注

    关注

    0

    文章

    21

    浏览量

    2267

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

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

收藏 人收藏

    评论

    相关推荐

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    性能以及资源消耗十分堪忧。基于阿里巴巴多年来容器服务日志采集的经验积累,并结合阿里云Kubernetes内测以来广大用户的反馈与诉求,今天,日志服务为k8s带来真正意义上的一站式日志解决方案。方案介绍
    发表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    性能以及资源消耗十分堪忧。基于阿里巴巴多年来容器服务日志采集的经验积累,并结合阿里云Kubernetes内测以来广大用户的反馈与诉求,今天,日志服务为k8s带来真正意义上的一站式日志解决方案。方案介绍
    发表于 02-28 12:50

    再次升级!阿里云Kubernetes日志解决方案

    控制台、SDK配置方式外,支持通过CRD方式进行配置(kubectl、控制台、K8S openapi)。K8S无缝集成:采集配置支持yaml方式部署,兼容K8S各种集成方式。日志服务
    发表于 05-28 19:08

    K8S容器编排的互通测试

    K8S容器编排之NetWorkPolicy官方实例
    发表于 06-06 11:28

    从零开始入门 K8s| 阿里技术专家详解 K8s 核心概念

    的资料中也会看到“ks”这个词,也就是“K8s”,它是通过将 8 个字母“ubernete ”替换为“8”而导致的一个缩写。Kubernetes 为什么要用“舵手”来命名呢?大家可以看一下这张图:这是一艘
    发表于 09-20 14:52

    k8s核心原理学习指南3

    k8s学习3 - 核心原理
    发表于 09-25 16:37

    K8s 从懵圈到熟练 – 集群网络详解

    导读:阿里云 K8S 集群网络目前有两种方案:一种是 flannel 方案;另外一种是基于 calico 和弹性网卡 eni 的 terway 方案。Terway 和 flannel 类似
    发表于 10-14 15:06

    K8s 从懵圈到熟练 – 镜像拉取这件小事

    会首先通过阿里云 Acr credential helper 组件,再经过 K8s 集群的 API Server 和 kubelet 组件,最后到 docker 容器运行时。但是我的叙述,会从后往前
    发表于 10-14 15:38

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    pod 删掉之后的情况。先删 Pod,接着再删一下对应的 PVC(K8s 内部对 pvc 对象由保护机制,在删除 pvc 对象时如果发现有 pod 在使用 pvc,pvc 是删除不掉的),这个可能要
    发表于 10-15 14:55

    从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度

    K8s 资源对象以及使用方法;通过两个实际场景遇到的问题引出存储拓扑调度功能必要性,以及 K8s 中如何通过拓扑调度来解决这些问题;通过剖析 K8
    发表于 10-15 15:07

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    对象,这样给 PV 绑定的 PVC 还是存在的,下次 pod 使用的时候,就可以直接通过 PVC 去复用。K8s 中的 StatefulSet 管理的 Pod 带存储的迁移就是通过这种方式。三、操作演示
    发表于 10-16 10:10

    k8s volume中的本地存储和网络存储

    八 、 k8s volume 本地存储和网络存储
    发表于 03-25 08:44

    搭建K8s环境平台的步骤

    1 搭建K8s环境平台规划1.1 单master集群1.2 多master集群
    发表于 11-04 06:03

    CRD的概念及使用

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

    K8S API资源对象NetworkPolicy介绍

    NetworkPolicy用来控制Pod与Pod之间的网络通信,它也支持针对Namespace进行限制。
    的头像 发表于 05-10 09:20 414次阅读