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'

创建成功

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

相关推荐
季春二九4 小时前
解决 Docker 容器镜像拉取难题:全面指南
运维·docker·容器
^_^ 纵歌4 小时前
virtualbox和docker的区别和优缺点以及如何选择
运维·docker·容器
march of Time7 小时前
docker容器技术、k8s的原理和常见命令、用k8s部署应用步骤
docker·容器·kubernetes
板栗妖怪7 小时前
docker安装以及简单使用
docker·容器
乐之者v7 小时前
k8s 常用的命令
云原生·容器·kubernetes
蝎子莱莱爱打怪9 小时前
docker 重要且常用命令大全
java·spring cloud·docker·容器·eureka
小杰6669 小时前
安装docker版rabbitmq 3.12
docker·容器·rabbitmq
hay_lee11 小时前
K8S集群应用国产信创适配实战经验总结
云原生
明明跟你说过12 小时前
【云原生】服务网格(Istio)如何简化微服务通信
运维·微服务·云原生·容器·kubernetes·k8s·istio
Akamai中国13 小时前
Akamai+Noname强强联合 | API安全再加强
分布式·云原生·云计算·云服务·akamai