本文目的是使用statefulset部署3节点的etcd集群
一。准备双AZ 4节点的集群
构建集群参考另一篇帖子CentOS7安装k8s v1.23.4集群
k8s-node1,k8s-node2打上标签topology.kubernetes.io/zone=az1,表示AZ1;
k8s-node3,k8s-node4打上标签topology.kubernetes.io/zone=az2,表示AZ2;
二。构建etcd v3.5.4镜像
自行构建docker镜像,从etcd官网下载etcd-v3.5.4-linux-amd64.tar.gz并解压,
Dockerfile配置:
FROM centos:7
USER root
ADD etcd-v3.5.4-linux-amd64/etcd* /usr/bin/
COPY etcd.sh /
RUN chmod 777 /etcd.sh
RUN chmod 777 /usr/bin/etcd
CMD ["/etcd.sh"]
容器启动脚本etcd.sh,环境变量由pod注入,见statefulset中的配置
#!/bin/bash
echo ${MY_POD_NAME}
echo ${MY_POD_IP}
echo ${HEADLESS_SERVICE_NAME}
echo ${CLUSTER_NAMESPACE}
echo ${INITIAL_CLUSTER}
/usr/bin/etcd --data-dir=/var/lib/etcd --name=${MY_POD_NAME} --listen-peer-urls=http://0.0.0.0:2380 --listen-client-urls=http://0.0.0.0:2379 --advertise-client-urls=http://${MY_POD_NAME}.${HEADLESS_SERVICE_NAME}.${CLUSTER_NAMESPACE}.svc.cluster.local:2379 --initial-advertise-peer-urls=http://${MY_POD_NAME}.${HEADLESS_SERVICE_NAME}.${CLUSTER_NAMESPACE}.svc.cluster.local:2380 --initial-cluster-state='new' --initial-cluster-token='etcd-cluster-token' --initial-cluster=${INITIAL_CLUSTER}
构建镜像并推送到阿里个人镜像仓库
也可直接docker pull registry.cn-shenzhen.aliyuncs.com/k8s_go_java/etcd:v1