1. 패키지 명령어
1) 설치 - zypper install -y "패키지명"
2) 확인 - cnf "패키지명"
2. 데몬 실행
systemctl start "서비스이름"
3. 방화벽 해제(순서 중요)
systemctl disable susefirewall2_setup.service
systemctl disable susefirewall2_init.service
- 앞으로 프로세스에서 임시적으로 사용될 환경변수들을 재부팅시에도 다시 등록하기 쉽게 하도록 하기 위해
관리자의 홈디렉토리에 스크립트로 작성해놓고 실행하기 위함이다
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 으로 설정한다
time.bora.net | O | LG유플러스 |
time.nuri.net | O | 아이네트호스팅 |
ntp.kornet.net | X | KT |
time.kriss.re.kr | · | 한국표준과학연구원(KRISS) |
time.nist.gov | · | |
time.windows.com | · | 마이크로소프트 |
- root 비밀번호 설정을 위해 y를 누른다
- 익명 계정을 제거한다 'y'
- root계정을 원격에서 접속 가능하게 하기 위해 'n'입력
- test를 위한 database, access를 제거 'y'
- 권한 테이블을 바로 재설정한다 'y'
CentOS의 경우 =
OPTIONS="-l 127.0.0.1,::1,1.0.0.11"
5) /usr/lib/systemd/system/etcd.service 생성 및 편집 아래 내용 추가
6) 모든 데몬(서비스) 재시작
- systemctl daemon-reload
7) etcd 시작 프로그램 등록
- systemctl enable etcd
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*
'Cloud > OpenStack' 카테고리의 다른 글
OpenStack - 이론) 네트워크 - 수정중 (0) | 2018.11.16 |
---|---|
OpenStack - 이론) Openstack 서비스 (0) | 2018.11.13 |
OpenStack - DevStack이란? DevStack설치 (0) | 2018.11.12 |
OpenStack - PackStack이란? PakcStack 설치 (0) | 2018.11.12 |
OpenStack - OpenStack 이란 (0) | 2018.11.12 |