KubeEdge单服务器keink模式构建和部署
正常部署需要两台服务器,分别部署云端节点和边缘节点。在条件受限的环境,使用单台服务部署,参考文档kubeedge install-with-keink
docker环境准备
略
kubectl环境准备
软件包源配置
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 备份当前源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
# 替换为阿里云源
sudo tee /etc/apt/sources.list > /dev/null <<EOF
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF
# 更新软件包列表
sudo apt update
|
kubectl安装
1
2
3
4
5
6
7
8
9
10
| # 添加Kubernetes官方GPG密钥
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# 添加Kubernetes APT仓库
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 更新并安装
sudo apt update
#sudo apt-get install -y kubeadm kubelet kubectl
sudo apt-get install -y kubectl
|
golang环境准备
目录设置
离线安装golang release, 版本不能太高,建议使用1.23.0
1
2
3
4
5
6
7
8
9
10
11
| # 删除旧版本(如果有)
sudo rm -rf /usr/local/go
# 解压和拷贝到默认目录
tar -xzf go1.23.0.linux-amd64.tar.gz
sudo mv go /usr/local/
# 创建go_path目录
mkdir -p /root/go/src
mkdir -p /root/go/bin
mkdir -p /root/go/pkg
|
环境量设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 设置Go环境变量,GOPATH目录一般是/root/go
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export GOROOT=/usr/local/go' >> ~/.bashrc
# 重新加载环境变量
source ~/.bashrc
# 验证Go安装
go version
# 设置go.mod依赖包下载阿里云代理
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
go env -w GOSUMDB=sum.golang.google.cn
# 验证设置
go env GOPROXY
|
kubeedge源码编译环境准备
提前下载源码github kubeedge
1
2
3
4
5
6
7
8
9
10
11
12
| unzip -o kubeedge-master.zip
# 拷贝kubeedge源码到go_path目录,注意是两级kubeedge
mkdir -p /root/go/src/github.com/kubeedge/
mv /home/omara/kubeedge-deploy/kubeedge /root/go/src/github.com/kubeedge/
# 脚本授权
chmod -R 777 /root/go/src/github.com/kubeedge/
cd /root/go/src/github.com/kubeedge/kubeedge
# 下载依赖
go mod download
|
keink源码编译环境准备
编译工具准备
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 安装构建工具
sudo apt-get update
sudo apt-get install -y \
build-essential \
make \
gcc \
g++ \
git \
curl \
wget
# 验证安装
make --version
gcc --version
|
keink源码编译
提前下载源码github keink。后续的构建需要使用keink编译的二进制程序。
1
2
3
4
5
6
7
8
| unzip -o keink-main.zip
cd keink
# 下载go mod依赖
go mod download
# 编译
make
|
使用keink构建KubeEdge
1
2
3
4
5
| # keink需要使用Kind(Kubernetes in Docker)来创建本地Kubernetes集群
docker pull kindest/node:v1.26.15
# 在keink源码工程内执行
bin/keink build edge-image --kube-root /root/go/src/github.com/kubeedge/kubeedge/ --base-image kindest/node:v1.26.15
|
构建后,可以看到新的kindest/node docker镜像,docker ps
可以看到同一个镜像被用来创建运行两个容器,扮演不同的角色(控制平面和工作节点)。如果需要重新构建,先执行rm -rf _output/
也可以直接使用制作好的docker镜像,使用文档参考wjy2020/kubeedge-keink,docker pull wjy2020/kubeedge-keink:v1.21.0-kindest-node1.26.15
KubeEdge运行
1
| bin/keink create kubeedge --image kubeedge/node:latest --wait 120s
|
KubeEdge状态检查
正常应该能看到control-plane
和edge
两个节点。
1
2
| kubectl get node -owide
kubectl get pod -A
|
简单设备接入KubeEdge
设备接入后,可以部署kubeedge/dashboard并在页面上看到设备信息。
设备模型定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| apiVersion: devices.kubeedge.io/v1beta1
kind: DeviceModel
metadata:
name: simple-temp-humidity-sensor
namespace: default
spec:
properties:
- name: temperature
description: Temperature reading in Celsius
type: FLOAT
unit: "°C"
accessMode: ReadOnly
- name: humidity
description: Humidity reading in percentage
type: FLOAT
unit: "%"
accessMode: ReadOnly
|
设备信息定义
1
2
3
4
5
6
7
8
9
10
11
12
| apiVersion: devices.kubeedge.io/v1beta1
kind: Device
metadata:
name: simple-sensor-001
namespace: default
labels:
device: simple-temp-humidity-sensor
location: office
spec:
deviceModelRef:
name: simple-temp-humidity-sensor
nodeName: kind-worker
|
设备部署
1
2
3
4
5
6
| kubectl apply -f simple-device-model.yaml
kubectl apply -f simple-device.yaml
# 查看资源和验证
kubectl get devicemodels
kubectl get devices
|