엣지 컴퓨팅 기반 클라우드 서비스 구축

TAEWOO HA·2023년 6월 18일
0

1. 목표

  • 엣지서버에 저장되고 있는 센서데이터를 쿠버네티스로 구축한 클라우드서버로 데이터를 전송

2. 클라우드(쿠버네티스) 환경구축

  • 이 실습에서는 BlueShift 인스턴스(PEC-C5, PEC-C3)를 이용하여 쿠버네티스기반 클라우드 환경을 구축합니다.

2.1. 인스턴스별 도커 및 쿠버네티스 설치

  • BlueShift 인스턴스(PEC-C5, PEC-C3)를 생성합니다.

    • PEC-C5 (5ore) 는 쿠버네티스 클러스터에서 마스터 노드로 사용합니다.
    • PEC-C3 (3ore) 는 쿠버네티스 클러스터에서 워커 노드로 사용합니다.
    • 인프라 환경은 다음과 같습니다.

      서버/인스턴스 설명
      RaspberryPi 센서가 장착된 서버활용
      BlueShift ALTRA-C1 Edge 컴퓨팅 서비스 서버활용
      BlueShift PEC-C5 K8S 마스터 서버활용
      BlueShift PEC-C3 (x2) K8S 워커 서버활용

  • 생성된 모든 인스턴스에 아래와 같이 도커 및 쿠버네티스를 설치합니다.

    sudo apt update; sudo apt upgrade -y
    sudo su
    git clone https://yona.xslab.co.kr/Programmers/1st-KDT-Linux
    cd 1st-KDT-Linux/k8s

  • 실습 다운로드

    sudo apt update; sudo apt upgrade -y
    sudo su
    git clone https://yona.xslab.co.kr/Programmers/1st-KDT-Linux
    cd 1st-KDT-Linux/k8s

  • 실행파일 권한설정

chmod +x docker-install.sh
chmod +x k8s-install-setup.sh

  • 도커 및 쿠버네티스 설치

    sudo ./docker-install.sh
    sudo ./k8s-install-setup.sh

2.2 쿠버네티스 클러스터 생성

  • 마스터노드 클러스터 생성

    MASTER_IP=hostname -I | awk '{print $1}'
    echo MASTERIPsudokubeadminitapiserveradvertiseaddress="MASTER_IP sudo kubeadm init --apiserver-advertise-address="{MASTER_IP}" --pod-network-cidr "10.244.0.0/16"
    mkdir -p HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):(id -g) $HOME/.kube/config

  • 워커 노드에 접속하고, 워커 노드를 마스터 노드에 등록합니다

    kubeadm join 172.16.10.45:6443 --token a4u23i.4v7q7vjp0wqy16b8 \
    --discovery-token-ca-cert-hash sha256:f821f9f4e2e8d99ee77d63c49c95ba5285f0886b6e522395684742603339b31d

        

3 클라우드 서비스 실행

3.1 서비스 실행

마스터 노드에서 PV(영구 볼륨)생성에 필요한 스토리지 클래스를 생성한 후 확인합니다.

cd ~/1st-KDT-Linux/k8s
kubectl apply -f local-path-storage.yaml
kubectl get storageclass

마스터 노드에서 Rabbitmq의 Deployment, Service를 생성합니다

kubectl apply -f rabbitmq.yaml
kubectl get all

마스터 노드에서 influxdb의 Deployment, Service,Pvc 를 생성합니다.

kubectl apply -f influxdb.yaml
kubectl get all
kubectl get pvc
kubectl get pv

influxdb의 파드가 다음과 같이 Pending 상태 일 때

kubectl get pvc를 실행해서 PVC의 상태를 확인합니다.
PVC의 상태가 Pending 상태라면 kubectl get storageclass를 실행해서 스토리지 클래스가 생성되어있는지 확인합니다.
kubectl delete -f influxdb.yaml, kubectl delete pvc influxdb-data-influxdb-0 로 PVC를 삭제합니다.
kubectl apply -f local-path-storage.yaml로 스토리지 클래스를 생성합니다.
kubectl apply -f influx.yaml 를 진행합니다.

service/influxdb의 ClusterIP를 확인 한 후 telegraf.yaml를 수정합니다.

kubectl get all
vim telegraf.yaml
-> ConfigMap에서 [[outpusts.influxdb]]섹션에서 url을 "http://<service/influxdb의 ClusterIP>:8086" 으로 변환합니다.

마스터 노드에서 telegraf의 Deployment, Service 를 생성합니다.

kubectl apply -f telegraf.yaml
kubectl get all
kubectl logs telegraf-<컨테이너 이름>

3.2. Rabbitmq MQTT 통신 세팅

마스터 노드에서 IP 및 MQTT 통신포트 확인합니다.

ip a
kubectl get all

엣지서버에 접속합니다.

  • docker-compose 파일에서 MQTT 통신 설정

    sudo su
    cd 1st-KDT-Linux/edgex
    vim docker-compose.yml

WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_ADDRESS에 K8s-Master Node ip 입력
WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_PORT에 Rabbitmq Pod의 1883포트와 대응되는 포트 입력

docker-compose 재실행

docker-compose down
docker-compose up -d

3.3 데이터 전송확인

라즈베리파이에 접속합니다.

  • 센서데이터를 전송합니다

    python Temp_Hum_Sensor.py

마스터 노드에 접속합니다.

  • 라즈베리파이에서 엣지서버를 거쳐 클라우드로 들어오는 데이터가 데이터베이스에 저장되는 지 확인합니다.

    kubectl get all

# Influx DB의 이름 확인
# kubectl exec -it <Influx DB 파드의 이름> bash
kubectl exec -it pod/influxdb-0 bash
## influxdb에 접속합니다.
influx

## database를 조회합니다.
show databases

## mqtt database를 사용합니다.
use mqtt 

## measurements를 조회합니다.
show measurements

## mqtt_consumer란 measurement에서 모든 데이터 조회합니다.
select * from mqtt_consumer
  • 실습 결과

influxdb 내의 센서 데이터를 삭제하고 다시 받고 싶을 때,

## influxdb에 접속합니다.
influx

## mqtt database를 사용합니다.
use mqtt 

## measurements를 조회합니다.
show measurements

## mqtt_consumer란 measurement에서 모든 데이터 조회합니다.
select * from mqtt_consumer

## mqtt_consumer란 measurement를 삭제합니다.
drop measurement mqtt_consumer

## measurements 조회시 아무것도 조회가 안되야합니다.
show measurements

## 센서 데이터를 재전송된 후 influxdb에 저장되면 measurements 조회시 mqtt_consumer가 조회되어야 합니다.
show measurements

## mqtt_consumer measurement에서 모든 데이터 조회합니다.
select * from mqtt_consumer

0개의 댓글