zoukankan      html  css  js  c++  java
  • 初步体验 Kubernetes 的 Custom Resource Definition

    CRD(Custom Resource Definition) 是 kubernetes 强大扩展能力的一处体现,联系到编程场景,CRD 相当于是类(class),custom resource 相当于是对象或者实例,通过 CRD 可以创建自己定义的资源类型,api server 会直接支持,可以通过 kubectl 命令创建对应的资源并对资源进行删/查/改的操作,资源对象会被保存在 etcd 中,可以像操作 pod 那样操作自己创建的 resouce。

    这篇随笔以发布博文场景为例体验一下 kubernetes 的 CRD,对应的 custom resource 就是 BlogPost。

    首先,编写 BlogPost 的 CRD 清单文件 blogpost-crd.yaml,给 BlogPost 定义了3个属性:title, pushishdate, body,从编程角度就是创建了一个 BlogPost 类

    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: blogposts.kube.cnblogs.com
    spec:
      group: kube.cnblogs.com
      scope: Namespaced
      names:
        kind: BlogPost
        singular: blogpost
        plural: blogposts
        listKind: BlogPostList
      versions:
      - name: v1
        # Each version can be enabled/disabled by Served flag.
        served: true
        # One and only one version must be marked as the storage version.
        storage: true
        schema:
          openAPIV3Schema:
            type: object
            properties:
              spec:
                type: object
                properties:
                  title:
                    type: string
                  url:
                    type: string
                  publishdate:
                     type: string 
                  body:
                    type: string
    

    编写清单注意事项:

    • metadata.namespec.names.plural + "." + spec. group 的组合,如果写 blogposts.kube.cnblogs.com,会包下面的错误 metadata.name: Invalid value: "blogpost.kube.cnblogs.com": must be spec.names.plural+"."+spec.group
    • scope 有2种,一种是 Cluster,一种是 Namespaced,比如 node 资源的 scope 是 Cluster,pod 资源的 scope 是 Namespaced,Cluster 资源的 url 路径是 /clusters/{cluster}/{plural},Namespaced 资源的 url 路径是 /clusters/{cluster}/namespaces/{namespace}/{plural}
    • 属性不支持日期类型,只支持 "array", "boolean", "integer", "number", "object", "string" 五种类型。

    然后,基于清单文件创建 CRD

    $ kubectl create -f blogpost-crd.yaml
    customresourcedefinition.apiextensions.k8s.io/blogposts.kube.cnblogs.com created
    

    查看已创建的 CRD

    kubectl get crd | grep blogposts
    blogposts.kube.cnblogs.com                    2021-03-08T08:28:17Z
    

    接下来基于创建好的 CRD 创建 BlogPost 资源,从编程角度就是 new 一个 BlogPost 对象,从需求角度就是发布一篇博文。

    编写清单文件 blogpost-1.yaml

    apiVersion: kube.cnblogs.com/v1
    kind: BlogPost
    metadata:
      name: blogpost-1
    spec:
      title: "助园一臂之力:发布博客园赞助者计划"
      url: "https://www.cnblogs.com/cmt/p/14469606.html"
      publishdate: "2021-03-02 16:28"
      body: "大家好,今年园子正在加快建设的步伐,我们将全面提升产品的用户体验,我们将做一些有趣的产品功能,我们将以云为中心探索商业化道路。。。我们将挖掘出技术社区发展的康庄大道。"
    

    创建资源

    $ kubectl create -f blogpost-1.yaml 
    blogpost.kube.cnblogs.com/blogpost-1 created
    

    创建成功之后就可以用 kubectl 命令操作 blogposts 资源

    列出资源

    $ kubectl get blogposts
    NAME         AGE
    blogpost-1   94s
    

    查看资源

    kubectl describe blogposts  blogpost-1
    

    输出如下

    kubectl describe blogposts blogpost-1 
    Name:         blogpost-1
    Namespace:    production
    Labels:       <none>
    Annotations:  <none>
    API Version:  kube.cnblogs.com/v1
    Kind:         BlogPost
    Metadata:
      Creation Timestamp:  2021-03-08T09:09:51Z
      Generation:          2
      Managed Fields:
        API Version:  kube.cnblogs.com/v1
        Fields Type:  FieldsV1
        fieldsV1:
          f:spec:
            .:
            f:body:
            f:publishdate:
            f:title:
        Manager:      kubectl-create
        Operation:    Update
        Time:         2021-03-08T09:09:51Z
        API Version:  kube.cnblogs.com/v1
        Fields Type:  FieldsV1
        fieldsV1:
          f:metadata:
            f:annotations:
              .:
              f:kubectl.kubernetes.io/last-applied-configuration:
          f:spec:
            f:url:
        Manager:         kubectl-client-side-apply
        Operation:       Update
        Time:            2021-03-08T09:16:31Z
      Resource Version:  151288200
      UID:               75930e48-0c1a-4450-b9ef-e010201b154a
    Spec:
      Body:         大家好,今年园子正在加快建设的步伐,我们将全面提升产品的用户体验,我们将做一些有趣的产品功能,我们将以云为中心探索商业化道路。。。我们将挖掘出技术社区发展的康庄大道。
      Publishdate:  2021-03-02 16:28
      Title:        助园一臂之力:发布博客园赞助者计划
      URL:          https://www.cnblogs.com/cmt/p/14469606.html
    Events:         <none>
    

    体验完毕。

    参考资料
  • 相关阅读:
    Pascal's Triangle II
    Pascal's Triangle
    Path Sum II
    Path Sum
    plusOne
    Divide Two Integers
    64. ZigZag Conversion
    63. Swap Nodes in Pairs && Rotate List && Remove Nth Node From End of List
    62. Divide Two Integers
    61. Unique Paths && Unique Paths II
  • 原文地址:https://www.cnblogs.com/dudu/p/14494823.html
Copyright © 2011-2022 走看看