K3s의 EdgeX Foundry - 시작
16682 단어 microservicesedgekubernetes5g
This blog post is part 2 of a series of articles about how to deploy and operate EdgeX Foundry - an open source software framework for IoT Edge on K3s - a lightweight, highly available, and secured orchestrator.
본 시리즈의 첫 부분에서 우리는 실제 조작을 진행하는데 필요한 모든 선결 조건을 보았다.EdgeX Foundry tutorial by Jonas Werner을 확장하고 EdgeX Foundry 서비스를 K3s에 배포합니다.우리는 K3s가 EdgeX 마이크로 서비스를 관리하고 조율하는 좋은 경량급 해결 방안이 될 것이라고 이미 알고 있다.EdgeX Foundry의
Geneva
버전을 사용하겠습니다.이 글의 범위는 환경 온도와 같은 센서 데이터를 사용하는 가장자리 용례를 보여 주는 것이다.그런 다음 이러한 센서 데이터는 K3s에 호스팅된 EdgeXFoundry 서비스에서 처리됩니다.이 센서 데이터는 HiveMQ이라는 클라우드 기반 MQTT 에이전트로 전송됩니다.여기서 데이터는 구름 속에서 저장하고 처리할 수 있다.이 게시물에 사용된 구성과 목록은 repository에서 확인할 수 있습니다.
설치 프로그램
그림1과 같이 끝에서 끝까지의 설정이 있습니다.
DHT-22 복분자 가죽(테두리 장치)
DHT-22 센서를 사용하여 환경 온도와 습도를 캡처합니다.센서는 SMD(표면 장착 장치)에 설치된 시험판이나 저항기가 필요하지 않습니다.DHT 센서가 Raspberry Pi의 GPIO(범용 I/O) 핀에 연결됩니다.
온도를 캡처하고 센서 데이터를 EdgeX로 전송하는 스크립트에서 다음 사항이 변경되었습니다.트리베리 Pi의
EdgeX IP
, DHT sensor type
, GPIO
및 edge-device-rest
서비스의 노드 포트는 다음과 같습니다.import sys, time, requests, json, Adafruit_DHT
edgexip = "192.168.1.179"
while True:
# Update to match DHT sensor type and GPIO pin
rawHum, rawTmp = Adafruit_DHT.read_retry(22, 4)
urlTemp = 'http://%s:32536/api/v1/resource/Temp_and_Humidity_sensor_cluster_01/temperature' % edgexip
urlHum = 'http://%s:32536/api/v1/resource/Temp_and_Humidity_sensor_cluster_01/humidity' % edgexip
K3s에 EdgeX를 어떻게 배치합니까?
먼저 K3s 클러스터를 배치하고 두 개의 개별 가상 시스템에 K3s 서버와 K3s 에이전트를 배치합니다. 그림3과 같습니다.K3s의 EdgeX 서비스는 게이트웨이와 비슷할 것이다(part-1의 그림4 참조).가상 시스템의 경우 Ubuntu-20.04 운영 체제를 사용합니다.가상 머신을 생성한 후 다음 단계를 수행하여 K3s를 배치합니다.
두 가상 시스템에서 고정 IP를 구성하는 것이 좋습니다.
K3s 서버/호스트
K3s 서버를 구성하려면 다음 절차를 따르십시오.
export K3s_NODE_NAME=${HOSTNAME//_/-}
export K3s_EXTERNAL_IP=<host-ip>
curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | sh -
생성된 노드 토큰 복사cat /var/lib/rancher/k3s/server/node-token
K3s 서버가 시작되고 실행 중인지 확인systemctl status k3s
K3s 에이전트
K3s 에이전트를 구성하려면 다음 절차를 따르십시오.
export K3S_TOKEN=<node-token of K3s server>
export K3s_URL=https://<ip of k3s server>:6443
export INSTALL_K3S_EXEC="--docker --token $K3S_TOKEN --server $K3S_URL"
export K3S_NODE_NAME=${HOSTNAME//_/-}
curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | sh -
K3s 서버가 시작되고 실행 중인지 확인systemctl status k3s-agent
kubectl
과 helm
등 cli 도구가 설치되어 있는지 확인하십시오.또한 동일한 권한에 대해 올바른 권한이 설정되어 있는지 확인하십시오.K3S의 kubeconfig
파일은 /etc/rancher/k3s/k3s.yaml
에 저장됩니다.계속하기 전에 KUBECONFIG 환경 변수를 설정합니다.export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
어떻게 K3s에 EdgeX Foundry를 배치합니까?
K3s가 시작되고 실행되면 repository을 복제하여 EdgeX Foundry를 배포합니다.
git clone https://github.com/rutu-k/edgex-k3s.git
EdgeX Foundry에는 서비스를 시도하고 테스트하기 위한 docker compose 목록이 있습니다.kompose
을 사용하면 docker compose 목록을 Kubernetes 목록으로 변환할 수 있습니다.또한 Kubernetes 목록으로 변환한 후 볼륨을 사용하는 프로그램이 제대로 설정되지 않아 Kubernetes에서 작업을 할 수 없습니다.따라서 상응하는 선적 명세서를 정확하게 정정해야 한다.
emptyDir
개의 볼륨을 손쉽게 구성할 수 있습니다.우선, 우리는 영사부터 시작한다.Concur는 EdgeX Foundry에서 등록 센터로 사용됩니다.
helm --kubeconfig /etc/rancher/k3s/k3s.yaml upgrade --install consul ./consul-helm
영사가 실행 중이면 대시보드 http://[K3s server ip]:[NodePort of service]
에 액세스할 수 있습니다.키 값 저장소에 접근하면 비어 있습니다.EdgeX Foundry 서비스에 적절한 구성이 필요합니다.이를 위해 키 값을 가져와 concur에 저장합니다.
강좌의 docker compose 배치를 공부할 때, 나는Consor에서Key/Value JSON 파일을 내보냈다.
consul kv import --http-addr=http://[K3s server ip]@edgex-kv.json
현재 키 값 저장소에서 설정을 볼 수 있습니다.EdgeX Foundry 어플리케이션 서비스 배포
kubectl apply -f /k3s/.
모든 응용 프로그램 서비스가 시작되고 실행 중임을 주의하십시오.$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 4d1h
edgex-redis ClusterIP 10.43.56.89 <none> 6379/TCP 3d23h
edgex-core-consul ClusterIP None <none> 8500/TCP,8301/TCP,8301/UDP,8302/TCP,8302/UDP,8300/TCP,8600/TCP,8600/UDP 25h
consul NodePort 10.43.193.246 <none> 80:32688/TCP 25h
edgex-app-service-configurable-mqtt NodePort 10.43.102.126 <none> 48101:32294/TCP 4h26m
edgex-app-service-configurable-rules NodePort 10.43.138.76 <none> 48100:30136/TCP 4h26m
edgex-core-command NodePort 10.43.52.70 <none> 48082:32400/TCP 4h26m
edgex-device-rest NodePort 10.43.167.127 <none> 49986:32536/TCP 4h26m
edgex-core-metadata NodePort 10.43.132.29 <none> 48081:30220/TCP 4h26m
edgex-support-notifications NodePort 10.43.39.183 <none> 48060:32680/TCP 4h26m
edgex-kuiper NodePort 10.43.231.24 <none> 48075:30082/TCP,20498:31868/TCP 4h26m
edgex-support-scheduler NodePort 10.43.6.49 <none> 48085:31497/TCP 4h26m
edgex-sys-mgmt-agent NodePort 10.43.250.114 <none> 48090:31736/TCP 4h25m
edgex-core-data NodePort 10.43.251.191 <none> 5563:32220/TCP,48080:31931/TCP
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
edgex-redis-54fb576f64-bdv9x 1/1 Running 1 3d12h
consul-0 1/1 Running 0 25h
edgex-core-metadata-5bd45879cf-h9tbs 1/1 Running 0 4h25m
edgex-kuiper-bbc6cf47-trkdl 1/1 Running 0 4h25m
edgex-sys-mgmt-agent-7fb78c6fc5-qmqc2 1/1 Running 0 4h25m
edgex-support-notifications-7b45446cbc-bqhvb 1/1 Running 0 4h25m
edgex-app-service-configurable-mqtt-59b5c7b6c8-8zhfc 1/1 Running 1 4h25m
edgex-app-service-configurable-rules-58c6846d54-s29hp 1/1 Running 1 4h25m
edgex-core-command-78b5ff9864-hb6wr 1/1 Running 0 4h25m
edgex-core-data-86f5864db6-cvbl7 1/1 Running 0 4h25m
edgex-support-scheduler-755b5779dc-br2d8 1/1 Running 0 4h25m
edgex-device-rest-599c579bf5-zbrg8 1/1 Running 0 4h25m
EdgeX Foundry 워크플로우
EdgeX 워크플로우는 다음과 같은 세 가지 주요 부분으로 나눌 수 있습니다.장치, 핵심 데이터 서비스 및 어플리케이션 서비스또 다른 구동 부분은 센서 데이터 분석을 통해 행동을 취할 수 있지만 본고의 범위를 넘어섰다.
Event
객체로 coreData에 제출됩니다.이벤트는 특정 시점에 장치 ID 또는 이름을 통해 장치와 연관된 장치에서 가져온 센서 읽기 집합입니다.Reading
대상 중 Event
대상은 장치 감지의 특정한 값이며, 읽기 위해 상하문을 제공하기 위해 값 설명자와 연결되어 있다.그것의 실제 행동을 보여 주시오
스크립트를 트리거하여 DHT 센서를 활성화하고 EdgeX Foundry로 온도 값을 보냅니다.
$ python rpiPutTempHum.py
Temp: 27.7999992371C, humidity: 77.5%
Temp: 28.2000007629C, humidity: 75.5999984741%
Temp: 28.1000003815C, humidity: 75.5%
Temp: 28.1000003815C, humidity: 75.4000015259%
Temp: 28.2000007629C, humidity: 75.3000030518%
Temp: 28.2000007629C, humidity: 75.3000030518%
Temp: 28.2000007629C, humidity: 75.3000030518%
센서 읽기 수가 증가함에 따라 EdgeX Foundry의 이벤트 수도 증가합니다.└─ $ ▶ curl http://192.168.1.179:31931/api/v1/event/count
2043
우리는 또 최신 온도치를 얻을 수 있다.└─ $ ▶ curl http://192.168.1.179:31931/api/v1/reading | json_pp -json_opt pretty,canonical | tail -n 10
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 396k 0 396k 0 0 9660k 0 --:--:-- --:--:-- --:--:-- 9660k
{
"created" : 1632159295863,
"device" : "Temp_and_Humidity_sensor_cluster_01",
"id" : "ffcf2a3b-6ecc-4476-9ab6-e17ae983886f",
"name" : "temperature",
"origin" : 1632159295861600937,
"value" : "28",
"valueType" : "Int64"
}
]
응용 프로그램 서비스를 보여주기 위해서, 우리는 응용 프로그램 Mqtt 서비스를 설정하여 온도 값을 Mqtt 에이전트에 보낼 것입니다.edgex-app-service-configurable-mqtt
서비스("K3s의 EdgeX Foundry"섹션의 배치 서비스를 보십시오)는 지역 사회에서 제공하는 내보내기 프로그램으로 EdgeX 센서 데이터를 Hive MQ가 위탁 관리하는 공공 MQTT 에이전트(포트 1883에 있는 http://broker.mqttdashboard.com)로 보냅니다.그리고 특정한 topic
을 발표하고 구독함으로써 HiveMQ에서 제공하는 MQTT 브라우저 클라이언트 시각화 센서 데이터를 사용할 수 있다.테마 이름은
edgex-app-service-configurable-mqtt
배치(refer here)의 환경 변수에 설정됩니다.- name: WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_TOPIC
value: DHT-SENSOR
HiveMQ MQTT browser client으로 가세요.기본 구성이 있는 Connect
을 클릭합니다.그런 다음 Add New Topic Subscription
을 클릭하고 제목 DHT-SENSOR
을 입력한 다음 Subscribe
을 클릭합니다.메시지에서 센서 데이터를 볼 수 있습니다.결론
본 문서에서 다음과 같은 내용을 살펴봤습니다.
eKuiper
규칙 엔진을 결합하여 Edge 분석을 지원합니다.우리는 다음 부분에서 그것을 소개할 것이다.나는 네가 이 문장의 내용이 풍부하고 사람을 황홀하게 하기를 바란다.이와 같은 게시물이 더 많으면 매주 저희의 통신을 구독해 주십시오.나는 네가 이 문장에 대한 견해를 매우 듣고 싶다. 그러므로 반드시 위에서 대화를 시작해야 한다.
참고 문헌과 진일보한 읽기
Reference
이 문제에 관하여(K3s의 EdgeX Foundry - 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/infracloud/edgex-foundry-on-k3s-the-initiation-1lo5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)