赞
踩
当你创建新的 CustomResourceDefinition(CRD)时,Kubernetes API 服务器会为你所 指定的每一个版本生成一个 RESTful 的 资源路径。CRD 可以是名字空间作用域的,也可以是集群作用域的,取决于 CRD 的 scope 字段设置。和其他现有的内置对象一样,删除 一个名字空间时,该名字空间下的所有定制对象也会被删除。CustomResourceDefinition 本身是不受名字空间限制的,对所有名字空间可用。
总结:
自定义资源会有不同的作用域,当创建时会有不同的rest资源路径
# 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
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'
自此一个自定义资源就创建成功了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。