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: integer2. 检查创建的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
 