CKA [Networking] – CRD的讲解
Kubenetes在默认的时候只有Pod , Deployment, ConfigMaps等等,但是如果你想添加自己的组件比如Database组件也是可以的,所以就需要自己创建CRD(CustomResourceDefinition)

以下是我的Kubernetes Cluster所安装的CRD

如果你的Kubernetes Cluster 默认来是没有安装任何的CRD的,那么就是有如下的报错。

查看CRD的方法
1.查看ingressclassparams的crd,并且获取kind

2. 从kind当中获取当下所有创建的资源, 当下的ingressclassparams只有一个创建的资源,也就是default-alb-params
kubectl get ingressclassparams -A

创建CRD教程
以下的教程是我们自己demo创建一个自定义的CRD
1. 创建CRD
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: databases.kiatlabs.internal
spec:
group: kiatlabs.internal
names:
kind: Database
listKind: DatabaseList
plural: databases
singular: database
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
name:
type: string
replicas:
type: integer
2. 检查创建的CRD
【查看刚刚创建好的CRD】
kubectl get crd
【查看api resources】
kubectl api-resources


3.使用已经创建好的CRD来创建资源
apiVersion: kiatlabs.internal/v1
kind: Database
metadata:
name: my-database
spec:
name: test-db
replicas: 3
以下是查看的命令

4. 删除已经创建的资源 , 这个命令是删除CRD的,当执行这个命令的话,也会顺便删除使用这个CRD所创建的资源。
kubectl delete crd databases.kiatlabs.internal
讲解
根据以上的教程,使用CRD创建数据库并不会真正创建一个数据库,因为你还需要自己创建一个controller, controller去监听database资源,从而创建数据库。

Helm Install 需要 skip 安装CRD
为什么使用helm install 插件的时候需要skip crd?
1. 防止重复安装出错
插件可能已经在别的环境或之前的 Helm 安装中安装过 CRD。
Error: customresourcedefinitions.apiextensions.k8s.io "..." already exists
使用 --skip-crds
可以跳过 CRD 安装避免这类冲突。
2. 允许手动控制 CRD 安装版本
- 插件的 CRD 定义有时会变更 schema,如果你不小心升级 Helm chart 会导致资源失效。
- 所以插件文档经常建议:手动先安装 CRD,再用 Helm 安装主 chart 并加
--skip-crds
,这样更安全、可控。
3. 有些插件使用官方的–skip-crds 是无法skip的,比如安装argocd, 我们去到argocd的helm目录当中有写到想要skip安装crds的话需要添加--set crds.install=false
https://artifacthub.io/packages/helm/argo/argo-cd
