本地运行了k3s集群 控制平面的6443端口已经内网穿透出去
云服务器搭建了一个k3s节点 防火墙和端口规则已关
执行命令:
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_URL=https://控制平面ip:6443 \
K3S_TOKEN=控制平面token \
./install.sh
没有报错 正常运行 但是控制平面却检测不到这个agent节点
节点运行截图:
控制平面截图:
没有云服务器的节点
本地运行了k3s集群 控制平面的6443端口已经内网穿透出去
云服务器搭建了一个k3s节点 防火墙和端口规则已关
执行命令:
INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_URL=https://控制平面ip:6443 \
K3S_TOKEN=控制平面token \
./install.sh
没有报错 正常运行 但是控制平面却检测不到这个agent节点
节点运行截图:
控制平面截图:
没有云服务器的节点
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题描述: 在本地运行了一个 k3s 集群,并将其控制平面的 6443 端口内网穿透出去,在云服务器上搭建了一个 k3s 节点,执行了 `INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://控制平面ip:6443 K3S_TOKEN=控制平面token ./install.sh` 命令,并未报错,但是控制平面无法检测到这个节点。节点运行截图如下: ![节点运行截图](https://img-mid.csdnimg.cn/release/static/image/mid/ask/976010c5eff84dfa9eca4af48b003d24.png?x-oss-process=image/auto-orient,1/resize,w_320,m_lfit) 控制平面截图如下: ![控制平面截图](https://img-mid.csdnimg.cn/release/static/image/mid/ask/77ef7ccf76954c00b5ff11b3032706ed.png?x-oss-process=image/auto-orient,1/resize,w_320,m_lfit) 解答:
INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://控制平面ip:6443 K3S_TOKEN=控制平面token ./install.sh
命令后,节点已经启动了 k3s,但是节点与控制平面之间的通信有可能出现问题导致节点无法被控制平面识别。确认节点是否运行成功可以通过以下命令:sudo systemctl status k3s-agent
如果节点已经正常启动,那么命令的输出应该如下所示:
● k3s-agent.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-05-09 03:36:05 UTC; 23h ago
Main PID: 1289 (k3s-agent)
Tasks: 10
Memory: 24.8M
CGroup: /system.slice/k3s-agent.service
└─1289 /usr/local/bin/k3s agent --kubelet-arg=cloud-provider=external
May 09 03:36:05 ubuntu-20 k3s-agent[1289]: I0509 03:36:05.428596 1289 server.go:1204] Waiting for control plane
May 09 03:36:05 ubuntu-20 k3s-agent[1289]: I0509 03:36:05.528662 1289 server.go:1219] Control plane nodes found. Sleeping 1 second for each
May 09 03:36:05 ubuntu-20 k3s-agent[1289]: I0509 03:36:05.528828 1289 server.go:1229] Starting to fetch kubernetes configuration from proxy
May 09 03:36:07 ubuntu-20 k3s-agent[1289]: I0509 03:36:07.191272 1289 server.go:1235] Starting controller manager
May 09 03:36:07 ubuntu-20 k3s-agent[1289]: I0509 03:36:07.192106 1289 server.go:1239] Starting apiserver-proxy
May 09 03:36:07 ubuntu-20 k3s-agent[1289]: I0509 03:36:07.201330 1289 server.go:1248] Starting scheduler
May 09 03:36:07 ubuntu-20 k3s-agent[1289]: I0509 03:36:07.201647 1289 server.go:571] Certificate rotation policy is: rotate once per day
May 09 03:36:07 ubuntu-20 k3s-agent[1289]: I0509 03:36:07.205007 1289 k3s.go:172] Using iptables mark: 0x200000
May 09 03:36:07 ubuntu-20 k3s-agent[1289]: I0509 03:36:07.205288 1289 k3s.go:174] Using netlink mark: 0x200000
May 09 03:36:08 ubuntu-20 k3s-agent[1289]: I0509 03:36:08.619369 1289 k3s.go:204] [INFO] Running kubelet
sudo cat /var/lib/rancher/k3s/server/token/k3s-token-xxx.yaml
Step2. 在需要连接到控制平面的节点上,运行以下命令,将 k3s-token-xxx.yaml 文件中的内容追加到 /etc/rancher/k3s/k3s.yaml
文件中:
sudo bash -c "cat >/etc/rancher/k3s/k3s.yaml" <<EOF
<在此处追加 k3s-token-xxx.yaml 文件中的内容>
EOF
Step3. 确认节点与控制平面的连接状态可以运行以下命令:
kubectl get nodes
如果节点已经成功连接到控制平面并被识别,那么命令的输出应该如下所示:
NAME STATUS ROLES AGE VERSION
<节点名称> Ready <节点的角色> 23h v1.21.4+k3s1
如果节点没有被识别,那么需要检查节点是否能够正常访问控制平面的 API 服务器,可以使用以下命令测试:
curl -k https://控制平面ip:6443/healthz
如果返回 ok
,则表示能够正常访问,可以继续排查其他原因,否则需要检查防火墙和网络是否配置正确。 参考代码:
# 确认节点是否成功运行
sudo systemctl status k3s-agent
# 确认节点是否成功连接到控制平面
sudo cat /var/lib/rancher/k3s/server/token/k3s-token-xxx.yaml > k3s-token.yaml
sudo bash -c "cat >/etc/rancher/k3s/k3s.yaml" <<EOF
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority-data: "<ca_cert>"
server: https://localhost:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
users:
- name: default
user:
token: "<token>"
EOF
kubectl get nodes
curl -k https://localhost:6443/healthz
其中,ca_cert
需要替换为控制平面的 ca.crt 的内容,token
需要替换为 k3s-token-xxx.yaml 中的 token 值。