kubeadm 线上集群部署(一) 外部 ETCD 集群搭建

时间:2022-12-22 14:11:41
 
IP Hostname  
192.168.1.23 k8s-etcd-01 etcd集群节点,默认关于ETCD所有操作均在此节点上操作
192.168.1.24 k8s-etcd-02 etcd集群节点
192.168.1.25 k8s-etcd-03 etcd集群节点
192.168.1.27 k8s-master-01 Work Master集群节点,默认关于k8s所有操作均在此节点上操作
192.168.1.28 k8s-master-02 Work Master集群节点
192.168.1.29 k8s-master-03 Work Master集群节点
192.168.1.30 k8s-node-01 Work Node 节点

 

介绍: Kubeadm集成了关于k8s部署的所有功能,在这里要强调的是,Kubeadm只负责安装和部署组件,不会参与其他服务的部署,比如有人以为可以用kubeadm安装nginx,这是k8s内部干的事情,和他没关系,在实际的生产环境过程当中,如果我们不熟悉每个组件的工作原理,那么我们将很难开展工作,比如排查故障,系统升级等。

首先,我们知道ETCD的安装在通信过程中可以使用http也可以使用https(默认),在作为基础设施的一部分,为安全考虑着想,一般线上都是使用的https,通过证书的方式进行加密通信,所以本次ETCD部署也会使用后者。

 

首先证书方面;

kubeadm集成了有关etcd和k8s所有证书的生成,如果你想生成的证书年限长一点通常可以直接修改源码重新编译打包成二进制文件,然后保存在你自己的文件里即可,这里推荐一篇别人写的.

证书期限修改 https://blog.51cto.com/lvsir666/2344986?source=dra

 

kubeadm创建证书的命令

kubeadm init phase certs --help

kubeadm 线上集群部署(一) 外部 ETCD 集群搭建

 

 

一目了然,你基本知道etcd所需要的证书是哪些了,下面我们来创建证书,创建证书之前我们需要生成关于etcd的初始化文件,通过执行 base_env_etcd_cluster_init.sh 获取

export HOST0=192.168.1.23
export HOST1=192.168.1.24
export HOST2=192.168.1.25

# 初始化 kubeadm config
mkdir -p /data/etcd
curl -s  https://gitee.com/hewei8520/File/raw/master/1.13.5/initializer_etcd_cluster/system_initializer.sh | bash
curl -s https://gitee.com/hewei8520/File/raw/master/1.13.5/initializer_etcd_cluster/base_env_etcd_cluster_init.sh | bash
kubeadm init phase certs etcd-ca
kubeadm init phase certs etcd-server --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-peer --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST0}/kubeadmcfg.yaml
systemctl restart kubelet
sleep 3
# 生成etcd.yaml文件,kubelet会根据配置启动etcd kubeadm init phase etcd local --config=/tmp/${HOST0}/kubeadmcfg.yaml

 kubeadm 线上集群部署(一) 外部 ETCD 集群搭建

 

 第一台节点启动成功以后就可以开始操作另外2台了,如果第一台启动发现容器在不停的重启请检查原因,暂时不要往下面走,因为后面2台都依赖第一台机器,在初期初始化的时候还有在第一台ETCD上操作

 

二.初始化2,3台ETCD (第一台机器上操作)

USER=root
for HOST in ${HOST1} ${HOST2}
do
scp -r /tmp/${HOST}/* ${USER}@${HOST}:
ssh ${USER}@${HOST} 'mkdir -p /etc/kubernetes/'
#上传证书到2,3上 scp -r /etc/kubernetes/pki ${USER}@${HOST}:/etc/kubernetes/ # 初始化系统 安装依赖以及docker kubeadm kubelet ssh ${USER}@${HOST} 'curl -s https://gitee.com/hewei8520/File/raw/master/1.13.5/initializer_etcd_cluster/system_initializer.sh | bash' ssh ${USER}@${HOST} 'systemctl restart kubelet' sleep 1 ssh ${USER}@${HOST} 'kubeadm init phase etcd local --config=/root/kubeadmcfg.yaml' done

 

三.验证集群可用性

docker run --rm -it \
--net host \
-v /etc/kubernetes:/etc/kubernetes registry.aliyuncs.com/google_containers/etcd:3.2.24 etcdctl \
--cert-file /etc/kubernetes/pki/etcd/peer.crt \
--key-file /etc/kubernetes/pki/etcd/peer.key \
--ca-file /etc/kubernetes/pki/etcd/ca.crt \
--endpoints https://${HOST0}:2379 cluster-health

 

 kubeadm 线上集群部署(一) 外部 ETCD 集群搭建

 

参考资料:

https://kubernetes.io/docs/setup/independent/setup-ha-etcd-with-kubeadm/
https://kubernetes.io/docs/setup/independent/high-availability/