创建自定义API对象(CRD:Custom Resource Definition)
名Installment
- 通过官方文档了解CRD的定义:
https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#create-a-customresourcedefinition - 创建自己CRD, install.yaml 其内容如下:
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
# metadata.name的内容是由"复数名.分组名"构成,如下,installments是复数名,uihcloud.cn是分组名
name: installments.uihcloud.cn
spec:
# 分组名,在REST API中也会用到的,格式是: /apis/分组名/CRD版本
group: uihcloud.cn
# list of versions supported by this CustomResourceDefinition
versions:
- name: v1
# 是否有效的开关.
served: true
# 只有一个版本能被标注为storage
storage: true
# 范围是属于namespace的
scope: Namespaced
names:
# 复数名
plural: installments
# 单数名
singular: installment
# 类型名
kind: Installment
# 简称,就像service的简称是svc
shortNames:
- inst
- 将CRD 写入k8s 的存储,并查看创建的 crd
kubectl apply -f install.yaml
kubectl get crd
kubectl describe crd inst
- 创建Installmens 的自定义对象 cgs-installer.yaml
apiVersion: uihcloud.cn/v1
kind: Installment
metadata:
name: cgs-installer
spec:
name: "cgs"
chart_path: "http://chartrepos/cgs-1.0.tgz"
image_path: "http://chartrepos/cgs.tar"
- 将Installmens 对象写入k8s 的存储,并查看
kubectl apply -f cgs-installer.yaml
kubectl get inst
kubectl get inst -o yaml
至此,k8s自定资源(也就是CRD)就创建成功了,此刻我们只是让k8s能识别到Installment,但是当我们创建Installment对象的时候,只是做了存储,还没有触发任何逻辑操作(比如内建资源创建Pod对象的时候,会触发选择节点,并在节点创建容器),这就是后面对应的controller的要做事情。