메뉴 닫기

오픈 클라우드 플랫폼 K-PaaS CP (Container Platform) 단독형(single) 1.5.x 버전 설치

출처 : K-PaaS 공식 홈페이지 (https://k-paas.or.kr/)
출처 : K-PaaS 공식 홈페이지 (https://k-paas.or.kr/)

 

 

현재 K-PaaS (구 PaaS-TA)는 국내 IT 서비스 경쟁력 강화를 목표로, 한국지능정보사회진흥원(NIA)의 지원으로 다양한 국내 업체와 협업을 통해 만든 개방형 클라우드 플랫폼입니다. <내용 출처 : K-PaaS 공식 홈페이지>

 

해당 글은 K-PaaS 공식 홈페이지 및 K-PaaS github에 올라온 메뉴얼을 기반으로 작성되었으며, 

공식 메뉴얼에 나와있지 않은 내용과 설치하면서 도움이 될 내용을 추가하여 작성하였습니다. 

 

 

[개 요]

✅종 류 : 엔지니어링
✅난이도 : ⭐⭐⭐
✅내용요약 : 오픈 클라우드 플랫폼 K-PaaS CP (Container Platform) 단독형(single) 1.5.x 버전 설치
✅관련직무 : 시스템&클라우드 엔지니어

 

 

 

해당 글을 작성하면서 참고하였던 K-PaaS github 메뉴얼 링크입니다.

CP-cluster 설치 메뉴얼 : https://github.com/K-PaaS/container-platform/blob/master/install-guide/standalone/cp-cluster-install-single.md

CP-Portal 설치 메뉴얼 : https://github.com/K-PaaS/container-platform/blob/master/install-guide/portal/cp-portal-standalone-guide.md

CP-Portal 사용 가이드 : https://github.com/K-PaaS/container-platform/blob/master/use-guide/portal/container-platform-portal-guide.md#-5233-namespace-%EC%83%9D%EC%84%B1

 

 

 

  • 컨테이너 플랫폼 (CP, Container Platform)

– K-PaaS 컨테이너 플랫폼은 단독 배포를 통해 독립된 쿠버네티스 환경을 제공하며, 개발자는 손쉽게 쿠버네티스 클러스터를 구축하여 어디서나 최신 애플리케이션을 구축하고 관리할 수 있습니다.

– K-PaaS 컨테이너 플랫폼은 컨테이너 오케스트레이션 플랫폼으로 클라우드 기반의 서비스 개발 및 운영에 필요한 부가 서비스를 제공합니다.

 

 

 

  • K-PaaS 지원 IaaS 환경

Private Cloud Openstack (Pike~Xena)
VMware vSphere(v7.0)
Cloudit
CONTRABASS
Public Cloud AWS
MS Azure
Google Cloud Platform
NHN Cloud
Naver Cloud
KT Cloud

 

 

  • 시스템 구성도 

    HA Control Plane, ETCD Stacked, Rook-Ceph 스토리지 구성도

HA Control Plane, ETCD Stacked, Rook-Ceph 스토리지 구성도
HA Control Plane, ETCD Stacked, Rook-Ceph 스토리지 구성도

 

 

 

  • OS 환경

K-PaaS CP 1.5.x 버전 설치에 필요한 OS 환경 정보는 아래와 같습니다.

해당 OS 환경 외 다른 환경에서 설치를 진행하는것은 권유하지 않습니다. 

 

지원 OS 버전
ubuntu 22.04

 

 

 

  • 설치 환경

설치 클라우드는 iwinv 클라우드 환경을 이용하였으며, 

실제 운영환경에서 사용할것을 가정했을때 최소 사양으로 구성하여 설치 진행하였습니다. 

 

Control Plane 노드 3대

Hostname Public IP Private IP
master01 115.68.248.xxx 10.101.0.11
master02 115.68.248.xxx 10.101.0.4
master03 115.68.249.xxx 10.101.0.25

 

Worker 노드 3대

Hostname Public IP Private IP
worker01 115.68.249.xxx 10.101.0.3
worker02 115.68.249.xxx 10.101.0.6
worker03 115.68.249.xx 10.101.0.30

 

Load Balance 2대

Hostname Public IP Private IP
LB01 115.68.249.xxx 10.101.0.20
LB02 115.68.249.xxx 10.101.0.15

 

로드밸런서의 경우, 이용하는 클라우드 업체에서 제공해주는 로드밸런서 상품이 있다면 해당 로드밸런서에서 셋팅이 가능합니다.

이용하는 클라우드 업체에서 제공하는 로드밸런서 상품이 없거나, private cloud 환경에서 설치를 진행하는 경우에는 인스턴스를 생성하여 로드밸런서로 사용합니다. 

 

 

 

  • 스토리지

K-PaaS 설치 시 스토리지 설정은 필수입니다. 

K-PaaS에서 지원하는 스토리지는 아래와 같습니다. 
이번 설치 환경에서 저는 Rook-ceph 스토리지 방식으로 설치를 진행하였습니다. 

 

스토리지 설명
NFS 서버 NFS용 인스턴스를 생성하여 NFS 서버를 구축합니다.  
Rook-Ceph kubernetes 환경 위에 가상 스토리지인 ceph를 배포하여 사용하게 해주는 방식입니다. 
사전 정의하는 환경변수에 rook-ceph 설정 시 배포 과정에서 클러스터 내 pod로 rook-ceph의 구성 요소가 자동으로 설치됩니다.
단, rook-ceph으로 스토리지를 구성할 때, Root Volume 외에 추가 Volume을 각 워커 노드에 사전 할당해야 합니다. 

 

 

 

  • 방화벽 설정

K-PaaS 컨테이너 플랫폼 설치 시 방화벽에서 오픈되어야 할 포트는 아래와 같습니다.  

 

Control Plane 노드 

프로토콜 포트 설명 
TCP 111 NFS PortMapper 
TCP 2049 NFS 
TCP 2379-2380 etcd server client API
TCP 6443 Kubernetes API Server
TCP 10250 Kubelet API
TCP 10251 kube-scheduler
TCP 10252 kube-controller-manager
TCP 10255 Read-Only Kubelet API
TCP 4789

Calico networking VXLAN

 

Worker 노드

프로토콜 포트 설명
TCP 111 NFS PortMapper
TCP 2049 NFS
TCP 10250 Kubelet API
TCP 10255 Read-Only Kubelet API
TCP 3000-32767 NodePort Services
TCP 4789 Calico networking VXLAN

 

 

 

1. 사전 작업


1-1.  방화벽 disable (모든 서버에서 진행한다.)

저는 설치하기 전 수월한 테스트를 위해 모든 방화벽을 disable 해주었습니다.

 

# systemctl stop ufw
# systemctl disable ufw 

 

방화벽을 사용하기 위해서는 위에 작성한 포트를 모두 오픈해주어야 합니다. 

 

 

1-2. hostname 변경 (각 노드에 접속하여 진행한다.)

hostname을 변경해줍니다. 

 

​# hostnamectl set-hostname master01
# hostnamectl set-hostname master02
# hostnamectl set-hostname master03
# hostnamectl set-hostname worker01
# hostnamectl set-hostname worker02
# hostnamectl set-hostname worker03
# hostnamectl set-hostname LB01
# hostnamectl set-hostname LB02

 

 

1-3. /etc/hosts 등록 (모든 서버에서 진행한다.)

모든 서버에 hosts 등록 작업을 진행합니다. 

 

# vi /etc/hosts 
10.101.0.11 master01
10.101.0.4 master02
10.101.0.25 master03
10.101.0.3 worker01
10.101.0.6 worker02
10.101.0.30 worker03
10.101.0.20 LB01
10.101.0.15 LB02

 

 

1-4. apt update && apt upgrade (모든 서버에서 진행한다.)

모든 서버에서 apt update && apt upgrade 작업을 진행합니다. 

 

# apt update && apt upgrade

 

 

 

 

2. 로드밸런서 구성


로드밸런서 HA 구성의 경우 2개 로드밸런서 인스턴스(LB01, LB02)에 Keepalived, HAProxy 설치 및 설정 작업을 진행합니다. 

 

2-1. keepalived 설치 및 설정 

keepalived를 설치합니다. 

# apt-get install -y keepalived

 

 

/etc/sysctl.conf 설정파일을 echo 명령어를 통해 아래와 같이 변경 후 적용합니다. 

# echo ‘net.ipv4.ip_nonlocal_bind=1’ >> /etc/sysctl.conf
# echo ‘net.ipv4.ip_forward=1’ >> /etc/sysctl.conf
# sysctl -p

 

 

Keepalived.conf 파일을 아래와 같이 설정합니다. 

LB01 서버를 마스터로 설정하였고, LB02 서버를 백업으로 설정하였습니다. 

VIP IP의 경우 별도의 IP로 지정하여 설정하였습니다. 

[LB01 서버 설정]
# vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
   state MASTER
   interface ens3
   virtual_router_id 51
   priority 200
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
 }
 virtual_ipaddress {
   10.101.0.22
 }
}

[LB02 서버 설정]
# vi / etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
   state BACKUP
   interface ens3
   virtual_router_id 51
   priority 100
   advert_int 1
   authentication {
       auth_type PASS
       auth_pass 1111
 }
 virtual_ipaddress {
   10.101.0.22
 }
}

 

 

Keepalived 데몬을 재시작합니다. 

# systemctl restart keepalived

 

 

LB01 서버에서 ip addr 명령어를 통해 VIP IP가 정상적으로 올라왔는지 확인합니다.

inet 10.101.0.22/32 IP가 정상적으로 올라온것이 확인되었습니다. 

root@LB01:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000                  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
          valid_lft forever preferred_lft forever
      inet6 ::1/128 scope host
          valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000  
       link/ether fa:16:3e:ae:35:90 brd ff:ff:ff:ff:ff:ff
       altname enp0s3
       inet 10.101.0.20/21 metric 100 brd 10.101.7.255 scope global dynamic ens3
             valid_lft 55229sec preferred_lft 55229sec
       inet 10.101.0.22/32 scope global ens3
             valid_lft forever preferred_lft forever
       inet6 fe80::f816:3eff:feae:3590/64 scope link
             valid_lft forever preferred_lft forever

 

 

2-2. HAProxy 설치 및 설정 진행

HAProxy를 설치합니다. 

# apt-get install -y haproxy

 

 

haproxy.cfg 파일의 맨 하단에 아래 내용을 추가합니다. 

haproxy.cfg 설정은 LB01, LB02 동일하게 설정한다.

VIP의 경우 Keepalived.conf 파일에 작성했던 로드밸런서 VIP IP를 작성하면 되고,

MASTER_NODE_IP의 경우 각 Control Plane 노드의 Private IP를 작성하면 됩니다. 

# vi /etc/haproxy/haproxy.cfg
listen kubernetes-apiserver-https
  bind {{VIP}}:6443
  mode tcp option
  log-health-checks
  timeout client 3h
  timeout server 3h
  server master1 {{MASTER_NODE_IP1}}:6443 check check-ssl verify none inter 10000
  server master2 {{MASTER_NODE_IP2}}:6443 check check-ssl verify none inter 10000
  server master3 {{MASTER_NODE_IP3}}:6443 check check-ssl verify none inter 10000
  balance roundrobin

listen kubernetes-apiserver-https
  bind 10.101.0.22:6443
  mode tcp
  option log-health-checks
  timeout client 3h
  timeout server 3h
  server master1 10.101.0.11:6443 check check-ssl verify none inter 10000
  server master2 10.101.0.4:6443 check check-ssl verify none inter 10000
  server master3 10.101.0.25:6443 check check-ssl verify none inter 10000
  balance roundrobin

 

 

HAProxy 데몬을 재시작합니다. 

# systemctl restart haproxy

 

 

 

 

3. SSH Key 생성 및 배포


cp-cluster 및 cp-portal 설치 작업은 Install 인스턴스 또는 Control Plane 노드에서 진행됩니다. 

따라서 Install 인스턴스 또는 Control Plane 노드에서 모든 노드에 접속하기 위해 SSH Key가 인벤토리의 모든 서버들에 복사되어야 합니다. 

해당 글에서는 따로 Install 인스턴스를 생성하지 않고 Control Plane 노드에서 설치를 진행하였습니다. 

 

3-1. RSA 공개키 생성 (Install 인스턴스 또는 Control Plane 노드에서 진행한다. 해당 글에서는 master01 서버에서 진행하였음.)

모든 설치작업은 ubuntu 계정에서 진행됩니다. 

root 계정이 아닌 ubuntu 계정의 RSA 공개키를 생성해야합니다. 

 

# ssh-keygen -t rsa -m PEM
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ubuntu/.ssh/id_rsa
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:dsMTN1vWG7SBIwMNbXDuUCUaLX53xRdWIEJrjoHteC4 ubuntu@master01
The key’s randomart image is:
+—[RSA 3072]—-+
|         *X+o.oB+|
|       o .*X.+o.*|
|      . +o*.= +o+|
|       o Bo+ * .o|
|      . S B.o .. |
|       + . o     |
|      E .        |
|       .         |
|                 |
+—-[SHA256]—–+

 

 

 

3-2.  출력된 공개키 복사

master01 서버에서 생성한 공개키를 복사한다.

# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADQABAAABgQDViUs5hoOw1bm+UNffZCK05hSdOJVqiKDVq/2pkhjST2sjMGgDjKD

ecVhEv8Ot3poXOwWDoqiGhgk3rEsOo2erf1a4ELVFlGvyhFcgUbRlLIF5iDIKnO1Ipn+4RF0t168Ub7dHxRIXpFGj/o/P1tKNgN8SIuVQanRqP0Do/z

thx2XWDNqdyH246A34/ilt+ZbySNhO9qIUMmR4vulZzEQfm7z9m1VgSUVtp3avxac6ui59SU5OigxufBNdLqDThp+xPYMMOhcLnBzY1V6X+k96

3I87JCzWybLL26Jg8kyDQk8tZ+tfjZM/8fl/HNTXU8im7ti7DbGwbwORgfPU90RSHS17gpFpSxlE5Nzc02ru+RPPXE4ejmRhoaLUtJz0QW5UkvrQo39

wThZq1+N2ihLPLkKHB0W75BgxWRKKXrKOVLev+NXQkJN1fB9rGvUh1E7HVLb8NzSq/kKUKuve2iHR0Q8T3vlQlsY6RXmbBdZWC82OcO0H

H7nk7+/y4Acc/DM= ubuntu@master01

 

 

3-3. authorized_keys 파일에 공개키 복사 (모든 서버에서 진행한다. master01 서버도 포함)

# vi .ssh/authorized_keys
AAAAB3NzaC1yc2EAAAADAQABAAABgQDViUs5hoOw1bm+UNffZCK05hSdOJVqiKDVq/2pkhjST2sjMGgDjKDecVhEv8Ot3poXOwWDoqiG

hgk3rEsOo2erf1a4ELVFlGvyhFcgUbRlLIF5iDIKnO1Ipn+4RF0t168Ub7dHxRIXpFGj/o/P1tKNgN8SIuVQanRqP0Do/zthx2XWDNqdyH246A34/ilt+Z

bySNhO9qIUMmR4vulZzEQfm7z9m1VgSUVtp3avxac6ui59SU5OigxufBNdLqDThp+xPYMMOhcLnBzY1V6X+k963I87JCzWybLL26Jg8kyDQk8tZ

+tfjZM/8fl/HNTXU8im7ti7DbGwbwORgfPU90RSHS17gpFpSxlE5Nzc02ru+RPPXE4ejmRhoaLUtJz0QW5UkvrQo39wThZq1+N2ihLPLkKHB0W75B

gxWRKKXrKOVLev+NXQkJN1fB9rGvUh1E7HVLb8NzSq/kKUKuve2iHR0Q8T3vlQlsY6RXmbBdZWC82OcO0HH7nk7+/y4Acc/DM= ubuntu@master01

 

 

 

 

 

4. cluster 설치

여기서부터는 Install 인스턴스 또는 Control Plane 노드에서만 진행합니다.

해당 글에서는 master01 서버에서 설치를 진행하였습니다.  

 

4-1. cp-cluster deployment 다운로드 및 변수 설정 

K-PaaS cp-cluster 설치에 필요한 deployment를 git clone 명령어를 통해 다운로드합니다. 

# git clone https://github.com/K-PaaS/cp-deployment.git -b Branch_v1.5.x

 

cp-cluster 설치 경로로 이동합니다.

# cd ~/cp-deployment/single

 

cp-cluster-vars.sh 파일에 설치에 필요한 환경변수를 사전에 정의하고, 쉘 스크립트를 통해 설치를 진행합니다. 

# vi cp-cluster-vars.sh

#!/bin/bash

# Master Node Count Variable (eg. 1, 3, 5 …)
export KUBE_CONTROL_HOSTS=3

# if KUBE_CONTROL_HOSTS > 1 (eg. external, stacked)
export ETCD_TYPE=stacked

# if KUBE_CONTROL_HOSTS > 1
# HA Control Plane LoadBalanncer IP or Domain
export LOADBALANCER_DOMAIN=10.101.0.22

# if ETCD_TYPE=external
# The number of ETCD node variable is set equal to the number of KUBE_CONTROL_HOSTS
export ETCD1_NODE_HOSTNAME=
export ETCD1_NODE_PRIVATE_IP=
export ETCD2_NODE_HOSTNAME=
export ETCD2_NODE_PRIVATE_IP=
export ETCD3_NODE_HOSTNAME=
export ETCD3_NODE_PRIVATE_IP=

# Master Node Info Variable
# The number of MASTER node variable is set equal to the number of KUBE_CONTROL_HOSTS
export MASTER1_NODE_HOSTNAME=master01
export MASTER1_NODE_PUBLIC_IP=115.68.248.xxx
export MASTER1_NODE_PRIVATE_IP=10.101.0.11
export MASTER2_NODE_HOSTNAME=master02
export MASTER2_NODE_PRIVATE_IP=10.101.0.4
export MASTER3_NODE_HOSTNAME=master03
export MASTER3_NODE_PRIVATE_IP=10.101.0.25

# Worker Node Count Variable
export KUBE_WORKER_HOSTS=3

# Worker Node Info Variable
# The number of Worker node variable is set equal to the number of KUBE_WORKER_HOSTS
export WORKER1_NODE_HOSTNAME=worker01
export WORKER1_NODE_PRIVATE_IP=10.101.0.3
export WORKER2_NODE_HOSTNAME=worker02
export WORKER2_NODE_PRIVATE_IP=10.101.0.6
export WORKER3_NODE_HOSTNAME=worker03
export WORKER3_NODE_PRIVATE_IP=10.101.0.30

# Storage Variable (eg. nfs, rook-ceph)
export STORAGE_TYPE=rook-ceph

# if STORATE_TYPE=nfs
export NFS_SERVER_PRIVATE_IP=

# MetalLB Variable (eg. 192.168.0.150-192.168.0.160)
export METALLB_IP_RANGE=10.101.0.10-10.101.0.25

# MetalLB Ingress Nginx Controller LoadBalancer Service External IP
export INGRESS_NGINX_PRIVATE_IP=10.101.0.40

 

 

Control Plane 환경변수

환경변수 설명  비고
KUBE_Control_HOSTS Control Plane 노드 갯수  
ETCD_TYPE

ETCD 배포 방식 
external : 별도의 노드에 ETCD 구성 // etcd 구성을 위한 인스턴스를 추가로 생성해야한다. 
stacked : Control Plane 노드에 ETCD 구성

KUBE_CONTROL_HOSTS 값이 2 이상일 경우 설정 
LOADBALANCER_DOMAIN 로드밸런서의 VIP IP 또는 Domain 정보  KUBE_CONTROL_HOSTS 값이 2 이상일 경우 설정 
ETCD{n}_NODE_HOSTNAME ETCD n번 노드의 호스트명 KUBE_CONTROL_HOSTS 값이 2 이상일 경우 설정
ETCD_TYPE 값이 external 일 경우 설정
KUBE_CONTROL_HOSTS 값만큼 설정

ETCD{n}_NODE_HOSTNAME ETCD n번 노드의 Private IP KUBE_CONTROL_HOSTS 값이 2 이상일 경우 설정
ETCD_TYPE 값이 external 일 경우 설정
KUBE_CONTROL_HOSTS 값만큼 설정 
MASTER1_NODE_HOSTNAME Control Plane 1번 노드의 호스트명  
MASTER1_NODE_PUBLIC_IP Control Plane 1번 노드의 Public IP Control Plane 1번 노드만 Public IP 정보 필요
MASTER1_NODE_PRIVATE_IP Control Plane 1번 노드의 Private IP  
MASTER{n}_NODE_HOSTNAME Control Plane n번 노드의 호스트명 KUBE_CONTROL_HOSTS 값이 2 이상일 경우 설정
KUBE_CONTROL_HOSTS 값만큼 설정 
MASTER{n}_NODE_ PRIVATE_IP Control Plane n번 노드의 Private IP KUBE_CONTROL_HOSTS 값이 2 이상일 경우 설정
KUBE_CONTROL_HOSTS 값만큼 설정

 

Worker 노드의 환경변수 

환경변수 설명 비고
KUBE_WORKER_HOSTS Worker 노드의 갯수  
WORKER1_NODE_HOSTNAME Worker 1번 노드의 호스트명  
WORKER1_NODE_PRIVATE_IP Worker 1번 노드의 Private IP  
WORKER{n}_NODE_ HOSTNAME Worker n번 노드의 호스트명 KUBE_WORKER_HOSTS 값만큼 설정
WORKER{n}_NODE_PRIVATE_IP Worker n번 노드의 Private IP KUBE_WORKER_HOSTS 값만큼 설정

 

Storage 환경변수

환경변수 설명 비고
STORAGE_TYPE Storage 정보
nfs : NFS 스토리지
rook-ceph : Rook Ceph 스토리지
 
NFS_SERVER_PRIVATE_IP NFS Server 인스턴스의 Private IP STORAGE_TYPE 값 nfs 일 경우 설정

 

LoadBalancer 환경변수

환경변수 설명 비고
METALLB_IP_RANGE MetalLB에서 사용할 Private IP 대역 Control Plane 노드와 동일한 네트워크 서브넷 대역 설정
INGRESS_NGINX_PRIVATE_IP MetalLB를 통해 Ingress Nginx Controller Service에서 사용할 Private IP METALLB_IP_RANGE 값과 중복되지 않도록 설정 

 

 

※ METALLB_IP_RANGE 추가 설명 

METALLB_IP_RANGE 에 설정한 대역의 IP는 추후 배포하는 애플리케이션의 서비스가 LoadBalancer 타입으로 지정될 시 해당 IP 대역이 순차적으로 할당됩니다. 

      예시) 클러스터 내 노드의 서브넷이’192.168.0.0/16’일 경우 
           METALLB_IP_RANGE=192.168.0.5-192.168.0.10  

 

※ INGRESS_NGINX_PRIVATE_IP 추가 설명

INGRESS_NGINX_PRIVATE_IP 값은 MetalLB에서 사용하는 Private IP 이기는 하나 컨테이너 플랫폼 구성 요소의 외부 통신을 위해 고정된 IP값을 지정하여 설정합니다.

IP값은 서브넷에서 사용 중인 다른 Private IP와 겹치지 않아야 하며 METALLB_IP_RANGE 대역과도 겹치지 않도록 지정해야 합니다.

추가로 외부 통신을 위해서는 INGRESS_NGINX_PRIVATE_IP에 설정한 IP와 동일한 인터페이스를 생성 후 Floating IP를 할당하여 Control Plane VM의 인터페이스에 허용된 주소쌍으로 등록 하여야 합니다. (OpenStack 기준)    

      예시) METAL_IP_RANGE=192.168.0.5~192.168.0.10
             INGRESS_NGINX_PRIVATE_IP=192.168.0.30

 

 

 

4-3. cp-cluster 설치 스크립트 실행 

쉘 스크립트를 통해 설치에 필요한 패키지들을 설치하고, 설정한 환경변수를 바탕으로 Ansible playbook을 통한 cp-cluster가 설치됩니다. 

# source deploy-cp-cluster.sh

 

 

cp-cluster 설치가 완료되었다면 아래와 같은 화면이 확인됩니다. 

성공
성공

 

 

 

 

 

cp-cluster 설치 중 설치 로그들을 확인하고 싶거나, 설치가 잘 되지 않고 error가 발생헀을 시 error로그를 확인하고 싶다면 로그 경로는 아래와 같습니다. 

# ~/cp-deployment/standalone/deploy-result.log

 

 

 

4-4. cp-cluster 설치 확인 

설치가 정상적으로 되었다면, 노드 및 kube-system 네임스페이스의 Pod를 확인하여 cp-cluster 설치가 잘 되었는지를 확인합니다.

# kubectl get node

 

 

# kubectl get pods -n kube-system

 

 

 

 

 

 

5. cp-portal 배포

5-1. cp-portal deployment 파일 다운로드 

cp-cluster 설치가 완료되었으면, cp-portal을 배포할 차례입니다. 

파일을 다운로드 할 경로를 생성해주고, wget 명령어로 deployment 압축 파일을 다운로드합니다. 

파일 다운로드 후 압축을 해제합니다. 

 

# mkdir -p ~/workspace/container-platform
# cd ~/workspace/container-platform
# wget –content-disposition https://nextcloud.k-paas.org/index.php/s/SSo9H3qjLsFn3ob/download
# ls ~/workspace/container-platform
   cp-portal-deployment-v1.5.0.tar.gz
# tar -xvf cp-portal-deployment-v1.5.0.tar.gz

 

5-2. cp-portal 변수 정의

cp-portal-vars.sh 파일에 설치에 필요한 변수를 정의합니다.

포탈 기본 배포 프로토콜은 http이며 인증서를 통해 https 설정을 원한다면 K-PaaS git hub 메뉴얼을 참고하시면 됩니다.

해당 글에서는 http 방식으로 설치를 진행하였습니다. 

 

# cd ~/workspace/container-platform/cp-portal-deployment/script

# vi cp-portal-vars.sh
K8S_MASTER_NODE_IP=”115.68.248.239″ K8S_CLUSTER_API_SERVER=”https://${K8S_MASTER_NODE_IP}:6443″
K8S_STORAGECLASS=” cp-storageclass”
HOST_CLUSTER_IAAS_TYPE=”1″
HOST_DOMAIN=”10.101.0.40.nip.io”
PROVIDER_TYPE=”standalone”

 

변수 설명 상세 내용 
K8S_MASTER_NODE_IP Kubernetes Master Node Public IP 입력 Master Node에 접근하기 어려운 경우
Worker Node Public IP 입력
K8S_CLUSTER_API_SERVER Kubernetes API Server URL 입력 컨테이너 플랫폼을 통해 배포된 클러스터는
기본으로 https://${K8S_MASTER_NODE_IP}:6443이다.
Master Node의 6443번 포트 수신 형식이 아닐 경우 값을 수정한다.
K8S_STORAGECLASS StorageClass 명 입력 컨테이너 플랫폼을 통해 배포된 클러스터는
기본으로 cp-storageclass이다.
다른 StorageClass 사용 시 해당 리소스 명을 입력한다.
HOST_CLUSTER_IAAS_TYPE Kubernetes Cluster IaaS 환경 입력 [1] AWS [2] OPENSTACK [3] NAVER [4] NHN [5] KT 번호 입력
HOST_DOMAIN Host Domain 값 입력 {ingress-nginx-controller 서비스의 EXTERNAL-IP}.nip.io 입력
PROVIDER_TYPE 컨테이너 플랫폼 포털 제공 타입 입력 본 가이드는 포털 단독 배포 형 설치 가이드로
standalone 값 입력 필요

 

※ HOST_CLUSTER_IAAS_TYPE 추가 설명 

‘HOST_CLUSTER_IAAS_TYPE’의 IaaS 목록은 Container Platform Portal이 해당 IaaS에서 공식적으로 테스트되고 최적화되었음을 의미합니다. 

물리서버에서 구축을 진행하거나, 타 IaaS 환경에서 구축할 경우에도 OS 종류와 버전이 일치한다면 배포가 가능합니다.

 

※ HOST_DOMAIN 추가 설명 

cp-cluster 설치 시 INGRESS_NGINX_PRIVATE_IP 변수 값을 설정하였습니다. 

해당 변수값에 작성하였던 IP 정보와 무료 wildcard DNS 서비스 nip.io를 사용하여 HOST_DOMAIN 변수값으로 작성합니다. 

예시) 10.101.0.40.nip.io

 

변수값 입력 전 하단의 내용을 확인합니다. 

ingress-nginx-controller 서비스 EXTERNAL-IP 조회 

# kubectl get svc -n ingress-nginx

 

조회되는 EXTERNAL-IP 값은 INGRESS_NGINX_PRIVATE_IP 변수 값으로 설정했던 10.101.0.40

 

curl 명령어를 통해 외부와의 통신 테스트 진행. 404 에러 반환 시 정상.

# curl http://10.101.0.40

 

해당 내용이 확인될 시 HOST_DOMAIN 변수에 해당 IP 정보 및 nip.io 도메인을 사용하여 작성할 수 있습니다.

 

 

 

5-3. cp-portal 배포 스크립트 실행

cp-portal 배포를 위한 스크립트를 실행합니다.

실행 전 스크립트에 실행 권한을 부여 후 실행합니다. 

# chmod +x deploy-cp-portal.sh
# ./deploy-cp-portal.sh

 

 

 

5-4. 설치 확인 

설치가 종료되면 정상적으로 배포가 되었는지 확인합니다. 

처음에 설치 후 Pod 조회 시 Running 상태로 전환되기까지 시간이 조금 소요될 수 있습니다. 

 

Vault Pod 조회 

# kubectl get pods -n Vault

 

 

Habor Pod 조회

# kubectl get pods -n harbour

 

 

 

MariaDB Pod 조회

# kubectl get pods -n mariadb

 

 

 

Keycloak Pod 조회

# kubectl get pods -n keycloak

 

 

 

cp-portal Pod 조회

# kubectl get pods -n cp-portal

 

 

 

생성된 전체 Pod 조회

# kubectl get pods -A

 

 

 

rook-ceph deployment가 간헐적으로 CrashLoopBackupOff 상태로 변경되는 부분이 있으나, 포털 이용 시에는 별다른 문제를 찾지 못했으며 수분 뒤에 확인해보면 정상 상태로 Running으로 변경됩니다.

해당 문제에 대한 원인은 아직 파악하지 못했습니다. 

 

 

 

 

 

6. CP 포털 접속

 

포털에 접속하기 전 Keycloak 페이지 관리자 계정 정보를 조회해야합니다.

계정 정보 조회 명령어는 아래와 같습니다.

# kubectl get cm cp-portal-configmap -n cp-portal -o yaml | grep KEYCLOAK_ADMIN

 

 

초기 계정 정보는 admin / admin 입니다.

보안을 위해 추후에 관리자 패스워드를 변경해주어야합니다. 

초기 패스워드를 변경하는 방법은 아래 메뉴얼을 참고하시면 됩니다.
https://github.com/K-PaaS/container-platform/blob/master/use-guide/portal/container-platform-portal-guide.md#3-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EA%B4%80%EB%A6%AC%EC%9E%90-%EA%B3%84%EC%A0%95-%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C-%EC%B4%88%EA%B8%B0%ED%99%94

 

 

해당 설치글에서는 portal 접속 IP를 Floating IP와 연결하지 않았기 때문에 ubuntu-desktop을 설치하여 포털에 접속하였습니다.

portal 접속 IP를 Floating IP와 연결하였다면 인터넷 환경에서 portal에 접속하시면 됩니다. 

 

ubuntu-desktop 설치 방법은 아래 메뉴얼을 참고하시면 됩니다.

https://ko.linux-console.net/?p=393#gsc.tab=0

 

 

 

 

desktop으로 접속하여 http://portal.10.101.0.40.nip.io  접속 시 포탈이 정상적으로 뜨는것을 확인할 수 있습니다.

admin 계정으로 접속해봅니다. 

 

 

 

 

접속 시 포탈 화면이 정상적으로 출력되고 있으며, 타 기능들도 정상적으로 작동하는것을 확인하였습니다.

 

 

포탈 사용법에 대해서는 아래 메뉴얼을 참고하시면 더 자세히 나와있습니다. 

포털 이용 가이드 url : https://github.com/K-PaaS/container-platform/blob/master/use-guide/portal/container-platform-portal-guide.md

 

 

 

 

Subscribe
Notify of
guest
2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
조쿠로
조쿠로
6 months ago

안녕하세요. 쿠버네티스 구성하면서 많이 참고가 되었습니다. 혹시 rook-ceph 구성하는 방법은 따로 없을까요? 이 부분에 좀 막히는 부분이 있습니다

주진
주진
6 months ago
Reply to  조쿠로

해당 글에서는 paas-ta 플랫폼을 사용하여 쿠버네티스 설치를 진행하였고, 제공되는 스크립트를 통해 rook-ceph를 포함한 모든 구성요소들이 ansible 방식으로 한번에 설치됩니다.

쿠버네티스 환경을 직접 설치하여 구성하는 경우 rook-ceph 설치 방식은 아래 rook-ceph의 공식 document를 참고하시면 됩니다.

https://rook.io/docs/rook/latest-release/Getting-Started/quickstart/#create-a-ceph-cluster

Last edited 6 months ago by 주진 이
2
0
Would love your thoughts, please comment.x
()
x