Skip to content

Releases: superedge/edgeadm

Release v0.9.0(Enable Kins Feature)

04 Apr 03:58
Compare
Choose a tag to compare

概述

v0.9.0 版本对比 v.8.0版本主要增强特性如下:

Release v0.8.2 (New tunnel reconstruction)

30 Jan 09:24
99c316d
Compare
Choose a tag to compare

概述

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 层协议

部署安装流程

  1. 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 的特性

  1. 普通 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
  1. 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
  1. 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'
    
  1. Prometheus 和 Node-exporter 安装
    superedge 已经提供了编辑好的 yaml 文件,可以直接参照执行:
  • prometheus-node-exporter

    kubectl apply -f https://raw.githubusercontent.com/superedge/superedge/main/deployment/prometheus-node-exporter.yaml
    
  • prometheus-server

    kubectl apply -f https://raw.githubusercontent.com/superedge/superedge/main/deployment/prometheus-server.yaml
    

部署完以后,可以查看prometheus界面的 Target 状态,可以主要查看其中 node-cadvisornode-exporter 这两个 job 的配置,主要就是配置了 proxy_url: http://tunnel-cloud.edge-system.svc.cluster.local:8080,如果需要其余的 exporter,可以参考上面的配置自行进行修改,http 和 https的 Targets 均可以支持

  1. 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
  1. 云上 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 代理进行访问,不会影响功能性

  2. 如何从老版本升级
    请参考文档:https://github.com/superedge/edgeadm/blob/main/docs/installation/tunnel-update-v0.8.2.md

Release v0.8.1

10 Nov 03:04
Compare
Choose a tag to compare

此版本修改包含:

  1. 节点初始化的时候,内核模块配置适配 ubuntu 系统
  2. Flannel 修改为边缘容器定制版本,实现和 master 断连后,pod 重启 ip 不变
  3. 使用 edgeadm 的时候,如果不想部署 docker/containerd运行时,可以添加 --skip-phases=container 参数