kubeadm安装一个master多个node的集群

这篇博客详细介绍了如何使用kubeadm安装一个master节点和多个node节点的kubernetes集群。从基础配置准备、docker安装、kube工具部署,到初始化kubeadm、加入node节点,以及calico网络插件的安装,每一步都提供了清晰的操作指南。特别强调了关闭selinux、开启forward转发以及多master集群配置等注意事项。

使用kubeadm安装master节点

1.基本配置准备

# swapoff-关闭swap
	swapoff -a
	sed -ri "/swap/s@(.*)@#/&@g" /etc/fstab
# Firewall limit-开放默认iptables规则
	echo -e  "net.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1"  >> /etc/sysctl.conf
	sysctl -p
#disabled selinux-关闭selinux
	echo "SELINUX=disabled" > /etc/selinux/config

2.安装dokcer

#install-docker
	apt update && apt-get -y  install apt-transport-https  ca-certificates  curl  gnupg2 software-properties-common && curl -fsSL https://download.docker.com/linux/debian/gpg |  apt-key add - && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian  $(lsb_release -cs)  stable" && apt-get update &&  apt update && apt-get -y install docker-ce=17.06.0~ce-0~debian

</

<think>我们正在处理一个关于Kubernetes集群管理的问题,具体是如何使用kubeadm一个新的master节点加入到现有的Kubernetes集群中。根据Kubernetes的高可用(HA)设置,我们可以通过添加多个master节点来实现控制平面的高可用。 根据引用[1]和引用[2]提供的信息,我们知道: - `kubeadm init` 用于初始化第一个控制平面节点(即第一个master节点)。 - `kubeadm join` 用于将工作节点(worker node)或额外的控制平面节点(master节点)加入到集群中。 但是,引用中并没有直接说明如何将额外的master节点加入集群。实际上,将额外的master节点加入集群以实现高可用,需要执行一些特定的步骤。这些步骤通常包括: 1. 在第一个master节点上生成必要的证书和配置。 2. 将生成的证书和配置文件复制到新的master节点上。 3. 在新的master节点上执行`kubeadm join`命令,并指定控制平面相关的参数。 具体操作如下: ### 步骤1:在第一个master节点上生成加入集群所需的命令和证书 在第一个master节点(已经通过`kubeadm init`初始化)上,我们需要获取加入集群的令牌和证书哈希。同时,为了新的master节点加入,我们需要生成一个用于控制平面节点加入的配置文件。 首先,获取当前的令牌和ca证书哈希: ```bash kubeadm token create --print-join-command ``` 这个命令会输出一个类似`kubeadm join ...`的命令,但是注意,这个命令是用于工作节点加入的。对于控制平面节点,我们需要额外的参数。 ### 步骤2:准备加入控制平面节点的配置文件 在第一个master节点上,我们还需要生成一个用于新master节点加入的配置文件。我们可以使用以下命令来生成配置文件: ```bash kubeadm init phase upload-certs --upload-certs ``` 这个命令会输出一个密钥,用于在加入控制平面节点时解密证书。 ### 步骤3:获取加入控制平面节点的命令 然后,我们需要获取一个用于加入控制平面节点的命令。这个命令需要包含控制平面相关的配置和证书密钥。我们可以使用以下命令来生成: ```bash kubeadm token create --print-join-command ``` 但是,这个命令只适用于工作节点。对于控制平面节点,我们需要手动构造命令,或者使用以下方式获取: 实际上,我们可以使用以下命令来生成一个完整的加入命令(包括控制平面部分): ```bash kubeadm init phase control-plane-prepare all ``` 但更直接的方法是,我们可以使用以下命令来生成加入命令: ```bash kubeadm token create --print-join-command ``` 然后,我们手动添加控制平面所需的参数。 一个典型的控制平面节点加入命令如下: ```bash sudo kubeadm join <第一个master节点的IP和端口> --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane --certificate-key <证书密钥> ``` 其中: - `<第一个master节点的IP和端口>`:通常是第一个master节点的IP和6443端口。 - `<token>`:由`kubeadm token create`创建的令牌。 - `<hash>`:发现令牌的CA证书哈希,可以通过`openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'`命令获取,或者从之前生成的join命令中获取。 - `<证书密钥>`:由`kubeadm init phase upload-certs --upload-certs`命令输出的密钥。 ### 步骤4:在新master节点上执行加入命令 在新的master节点上,确保已经安装kubeadm、kubelet和kubectl,并且已经做了必要的配置(如关闭swap、配置主机名、设置网络等)。然后执行上面构造的命令。 例如: ```bash sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef \ --control-plane --certificate-key 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef ``` ### 步骤5:安装网络插件(如果尚未安装) 如果集群中还没有安装网络插件(如Calico、Flannel等),需要安装。但通常在第一个master节点初始化时已经安装,所以新加入的master节点不需要再安装,但需要确保网络插件支持多master节点。 ### 注意事项 - 在加入新的master节点之前,确保第一个master节点已经初始化并且处于健康状态。 - 确保新的master节点满足与第一个master节点相同的系统要求(如操作系统、Docker版本等)。 - 确保所有节点之间的网络通信正常,特别是6443端口(API服务器)和其他所需端口。 ### 引用说明 根据引用[1]和引用[2],我们了解到kubeadm的基本命令,但具体的高可用设置步骤需要参考Kubernetes官方文档。引用[3]中提到了使用Calico网络插件的配置,这在我们部署网络插件时可能会用到,但在加入master节点时不是必须的,除非网络插件需要特殊配置以支持多master。 因此,我们总结出将master节点加入集群的关键步骤。 §§相关问题§§ 1. 如何验证新加入的master节点是否成功加入集群? 2. 在加入master节点时遇到证书错误应该如何处理? 3. Kubernetes高可用集群中,etcd集群是如何配置的?</think>### 如何将 Master 节点加入 Kubernetes 集群Kubernetes 高可用(HA)集群中,添加额外的 Master 节点需要执行以下步骤。核心命令是 `kubeadm join`,但需配合特定的控制平面参数: #### 前提条件 1. 已有正常运行的 **第一个 Master 节点**(通过 `kubeadm init` 初始化) 2. 新节点满足: - 相同 Kubernetes 版本 - 已安装 `kubeadm`、`kubelet`、`kubectl` - 关闭 swap:`sudo swapoff -a` - 主机名解析正确 - 防火墙开放端口(6443, 2379-2380 等) #### 操作步骤 1. **在首个 Master 节点获取加入凭证** ```bash # 获取 Token 和 CA 证书哈希 kubeadm token create --print-join-command # 生成证书密钥(有效期 2 小时) kubeadm init phase upload-certs --upload-certs ``` 输出示例: ``` kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:1234567890abcdef... \ --control-plane \ --certificate-key 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef ``` 2. **在新 Master 节点执行加入命令** ```bash sudo kubeadm join <第一个Master节点的IP>:6443 \ --token <上一步获取的token> \ --discovery-token-ca-cert-hash sha256:<上一步获取的hash> \ --control-plane \ --certificate-key <上一步获取的certificate-key> ``` 3. **验证新 Master 节点** ```bash kubectl get nodes -o wide kubectl get pods -n kube-system -o wide ``` 正常状态应显示 `Ready` 且角色为 `control-plane` #### 关键参数说明 | 参数 | 作用 | |------|------| | `--control-plane` | 声明加入的是控制平面节点 | | `--certificate-key` | 解密其他 Master 节点传输的证书 | | `--discovery-token-ca-cert-hash` | 验证 API Server 身份 | #### 注意事项 1. **证书密钥时效性**:`--certificate-key` 默认 2 小时有效,超时需重新生成 2. **网络插件**:确保 Calico/Flannel 等网络插件支持多 Master(如 Calico 需配置 `custom-resources.yaml` 中的 CIDR[^3]) 3. **负载均衡**:需提前配置负载均衡器(如 HAProxy)指向所有 Master 节点的 6443 端口 4. **etcd 集群**:新 Master 会自动加入 etcd 集群,需确保节点间 2379/2380 端口互通 > 故障排查:若加入失败,检查 `journalctl -u kubelet` 日志,常见问题包括证书不匹配、端口阻塞或 SELinux 限制[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值