이전시간에 센서(라즈베리파이)로부터 엣지 서버까지 연결 설정 완료

1. 클라우드(K8s) 환경 구축
1. 1개의 마스터 노드, 2개의 워커 노드 생성
1. 마스터 노드

2. 워커 노드

2. 3개의 인스턴스에 도커와 쿠버네티스 설치

3. k8s 클러스터 생성
1. 마스터 노드에서 클러스터 생성
MASTER_IP=`hostname -I | awk '{print $1}'`
echo $MASTER_IP
sudo kubeadm init --apiserver-advertise-address="${MASTER_IP}" --pod-network-cidr "10.244.0.0/16"

아래부분은 마스터 노드에 join하기 위한 명령어(복사해둬야함)

권한 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
2. 워커 노드를 마스터 노드에 등록
워커 노드에 접속해서 위에서 복사한 join 명령 실행
sudo su
kubeadm join 172.16.10.239:6443 --token 7q3zjo.t8zqk3nh0ya7hie1 \
--discovery-token-ca-cert-hash sha256:5e30124f630f1e07e1e321e5fdc8fe2becd0967c8a7575286b6af48cc0cf7e4f

두개의 워커 노드 모두 마스터 노드에 join 완료
kubectl get nodes

3. 마스터 노드에서 CNI 구성
CNI란?
- CNI(Container Network Interface)는 컨테이너 간의 통신을 구성하기 위한 플러그인
- CNI가 구성되지 않으면 K8s의 파드끼리의 통신은 불가
설정 방법
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml
설정 확인
kubectl get all --all-namespaces

ready로 변경된 것을 확인할 수 있음

2. 클라우드 실행
1. 서비스 실행
1. 마스터 노드에서 PV(영구 볼륨)생성에 필요한 스토리지 클래스를 생성
cd ~/1st-KDT-Linux/k8s
kubectl apply -f local-path-storage.yaml
kubectl get storageclass

2. 마스터 노드에서 Rabbitmq의 Deployment, Service를 생성
kubectl apply -f rabbitmq.yaml
kubectl get all

TCP 15672:30103에서 30103 포트를 포트포워딩 해서 아래와 같이 접속할 수 있다
3. 마스터 노드에서 influxdb의 Deployment, Service,Pvc 를 생성
influxdb란?
- 센서데이터는 시계열 데이터
- RDB(Relation DB)에 비해 시계열 데이터를 받아오는데 최적화된 DB
kubectl apply -f influxdb.yaml
kubectl get all
kubectl get pvc
kubectl get pv
잘 생성되었는지 확인

influxDB pod 접속
kubectl exec -it influxdb-0 bash

4. telegraf 설정
telegraf란?
- rabbitmq에서 mqtt 통신을 통해 받은 데이터를 influxDB에 맞추어 변환 후 전달
1. influxdb의 clusterIP주소 확인
kubeclt get all

2. telegraf.yaml파일 수정
vim telegraf.yaml
[[outpusts.influxdb]]섹션에서 url을 "http://<service/influxdb의 ClusterIP>:8086" 으로 변환

2. 마스터 노드에서 telegraf의 Deployment, Service 를 생성
kubectl apply -f telegraf.yaml
kubectl get all
kubectl logs telegraf-<컨테이너 이름>

생성 확인
kubectl logs telegraf-[컨테이너 이름]

2. Rabbitmq MQTT 통신 세팅
1. 마스터 노드에서 IP 및 MQTT 통신포트 확인
ip a
kubectl get all

2. 엣지서버에서 docker-compose 파일 에서 MQTT 통신 설정
sudo su
cd 1st-KDT-Linux/edgex
vim docker-compose.yml
docker-compose.yml
WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_ADDRESS에 K8s-Master Node ip 입력
WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_PORT에 Rabbitmq Pod의 1883포트와 대응되는 포트 입력 (위의 사진에서는 30102)
3. docker-compose 재실행
docker-compose down
docker-compose up -d
3. 데이터 전송 확인
1. 라즈베리파이에서 센서데이터 전송
python Temp_Hum_Sensor.py

2. 마스터 노드에서 데이터 확인
- 라즈베리파이에서 엣지서버를 거쳐 클라우드로 들어오는 데이터가 데이터베이스에 저장되는지 확인
kubectl get all
- Influx DB의 이름 확인
-> pod/influxdb-0
Influx DB 접속
kubectl exec -it pod/influxdb-0 bash
influx
show databases
use mqtt
show measurements
select * from mqtt_consumer
4. 결과 확인
