진짜 개발자
본문 바로가기

Cloud/OpenStack

OpenStack - 실습) 직접 설치하기 (SLE12-SP3 ver.Rockey)설치

728x90
openstack 설정참조 - https://www.slideshare.net/kingcrab/ss-32579693
openstack 설치참조 - https://docs.openstack.org/install-guide/ 

목차 (클릭시 이동)
0. 명령어
1. 전체구성
2. 환경 구성
0) 환경변수 스크립트 생성
1) 암호
2) 네트워크 구성
3) NTP 구성
4) OpenStack 패키지 설치
5) DB설치
6) 메시지큐 구성
7) Memcached 구성
8) Etcd 구성
3. 오픈스택 서비스 설치
1) KeyStone 서비스 설치 및 구성
2) Glance 서비스 설치 및 구성
3) Nova 서비스 설치 및 구성

0. 명령어

1. 패키지 명령어

1) 설치 - zypper install -y "패키지명"


2) 확인 - cnf "패키지명"


2. 데몬 실행

systemctl start "서비스이름"


3. 방화벽 해제(순서 중요)

systemctl disable susefirewall2_setup.service

systemctl disable susefirewall2_init.service



1. 전체 구성
*All IN One 로 구성
1. NOVA
2. GLANCE
3. KeyStone 
4. Neutron
5. Horizon
( Cinder )


2. 환경 구성 
0. 환경변수 스크립트 생성

- 앞으로 프로세스에서 임시적으로 사용될 환경변수들을 재부팅시에도 다시 등록하기 쉽게 하도록 하기 위해

   관리자의 홈디렉토리에 스크립트로 작성해놓고 실행하기 위함이다

1) 스크립트 작성 - vi ~/admin-openrc

export OS_PROJECT_DOMAIN_NAME=default

export OS_USER_DOMAIN_NAME=default

export OS_PROJECT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=It1234

export OS_AUTH_URL=http://1.0.0.61:5000/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2



2) 실행 ( *주의* - 실행 ./ 아님)

. admin-openrc ( '.' + ' '(공백) + '실행할 스크립트')

*주의* 스냅샷을 돌리더라도 ram은 날라가므로 다시 스크립트를 실행해야함


1. 암호

 - 이 후 부터 나올 설정 파일에 대한 변수들의 설명이다


2. 네트워크 구성

- 네트워킹에는 두가지 대역이 있다 1) 테넌트 네트워크 , 2) 프로바이더 네트워크

     관리 네트워크

- 말그대로 오픈스택을 관리하기 위한 네트워크 대역이다


프로바이더 네트워크

- 내부 가상머신들이 인터넷을 이용하기위한 대역이다.

1) 설정

1. /etc/sysconfig/network/ifcfg-INTERFACE_NAME 에 아래 빨간 네모칸 내용이 포함되도록 편집


2. vi /etc/hosts 편집

 All IN One 으로 구축할 것이므로 한 노드에 호스트명을 Controller와 Compute1 으로 설정한다



3. NTP 설정
- 서버들간에 시간을 동기화하기 위함이다.
1) 설치
- zypper addrepo https://download.opensuse.org/repositories/network:time/SLE_12_SP3/network:time.repo
- zypper refresh
- zypper install chrony
(* 패키지 설치시 - t(trust) 입력)

2) /etc/chrony.conf 파일 편집 - 아래 두줄 추가
- server NTP_SERVER iburst  (NTP_SERVER 자리에는 아래의 표중 하나의 NTP서버의 도메인을 기입)
- allow "NTP서버이용을 허용할 네트워크대역"


*DAUM에 등록된 NTP서버 목록*

time.bora.net

O

LG유플러스

time.nuri.net

O

아이네트호스팅

ntp.kornet.net

X

KT

time.kriss.re.kr

·

한국표준과학연구원(KRISS)

time.nist.gov

·

NIST

time.windows.com

·

마이크로소프트


3) chrony.d 시작프로그램 등록 및 실행
- systemctl enable chronyd.service
- systemctl start chronyd.service



4) 확인
- chronyc sources



4. OpenStack 패키지 설치
1) 저장소 활성화 
- zypper addrepo -f obs://Cloud:OpenStack:Queens/SLE_12_SP3 Rocky


2) 패키지 업데이트
- zypper refresh && zypper dist-upgrade

3) OpenStack Client 설치
- zypper install python-openstackclient


5. DB설치
- OpenStack의 서비스들은 DB를 이용하여 정보를 저장한다 
- 보통 Controller Node에서 사용
1) 설치
- zypper install mariadb-client mariadb python-PyMySQL


2) /etc/my.cnf.d/openstack.cnf 생성 동시에 편집


3) 시작 프로그램 등록
- systemctl enable mysql.service


4) 서비스 실행 
systemctl start mysql.service

5) db보안 설정 진행
mysql_secure_installation 처음 실행시 root는 비밀번호가 설정되어있지 않으므로 그냥 enter를 치고 들어가면 된다


 - root 비밀번호 설정을 위해 y를 누른다


- 익명 계정을 제거한다 'y'


- root계정을 원격에서 접속 가능하게 하기 위해 'n'입력


- test를 위한 database, access를 제거 'y'


- 권한 테이블을 바로 재설정한다 'y'



6. 메시지큐 설정
- Controller Node에서 동작하며 서비스간의 작업 , 상태정보를 상호 교환하기 위해 사용한다.
1) 설치
- zypper install rabbitmq-server


2) 시작프로그램 등록
- systemctl enable rabbitmq-server.service

3) 서비스 시작
- systemctl start rabbitmq-server.service

4) 메시지큐에 "openstack" 사용자를 추가한다
- rabbitmqctl add_user openstack It1234

5) rabbit 사용자 권한 부여
rabbitmqctl set_permissions openstack ".*" ".*" ".*"


7. Memcached 구성
- 서비스를 위한 Identify 서비스 인증 토큰을 캐싱하기  위함
- 보통 Controller Node에서 동작
1) 설치
- zypper install memcached python-python-memcached

2) /etc/sysconfig/memcached 편집
- MEMCACHED_PARMS='1.0.0.61'

CentOS의 경우 = 

OPTIONS="-l 127.0.0.1,::1,1.0.0.11"

3) 시작 프로그램 등록
- systemctl enable memcached.service

4) 서비스 시작
- systemctl start memcached.service

8. Etcd 구성
- 한 OS에 배당된 IP에 비해 구동되는 컨테이너들은 엄청나게 많다 이러한 컨테이너들을 접근하기 위한 Addressing 수단
- HTTP/JSON을 이용하여 구현됨
- 오픈소스 Key-Value 저장소
1) 설치
- groupadd --system etcd
- useradd --home-dir "/var/lib/etcd" --system --shell /bin/false -g etcd etcd

2) 필요 디렉토리 생성
- mkdir -p /etc/etcd
- chown etcd:etcd /etc/etcd
- mkdir -p /var/lib/etcd
- chown etcd:etcd /var/lib/etcd

3) etcd tarball 설치
- ETCD_VER=v3.2.7
- rm -rf /tmp/etcd && mkdir -p /tmp/etcd
- curl -L https://github.com/coreos/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
- tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd --strip-components=1
- cp /tmp/etcd/etcd /usr/bin/etcd
- cp /tmp/etcd/etcdctl /usr/bin/etcdctl

4) /etc/etcd/etcd.conf.yml 파일을 생성 및 편집
name: controller
data-dir: /var/lib/etcd
initial-cluster-state: 'new'
initial-cluster-token: 'etcd-cluster-01'
initial-cluster: controller=http://1.0.0.61:2380
initial-advertise-peer-urls: http://1.0.0.61:2380
advertise-client-urls: http://1.0.0.61:2379
listen-peer-urls: http://0.0.0.0:2380
listen-client-urls: http://1.0.0.61:2379



5) /usr/lib/systemd/system/etcd.service 생성 및 편집 아래 내용 추가


6) 모든 데몬(서비스) 재시작

- systemctl daemon-reload


7) etcd 시작 프로그램 등록

- systemctl enable etcd


8) etcd 서비스 실행
- systemctl start etcd


3. 오픈스택 서비스 설치

1. KeyStone 서비스 설치 및 구성

- 오픈스택 전체 인증과 권한 관리 서비스

1) 전제 조건

1) python-pyasn1 설치 확인

- rpm -qa | grep python-pyasn1


2) 데이터베이스 생성 및 권한 부여

- mysql -u root -p

- CREATE DATABASE keystone;

- GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'It1234';

- GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%'IDENTIFIED BY 'It1234';

 ( keystone 계정에게 keystone DB안의 모든 테이블에 모든 권한 부여 )


2) 설치 및 구성

1) keystone 패키지 설치

- zypper install openstack-keystone


2) /etc/keystone/keystone.conf 파일 편집


*vi 에서 특수문자가 들어간 내용을 찾기 위해서는 특수문자 앞에 '\'를 붙혀야 한다.

 일치하는 내용이 많을때 일치하는 다음 문장을 찾기 위해서는 'n'키 이전 문장은 'N'를 누르면 된다


- KeyStone이 데이터베이스에 접근하기 위한 정보를 입력한다

[database]

# ...

connection = mysql+pymysql://keystone:It1234@1.0.0.61/keystone


- KeyStone에서 사용될 토큰의 타입을 지정한다

[token]

# ...

provider = fernet



3) KeyStone 관리명령어인 "keystone-manage db_sync" 를 /bin/bash쉘로 실행하여 

    KeyStone 데이터베이스에 필요한 테이블을 생성한다

- su -s /bin/sh -c "keystone-manage db_sync" keystone


4) Fernet 토큰을 암호화할 때 사용될 키를 생성

- keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

- keystone-manage credential_setup --keystone-user keystone --keystone-group keystone


5) KeyStone-manage bootstrap 명령어를 이용하여 사용자, 프로젝트, 그리고 역할을 생성

keystone-manage bootstrap --bootstrap-password It1234 \

  --bootstrap-admin-url http://1.0.0.61:5000/v3/ \

  --bootstrap-internal-url http://1.0.0.61:5000/v3/ \

  --bootstrap-public-url http://1.0.0.61:5000/v3/ \

  --bootstrap-region-id RegionOne

http://controller:5000/v3 의 Contoller 부분은 모두 IP로 입력해야 함


3) Apache 서버 구성

1) apache2 설치

-  zypper install -y apache2


2) /etc/sysconfig/apach2 편집

- APACHE_SERVERNAME="controller"


3) /etc/apache2/conf.d/wsgi-keystone.conf 생성 후 편집

- 아래 내용 추가

Listen 5000


<VirtualHost *:5000>

    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}

    WSGIProcessGroup keystone-public

    WSGIScriptAlias / /usr/bin/keystone-wsgi-public

    WSGIApplicationGroup %{GLOBAL}

    WSGIPassAuthorization On

    ErrorLogFormat "%{cu}t %M"

    ErrorLog /var/log/apache2/keystone.log

    CustomLog /var/log/apache2/keystone_access.log combined


    <Directory /usr/bin>

        Require all granted

    </Directory>

</VirtualHost>


4) /etc/keystone 소유권 모두 keystone으로

- chown -R keystone:keystone /etc/keystone


5) mod-wsgi 설치

- zypper install -y mod_wsgi

(apache2.service를 시작할 때 나타나는 오류 코드를 읽어보면 wsgi 모듈을 로딩할 수 없다고 나타난다 

때문에 mod_wsgi를 미리 설치함으로써 해결한다)

6) apahce2 시작 프로그램 등록

- systemctl enable apache2.service


7) apahce2 서비스 시작

- systemctl start apache2.service


8) 미리 만들어 둔 OpenStack Client 환경변수 스크립트(admin-openrc) 실행 후 인증토큰 요청

- openstack token issue


4) 도메인 프로젝트, 사용자 및 역할 만들기

1) service라는 이름의 Project를 생성

- openstack project create --domain default --description "Service Project" service


2) 비관리자 프로젝트 생성(권한이 없는)

- openstack project create --domain default --description "Demo Project" myproject


3) 비관리자 유저('myuser') 생성

- openstack user create --domain default --password-prompt myuser


4) 역할 생성

- openstack role create myrole


5) myuser에게 myrole 역할 추가

- openstack role add --project myproject --user myuser myrole




2. Glance 서비스 설치 및 구성

- OpenStack의 가상 머신들에게 이미지를 제공 및 관리하는 서비스 이다.

- 주로 Controller Node에 설치된다.

/etc/glance/glance-api.conf 파일의 [keystone_authtoken] 섹션에 KeyStone 서비스가 동작하는 서버의 http://IP:5000 를     등록하여 키스톤에게 인증 요청을 한다


1) 전제 조건 

1) 데이터베이스 생성 및 권한 부여

- mysql -u root -p

- create database glance;

- GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'It1234';

- GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'It1234';


2) 환경 변수 스크립트 실행 

- . admin-openrc


3) glance 사용자 만들기

openstack user create --domain default --password-prompt glance


4) admin role에 service 프로젝트에 속한 glance 사용자 추가

openstack role add --project service --user glance admin


5) glance 서비스 엔티티 생성

- openstack service create --name glance --description "OpenStack Image" image 


6) glance 서비스 API에 대한 엔드포인트를 생성

- openstack endpoint create --region RegionOne image public http://1.0.0.61:9292


- openstack endpoint create --region RegionOne image internal http://1.0.0.61:9292


- openstack endpoint create --region RegionOne image admin http://1.0.0.61:9292


2) 설치 및 구성

1) glance 패키지 설치

- zypper install openstack-glance openstack-glance-api openstack-glance-registry


2) /etc/glance/glance-api.conf 편집

- 데이터 베이스 엑세스 설정

[database]

# ...

connection = mysql+pymysql://glance:It1234@controller/glance


- keystone_authtoken와 paste_deploy섹션, 신원 서비스 액세스를 구성

[keystone_authtoken]

# ...

www_authenticate_uri = http://1.0.0.61:5000

auth_url = http://1.0.0.61:5000

memcached_servers = 1.0.0.61:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = glance

password = It1234


[paste_deploy]


- [glance_store]섹션에서 로컬 파일 시스템 저장소와 이미지 파일의 위치를 ​​설정

[glance_store]

# ...

stores = file,http

default_store = file

filesystem_store_datadir = /var/lib/glance/images/


3) /etc/glance/glance-registry.conf 파일 편집

- database 섹션에서 데이터베이스 엑세스를 설정한다

connection = mysql+pymysql://glance:It1234@controller/glance


- keystone_authtoken 섹션에서 신원서비스 엑세스 구성

[keystone_authtoken]

# ...

www_authenticate_uri = http://1.0.0.61:5000

auth_url = http://1.0.0.61:5000

memcached_servers = 1.0.0.61:11211

auth_type = password

project_domain_name = Default

user_domain_name = Default

project_name = service

username = glance

password = It1234


- paste_deploy 섹션에서 신원서비스 엑세스 구성


4) 시작프로그램에 openstack-glance-api 서비스와 openstack-glance-registry 서비스 등록

- systemctl enable openstack-glance-api.service openstack-glance-registry.service


5) openstack-glance-api 서비스와 openstack-glance-registry 서비스 시작

- systemctl start openstack-glance-api.service openstack-glance-registry.service


3) 작동 확인

1) 관리자 전용 CLI명령에 엑세스 하기 위해 환경변수 등록

- . admin-openrc


2) 원본 이미지 다운로드 

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


3) 모든 서비스가 이미지에 접근할 수 있도록 이미지 서비스에 이미지들을 업로드 한다

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

(위의 명령어는 wget 명령어로 받은 --file cirros-0.4.0-x86_64-disk.img 을 이용하여 

  /etc/glance/glance-api.conf파일의 filesystem_store_data섹션에 설정한 경로에 이미지를 생성하는 명령어다)


*파일은 성공적으로 받아졌으나 해당하는 이름의 이미지가 없다고 나타나는 경우

내가 wget명령어로 받은 파일의 위치와 내가 현재 작업중인 경로가 일치해야 한다

  즉, 내가 받은 파일의 위치가 아닌 다른 디렉토리에 내가 위치하고 있지 않은지 확인하자.


4) glance에 업로드된 이미지 확인

- openstack image list



3. Nova 

- 가상머신의 생명주기를 관리한다

- 가상머신을 직접 생성하는 것은 하이퍼바이저(KVM)을 통해 하며 하이퍼바이저를 제어하기 위해 해당 하이퍼바이저의

  드라이버를 이용한다.

/etc/nova/nova.conf 파일의 [keystone_authtoken] 섹션에 KeyStone 서비스가 동작하는 서버의 http://IP:5000 를 

  등록하여 키스톤에게 인증 요청을 한다


1) 전제 조건

1) 데이터베이스 생성 및 권한 부여

 mysql -u root -p 

 CREATE DATABASE nova_api;

 CREATE DATABASE nova;

 CREATE DATABASE nova_cell0;

 CREATE DATABASE placement;

 GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'It1234';

 GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'It1234';

 GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'It1234';

 GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'It1234';

 GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'It1234';

 GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'It1234';

 GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'It1234';

 GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'It1234';


2) 환경변수 스크립트 실행

- . admin-openrc


3) OpenStack에 "Nova" 사용자 만들기

- openstack user create --domain default --password-prompt nova


4) admin역할에 service 프로젝트에 속한 nova 사용자를 추가

- openstack role add --project service --user nova admin


5) Nova 서비스 생성

- openstack service create --name nova --description "OpenStack Compute" compute


6) Compute API를 사용하기위한 endpoint를 생성(Compute 서비스가 사용하며 주소뒤에 nova의 버전을 지정한다)

- openstack endpoint create --region RegionOne compute public http://1.0.0.61:8774/v2.1


- openstack endpoint create --region RegionOne compute internal http://1.0.0.61:8774/v2.1


- openstack endpoint create --region RegionOne compute admin http://1.0.0.61:8774/v2.1


7) 배치 유저 생성

- openstack user create --domain default --password-prompt placement


8) placement 사용자에게 admin 역할 부여

- openstack role add --project service --user placement admin


 9) OpenStack 서비스 항목에 Placement API 생성

-  openstack service create --name placement --description "Placement API" placement


10) 다른 서비스들이 placement API를 사용하기 위한 end Point를 생성

- openstack endpoint create --region RegionOne placement public http://1.0.0.61:8780


- openstack endpoint create --region RegionOne placement internal http://1.0.0.61:8780


- openstack endpoint create --region RegionOne placement admin http://1.0.0.61:8780


2) Nova 설치 및 구성

1) 패키지 설치

zypper install openstack-nova-api openstack-nova-scheduler \

  openstack-nova-conductor openstack-nova-novncproxy \

  openstack-nova-placement-api iptables


2) /etc/nova/nova.conf 파일 편집

- default 섹션 

[DEFAULT]

# ...

enabled_apis = osapi_compute,metadata : metadata API와 compute API 사용 허가

my_ip = 10.0.0.11  : 관리목적으로 사용되는 IP주소 (ManageMent 네트워크 대역 인터페이스 IP주소)

use_neutron = true 

firewall_driver = nova.virt.firewall.NoopFirewallDriver

transport_url = rabbit://openstack:It1234@controller : 메시지큐(RabbitMQ) 엑세스 URL 설정


=========================================================================================여기서부터 다시 정리 - su -s 오류 =================================

- api_database 섹션 : Nova 서비스가 Nova_api 데이터베이스에 접근하기 위한 DataBase Acess URL 구성

[api_database]

# ...

connection = mysql+pymysql://nova:It1234@controller/nova_api



- database 섹션 : DataBase Acess URL 구성

[database]

# ...

connection = mysql+pymysql://nova:It1234@controller/nova



- placement_database 섹션 : DataBase Acess URL 구성 (존재 하지 않으므로 생성하기)

[placement_database]

# ...

connection = mysql+pymysql://placement:It1234@controller/placement



- api 섹션 

[api]

# ...

auth_strategy = keystone


- keystone_authtoken 섹션

[keystone_authtoken]

# ...

auth_url = http://1.0.0.61:5000/v3

memcached_servers = 1.0.0.61:11211

auth_type = password

project_domain_name = default

user_domain_name = default

project_name = service

username = nova

password = It1234


- vnc 섹션 : 관리자가 인스턴스에 원격 데스크톱 접속을 허용하기위한 설정

[vnc]

enabled = true

# ...

server_listen = $my_ip

server_proxyclient_address = $my_ip


- glance 섹션 : Nova 서비스가 사용가능한 이미지 서비스 API 위치를 설정

[glance]

# ...

api_servers = http://1.0.0.61:9292


- oslo_concurrency 섹션 : 파일 잠금을 위해 사용되는 디렉토리

[oslo_concurrency]

# ...

lock_path = /var/run/nova


- placement 섹션 : placement 서비스 API 설정

[placement]

# ...

region_name = RegionOne

project_domain_name = Default

project_name = service

auth_type = password

user_domain_name = Default

auth_url = http://1.0.0.61:5000/v3

username = placement

password = It1234


*추후 Neutron 설치시 [neutron] 섹션을 추가 해야한다


3) 

- su -s /bin/sh -c "nova-manage api_db sync" nova

(*오류메시지 무시)




4. Neutron


neutron.conf 

- neutron server가 사용하는 설정파일 

ml2 

- neutron이 사용할 플러그인으로 L2 네트워크 기술을 이용하기 위한 플러그인

- CentOS의 경우 OVS(OpenvSwitch) , Ubuntu의 경우 LinuxBridge를 사용


modprobe vhost_net

lsmod | grep vhost 




에러

1. mod_wsgi, apache2


2. openstack 재부팅 후  인스턴스 생성 안될때 && /var/log/neutron/neutron-dhcp-agent 에 

permission denied 뜰때

linux-jgss:~ # chmod 777 -R /var/lib/neutron/

linux-jgss:~ # . admin-openrc 

linux-jgss:~ # systemctl restart openstack-neutron*

linux-jgss:~ # systemctl restart openstack-nova*