본문 바로가기

● 프로젝트

Openstack 수동 설치 후 인스턴스 생성

1프로젝트 개요

(1) 프로젝트명 및 기간

프로젝트명 : openstack 수동 설치 후 인스턴스 생성

 

(2) 프로젝트 기간

프로젝트 기간 : 2019.07.24 ~ 2019.07.30

 

(3) 프로젝트 목적

- openstack을 자동이 아닌 수동 설치하여 인스턴스를 생성 후 작동시킨다.

 

(4) 프로젝트 기대효과

- openstack의 서비스들을 하나하나 수동으로 구축하면서 일일이 상세히 다룰 수 있고, 자신이 원하는 서비스들만 요구사항에 맞춰 유연하게 구축할 수 있다.

- openstack 서비스 기능들에 대한 이해

- openstack 명령어 숙지

 

실습 환경 (WINDOW 10)

VMware(CentOS 7)

Openstack(ver. Stein)

 

오픈스택은 20107월 클라우드 서비스 업체인 랙스페이스와 미항공우주국(NASA)가 처음 시작한 모든 타입의 클라우드 환경을 지원하는 오픈소스 클라우드 컴퓨팅 소프트웨어이다. 오픈스택 소프트웨어는 하나의 소프트웨어가 아닌 여러 개의 소프트웨어로 구성되어 있다. 오픈스택은 클라우드 기술인데 특히 IaaS(인프라 서비스) 기술에 초점이 맞춰져 있다. 즉 오픈스택은 클라우드 컴퓨팅 환경을 만들어 주는 오픈소스 플랫폼이고 오브젝트 스토리지, 이미지, 인증, 컴퓨트 등이 연결되어 하나의 큰 클라우드 컴퓨팅 시스템을 구축하고 사용자에게 자원을 주고 운영체제에서는 가상의 자원과 물리자원을 관리해주는 역할을 한다. 장점은 확정성과 모듈성이다. 오픈스택의 가상화 컴퓨팅 기술, 개인 데이터 저장 기술, 서로 다른 소프트웨어끼리 통신할 수 있는 소프트웨어 정의 네트워크(SDN) 등을 제공한다. 기업들이 원하는 기능만 따로 선택해서 구미에 맞는 클라우드 시스템을 만들 수 있다는 점이 두드러지는 장점이라고 할 수 있다. Openstack.org사이트에 들어가게 되면 오픈스택에서 제공하는 서비스들과 오픈스택의 기능의 구성도를 확인할 수 있다.

* 각각의 서비스들의 역할에 대해 알아보자.

구성요소

프로젝트

설명

COMPUTE

NOVA

- 오픈소스 서버 가상화 솔루션 개발

- 표준 하드웨어 상에서 대규모 가상머신을 운영

- 관리하기 위한 인프라 클라우드 관리 소프트웨어 개발

Storage

(Object)

Swift

- 클라우드 스토리지 관리 솔루션 개발

- 표준 하드웨어 상에서 수십억 개의 오브젝트들을 신뢰성 있게 분산 저장하는 기능을 제공하는 스토리지 시스템

Storage

(Block)

Cinder

- 하드 디스크에서 사용되고 있는 방식으로 데이터를 블록단위로 저장

Shard Service (Imaging Service)

Glance

- 가상화 디스크 이미지 서비스

- Virtual machine 이미지를 관리하는 서비스 저장소

Shared Service

Keystone

- 오픈 스택 내의 Authentication Authorization 기능 제공

Network

(SDN)

Neutron

- 오픈 스택 내의 ip들과 네트워킹을 관리하는 기능 제공

Monitoring

Ceilometer

- 사용자의 사용량을 측정해서 알려주는 기능 제공

Orchestration

Heat

- 미리 작성된 스크립트와 준비된 템플릿을 이용하여 자동으로 개발 인프라를 구축할 수 있는 기능 제공

Provisioning

Trove

- 오픈 스택 시스템 상에서 데이터베이스 서비스를 구축할 수 있게 도와주는 기능 제공

Provisioning

Ironic

- 베어메탈 프로비저닝 제공 (물리적 HW 자원 접근 가능)

Web UI

Horizon

- 오픈 스택 시스템 관리를 위한 관리자용 Web UI기능 제공

openstack에는 대체적인 기능들을 기본값을 설정하고 answer파일을 통해 자동으로 설치하는 자동화 설치가 존재하고 각각의 서비스들에 대한 설정을 상세하게 기능들을 추가하여야 하는 수동설치가 존재한다. 자동설치는 시간이 단축되는 대신 각각의 서비스들에 대하여 상세하게 다룰 수 없는 반면 수동설치는 일일이 구축해야 해서 시간이 오래 걸리는 대신 각각의 서비스들을 상세하게 다룰 수 있다. Minimal 설치를 통해 최소한의 서비스를 수동 설치하여 오픈스택 환경을 구성한 후 인스턴스를 생성하여 보겠다.(Stein 버전)

 

구성도

Host                   Control (CentOS7)            Compute (CentOS7)         

Ip                       1.0.0.1(NAT)                   1.0.0.2(NAT)

Sm                             255.255.255.0

Dg                              1.0.0.254

Dns                        168.126.63.1, 8.8.8.8

Mem             6GB                                           4GB

HDD                  100GB                                        100GB, 50GB

수동설치를 위해 각각의 설정에 맞게 용량과 IP를 설정해 주었고, controlhostnamecont Computehostnamecomp로 설정했다. Control 노드와 compute노드에 각각 /etc/hosts파일에 control 노드와 compute 노드를 등록하였다.   

(각각 외부 인터넷과의 연결 확인)

각각의 노드와 연결 확인

openstack 서비스를 설치하기 전 contcomp에 기초적인 설정을 설정해야한다. 먼저 네트워크 시간 프로토콜 설정을 한다. 네트워크 시간 프로토콜은(NTP)는 노드 간에 서비스를 올바르게 동기화 하기 위해 설치하여야 한다. 먼저 각각 패키지를 다운로드 한다. (Control 노드) Yum install chrony한 후 /etc/chrony.conf를 수정하여야 한다.

다른 노드가 컨트롤러 노드의 데몬에 연결할 수 있게 하기 위해 allow 설정한다.

Systemctl enable chronyd.service, systemctl start chronyd.service (서비스 시작)

(Compute 노드) yum install chrony한 후 /etc/chrony.conf를 수정한 후 시스템 시작!

control노드와 compute 노드에 각각 기본적인 설치를 해줘야 한다.

Openstack 저장소 사용을 위해 패키지를 설치한다. (stein 버전)

패키지 업그레이드, 클라이언트, 보안정책을 자동으로 관리하는 패키지 설치한다.

그 후 control노드에 데이터베이스, Q 서비스, memcached, etcd 설정을 해줘야 한다.

먼저 데이터베이스 설정을 하겠다. 대부분의 openstack 서비스는 데이터베이스를 사용하여 정보를 저장한다. MariaDBMysql를 사용하겠다. 패키지를 설치한다.

yum install mariadb mariadb-server python2-PyMySQL –y

임의로 /etc/my.cnf.d/openstack.cnf에 파일에 구성 파일을 만들어주어야 한다.

[mysqld]

bind-address = 1.0.0.1

default-storage-engine = innodb

innodb_file_per_table = on

max_connections = 4096

collation-server = utf8_general_ci

character-set-server = utf8

역시 데이터베이스 서비스를 시작하고 부팅할 때 시작되도록 구성한다.

mysql_secure_installation스크립트를 실행하여 데이터베이스 서비스를 보호한다. 데이터베이스 root계정의 적합한 암호를 설정한다. (암호가 없을 경우 enter로 접속한다.)

Q 서비스는 RabbitMQ를 설치하겠다. RabbitMQ는 표준 AMQP 메시지브로커 소프트웨어 오픈소스이다. 프로그램 인스턴스가 데이터를 서로 교환할 때 사용하는 방법이다. 데이터를 교환할 때 시스템이 관리하는 메시지 큐를 이용하는 것이 특징이다.

yum install rabbitmq-server –y (패키지 다운로드)

다운로드 후 서비스 시작 부팅 될 때 시작되도록 구성한다.

rabbitmqctl add_user openstack It1 (비밀번호가 It1user openstack을 만들겠다.)

rabbitmqctl set_permissions openstack ".*" ".*" ".*" (mq의 모두 접근을 허용하겠다.)

Memcached는 범용 분산 캐시 시스템이다. 외부 데이터 소스의 읽기 횟수를 줄이기 위해 캐시 처리함으로써 웹사이트의 속도를 높이기 위해 사용한다.

yum install memcached python-memcached –y (패키지 다운로드)

설정파일을 편집해서 컨트롤러 노드의 관리 ip주소를 사용하도록 서비스를 구성한다.

Options에 컨트롤러노드의 hostname을 추가한다.

서비스를 시작하고 부팅 시 시작할 수 있도록 구성한다.

Etcd 서비스는 분산된 신뢰할 수 있는 키 값 저장소를 사용한다.

yum install etcd –y (패키지 다운로드)

엑세스를 위해 controlip를 대입하여야 한다.

Etcd 서비스를 활성화하고 시작한다.

Etcd 설정이 끝나면 openstack 서비스 설치 전 설정은 끝이 난다. 이제 서비스를 설치하겠다. 먼저 keystone 서비스를 설치하겠다. Keystone은 타인이나 해커에게서 시스템을 안전하게 보호하고 사용자 등록, 삭제, 권한 관리, 사용자가 접근할 수 있는 서비스까지 전반적인 사용자 인증을 관리합니다. 또 대시보드로의 접속 인증을 위해 설정하겠다. 주로 cont노드에서 동작한다.

Root 사용자로 데이터베이스 서버에 연결한다.

데이터베이스를 만들고 적절한 엑세스를 권한 부여한다. (패스워드 It1)

CREATE DATABASE keystone;

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

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

exit;

yum install openstack-keystone httpd mod_wsgi –y (패키지 다운로드)

패키지 다운로드 후에 keystone.conf파일 수정

mysql+pymysql://keystone:It1@cont/keystone (비밀번호 hostname 유의)

Fernet 토큰 공급자를 구성한다.

su -s /bin/sh -c "keystone-manage db_sync" keystone (데이터베이스 채우기)

Fernet 키 저장소 초기화한다.

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

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

Identity 서비스를 bootstrap한다. (인증서비스)

keystone-manage bootstrap --bootstrap-password It1 --bootstrap-admin-url http://cont:5000/v3/ --bootstrap-internal-url http://cont:5000/v3/ --bootstrap-public-url http://cont:5000/v3/ --bootstrap-region-id RegionOne

Httpd 서비스 설정한다.

/etc/httpd/conf/httpd.conf파일을 편집하여 ServerName control 노드로 설정한다.

/usr/share/keystone/wsgi-keystone.conf에 파일에 대한 링크를 만든다.

서비스를 시작한 후 환경설정을 export하여 준다.

$ export OS_USERNAME=admin

$ export OS_PASSWORD=It1

$ export OS_PROJECT_NAME=admin

$ export OS_USER_DOMAIN_NAME=Default

$ export OS_PROJECT_DOMAIN_NAME=Default

$ export OS_AUTH_URL=http://cont:5000/v3

$ export OS_IDENTITY_API_VERSION=3

default Domain 값을 가진 프로젝트 생성

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

myproject 프로젝트, myuser사용자, myrole 역할 만들기.

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

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

openstack role create myrole

프로젝트와 사용자 myrole에게 역할을 추가하겠다.

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

Adminmyproject의 유저의 인증 토큰 만들기

unset OS_AUTH_URL OS_PASSWORD

openstack --os-auth-url http://cont:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue

openstack --os-auth-url http://cont:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue

Admin_openrcdemo_openrc파일에 자격증명 파일 생성하겠다.

keystone인증값을 스크립트로 만들어서 넣어주었다. (각각의 항목에 답이 일치해야 함)

(keystone 설정 완료!)

 

Glance는 디스크 및 서버 이미지를 위한 검색, 등록, 배급 서비스를 제공한다.. 이미지 서비스는 Swift를 포함한 다양한 백엔드에 디스크와 서버 이미지들을 저장할 수 있다. 이미지를 통하여 인스턴스 생성을 하기 위해 glance 서비스를 설치하겠다. (컨트롤 노드)

Glance 데이터베이스를 만들고 데이터베이스에 대한 엑세스 권한을 부여하였다.

create database glance;

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'cont' IDENTIFIED BY 'It1';

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

flush privileges;

Keystone 인증을 위해 자격증명을 사용한다. (반드시 해야 함!)

Glance 유저를 생성한다.

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

Glance 유저에 admin 권한을 추가하여 준다.

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

이미지 서비스를 생성한다.

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

Glance end point를 생성한다. End point는 일종의 서비스를 사용하기 위한 URL이다.

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

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

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

yum install openstack-glance –y (패키지 다운로드)

/etc/glance/glance-api.conf 파일을 수정한다.

mysql+pymysql://glance:It1@cont/glance (password, hostname 유의!)

[Glance_store]에서 storedir설정한다.

Keystone 인증 부분 수정한다. (4937번줄은 auth_uri가 아닌 url이여야 한다.)

임의로 [keystone_authtoken]안에 추가하여 입력하여 준다.

project_domain_name = Default

user_domain_name = Default

project_name = service

username = glance

password = It1

[paste_deploy]안의 flavorkeystone으로 설정한다.

/etc/glance/glance-registry.conf 파일을 수정한다.

mysql+pymysql://glance:It1@cont/glance (password, hostname 유의!)

역시 Keystone 인증 부분 수정한다. (1189번 줄은 auth_uri가 아닌 url이여야 한다.)

역시 임의로 [keystone_authtoken]안에 추가하여 입력하여 준다.

project_domain_name = Default

user_domain_name = Default

project_name = service

username = glance

password = It1

[paste_deploy]flavorkeystone으로 설정한다.

이미지 서비스 데이터베이스를 채운 후 서비스를 활성화하고 시작하여 준다.

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

Glance가 잘 작동하나 검증하기 위해 cirros라는 이미지파일을 생성하여 보겠다.

Yum install –y wget (이미지 파일을 가져오기 위해 패키지 다운로드)

wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img (cirros 파일 다운)

. admin-openrc (자격증명 사용)

openstack image create "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare –public (cirros라는 이름으로 파일의 형식을 갖춘 이미지 생성)

openstack image list (이미지 리스트 확인), 이미지가 리스트에 올라갔음을 확인할 수 있다. Glance의 기능이 무사히 동작한다. 여러 이미지 파일을 올릴 수 있다.

 

Placement는 리소스 공급자의 인벤토리 및 사용법과 함께 다양한 리소스 클래스를 추적하는 데 사용되는 REST API 스택 및 데이터 모델이다. 컨트롤러 노드에서 동작한다. 먼저 mysql를 통해 데이터베이스 서버에 연결하였다.

Placement 데이터베이스를 만든 후 권한을 부여했다.

CREATE DATABASE placement;

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

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

flush privileges;

exit;

자격증명을 사용한다.

Placement 유저를 생성한 후 admin 권한을 부여한다.

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

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

Placement service를 생성한다.

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

placement endpoint를 생성한다. End point는 일종의 서비스를 사용하기 위한 URL이다.

openstack endpoint create --region RegionOne placement public http://cont:8778

openstack endpoint create --region RegionOne placement internal http://cont:8778

openstack endpoint create --region RegionOne placement admin http://cont:8778

yum install openstack-placement-api –y (placement 패키지 다운로드)

/etc/placement/placement.conf파일을 수정한다.

[keystone_authtoken]부분을 수정한다. (uri, url 차이 주의!)

[keystone_authtoken]부분에 임의로 추가하여 준다.

mysql+pymysql://placement:It1@cont/placement (password, hostname 주의!)

Placement 데이터 베이스 채우기 (DB 동기화), HTTP 재시작(웹을 통해서 관리된다.)

su -s /bin/sh -c "placement-manage db sync" placement

 

NovaIaaS 시스템의 주가 되는 부분인 클라우드 컴퓨팅 패브릭 컨트롤러이다. 컴퓨터 자원의 풀을 관리하고 자동화하도록 설계되어 있다. 노바는 최소의 오픈스택 서비스가 필요하다. keystone(ID 발급하고 인증서비스 제공), Glance(이미지 생성), Neutron(인스턴스가 사용하는 가상 네트워크와 물리적 네트워크 제공) 또한 블록 스토리지도 필요하다. 노바는 인스턴스(가상 서버) 프로비저닝 서비스를 제공하기 떄문에 설치하겠다. (cont 노드)

CREATE DATABASE nova_api;

CREATE DATABASE nova;

CREATE DATABASE nova_cell0;

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

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

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

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

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

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

flush privileges;

exit;

자격증명을 사용한다.

Nova 유저를 생성한 후 admin 권한을 추가한다.

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

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

compute 서비스를 생성한다.

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

compute endpoint를 생성한다. End point는 일종의 서비스를 사용하기 위한 URL이다.

yum install -y openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler (nova 패키지 다운로드)

/etc/nova/nova.conf 파일 수정

Control 노드의 ip를 입력한다.

Neutron과 방화벽 드라이버를 사용한다.

Transport url 사용한다. (password, hostname 주의!)

[api]auth_strategykeystone을 사용한다.

[api_database][database]connection을 설정한다.

mysql+pymysql://nova:It1@cont/nova_api

mysql+pymysql://nova:It1@cont/nova

[glance]api_servers 설정한다.

[keystone_authtoken]에서 auth_url, memcached, auth_type을 설정한다.

[keystone_authtoken]안쪽에 임의로 값을 추가하여 준다.

project_domain_name = Default

user_domain_name = Default

project_name = service

username = nova

password = It1

lock_path의 경로 설정한다.

[placement]에서 각각의 설정 값들을 대입한다.

vnc기능을 사용하기 위해 [vnc]설정을 한다.

$my_ip1.0.0.1을 의미한다. Server_listenproxyclient에 대입한다.

su -s /bin/sh -c "nova-manage api_db sync" nova (노바 api 데이터베이스 채우기)

su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova (cell0 데이터베이스 등록)

su -s /bin/sh -c "nova-manage cell_v2 create_cell –name =cell1 --verbose" nova(cell1 생성)

su -s /bin/sh -c "nova-manage db sync" nova (노바 데이터베이스 채우기)

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova (노바 cello0, cell1 등록 확인)

Nova 시스템을 활성화하고 각각 실행한다.

systemctl enable openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

systemctl start openstack-nova-api openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy

nova control 노드만 아니라 compute 노드에도 설치를 해야 한다.

yum install -y openstack-nova-compute (패키지 설치)

/etc/nova/nova.conf 파일 편집한다.

My_ipcompute 노드의 ip1.0.0.2 대입한다.

Neutron을 사용할 것이고 firewall 드라이버도 사용할 것이다.

[DEFAULT]섹션에서 계산 및 메타 데이터 API만 사용하도록 설정한다.

메시지 대기열 엑세스를 구성한다.

Auth_strategy api_servers 설정한다.

[keystone_authtoken]의 값을 설정한다.

[keystone_authtoken]에 임의로 값을 추가하여 준다.

project_domain_name = Default

user_domain_name = Default

project_name = service

username = nova

password = It1

Lock_path 경로 설정

[placement]섹션에서 게재 위치 API를 구성한다.

[vnc]기능을 사용하기 위해 설정하겠다.

**[libvirt]에서 virt_typeqemu로 해야 한다. Qemu로 맞춰주지 않는 경우 가상 머신이 실행되지 않는다. Cpu_mode=none으로 해야한다. 그렇지 않으면 부팅이 되지 않는다.

Libvirtd 서비스를 활성화 하고 시작한다.

systemctl enable libvirtd openstack-nova-compute

systemctl start libvirtd openstack-nova-compute

 

다시 control 노드로 돌아와 셀 데이터베이스에 compute 노드를 추가한다.

openstack compute service list --service nova-compute (컴퓨팅 호스트 존재 확인)

su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

cell추가 후에는 compute가 보이지 않으면 cont node에서 vi /etc/nova/nova.conf 에서

[scheduler]

discover_hosts_in_cells_interval = 300 (간격 설정)

:wq

부분을 추가해 줘야 한다. 이렇게 하면 노바의 세팅이 끝나게 된다. 잘 작동이 되고 있나 list를 확인하여 검증하여야 한다. 먼저 자격증명을 사용한다.

openstack compute service list (각 프로세스 확인!)

openstack image list (이미지 list 확인!)

openstack catalog list (endpoint를 나열하여 서비스와의 연결을 확인!)

nova-status upgrade check (upgrade check!)

upgrade checkerrro시에는 /etc/httpd/conf.d/00-placement-api.conf 파일 편집!

아래의 설정을 <VirtualHost *:8778> </VirtualHost>사이에 입력한다.

<Directory /usr/bin>

<IfVersion >= 2.4>

    Require all granted

</IfVersion>

<IfVersion < 2.4>

    Order allow,deny

    Allow from all

</IfVersion>

</Directory>

그 후 systemctl restart httpd memcached (서비스 restart) 무사히 upgrade check 확인!

 

OpenStack 네트워킹(neutron)은 가상 네트워킹 인프라에 대한 모든 네트워킹 측면과 openStack 환경에서 물리 네트워킹 인프라의 접근 레이어 측면에서 관리한다. Openstack 네트워킹은 firewall, load balancer, virtual private network 같은 서비스를 포함할 수 있으며, 진보한 가상 네트워크 토폴리지를 생성하여 tenant를 활성화 한다. (cont 노드!!)

Neutron 데이터베이스를 생성하고 권한을 부여한다.

CREATE DATABASE neutron;

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'It1';

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'It1';

flush privileges;

exit;

자격증명 사용 후에 neutron user 생성한다.

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

openstack role add --project service --user neutron admin (neutronadmin 권한 추가!)

openstack service create --name neutron --description "OpenStack Networking" network

(네트워크 서비스 생성한다.)

network endpoint를 생성한다. End point는 일종의 서비스를 사용하기 위한 URL이다.

openstack endpoint create --region RegionOne network public http://cont:9696

openstack endpoint create --region RegionOne network internal http://cont:9696

openstack endpoint create --region RegionOne network admin http://cont:9696

네트워킹 옵션은 self-service network 환경으로 구성하겠다.

yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-lin uxbridge ebtables (패키지 다운로드)

/etc/neutron/neutron.conf파일을 편집한다.

대기열 엑세스 rabbitmq 구성한다.

Connection 설정! mysql+pymysql://neutron:It1@cont/neutron (password, hostname주의!)

ML2 플러그인, 라우터 서비스 IP 주소 활성화 한다.

[DEFAULT]섹션에서 임의로 추가하여 준다. (222번째 줄 추가!)

core_plugin = ml2

service_plugins = router

allow_overlapping_ips = true

notify_nova_on_port_status_changes = true

notify_nova_on_port_data_changes = true

auth_strategy = keystone

[keystone_authtoken]섹션에서 설정한다. (uri, url 차이 주의!)

[keystone_authtoken]섹션에 임의로 입력한다.

project_domain_name = default

user_domain_name = default

project_name = service

username = neutron

password = It1

Lock_path 경로 설정한다.

설정 파일의 가장 끝 부분에 임의로 추가하여 준다.

[nova]

auth_url = http://cont:5000

auth_type = password

project_domain_name = default

user_domain_name = default

region_name = RegionOne

project_name = service

username = nova

password = It1

/etc/neutron/plugins/ml2/ml2_conf.ini파일을 수정한다.

마지막 줄에 임의로 추가하여 준다.

[ml2]

type_drivers = flat,vlan,vxlan

tenant_network_types =                              // (vxlan)

mechanism_drivers = linuxbridge,l2population

extension_drivers = port_security

[ml2_type_flat]

flat_networks = provider

[ml2_type_vxlan]

vni_ranges = 1:1000

[securitygroup]

enable_ipset = true

외부 통신 설정을 위해 /etc/neutron/plugins/ml2/linuxbridge_agent.ini파일 편집한다.

cont노드의 네트워크 카드 하나를 추가하여 bridge로 설정했을 경우 설정한다.

[linux_bridge]

physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME            //ens33

[vxlan]

enable_vxlan = true

local_ip = OVERLAY_INTERFACE_IP_ADDRESS                           // 1.0.0.1

l2_population = true

[securitygroup]

enable_security_group = true

firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver    //OVSHybridIptablesFirewallDriver

** 실습환경에 방화벽을 다 꺼놓고 실습하였다. 혹시 방화벽이on일 경우 명령어 사용 **

# modprobe br_netfilter (방화벽 on일떄 사용)

# vi /etc/sysctl.conf

net.bridge.bridge-nf-call-iptables=1

net.bridge.bridge-nf-call-ip6tables=1

:wq

# sysctl –p (값 확인용)

/etc/neutron/l3_agent.ini파일 편집하여 마지막 줄에 임의로 linuxbridege카드 추가한다.

[DEFAULT]

interface_driver = linuxbridge

/etc/neutron/dhcp_agent.ini편집하여 마지막에 줄에 추가한다.

[DEFAULT]

interface_driver = linuxbridge

dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq

enable_isolated_metadata = true

/etc/neutron/metadata_agent.ini파일을 편집하여 [DEFAULT]섹션에 삽입한다. (152번 줄)

nova_metadata_host = cont

metadata_proxy_shared_secret = METADATA_SECRET  // It1

/etc/nova/nova.conf파일에서 [neutron]부분을 수정해야 한다.

ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini (심볼릭 링크 생성)

su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron (데이터베이스 채우기)

Compute API 서비스를 다시 시작하고, 네트워킹 서비스를 시작하고 시스템이 부팅될 때 시작하도록 구성하고 self-service-network같은 경우 layer 3 서비스를 활성화 후 시작한다.

systemctl restart openstack-nova-api.service

systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent  //neutron-openvswitch-agent

systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent   //neutron-openvswitch-agent

systemctl enable neutron-l3-agent

systemctl start neutron-l3-agent

control 노드의 설정이 끝이 나고, neutroncompute 노드에서도 설정해줘야 한다.

yum install -y openstack-neutron-linuxbridge ebtables ipset (패키지 다운로드)

/etc/neutron/neutron.conf파일을 편집한다.

Transport_url을 설정하고 [DEFAULT] auth_strategy을 임의로 입력한다.

auth_strategy = keystone

[keystone_authtoken]부분을 설정한다.

[keystone_authtoken]섹션에 임의로 추가해서 넣는다.

project_domain_name = default

user_domain_name = default

project_name = service

username = neutron

password = It1

Lock_path 경로 설정한다.

Self-Service Networks로 구성했기 떄문에 compute 노드에서도 self-service로 구성하겠다.

/etc/neutron/plugins/ml2/linuxbridge_agent.ini편집한다.

마지막 줄에 임의로 입력하여 추가하여 준다.

[linux_bridge]

physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME         //ens33

[vxlan]

enable_vxlan = true

local_ip = OVERLAY_INTERFACE_IP_ADDRESS                              //1.0.0.2

l2_population = true

[securitygroup]

enable_security_group = true

firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver     //OVSHybridIptablesFirewallDriver

** 실습환경에 방화벽을 다 꺼놓고 실습하였다. 혹시 방화벽이on일 경우 명령어 사용 **

# modprobe br_netfilter (방화벽 on일떄 사용)

# vi /etc/sysctl.conf

net.bridge.bridge-nf-call-iptables=1

net.bridge.bridge-nf-call-ip6tables=1

:wq

# sysctl –p (값 확인용)

[neutron]섹션에 값을 수정한다.

Compute service를 다시 시작하고 neutron 서비스를 실행한다.

systemctl restart openstack-nova-compute

systemctl enable neutron-linuxbridge-agent

systemctl start neutron-linuxbridge-agent

control 노드와 compute 노드의 neutron 설정이 끝이 났다. 성능 검증을 하겠다.

자격증명 사용 후에 openstack network agent list (list를 확인한다.)

Dashboard 설치하겠다. Dashboard는 관리자와 사용자들에게 클라우드 기반 자원 배치의 접근, 제공, 자동화를 위한 GUI환경을 제공한다. 인스턴스 생성을 LINUX shell에서도 가능하지만 GUI환경에서 할 것이기 때문에 설치하겠다. (CONTROL 노드)

yum -y install openstack-dashboard (패키지 설치)

/etc/openstack-dashboard/local_settings파일을 편집한다.

대시보드에 호스트를 추가한다. (*은 모든 호스트들에게 접근을 허가하겠다는 뜻)

오픈스택의 API의 버전들을 설정한다.

오픈스택의 멀티 도메인을 사용 가능하게 한다.

KEYSTONE의 기본 도메인을 Default로 한다. (dash보드 login할 떄의 도메인 설정!)

Memcached의 정보를 설정한다. (locationcont 노드의 hostname으로 설정)

Session_engine 설정한다.

오픈스택 대시보드를 실행할 control 노드의 관리용 ip, URL, 기본권한을 설정한다.

자신이 dashboard에 로그인하여 사용할 기능에 대해서는 True, 아니면 false를 입력한다.

TIME ZONE을 설정한다. (Asia/Seoul로 설정!)

/etc/httpd/conf.d/openstack-dashboard.conf파일을 편집한다.

WSGIApplicationGroup %{GLOBAL} 4번째 줄에 임의로 추가한다.

systemctl restart httpd memcached (서비스 재시작!)

1.0.0.1/dashboard로 접속하게 되면 무사히 로그인 창이 나오게 되서 로그인하여서 여러가지 설정을 할 수 있다. Dashboard가 잘 작동함을 알 수 있다.

 

 

오픈스택 블록 스토리지(Cinder)는 오픈스택 컴퓨터 인스턴스에 사용할 지속적인 블록 레벨 스토리지 장치들을 제공한다. 블록 스토리지 시스템은 블록 장치들을 서버에 작성, 부착, 제거하는 일을 관리하고, 블록 스토리지 볼륨들은 클라우드 사용자들이 자신만의 스토리지의 필요한 부분을 관리하기 위해 사용된다. Cinder를 설치하겠다. (cont 노드)

Cinder database 추가 후 권한 부여한다.

CREATE DATABASE cinder;

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'It1';

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'It1';

flush privileges;

exit;

자격증명 사용 후에 cinder 사용자 추가한 후에 admin 권한을 부여한다.

. admin_openrc

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

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

Cinder v2,v3 서비스를 생성한다.

openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2

openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3

cinder endpoint를 생성한다. End point는 일종의 서비스를 사용하기 위한 URL이다.

openstack endpoint create --region RegionOne volumev2 public http://cont:8776/v2/%\(project_id\)s

openstack endpoint create --region RegionOne volumev2 internal http://cont:8776/v2/%\(project_id\)s

openstack endpoint create --region RegionOne volumev2 admin http://cont:8776/v2/%\(project_id\)s

openstack endpoint create --region RegionOne volumev3 public http://cont:8776/v3/%\(project_id\)s

openstack endpoint create --region RegionOne volumev3 internal http://cont:8776/v3/%\(project_id\)s

openstack endpoint create --region RegionOne volumev3 admin http://cont:8776/v3/%\(project_id\)s

yum install -y openstack-cinder (cinder 패키지 다운로드)

/etc/cinder/cinder.conf파일을 수정한다.

Auth_strategykeystone으로 설정한다.

My_ip에는 cont 노드의 ip 1.0.0.1을 입력한다.

메시지 대기열 rabbitmq을 구성한다.

[database] connection을 설정한다.( mysql+pymysql://cinder:It1@cont/cinder )

[keystone_authtoken]을 설정한다.

[keystone_authtoken]섹션 안에 임의로 추가한다.

project_domain_name = default

user_domain_name = default

project_name = service

username = cinder

password = It1

Lock_path를 설정한다.

su -s /bin/sh -c "cinder-manage db sync" cinder (cinder 데이터베이스 채우기)

deprecated는 오류가 아니다. 크게 신경 쓰지 않아도 된다.

/etc/nova/nova.conf파일을 들어가서 region을 설정한다.

Nova-api 서비스를 재시작하고 cinder 서비스를 활성화 후 시작한다.
systemctl restart openstack-nova-api

systemctl enable openstack-cinder-api openstack-cinder-scheduler

systemctl start openstack-cinder-api openstack-cinder-scheduler

control 노드에서의 설정이 끝이 난다. Cinderstorage에서 따로 설치 한 후 설정을 해줘야 한다. 또 한 개의 노드를 더 만들어서 추가할 수도 있다. 하지만 기존의 compute 노드에 추가하여 주었다. (comp 노드에 하드가 하나 추가되어 있어야 함.)

yum install -y lvm2 device-mapper-persistent-data (패키지 설치)

systemctl enable lvm2-lvmetad (활성화)

systemctl start lvm2-lvmetad (lvm 실행)

lsblk 명령어를 하게 되면 sdb(50GB) 하드가 하나 추가 되었음을 확인할 수 있다.

/etc/lvm/lvm.conf파일을 편집한다.

스토리지 노드가 운영 체제 디스크에서 LVM을 사용하는 경우 관련 장치를 필터에 추가해야합니다. 예를 들어 /dev/sda장치에 운영 체제가 포함 된 경우 a/sdb/를 추가한다.

devices {

...

filter = [ "a/sda/", "a/sdb/", "r/.*/"]   (임의로 devices안에 추가하여 준다.)

}

Systemctl restart lvm2-lvmetad (재시작)

Vgcreate cent1 /dev/sdb (/dev/sdb를 통해 cent1이라는 볼륨그룹 생성)

(lvm.conf파일에 filter를 추가해주지 않으면 볼륨그룹이 생성되지 않는다.)

yum install -y openstack-cinder targetcli python-keystone (패키지 설치)

/etc/cinder/cinder.conf파일을 편집한다.

[DEFAULT] 섹션의 값들을 수정한다.

[database]섹션에 connection을 설정한다. (mysql+pymysql://cinder:It1@cont/cinder)

[keystone_authtoken]섹션 값 설정한다.

[keystone_authtoken]섹션 안에 임의로 추가한다.

project_domain_name = default

user_domain_name = default

project_name = service

username = cinder

password = It1

Lock_path 경로 설정한다.

제일 끝 쪽에 임의로 값을 넣어 주면 cinder.conf의 설정은 끝이 난다.

[lvm]

volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver     // (LVMISCSIDriver)

volume_group = cinder-volumes                                 // (cent1)

target_protocol = iscsi                                  // (iscsi_protocol = iscsi)

target_helper = lioadm                                   // (iscsi_helper = tgtadm)

region 설정을 위해 /etc/nova/nova.conf파일을 편집한다.

그 후 cinder-volume target을 활성화 후 실행한다.

systemctl enable openstack-cinder-volume target

systemctl start openstack-cinder-volume target

openstack volume service list (volume service list를 확인한다.)

무사히 stateup되어 있다. State down이 되어 있는 경우 compute 노드에서 명령어systemctl restart openstack-cinder-volume target를 입력한 후에 다시 list를 확인하여 보면 무사히 stateup이 된다. Cinder 검증도 끝이 났다.

인스턴스 생성을 위해 dashboard에 들어간 후 login을 하겠다.

먼저 네트워크를 생성하겠다. 네트워크는 외부망, 내부망 두 개를 생성해야 한다.

먼저 외부 망인 pub을 설정했다. neutron에서 설정했던 물리적인 네트워크는 provider로 설정하고 외부 네트워크를 체크 해야 한다.

서브넷 이름을 설정해주고 네트워크 주소는 1.0.0.0/24대역으로 설정했다.

Dhcp 기능을 사용할 것이고 범위는 101~120까지로 설정한 후 DNS 서버를 입력!

내부 망 PRI도 생성한다. 네트워크 유형은 VXLAN이고 구분 ID는 임의의 값을 대입한다.

역시 이름과 주소를 설정한다. 주소를 사설IP대역인 172.16.0.0대역을 넣었다.

역시 DHCP 기능을 사용할 것이고 DNS를 서버를 입력한다.

무사히 네트워크가 생성되었다.

네트워크 생성 후에 라우터를 생성한다.

네트워크 토폴로지에 들어가서 인터페이스를 추가하여 게이트웨이 IP를 얻는다.

컨트롤 노드에서 router gateway1.0.0.117PING이 가야 한다.

그 후 인스턴스에 대한 보안 그룹을 설정하기 위해 보안 그룹을 생성하겠다.

특별한 설정없이 이름만 설정하면 보안 그룹이 생겨난다.

그 후 생겨난 보안 그룹의 규칙관리에서 규칙을 추가하여야 한다.

Ping, ssh, http 규칙을 각각 추가하겠다.(ping, 웹서비스, 원격접속을 위해서)

SSH 원격 접속을 위한 KEY를 만들기 위해 키 페어를 생성하고 파일을 저장한다.

이미지는 glance로도 올릴 수 있지만 dashboard에서도 생성할 수 있다. Centos 이미지 기반의 인스턴스를 생성할 것이기 떄문에 이미지를 생성하겠다.

이미지가 무사히 생성!(Centos QCOW2 이미지는 openstack 사이트에서 받아놓았다.)

CentOS의 이미지에 맞는 알맞은 규모를 설정하기 위해 flavor을 생성하겠다.

M1.test라는 이름과 id는 임의 값 주고 cpu1 RAM 1GB 디스크 10GBflavor을 생성!

인스턴스 생성을 위한 준비가 끝이 났다. 인스턴스를 생성하겠다.

centos라는 이름으로 개수는 1대로 설정했다.

아까 생성해 두었던 이미지와 flavor를 선택한다.

네트워크는 내부 망 PRI로 선택한다.

보안 그룹도 아까 만들어둔 Linux라는 보안 그룹을 할당한다.

키 페어 역시 open으로 설정한 후 인스턴스를 시작한다.

인스턴스가 생성되는 동안에 floating ip를 생성하겠다. 1.0.0.118라는 ip를 생성하였다. ip의 범위는 아까 네트워크 생성에서 pub dhcp 101~120까지 random하게 할당 된다. Down이 되 있는 이유는 아직 인스턴스에 연결을 해주지 않았기 떄문이다.

centos라는 인스턴스가 무사히 생성되었다. 생성된 인스턴스에 외부망과 연결을 위해 유동 ip연결을 하기 위해 선택하겠다.

 

기존에 생성해 놓았던 1.0.0.118을 연결시켜준다.

무사히 유동 ip가 설정되었음을 확인할 수 있다.

Cont 노드에서 1.0.0.118으로 ping이 가야 한다.

Ping이 되기 떄문에 ssh로 원격 접속을 해보겠다. (Xshell 사용)

이름과 호스트에 ip를 입력해주고 연결하겠다.

로그인 할 사용자를 입력하여야 하는데 centos 이미지에 있는 centos라는 기존에 있는 유저를 사용하기 위해 centos를 입력한다.

아까 저장한 키 페어 파일을 찾아서 넣어줘야 한다.

무사히 SSH 접속이 완료가 된다.

Root 권한으로 가기 위해 sudo su – 명령어 실행!

무사히 root계정으로도 이동이 가능함을 확인할 수 있다.

Keystone, glance, placement, nova, neutron, cinder 각각 수동설치를 하였다. 인스턴스를 생성하기 위한 가장 최소한의 조건으로 수동설치를 했다. 그 외에 Swift, heat, senlim, panko 등 엄청나게 많은 기능들 역시 수동설치가 가능하다. Minimal 설치로 인스턴스(가상머신) 생성부터 ssh접속까지 진행하였다.