2022-10-20
#3 [Edge-Computing] KubeEdge - 온도 데이터 수집 및 전송
2022-10-20
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

스크린샷, 2022-10-20 20-50-14.png

# 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

스크린샷, 2022-11-25 15-26-58.png


# kubectl apply -f kube-flannel.yml 
> 만약 정상적으로 생성이 되지 않는다면 버전을 v0.20.1로 변경합니다.


[] 모든 파드가 활성화 될때까지 기다립니다.
# watch kubectl get all -n kube-system

스크린샷, 2022-10-20 20-56-29.png

[] 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

스크린샷, 2022-11-25 16-48-02.png



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

스크린샷, 2022-12-01 16-04-39.png

Comment 0

Add a comment