Ma-DanK零S
- 已编辑
介绍
KubeEdge 原版的云端组件,在边缘节点加入后,需要手动配置 iptables 等选项,才能正常使用 kubectl logs/metrics/exec,使用步骤较繁琐。
为了 KubeEdge 和 KubeSphere 能更好地集成, KubeSphere 边缘计算团队开发了 EdgeWatcher/IPTables-Operator 等组件,实现了边缘节点加入后自动配置 iptables 以支持边缘节点的 kubectl logs 日志、kubectl top 实时监控和 kubectl exec 工作负载命令行。
同时 KubeSphere 边缘计算团队对边缘节点安装程序 keadm 进行了定制,增加了更多命令行选项,实现单条命令加入集群。
云端 CloudCore 安装
云端配置如下:
软件版本:KubeSphere v3.0.0
云端节点:192.168.10.7 192.168.10.8 192.168.10.9
云端公网IP: 222.222.222.222 (示例,cloudcore会针对这个IP签发证书)
(1) 下载 helm 安装包并解压
wget https://kubeedge.pek3b.qingstor.com/helm/v1.5.0/kubeedge.tar
tar xvf kubeedge.tar
(2) 修改 Values.yaml 配置,设置公网IP和端口,节点内网 NodePort 地址和端口,不冲突情况下,端口使用默认值,只需要修改两个IP地址即可。各 deployment 的 nodeselector 和 toleration 依据集群节点酌情设置。iptablesAgent 需要设置为可以调度到 master 节点。所有 cloudcore 相关工作负载均不要调度到边缘节点。
# Default values for kubeedge.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
appVersion: "0.1.0"
cloudCore:
repository: "kubespheredev/cloudcore"
tag: "v1.5.0"
pullPolicy: "IfNotPresent"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/edge
operator: DoesNotExist
tolerations: []
cloudhubPort: "10000" #cloudhub https协议外网端口
cloudhubQuicPort: "10001" #cloudhub Quic协议外网端口
cloudhubHttpsPort: "10002" #cloudhub边缘节点首次连接凭token获取证书外网端口
cloudstreamPort: "10003" #cloudstream外网端口(用于k8s-apiserver,metrics server连接)
tunnelPort: "10004" #tunnel外网端口(用于边缘节点建立log/exec/metrics等需要的edgestream连接)
cloudHub:
advertiseAddress:
- 222.222.222.222 #外网IP
nodeLimit: "100" #最大边缘节点个数
websocket:
enable: true
quic:
enable: false
maxIncomingStreams: "10000"
https:
enable: true
cloudStream:
enable: true
service:
cloudhubNodePort: "30000" #cloudhub https协议NodePort端口
cloudhubQuicNodePort: "30001" #cloudhub Quic协议NodePort端口
cloudhubHttpsNodePort: "30002" #cloudhub边缘节点首次连接凭token获取证书NodePort端口
cloudstreamNodePort: "30003" #cloudstreamNodePort端口
tunnelNodePort: "30004" #tunnelNodePort端口
edgeWatcher:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/edge
operator: DoesNotExist
tolerations: []
controllerManager:
repository: "kubespheredev/edge-watcher"
tag: "v0.1.0"
pullPolicy: "IfNotPresent"
kubeRBACProxy:
repository: "kubesphere/kube-rbac-proxy"
tag: "v0.5.0"
pullPolicy: "IfNotPresent"
edgeWatcherAgent:
repository: "kubespheredev/edge-watcher-agent"
tag: "v0.1.0"
pullPolicy: "IfNotPresent"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/edge
operator: DoesNotExist
tolerations:
- effect: NoSchedule
key: node-role.kubernetes.io/master
- key: CriticalAddonsOnly
operator: Exists
edgeNode:
labels:
- name: "node-role.kubernetes.io/edge"
value: ""
iptablesRules:
source:
metricsPort: "10250"
logPort: "10350"
destination:
address: "192.168.10.7" #选择一个节点内网地址
(3) 创建 kubeedge namespace,并安装 kubeedge
kubectl create ns kubeedge
#在 kubeedge 的 helm 包文件夹的同级目录下执行
helm install kubeedge kubeedge --version 0.1.0 --namespace kubeedge
(4) 读取连接 token
kubectl get secret -nkubeedge tokensecret -o=jsonpath='{.data.tokendata}' | base64 -d
(5) 在云控制台,设置公网端口映射和防火墙
内网 IP | 内网端口 | 外网端口 |
---|---|---|
192.168.10.7 | 31000 | 10000 |
192.168.10.7 | 31001 | 10001 |
192.168.10.7 | 31002 | 10002 |
192.168.10.7 | 31003 | 10003 |
192.168.10.7 | 31004 | 10004 |
防火墙允许 10000 - 10004 端口
(6) 更新 metrics-server 以适配 KubeEdge v1.5.0
helm delete -n kube-system metrics-server
kubectl apply -f https://kubeedge.pek3b.qingstor.com/metrics-server.yaml
边缘节点加入集群
边缘节点配置需求:安装 docker 19.3.0 以上版本
(1) 下载定制的 Keadm
#下载对应平台的keadm
arch=$(uname -m) && curl -O https://kubeedge.pek3b.qingstor.com/bin/v1.5.0/$arch/edgecore && chmod +x edgecore
(2) 加入集群
节点名称为 edgenode-1,虚拟 IP 为 192.168.100.1,该虚拟 IP 为 kubectl logs/metrics/exec 使用,选择不与云端节点和边缘节点自身 IP 地址段冲突的 IP 地址段即可。token 使用云端第 (4) 步读取到的。
./keadm join --kubeedge-version=1.5.0 --cloudcore-ipport=222.222.222.222:10000 --certport 10012 --quicport 10001 --tunnelport 10004 --edgenode-name edgenode-1 --edgenode-ip 192.168.100.1 --token <f2a2d523970930dd7f2652aa6bdfce2a41655da1a9d6eb5a3fdc2b31f4e48692.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MDYyNzA4MTd9.47yokq3G70np0sQYORjOHtYISZoNLoomVAys1JBrSOA>
备注:当前版本可能第一次运行在校验下载包时会失败,忽略直接再次运行命令即可
节点加入后,等待约1到2分钟,云端的 edge-watcher 和 iptables-operator 组件会自动检测到边缘节点的加入,并配置好 iptables 项,可以使用 kubectl logs/top/exec 来操作边缘节点的实时日志、监控和命令行。
(3) 加入集群后,为边缘节点设置 taint
kubectl taint nodes edgenode-1 node.kubeedge.io=edge:NoSchedule
边缘节点退出集群
如需将边缘节点退出云端集群
./keadm reset
apt remove mosquitto
rm -rf /var/lib/kubeedge /var/lib/edged /etc/kubeedge/ca /etc/kubeedge/certs
备注:如果删除不掉tmpfs挂载文件夹,可以重启节点或者umount之后再删除。
云端 CloudCore 卸载
在云端执行
kubectl delete iptables -n kubeedge iptables
helm delete kubeedge -n kubeedge
kubectl delete -f kubeedge/crds
kubectl delete ns kubeedge
如果卸载时误操作先删除了 iptables-operator-controller-manager 导致 finalizer 无法执行卡住删除 crd 流程,执行下面命令
kubectl patch crd/iptables.kubeedge.kubesphere.io -p '{"metadata":{"finalizers":[]}}' --type=merge