본 문서 (Kubespray 설치 가이드) 는 개방형 PaaS 플랫폼 고도화 및 개발자 지원 환경 기반의 Open PaaS에 배포되는 컨테이터 플랫폼을 설치하기 위한 Kubernetes Native를 Kubespray를 이용하여 설치하는 방법을 기술하였다.
PaaS-TA 5.5 버전부터는 Kubespray 기반으로 단독 배포를 지원한다. 기존 Container 서비스 기반으로 설치를 원할 경우에는 PaaS-TA 5.0 이하 버전의 문서를 참고한다.
1.2. 범위
설치 범위는 Kubernetes Native를 검증하기 위한 Kubespray 기본 설치를 기준으로 작성하였다.
1.3. 시스템 구성도
시스템 구성은 Kubernetes Cluster(Master, Worker)와 BOSH Inception(DBMS, HAProxy, Private Registry)환경으로 구성되어 있다.
Kubespary를 통해 Kubernetes Cluster를 설치하고 BOSH release로 Database, Private registry 등 미들웨어 환경을 제공하여 Docker Image로 Kubernetes Cluster에 Container Platform 포털 환경을 배포한다.
총 필요한 VM 환경으로는 Master VM: 1개, Worker VM: 1개 이상, BOSH Inception VM: 1개가 필요하고 본 문서는 Kubernetes Cluster 환경을 구성하기 위한 Master VM 과 Worker VM 설치 내용이다.
본 설치 가이드는 Ubuntu 18.04 환경에서 설치하는 것을 기준으로 하였다. Kubespray 설치를 위해서는 Ansible v2.9 +, Jinja 2.11+ 및 python-netaddr이 Ansible 명령을 실행할 시스템에 설치되어 있어야 하며 설치 가이드에 따라 순차적으로 설치가 진행된다.
Kubespray 설치에 필요한 주요 소프트웨어 및 패키지 Version 정보는 다음과 같다.
주요 소프트웨어
Version
Python Package
Version
Kubespray
v2.14.2
ansible
2.9.16
Kubernetes Native
v1.18.6
jinja2
2.11.1
Docker
v20.10.2
netaddr
0.7.19
pbr
5.4.4
jmespath
0.9.5
ruamel.yaml
0.16.10
Kubernetes 공식 가이드 문서에서는 Cluster 배포 시 다음을 권고하고 있다.
deb / rpm 호환 Linux OS를 실행하는 하나 이상의 머신 (Ubuntu 또는 CentOS)
머신 당 2G 이상의 RAM
control-plane 노드로 사용하는 머신에 2 개 이상의 CPU
클러스터의 모든 시스템 간의 완전한 네트워크 연결
2.2. SSH Key 생성 및 배포
Kubespray 설치를 위해서는 SSH Key가 인벤토리의 모든 서버들에 복사되어야 한다. 본 설치 가이드에서는 RSA 공개키를 이용하여 SSH 접속 설정을 진행한다.
SSH Key 생성 및 배포 이후의 모든 설치과정은 Master Node에서 진행한다.
Master Node에서 RSA 공개키를 생성한다.
$ ssh-keygen -t rsa
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:TDN47SvyTaJ2es9nGrCLDQi6K3F8JYI2IBQ8axx+COg ubuntu@ip-10-0-0-148
The key's randomart image is:
+---[RSA 2048]----+
|+o. |
|=+ . . |
|B.= . = . |
|.E... .+ + |
|o.+. o S . |
|..o... o . |
|.o .. o + + |
|.. .BoB .o |
|+. .+++.=+ |
+----[SHA256]-----+
사용할 Master, Worker Node에 공개키를 복사한다.
# 출력된 공개키 복사
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAdc4dIUh1AbmMrMQtLH6nTNt6WZA9K5BzyNAEsDbbm8OzCYjGPFNexrxU2OyfHAUzLhs+ovXafX0RG5bvm44B04LH01maV8j32Vkag0DtNEiA96WjR9wpTeqfZy0Qwko9+TJOfK7lVT7+GCPm112pzU/t3i9oaptFdalGLYC+ib2+ViibkV0rZ8ds/zz/i0uzXDqvYl1HYfc7kA1CtinAimxV2FU/7WDTIj5HAfPnhyXPf+k1d3hPJEZ+T3qUmLnVpIXS2AHETPz29mu/I8EWUfc8/OVFJqS8RAyGghfnbFPrVEL3+jp/K6nwfX9nnpJWXvMtYenKwHI+mY8iuEYr ubuntu@ip-10-0-0-34
사용할 Master, Worker Node의 authorized_keys 파일 본문의 마지막 부분(기존 본문 내용 아래 추가)에 공개키를 복사한다.
$ vi .ssh/authorized_keys
ex)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU+CSWd/bC4IfC+cuRDDJwAfjiPXAZAYFc7S8B8rUqAcuCPZUcbSZu5BIEAxZC+DCtpAJmtCGl/w7Gp1Wwij6hm/WlYeWapoqTe1yeLA/k0YhY0kQWuobfGlo9w7gxFKY8Aqtft+lRLhxteYc+/XxENFoq+eVFbX9jAOBbhM73K1oiV2YZcNAriLXixFYYVTmOPnJYUabJLi7E5ZEo3RaQ7Wol2fPPKQyvblwl9T5AoKF+/haWifeNEDHsd4XW9lveIRMsY3x7zUsnCtxzAlQKsw/eogKpyCc6E1GhmSTNy+K5fzhLgBJvl3J8t/+MKf8UGJA11pAn1L0vt56dTOdj aws-paasta-kube-key
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAdc4dIUh1AbmMrMQtLH6nTNt6WZA9K5BzyNAEsDbbm8OzCYjGPFNexrxU2OyfHAUzLhs+ovXafX0RG5bvm44B04LH01maV8j32Vkag0DtNEiA96WjR9wpTeqfZy0Qwko9+TJOfK7lVT7+GCPm112pzU/t3i9oaptFdalGLYC+ib2+ViibkV0rZ8ds/zz/i0uzXDqvYl1HYfc7kA1CtinAimxV2FU/7WDTIj5HAfPnhyXPf+k1d3hPJEZ+T3qUmLnVpIXS2AHETPz29mu/I8EWUfc8/OVFJqS8RAyGghfnbFPrVEL3+jp/
2.3. Kubespray 다운로드
2.3.부터는 Master Node에서만 진행을 하면 된다.(Worker Node에는 더 이상 추가 작업이 없음) Kubespray 설치에 필요한 Source File을 Download 받아 Kubespray 설치 작업 경로로 위치시킨다.
Kubespray 설치에 필요한 Ansible, Jinja 등 Python Package 설치를 진행한다.
apt-get update를 진행한다.
$ sudo apt-get update
python3-pip Package를 설치한다.
$ sudo apt-get install -y python3-pip
Kubespray 설치경로 이동, pip를 이용하여 Kubespray 설치에 필요한 Python Package 설치를 진행한다.
# AWS 환경 설치 시
$ cd paas-ta-container-platform-deployment/standalone/aws
# Openstack 환경 설치 시
$ cd paas-ta-container-platform-deployment/standalone/openstack
$ sudo pip3 install -r requirements.txt
2.5. Kubespray 파일 수정
Kubespray inventory 파일에는 배포할 Master, Worker Node의 구성을 정의한다. 본 설치 가이드에서는 1개의 Master Node와 3개의 Worker Node, 1개의 etcd 배포를 기준으로 가이드를 진행하며 기본 CNI는 calico로 설정되어있다. (기본 Cluster 환경 구성은 Master Node 1개와 Worker Node 1개 이상을 필요로 한다.)
mycluster 디렉토리의 inventory.ini 파일을 설정한다.
$ vi inventory/mycluster/inventory.ini
# inventory.ini
# {MASTER_HOST_NAME}, {WORKER_HOST_NAME} : 실제 Master, Worker Node hostname ($ hostname 명령어를 입력시 나오는 이름)
# {MASTER_NODE_IP}, {WORKER_NODE_IP} : Master, Worker Node Private IP
# ex)
# ip-10-0-0-1xx ansible_host=10.0.0.1xx ip=10.0.0.1xx etcd_member_name=etcd1
# ip-10-0-0-2xx ansible_host=10.0.0.2xx ip=10.0.0.2xx
[all]
{MASTER_HOST_NAME} ansible_host={MASTER_NODE_IP} ip={MASTER_NODE_IP} etcd_member_name=etcd1
{WORKER_HOST_NAME1} ansible_host={WORKER_NODE_IP1} ip={WORKER_NODE_IP1} # 사용할 WORKER_NODE 개수(1개 이상)에 따라 작성
{WORKER_HOST_NAME2} ansible_host={WORKER_NODE_IP2} ip={WORKER_NODE_IP2}
{WORKER_HOST_NAME3} ansible_host={WORKER_NODE_IP3} ip={WORKER_NODE_IP3}
[kube-master]
ip-10-0-0-1xx #{MASTER_HOST_NAME}
[etcd]
ip-10-0-0-1xx #{MASTER_HOST_NAME}
[kube-node]
ip-10-0-0-2xx #{WORKER_HOST_NAME1}: 사용할 WORKER_NODE 개수(1개 이상)에 따라 작성
{WORKER_HOST_NAME2}
{WORKER_HOST_NAME3}
[calico-rr]
[k8s-cluster:children]
kube-master
kube-node
calico-rr
2.6. Kubespray 설치
Ansible playbook을 이용하여 Kubespray 설치를 진행한다.
인벤토리 빌더로 Ansible 인벤토리 파일을 업데이트한다.
# {MASTER_NODE_IP}, {WORKER_NODE_IP} : Master, Worker Node Private IP
# {WORKER_NODE_IP}는 사용할 WORKER_NODE 개수(1개 이상)에 따라 작성
# ex)
# declare -a IPS=(10.0.0.1x 10.0.0.2x 10.0.0.3x 10.0.0.4x)
$ declare -a IPS=({MASTER_NODE_IP} {WORKER_NODE_IP1} {WORKER_NODE_IP2} {WORKER_NODE_IP3})
# ${IPS[@]}는 변수가 아니라 명령어의 일부분이므로 주의
$ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
Openstack 환경에 설치 시 추가적인 환경변수 설정이 필요하며 설정 파일을 다운로드 받아 자동으로 환경변수 등록이 가능하다.
# Openstack UI 로그인 > 프로젝트 선택 > API 액세스 메뉴 선택 > OpenStack RC File 다운로드 클릭
# 스크립트 파일 실행 후 Openstack 계정 패스워드 입력
$ source {OPENSTACK_PROJECT_NAME}-openrc.sh
Please enter your OpenStack Password for project admin as user admin: {패스워드 입력}
Openstack 네트워크 인터페이스의 MTU값이 기본값 1450이 아닐 경우 CNI Plugin MTU 설정 변경이 필요하다.