【k8s】【资源对象】CRD的介绍与使用
【摘要】 一、什么是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)