关于云计算:Kubernetes-集成-KubeEdge-需要注意的问题汇总

35次阅读

共计 3595 个字符,预计需要花费 9 分钟才能阅读完成。

作者:朱含

近期小伙伴对在应用 KubeSphere v3.1 上集成边缘节点有不少疑难,这里阐明下 guide 文档地址,而后能够把这方面的问题汇总在这里,不便后续的小伙伴排查问题,也欢送大家持续补充。

官网 guide 文档传送门

  • 激活 kubeedge
  • 边缘节点退出

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 公布!

正文完
 0