본문 바로가기
카테고리 없음

kube-edge 1.0.0 설치

by Knowledge Store In Hyunsoft 2020. 1. 8.
* 이 포스팅은 쿠팡 파트너스 활동의 일환으로 이에 따른 일정액의 수수료를 제공받습니다.

구성도

구성요소

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

 

728x90

댓글