k8s自定义资源你会创建吗

创建自定义资源定义 CustomResourceDefinition

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

总结:

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

  • 集群
  • 命名空间

自定义资源 yaml详细格式

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 创建资源

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的自己的命名规范),所以修改一下

yaml 复制代码
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里面的名字是空的?修改一下

yaml 复制代码
apiVersion: transport.io/v1
kind: Package
metadata:
  name: 'test-package'
name: '123'

创建成功

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

相关推荐
Candice_jy4 小时前
vscode运行ipynb文件:使用docker中的虚拟环境
服务器·ide·vscode·python·docker·容器·编辑器
CS创新实验室5 小时前
从穿孔卡片到云原生:批处理系统的不朽演进与核心思想
云原生·操作系统·批处理
檐下翻书1736 小时前
Spring Boot 深度剖析:从虚拟线程到声明式 HTTP 客户端,再到云原生最优解
spring boot·http·云原生
roman_日积跬步-终至千里6 小时前
【Docker下部署高可用】StarRocks 存算一体架构高可用部署要点
docker·容器·架构
zmjjdank1ng6 小时前
k8s问答题(二)
云原生·容器·kubernetes
卡奥斯开源社区官方7 小时前
2025 实战指南:WebAssembly 重塑云原生开发 —— 从前端加速到后端革命的全栈落地
前端·云原生·wasm
万博智云OneProCloud7 小时前
SmartX 联合万博智云发布云原生异构容灾解决方案白皮书(附下载)
云原生·云容灾·hyperbdr云容灾·灾备系统
ABdolphin17 小时前
Spring-cloud 主键Eureka
java·云原生·eureka
小坏讲微服务17 小时前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s
Aimyon_3618 小时前
MinerU Docker自定义版本部署
运维·docker·容器