阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何用 Kubernetes 自定义资源?

267次阅读
没有评论

共计 2573 个字符,预计需要花费 7 分钟才能阅读完成。

导读 CRD 的全称为 CustomResourceDefinitions,即自定义资源。k8s 拥有一些内置的资源,比如说 Pod,Deployment,ReplicaSet 等等,而 CRD 则提供了一种方式,使用户可以自定义新的资源,以扩展 k8s 的功能。
什么是 CRD

CRD 的全称为 ​​CustomResourceDefinitions​​,即自定义资源。k8s 拥有一些内置的资源,比如说 Pod,Deployment,ReplicaSet 等等,而 CRD 则提供了一种方式,使用户可以自定义新的资源,以扩展 k8s 的功能。使用 CRD 可以在不修改 k8s 源代码的基础上方便的扩展 k8s 的功能,比如腾讯云 TKE 使用 CRD:​​logcollectors.ccs.cloud.tencent.com​​以添加日志收集服务,而 Istio 也大量使用到了 CRD。值得一提的是,另一种扩展 k8s 的方式是 apiservice,通过 API:metrics.k8s.io 自定义 HPA 是其最典型的应用。可以使用​​kubectl api-resources​​命令查看集群中已定义的资源:

[root@node k8s]# kubectl api-resources 
NAME                              SHORTNAMES   APIGROUP                       NAMESPACED   KIND
configmaps                        cm                                          true         ConfigMap
endpoints                         ep                                          true         Endpoints
events                            ev                                          true         Event
namespaces                        ns                                          false        Namespace
persistentvolumes                 pv                                          false        PersistentVolume
pods                              po                                          true         Pod
podtemplates                                                                  true         PodTemplate
storageclasses                    sc           storage.k8s.io                 false        StorageClass
...

从如上输出中可以略窥一二,CRD 至少包括如下属性:

    NAME:CRD 的复数名称
    SHORTNAMES:cli 中使用的资源简称
    APIGROUP:API 所使用的组名称
    NAMESPACED:是否具有 namespace 属性
    KIND:资源文件需要,用以识别资源​

另外,CRD 提供了定义资源的方式,不过想要让其具有实际意义还需控制器的配合。k8s 的​​kube-controller-manager​​组件提供了多种内置控制器,比如说:​​cronjob​​,​​daemonset​​,​​deployment​​,​​namespace​​等等,它们监听资源的创建 / 更新 / 删除,且做出相应的动作。而对于 CRD 来说,也可以编写相应的控制器来完成对应的功能。

CRD 使用

在 k8s 中 CRD 本身也是资源,大于 1.7.0 版本的集群可以使用​​apiextensions.k8s.io/v1beta1API​​访问 CRD,大于 1.16.0 版本则可以使用​​apiextensions.k8s.io/v1API​​。

创建 CRD

CRD 资源文件示例:

# crd-test.yml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  # 名称必须符合如下格式:.
  name: crontabs.staight.k8s.io
spec:
  # 组名,表示使用该 API: /apis//
  group: staight.k8s.io
  # version 列表,表示该 CRD 支持的版本
  versions:
    - name: v1
      # 开启 / 关闭该 API
      served: true
      # 有且只能有一个版本要将 storage 设置为 true
      storage: true
  # Namespaced/Cluster,表示该 CRD 是命令空间属性还是集群属性
  scope: Namespaced
  names:
    # API 中使用的名称:/apis///
    plural: crontabs
    # 单数名称,cli 中使用
    singular: crontab
    # 往往是首字母大写的单数名称,资源文件中需要用到
    kind: CronTab
    # cli 中的简称
    shortNames:
    - ct
  # 阻止无法识别的字段,集群版本 1.15 以上才可使用
  preserveUnknownFields: false
  # 创建资源文件时需验证的字段
  validation:
    openAPIV3Schema:
      type: object
      properties:
        spec:
          type: object
          properties:
            cronSpec:
              type: string
            image:
              type: string
            replicas:
              type: integer

然后创建该 CRD:

[root@node k8s]# kubectl create -f crd-test.yml 
customresourcedefinition.apiextensions.k8s.io/crontabs.staight.k8s.io created

接着就能查到该 CRD:

[root@node k8s]# kubectl get crd crontabs.staight.k8s.io
NAME                      CREATED AT
crontabs.staight.k8s.io   2019-10-08T10:21:09Z

CRD 创建完成。可以通过 URL:https://169.254.128.15:60002/apis/staight.k8s.io/v1/namespaces/default/crontabs 访问到 crontab 资源。

创建自定义对象

在创建 CRD 之后,即可创建其资源的对象了。资源文件示例:

# crontab.yml
apiVersion: "staight.k8s.io/v1"
kind: CronTab
metadata:
  name: new-crontab
spec:
  cronSpec: "* * * * *"
  image: new-image

接着即可看到该对象:

[root@node k8s]# kubectl get crontab
NAME          AGE
new-crontab   28s
小结

CRD 用来自定义资源,是扩展 k8s 最常用的方式。
只创建 CRD 并没有实际意义,想要 CRD 工作还需创建控制器,监听资源变动并做出相应动作。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2573字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7806926
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的Nano Banana Pro?附赠邪修的用法

如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...