搭建kubeedge

该文详细描述了如何搭建kubeedge的v1.12.1版本,包括下载keadm,安装云端组件,配置云端以NodePort方式暴露端口,禁止kube-proxy在边缘节点调度,然后在边缘端安装docker,获取云端token并加入边缘节点,最后修改边缘端配置以适应云端的NodePort设置,并启动edgecore服务。
摘要由CSDN通过智能技术生成

搭建kubeedge

参考官网

https://kubeedge.io/en/docs/setup/keadm/

选择版本

在这里插入图片描述

下载Keadm

选择v1.12.1

wget https://github.com/kubeedge/kubeedge/releases/download/v1.12.1/keadm-v1.12.1-linux-amd64.tar.gz
tar -zxvf keadm-v1.12.1-linux-amd64.tar.gz
cp keadm-v1.12.1-linux-amd64/keadm/keadm /usr/local/bin/keadm
安装云端
  • 安装cloud
keadm init --advertise-address="192.168.19.133" --profile version=v1.12.1 --kube-config=/root/.kube/config --set cloudCore.hostNetWork="false"

最新的云端是以容器化的方式运行

我这边没有公网IP,所有云端的端口均以NodePort的形式暴露,cloudCore.hostNetWork 设置为true

端口映射

30000:10000

30001:10001

30002:10002

30003:10003

30004:10004

  • 禁止kube-proxy调度到边缘端
kubectl get daemonsets.apps -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"}]}]}}}}]'

修改calicl-node kube-proxy nodelocaldns组件的亲和性,运行在非边缘节点

安装边缘端
  • 边缘端配置

边缘端新建一个虚拟机

ip: 192.168.19.139

hostname: edgenode1

安装docker

yum remove docker*

curl https://get.docker.com | bash

systemctl disable docker.service

systemctl start docker.service
  • 获取云端token
keadm gettoken
1f872fbcc3a7d5c17585b337d44c198799f42d7ec0d71dace046317aea98482b.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2Nzc1NDc4MDF9.f9j8yvYWHf_bHzyykd7Dxrxg7gdR5OGD7NS58EBk6Tc

  • 安装edge
TOKEN=1f872fbcc3a7d5c17585b337d44c198799f42d7ec0d71dace046317aea98482b.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2Nzc1NDc4MDF9.f9j8yvYWHf_bHzyykd7Dxrxg7gdR5OGD7NS58EBk6Tc
SERVER=192.168.19.133:30001
keadm join --cloudcore-ipport=$SERVER --kubeedge-version=v1.12.1 --token=$TOKEN

由于cloud端用的是NodePort,所以edge端有些默认端口需要修改,配置文件在/etc/kubeedge/config/edgecore.yaml

主要将10000 10001 10002 10003 10004这些端口改为NodePort的映射端口

apiVersion: edgecore.config.kubeedge.io/v1alpha2
database:
  aliasName: default
  dataSource: /var/lib/kubeedge/edgecore.db
  driverName: sqlite3
kind: EdgeCore
modules:
  dbTest:
    enable: false
  deviceTwin:
    enable: true
  edgeHub:
    enable: true
    heartbeat: 15
    httpServer: https://192.168.19.133:30002
    messageBurst: 60
    messageQPS: 30
    projectID: e632aba927ea4ac2b575ec1603d56f10
    quic:
      enable: false
      handshakeTimeout: 30
      readDeadline: 15
      server: 192.168.19.139:10001
      writeDeadline: 15
    rotateCertificates: true
    tlsCaFile: /etc/kubeedge/ca/rootCA.crt
    tlsCertFile: /etc/kubeedge/certs/server.crt
    tlsPrivateKeyFile: /etc/kubeedge/certs/server.key
    token: 1f872fbcc3a7d5c17585b337d44c198799f42d7ec0d71dace046317aea98482b.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzcyMjQzNjR9.TpK0L-aDrEHnTaWjN6SQA_-cQCQqp5UO3VgZfNWlxNo
    websocket:
      enable: true
      handshakeTimeout: 30
      readDeadline: 15
      server: 192.168.19.133:30000
      writeDeadline: 15
  edgeStream:
    enable: false
    handshakeTimeout: 30
    readDeadline: 15
    server: 192.168.19.133:30004
    tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
    tlsTunnelCertFile: /etc/kubeedge/certs/server.crt
    tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key
    writeDeadline: 15
  edged:
    cniBinDir: /opt/cni/bin
    cniCacheDir: /var/lib/cni/cache
    cniConfDir: /etc/cni/net.d
    containerRuntime: docker
    dockerEndpoint: unix:///var/run/docker.sock
    enable: true
    hostnameOverride: edgenode1
    imagePullProgressDeadline: 1m0s
    kubeConfig: /etc/kubeedge/config/kubeconfig
    masterServiceNamespace: default
    maxPerPodContainerCount: 1
    minimumGCAge: 0s
    networkPluginMTU: 1500
    nonMasqueradeCidr: 10.0.0.0/8
    podSandboxImage: kubeedge/pause:3.1
    registerNode: true
    registerNodeNamespace: default
    registerSchedulable: true
    remoteImageEndpoint: unix:///var/run/dockershim.sock
    remoteRuntimeEndpoint: unix:///var/run/dockershim.sock
    rootDirectory: /var/lib/kubelet
    seccompProfileRoot: /var/lib/kubelet/seccomp
    tailoredKubeletConfig:
      address: 127.0.0.1
      cgroupDriver: cgroupfs
      cgroupsPerQOS: true
      configMapAndSecretChangeDetectionStrategy: Get
      containerLogMaxFiles: 5
      containerLogMaxSize: 10Mi
      contentType: application/json
      cpuCFSQuota: true
      cpuCFSQuotaPeriod: 100ms
      cpuManagerPolicy: none
      cpuManagerReconcilePeriod: 10s
      enableControllerAttachDetach: true
      enableDebugFlagsHandler: true
      enableDebuggingHandlers: true
      enableProfilingHandler: true
      enableServer: false
      enableSystemLogHandler: true
      enforceNodeAllocatable:
      - pods
      eventBurst: 10
      eventRecordQPS: 5
      evictionHard:
        imagefs.available: 15%
        memory.available: 100Mi
        nodefs.available: 10%
        nodefs.inodesFree: 5%
      evictionPressureTransitionPeriod: 5m0s
      failSwapOn: false
      fileCheckFrequency: 20s
      hairpinMode: promiscuous-bridge
      healthzBindAddress: 127.0.0.1
      healthzPort: 10248
      httpCheckFrequency: 20s
      imageGCHighThresholdPercent: 80
      imageGCLowThresholdPercent: 40
      imageMinimumGCAge: 2m0s
      iptablesDropBit: 15
      iptablesMasqueradeBit: 14
      kubeAPIBurst: 10
      kubeAPIQPS: 5
      logging:
        format: text
      makeIPTablesUtilChains: true
      maxOpenFiles: 1000000
      maxPods: 110
      memoryManagerPolicy: None
      memorySwap: {}
      memoryThrottlingFactor: 0.8
      nodeLeaseDurationSeconds: 40
      nodeStatusMaxImages: 50
      nodeStatusReportFrequency: 5m0s
      nodeStatusUpdateFrequency: 10s
      oomScoreAdj: -999
      podPidsLimit: -1
      readOnlyPort: 10350
      registryBurst: 10
      registryPullQPS: 5
      resolvConf: /etc/resolv.conf
      runtimeRequestTimeout: 2m0s
      seccompDefault: false
      serializeImagePulls: true
      shutdownGracePeriod: 0s
      shutdownGracePeriodCriticalPods: 0s
      streamingConnectionIdleTimeout: 4h0m0s
      syncFrequency: 1m0s
      topologyManagerPolicy: none
      topologyManagerScope: container
      volumePluginDir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/
      volumeStatsAggPeriod: 1m0s
  eventBus:
    enable: true
    eventBusTLS:
      enable: false
      tlsMqttCAFile: /etc/kubeedge/ca/rootCA.crt
      tlsMqttCertFile: /etc/kubeedge/certs/server.crt
      tlsMqttPrivateKeyFile: /etc/kubeedge/certs/server.key
    mqttMode: 2
    mqttPassword: ""
    mqttPubClientID: ""
    mqttQOS: 0
    mqttRetain: false
    mqttServerExternal: tcp://127.0.0.1:1883
    mqttServerInternal: tcp://127.0.0.1:1884
    mqttSessionQueueSize: 100
    mqttSubClientID: ""
    mqttUsername: ""
  metaManager:
    contextSendGroup: hub
    contextSendModule: websocket
    enable: true
    metaServer:
      enable: false
      server: 127.0.0.1:10550
      tlsCaFile: /etc/kubeedge/ca/rootCA.crt
      tlsCertFile: /etc/kubeedge/certs/server.crt
      tlsPrivateKeyFile: /etc/kubeedge/certs/server.key
    remoteQueryTimeout: 60
  serviceBus:
    enable: false
    port: 9060
    server: 127.0.0.1
    timeout: 60

  • 重启edgecore.service
systemctl restart edgecore.service
//如果需要可以查看日志
journalctl -u edgecore.service -f -n 200
  • 云端检验连接
//可以看到新增的一个edge的边缘节点
kubectl get nodes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值