Openstack - Train (Packstack을 통한 비 대화식 자동화 설치)
Software as a Service (SaaS) |
- 클라우드 환경에서 운영 중인 서비스 제공자의 애플리케이션을 사용자가 사용할 수 있는 클라우드 컴퓨팅 모델 - 사용자는 웹 브라우저나 프로그램의 인터페이스, 그리고 Thin 클라이언트와 같은 다양한 장치를 통해 이러한 애플리케이션에 접근할 수 있다. - 그러나 사용자는 네트워크나 서버 그리고 운영체제나 스토리지와 같이, 현재 기본적인 클라우드 환경을 구성하는 요소들을 관리하거나 통제할 수는 없다. (예 : e-mail, CRM, 가상 데스크톱) |
Platform as a Service (PaaS) |
- 서비스 공금자가 제공하는 프로그램 언어, 라이브러리, 서비스 그리고 툴을 사용해서 제작한 애플리케이션 또는 사용자가 직접 제작한 애플리케이션을 클라우드 환경에서 배포할 수 있도록 허용하는 클라우드 모델 - 사용자는 네트워크, 서버, 운영체제 또는 스토리지와 같이 기본적인 클라우드 환경을 구성하는 요소들을 관리하거나 통제할 수 없다. - 그러나 배포된 애플리케이션의 환경이나 설정 등을 통제할 수 있다. (예 : DB, Web 서버, 윈도우의 Azure 등) |
Infrastructure as a Service (IaaS) |
- 프로세싱, 스토리지, 네트워크, 그리고 다른 기본적인 컴퓨팅 자원들을 사용자에게 제공하는 클라우드 모델이다. - 이러한 환경을 통해 사용자는 임의의 소프트웨어를 배포하거나 사용할 수 있으며, 운영체제나 애플리케이션도 이러한 소프트웨어에 포함될 수 있다. - 사용자는 기본적인 클라우드 환경을 관리 또는 통제할 수 없으나 운영처제, 스토리지 그리고 배포된 애플리케이션에 대한 통제는 할 수 있다. - 가상머신이나 서버, 네트워크 등이 그 예라 할 수 있다. |
## Openstack 설치 ##
## 메모리가 6GB 이상이 되지 않으면 설치가 되지 않음. (7GB로 설정) |
## CPU 2개 이상 |
## HDD 50GB |
## Train Version 설치에 앞 서 [환경설정] 하기 ##
// 브릿지로 연결되었는지 확인 + IP 및 인터넷 접속 확인
## 기존의 네트워크나 방화벽이 돌아가면 에러가 뜨므로 모두 정지
* stop : 지금 당장 정지하겠다.
* disable : 동작 안시키게 하겠다.
// 네트워크 매니저
systemctl disable NetworkManager // 우측 상단의 랜카드를 꺼버리는 것임. 얘를 죽이면
systemctl stop 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
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 확인
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*
rpm -qa | grep leatherman
packstack --answer-file=/root/answerfile.txt
// 아! 버전을 낮췄으니 openstack을 삭제 -> 재설치
yum -y remove openstack-*
yum -y install openstack-packstack
이 AnswerFile로 다시 설치해줘야 함. ㅋㅋ... 힘들다 힘들어..
packstack --answer-file=/root/answerfile.txt
지금 설치하는 애가 컨트롤러인데, 컨트롤러 노드의 관리 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
htps://www.pbone.net
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로 삭제 & 다시 재생성 해보자!!




## 네트워크 / 라우터 / 보안그룹 / 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_sg1openstack 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/
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
## 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임!!
고생했어 오픈스택아... 다음에 공부 더 하고 올게... 오픈스택 찝찝한 마무리!!



