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

Loading

Facebook评论