部署云原生边缘计算平台kubeedge

文章目录

    • 1、kubeedge架构
    • 2、基础服务提供 负载均衡器 metallb
      • 2.1、开启ipvc模式中的strictARP
      • 2.2、部署metalb
        • 2.2.1、创建IP地址池
        • 2.2.2、开启二层转发,实现在k8s集群节点外访问
        • 2.2.3、测试
    • 3、部署cloudcore
      • 3.1、部署cloudcore
      • 3.2、修改cloudcore的网络类型
    • 4、部署edgecore

前提:已经搭建好一套k8s集群。

1、kubeedge架构

2、基础服务提供 负载均衡器 metallb

由于需要为cloudcore与edeecore提供通信地址,建议使用LB为cloudcOre提供公网IP或K8S集群节点相同网段lP地址,实际生产中使用的是公网IP地址。

2.1、开启ipvc模式中的strictARP

bash 复制代码
kubectl edit configmap -n kube-system kube-proxy

如果不开启ipvs中的strictARP,那么数据在集群之外无法访问到。

bash 复制代码
#重新运行,使得上述改变生效
kubectl rollout restart daemonset kube-proxy -n kube-system

2.2、部署metalb

注意版本v0.13.5

为cloudcore提供初始化的网络ip,方便跟edgecore进行通信连接。

bash 复制代码
#运行此命令,将metalb部署到k8s集群中
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml

查看状态

bash 复制代码
kubectl get pods n metallb-system
2.2.1、创建IP地址池

为了给服务分配一个IP,首先创建IPAddressPool 网段地址池,通过IPAddressPools分配的IP构成IP池,MetalLB使用该IP池将IP分配给服务。

bash 复制代码
vim first-pool.yaml
bash 复制代码
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 172.23.144.240-172.23.144.250
bash 复制代码
kubectl apply -f  first-pool.yaml
bash 复制代码
kubectl get ipaddresspool -n metallb-system
2.2.2、开启二层转发,实现在k8s集群节点外访问
  • 2层配置
    2层模式是最简单的配置:在许多情况下,您不需要任何特定于协议的配置,只需要IP地址。

2层模式不需要将IP绑定到工作节点的网络接口。它的工作原理是直接响应本地网络上的ARP请求,将机器的MAC地址提供给客户端。

为了播发来自IPAddressPool的IP,必须将L2Advertisement实例关联到IPAAddressPool。

bash 复制代码
vim l2forward.yaml
yaml 复制代码
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: example
  namespace: metallb-system
bash 复制代码
kubectl apply -f l2forward.yaml

将所有的地址通告出去。

2.2.3、测试

部署一个nginx deployment应用。

service的类型是loadbalancer,nginx-svc获得一个与k8s集群节点相同网段的ip地址,它是从创建的地址池中分配的;这个ip地址是自动分配的,一般是从网段的第一个开始分配的,也就是240.

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1 # 指定Pod副本数
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest # 使用nginx镜像
---
apiVersion:  v1
kind:  Service
metadata:
  name:  nginx-svc
spec:
  type:  LoadBalancer
  ports:
  - port:  80
    targetPort:  80
  selector:
    app:  nginx
bash 复制代码
kubectl apply -f nginx.yaml
bash 复制代码
kubectl get pod
kubectl get svc

集群内任意节点外网ip+32290端口访问:

测试完毕后记着删除:

bash 复制代码
kubectl delete -f nginx.yaml

3、部署cloudcore

3.1、部署cloudcore

具体部署方法详见kubesphere官网,进行开启边缘节点功能。

确保集群中已经部署好cloudcore:

bash 复制代码
kubectl get pod -n kubeedge

3.2、修改cloudcore的网络类型

修改cloudcore的网络类型为loadbalance,此时它的外部ip会自动填充。

  • 修改前:
bash 复制代码
kubectl get svc -n kubeedge
  • 修改后:
bash 复制代码
#修改cloudcore的服务网络
kubectl edit svc cloudcore -n kubeedge
#查看cloudcore的服务网络
kubectl get svc -n kubeedge -owide


修改边缘节点的容忍度

bash 复制代码
kubectl get daemonset -n kube-system | grep -v NAME | awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n kube-system --type='json' -p='[{"op":"replace", "path":"/spec/template/spec/affinity", "value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution": {"nodeSelectorTerms": [{"matchExpressions": [{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]'
bash 复制代码
kubectl get daemonset -n metallb-system | grep -v NAME | awk '{print $1}' | xargs -n 1 kubectl patch daemonset -n metallb-system --type='json' -p='[{"op":"replace", "path":"/spec/template/spec/affinity", "value":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution": {"nodeSelectorTerms": [{"matchExpressions": [{"key":"node-role.kubernetes.io/edge","operator":"DoesNotExist"}]}]}}}}]'

下载安装metrics-server

bash 复制代码
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
bash 复制代码
kubectl get pods -n kube-system

设置不要证书:

bash 复制代码
kubectl patch deploy metrics-server -n kube-system --type='json' p='[{"op":"add","path": "/spec/template/spec/containers/0/args/-","value":"--kubelet-insecure-tls"}]'

4、部署edgecore

获取token,从master节点:

bash 复制代码
#master节点获取token
keadm gettoken

#边缘节点添加token变量
TOKEN=09a9f5b068f206ce30934076eb3d045fa826a0fa17d4050e4bf4ad7b4bcda103.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTE2MjM5NTh9.vdzI6snHBGPO-sHdnJqZWUerXbq5-p2-GZX1jRRgUZ4

#边缘节点添加server
SERVER=
相关推荐
腾飞开源2 小时前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
张忠琳12 小时前
【NPU】Ascend Docker Runtime v26.0.1 之二 runtime/process/process.go — 超深度逐行分析
云原生·容器·架构·kubernetes·npu·docker-runtime
雨辰AI18 小时前
K8s人大金仓主从高可用搭建|容器化集群自动同步+故障切换(生产完整版)
云原生·容器·kubernetes
潘正翔19 小时前
k8s基础_kubeadm搭建k8s集群
linux·运维·docker·云原生·容器·kubernetes
潘正翔20 小时前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github
乐启国际旅行社有限公司21 小时前
微服务高可用实战:Resilience4j熔断降级解决文旅节假日流量雪崩问题
微服务·云原生·架构
键盘鼓手苏苏1 天前
AI 音频生成流水线:异步任务要有进度和取消
云原生·kubernetes·k8
雨辰AI1 天前
K8s 达梦数据守护集群部署|容器化高可用生产落地指南
云原生·容器·kubernetes
张忠琳1 天前
【NPU】Ascend Docker Runtime v26.0.1 之一 runtime/main.go — 超深度分析
云原生·容器·架构·kubernetes·npu·docker-runtime
画中有画1 天前
云原生可观测性体系设计及其应用
云原生