k8s etcd operator
k8s v1.15.0
在k8s生态中,Operator是灵活管理有状态应用的解决方案。
operator通过crd来描述部署的有状态应用和自定义控制器来完成部署和运维工作。
EtcdOperator部署Etcd集群,采用的是静态集群的方式。好处是不必依赖一个额外的服务发现机制来组建集群,适合本地容器化部署。难点在于部署时规划好集群的拓扑结构,知道IP地址。
git clone https://github.com/coreos/etcd-operator
cd etcd-operator
bash example/rbac/create_role.sh
kubectl create -f example/deployment.yaml
kubectl apply -f example/example-etcd-cluster.yaml
有1个etcd-operator Pod和3个etcd Pod构成的etcd集群(省略备份和恢复operator)
Etcd Operator里为什么使用随机名字,而不是有状态应用Pod名字-0/-1?
EtcdOperator在每次添加Etcd节点时,执行etcdctl member add <Pod名字>;每次删除节点时,执行etcdctl member remove <Pod名字>。这些操作会更新Etcd内部维护的拓扑信息,所以EtcdOperator无需在集群外部通过有状态应用编号来固定这个拓扑关系。
原理上,operator和自定义控制器等价。
Operator和StatefulSet不是竞争关系。可以在Operator的控制循环里创建和控制StatefulSet而不是Pod。业界知名的Prometheus项目的Operator就是这么实现的。
参考资料
《深入剖析Kubernetes》