구성도
구성요소
Cloud Part
CloudHub : 클라우드 측에서 변경 사항을보고, 캐싱하고 EdgeHub에 메시지를 보내는 웹 소켓 서버입니다.
EdgeController : 데이터가 특정 에지 노드를 대상으로 할 수 있도록 에지 노드 및 포드 메타 데이터를 관리하는 확장 된 kubernetes 컨트롤러.
DeviceController : 장치 메타 데이터 / 상태 데이터를 에지와 클라우드간에 동기화 할 수 있도록 장치를 관리하는 확장 된 kubernetes 컨트롤러입니다.
Edge Part
EdgeHub : Edge 컴퓨팅을 위해 클라우드 서비스와 상호 작용하는 웹 소켓 클라이언트 (KubeEdge 아키텍처에서와 같이 Edge Controller와 같은) 여기에는 클라우드 측 리소스 업데이트를 에지에 동기화하고 에지 측 호스트 및 장치 상태 변경 사항을 클라우드에보고하는 것이 포함됩니다.
Edged : 에지 노드에서 실행되고 컨테이너화 된 응용 프로그램을 관리하는 에이전트입니다.
EventBus : MQTT 서버 (모스키토)와 상호 작용하여 다른 구성 요소에 대한 공개 및 등록 기능을 제공하는 MQTT 클라이언트.
ServiceBus : HTTP 서버 (REST)와 상호 작용하는 HTTP 클라이언트로, 클라우드 구성 요소에 HTTP 클라이언트 기능을 제공하여 에지에서 실행되는 HTTP 서버에 도달합니다.
DeviceTwin : 장치 상태를 저장하고 장치 상태를 클라우드에 동기화합니다. 또한 응용 프로그램을위한 쿼리 인터페이스를 제공합니다.
MetaManager : edged와 edgehub 사이의 메시지 프로세서 또한 경량 데이터베이스 (SQLite)와의 메타 데이터 저장 / 검색을 담당합니다.
전제 조건
1. 쿠버네티스 클러스터
1. master node ip : 192.168.117.121
2. edge node ip(라즈베리파이) : 192.168.117.191
3. 설치 위치 : /root/cloud_part (master node)
/root/edge_part (master node)
4. 설치 파일 https://drive.google.com/file/d/1kdcJmbeF7vWR8UDosBeos8u27lF6rKl8/view?usp=sharing
설치
https://github.com/kubeedge/kubeedge/blob/master/docs/setup/setup.md
kubeedge/kubeedge
Kubernetes Native Edge Computing Framework (project under CNCF) - kubeedge/kubeedge
github.com
1.인증서 생성
cd /root/cloud_part/tools
./certgen.sh genCertAndKey edge
2. device 및 device model CRD 생성
cd /root/cloud_part/crd
kubectl create -f devices_v1alpha1_devicemodel.yaml
kubectl create -f devices_v1alpha1_device.yaml
3. cloudcore conf 설정
cd /root/cloud_part/conf
vi controller.yaml
controller:
kube:
master: "https://192.168.117.121:6443"
content_type: "application/vnd.kubernetes.protobuf"
qps: 5
burst: 10
node_update_frequency: 10
kubeconfig: "/etc/kubernetes/admin.conf"
cloudhub:
protocol_websocket: true # enable websocket protocol
port: 10000 # open port for websocket server
protocol_quic: true # enable quic protocol
quic_port: 10001 # open prot for quic server
max_incomingstreams: 10000 # the max incoming stream for quic server
enable_uds: true # enable unix domain socket protocol
uds_address: unix:///var/lib/kubeedge/kubeedge.sock # unix domain socket address
address: 0.0.0.0
ca: /etc/kubeedge/ca/rootCA.crt
cert: /etc/kubeedge/certs/edge.crt
key: /etc/kubeedge/certs/edge.key
keepalive-interval: 30
write-timeout: 30
node-limit: 10
devicecontroller:
kube:
master: "https://192.168.117.121:6443"
content_type: "application/vnd.kubernetes.protobuf"
qps: 5
burst: 10
kubeconfig: "/etc/kubernetes/admin.conf"
4.cloud edge 실행
cd /root/cloud_part
./cloudcore
5.엣지노드 배포
cd /root/cloud_part/yaml
vi pi-edge-191.yaml
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "pi-edge-191",
"labels": {
"name": "edge-node",
"beta.kubernetes.io/arch": "arm64",
"beta.kubernetes.io/os": "linux",
"kubernetes.io/hostname": "pi-edge-191",
"node-role.kubernetes.io/edge": "",
"node-role.kubernetes.io/node": ""
}
}
}
master 노드에서 배포
kubectl apply -f /root/cloud_part/yaml/pi-edge-191.yaml
엣지 노드 구성
1.mosquitto 설치
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list
wget http://repo.mosquitto.org/debian/mosquitto-jessie.list
apt-get update
apt-get install mosquitto
cat /etc/mosquitto/mosquitto.conf
systemctl status mosquitto.service
tail -f /var/log/mosquitto/mosquitto.log
2. 인증서 복사(마스터 노드 --> 엣지 노드)
- 마스터 노드의 /etc/kubeedge에 있는 인증서 복사
cd /etc
scp -r root@192.168.117.121/etc/kubeedge .
3.edge conf 설청
cd /root/edge_part/conf
vi edge.yaml
mqtt:
server: tcp://127.0.0.1:1883 # external mqtt broker url.
internal-server: tcp://127.0.0.1:1884 # internal mqtt broker url.
mode: 2 # 0: internal mqtt broker enable only. 1: internal and external mqtt broker enable. 2: external mqtt broker enable only.
qos: 0 # 0: QOSAtMostOnce, 1: QOSAtLeastOnce, 2: QOSExactlyOnce.
retain: false # if the flag set true, server will store the message and can be delivered to future subscribers.
session-queue-size: 100 # A size of how many sessions will be handled. default to 100.
edgehub:
websocket:
url: wss://192.168.117.121:10000/e632aba927ea4ac2b575ec1603d56f10/pi-edge-191/events
certfile: /etc/kubeedge/certs/edge.crt
keyfile: /etc/kubeedge/certs/edge.key
handshake-timeout: 30 #second
write-deadline: 15 # second
read-deadline: 15 # second
quic:
url: 192.168.117.121:10001
cafile: /etc/kubeedge/ca/rootCA.crt
certfile: /etc/kubeedge/certs/edge.crt
keyfile: /etc/kubeedge/certs/edge.key
handshake-timeout: 30 #second
write-deadline: 15 # second
read-deadline: 15 # second
controller:
protocol: websocket # websocket, quic
heartbeat: 15 # second
project-id: e632aba927ea4ac2b575ec1603d56f10
node-id: pi-edge-191
edged:
register-node-namespace: default
hostname-override: pi-edge-191
interface-name: eth0
edged-memory-capacity-bytes: 7852396000
node-status-update-frequency: 10 # second
device-plugin-enabled: true
gpu-plugin-enabled: false
image-gc-high-threshold: 80 # percent
image-gc-low-threshold: 40 # percent
maximum-dead-containers-per-container: 1
docker-address: unix:///var/run/docker.sock
runtime-type: docker
remote-runtime-endpoint: unix:///var/run/dockershim.sock
remote-image-endpoint: unix:///var/run/dockershim.sock
runtime-request-timeout: 20
podsandbox-image: kubeedge/pause-arm64:3.1
# kubeedge/pause:3.1 for x86 arch , kubeedge/pause-arm:3.1 for arm arch, kubeedge/pause-arm64 for arm64 arch
image-pull-progress-deadline: 600 # second
#cgroup-driver: cgroupfs
cgroup-driver: systemd
node-ip: ""
cluster-dns: ""
cluster-domain: ""
mesh:
loadbalance:
strategy-name: RoundRobin
4. edgecore 실행
cd /root/edge_part
edgecore
5.확인(master node)
kubectl get no -o wide
댓글