CRD

CRD的作用只是在K8S里注册资源类型,使K8S可以识别我们自定义的资源类型,简称GVK(每个资源类型都有group-version-kind对应),比如在YAML中经常申明的类型 KIND: Deployment

比如下面命令列出的的Deployment就是一个K8S的资源类型,对应的GVK关系是

Group: apps Version: v1 Kind: Deployment

[root@jumpserver ~]# kubectl api-resources 
NAME                                       SHORTNAMES   APIGROUP                       NAMESPACED   KIND
deployments                                deploy       apps                           true         Deployment
....

CRD的作用非常有限,只是将自定义资源类型注册到了K8S中。可以使用kubect api-resources查看。

比如此处我们注册了一个资源类型, group是dtkapps,v是v1,kind是snapshot。
这个时候我们通过yaml创建KINS: snapshot的资源时,可以正常创建。但是不会有实际动作(比如创建pod),我们想要实现自定的动作,需要再编写controller来实现自定义逻辑


[root@jumpserver ~]# kubectl api-resources  | grep -i snapshot
snapshotrollbacks                                       dtkapps.itgod.org              true         SnapshotRollback
snapshots                                               dtkapps.itgod.org              true         Snapshot

控制器

三种自定义控制器类型

基础控制器

一般用于监听GVK的变化,再异步进行一些额外的逻辑操作(并不能干预原始请求)

应用场景:

比如希望Deployment变化的时候,将Deployment的image记录到数据库中, 或则自动创建一个svc关联这个deployment中的pod

变异控制器

可以干扰请求,对请求进行修改。

应用场景:

比如我希望Pod在被创建或者更新的时候,在pod里面自动加入一个env变量

准入控制器

可以决定这个请求是否被执行

应用场景:

比如我希望pod在被创建的时候,比如包含某个env变量。如果不包含则拒绝创建

Copyright © 运维知识库 all right reserved,powered by Gitbook文件修订时间: 2023-09-19 10:45:38

results matching ""

    No results matching ""