k8s多master节点集群搭建

文章详细介绍了如何从单Master节点的K8s集群扩展到多Master节点,包括配置环境、文件同步、使用kubeadmjoin命令以及处理如IPForward未开启、控制面Endpoint未设置等错误的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单master节点集群搭建

首先搭建一个单master节点的集群,具体可以参考博文k8s单master节点集群搭建:使用kubeadmkubernetes群集部署与测试、以及K8s集群部署中的变化和注意事项

添加多个master节点

参照集群中的第一个master节点,对后续要加入集群的master节点做好kubeadm init命令之前的所有环境配置工作(操作系统参数、网络配置、镜像仓库、yum源等)。无需单独在这些后续加入的master节点上安装k8s网络插件。

在还未加入集群的master节点上创建目录:

mkdir -p /etc/kubernetes/pki/etcd

将第一个master节点上的下列文件拷贝到还未加入集群的master节点上:

scp /etc/kubernetes/admin.conf root@{k8s_master02_IP}:/etc/kubernetes/
scp /etc/kubernetes/pki/ca.* root@{k8s_master02_IP}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/sa.* root@{k8s_master02_IP}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/front-proxy-ca.* root@{k8s_master02_IP}:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/ca.* root@{k8s_master02_IP}:/etc/kubernetes/pki/etcd/

注意不能多拷贝其他文件,否则在加入集群时可能会收到下面的报错:

error execution phase control-plane-prepare/certs: 
error creating PKI assets: failed to write or validate certificate "etcd-peer": 
certificate etcd/peer is invalid: x509: certificate is valid for k8s-master01, localhost, not k8s-master02

在第一个master节点上打印出加入集群的命令:

kubeadm token create --print-join-command

在还未加入集群的master节点上执行上面打印出来的命令来加入集群,注意加上--control-plane来表明是以管理节点的身份加入。

kubeadm join {k8s_master01_IP}:6443 --token xxxxxx --discovery-token-ca-cert-hash sha256:xxxxxx --control-plane

最后检查加入集群的master节点状态是否READY。

kubectl get nodes

可能遇到的错误

如果收到下面的报错信息:

error execution phase preflight: [preflight] Some fatal errors occurred:
        [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

修改对应的操作系统参数,再重新加入master节点即可。

echo 1 > /proc/sys/net/ipv4/ip_forward

如果收到下面的报错信息:

unable to add a new control plane instance a cluster that doesn't have a stable controlPlaneEndpoint address

需要执行下面的命令来修改kubeadm配置文件:

kubectl edit cm kubeadm-config -n kube-system

kubernetesVersion同一级添加controlPlaneEndpoint配置,再重新加入master节点即可。

...
  kubernetesVersion: v1.23.0
  controlPlaneEndpoint: {k8s_master01_IP_OR_LoadBalance_IP}:6443
...

References
[1] https://blog.youkuaiyun.com/Sebastien23/article/details/112976697
[2] https://blog.youkuaiyun.com/Sebastien23/article/details/113757356
[3] https://blog.youkuaiyun.com/Sebastien23/article/details/125958860
[4] https://blog.youkuaiyun.com/wangy_0228/article/details/128157888
[5] https://blog.youkuaiyun.com/hedao0515/article/details/126342939?spm=1001.2014.3001.5506

搭建Kubernetesk8s)的双节点集群包括一个主节点Master Node)和一个工作节点(Worker Node)。以下是详细的步骤: ### 环境准备 1. **操作系统**:建议使用Ubuntu 20.04 LTS。 2. **硬件要求**:每个节点至少2个CPU,2GB内存,20GB存储空间。 3. **网络配置**:确保节点之间可以互相通信,并且可以访问互联网。 ### 步骤一:安装Docker 在所有节点上安装Docker。 ```bash sudo apt-get update sudo apt-get install -y docker.io sudo systemctl enable docker sudo systemctl start docker ``` ### 步骤二:安装kubeadm, kubelet, kubectl 在所有节点上安装kubeadm, kubelet, kubectl。 ```bash sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl sudo curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo add-apt-repository \ "deb https://apt.kubernetes.io/ kubernetes-xenial main" sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl ``` ### 步骤三:初始化主节点 在主节点上运行以下命令来初始化集群。 ```bash sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 初始化完成后,会输出一个`kubeadm join`命令,保存这个命令以便后续在Worker节点上使用。 ### 步骤四:配置kubectl 在主节点上配置kubectl。 ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` ### 步骤五:安装网络插件 在主节点上安装Flannel网络插件。 ```bash kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` ### 步骤六:加入Worker节点 在Worker节点上运行之前保存的`kubeadm join`命令。 ```bash sudo kubeadm join <主节点的IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> ``` ### 步骤七:验证集群状态 在主节点上运行以下命令来验证集群状态。 ```bash kubectl get nodes ``` ### 解释 - **Docker**:容器化引擎,Kubernetes使用它来运行容器。 - **kubeadm**:用于初始化集群的工具。 - **kubelet**:在每个节点上运行的组件,负责管理容器。 - **kubectl**:用于与Kubernetes集群交互的命令行工具。 - **Flannel**:一个网络插件,提供集群中各节点之间的网络连接。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GottdesKrieges

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值