Releases: superedge/edgeadm
Release v0.9.0(Enable Kins Feature)
概述
v0.9.0 版本对比 v.8.0版本主要增强特性如下:
- 支持 Kins (K3s in SuperEdge)能力,支持将边缘 NodeUnit 提升为标准 K3s 集群,请参考:Kins 使用指南
- 云边 Tunnel 隧道架构全新升级,请参考:云边隧道 Tunnel 使用指南
- 边缘侧健康状态检查能力增强,请参考:Edge-health 健康状态检查
Release v0.8.2 (New tunnel reconstruction)
概述
superedge 在 v0.8.2 版本重构了 tunnel 的设计,本文档会简单对新版本 tunnel 进行描述,同时描述了监控组件如何使用 Tunnel 抓取监控数据
技术架构
设计目标
Tunnel的设计目标主要包含下面 4 个功能
- 云端(apiserver 或者云端 pod)可以通过 nodename:10250 访问云端 worker 节点和边缘 worker 节点(例如 metrics-server 访问 worker1:10250,或者 prometer-server 访问 node-exporter: edge1:9100)
- 云端 apiserver 可以 kubectl log/exec 云端节点和边缘端节点上的 pod
- 云边之间的 svc 可以进行七层互访
- 云边之间的 pod 可以进行七层互访
边缘侧 tunnel-edge 和云端 tunnel-cloud 会创建双向 grpc 隧道,然后会分别在云和边上开启 http 代理服务,用于云边传输 7 层协议
部署安装流程
- Master节点安装
安装命令
./edgeadm init --kubernetes-version=1.22.6 --image-repository superedge.tencentcloudcr.com/superedge --service-cidr=10.244.0.0/16 --pod-network-cidr=10.233.0.0/16 --install-pkg-path ./kube-linux-*.tar.gz --apiserver-cert-extra-sans=<Master 节点外网 IP> --apiserver-advertise-address=<Master 节点内网 IP> --enable-edge=true --edge-version=0.8.2
这里需要指定--edge-version=0.8.2,才能使用新版 tunnel 的特性
- 普通 worker 节点安装
./edgeadm join <Master 节点内网 IP> --token e9syok.5ovvxtfk4fnurrai --discovery-token-ca-cert-hash sha256:4192158fe5e4576541a75479722e1873ca180d7c3127671ebe9040e51a59532b --install-pkg-path ./kube-linux-amd64-v1.22.6.tar.gz --enable-edge=false
- edge 节点安装
./edgeadm join <Master 节点外网 IP> --token e9syok.5ovvxtfk4fnurrai --discovery-token-ca-cert-hash sha256:4192158fe5e4576541a75479722e1873ca180d7c3127671ebe9040e51a59532b --install-pkg-path ./kube-linux-amd64-v1.22.6.tar.gz --enable-edge=true
- Metrics-Server安装
按照标准模式安装完成 Metrics-server 之后,注意需要修改 3 个地方:
-
metrics-server 不要安装在 edge 节点上,添加 nodeAffinity
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: superedge.io/node-edge operator: DoesNotExist
-
metrics-server 启动参数这里,需要把 Hostname 放置在 InternalIP 之前,原因:注册的 edge 节点可能处于不同的局域网内,其 InternalIP 是相同的,apiserver 无法通过 InternalIP 定位到实际节点,只能通过 Hostname 来寻址定位:
containers: - args: - '--cert-dir=/tmp' - '--secure-port=443' - '--kubelet-preferred-address-types=Hostname,InternalIP,ExternalIP' - '--kubelet-use-node-status-port' - '--kubelet-insecure-tls=true' - '--authorization-always-allow-paths=/livez,/readyz' - '--metric-resolution=15s'
-
metrics-server 需要配置 ENV 环境变量,使用 http_proxy和 https_proxy; 后续云端服务如果需要访问边缘侧 service 或者节点名称,均配置 env 的http/https 代理环境变量即可
http://tunnel-cloud.edge-system.svc.cluster.local:8080
:env: - name: http_proxy value: 'http://tunnel-cloud.edge-system.svc.cluster.local:8080' - name: https_proxy value: 'http://tunnel-cloud.edge-system.svc.cluster.local:8080'
- Prometheus 和 Node-exporter 安装
superedge 已经提供了编辑好的 yaml 文件,可以直接参照执行:
-
kubectl apply -f https://raw.githubusercontent.com/superedge/superedge/main/deployment/prometheus-node-exporter.yaml
-
kubectl apply -f https://raw.githubusercontent.com/superedge/superedge/main/deployment/prometheus-server.yaml
部署完以后,可以查看prometheus界面的 Target 状态,可以主要查看其中 node-cadvisor
和 node-exporter
这两个 job 的配置,主要就是配置了 proxy_url: http://tunnel-cloud.edge-system.svc.cluster.local:8080
,如果需要其余的 exporter,可以参考上面的配置自行进行修改,http 和 https的 Targets 均可以支持
- apiserver 访问边缘节点
apiserver 会通过 egress,配置 Tunnel 的隧道来访问边缘节点,完成kubectl log/exec相关能力,具体可以参考 master 节点上的 egress 配置/etc/kubernetes/kube-apiserver-conf/egress-selector-configuration.yaml
apiVersion: apiserver.k8s.io/v1beta1
kind: EgressSelectorConfiguration
egressSelections:
- name: cluster
connection:
proxyProtocol: HTTPConnect
transport:
tcp:
url: https://tunnel-cloud.edge-system.svc.cluster.local:8000
tlsConfig:
caBundle: /etc/kubernetes/pki/ca.crt
clientCert: /etc/kubernetes/pki/tunnel-anp-client.crt
clientKey: /etc/kubernetes/pki/tunnel-anp-client.key
-
云上 pod 访问边缘 svc(七层访问)
如果一个 svc 的后端 ep 全部处于边缘节点,superedge 会标记该 service 位于 edge;同理,如果一个 svc 的后端 ep 全部处于云端 master 或者 worker 节点,superedge 会标记该 serivce 位于 cloud 端,具体可以参考configmap: edge-system/tunnel-cache
如果需要从云上 Pod 访问边缘 svc,直接在系统变量添加http/https_proxy: http://tunnel-cloud.edge-system.svc.cluster.local:8080
即可;如果 Pod 同时想访问云上 svc 和边缘 svc,也可以直接添加 http/https代理即可,此时云上访问也会通过 tunnel 代理进行访问,不会影响功能性 -
如何从老版本升级
请参考文档:https://github.com/superedge/edgeadm/blob/main/docs/installation/tunnel-update-v0.8.2.md
Release v0.8.1
此版本修改包含:
- 节点初始化的时候,内核模块配置适配 ubuntu 系统
- Flannel 修改为边缘容器定制版本,实现和 master 断连后,pod 重启 ip 不变
- 使用 edgeadm 的时候,如果不想部署 docker/containerd运行时,可以添加 --skip-phases=container 参数