首页 > 大数据 > 数据挖掘 > 如何用 Kubernetes 自定义资源?
CustomResourceDefinitions
,即自定义资源。k8s拥有一些内置的资源,比如说Pod,Deployment,ReplicaSet等等,而CRD则提供了一种方式,使用户可以自定义新的资源,以扩展k8s的功能。
logcollectors.ccs.cloud.tencent.com
以添加日志收集服务,而Istio也大量使用到了CRD。
kubectl api-resources
命令查看集群中已定义的资源:[root@node k8s]# kubectl api-resources NAME SHORTNAMES APIGROUP NAMESPACED KINDconfigmaps cm true ConfigMapendpoints ep true Endpointsevents ev true Eventnamespaces ns false Namespacepersistentvolumes pv false PersistentVolumepods po true Podpodtemplates true PodTemplatestorageclasses sc storage.k8s.io false StorageClass...
kube-controller-manager
组件提供了多种内置控制器,比如说:
cronjob
,
daemonset
,
deployment
,
namespace
等等,它们监听资源的创建/更新/删除,且做出相应的动作。而对于CRD来说,也可以编写相应的控制器来完成对应的功能。
apiextensions.k8s.io/v1beta1API
访问CRD,大于1.16.0版本则可以使用
apiextensions.k8s.io/v1API
。CRD资源文件示例:
# crd-test.ymlapiVersion: apiextensions.k8s.io/v1beta1kind: CustomResourceDefinitionmetadata: # 名称必须符合如下格式:<plural>.<group> name: crontabs.staight.k8s.iospec: # 组名,表示使用该API: /apis/<group>/<version> group: staight.k8s.io # version列表,表示该CRD支持的版本 versions: - name: v1 # 开启/关闭该API served: true # 有且只能有一个版本要将storage设置为true storage: true # Namespaced/Cluster,表示该CRD是命令空间属性还是集群属性 scope: Namespaced names: # API中使用的名称:/apis/<group>/<version>/<plural> plural: crontabs # 单数名称,cli中使用 singular: crontab # 往往是首字母大写的单数名称,资源文件中需要用到 kind: CronTab # cli中的简称 shortNames: - ct # 阻止无法识别的字段,集群版本1.15以上才可使用 preserveUnknownFields: false # 创建资源文件时需验证的字段 validation: openAPIV3Schema: type: object properties: spec: type: object properties: cronSpec: type: string image: type: string replicas: type: integer
然后创建该CRD:
[root@node k8s]# kubectl create -f crd-test.yml customresourcedefinition.apiextensions.k8s.io/crontabs.staight.k8s.io created
接着就能查到该CRD:
[root@node k8s]# kubectl get crd crontabs.staight.k8s.ioNAME CREATED ATcrontabs.staight.k8s.io 2019-10-08T10:21:09Z
CRD创建完成。可以通过URL: https://169.254.128.15:60002/apis/staight.k8s.io/v1/namespaces/default/crontabs访问到crontab资源。
# crontab.ymlapiVersion: "staight.k8s.io/v1"kind: CronTabmetadata: name: new-crontabspec: cronSpec: "* * * * *" image: new-image
注意spec中的字段应符合CRD的要求,创建它:
[root@node k8s]# kubectl create -f crontab.yml crontab.staight.k8s.io/new-crontab created
接着即可看到该对象:
[root@node k8s]# kubectl get crontabNAME AGEnew-crontab 28s
CRD用来自定义资源,是扩展k8s最常用的方式。
只创建CRD并没有实际意义,想要CRD工作还需创建控制器,监听资源变动并做出相应动作。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013542/viewspace-2913555/ ,如需转载,请注明出处,否则将追究法律责任。