<返回更多

3分钟入门边缘计算-kubeedge

2021-06-28    pythontaotao
加入收藏
3分钟入门边缘计算-kubeedge

 

什么是kubeedge:

KubeEdge是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于kubernetes构建,并为网络应用程序提供基础架构支持。云和边缘之间的部署和元数据同步。 KubeEdge使用Apache 2.0许可。并且绝对可以免费用于个人或商业用途。

kubeedge目标是创建一个开放平台,使能边缘计算,将容器化应用编排功能扩展到边缘的节点和设备,后者基于kubernetes构建,并为云和边缘之间的网络,应用部署和元数据同步提供基础架构支持。

 

3分钟入门边缘计算-kubeedge

 

 

下面我们来安装一个可以实际操作的kubeedge环境!

一、环境准备,两节点都需要配置

1.1、主机准备

主机名

IP地址

最低配置

操作系统

内核版本

cloudmaster

10.139.8.210

2C 4G

centos 7.6

3.10.0-957.el7.x86_64

cloudedge

10.139.8.211

1C 2G

CentOS 7.6

3.10.0-957.el7.x86_64

1.2、关闭防火墙和selinux

$ systemctl stop firewalld && systemctl disable  firewalld
$ setenforce 0
$ cat /etc/selinux/config    #将 SELINUX=enforcing  改为disable

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled

1.3、关闭swap分区,若没有swApp分区可以忽略不进行操作

$ swapoff -a
$ sed -i 's/.*swap.*/#&/' /etc/fstab

1.4、主机名解析

$ echo "10.139.8.210 cloudmaster" >> /etc/hosts
$ echo "10.139.8.211 cloudedge" >> /etc/hosts

二、kubeadm安装kubernetes集群

2.1、安装Docker (两节点都需要安装)

#1、安装docker依赖软件包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2   

#2、添加Yum源,国内源速度快很多
#国内源安装快很多
$ sudo yum-config-manager 
--add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

#3、安装docker-ce
$ yum install docker-ce docker-ce-cli containerd.io -y
$ systemctl start docker && systemctl enable docker

#4、验证安装是否成功
$ docker version
Client: Docker Engine - Community
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        370c289
 Built:             Fri Apr  9 22:45:33 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:43:57 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.6
  GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc:
  Version:          1.0.0-rc95
  GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

2.2、安装k8s集群,只需要在cloudmaster上进行安装,cloudedge不需要join到集群

#1、配置内核参数,将桥接的IPv4流量传递到iptables的链 
$ cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
$ sysctl --system

#2、配置国内kuberneetes的yum源,由于网络原因,中国无法直接连接到google的网络,需要配置阿里云的yum源
$ cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#3、安装kubectl、kubeadm、kubelet
$ yum install -y kubelet-1.17.1 kubeadm-1.17.1 kubectl-1.17.1

#4、初始化集群,在cloudmaster上执行kubeadm init
$ kubeadm init --kubernetes-version=1.17.1 
--apiserver-advertise-address=10.139.8.210 
--image-repository registry.aliyuncs.com/google_containers 
--service-cidr=10.96.0.0/12 
--pod-network-cidr=10.244.0.0/16
 
//以下是执行完毕后输出的部分信息
Your Kubernetes control-plane has initialized successfully!
 
To start using your cluster, you need to run the following as a regular user:
 
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
 
Then you can join any number of worker nodes by running the following on each as root:
 
kubeadm join 192.168.100.150:6443 --token cxins6.pxbyomo4pp1mnrao 
    --discovery-token-ca-cert-hash sha256:35876ef6f2e5fe7eb5c7bb709dbd5e09d0e9e7d3adf41cbe708eec4fb586c8d6
    
#5、配置kubectl工具
$ mkdir -p /root/.kube
$ sudo cp /etc/kubernetes/admin.conf /root/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

#6、查看主节点状态
$ NAME     STATUS   ROLES        AGE     VERSION
master    NotReady   master       27h     v1.17.1

#7、部署flannel网络
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

三、安装kubeedge集群

3.1、安装CloudCore (在cloudmaster节点操作)

安装有两种方式,一种源码编译手动安装,还有一种是使用ke提供的工具-keadm。手动安装比较繁琐,对于新手而言是一种很大的心智负担,最好大家还是都用keadm这个工具去安装,但是,这种方式安装最大的问题就是国内的墙的问题会导致很多某些资源无法下载,比如说 CRD的yaml,cloudcore启动的service,所以我会结合两者,采用半手动半工具的安装方式去完成ke的集群搭建。

#1、下载keadm
$ wget https://github.com/kubeedge/kubeedge/releases/download/v1.5.0/keadm-v1.5.0-linux-amd64.tar.gz 
#解压
$ tar -zxvf keadm-v1.5.0-linux-amd64.tar.gz 

$ cd keadm-v1.5.0-linux-amd64/keadm && chmod +x keadm && mv keadm /usr/local/bin
#验证keadm是否安装成功
$ keadm version
version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.0", GitCommit:"8b0913e04ef4ef826af6715d336e23a66e3774df", GitTreeState:"clean", BuildDate:"2020-11-13T08:04:56Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}

#2、使用keadm安装cloudcore
keadm init --advertise-address=10.139.8.210 --kubeedge-version=1.5.0
Kubernetes version verification passed, KubeEdge installation will start...
--2021-06-1 13:20:41--  https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_device.yaml
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.76.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.76.133|:443... connected.
Unable to establish SSL connection.
Converted links in 0 files in 0 seconds.
Error: failed to run 'sh -c cd /etc/kubeedge/crds/devices && wget -k --no-check-certificate --progress=bar:force https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_device.yaml' because of error : exit status 4
Usage:
  keadm init [flags]

Examples:

keadm init

- This command will download and install the default version of KubeEdge cloud component

keadm init --kubeedge-version=1.5.0  --kube-config=/root/.kube/config

  - kube-config is the absolute path of kubeconfig which used to secure connectivity between cloudcore and kube-apiserver


Flags:
      --advertise-address string   Use this key to set IPs in cloudcore's certificate SubAltNames field. eg: 10.10.102.78,10.10.102.79
      --domainname string          Use this key to set domain names in cloudcore's certificate SubAltNames field. eg: www.cloudcore.cn,www.kubeedge.cn
  -h, --help                       help for init
      --kube-config string         Use this key to set kube-config path, eg: $HOME/.kube/config (default "/root/.kube/config")
      --kubeedge-version string    Use this key to download and use the required KubeEdge version
      --master string              Use this key to set K8s master address, eg: http://127.0.0.1:8080
      --tarballpath string         Use this key to set the temp directory path for KubeEdge tarball, if not exist, download it

F0211 13:20:41.433946   15198 keadm.go:27] failed to run 'sh -c cd /etc/kubeedge/crds/devices && wget -k --no-check-certificate --progress=bar:force https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_device.yaml' because of error : exit status 4
goroutine 1 [running]:
k8s.io/klog.stacks(0xc0000d3e00, 0xc000026480, 0x122, 0x176)
	/root/codes/src/github.com/kubeedge/kubeedge/vendor/k8s.io/klog/klog.go:883 +0xb9
k8s.io/klog.(*loggingT).output(0x2cb3c80, 0xc000000003, 0xc0000b4b60, 0x29d13f1, 0x8, 0x1b, 0x0)
	/root/codes/src/github.com/kubeedge/kubeedge/vendor/k8s.io/klog/klog.go:834 +0x35f
k8s.io/klog.(*loggingT).printDepth(0x2cb3c80, 0xc000000003, 0x1, 0xc000843f68, 0x1, 0x1)
	/root/codes/src/github.com/kubeedge/kubeedge/vendor/k8s.io/klog/klog.go:706 +0x12d
k8s.io/klog.(*loggingT).print(...)
	/root/codes/src/github.com/kubeedge/kubeedge/vendor/k8s.io/klog/klog.go:697
k8s.io/klog.Fatal(...)
	/root/codes/src/github.com/kubeedge/kubeedge/vendor/k8s.io/klog/klog.go:1264
main.main()
	/root/codes/src/github.com/kubeedge/kubeedge/keadm/cmd/keadm/keadm.go:27 +0x8a

--advertise-address=xxx.xx.xx.xx 这里的xxx.xx.xx.xx换成master机器的ip,可以是内网地址,也可以是公网ip地址,--kubeedge-version=1.5.0 意思是指定安装的ke的版本,如果你默认不指定那么keadm会自动去下载最新的版本。很遗憾,我在执行

keadm init --advertise-address=xxx.xx.xx.xx --kubeedge-version=1.5.0

命令的时候出错了,这个错的问题在于网络被墙了,特别是在公有云的虚拟机上,出现这种问题的概率特别大,这种问题咋解决,一种是翻墙翻出去,另外一种是在/etc/hosts下添加如下内容

# GitHub Start
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
# GitHub End

3.2、离线下载安装过程对应的文件

如果试了上述方法还是不行,只能手动把相对应的文件下载到本地,下载地址
https://github.com/kubeedge/kubeedge/tree/master/build/crds

$ mkdir -p /etc/kubeedge/crds/devices && mkdir -p /etc/kubeedge/crds/reliablesyncs 

1)、devices_v1alpha2_devicemodel.yaml

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: devicemodels.devices.kubeedge.io
spec:
  group: devices.kubeedge.io
  names:
    kind: DeviceModel
    plural: devicemodels
  scope: Namespaced
  validation:
    openAPIV3Schema:
      properties:
        apiVersion:
          description: 'APIVersion defines the versioned schema of this representation
            of an object. Servers should convert recognized schemas to the latest
            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
          type: string
        kind:
          description: 'Kind is a string value representing the REST resource this
            object represents. Servers may infer this from the endpoint the client
            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          properties:
            properties:
              description: 'Required: List of device properties.'
              items:
                properties:
                  description:
                    description: The device property description.
                    type: string
                  name:
                    description: 'Required: The device property name.'
                    type: string
                  type:
                    description: 'Required: PropertyType represents the type and data
                      validation of the property.'
                    properties:
                      int:
                        properties:
                          accessMode:
                            description: 'Required: Access mode of property, ReadWrite
                              or ReadOnly.'
                            type: string
                            enum:
                              - ReadOnly
                              - ReadWrite
                          defaultValue:
                            format: int64
                            type: integer
                          maximum:
                            format: int64
                            type: integer
                          minimum:
                            format: int64
                            type: integer
                          unit:
                            description: The unit of the property
                            type: string
                        required:
                          - accessMode
                        type: object
                      string:
                        properties:
                          accessMode:
                            description: 'Required: Access mode of property, ReadWrite
                              or ReadOnly.'
                            type: string
                            enum:
                              - ReadOnly
                              - ReadWrite
                          defaultValue:
                            type: string
                        required:
                          - accessMode
                        type: object
                      double:
                        properties:
                          accessMode:
                            description: 'Required: Access mode of property, ReadWrite
                              or ReadOnly.'
                            type: string
                            enum:
                              - ReadOnly
                              - ReadWrite
                          defaultValue:
                            format: double
                            type: number
                          maximum:
                            format: double
                            type: number
                          minimum:
                            format: double
                            type: number
                          unit:
                            description: The unit of the property
                            type: string
                        required:
                          - accessMode
                        type: object
                      float:
                        properties:
                          accessMode:
                            description: 'Required: Access mode of property, ReadWrite
                              or ReadOnly.'
                            type: string
                            enum:
                              - ReadOnly
                              - ReadWrite
                          defaultValue:
                            format: float
                            type: number
                          maximum:
                            format: float
                            type: number
                          minimum:
                            format: float
                            type: number
                          unit:
                            description: The unit of the property
                            type: string
                        required:
                          - accessMode
                        type: object
                      boolean:
                        properties:
                          accessMode:
                            description: 'Required: Access mode of property, ReadWrite
                              or ReadOnly.'
                            type: string
                            enum:
                              - ReadOnly
                              - ReadWrite
                          defaultValue:
                            type: boolean
                        required:
                          - accessMode
                        type: object
                      bytes:
                        properties:
                          accessMode:
                            description: 'Required: Access mode of property, ReadWrite
                              or ReadOnly.'
                            type: string
                            enum:
                              - ReadOnly
                              - ReadWrite
                        required:
                          - accessMode
                        type: object
                    type: object
                required:
                  - name
                  - type
                type: object
              type: array
          type: object
  version: v1alpha2

2)、devices_v1alpha2_device.yaml

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: devices.devices.kubeedge.io
spec:
  group: devices.kubeedge.io
  names:
    kind: Device
    plural: devices
  scope: Namespaced
  validation:
    openAPIV3Schema:
      properties:
        apiVersion:
          description: 'APIVersion defines the versioned schema of this representation
            of an object. Servers should convert recognized schemas to the latest
            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
          type: string
        kind:
          description: 'Kind is a string value representing the REST resource this
            object represents. Servers may infer this from the endpoint the client
            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          properties:
            deviceModelRef:
              description: 'Required: DeviceModelRef is reference to the device model
                used as a template to create the device instance.'
              type: object
            nodeSelector:
              description: NodeSelector indicates the binding preferences between
                devices and nodes. Refer to k8s.io/kubernetes/pkg/apis/core NodeSelector
                for more details
              type: object
            protocol:
              description: 'Required: The protocol configuration used to connect to
                the device.'
              properties:
                bluetooth:
                  description: Protocol configuration for bluetooth
                  properties:
                    macAddress:
                      description: Unique identifier assigned to the device.
                      type: string
                  type: object
                modbus:
                  description: Protocol configuration for modbus
                  properties:
                    slaveID:
                      description: Required. 0-255
                      format: int64
                      type: integer
                      minimum: 0
                      maximum: 255
                  required:
                    - slaveID
                  type: object
                opcua:
                  description: Protocol configuration for opc-ua
                  properties:
                    certificate:
                      description: Certificate for access opc server.
                      type: string
                    password:
                      description: Password for access opc server.
                      type: string
                    privateKey:
                      description: PrivateKey for access opc server.
                      type: string
                    securityMode:
                      description: Defaults to "none".
                      type: string
                    securityPolicy:
                      description: Defaults to "none".
                      type: string
                    timeout:
                      description: Timeout seconds for the opc server connection.???
                      format: int64
                      type: integer
                    url:
                      description: 'Required: The URL for opc server endpoint.'
                      type: string
                    userName:
                      description: Username for access opc server.
                      type: string
                  required:
                    - url
                  type: object
                common:
                  description: Common part of protocol configuration
                  properties:
                    com:
                      properties:
                        baudRate:
                          description: Required. BaudRate 115200|57600|38400|19200|9600|4800|2400|1800|1200|600|300|200|150|134|110|75|50
                          format: int64
                          type: integer
                          enum:
                            - 115200
                            - 57600
                            - 38400
                            - 19200
                            - 9600
                            - 4800
                            - 2400
                            - 1800
                            - 1200
                            - 600
                            - 300
                            - 200
                            - 150
                            - 134
                            - 110
                            - 75
                            - 50
                        dataBits:
                          description: Required. Valid values are 8, 7, 6, 5.
                          format: int64
                          type: integer
                          enum:
                            - 8
                            - 7
                            - 6
                            - 5
                        parity:
                          description: Required. Valid options are "none", "even",
                            "odd". Defaults to "none".
                          type: string
                          enum:
                            - none
                            - even
                            - odd
                        serialPort:
                          description: Required.
                          type: string
                        stopBits:
                          description: Required. Bit that stops 1|2
                          format: int64
                          type: integer
                          enum:
                            - 1
                            - 2
                      required:
                        - baudRate
                        - dataBits
                        - parity
                        - serialPort
                        - stopBits
                      type: object
                    tcp:
                      properties:
                        ip:
                          description: Required.
                          type: string
                        port:
                          description: Required.
                          format: int64
                          type: integer
                      required:
                        - ip
                        - port
                      type: object
                    commType:
                      description: Communication type, like tcp client, tcp server or COM
                      type: string
                    reconnTimeout:
                      description: Reconnection timeout
                      type: integer
                    reconnRetryTimes:
                      description: Reconnecting retry times
                      type: integer
                    collectTimeout:
                      description: 'Define timeout of mapper collect from device.'
                      format: int64
                      type: integer
                    collectRetryTimes:
                      description: 'Define retry times of mapper will collect from device.'
                      format: int64
                      type: integer
                    collectType:
                      description: 'Define collect type, sync or async.'
                      type: string
                      enum:
                        - sync
                        - async
                    customizedValues:
                      description: Customized values for provided protocol
                      type: object
                  type: object
                customizedProtocol:
                  description: Protocol configuration for customized Protocol
                  properties:
                    protocolName:
                      description: The name of protocol
                      type: string
                    configData:
                      description: customized config data
                      type: object
                  required:
                    - protocolName
                  type: object
              type: object
            propertyVisitors:
              description: 'Required: List of property visitors which describe how
                to access the device properties. PropertyVisitors must unique by propertyVisitor.propertyName.'
              items:
                properties:
                  bluetooth:
                    description: Bluetooth represents a set of additional visitor
                      config fields of bluetooth protocol.
                    properties:
                      characteristicUUID:
                        description: 'Required: Unique ID of the corresponding operation'
                        type: string
                      dataConverter:
                        description: Responsible for converting the data being read
                          from the bluetooth device into a form that is understandable
                          by the platform
                        properties:
                          endIndex:
                            description: 'Required: Specifies the end index of incoming
                              byte stream to be considered to convert the data the
                              value specified should be inclusive for example if 3
                              is specified it includes the third index'
                            format: int64
                            type: integer
                          orderOfOperations:
                            description: Specifies in what order the operations(which
                              are required to be performed to convert incoming data
                              into understandable form) are performed
                            items:
                              properties:
                                operationType:
                                  description: 'Required: Specifies the operation
                                    to be performed to convert incoming data'
                                  type: string
                                  enum:
                                    - Add
                                    - Subtract
                                    - Multiply
                                    - Divide
                                operationValue:
                                  description: 'Required: Specifies with what value
                                    the operation is to be performed'
                                  format: double
                                  type: number
                              type: object
                            type: array
                          shiftLeft:
                            description: Refers to the number of bits to shift left,
                              if left-shift operation is necessary for conversion
                            format: int64
                            type: integer
                          shiftRight:
                            description: Refers to the number of bits to shift right,
                              if right-shift operation is necessary for conversion
                            format: int64
                            type: integer
                          startIndex:
                            description: 'Required: Specifies the start index of the
                              incoming byte stream to be considered to convert the
                              data. For example: start-index:2, end-index:3 concatenates
                              the value present at second and third index of the incoming
                              byte stream. If we want to reverse the order we can
                              give it as start-index:3, end-index:2'
                            format: int64
                            type: integer
                        required:
                          - endIndex
                          - startIndex
                        type: object
                      dataWrite:
                        description: 'Responsible for converting the data coming from
                          the platform into a form that is understood by the bluetooth
                          device For example: "ON":[1], "OFF":[0]'
                        type: object
                    required:
                      - characteristicUUID
                    type: object
                  modbus:
                    description: Modbus represents a set of additional visitor config
                      fields of modbus protocol.
                    properties:
                      isRegisterSwap:
                        description: Indicates whether the high and low register swapped.
                          Defaults to false.
                        type: boolean
                      isSwap:
                        description: Indicates whether the high and low byte swapped.
                          Defaults to false.
                        type: boolean
                      limit:
                        description: 'Required: Limit number of registers to read/write.'
                        format: int64
                        type: integer
                      offset:
                        description: 'Required: Offset indicates the starting register
                          number to read/write data.'
                        format: int64
                        type: integer
                      register:
                        description: 'Required: Type of register'
                        type: string
                        enum:
                          - CoilRegister
                          - DiscreteInputRegister
                          - InputRegister
                          - HoldingRegister
                      scale:
                        description: The scale to convert raw property data into final
                          units. Defaults to 1.0
                        format: double
                        type: number
                    required:
                      - limit
                      - offset
                      - register
                    type: object
                  opcua:
                    description: Opcua represents a set of additional visitor config
                      fields of opc-ua protocol.
                    properties:
                      browseName:
                        description: The name of opc-ua node
                        type: string
                      nodeID:
                        description: 'Required: The ID of opc-ua node, e.g. "ns=1,i=1005"'
                        type: string
                    required:
                      - nodeID
                    type: object
                  customizedProtocol:
                    description: customized protocol
                    properties:
                      protocolName:
                        description: The name of protocol
                        type: string
                      configData:
                        description: customized config data
                        type: object
                    required:
                      - protocolName
                      - configData
                    type: object
                  propertyName:
                    description: 'Required: The device property name to be accessed.
                      This should refer to one of the device properties defined in
                      the device model.'
                    type: string
                  reportCycle:
                    description: 'Define how frequent mapper will report the value.'
                    format: int64
                    type: integer
                  collectCycle:
                    description: 'Define how frequent mapper will collect from device.'
                    format: int64
                    type: integer
                  customizedValues:
                    description: Customized values for visitor of provided protocols
                    type: object
                required:
                  - propertyName
                type: object
              type: array
            data:
              properties:
                dataTopic:
                  description: 'Topic used by mapper, all data collected from dataProperties
                    should be published to this topic,
                    the default value is $ke/events/device/+/data/update'
                  type: string
                dataProperties:
                  description: A list of data properties, which are not required to be processed by edgecore
                  items:
                    properties:
                      propertyName:
                        description: 'Required: The property name for which the desired/reported
                          values are specified. This property should be present in the
                          device model.'
                        type: string
                      metadata:
                        description: Additional metadata like filter policy, should be k-v format
                        type: object
                    required:
                      - propertyName
                    type: object
                  type: array
              type: object
          required:
            - deviceModelRef
            - nodeSelector
          type: object
        status:
          properties:
            twins:
              description: A list of device twins containing desired/reported desired/reported
                values of twin properties. A passive device won't have twin properties
                and this list could be empty.
              items:
                properties:
                  desired:
                    description: 'Required: the desired property value.'
                    properties:
                      metadata:
                        description: Additional metadata like timestamp when the value
                          was reported etc.
                        type: object
                      value:
                        description: 'Required: The value for this property.'
                        type: string
                    required:
                      - value
                    type: object
                  propertyName:
                    description: 'Required: The property name for which the desired/reported
                      values are specified. This property should be present in the
                      device model.'
                    type: string
                  reported:
                    description: 'Required: the reported property value.'
                    properties:
                      metadata:
                        description: Additional metadata like timestamp when the value
                          was reported etc.
                        type: object
                      value:
                        description: 'Required: The value for this property.'
                        type: string
                    required:
                      - value
                    type: object
                required:
                  - propertyName
                type: object
              type: array
          type: object
  version: v1alpha2

3)、cluster_objectsync_v1alpha1.yaml

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: clusterobjectsyncs.reliablesyncs.kubeedge.io
spec:
  group: reliablesyncs.kubeedge.io
  names:
    kind: ClusterObjectSync
    plural: clusterobjectsyncs
  scope: Cluster
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      properties:
        apiVersion:
          description: 'APIVersion defines the versioned schema of this representation
            of an object. Servers should convert recognized schemas to the latest
            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
          type: string
        kind:
          description: 'Kind is a string value representing the REST resource this
            object represents. Servers may infer this from the endpoint the client
            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          properties:
            objectType:
              description: NodeSelector indicates the binding preferences between
                devices and nodes. Refer to k8s.io/kubernetes/pkg/apis/core NodeSelector
                for more details
              type: string
            objectName:
              description: 'Required: The protocol configuration used to connect to
                the device.'
              type: string
        status:
          properties:
            objectResourceVersion:
              description: 'Required: DeviceModelRef is reference to the device model
                            used as a template to create the device instance.'
              type: string
  version: v1alpha1

4)、objectsync_v1alpha1.yaml

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  labels:
    controller-tools.k8s.io: "1.0"
  name: objectsyncs.reliablesyncs.kubeedge.io
spec:
  group: reliablesyncs.kubeedge.io
  names:
    kind: ObjectSync
    plural: objectsyncs
  scope: Namespaced
  subresources:
    status: {}
  validation:
    openAPIV3Schema:
      properties:
        apiVersion:
          description: 'APIVersion defines the versioned schema of this representation
            of an object. Servers should convert recognized schemas to the latest
            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
          type: string
        kind:
          description: 'Kind is a string value representing the REST resource this
            object represents. Servers may infer this from the endpoint the client
            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
          type: string
        metadata:
          type: object
        spec:
          properties:
            objectType:
              description: NodeSelector indicates the binding preferences between
                devices and nodes. Refer to k8s.io/kubernetes/pkg/apis/core NodeSelector
                for more details
              type: string
            objectName:
              description: 'Required: The protocol configuration used to connect to
                the device.'
              type: string
        status:
          properties:
            objectResourceVersion:
              description: 'Required: DeviceModelRef is reference to the device model
                           used as a template to create the device instance.'
              type: string
  version: v1alpha1

5)、cloudcore.service

[Unit]
Description=cloudcore.service

[Service]
Type=simple
ExecStart=/etc/kubeedge/kubeedge-v1.5.0-linux-amd64/cloud/cloudcore/cloudcore --logtostderr=false --log-file=/var/log/kubeedge/cloudcore.log -v=3
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

6)、
kubeedge-v1.5.0-linux-amd64.tar.gz

$ wget https://github.com/kubeedge/kubeedge/releases/download/v1.5.0/kubeedge-v1.5.0-linux-amd64.tar.gz

3.3、准备完成后进行初始化

$ keadm init --advertise-address=10.139.8.210 --kubeedge-version=1.5.0
Kubernetes version verification passed, KubeEdge installation will start...
Expected or Default KubeEdge version 1.5.0 is already downloaded and will checksum for it.
kubeedge-v1.5.0-linux-amd64.tar.gz checksum:
checksum_kubeedge-v1.5.0-linux-amd64.tar.gz.txt content:
[Run as service] service file already exisits in /etc/kubeedge//cloudcore.service, skip download
kubeedge-v1.5.0-linux-amd64/
kubeedge-v1.5.0-linux-amd64/edge/
kubeedge-v1.5.0-linux-amd64/edge/edgecore
kubeedge-v1.5.0-linux-amd64/cloud/
kubeedge-v1.5.0-linux-amd64/cloud/csidriver/
kubeedge-v1.5.0-linux-amd64/cloud/csidriver/csidriver
kubeedge-v1.5.0-linux-amd64/cloud/admission/
kubeedge-v1.5.0-linux-amd64/cloud/admission/admission
kubeedge-v1.5.0-linux-amd64/cloud/cloudcore/
kubeedge-v1.5.0-linux-amd64/cloud/cloudcore/cloudcore
kubeedge-v1.5.0-linux-amd64/version

KubeEdge cloudcore is running, For logs visit:  /var/log/kubeedge/cloudcore.log
CloudCore started

如果你想把cloudcore交给systemed托管的话切记把cloudcore.service移到/etc/systemed/system下面然后再执行下systemctl daemon-reload

3.4、查看cloudedge加入集群的token

$ keadm gettoken
48ce0f652d396b56ce2b814a62fd85833e3b02273b374aca3d53557d98d375be.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjI2MDA3ODB9.JnW6PfLFEldpAZkNgoAe6Aaw2l0H11MtZIUjB1zfTk4

3.4、安装edgecore

#安装keadm命令
$ mkdir -p /etc/kubeedge && wget https://github.com/kubeedge/kubeedge/releases/download/v1.5.0/kubeedge-v1.5.0-linux-arm.tar.gz

#加入集群
$ keadm join --cloudcore-ipport=xx.xx.xx.xx:10000 --kubeedge-version=1.5.0 --token=<token>

-cloudcore-ipport表示的是cloudcore的对外暴露的ip就是公网ip了,如果你是在公有云服务器上的记得打开安全组的端口
--kubeedge-version就是ke的版本
--token= 这个token是上一步集群的token

3.5、检查ke集群是否安装完成

[root@master kubeedge]# kubectl get no
NAME          STATUS   ROLES             AGE     VERSION
cloudmaster   Ready    cloudmaster       27h     v1.17.1
cloudedge     Ready    agent,edge        4h24m   v1.19.3-kubeedge-v1.5.0

总结:kubeedge的安装到此结束,有想学习的小伙伴快快开始吧,当然学习kubeedge之前最好先了解一下kubernetes技术,这样不至于在操作的时候不知所措了。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>