作者:朱含

近期小伙伴对在使用 KubeSphere v3.1 上集成边缘节点有不少疑问,这里说明下 guide 文档地址,然后可以把这方面的问题汇总在这里,方便后续的小伙伴排查问题,也欢迎大家继续补充。

官方 guide 文档传送门

1. IP、端口开放问题

如果使用 ks-installer 安装,需要激活 KubeEdge 以及配置 master节点对应的外网 IP 地址.

假设集群 master 节点 IP 192.168.10.7, 需要开放的外网端口如下:

序号 内网IP 内网端口(NodePort) 外网端口
1 192.168.10.7 30000 10000 https协议端口
2 192.168.10.7 30001 10001 Quic协议端口
3 192.168.10.7 30002 10002 cloudhub首次token获取证书
4 192.168.10.7 30003 10003 cloudstream端口
5 192.168.10.7 30004 10004 tunnel端口(edgestream连接)

外网端口需要防火墙通过。

如果忘记了设置 ks-installer 中 KubeEdge 组件部分中外网访问 IP,cloudhub 起不来,可以使用以下命令补救:

 kubectl -n kubeedge edit cm cloudcore

2. 获取边缘节点日志、metrics

边缘节点与 master 节点不在一个局域网的情况较多,因此我们在上面设计使用外网端口通信。另外,由于 KubeEdge 完成 kubectl exec,获取 logs 以及 metrics 的功能,依赖虚拟 IP 进行相应的 iptable 转发到 cloudhub 对应的端口,继而获取边缘端的数据,也就是通过 edgemesh 实现,所以边缘节点绑定的虚拟 IP 和边缘节点名称必须是唯一的,要自行按规律维护,注意这个虚拟 IP 不能填边缘节点内网 IP,最好选择与内网不冲突的网端,同时要保证 metrics-server 组件处于开启状态,需要更新为 0.4.1 版本以上以适应 KubeEdge(当前版本主要通过 metrics-server 获取边缘 metrics)。

3. 如果边缘节点使用外网 IP 和端口通信,有些 daemonset 的容忍度比较强,比如 Calico,需要给它们 patch 一下,避免调度到边缘端

#!/bin/bash

NodeSelectorPatchJson='{"spec":{"template":{"spec":{"nodeSelector":{"node-role.kubernetes.io/master": "","node-role.kubernetes.io/worker": ""}}}}}'
NoShedulePatchJson='{"spec":{"template":{"spec":{"affinity":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}}}}' edgenode="edgenode"
if [ $1 ]; then
edgenode="$1"
fi namespaces=($(kubectl get pods -A -o wide |egrep -i $edgenode | awk '{print $1}' ))
pods=($(kubectl get pods -A -o wide |egrep -i $edgenode | awk '{print $2}' ))
length=${#namespaces[@]} for((i=0;i<$length;i++));
do
ns=${namespaces[$i]}
pod=${pods[$i]}
resources=$(kubectl -n $ns describe pod $pod | grep "Controlled By" |awk '{print $3}')
echo "Patching for ns: $ns, resources: $resources"
kubectl -n $ns patch $resources --type merge --patch "$NoShedulePatchJson"
sleep 1
done

4. kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"

原因:kubelet 和 master 端使用的 cgroup 不一致导致

解决办法:

添加配置 "exec-opts": ["native.cgroupdriver=systemd"], 然后重启 Docker,systemctl daemon-reload &&

systemctl restart kubelet

参考描述:

  • kubeedge/kubeedge#1772 (comment)

    cgroup driver shouldn't be taken care by the keadm, I think this is also true for "kubeadm", all that care about the cgroup driver is actually which cri you are using, for example, in your case, you are using docker, so you just need to update the docker configuration to use "systemd" instead.

5. 边缘节点和 Kubernetes 在一个局域网时,如何加入 KubeSphere 纳管?

如果边缘节点和 Kubernetes 集群在一个局域网,可以使用 nodePort 方式加入边缘节点,默认已开放的 nodeport 端口为 30000-30004,所以边缘节点 join 集群的时候得将外部端口 10000-10004 改为 30000-30004,也就是将其中的 --cloudcore-ipport=192.168.x.x:10000 --quicport 10001 --certport 10002 --tunnelport 10004 改为 --cloudcore-ipport=192.168.x.x:30000 --quicport 30001 --certport 30002 --tunnelport 30004,不过需要指出的是,设计是从外网考虑,请明确边缘节点的应用场景。

更多请参考 guide 指南。

6. 边缘节点 pod metrics 支持的最低 Docker 版本

目前边缘端支持的 Docker 版本应该大于等于 v19.3.0,具体原因可参考 https://kubesphere.com.cn/forum/d/4494-kubesphere-v310/8

KubeEdge v1.6.2 已发布,目前测试该 bug 已经修复,见图:

边缘端需要升级到 v1.6.2,也可以添加以下配置进行修改:

apiVersion: v1
kind: ConfigMap
metadata:
name: edge-watcher-config
namespace: kubeedge
data:
version: v1.6.2
region: zh

7. node metrics 不正常显示排除指南

  • 检查metrics-server服务是否正常

    检查 metrics-server deployment 是否正常,版本是否符合要求(v0.4.1 以上),查看 kubectl top 是否异常,如果异常,可以重启, 或者手动安装:

    kubectl apply  -f       https://raw.githubusercontent.com/kubesphere/ks-installer/master/roles/metrics-server/files/metrics-server/metrics-server.yaml
  • 其他节点都有 metrics,只有边缘节点没有 metrics

    • 检查 iptables 是否建立正确的转发, 用以下命令查看 iptables pod 部署在哪个 node:
    kubectl get pods -n kubeedge -o wide
    • 在对应node上获取10350的nat转发规则, 确认转发目的地在k8s master or node ip上

    • 如果转发目的地不对,可以用下面的做法:

    kubectl -n kubeedge edit cm edge-watcher

    修改完后需要重启edge-watcher-controller-manager deployment

8. 证书问题

kubectl delete secret casecret cloudcoresecret -n kubeedge

需要重启 cloudcore。

本文由博客一文多发平台 OpenWrite 发布!

Kubernetes 集成 KubeEdge 需要注意的问题汇总的更多相关文章

  1. containerd与kubernetes集成

    kubernetes集群三步安装 概念介绍 cri (Container runtime interface) cri is a containerd plugin implementation of ...

  2. CRI 与 ShimV2:一种 Kubernetes 集成容器运行时的新思路

    摘要: 关于 Kubernetes 接口化设计.CRI.容器运行时.shimv2.RuntimeClass 等关键技术特性的设计与实现.     Kubernetes 项目目前的重点发展方向,是为开发 ...

  3. containerd与kubernetes集成部署

    概念介绍 cri (Container runtime interface) cri is a containerd plugin implementation of Kubernetes conta ...

  4. 【超全整理】J2EE集成开发环境MyEclipse使用心得汇总

    一.首先我们为什么需要MyEclipse? 下面允许我做一些简要的介绍: 应该大家都知道另一个MyEclipse的近亲——Eclipse的优点:免费.程序代码排版功能.有中文汉化包.可增设许多功能强大 ...

  5. spring-boot集成activiti的model遇到问题汇总

    按照网上的七拼八凑整合网页版的部署将遇到的问题归置如下: 本人的springboot版本是:1.5.13.RELEASE 工作流相关: <!--工作流--> <dependency& ...

  6. Dubbo与Kubernetes集成

    Dubbo应用迁移到docker的问题 Dubbo是阿里开源的一套服务治理与rpc框架,服务的提供者通过zookeeper把自己的服务发布上去,然后服务调用方通过zk获取服务的ip和端口,dubbo客 ...

  7. kubernetes集成GPU原理

    这里以Nvidia GPU设备如何在Kubernetes中管理调度为例研究, 工作流程分为以下两个方面: 如何在容器中使用GPU Kubernetes 如何调度GPU 容器中使用GPU 想要在容器中的 ...

  8. 干货 | 京东云托管Kubernetes集成镜像仓库并部署原生DashBoard

    在上一篇"Cloud Native 实操系列"文章中,我们为大家介绍了如何通过京东云原生容器实现Eureka的部署(

  9. Jenkins持续集成学习-搭建jenkins问题汇总

    目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学习5-搭建jenkins问题汇总 ...

  10. Kubernetes详解

    1.1 Kubernetes简介 1.1.1 什么是Kubernetes Kubernetes (通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写) 是一个以容器为中心的基础架 ...

随机推荐

  1. 【Vue】Re06 组件化

    将一个应用页面拆分成若干个可重复使用的组件 一.Vue的组件的使用步骤: 1.创建组件构造器 2.注册组件 3.使用组件 <!DOCTYPE html> <html lang=&qu ...

  2. WPF【无限滚动图片浏览】自定义控件

    自定义控件 自定义控件是我比较陌生的一个主题.我好久没练习过wpf了,需要巩固记忆.我想了一会儿,打开动漫之家,忽然觉得这个看漫画的图片浏览控件有意思.于是特地花了一天做了这个图片控件.我原本以为很容 ...

  3. 编程语言中的Variable Shadowing(变量遮蔽)—— declaration shadows a local variable —— Consider Allow Shadowing of let Bindings

    Variable Shadowing(变量遮蔽)是编程语言中比较常见的一种情况,但是由于不同语言对于这个情景的处理是不同的,所以在具体语言中这个Variable Shadowing(变量遮蔽)的表现也 ...

  4. 【转载】 取消idea双击shift时出现的全局搜索 (使用pycharm IDE时出现的问题)

    原文地址: https://blog.csdn.net/hxy199421/article/details/83030603 最近在使用pycharm的时候出现文章标题的问题,由于以前写的代码都是比较 ...

  5. 5分钟教你使用idea调试SeaTunnel自定义插件

    在用Apache SeaTunnel研发SM2加密组件过程中,发现社区关于本地调试SeaTunnel文章过于简单,很多情况没有说明,于是根据自己遇到问题总结这篇文档.SeaTunnel本地调试官方文档 ...

  6. Leetcode: 1484. Groups Sold Products By The Date

    题目要求如下: 输入的数据为 要求按照日期查询出每日销售数量及相应产品的名称,并按照字符顺序进行排序. 下面是实现的代码: import pandas as pd def categorize_pro ...

  7. Maven经验分享(八)maven去除jar报依赖

    又是项目总结的时候了,说一下maven使用中遇到的问题以及解决方案. 在新项目的开发中,使用maven进行持续构建,在搭建框架的过程中经常遇到jar冲突的问题,现在来介绍下如何去除jar传递依赖. 1 ...

  8. git push --recurse-submodules = on-demand 递归push

    I have the following project structure: root-project | |-- A | | | |-- C | |-- B A和B是根项目的子模块. C又是项目A ...

  9. ABC304Ex Constrained Topological Sort 题解

    https://atcoder.jp/contests/abc304/tasks/abc304_h [CSP-S 2023] 种树后半部分的加强版 对于边 \((u,v)\),不妨令 $r[u]$ 对 ...

  10. 不是 PHP 不行了,而是 MySQL 数据库扛不住啊

    大家好,我是码农先森. 大多数的业务场景下 PHP 还没有达到性能瓶颈,然而 MySQL 数据库就先行驾崩了.但我们总是不分青红皂白,一股脑的把原因归结于是 PHP 语言不行了,每当遇到这种情形我就会 ...