Kubernetes CRD(Custom Resource Definition
Kubernetes CRD(Custom Resource Definition)k8s中默认的有几类资源,Deploment、StatefulSet、Service、CronJob等等。k8s为了让用户拥有完全的定制化需求,它允许用户制造一个自己想要的资源类型。这一概念就是CRD(Custom Resource Definition)。我们不需要修改原有的API源码就能实现,该功能大大地提高了
Kubernetes CRD(Custom Resource Definition)
k8s中默认的有几类资源,Deploment、StatefulSet、Service、CronJob等等。k8s为了让用户拥有完全的定制化需求,它允许用户制造一个自己想要的资源类型。这一概念就是CRD(Custom Resource Definition)。我们不需要修改原有的API源码就能实现,该功能大大地提高了k8s的可扩展能力。
当一个新的自定义CRD创建时,k8s api服务器将为你指定的每一个版本创建一个新的Restful资源路径,我们可以根据该api路径来创建一些我们自定义的类型资源。CRD可以是集群级别的,也可以是namespace级别的。
以下是一个新的资源定义yaml。
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
# name must match the spec fields below, and be in the form: <plural>.<group>
name: crontabs.stable.example.com
spec:
# group name to use for REST API: /apis/<group>/<version>
group: stable.example.com
# list of versions supported by this CustomResourceDefinition
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:
cronSpec:
type: string
image:
type: string
replicas:
type: integer
# either Namespaced or Cluster
scope: Namespaced
names:
# plural name to be used in the URL: /apis/<group>/<version>/<plural>
plural: crontabs
# singular name to be used as an alias on the CLI and for display
singular: crontab
# kind is normally the CamelCased singular type. Your resource manifests use this.
kind: CronTab
# shortNames allow shorter string to match your resource on the CLI
shortNames:
- ct
上面是定义了一个CronTab类型的资源,scope: Namespaced代表是命名空间级别的。
在k8s中生成这种新资源的声明:
kubectl apply -f resourcedefinition.yaml
创建 一个CronTab资源:
apiVersion: "stable.example.com/v1"
kind: CronTab
metadata:
name: my-new-cron-object
spec:
cronSpec: "* * * * */5"
image: my-awesome-cron-image
参考文档: Extend the Kubernetes API with CustomResourceDefinitions | Kubernetes
CRD让某个属性兼容所有自定义结构体struct
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
# 名字必需与下面的 spec 字段匹配,并且格式为 '<名称的复数形式>.<组名>'
name: crontabs.stable.example.com
scope: Cluster
names:
# 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>
plural: crontabs
# 名称的单数形式,作为命令行使用时和显示时的别名
singular: crontab
spec:
# 组名称,用于 REST API: /apis/<组>/<版本>
group: stable.example.com
# 列举此 CustomResourceDefinition 所支持的版本
versions:
-name: v1
schema:
openAPlV3Schema:
properties:
apiVersion:
type: string
kind:
type: string
metadata:
type: object
spec:
type: object
x-kubernetes-preserve-unknown-fields: true
type: object
served: true
storage: true
更多推荐
所有评论(0)