k8s自定义资源你会创建吗

创建自定义资源定义 CustomResourceDefinition

当你创建新的 CustomResourceDefinition(CRD)时,Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的,也可以是集群作用域的,取决于 CRD 的 scope 字段设置。和其他现有的内置对象一样,删除 一个名字空间时,该名字空间下的所有定制对象也会被删除。CustomResourceDefinition 本身是不受名字空间限制的,对所有名字空间可用。

总结:
自定义资源会有不同的作用域,当创建时会有不同的rest资源路径

  • 集群
  • 命名空间

自定义资源 yaml详细格式

# apiextensions.k8s.io/v1 是 Kubernetes API 的一个组和版本,它与自定义资源定义(Custom Resource Definitions, CRDs)相关。CRDs 允许用户在 Kubernetes 集群中定义和使用他们自己的资源类型,这是 Kubernetes 扩展性的一个关键特性。
# apiextensions.k8s.io 是 API 组(API group),它标识了一组相关的 API 对象。v1 表示这个组内的 API 版本。在 Kubernetes 中,API 版本控制非常重要,它确保了向后兼容性或明确了不兼容的更改。
# 从 Kubernetes 的某个版本开始(通常是较新版本,比如 v1.16 之后),apiextensions.k8s.io/v1beta1 被 apiextensions.k8s.io/v1 所取代,后者成为稳定版本的 API。这意味着在创建或更新 CRDs 时,应使用 v1 版本以确保与新版本 Kubernetes 的兼容性。
# 总之,当你看到 apiextensions.k8s.io/v1,这通常意味着你正在处理与 Kubernetes 自定义资源定义相关的API调用或配置。
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
   # 名字必需与下面的 spec 字段匹配,并且格式为 '<名称的复数形式>.<组名>'
  name: packages.transport.io
spec:
  group: transport.io
  # 可以是 Namespaced 或 Cluster,该API的生效范围,可选项为Namespaced(由Namespace限定)和Cluster(在集群范围全局生效,不局限于任何Namespace),默认值为Namespaced
  scope: Namespaced
  names: 
    # kind 通常是单数形式的驼峰编码(CamelCased)形式。你的资源清单会使用这一形式
    kind: Package
    #CRD列表,默认被设置为<kind>List格式
    listKind: PackageList
    # 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>要求全部小写
    plural: packages
    # 名称的单数形式,作为命令行使用时和显示时的别名,要求全部小写
    singular: package
    # shortNames 允许你在命令行使用较短的字符串来匹配资源,要求全部小写
    shortNames:
      - pkg
    # CRD所属的资源组列表。例如,Package属于 test-io组和test-network-io组,用户通过查询test-network-io组和test-io组,也可以查询到该CRD实例
    categories:
      - test-io
      - test-network-io
  versions:
   # 固定格式 
   #  - name: v1
   #    served: true
   #    storage: true
   #    schema:
   #      openAPIV3Schema:
   #        description: Package Think of these as function-level images.
   #        properties:
    - name: v1
      # 必填项 每个版本都可以通过 served 标志来独立启用或禁止
      served: true
      #必填项 其中一个且只有一个版本必需被标记为存储版本
      storage: true
      schema:
         openAPIV3Schema:
           description: Package Think of these as function-level images.
           properties:
             # 属性名
             name: 
               description: 描述
               type: string 
           # 上面的属性必填项
           required:
            - name  
           type: object   

yaml 创建资源

apiVersion: transport.io/v1
kind: Package
spec: 
  name: '123'

这样报错了 error: error validating “b.yaml”: error validating data: [ValidationError(Package): unknown field “spec” in io.transport.v1.Package, ValidationError(Package): missing required field “name” in io.transport.v1.Package]; if you choose to ignore these errors, turn validation off with --validate=false
这个意思是说 我的name属性 是必须的 但是没发现name属性 ,这个由于我没有声明spec属性(这个貌似是k8s的自己的命名规范),所以修改一下

apiVersion: transport.io/v1
kind: Package
name: '123'

这样还是报错了 error: error when retrieving current configuration of:
Resource: “transport.io/v1, Resource=packages”, GroupVersionKind: “transport.io/v1, Kind=Package”
Name: “”, Namespace: “default”
from server for: “b.yaml”: resource name may not be empty
这个意思是说资源名是空的?难道是metadata里面的名字是空的?修改一下

apiVersion: transport.io/v1
kind: Package
metadata:
  name: 'test-package'
name: '123'

创建成功

image.png
自此一个自定义资源就创建成功了

相关推荐

  1. K8s: Kubernetes扩展之定义资源

    2024-06-05 19:36:46       31 阅读
  2. k8s Helm3详解 (部署,定义,仓库,)

    2024-06-05 19:36:46       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-05 19:36:46       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-05 19:36:46       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-05 19:36:46       87 阅读
  4. Python语言-面向对象

    2024-06-05 19:36:46       96 阅读

热门阅读

  1. Shell 编程之免交互

    2024-06-05 19:36:46       32 阅读
  2. SQL注入的危害和原理

    2024-06-05 19:36:46       32 阅读
  3. 达梦数据库的锁介绍

    2024-06-05 19:36:46       31 阅读
  4. Python中的None用法深度解析

    2024-06-05 19:36:46       35 阅读
  5. C++的算法:贪心算法

    2024-06-05 19:36:46       27 阅读
  6. mysql中的函数

    2024-06-05 19:36:46       30 阅读
  7. 前端-Vue组件key的作用

    2024-06-05 19:36:46       28 阅读
  8. Go 延迟调用机制

    2024-06-05 19:36:46       28 阅读