【k8s】【资源对象】CRD的介绍与使用

举报
huahua.Dr 发表于 2022/09/16 20:47:08 2022/09/16
【摘要】 一、什么是CRDCRD(Custom Resource Define) 自定义资源定义,是在k8s高版本(v1.7+)上新增加的新特性,为了提高拓展性,让开发者可以自己去定义k8s资源对象。当前k8s的已存在的官方资源对象有:类别名称资源对象Pod:是一种集合了多个应用容器、存储资源、专用IP及支撑容器运行其他配置选项的逻辑组件,是k8s部署单元和原子运行单元,简单来说就是一个运行多个应用程...

一、什么是CRD

CRD(Custom Resource Define) 自定义资源定义,是在k8s高版本(v1.7+)上新增加的新特性,为了提高拓展性,让开发者可以自己去定义k8s资源对象。

实际运行时是以CR(Custom Resourse自定义资源)具体实例进行呈现。

当前k8s的已存在的官方资源对象有:

类别

名称

资源对象

Pod:是一种集合了多个应用容器、存储资源、专用IP及支撑容器运行其他配置选项的逻辑组件,是k8s部署单元和原子运行单元,简单来说就是一个运行多个应用程序的单一运行实例,通过共享资源相互联系的应用容器。通俗的讲,pod是一个物理主机或VM主机,pod中的应用容器就是主机上的进程,彼此隔离。

ReplicaSet:定义一组任何时候都处于运行状态的pod副本的稳定集合资源,保证运行指定数量的、完全相同的pod的可用性。

ReplicationController跟ReplicaSet是一样的,确保在任何时候都有特定数量的 Pod 副本处于运行状态。 换句话说,ReplicationController 确保一个 Pod 或一组同类的 Pod 总是可用的。但是更推荐使用ReplicaSet的Deployment去建立副本。

Deployment该对象是用来描述pod和ReplicaSet副本的目标状态,并更新他们不符合期望时的状态。

StatefulSet该资源对象用来管理有状态应用pod的工作负载,支持pod集合的部署和扩容、缩容。

DaemonSet该对象用来确保全部或者部分节点都运行一个pod副本,就是我们所说的守护进程。

Job:该对象用来执行目标状态的pod副本的一个任务,相当于一个监听任务,实时控制pod副本达到期望状态。

CronJob这是一个有时间周期的Job。

HorizontalPodAutoscaling:该对象为pod水平自动扩缩,自动更新工作负载资源(Deployment和StatefulSet),目的是自动扩缩工作负载以满足需求。

Node节点是一个虚拟机或者物理机,节点上运行pod所需的容器。

Namespace:命名空间,是一种机制,将同一集群的资源划分一个相互隔离的组。

Service就是运行在pod上的提供服务的组件,如微服务组件。

Ingress是各个服务service相互访问的一个中间路由管理器,可以实现流量控制等。

Label为每个对象定义标签,用于标签选择器可以高效地查询和监听k8s对象。

CustomResourceDefinition用于开发者自定义的资源对象。

二、 如何使用CRD

CRD 资源可以动态注册到集群中,注册完毕后,用户可以通过 kubectl 来创建访问这个自定义的资源对象,类似于操作 Pod 一样。

不过需要注意的是 CRD 仅仅是资源的定义而已,需要一个 Controller 去监听 CRD 的各种事件来添加自定义的业务逻辑。

1.静态CRD,只对CRD资源进行增删改查(就是将其保存在etcd中而已)

(1)定义CRD资源的yaml文件(demo.yaml)

apiVersion: apiextensions.k8s.io/v1

kind: CustomResourceDefinition

metadata:

  # name 必须匹配下面的spec字段:<plural>.<group>

  name: demo.stable.example.com

spec:

  # group 名用于 REST API 中的定义:/apis/<group>/<version>

  group: stable.example.com

  # 列出自定义资源的所有 API 版本

  versions:

  - name: v1  # 版本名称,比如 v1、v2beta1 等等

    served: true  # 是否开启通过 REST APIs 访问 `/apis/<group>/<version>/...`

    storage: true # 必须将一个且只有一个版本标记为存储版本

    schema:  # 定义自定义对象的声明规范

      openAPIV3Schema:

        description: Define CronTab YAML Spec

        type: object

        properties:

          spec:

            type: object

            properties:

              cronSpec:

                type: string

              image:

                type: string

              replicas:

                type: integer

  # 定义作用范围:Namespaced(命名空间级别)或者 Cluster(整个集群)

  scope: Namespaced

  names:

    # kind 是 sigular 的一个驼峰形式定义,在资源清单中会使用

    kind: CronTab

    # plural 名字用于 REST API 中的定义:/apis/<group>/<version>/<plural>

    plural: demo

    # singular 名称用于 CLI 操作或显示的一个别名

    singular: crontab

    # shortNames 相当于缩写形式

    shortNames:

    - demo

  (2) 创建CRD资源:kubectl apply -f {自定义crd yaml文件}

执行命令:kubectl apply -f demo.yaml

(3)查询CRD资源:kubectl get crd {|grep 自定义crd名称}

执行命令:kubectl get crd |grep demo

4)编辑CRD资源:kubectl edit crd {自定义crd名称} {-n 命名空间}

执行命令:kubectl edit crd  demo.stable.example.com

 

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。