Jzin 2024-05-13 16:17 采纳率: 60%
浏览 19

k8s k3s节点加入控制平面没效果

本地运行了k3s集群 控制平面的6443端口已经内网穿透出去

云服务器搭建了一个k3s节点 防火墙和端口规则已关
执行命令:

INSTALL_K3S_SKIP_DOWNLOAD=true \
K3S_URL=https://控制平面ip:6443 \
K3S_TOKEN=控制平面token \
./install.sh

没有报错 正常运行 但是控制平面却检测不到这个agent节点

节点运行截图:

img

控制平面截图:
没有云服务器的节点

img

  • 写回答

2条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-05-13 16:23
    关注
    让阿豪来帮你解答,本回答参考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) 解答:
    1. 确认节点已经成功运行 在执行 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
    
    1. 确认节点是否成功连接到控制平面 如果确定节点已经成功运行,但是节点仍然无法被控制平面检测到,可能是节点无法成功连接到控制平面导致的。可以通过以下步骤进行确认: Step1. 在控制平面运行以下命令,获取 k3s-token-xxx.yaml 文件的内容:
    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 值。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月13日

悬赏问题

  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥20 spring boot集成mqtt的使用问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错