什么是kubeedge:
KubeEdge是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于kubernetes构建,并为网络应用程序提供基础架构支持。云和边缘之间的部署和元数据同步。 KubeEdge使用Apache 2.0许可。并且绝对可以免费用于个人或商业用途。
kubeedge目标是创建一个开放平台,使能边缘计算,将容器化应用编排功能扩展到边缘的节点和设备,后者基于kubernetes构建,并为云和边缘之间的网络,应用部署和元数据同步提供基础架构支持。
下面我们来安装一个可以实际操作的kubeedge环境!
主机名 |
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 |
$ 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
$ swapoff -a
$ sed -i 's/.*swap.*/#&/' /etc/fstab
$ echo "10.139.8.210 cloudmaster" >> /etc/hosts
$ echo "10.139.8.211 cloudedge" >> /etc/hosts
#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
#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
安装有两种方式,一种源码编译手动安装,还有一种是使用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
如果试了上述方法还是不行,只能手动把相对应的文件下载到本地,下载地址
https://github.com/kubeedge/kubeedge/tree/master/build/crds
$ mkdir -p /etc/kubeedge/crds/devices && mkdir -p /etc/kubeedge/crds/reliablesyncs
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
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
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
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
[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
$ 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
#安装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
[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技术,这样不至于在操作的时候不知所措了。