리눅스데브코스 [9주차 - 5]<프로젝트 #1 (1~2) >

심우열·2023년 6월 2일
0

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

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 접속

# influxdb-0 pod 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

4. 결과 확인

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글