如何使用crd

CRD

CRD是一个内建的API, 它提供了一个简单的方式来创建自定义资源。 部署一个CRD到集群中使Kubernetes API服务端开始为你指定的自定义资源服务。

这使你不必再编写自己的API服务端来处理自定义资源,但是这种实现的一般性意味着比你使用API server aggregation缺乏灵活性。

如果只是想添加资源到集群,可以考虑使用 customer resource define,简称CRD,CRD需要更少的编码和重用, 在这里阅读更多有关自定义资源和扩展api之间的差异

创建CRD

cat > EOF | kubectl create -f 
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: podtoips.example.com
spec:
  group: example.com
  version: v1
  scope: Namespaced
  names:
    plural: podtoips
    singular: podtoip
    kind: Podtoip
    shortNames:
    - ptp
EOF

controller逻辑

controller 一般会有 1 个或者多个 informer,来跟踪某一个 resource, 跟 APIserver 保持通讯,把最新的状态反映到本地的 cache 中。 只要这些资源有变化,informal 会调用 callback。 这些 callbacks 只是做一些非常简单的预处理,把不关心的的变化过滤掉, 然后把关心的变更的 Object 放到 workqueue 里面。 其实真正的 business logic 都是在 worker 里面, 一般 1 个 Controller 会启动很多 goroutines 跑 Workers, 处理 workqueue 里的 items。它会计算用户想要达到的状态和当前的状态有多大的区别, 然后通过 clients 向 APIserver 发送请求,来驱动这个集群向用户要求的状态演化。 图里面蓝色的是 client-go 的原件,红色是自己写 controller 时填的代码

controller

下面是我实现的一个简单的 poptoip controller

Last updated

Was this helpful?