KubeEdge官方示例运行成功_Counter Demo 计数器

运行KubeEdge官方示例_Counter Demo 计数器

KubeEdge Counter Demo 计数器是一个伪设备,用户无需任何额外的物理设备即可运行此演示。计数器在边缘侧运行,用户可以从云侧在 Web 中对其进行控制,也可以从云侧在 Web 中获得计数器值,原理图如下:

KubeEdge官方示例运行成功_Counter Demo 计数器_第1张图片

先安装好kubeedge

Linux安装kubeedge_亲测成功

kubeedge边缘节点安装

#在k8s-master 上执行,查看节点
kubectl get node

NAME         STATUS   ROLES        AGE   VERSION
k8s-master   Ready    master       34h   v1.19.2
k8s-node-1   Ready    agent,edge   79m   v1.19.3-kubeedge-v1.5.0

云端操作 在k8s-master 上执行

#下载示例代码
git clone https://github.com/kubeedge/examples.git $GOPATH/src/github.com/kubeedge/examples

#使用官方的示例仓库github会比较慢,这里可以使用我的加速仓库
git clone https://gitee.com/iot-kubeedge/kubeedge-examples.git $GOPATH/src/github.com/kubeedge/examples

#创建 device model
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds

#创建model
kubectl create -f kubeedge-counter-model.yaml

#创建device
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
#根据你的实际情况修改matchExpressions:
vim kubeedge-counter-instance.yaml
#主要修改的地方
- key: 'kubernetes.io/hostname'
  values:
    - k8s-node-1 #这里是节点名称

#运行yaml
kubectl create -f kubeedge-counter-instance.yaml

#部署云端应用
#云端应用web-controller-app用来控制边缘端的pi-counter-app应用,该程序默认监听的端口号为80,此处修改为8089
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app
vim main.go
beego.Run(":8089")

#构建镜像
make all
make docker

#部署web-controller-app
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
kubectl apply -f kubeedge-web-controller-app.yaml

#部署边缘端应用
#边缘端的pi-counter-app应用受云端应用控制,主要与mqtt服务器通信,进行简单的计数功能。
#修改代码与构建镜像
#需要将Makefile中的GOARCH修改为amd64才能运行该容器。默认是arm架构的
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/counter-mapper
vim Makefile
GOARCH=amd64 go build -o pi-counter-app main.go

#构建镜像
make all
make docker

#部署Pi Counter App
cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
kubectl apply -f kubeedge-pi-counter-app.yaml
#说明:为了防止Pod的部署卡在`ContainerCreating`,这里直接通过docker save、scp和docker load命令将镜像发布到边缘端
#因为边缘端没有这个镜像,只能手动弄过去,或者先上传到私有镜像仓库, 边缘端配置私有仓库地址,就可以直接从私有仓库下载
#这里就手动弄到边缘端
docker save -o kubeedge-pi-counter.tar kubeedge/kubeedge-pi-counter:v1.0.0

#传到边缘端
scp kubeedge-pi-counter.tar [email protected]:/data/
#在边缘端执行
docker load -i kubeedge-pi-counter.tar

#在边缘端查看容器启动日志,有没有报错
docker logs -f counter-container-id
docker logs -f 8e2359446752

体验demo

KubeEdge Demo的云端部分和边缘端的部分都已经部署完毕

kubectl get pods -o wide
NAME                                    READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES
kubeedge-counter-app-6984dcb4dd-jz5nh   1/1     Running   0          32m   172.16.72.143   k8s-master              
kubeedge-pi-counter-784d57c5d4-27v5g    1/1     Running   0          30m           k8s-node-1                   

浏览器访问: http://172.16.72.143:8089/
因为使用的 hostNetwork 模式,所以直接访问即可,

KubeEdge官方示例运行成功_Counter Demo 计数器_第2张图片

在web页面上选择ON,并点击Execute,可以在edge边缘节点上通过以下命令查看执行结果
docker logs -f counter-container-id
docker logs -f 8e2359446752

KubeEdge官方示例运行成功_Counter Demo 计数器_第3张图片

表示测试成功

部署可能出现的问题

点击没有反应,页面调试工具F12查看,原因是jquery访问不了------真是坑-----

https://code.jquery.com/jquer... 访问不了

https://code.jquery.com/jquer...
修改为
https://cdn.staticfile.org/jq...
进入容器
docker ps 找到kubeedge-counter-app
docker exec -it 21b11899d52f /bin/bash
修改不了,是个二进制文件了

修改源码,重新编译打包

cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/web-controller-app
vim views/layout.html 
https://code.jquery.com/jquery-1.10.2.min.js #把这个替换成 https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js

#重新编译打包
make all
make docker

cd $GOPATH/src/github.com/kubeedge/examples/kubeedge-counter-demo/crds
#删除
kubectl delete -f kubeedge-web-controller-app.yaml 
#重新启动
kubectl apply -f kubeedge-web-controller-app.yaml 
8080端口不通 ---又是坑--- 报错: dial tcp 127.0.0.1:8080: connect: connection refused
#查看云端日志
docker ps 
kubeedge-counter-app 找到容器id

docker logs -f 6e768c3db4eb
报错: dial tcp 127.0.0.1:8080: connect: connection refused
kubectl -s http://127.0.0.1:8080 get nodes

curl http://127.0.0.1:8080
8080端口不通

#查看kubelet日志
journalctl -xeu kubelet
journalctl -f -u kubelet

#报错
Failed to get system container stats for "/system.slice/docker.service": failed to get cg

原因:kubernetes和docker版本兼容性问题
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
CPUAccounting=true              ## 添加 CPUAccounting=true 选项,开启 systemd CPU 统计功能
MemoryAccounting=true           ## 添加 MemoryAccounting=true 选项,开启 systemd Memory 统计功能

systemctl daemon-reload
systemctl restart kubelet

还是没有用------------8080端口不通--------
netstat -tpnl
kubectl cluster-info

vim /etc/kubernetes/manifests/kube-apiserver.yaml 
insecure-port字段值为0,表示默认禁用了8080端口
--insecure-port=8080
重启apiserver容器 -----成功8080通了-------
docker restart ce5511548fe0

我们需要暴露 Kubernetes apiserver 的 http 端口8080用于与 cloudcore/kubectl 交互。
请按照以下步骤在 Kubernetes apiserver 中启用 http 端口。这样可以在边缘节点执行 kubectl get nodes -s 192.169.0.10:8080等命令,就像在 master 节点上一样。
kubectl get nodes -s 172.16.72.143:8080

-------计数器终于计数了-------成功----------------
访问:http://172.16.72.143:8089/
查看日志
docker logs -f dc59f4f3a877(kubeedge-counter-app)
docker logs -f dc59f4f3a877(kubeedge-pi-counter)

参考链接: https://www.dogfei.cn/archive...
https://zhuanlan.zhihu.com/p/...

你可能感兴趣的:(kubernetes)