運行KubeEdge官方示例_Counter Demo 計數器
KubeEdge Counter Demo 計數器是一個偽設備,用戶無需任何額外的物理設備即可運行此演示,計數器在邊緣側運行,用戶可以從云側在 Web 中對其進行控制,也可以從云側在 Web 中獲得計數器值,原理圖如下:

先安裝好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 root@172.16.72.142:/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 <none> <none>
kubeedge-pi-counter-784d57c5d4-27v5g 1/1 Running 0 30m <none> k8s-node-1 <none> <none>
瀏覽器訪問: http://172.16.72.143:8089/
因為使用的 hostNetwork 模式,所以直接訪問即可,

在web頁面上選擇ON,并點擊Execute,可以在edge邊緣節點上通過以下命令查看執行結果
docker logs -f counter-container-id
docker logs -f 8e2359446752

表示測驗成功
部署可能出現的問題
點擊沒有反應,頁面除錯工具F12查看,原因是jquery訪問不了------真是坑-----
https://code.jquery.com/jquery-1.10.2.min.js 訪問不了
https://code.jquery.com/jquery-1.10.2.min.js
修改為
https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js
進入容器
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/archives/kubeedge
https://zhuanlan.zhihu.com/p/342626632
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/291504.html
標籤:其他
