#3 [Edge-Computing] KubeEdge - 온도 데이터 수집 및 전송
Tasks
KubeEdge - 온도 데이터 수집 및 전송#
1. Docker 설치 - PEC, Raspberry Pi에서 진행#
- cccr 교육자로 git을 다운받으신 후 docker-install.sh 파일을 실행합니다.
$ git clone -b 221021 http://112.217.198.156:9000/%EC%97%91%EC%84%B8%EC%8A%A4%EB%9E%A9/CCCR_Lecture
$ cd ~/CCCR_Lecture/221020
$ chmod +x docker-install.sh
$ sudo ./docker-install.sh
2. K8s 설치 - PEC#
- PEC에서 K8s를 설치합니다.
$ cd ~/CCCR_Lecture/221020
$ chmod +x k8s-install-setup.sh
[] 쿠버네티스 설치를 위해 swap을 off합니다.
$ sudo swapoff -a
$ sudo ./k8s-install-setup.sh
3. KubeEdge : Cloudside 설치 - PEC에서 진행#
- KubeEdge : Cloudside를 PEC에 설치합니다.
$ sudo su
# kubectl -n kube-system edit daemonsets.apps kube-proxy
[] DaemonSet의 spec.template.spec에 node affinty 추가합니다.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/edge
operator: DoesNotExist
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# vim kube-flannel.yml
[] flannel의 DaemonSet과 Deployment의 spec.template.spec에 node affinty 추가합니다.
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/edge
operator: DoesNotExist
- key: kubernetes.io/os
operator: In
values:
- linux
# kubectl apply -f kube-flannel.yml
> 만약 정상적으로 생성이 되지 않는다면 버전을 v0.20.1로 변경합니다.
[] 모든 파드가 활성화 될때까지 기다립니다.
# watch kubectl get all -n kube-system
[] KubeEdge를 다운로드 합니다.
# wget https://github.com/kubeedge/kubeedge/releases/download/v1.9.4/keadm-v1.9.4-linux-arm64.tar.gz -O - | tar xz && mv keadm-v1.9.4-linux-arm64/keadm/keadm /usr/local/bin && rm -rf keadm-v1.9.4-linux-arm64
[] KubeEdge - Cloud-Side 설치합니다.
# export CLOUDCOREIPS=`hostname -I | awk '{print $1}'`
# keadm init --advertise-address=${CLOUDCOREIPS} --kubeedge-version 1.9.4
ex) keadm init --advertise-address=192.168.0.235 --kubeedge-version 1.9.4
[] Cloudcore를 서비스 등록니다.
# pkill cloudcore
# mv /etc/kubeedge/cloudcore.service /etc/systemd/system/
# systemctl enable --now cloudcore
# systemctl status cloudcore
[] Edge-Side 등록을 위한 토큰을 확인합니다.
# keadm gettoken
4. KubeEdge : Edgeside 설치 - 라즈베리파이 에서 진행#
- 다음을 진행하여 라즈베리파이에 KubeEdge : Edgeside를 설치합나디.
[] 라즈베리파이에서 Docker가 정상적으로 실행될 수 있도록 메모리 세팅을 변경한 후 재부팅을 합니다.
$ sudo sed -i '$ s/$/ cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1 swapaccount=1/' /boot/cmdline.txt
$ sudo reboot
[] 재접속 하여 KubeEdge를 다운로드 합니다.
$ sudo su
# wget https://github.com/kubeedge/kubeedge/releases/download/v1.9.4/keadm-v1.9.4-linux-arm64.tar.gz -O - | tar xz && sudo mv keadm-v1.9.4-linux-arm64/keadm/keadm /usr/local/bin && rm -rf keadm-v1.9.4-linux-arm64
[] KubeEdge - Edge-Side 설치합니다.
# export EDGECOREIPS=`hostname -I | awk '{print $1}'`
# keadm join --cloudcore-ipport=${CLOUDCOREIPS} --kubeedge-version <kubeedge version> --token=<token>
ex) # keadm join --cloudcore-ipport=192.168.0.235:10000 --kubeedge-version 1.9.4 --token=2b922~~~~-ujnL7txotcn_KnY
[] Docker의 cgroup와 Edgecore의 cgroup이 일치시킵니다.
# sed -i 's/cgroupfs/systemd/g' /etc/kubeedge/config/edgecore.yaml
# systemctl restart edgecore
5. KubeEdge 설치 확인 - PEC에서 진행합니다.#
- 명령어를 실행시켰을 시 다음과 같은 화면이 나와야 합니다.
$ kubectl get nodes
6. Stream 설정#
6.1 Cloud-Side - PEC에서 진행합니다.#
[] Kubernetes 인증서를 확인합니다.
# ls /etc/kubernetes/pki/
[] CloudCoreIP 환경변수를 설정합니다.
# export CLOUDCOREIPS=`hostname -I | awk '{print $1}'`
# echo $CLOUDCOREIPS
[] cloudStream의 인증서 생성를 생성합니다.
# cd /etc/kubeedge
# wget https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/tools/certgen.sh
# bash certgen.sh stream
[] Cloud-Side에서 cloudStream를 활성화합니다.
# vim /etc/kubeedge/config/cloudcore.yaml (cloudStream.enable : false > true)
...
cloudStream:
enable: true (false에서 true로 변경)
streamPort: 10003
tlsStreamCAFile: /etc/kubeedge/ca/streamCA.crt
tlsStreamCertFile: /etc/kubeedge/certs/stream.crt
tlsStreamPrivateKeyFile: /etc/kubeedge/certs/stream.keyb
tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
tlsTunnelCertFile: /etc/kubeedge/certs/server.crt
tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key
tunnelPort: 10004
---
# systemctl restart cloudcore.service
[] DNAT를 설정합니다.
# iptables -t nat -A OUTPUT -p tcp --dport 10350 -j DNAT --to ${CLOUDCOREIPS}:10003
6.2 Edge-Side - 라즈베리파이에서 진행합니다.#
[] Edge-Side에서 edgeStream를 활성화합니다.
# vim /etc/kubeedge/config/edgecore.yaml (edgeStream.enable : false > true)
...
edgeStream:
enable: true (false에서 true로 변경)
handshakeTimeout: 30
readDeadline: 15
server: {CLOUD_SIDE_IP}:10004
tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
tlsTunnelCertFile: /etc/kubeedge/certs/server.crtkubectl get nodes
tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key
writeDeadline: 15
---
# systemctl restart edgecore.service
7. 온도 데이터 수집 및 전송 - 준비#
7.1 온도 데이터 수집 및 전송 실행 - PEC에서 진행합니다.#
[] example 저장소를 다운로드 합니다.
$ git clone https://github.com/kubeedge/examples.git
[] Edge node의 이름을 instance.yaml에 설정합니다.
$ cd ~/examples/temperature-demo/crds
$ sed -i "s/edge-node/<your edge node name>/g" instance.yaml
[] model & instance 생성 합니다. - model 먼저 생성 후 instance 생성, 삭제할때는 instance 삭제 후 model 삭제
$ kubectl apply -f model.yaml
$ kubectl apply -f instance.yaml
[] Deployment 수정 & 실행 합니다.
$ sed -i "/nodeSelector/d" deployment.yaml
$ sed -i "/edge-node/d" deployment.yaml
$ kubectl apply -f ~/examples/temperature-demo/deployment.yaml
8. 온도 데이터 수집 및 전송 실행 - 동작 확인#
- 다음을 실행햐여 온도 데이터를 정상적으로 받아오는지 확인합니다.
kubectl get device temperature -oyaml -w
Comment 0
Add a comment