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

本文介绍了如何在外挂etcd集群的环境下搭建k8s高可用集群。首先详细讲述了如何在三台主机上安装和配置etcd,接着是k8s集群的初始化,包括配置文件的定制和kubeadm命令的使用。最后,文章描述了如何将其他控制节点和工作节点逐一加入集群,并安装flannel网络插件以实现节点间的通信。
摘要由CSDN通过智能技术生成

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: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 10.1.60.119   #配置控制节点
  bindPort: 6443   #控制节点默认端口
nodeRegistration:
  criSocket: unix:///var/run/cri-dockerd.sock   #配置使用cri-docker
  imagePullPolicy: IfNotPresent
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/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.local
  podSubnet: 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/sa.pub 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://github.com/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高可用集群搭建完成

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes (k8s) 集群中,Etcd 是作为核心组件之一的分布式键值存储系统,用于存储和管理集群配置数据和服务发现信息。以下是搭建 Etcd 集群的基本步骤: 1. **下载安装**: 首先需要从 Etcd 的官方 GitHub 仓库下载最新版本的二进制文件。你可以选择适合你的操作系统(如 Linux 或 macOS)的版本。 2. **设置环境变量**: 创建一个 `.bashrc` 或者 `.zshrc` 文件,并添加 Etcd 的路径到 `PATH` 变量中,便于后续命令行操作。 3. **初始化集群**: 对每个节点运行 Etcd 后台服务,使用 `-name` 参数指定本节点名称,例如: ``` etcd -name node1 --initial-cluster="node1=http://localhost:2380,node2=http://localhost:2381,node3=http://localhost:2382" ``` 这里创建了一个包含三个节点的集群,假设它们都在本地主机上运行。实际部署中,你需要使用对应的 IP 地址和端口。 4. **启动集群**: 分别在各个节点上执行上述命令,当所有节点都启动后,Etcd 集群会自动选举领导者并开始同步数据。 5. **验证集群状态**: 使用 `etcdctl` 工具连接到任意节点检查集群健康状况和数据一致性。 6. **配置 Kubernetes**: 在 k8s 中,你需要将 Etcd 集群的地址添加到 `kubelet` 和 `kubectl` 的配置中,通过修改 `/etc/kubernetes/manifests/kube-apiserver.yaml` 和 `/etc/kubernetes/manifests/kube-controller-manager.yaml` 等配置文件。 7. **重启服务**: 重启 k8s 控制平面(如 kube-apiserver、kube-controller-manager 等),让它们能够连接到新配置的 Etcd 集群
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值