K8S Custom Resource Definition(CRD)之初体验

CRD(Custom Resource Definition) 是 kubernetes 强大扩展能力的一处体现,联系到编程场景,CRD 相当于是类(class),custom resource 相当于是对象或者实例,通过 CRD 可以创建自己定义的资源类型,api server 会直接支持,可以通过 kubectl 命令创建对应的资源并对资源进行删/查/改的操作,资源对象会被保存在 etcd 中,可以像操作 pod 那样操作自己创建的 resouce。

这篇随笔以发布博文场景为例体验一下 kubernetes 的 CRD,对应的 custom resource 就是 BlogPost。

首先,编写 BlogPost 的 CRD 清单文件 blogpost-crd.yaml,给 BlogPost 定义了3个属性:title, pushishdate, body,从编程角度就是创建了一个 BlogPost 类

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:name: blogposts.kube.zxl.com
spec:group: kube.zxl.comscope: Namespacednames:kind: BlogPostsingular: blogpostplural: blogpostslistKind: BlogPostListversions:- 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: trueschema:openAPIV3Schema:type: objectproperties:spec:type: objectproperties:title:type: stringurl:type: stringpublishdate:type: string body:type: string

编写清单注意事项:

  • metadata.namespec.names.plural + “.” + spec. group 的组合,如果写 blogposts.kube.zxl.com,会包下面的错误 metadata.name: Invalid value: "blogpost.kube.zxl.com": must be spec.names.plural+"."+spec.group
  • scope 有2种,一种是 Cluster,一种是 Namespaced,比如 node 资源的 scope 是 Cluster,pod 资源的 scope 是 Namespaced,Cluster 资源的 url 路径是 /clusters/{cluster}/{plural},Namespaced 资源的 url 路径是 /clusters/{cluster}/namespaces/{namespace}/{plural}
  • 属性不支持日期类型,只支持 “array”, “boolean”, “integer”, “number”, “object”, “string” 五种类型。

然后,基于清单文件创建 CRD

$ kubectl create -f blogpost-crd.yaml
customresourcedefinition.apiextensions.k8s.io/blogposts.kube.zxl.com created

查看已创建的 CRD

kubectl get crd | grep blogposts
blogposts.kube.zxl.com                    2021-03-08T08:28:17Z

接下来基于创建好的 CRD 创建 BlogPost 资源,从编程角度就是 new 一个 BlogPost 对象,从需求角度就是发布一篇博文。

编写清单文件 blogpost-1.yaml

apiVersion: kube.zxl.com/v1
kind: BlogPost
metadata:name: blogpost-1
spec:title: "学亮编程手记title部分"url: "https://www.zxl.com"publishdate: "2021-03-02 16:28"body: "学亮编程手记body部分"

创建资源

$ kubectl create -f blogpost-1.yaml
blogpost.kube.zxl.com/blogpost-1 created

创建成功之后就可以用 kubectl 命令操作 blogposts 资源

列出资源

$ kubectl get blogposts
NAME         AGE
blogpost-1   94s

查看资源

kubectl describe blogposts  blogpost-1

输出如下

kubectl describe blogposts blogpost-1
Name:         blogpost-1
Namespace:    production
Labels:       <none>
Annotations:  <none>
API Version:  kube.zxl.com/v1
Kind:         BlogPost
Metadata:Creation Timestamp:  2021-03-08T09:09:51ZGeneration:          2Managed Fields:API Version:  kube.zxl.com/v1Fields Type:  FieldsV1fieldsV1:f:spec:.:f:body:f:publishdate:f:title:Manager:      kubectl-createOperation:    UpdateTime:         2021-03-08T09:09:51ZAPI Version:  kube.zxl.com/v1Fields Type:  FieldsV1fieldsV1:f:metadata:f:annotations:.:f:kubectl.kubernetes.io/last-applied-configuration:f:spec:f:url:Manager:         kubectl-client-side-applyOperation:       UpdateTime:            2021-03-08T09:16:31ZResource Version:  151288200UID:               75930e48-0c1a-4450-b9ef-e010201b154a
Spec:Body:         学亮编程手记body部分Publishdate:  2021-03-02 16:28Title:        学亮编程手记title部分URL:          https://www.zxl.com
Events:         <none>

体验完毕。

K8S的 Custom Resource Definition(CRD)之初体验相关推荐

  1. k8s自定义controller三部曲之一:创建CRD(Custom Resource Definition)

    k8s系统中controller扮演着重要角色,开发自定义controller是深入学习和理解controller的有效途径,<k8s自定义controller三部曲>系列会逐步完成一次完 ...

  2. 【云原生】Kubernetes CRD 详解(Custom Resource Definition)

    文章目录 一.概述 二.定制资源 1)定制资源 和 定制控制器 2)定制控制器 3)Operator 介绍 1.Operator Framework 2.Operator 安装 3.安装 Operat ...

  3. Custom Resource Definitions Operator

    概念? k8s CRD相关 Custom Resource Definitions https://weread.qq.com/web/reader/9fc329507191463c9fcee6dkd ...

  4. Vue开发异常: Error: custom keyword definition is invalid: data.errors should be boolean

    2019独角兽企业重金招聘Python工程师标准>>> 一. Error: custom keyword definition is invalid: data.errors sho ...

  5. k8s_难产的ingress架构初体验(一)

    在 https://editor.csdn.net/md/?articleId=106170316中跟着github中的说明进行了初体验.但是发现并不是每个模块都会用到. github说明 后端ser ...

  6. Rasa课程、Rasa培训、Rasa面试系列之:Rasa 3.x部署安装初体验

    Rasa课程.Rasa培训.Rasa面试系列之:Rasa 3.x部署安装初体验 Rasa 3.x部署安装 进入Ananconda系统,新建rasa虚拟环境 conda create --name in ...

  7. 从源码深处体验Spring核心技术--IOC容器初体验

    开局经验之谈:可能从这一篇文章开始,小伙伴们都会有点晕车的感觉了,但是这个系列并不是只是介绍下spring表面的一些肤浅的东西,本系列的目的是为了让大家从源码层次深入理解Spring,这也是大家在未来 ...

  8. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  9. 我的Go+语言初体验——(6)整型有理数数据类型

    我的Go+语言初体验--(6)整型有理数数据类型 "我的Go+语言初体验" | 征文活动进行中- Go+ 语言使用后缀 'r' 表示有理数,支持整型.分数型.浮点型三种有理数数据类 ...

最新文章

  1. golang 逐行 读文件
  2. 《移动项目实践》实验报告——Android网络通信
  3. GStreamer基础教程04 - 动态连接Pipeline
  4. 直接插入排序(C语言)实现
  5. Android开发技术周报 Issue#77
  6. 【win32汇编】0x04 第一个窗口程序
  7. Python中参数iterable的意义
  8. 从著名的list_head看linux内核中OO 从Unix分层内核栈以及中断处理看Linux内核的另类
  9. win10桌面不见了如何找到
  10. php图片留白,img底部留白问题的六大解决方法
  11. MySql 删除索引
  12. Vue + Echart 绘制地图区域标记
  13. 【陈工笔记】# 如何用WPS演示给PPT加水印 #
  14. 使用 Packer 自动执行 VMware vsphere 模板
  15. 图像处理方面的一些期刊
  16. 高考成绩四川查询时间2021等位分,2021年艺考时间
  17. JavaScript中split()方法详解
  18. python配色_[转]修改Python IDLE代码配色及语法高亮主题
  19. Android图片素描效果
  20. 常见软件开发模型对比

热门文章

  1. lgg8各个版本_lgg8参数
  2. bai的字怎么写_教师节贺卡祝福语怎么写?教师节贺卡贺词祝福语精简20个字
  3. 决策树c4.5编译,
  4. Windows下安装tensorflow-gpu/cpu教程
  5. 【CV】使用OpenCV搭建违章停车检测系统
  6. 【论文解读】经典CNN对2D3D掌纹及掌静脉识别的性能评估
  7. ACM金牌导师1个月带你一起魔鬼刷爆算法题!
  8. 【面试招聘】聊聊秋招中的面试技巧
  9. 2000 ~2019 年历届 CVPR 最佳论文汇总
  10. 华人包揽CVPR 2019最佳论文,李飞飞ImageNet成就经典