在谈operater之前,我觉得有必要先回顾下k8s资源。k8s中将所有的资源抽象为内存,资源实例化之后称之为对象。资源大体上分为两大块:
1.内资资源类型:
- 工作负载型资源:Pod、Deployment、DeamonSet、ReplicationController(1.11版本后废弃)、ReplicaSet、StatefulSet、Job、CronJob
- 服务发现及负载均衡型资源:Service、Ingress
- 配置与存储型资源:Volume(存储卷)、CSI(容器存储接口,可以扩展各种第三方存储)
- 特殊类型存储卷资源:ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感信息的存储类型)、DownwarAPI(把外部环境中的信息传输给容器)
- 集群型资源:Namespace、Node、Role、ClusterRole、ClusterRoleBinding、RoleBinding
- 元数据型资源:PodTemplate、LimitRange、HPA
- 自定义资源类型(CRD)
自定义资源类型,顾名思义就是定制化的资源类型,是结合自己实际需要自行创造的资源类型。
实际上,组合运用k8s内置资源类型基本能满足我们的需求,那么为何还需要CRD这种资源类型呢?
常言道,存在即合理。k8s内置资源毕竟是已经写好的统一模版,有时候也许并不能很好的满足我们的需求,所以我们才需要CRD这种资源类型。就像你安装nginx的时候,可以使用yum安装,也可以二进制编译安装。