Cloudstack 설치

변재한·2023년 3월 5일
0
post-thumbnail

앞선 포스트에서 Cloudstack이 뭔지, 어떤 플랫폼이고 어떤 기능이 있는지에 대해서 알아보았다.

이번 포스트에서는 VirtualBox의 VM에 Cloudstack을 설치하고 대시보드에 접속하는 법을 적어보려고 한다.

설치하는 과정은 Cloudstack Docs - Quick Installation Guide를 참고하여 진행하였다.

Virtual Box VM 생성

먼저, Cloudstack을 설치할 VM을 생성한다.

os의 종류는 Linux, 버전은 Red Hat(64-bit)로 설정, 메모리는 넉넉하게 8192MB(docs에서 6GB+ 할당 추천) 할당 후 다음 클릭,

지금 새 가상 하드 디스크 만들기 클릭 후 만들기,

동적 할당, 디스크 크기도 넉넉하게 100GB(docs에서 40GB+ 할당 추천) 할당 후 다음 ... 다음 눌러서 VM 생성.

생성된 VM의 설정으로 이동하여 프로세서 개수를 넉넉하게 4(docs에서 3+ 할당 추천) 할당, 네스티드 VT-x/... 사용하기 체크.

네트워크는 호스트와 동일한 수준의 어댑터에 브리지, 무작위 모드는 모두 허용으로 설정.

위 과정까지 수행한 후 VM 시작 시 시동 디스크를 선택하게 됨, 이 때 디스크 선택
(docs에 있는 Boot Disk 링크에 있는 파일 중 CentOS-7-x86_64-Minimal-2202.02.iso을 본 설치 과정에서는 선택).

첫번째 Install CentOS 7 위치 후 엔터.

Continue 클릭.

Installation Summary 화면 밑 Network & Host Name을 클릭하고 우측 토글 ON으로 바꾸기.

Installation Summary 화면 밑 Installation Destination을 클릭하고 기본 값으로 Done 클릭.

이후 Installation Summary 화면 밑의 Install 버튼을 클릭하면 다음과 같은 화면이 나오고 Root Password를 클릭 후 설정.


설치가 다 끝나면 Reboot를 클릭.

부팅 중 화면에 부팅옵션 CENTOS 관련 두 줄이 뜨면 위의 부팅옵션을 선택 후 계속 부팅 진행

부팅이 끝나면 아까 설정한 Root Password로 VM에 접속(Id: root)

Cloudstack 설치

앞서 Cloudstack을 설치하기 위한 VM 설정을 마쳤고, 이제는 VM에서 Cloudstack 설치를 진행한다.

자신의 VM의 Ip부터 확인,

ip addr 명령어 수행 후 enp0s3의 inet 확인 현재 나의 ip는 192.168.0.7 

Virtual Box 콘솔보다는 Putty를 활용한 창이 더 진행하기 편하므로 CentOS SSH 관련 설정 후 Putty 접속
CentOS 7 SSH 설치

Operating System

설치 시작 전 Centos Upgrade

# yum -y upgrade

Configuring the network

또한, 설치 시작 전 관련 패키지 다운

# yum install bridge-utils net-tools -y

Cloudstack이 네트워킹에 사용할 Bridge 설정

DEVICE=cloudbr0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPV6INIT=no
IPV6_AUTOCONF=no
DELAY=5
IPADDR=192.168.0.7(VM의 Ip, 아까 ip addr로 확인한 Ip)
GATEWAY=192.168.0.1(router Gateway 설정, VM Ip의 마지막 숫자 1로 바꾸기)
NETMASK=255.255.255.0
DNS1=8.8.8.8
DNS2=8.8.4.4
STP=yes
USERCTL=no
NM_CONTROLLED=no

NIC가 앞서 만든 Bridge를 사용하도록 설정.
docs에서는 (e.g. /etc/sysconfig/network-scripts/ifcfg-eth0)를 편집하라고 하였지만, 본 환경에서는 default ethernet interface가 enp0s3이므로 /etc/sysconfig/network-scripts/ifcfg-enp0s3이 편집

TYPE="Ethernet"
BRIDGE=cloudbr0  <-- 추가
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none" <-- "dhcp"에서 "none"으로
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="enp0s3"
UUID="229d7624-2e81-4cd5-a835-748f47cff1f3"
DEVICE="enp0s3"
ONBOOT="yes"
NM_CONTROLLED=no <-- 추가

이제 구성 파일이 올바르게 설정되었으므로 네트워크를 시작하기 위해 몇 가지 명령을 실행

# systemctl enable network
# systemctl restart network

이후 네트워크가 정상적으로 설정되었는지 아래 명렁어 실행

# curl - v www.google.co.kr

정상 동작 확인

Hostname

CloudStack을 사용하려면 호스트 이름이 올바르게 설정해야 한다. 설치에서 기본 옵션을 사용한 경우 호스트 이름은 현재 localhost.localdomain으로 설정되어 있다. 이를 테스트하기 위해 다음을 실행.

# hostname --fqdn

localhost 출력 확인 후, hostname 설정. vi /etc/hosts 명령어 실행 후

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.7(VM IP) srvr1.cloud.priv  <----- 기재

이후 network 재시작

# systemctl restart network

hostname 재확인

# hostname --fqdn

srvr1.cloud.priv이 출력되면 제대로 설정이 된 것.

SELinux

현재 CloudStack이 제대로 작동하려면 SELinux를 허용 또는 사용 안 함으로 설정해야 한다.
실행 중인 시스템에서 SELinux를 허용하도록 구성하려면 다음 명령을 실행.

# setenforce 0

이 상태를 유지하려면 다음 예와 같이 허용 상태를 반영하도록 vi /etc/selinux/config 명령어 수행 후 SELINUX=permissive로 변경

NTP

NTP 구성은 클라우드 서버의 모든 클럭을 동기화하는 데 필요. 그러나 NTP는 기본적으로 설치되지 않으므로, 이 단계에서는 NTP를 설치하고 구성한다.

# yum -y install ntp

실제 NTP 기본 구성은 사용할 수 있으므로 다음과 같이 enable하도록 설정하고 부팅 시 시작되도록 설정.

# systemctl enable ntpd
# systemctl start ntpd

Configuring the CloudStack Package Repository

다음으로 CloudStack 패키지 저장소를 사용하도록 시스템을 구성한다.
vi /etc/yum.repos.d/cloudstack.repo 명령어 수행 후 아래 정보 삽입.

[cloudstack]
name=cloudstack
baseurl=http://download.cloudstack.org/centos/$releasever/4.17/
enabled=1
gpgcheck=0

NFS

본 docs의 구성에서는 Primary 스토리지와 Secondary 스토리지 모두에 NFS를 사용.
먼저, nfs-utils 설치 시작.

# yum -y install nfs-utils

Primary, Secondary NFS 스토리지 2개의 NFS 공유 설정, vi /etc/exports 명령어 수행 후 아래 정보 삽입.

/export/secondary *(rw,async,no_root_squash,no_subtree_check)
/export/primary *(rw,async,no_root_squash,no_subtree_check)

앞서 /export/secondary, /export/primary 이 두 경로는 시스템에 존재하지 않는 두 개의 디렉터리를 지칭하기 때문에 다음 명령어를 이용하여 두 개의 디렉토리를 생성하고 권한을 설정.

# mkdir -p /export/primary
# mkdir /export/secondary

CentOS 7.x 릴리스에서는 기본적으로 NFSv4을 사용. NFSv4에서는 모든 클라이언트에서 도메인 설정이 일치해야 한다. 이 경우 도메인은 cloud.priv이므로 /etc/idmapd.conf의 도메인 설정에 주석을 달지 않고 다음과 같이 설정.

Domain = cloud.priv


이제 /etc/sysconfig/nfs 파일의 맨 아래에 구성 값을 추가해야 한다.
주석으로 넣지 말고 제일 아래에 복사 붙여넣기.

LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
RQUOTAD_PORT=875
STATD_PORT=662
STATD_OUTGOING_PORT=2020

방화벽을 비활성화하여 연결을 차단하지 않도록 명령어 수행.

# systemctl stop firewalld
# systemctl disable firewalld

이제 다음 명령을 실행하여 부팅 시 nfs 서비스를 시작하고 실제로 호스트에서 시작하도록 구성.

# systemctl enable rpcbind
# systemctl enable nfs
# systemctl start rpcbind
# systemctl start nfs

Management Server Installation

이제 CloudStack Management Server 및 주변 툴들을 설치한다.

Database Installation and Configuration

앞선 포스트에서 Cloudstack Management Server 영역에 Mysql 데이터베이스가 위치한 것을 보았듯이, 이번 단계에서는 MySQL을 설치하고 CloudStack에서 잘 실행되도록 몇 가지 옵션을 구성한다.

CentOS 7 버전부터 더 이상 MySQL 바이너리를 제공하지 않으므로, MySQL 서버 및 Python MySQL Connector를 제공할 MySQL Community 저장소를 추가해야 한다.

# yum -y install wget
# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm

다음으로 MySQL 서버를 설치한다.

# yum -y install mysql-server

이후, vi /etc/my.cnf 명령어 수행 후 [mysqld] 섹션에 다음 문구를 추가한다.
나는 [mysqld] 섹션 제일 마지막에 추가해주었다.

innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
log-bin=mysql-bin
binlog-format = 'ROW'

MySQL이 제대로 구성되었으니 MySQL을 시작하고 부팅 시 시작하도록 구성한다.

# systemctl enable mysqld
# systemctl start mysqld

MySQL Connector Installation

이전에 추가한 MySQL Community 저장소에서 Python MySQL Connector를 설치한다.

# yum -y install mysql-connector-python

Installation

이제 Management Server를 설치할 차례다. 다음 명렁어를 수행한다.
시간이 조금 소요된다.

# yum -y install cloudstack-management

Cloudstack에서의 Database를 설정한다. password는 임의로 설정한다.

# cloudstack-setup-databases cloud:password@localhost --deploy-as=root

정상적으로 완료되면 아래와 같은 메시지가 표시된다.

데이터베이스가 생성되었으므로 Management Server를 세팅한다.

# cloudstack-setup-management

System Template Setup

Cloudstack이 무엇인지에 대한 전 포스트에서 Cloudstack은 여러 SystemVM을 운용하여 인프라를 효율적으로 관리할 수 있다고 기술했었다. 이러한 SystemVM을 생성하기 위한 VMTemplate을 다운로드하고 System VM을 Secondary Storage에 배포하는 단계를 진행한다.

우리는 앞서 로컬경로 /export/secondary에 NFS 서버 설정을 하였으므로, 아래의 스크립트만 실행하면 된다.

/usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m /export/secondary -u http://download.cloudstack.org/systemvm/4.17/systemvmtemplate-4.17.2-kvm.qcow2.bz2 -h kvm -F

이상으로 Management Server의 설정을 마친다.

KVM Setup and Installation

KVM은 Linux를 하이퍼바이저로 전환하여 호스트 머신에서 게스트 또는 VM(가상 머신) 등 격리된 가상 환경 여러 개가 실행되도록 할 수 있는 오픈소스 가상화 기술이다. 이번 챕터에서는 이러한 KVM과 관련된 설정과 설치를 진행한다.

Prerequisites

위에서 진행한 Configuring Network, Hostname, SELinux, NTP, Configuring the Cloudstack Package Repository 설정을 그대로 따라갔다는 하에서 진행한다.

Installation

KVM 에이전트 설치는 명령 하나만으로 간단하지만, 이후에 몇 가지 사항을 구성해야 한다. 우리는 EPEL 저장소도 설치해야 한다.

# yum -y install epel-release
# yum -y install cloudstack-agent

KVM Configuration

KVM에는 libvirt와 QEMU의 두 가지 구성 부분이 있다.

QEMU Configuration

QEMU VNC 구성을 편집해야 한다. 이 작업은 vi /etc/libvirt/qemu.conf 명령어 수행 후 다음 줄이 찾아 주석을 해제시켜준다.

vnc_listen=0.0.0.0

Libvirt Configuration

CloudStack은 가상 시스템을 관리하기 위해 libvirt를 사용한다. 따라서 libvirt를 올바르게 구성해야 한다.

본 포스트의 Cloudstack 설치에서는 단일 호스트(srvr.cloud.priv)로 진행했고 이러한 단일 호스트로 Cloudstack을 사용하더라고 일반 요구 사항을 충족하려면 다음 단계를 수행하는 것이 좋다. 실시간 마이그레이션을 수행하려면 libvirt가 보안되지 않은 TCP 연결을 수신해야 한다. 또한, Multicast DNS Advertising를 사용하기 위해 libvirts Attempt를 끌 필요가 있다. 이를 위해 vi /etc/libvirt/libvirtd.conf 명령어를 수행하고 아래 파라미터의 줄을 찾고 주석을 제거 후 값을 똑같이 바꾼다.

listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "none"
mdns_adv = 0

libvirtd.conf에서 "listen_tcp"를 설정하는 것만으로는 충분하지 않으며, 다른 파라미터도 변경해야 한다. vi /etc/sysconfig/libvirtd 명령어 수행 후 아래 줄을 찾고 주석을 해제한다.

#LIBVIRTD_ARGS="--listen"

libvirt를 재시작한다.

# systemctl restart libvirtd

KVM configuration complete

KVM이 시스템에서 정상적으로 실행되고 있는지 확인한다.(kvm_intel or kvm_amd 모듈이 표시되어야 함.)

# lsmod | grep kvm <---- 명령어 
kvm_intel              55496  0           ---
kvm                   337772  1 kvm_intel   - 출력
kvm_amd # if you are in AMD cpu           ---

UI Access

지금까지 오류없이 따라왔다면 브라우저에 http://:8080/client로 접속해본다.
본 포스트의 VM IP는 192.168.0.7이어서 http://192.168.0.7:8080/client로 접속해보았다.

기본 Username은 admin이고 password는 password이다.

이상으로 Cloudstack 4.17버전의 설치를 마친다.
다음은 Cloudstack에서의 Zone 구성을 해보는 실습을 해보겠다.

🤔참고한 자료
profile
Infra and Devops 엔지니어가 되고 싶어용

0개의 댓글