Cloud/Openstack

Openstack - Train (Packstack을 통한 비 대화식 자동화 설치)

bxmsta9ram 2021. 11. 4. 16:24

오픈스택의 이해.pdf
2.06MB

Software as a Service
(SaaS)
- 클라우드 환경에서 운영 중인 서비스 제공자의 애플리케이션을 사용자가 사용할 수 있는
  클라우드 컴퓨팅 모델
- 사용자는 웹 브라우저나 프로그램의 인터페이스, 그리고 Thin 클라이언트와 같은 다양한 
  장치를 통해 이러한 애플리케이션에 접근할 수 있다.
- 그러나 사용자는 네트워크나 서버 그리고 운영체제나 스토리지와 같이, 현재 기본적인
  클라우드 환경을 구성하는 요소들을 관리하거나 통제할 수는 없다.
  (예 : e-mail, CRM, 가상 데스크톱)
Platform as a Service
(PaaS)
- 서비스 공금자가 제공하는 프로그램 언어, 라이브러리, 서비스 그리고 툴을 사용해서 제작한
  애플리케이션 또는 사용자가 직접 제작한 애플리케이션을 클라우드 환경에서 배포할 수 
  있도록 허용하는 클라우드 모델
- 사용자는 네트워크, 서버, 운영체제 또는 스토리지와 같이 기본적인 클라우드 환경을 구성하는
  요소들을 관리하거나 통제할 수 없다.
- 그러나 배포된 애플리케이션의 환경이나 설정 등을 통제할 수 있다.
  (예 : DB, Web 서버, 윈도우의 Azure 등)
Infrastructure as a Service
(IaaS)
- 프로세싱, 스토리지, 네트워크, 그리고 다른 기본적인 컴퓨팅 자원들을 사용자에게 제공하는
  클라우드 모델이다.
- 이러한 환경을 통해 사용자는 임의의 소프트웨어를 배포하거나 사용할 수 있으며, 운영체제나
  애플리케이션도 이러한 소프트웨어에 포함될 수 있다.
- 사용자는 기본적인 클라우드 환경을 관리 또는 통제할 수 없으나 운영처제, 스토리지 그리고
  배포된 애플리케이션에 대한 통제는 할 수 있다.
- 가상머신이나 서버, 네트워크 등이 그 예라 할 수 있다.

 

우리가 다룰 것은 'Nova' 임.




 

## Openstack 설치 ##

## 메모리가 6GB 이상이 되지 않으면 설치가 되지 않음. (7GB로 설정)
## CPU 2개 이상
## HDD 50GB

재부팅까지 끝마치면 설치 완료.


## Train Version 설치에 앞 서 [환경설정] 하기 ##

// 브릿지로 연결되었는지 확인 + IP 및 인터넷 접속 확인

 

## 기존의 네트워크나 방화벽이 돌아가면 에러가 뜨므로 모두 정지

* stop : 지금 당장 정지하겠다.

* disable : 동작 안시키게 하겠다.

 

// 네트워크 매니저

systemctl disable NetworkManager              // 우측 상단의 랜카드를 꺼버리는 것임. 얘를 죽이면

systemctl stop NetworkManager

이러면 인터넷이 안된다. 그래서 NetworkManager는 꺼졌으나 현재 인터넷이 되긴함. 하지만 부팅했을 때 자동으로 되게끔 아래 명령어 추가해주기.

systemctl enable network

 

// 방화벽

systemctl disable firewalld

systemctl stop firewalld

setenforce 0


## yum update 및 yum의 형님 뻘인 epel을 가져다가 레포지토리를 업데이트하면서 train을 설치

yum -y update

 

yum -y install centos-release-openstack-train epel-release

 

 

 

rpm -qa | grep openstack


// Openstack은 설치하는 것이 매우 번거롭고 까다롭다. 이것을 자동화 해주는 것이 있는데 Packstack이라고 함.

// 일반인들은 스스로 까는게 매우 힘듦. 그래서 이 자동화 프로그램을 설치하자.

yum -y install openstack-packstack

 

// Train처럼 이것도 설치되었나 확인해보기

rpm -qa | grep openstack

대화식 및 비대화식(AnswerFile) 설치 방법이 있음.

1. 대화식 설치 방법

   : - [Packstack] + [Enter] 하면 끝남.   

     - [AnswerFile 수동 생성]을 해야함. 하지만 권장하지 않음. 엄청 복잡하고, 대답 하나 잘못하면 설치 안되고 그럼.

 

2. 비대화식 설치 방법

   : - [AnswerFile]을 자동 생성해줌.

     - 우리가 할 방법이다.



## 고난의 연속... Packstack을 활용한 Openstack 설치 시작... ##

yum -y install python-openstackclient         // Python Language를 이용하는 Client 역할이 필요하여 설치.

                                                                (이걸 설치해줘야만 Python Language를 사용할 수 있다.)

 

② 그리고 추가로 Openstack용 selinux가 필요하다

yum -y install openstack-selinux                

 

③ DB 설치 (DB 프로그램 3개가 필요하다.)

yum -y install mariadb mariadb-server python2-PyMySQL


## DB 환경변수 파일 생성 및 설정 (새 파일이 생성된다.)

// IP 확인

10.10.8.90

 

vi /etc/my.cnf.d/openstack.cnf

여기다가 입력

[mysqld]
bind-address = 10.10.8.90

default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8


 

// DB 시작

systemctl enable mariadb.service

systemctl start mariadb.service



## RabbitMQ 설치 ##

 

OpenStack은 메세지 대기열을 사용하여, 서비스간의 작업 및 상태 정보를 조정한다. 메세지 큐 서비스는 일반적으로

컨트롤러 노드에서 실행된다.

 

OpenStack은 RabbitMQ, Qpid 및 ZeroMQ를 포함한 여러 메세지 대기열 서비스를 지원한다.

그 중에 우리는 [RabbitMQ] 메세지 대기열 서비스를 구현할 것이다.

 

// RabbitMQ 설치

yum -y install rabbitmq-server

 

// RabbitMQ 실행

systemctl enable rabbitmq-server.service

systemctl start rabbitmq-server.service

 

// RabbitMQ 사용자 추가(openstack이라는 사용자 만들기)

rabbitmqctl add_user openstack RABBIT_PASS


// RabbitMQ의 openstack 사용자에게 '읽기, 쓰기, 실행' 권한 주기 및 확인하기

rabbitmqctl set_permissions openstack ".*" ".*" ".*"        // 777 권한과 같음.

rabbitmqctl list_permissions


## Etcd ##

OpenStack 서비스는 [분산 키 잠금], [구성 저장], [서비스 활성 상태 및 기타 시나리오 추적]을 위해

분산된 신뢰할 수 있는 {키 : 값} 저장소인 'Etcd'를 사용한다.

 

'Etcd' 서비스는 컨트롤러 노드에서 실행된다.

 

// 설치 및 환경 변수 설정

yum -y install etcd

 

vi /etc/etcd/etcd.conf

 

systemctl enable etcd

systemctl restart etcd

 

// etcd 상태 확인

systemctl status etcd

정상 동작



## 1. 대화식 Packstack(AnswerFile 수동 생성) - 알고만 있자. 이거 안 씀!! ##

packstack --gen-answer-file=/root/answerfile.txt

vi answerfile.txt

CONFIG CEILOMETER INSTALL=n
CONFlG_AMQP_HOST=213.Ø.113.3
CONFlG_KEYSTONE_ADMIN_USERNAME=admin
CONFIG KEYSTONE ADMIN PW=4315c5536f574ae9

 

packstack --answer-file=/root/answerfile.txt

// 대화식으로 진행되며 [Yes or No]를 선택하면서 해야 하는데, 우리가 이걸 잘 모르므로 잘 못 체크할 가능성이 높음!!

 

 

## 1. 비 대화식 Packstack(AnswerFile 자동 생성) - 우리가 쓸 방식 ##

packstack --allinone

// answerfile 년월일시 형식으로 자동 생성이 된다. (allinone가 자동생성 명령임)

// Error가 발생하고(설치가 실패하고, 아래와 같은 AnswerFile이 생성된다.)

 

// 에러파일 긁어놓기.

ERROR : Failed to run remote script, stdout: 
stderr: Warning: Permanently added '10.10.8.90' (ECDSA) to the list of known hosts.
+ trap t ERR
+ facter -p
facter: error while loading shared libraries: leatherman_curl.so.1.3.0: cannot open shared object file: No such file or directory
++ t
++ exit 127

Please check log file /var/tmp/packstack/20211105-112113-Ve8A1H/openstack-setup.log for more information
Additional information:
 * Parameter CONFIG_NEUTRON_L2_AGENT: You have chosen OVN Neutron backend. Note that this backend does not support the VPNaaS or FWaaS services. Geneve will be used as the encapsulation method for tenant networks

 

 

// 아래 이름으로 파일이 자동 생성되는데 그것을 확인

cd ~

vi packstack-answers-20211105-112114.txt

 

// 이것을 편이상 이름을 [answerfile.txt]으로 바꿀 것임. 우리의 목적은 [answerfile.txt]를 만드는 것이다.

mv packstack-answers-20211105-112114.txt answerfile.txt

 

 

// 에러 수정 1 : ovn -> openvswitch 변경

 

 

// 에러 수정 1 : 이제 다음으로 이름 바꿔주기

vi /etc/hosts

10.10.8.90     localhost

 

 

// 방금 자동 설치를 하는 도중 에러가 떨어졌고(당연한 수순), 자동 설치 관리자인 Puppet에 대한 log가 남아있기

   때문에 그것을 다 지우고 재 설치 해야한다. (이게 정통한 설치 방법!!)

yum -y remove openstack-*

 

yum -y install openstack-packstack

 

packstack --answer-file=/root/answerfile.txt

 

rpm -qa | grep leatherman

 

 

// leatherman 버전 1.10.0(삭제) -> 1.3.0 변경(설치)

yum -y remove leatherman-1.10.0-1.el7.x86_64

 

yum -y install leatherman-1.3.0*

1.3.0 Version 설치 완료.

 

rpm -qa | grep leatherman

1.3.0 버전으로 변경 완료


packstack --answer-file=/root/answerfile.txt

흠...? 파일이 떡 하니 있는데 없다구...? 왜그러니...

 

// 아! 버전을 낮췄으니 openstack을 삭제 -> 재설치

yum -y remove openstack-*

yum -y install openstack-packstack

 

이 AnswerFile로 다시 설치해줘야 함. ㅋㅋ... 힘들다 힘들어..

packstack --answer-file=/root/answerfile.txt

Python Error(Package: python2-pyngus-2.3.0) 때문에 하드웨어 Test가 실패(10.10.8.90)해서 나온 에러이다!!


지금 설치하는 애가 컨트롤러인데, 컨트롤러 노드의 관리 IP 주소를 사용하도록 서비스를 구성한다. 이 것은 관리

네트워크를 통해 다른 노드가 액세스 할 수 있도록 하기 위한 조치이다.

vi /etc/sysconfig/memcached

 

systemctl status memcached.service

systemctl restart memcached.service

 

 

yum -y remove openstack-*

yum -y install openstack-packstack

packstack --answer-file=/root/answerfile.txt

 

yum -y install python2-qpid-proton-0.28.0-1.el7.x86_64.rpm

yum으로 안깔리는 경우도 있나...? 어디서 구하지...

 

 

htps://www.pbone.net

python2-qpid-proton-0.28.0-1.el7.x86_64.rpm  검색
ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/epel/testing/6.2019-05-29/x86_64/Packages/p/python2-qpid-proton-0.28.0-1.el7.x86_64.rpm

 

yum -y remove openstack-*

yum -y install openstack-packstack

packstack --answer-file=/root/answerfile.txt

성공 성공!! 오예!



 

## OpenStack 접속 ##

Host PC]

http://10.10.8.90/dashboard

 

ID : admin

PW : 리눅스의 /root의 keystonerc_admin 에 있음.  ==> b9768e07d3b043e3

 

♥  착  하  게  살  겠  습  니  다  ♥

 



## Network Service ##

systemctl status libvirtd                                      // KVM Openstack에서 사용하는 하이퍼바이저

 

systemctl status openstack-nova-compute             // 오픈스택에서 컴퓨팅 서비스


오픈스택의 네트워크 서비스인 Neutron 은 인스턴스를 클라이언트에게 제공하는 컴퓨트 서비스 Nova와 네트워크를 통해 연결되어 있으며 Nova 서비스가 생성하는 인스턴스에게 가상의 네트워크를 제공하는 역할을 한다.

 

* Neutron L2 agent
  가상 인프라 환경을 구축하고 유지, Open vSwitch, Linuxbirdge 등이 사용된다.


* Neutron L3 agent
  Neutron 라우터와 이와 관련된 기능을 구축하고 유지한다.

 

## 내부 네트워크 생성
openstack network create private01


openstack subnet create private01_subnet --subnet-range 172.16.1.0/24 --network private01 --dns-nameserver 8.8.8.8 --dns-nameserver 172.16.1.100 --no-dhcp


openstack router create R1


openstack router add subnet R1 private01_subnet

 

 


## 방금전에 만든 네트워크를 GUI로 삭제 & 다시 재생성 해보자!!

라우터 삭제 - 네트워크 삭제  (라우터 삭제를 안하고 삭제하려고 하면 삭제가 안된다.)
603 Gs 도네



## 네트워크 / 라우터 / 보안그룹 / Glance 이미지 다운 & 등록 / 인스턴스 생성 ##

 

## 지웠던 네트워크 CUI로 재생성

openstack network create private01
openstack subnet create private01_subnet --subnet-range 172.16.1.0/24 --network private01 --dns-nameserver 8.8.8.8 --dns-nameserver 172.16.1.100           // 기존에 만들었을때 사용한 --no-dhcp를 지우고 만든다!!

                                                                  dhcp 사용할것이기 때문에 !!


## 지웠던 라우터 또한 재생성 & 위에서 만든 private01 네트워크와 연결

openstack router create R1
openstack router add subnet R1 private01_subnet


## 보안그룹

openstack security group rule create --protocol icmp --ingress test_sg1
openstack security group rule create --protocol tcp --dst-port 22:22 test_sg1

// CUI로 만드려고 하니까 갑자기 쌩뚱맞게 'test_sg1' 보안그룹을 찾을 수 없다고 나옴...; 이거 만드는 명령어인데.

// 그래서 이 보안그룹은 GUI로 만들어보자.

 



## Glance 이미지 서비스 ##

Glance 서비스에서 이미지를 업로드 할 때 인스턴스 이미지 포맷을 지정할 필요가 있다.  

Glance는 다양한 이미지 포맷을 지원하는데 그 중에서 디스크와 컨테이너의 포맷이 주로 사용된다.  

가상 디스크는 일반적으로 사용하는 물리 서버의 부트 드라이버와 유사하며 하나의 파일로 압축되어 저장된다.

RAW 구체적인 형태가 없는 디스크 포맷
VHD VMware, Xen, MS, VirtualBox 등
VMDK 많은 일반적인 가상머신이 지원하는 포맷
qcow2 KVM/QEMU
ISO CD/DVD
AMI, ARI, AKI  

솔직히 좋긴 좋은 것 같다... 근데 설치 과정이 너무 복잡해 ㅠㅠ


## 이미지를 다운받아 보자!!

https://download.cirros-cloud.net/0.4.0/

x86 : intel CPU가 장착된 컴퓨터의 이미지 // 64 : 64bit

wget https://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

ll

이미지 파일을 성공적으로 받아왔다.

 

openstack image create "cirros-0.4" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public

 

## 이미지

// wget을 통한 이미지 다운로드

https://download.cirros-cloud.net/0.4.0/   사이트에서 'cirros-0.4.0-x86_64-disk.img' 파일의 링크를 따서 다운받기.

                                                    (원래 Full name 주소를 필기해놨는데 들어갈 때마다 404 에러 떠서 ㅋㅋㅋ)

 

wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

 

// Cirros 이미지 등록

source keystonerc_admin                 // admin으로 접속

openstack image create "cirros-0.4" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --public


이미지를 통해 인스턴스를 생성하는 것은 다음에 하는걸로!! Network 등 많은 것들이 필요하다.


## CentOS 7 이미지 파일 다운로드 및 등록해보기 ##

wget http://cloud.centos.org/altarch/7/images/CentOS-7-x86_64-GenericCloud-1503.qcow2

 

openstack image create "centos-7" --file CentOS-7-x86_64-GenericCloud-1503.qcow2 --disk-format qcow2 --container-format bare --public

 


## ssh key 생성

ssh-keygen -q -N ""
openstack keypair create --public-key ~/.ssh/id_rsa.pub test-key


## Final !! 인스턴스 생성 ##

 

openstack server create --flavor m1.tiny --image cirros-0.4 --security-group test_sg1 --key-name test-key --nic net-id=ae9953b3-b2b3-49c1-ba0d-cc2b05197922 firstinstance
// ae9953~이거는 네트워크의 ID임!!

 

ㅎㅎㅎㅎ 된줄알았다 ^^.... GUI로 보기 전까지는 ㅎㅎ...

 

고생했어 오픈스택아... 다음에 공부 더 하고 올게... 오픈스택 찝찝한 마무리!!