892 字
4 分钟
KubeEdge 边缘计算学习手册

1. KubeEdge 云端部署#

1.1 环境准备#

  • 云端:k8s-allinone 镜像,hostname 为 master
  • 边端:hostname 为 kubeedge-node
Terminal window
# 云端和边端都配置 /etc/hosts
172.129.20.14 master
172.129.20.21 kubeedge-node

1.2 配置 YUM 仓库和 Docker#

Terminal window
# 云端
tar -zxvf kubernetes_kubeedge_allinone.tar.gz -C /opt/
mv /etc/yum.repos.d/* /media/
cat > /etc/yum.repos.d/local.repo <<EOF
[docker]
name=docker
baseurl=file:///opt/yum
gpgcheck=0
enabled=1
EOF
# 搭建 FTP 给边端用
yum -y install vsftpd
echo "anon_root=/opt" >> /etc/vsftpd/vsftpd.conf
systemctl enable vsftpd --now

Docker daemon.json(云端和边端相同):

{
"log-driver": "json-file",
"log-opts": { "max-size": "200m", "max-file": "5" },
"default-ulimits": {
"nofile": { "Name": "nofile", "Hard": 655360, "Soft": 655360 },
"nproc": { "Name": "nproc", "Hard": 655360, "Soft": 655360 }
},
"live-restore": true,
"oom-score-adjust": -1000,
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 10,
"insecure-registries": ["0.0.0.0/0"]
}
Terminal window
systemctl daemon-reload && systemctl restart docker

1.3 部署 Harbor#

Terminal window
cd /opt/
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
tar -zxvf harbor-offline-installer-v2.5.0.tgz
cd harbor && cp harbor.yml.tmpl harbor.yml
vi harbor.yml # hostname: 云端IP
./install.sh
docker login -u admin -p Harbor12345 master
# 创建 k8s 命名空间(公开)
cd /opt/k8simage/ && sh load.sh && sh push.sh

1.4 配置 Pod 亲和性#

Terminal window
# 修改 flannel,排除边端节点
kubectl edit daemonset -n kube-system kube-flannel-ds
# 在 containers 前添加 nodeAffinity,排除 node-role.kubernetes.io/edge
# 修改 kube-proxy,同上
kubectl edit daemonset -n kube-system kube-proxy

1.5 初始化云端#

Terminal window
cd /opt/kubeedge/
mv keadm /usr/bin/
mkdir /etc/kubeedge
tar -zxf kubeedge-1.11.1.tar.gz
cp -rf kubeedge-1.11.1/build/tools/* /etc/kubeedge/
cp -rf kubeedge-1.11.1/build/crds/ /etc/kubeedge/
tar -zxf kubeedge-v1.11.1-linux-amd64.tar.gz
cp -rf * /etc/kubeedge/
# 初始化(advertise-address 为 master IP)
keadm deprecated init --kubeedge-version=1.11.1 --advertise-address=172.129.20.14
netstat -ntpl | grep cloudcore
# tcp6 :::10000 LISTEN cloudcore
# tcp6 :::10002 LISTEN cloudcore

2. KubeEdge 边端部署#

Terminal window
# 从云端复制工具和配置
scp /usr/bin/keadm root@kubeedge-node:/usr/local/bin/
scp -r /etc/kubeedge/* root@kubeedge-node:/etc/kubeedge/
# 获取 token
keadm gettoken
# 边端加入集群
keadm deprecated join --cloudcore-ipport=172.129.20.14:10000 \
--kubeedge-version=1.11.1 --token=<token值>
# 遇到 yum 报错时
rm -rf /etc/yum.repos.d/epel*
systemctl status edgecore
# 云端验证
kubectl get nodes

3. 云端监控服务配置#

Terminal window
export CLOUDCOREIPS="172.129.20.14"
cd /etc/kubeedge/
./certgen.sh stream
# 修改 cloudcore.yaml
vi /etc/kubeedge/config/cloudcore.yaml
# cloudStream.enable: true
# cloudStream.streamPort: 10003
# router.enable: true
# router.port: 9443
# 修改边端 edgecore.yaml
vi /etc/kubeedge/config/edgecore.yaml
# edgeStream.enable: true
# serviceBus.enable: true
# 重启云端
kill -9 $(netstat -lntup | grep cloudcore | awk 'NR==1 {print $7}' | cut -d '/' -f 1)
cp -rfv cloudcore.service /usr/lib/systemd/system/
systemctl start cloudcore.service
netstat -lntup | grep 10003
# 重启边端
systemctl restart edgecore.service
# 验证
kubectl top nodes

4. 云端 Python 环境搭建#

Terminal window
tar -zxvf gcc-repo.tar.gz
cat > /etc/yum.repos.d/gcc.repo <<EOF
[gcc]
name=gcc
baseurl=file:///root/gcc-repo
gpgcheck=0
enabled=1
EOF
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel \
readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc
tar -zxvf volume_packages.tar.gz
tar -zxvf Python-3.7.3.tar.gz
mkdir /usr/local/python3
cd Python-3.7.3/
./configure --prefix=/usr/local/python3
make && make install
yes | mv volume_packages/site-packages/* /usr/local/python3/lib/python3.7/site-packages/
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
pip3 list

5. 边端 MongoDB 数据库#

Terminal window
tar -zxvf mongoRepo.tar.gz -C /opt/
cat > /etc/yum.repos.d/mongo.repo <<EOF
[mongo]
name=mongo
enabled=1
gpgcheck=0
baseurl=file:///opt/mongoRepo
EOF
yum -y install mongodb*
# 修改绑定地址
vi /etc/mongod.conf
# bindIp: 0.0.0.0
systemctl restart mongod && systemctl enable mongod
netstat -lntup | grep 27017
# 创建数据库
mongo
> use edgesql
> db.createCollection("users")
> db.createCollection("ai_data")
> db.createCollection("ai_model")
> show collections

6. 边端 Nginx 前端部署#

Terminal window
yum install -y nginx
rm -rf /usr/share/nginx/html/*
mv ydy_cloudapp_front_dist/index.html /usr/share/nginx/html/
mv ydy_cloudapp_front_dist/static/ /usr/share/nginx/html/

Nginx 反向代理配置:

server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
location ~ ^/cloudedge/(.*) {
proxy_pass http://masterIP:30850/cloudedge/$1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type';
add_header 'Access-Control-Allow-Credentials' 'true';
}
}
Terminal window
nginx -t
systemctl restart nginx && systemctl enable nginx

7. 云端 FastAPI 微服务#

Terminal window
# 用户服务(端口 8046)
cd /root/ydy_cloudapp_backend_framework/fastapi_user/
python3 main.py &
# 修改 manager_user.py 中 MongoDBUrl 为边端 IP
# 云服务(端口 8070)
cd /root/ydy_cloudapp_backend_framework/fastapi_cloud/
python3 main.py &
# 边缘管理服务(端口 8045)
cd /root/ydy_cloudapp_backend_framework/fastapi_cloud_edge/
python3 main.py &
# AI PCB 检测服务(端口 8055)
cd /root/ydy_cloudapp_backend_framework/fastapi_ai_pcb/
vi pcb_detect_service.py # 注释 from pcb_detect import detect_image
python3 main.py &
# 网关服务(端口 30850)
cd /root/ydy_cloudapp_backend_framework/fastapi_gateway/fastapi_gateway_service/
python3 main.py &

访问地址:

  • 用户服务:http://云端IP:8046/docs
  • 云服务:http://云端IP:8070/docs
  • 边缘管理:http://云端IP:8045/docs
  • AI 服务:http://云端IP:8055/docs
  • 网关服务:http://云端IP:30850/docs

Windows HOSTS 映射:

172.129.20.14 localedge

最终访问:http://边端IP/index.html(test/123456)


8. 竞赛真题精选#

8.1 云端部署 KubeEdge cloudcore#

Terminal window
keadm deprecated init --kubeedge-version=1.11.1 --advertise-address=172.129.20.16
netstat -lntup | grep cloudcore

8.2 边端加入集群#

Terminal window
keadm gettoken
keadm deprecated join --cloudcore-ipport=172.129.20.33:10000 \
--kubeedge-version=1.11.1 --token=<token>

8.3 边缘应用部署#

Terminal window
# 安装 jq、Mariadb(密码 123456)
# 构建前后端镜像和 AI 镜像
# 编写 platform_deployment.yaml 部署到 ec-dashboard 命名空间
# 暴露端口 30080
# 通过平台部署 AI 应用(名称 analyzer)
KubeEdge 边缘计算学习手册
https://blog.xeu.asia/posts/kubeedge-guide/
作者
Xeu
发布于
2024-06-18
许可协议
CC BY-NC-SA 4.0