diff --git a/install/install-k8s.md b/install/install-k8s.md index 0489d8e..b3e3229 100644 --- a/install/install-k8s.md +++ b/install/install-k8s.md @@ -15,7 +15,7 @@ meta: ## 文档特点
- +
## 配置要求 @@ -142,7 +142,7 @@ echo "127.0.0.1 $(hostname)" >> /etc/hosts
--> -## 安装 docker / kubelet +## 安装docker及kubelet @@ -191,11 +191,6 @@ curl -sSL https://kuboard.cn/install-script/v1.16.2/install_kubelet.sh | sh ## 初始化 master 节点 -::: tip -* 以 root 身份在 demo-master-a-1 机器上执行 -* 初始化 master 节点时,如果因为中间某些步骤的配置出错,想要重新初始化 master 节点,请先执行 `kubeadm reset` 操作 -::: - ::: danger 关于初始化时用到的环境变量 * **APISERVER_NAME** 不能是 master 的 hostname * **APISERVER_NAME** 必须全为小写字母、数字、小数点,不能包含减号 @@ -224,7 +219,7 @@ curl -sSL https://kuboard.cn/install-script/v1.16.2/init_master.sh | sh ``` sh # 只在 master 节点执行 -# 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP) +# 替换 x.x.x.x 为 master 节点的内网IP # export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令 export MASTER_IP=x.x.x.x # 替换 apiserver.demo 为 您想要的 dnsName @@ -240,6 +235,26 @@ echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts +如果出错点这里 + + + +* 请确保您的环境符合 [安装docker及kubelet](#安装docker及kubelet) 中所有勾选框的要求 +* 请确保您使用 root 用户执行初始化命令 +* 执行如下命令 + ``` sh + echo MASTER_IP=${MASTER_IP} && echo APISERVER_NAME=${APISERVER_NAME} && echo POD_SUBNET=${POD_SUBNET} + ``` + 请验证如下几点: + * 环境变量 ***MASTER_IP*** 的值应该为 master 节点的 **内网IP**,如果不是,请重新 export + * **APISERVER_NAME** 不能是 master 的 hostname + * **APISERVER_NAME** 必须全为小写字母、数字、小数点,不能包含减号 + * **POD_SUBNET** 所使用的网段不能与 ***master节点/worker节点*** 所在的网段重叠。该字段的取值为一个 CIDR 值,如果您对 CIDR 这个概念还不熟悉,请仍然执行 export POD_SUBNET=10.100.0.1/16 命令,不做修改 +* 重新初始化 master 节点,请先执行 `kubeadm reset -f` 操作 + + + + **检查 master 初始化结果** ``` sh @@ -285,7 +300,7 @@ kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery ``` sh # 只在 worker 节点执行 -# 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP) +# 替换 x.x.x.x 为 master 节点的内网 IP export MASTER_IP=x.x.x.x # 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME export APISERVER_NAME=apiserver.demo @@ -295,6 +310,97 @@ echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 ``` +如果出错点这里 + + + +### 常见错误原因 +经常在群里提问为什么 join 不成功的情况大致有这几种: + +#### worker 节点不能访问 apiserver + + 在worker节点执行以下语句可验证worker节点是否能访问 apiserver + ``` sh + curl -ik https://apiserver.demo:6443 + ``` + 如果不能,请在 master 节点上验证 + ``` sh + curl -ik https://localhost:6443 + ``` + 如果 master 节点能够访问 apiserver、而 worker 节点不能,则请检查自己的网络设置 + +#### worker 节点有多个网卡 + + 在worker节点执行 + ```sh + ip address + ``` + 输出结果如下所示: + ``` + 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 + link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 2: eth0: mtu 1500 qdisc mq state UP group default qlen 1000 + link/ether 52:54:00:9b:eb:48 brd ff:ff:ff:ff:ff:ff + inet 172.21.0.12/20 brd 172.21.15.255 scope global eth0 + valid_lft forever preferred_lft forever + inet6 fe80::5054:ff:fe9b:eb48/64 scope link + valid_lft forever preferred_lft forever + ``` + 通常只有一个 loopback 地址,和一个 eth0 内网地址,如果您有更多的网卡,kubelet 可能会出现不能使用正确的内网 IP 地址与 apiserver 通信的情况。建议先删除多余网卡,需要的话,在完成 k8s 安装后再重新添加 + +#### worker 节点与 master 节点不在同一个局域网 + + worker 节点必须与 master 节点在同一个局域网内,并且能够互通(安装 kubelet 和 docker 时,已经关闭了防火墙) + ``` sh + systemctl status firewalld + ``` + 输出结果如下 + ``` + ● firewalld.service - firewalld - dynamic firewall daemon + Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) + Active: inactive (dead) + Docs: man:firewalld(1) + ``` + 如果您使用云环境,请确保您的安全组配置规则里,master节点和worker节点之间的相互通信是不受阻碍的 + +### 移除worker节点并重试 + +::: warning +正常情况下,您无需移除 worker 节点,如果添加到集群出错,您可以移除 worker 节点,再重新尝试添加 +::: + +在准备移除的 worker 节点上执行 + +``` sh +# 只在 worker 节点执行 +kubeadm reset -f +``` + +在 master 节点 demo-master-a-1 上执行 + +```sh +# 只在 master 节点执行 +kubectl get nodes -o wide +``` +如果列表中没有您要移除的节点,则忽略下一个步骤 + +``` sh +# 只在 master 节点执行 +kubectl delete node demo-worker-x-x +``` + +::: tip +* 将 demo-worker-x-x 替换为要移除的 worker 节点的名字 +* worker 节点的名字可以通过在节点 demo-master-a-1 上执行 kubectl get nodes 命令获得 +::: + + + + ### 检查初始化结果 在 master 节点上执行 @@ -312,38 +418,6 @@ demo-worker-a-1 Ready 2m26s v1.16.2 demo-worker-a-2 Ready 3m56s v1.16.2 ``` -## 移除 worker 节点 - -添加节点出错时,可移除节点重新添加 - - - -::: warning -正常情况下,您无需移除 worker 节点,如果添加到集群出错,您可以移除 worker 节点,再重新尝试添加 -::: - -在准备移除的 worker 节点上执行 - -``` sh -# 只在 worker 节点执行 -kubeadm reset -``` - -在 master 节点 demo-master-a-1 上执行 - -``` sh -# 只在 master 节点执行 -kubectl delete node demo-worker-x-x -``` - -::: tip -* 将 demo-worker-x-x 替换为要移除的 worker 节点的名字 -* worker 节点的名字可以通过在节点 demo-master-a-1 上执行 kubectl get nodes 命令获得 -::: - - - -