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'

创建成功

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

相关推荐
蝎子莱莱爱打怪11 小时前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
阿里云云原生4 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生
蝎子莱莱爱打怪4 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀4 天前
Docker部署Nacos
docker·容器
缓解AI焦虑4 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
阿里云云原生4 天前
MSE Nacos Prompt 管理:让 AI Agent 的核心配置真正可治理
微服务·云原生
阿里云云原生4 天前
当 AI Agent 接管手机:移动端如何进行观测
云原生·agent
阿里云云原生4 天前
AI 原生应用开源开发者沙龙·深圳站精彩回顾 & PPT下载
云原生
阿里云云原生4 天前
灵感启发:日产文章 100 篇,打造“实时热点洞察”引擎
云原生
1candobetter4 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka