Index > CP Install > K-PaaS 컨테이너 플랫폼 Edge 배포 가이드
-
K-PaaS 컨테이너 플랫폼 Edge 배포
2.1. Prerequisite
2.1.1. 클러스터
2.1.2. OS
2.1.3. 주요 소프트웨어
2.1.4. 방화벽
2.1.5. 쿠버네티스 서비스 External IP
2.2. K-PaaS 컨테이너 플랫폼 클러스터 설치
2.3. K-PaaS 컨테이너 플랫폼 Edge 배포 준비
2.4. K-PaaS 컨테이너 플랫폼 Edge 배포
2.5. K-PaaS 컨테이너 플랫폼 Edge 배포 확인
본 문서 (K-PaaS 컨테이너 플랫폼 클러스터 Edge 배포 가이드) 는 기획자, 개발자, 운영자 지원 환경의 개방형 PaaS 플랫폼인 K-PaaS 컨테이너 플랫폼 클러스터의 Edge 노드를 구성하는 방법을 기술하였다.
설치 범위는 K-PaaS 컨테이너 플랫폼 Edge 환경의 기반이 되는 Edge 노드 구성을 단일 클라우드
환경 기준으로 작성하였다.
시스템 구성은 쿠버네티스 단일 클러스터
(Control Plane, Worker, Edge) 환경으로 구성되어 있다.
K-PaaS 컨테이너 플랫폼 Deployment를 통해 쿠버네티스 단일 클러스터
를 구성하고 Edge 배포를 진행하여 클러스터에 Edge 노드 환경을 제공한다.
K-PaaS 컨테이너 플랫폼 Edge 노드 구성에 필요한 인스턴스 환경으로는 아래 구성을 참고한다.
환경 | 인스턴스 종류 | 인스턴스 갯수 | 비고 |
---|---|---|---|
Cloud 환경 | - | - | 기존 배포한 클러스터의 노드 사용 |
Edge 환경 | Edge | 1개 이상 | ARM64 아키텍쳐 OS로 인스턴스 생성 |
각 배포 유형 별 시스템 구성도는 다음과 같다.
[ 단일 클라우드 클러스터, Edge 노드 구성 ]
https://kubeedge.io/en/docs/
https://github.com/kubeedge/kubeedge
K-PaaS 컨테이너 플랫폼 Edge 배포를 위한 전제조건은 아래 기술하였다.
K-PaaS 컨테이너 플랫폼 단일 클라우드
설치를 진행한다.
K-PaaS 컨테이너 플랫폼 Edge 배포에 필요한 OS 환경 정보는 다음과 같다.
환경 | 노드 | 지원 OS | 버전 | 아키텍쳐 |
---|---|---|---|---|
Cloud 환경 | Control Plane Worker |
Ubuntu | 22.04 | amd64 |
Edge 환경 | Edge | Ubuntu | 20.04 | arm64 |
Edge 환경 | Edge | Ubuntu | 22.04 | arm64 |
K-PaaS 컨테이너 플랫폼 Edge 배포에 필요한 주요 소프트웨어 정보는 다음과 같다.
주요 소프트웨어 | 버전 |
---|---|
Kubernetes Native | v1.28.6 |
Kubernetes Native (Edge Node) | v1.24.17 |
CRI-O | v1.28.1 |
CRI-O (Edge Node) | v1.24.0 |
KubeEdge | v1.14.4 |
EdgeMesh | v1.12.0 |
K-PaaS 컨테이너 플랫폼 Edge 배포에 필요한 방화벽 정보는 다음과 같다.
Edge 배포에서 일부 방화벽이 추가되었다.
Control Plane 노드
프로토콜 | 포트 | 비고 |
---|---|---|
TCP | 111 | NFS PortMapper |
TCP | 2049 | NFS |
TCP | 2379-2380 | etcd server client API |
TCP | 6443 | kubernetes API Server |
TCP | 9443 | cloudcore router port |
TCP | 30000-30004 | cloudHub websocket port |
TCP | 30001 | cloudHub quic port |
TCP | 30002 | cloudHub https port |
TCP | 30003 | cloudStream streamPort |
TCP | 30004 | cloudStream tunnelPort |
TCP | 10250 | Kubelet API |
TCP | 10251 | kube-scheduler |
TCP | 10252 | kube-controller-manager |
TCP | 10255 | Read-Only Kubelet API |
TCP | 20004 | edgeMesh server containerPort |
TCP | 20006 | edgeMesh tunnel listenPort |
TCP | 40001 | edgeMesh edgeProxy listenPort |
UDP | 4789 | Calico networking VXLAN |
Worker 노드
프로토콜 | 포트 | 비고 |
---|---|---|
TCP | 111 | NFS PortMapper |
TCP | 2049 | NFS |
TCP | 10250 | Kubelet API |
TCP | 10255 | Read-Only Kubelet API |
TCP | 20006 | edgeMesh tunnel listenPort |
TCP | 30000-32767 | NodePort Services |
TCP | 40001 | edgeMesh edgeProxy listenPort |
UDP | 4789 | Calico networking VXLAN |
Edge 노드
프로토콜 | 포트 | 비고 |
---|---|---|
TCP | 111 | NFS PortMapper |
TCP | 1883-1884 | eventBus mqttPort |
TCP | 2049 | NFS |
TCP | 10001 | edgeHub quic port |
TCP | 10250 | Kubelet API |
TCP | 10255 | Read-Only Kubelet API |
TCP | 10350 | Use kubectl logs |
TCP | 10550 | edgecore list-watch port |
TCP | 20006 | edgeMesh tunnel listenPort |
TCP | 30000-32767 | NodePort Services |
TCP | 40001 | edgeMesh edgeProxy listenPort |
K-PaaS 컨테이너 플랫폼 서비스 구성을 위해서 특정 서비스에 로드밸런서 타입 설정 및 External IP 설정이 필요하다.
K-PaaS 컨테이너 플랫폼 클러스터의 로드밸런서 타입 서비스에 필요한 External IP 설정 정보는 다음과 같다.
서비스 | 설명 | 비고 |
---|---|---|
CloudCore | K-PaaS 컨테이너 플랫폼 Edge 배포의 CloudCore 서비스를 Ingress로 외부 노출하기 위한 서비스 |
각 클라우드에 1개 인터페이스 생성 필요 Public IP 할당 필요 |
K-PaaS 컨테이너 플랫폼 클러스터에서는 MetalLB를 통해 External IP를 할당한다.
해당 External IP로 외부 통신 및 서비스를 지원하기 위해서는 다음과 같은 설정이 필요하다.
"네트워크 인터페이스 생성" 버튼을 클릭
Control Plane 노드와 동일한 네트워크 VPC, 서브넷 선택 후 사설 IP를 지정하여 생성
생성한 인터페이스 선택 후 "플로팅 IP 관리" 버튼을 클릭
플로팅 IP를 생성 및 할당
Control Plane 노드 (HA Control Plane 구성 시 인터페이스 연결 추가 할 Control Plane 노드)를 선택 후 "인스턴스 중지" 버튼 클릭
네트워크 탭에서 "네트워크 인터페이스 연결 추가" 버튼 클릭
기존 네트워크 인터페이스 지정 클릭 후 인터페이스 선택
"인스턴스 시작" 버튼 클릭
Virtual IP 메뉴에서 "Virtual IP 생성" 버튼을 클릭
Control Plane 노드와 동일한 네트워크 Zone, Tier 선택 후 생성
Virtual IP 선택 및 "연결" 버튼 클릭하여 Control Plane VM에 연결
Networking 메뉴에서 "IP 생성" 버튼 클릭하여 Control Plane 노드와 동일한 네트워크 Zone에 공인 IP 생성
"접속 설정" 버튼 클릭하여 Virtual IP 선택 후 Port Forwarding 설정
"방화벽 설정" 버튼 클릭하여 등록한 접속 설정으로 방화벽 설정
Control Plane 노드에서 $ sudo ifconfig {인터페이스명}:1 {VIP} up
명령어 실행 (HA Control Plane 구성 시 VIP 연결한 Control Plane 노드에서 실행)
K-PaaS 컨테이너 플랫폼 Edge 배포를 위해서는 클라우드 환경에 K-PaaS 컨테이너 플랫폼 클러스터가 배포되어있어야 하며, 이후 Edge 환경에 Edge 노드를 배포하여야 한다.
Cloud 환경에 K-PaaS 컨테이너 플랫폼 클러스터 Deployment 통해 쿠버네티스 클러스터 배포를 진행한다.
K-PaaS 컨테이너 플랫폼 Edge 배포에 필요한 환경변수를 사전 정의 후 쉘 스크립트를 통해 설치를 진행한다.
Edge 노드의 환경이 라즈베리파이
일 경우 다음 정보를 추가한다.
라즈베리파이
환경이 아닐 경우 아래의 과정을 생략하고 K-PaaS 컨테이너 플랫폼 Edge 배포 환경변수 정의부터 진행한다.
# vi /boot/firmware/cmdline.txt
... cgroup_enable=memory cgroup_memory=1 (맨 뒤에 추가)
라즈베리파이
Reboot을 진행한다.
# reboot
K-PaaS 컨테이너 플랫폼 Edge 배포 설치경로로 이동한다. 이후 부터는 Control Plane 노드에서만 진행을 하면 된다.
$ cd ~/cp-deployment/standalone
K-PaaS 컨테이너 플랫폼 Edge 배포에 필요한 환경변수를 정의한다.
$ vi cp-edge-vars.sh
환경변수 | 설명 | 비고 |
---|---|---|
CLOUDCORE_PRIVATE_VIP | MetalLB를 통해 CloudCore Service에서 사용할 Private IP | |
CLOUDCORE_VIP | CloudCore Service에서 사용할 인터페이스에 할당한 Public IP | |
CLOUDCORE1_NODE_HOSTNAME | CloudCore가 설치될 노드의 호스트명 | Control Plane 또는 Worker 노드 중 1개 노드 정보 입력 |
CLOUDCORE2_NODE_HOSTNAME | CloudCore가 설치될 노드의 호스트명 | Control Plane 또는 Worker 노드 중 1개 노드 정보 입력 |
EDGE_NODE_CNT | Edge 노드의 갯수 | |
EDGE1_NODE_HOSTNAME | Edge 1번 노드의 호스트명 | |
EDGE1_NODE_PRIVATE_IP | Edge 1번 노드의 Private IP | |
EDGE{n}_NODE_HOSTNAME | Edge n번 노드의 호스트명 | EDGE_NODE_CNT 값이 2 이상일 경우 설정EDGE_NODE_CNT 값만큼 설정 |
EDGE{n}_NODE_PRIVATE_IP | Edge n번 노드의 Private IP | EDGE_NODE_CNT 값이 2 이상일 경우 설정EDGE_NODE_CNT 값만큼 설정 |
#!/bin/bash
export CLOUDCORE_PRIVATE_VIP=
export CLOUDCORE_VIP=
export CLOUDCORE1_NODE_HOSTNAME=
export CLOUDCORE2_NODE_HOSTNAME=
export EDGE_NODE_CNT=
export EDGE1_NODE_HOSTNAME=
export EDGE1_NODE_PRIVATE_IP=
...
export EDGE{n}_NODE_HOSTNAME=
export EDGE{n}_NODE_PRIVATE_IP=
쉘 스크립트를 통해 필요 패키지 설치, Edge 배포 환경변수 설정, Ansible playbook을 통한 K-PaaS 컨테이너 플랫폼 Edge 배포를 순차적으로 진행한다.
$ source deploy-cp-edge.sh
노드 및 kube-system, kubeedge 네임스페이스의 Pod를 확인하여 K-PaaS 컨테이너 플랫폼 Edge 배포를 확인한다.
구성에 따라 조회되는 노드 및 Pod의 정보는 다를 수 있으며 아래는 단일 Control Plane 구성으로 배포했을때의 조회 결과이다.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
cp-edge Ready agent,edge 5m40s v1.24.17-kubeedge-v1.14.4
cp-master Ready control-plane,master 39m v1.28.6
cp-worker-1 Ready <none> 38m v1.28.6
cp-worker-2 Ready <none> 38m v1.28.6
cp-worker-3 Ready <none> 38m v1.28.6
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
calico-node-4hbw5 1/1 Running 0 4m34s
calico-node-8q5tv 1/1 Running 0 5m9s
calico-node-qlq5k 1/1 Running 0 5m26s
calico-node-xc55c 1/1 Running 0 4m53s
coredns-657959df74-grflz 1/1 Running 0 37m
coredns-657959df74-wbdl6 1/1 Running 0 37m
dns-autoscaler-b5c786945-cbcv9 1/1 Running 0 37m
kube-apiserver-cp-master 1/1 Running 0 36m
kube-controller-manager-cp-master 1/1 Running 1 39m
kube-proxy-2ckfd 1/1 Running 0 38m
kube-proxy-hb8p2 1/1 Running 0 38m
kube-proxy-nnh6d 1/1 Running 0 38m
kube-proxy-p9srm 1/1 Running 0 6m4s
kube-scheduler-cp-master 1/1 Running 1 39m
metrics-server-5cd75b7749-57sc2 2/2 Running 0 37m
nginx-proxy-cp-worker-1 1/1 Running 0 38m
nginx-proxy-cp-worker-2 1/1 Running 0 38m
nginx-proxy-cp-worker-3 1/1 Running 0 38m
nodelocaldns-24vq4 1/1 Running 0 6m4s
nodelocaldns-jjrjj 1/1 Running 0 37m
nodelocaldns-kgzxb 1/1 Running 0 37m
nodelocaldns-l9s47 1/1 Running 0 37m
$ kubectl get pods -n kubeedge
NAME READY STATUS RESTARTS AGE
cloudcore-758b4f4b97-4s57p 1/1 Running 0 3m49s
cloudcore-758b4f4b97-ndxbl 1/1 Running 0 3m49s
edgemesh-agent-9cmt2 1/1 Running 0 25s
edgemesh-agent-b8btq 1/1 Running 0 87s
edgemesh-agent-ntf24 1/1 Running 0 87s
edgemesh-agent-vhggk 1/1 Running 0 87s
edgemesh-agent-vzpdj 1/1 Running 0 87s
쉘 스크립트를 통해 K-PaaS 컨테이너 플랫폼 Edge 배포 삭제를 진행한다.
$ source reset-cp-edge.sh
사용자가 직접 Resource를 생성 시 다음과 같은 prefix를 사용하지 않도록 주의한다.
Resource 명 | 생성 시 제외해야 할 prefix |
---|---|
전체 Resource | kube* |
Namespace | all |
kubernetes-dashboard | |
cp-portal-temp-namespace | |
Role | cp-init-role |
cp-admin-role | |
ResourceQuota | cp-low-resourcequota |
cp-medium-resourcequota | |
cp-high-resourcequota | |
LimitRanges | cp-low-limitrange |
cp-medium-limitrange | |
cp-high-limitrange | |
Pod | nodes |
resources |