73
[OpenStack] Ice House 설치하기 김지은 [email protected]

Build the OpenStack Cloud with Neutron Networing, IceHouse

Embed Size (px)

Citation preview

[OpenStack]

Ice House 설치하기

김지은

[email protected]

# IceHouse

[참고]http://docs.openstack.org/icehouse/http://naleejang.tistory.com/http://sola99.tistory.com/http://blog.naver.com/love_tolty/220312783624

OpenStack

▲ IceHouse Conceptual Arhitecture▲ Openstack Series

# OpenStack Services

OpenStack

service description

Nova 컴퓨팅 서비스, OpenStack클라우드 인프라 관리(하이퍼바이저에 행하는 모든 행위 관리)

Neutron 네트워킹 서비스, OpenStack 내의 네트워크 관리(고도화된 가상 네트워크 정책 설정 가능)

Keystone 인증 서비스. 사용자 및 API에 대한 인증 및 권한 설정

Glance 이미지 관리 서비스, VM으로 생성될 이미지파일들을 관리

Cinder 볼륨저장장치 서비스, 데이터를 블록 단위로 저장

Swift 오브젝트 저장장치 제공 서비스, 데이터를 오브젝트 단위로 저장

Horizon 사용자 인터페이스 – 데쉬보드

Ceilometer 모니터링 및 미터링서비스, 사용자의 사용량 등을 측정

Heat 오케스트레이션서비스, 미리 작성된 스크립트와 준비된 템플릿을 이용해 자동으로 개발 인프라 구축

Trove 데이터베이스 서비스, 최종 사용자에게 클라우드 기반의 데이터베이스서비스를 제공

<예비 프로젝트>

Sahara Openstack상에서 Hadoop클러스터를 제공하기 위한 서비스

Marconi 메시지 전송 및 알림 서비스

Ironic 가상머신이 아닌 물리서버를 클라우드 환경에서 제공

# Example Arhitecture

OpenStack

▼ Three-node architecture with Neutron ▼ Two-node architecture with Nova-network

http://docs.openstack.org/icehouse/install-guide/install/apt/content/ch_overview.html

Test Lab

• Composition

OpenStack Infra

Instances, vNet, vStorage, vCompute …

OpenStack Ice House, 9th release version

Virtual Machines

Controller node, Compute node, Network node, Block node(Server 14.04.1 LTS (64bit only))

EXSi 5.5 Vmware ESXi 5.5 netork settings

- IP : 192.168.1.1- Netmaks : 255.255.255.0- Gateway : 192.168.1.254- dns-nameservers : 168.126.63.1 8.8.8.8

Host Computer Hardware Spec.- CPU : Intel Core i5-4690, 4cores, 3.50GHz

HyperThreading : noneGigabyte Technology, B85M-DS3H

- Memory : 16GB- Disk : 1.81TB- NIC : Realtek 8168 Gigabit Ethernet 2개- No OS, installed Esxi Server

# OpenStack Cloud

Test Lab

OpenStack IaaSNetworknode

Controllernode

Computenode 1

Block 1

DashBoard

CLI

Block Storage

User

Tenant C,Instances

Tenant B,Instances

Tenant A,Instances

Test Lab

• Architecture & ESXi VM Spec.

Controller Network Compute

Neutron Server

Keystone

Glance

Horizon

Cinder

Nova Server

RabbitMQ OVS KVM

Mysql MysqlMysqlServer

Test Lab Architecture.

node cpu memory Disk user(id/pw)

Controller 2 8GB 80Groot /

expernet

Network 1 2GB 80Groot /

expernet

Compute 1 2 6GB 80Groot /

expernet

Block 1 3 2GB40G/40

Groot /

expernet

Neutron Agents

Nova Agents

Neutron Plugins

Heat

Block

Cinder Agents

LVM

Hardware Spec.

Test Lab

• OpenStack Network Architecture

node Network1 Network2 Network3

Controller 192.168.1.3 x x

Network 192.168.1.4 10.0.1.21Not Set

(OVS linkage)

Compute 1 192.168.1.5 10.0.1.31 x

Block 1 192.168.1.6 x x

Controller Network Compute 1

Network 1

WAN

Network 3Network 2

eth0 eth0 eth1 eth2 eth0 eth1

- Network 1 : Management Network - Network 2 : External Network- Network 3 : Service(Data) Network

Block 1

eth0

Test Lab – ESXi 5.5

13

2

5

6

7

1. VMWare 사이트 접속2. 로그인3 . 다운로드 > 무료제품다운로드 >

vSphere Hypervisor

4

4. License & Download

5. Vmware vSphere Hypervisor – Start Download Manager

6. VMware vSphere Client 5.5 – Start Download Manager

7. License 받은 후 확인

ESXi Download

Test Lab – ESXi 5.5

Realtek NIC를 위한 vSphere Hypervisor iso 드라이버 통합 (1/2)

1. ESXI-Customizer-v2.7.2 > ESXi-Customizer.cmd 실행2. “Select the original VMWare EXSi ISO” Browse > VMware-VMvisor-Installer-5.5.0-1331820.x86_64.iso3. “Select an OEM.tgz file, a VIB file or an Offline Bundle” Browse >

VMware_bootbank_net-r8168_8.013.00-3vmw.510.0.0.799733.vib4. “Select the working directory” Browe5. “Run!”

1

2

3

4

5

Test Lab – ESXi 5.5

Realtek NIC를 위한 vSphere Hypervisor iso 드라이버 통합 (2/2)

1. All Done Message box 확인2. 설정 한 output 폴더에 드라이버 통합한 iso가 생겼는지 확인

※ VIB파일은 해당하는 네트워크 카드 모델에 맞춰야 함. 해당 test PC의 nic 모델은 Realtek 8168 Gigabit Ethernet ※ Esxi 사용을 위해선 gigabit 이상을 지원하는 nic가 필요함

1

2

1. CMOS 설정

1. CPU settings- Intel Virtual Technology : Enabled- Intel VT/AMD-V : Enabled Cpu 가상과 관련한 항목들을 Enabled로 설정

2. 비디오카드- graphic, gpu등 비디오카드 관련한 항목을 Enabled로 설정(설정이 안되어있을때, 인스턴스가 생성도 안되는 에러가 발생했

었음..)

2. ESXi 설치 및 환경 설정

Network 정보 설정Shell사용 및 SSH사용 enabled로 설정

3. vSphere Client 설치

Client PC에서 vSphere Client 설치 후 Exsi 서버의 계정(root/expernet)으로 로그인

4. compute 노드에 cpu가상화 지원 가능하도록 설정(KVM) – EXSi 5.1 이상

1. EXSi에 SSH 접근 (putty) 후, vi /etc/vmware/config 편집- vhv.enable = “TRUE”

2. VM설정 후 파워 on 전에 vi /vmfs/datastoreX/*.vmx 편집- vhv.enable = “TRUE”- hypervisor.cpuid.v0 = “FALSE”

3. 확인: VM power on 후, #egrep -c '(vmx|svm)' /proc/cpuinfo

Basic Configuration

5. 새 가상머신 만들기 (controller, network, compute1, block1)

1. “새 가상 시스템 생성” 2. 구성 – 사용자 지정3. 이름 및 위치 : default > 스토리지 : default > 가상시스템버전 : 8 > 게스트 운영체제 : Linux/ubuntu 64bit

> CPU 코어 수 설정 > 메모리 설정 > 네트워크 설정 > SCSI 컨트롤러 : default > 디스크선택 : 새 가상 디스크 생성 >디스크 용량 설정 / 빠르게 비워지는 씩 프로비저닝 / 위치 : default > 고급옵션 : default > 완료준비 : “완료 전 가상 시스템 설정 편집” 체크

4. 새 가상 시스템 설정 편집 창- 하드웨어 탭 : 플로피 디스크 제거 > CD/DVD : 데이터스토어 ISO 설정 / “전원켤때연결” - 옵션 탭 : CPU/MMU 가상화 > VT-x/AMD-V 사용 및 EPT/AMD RVI 사용 체크

5. 완료

Basic Configuration

Basic Configuration

6. VM에 우분투 설치

1. VM 실행 후 설치 진행2. 설치 완료 후 사용자 계정으로 로그인3. Root 권한 설정

- sudo passwd root ↙- 비밀번호 입력 후 root로 로그인 ( su - ↙)

4. IP 설정# apt-get -y purge network-manager : ip 자동관리 패키지 제거# vi /etc/netowk/interface

Controller Network Compute1 Block1

auto loiface lo inet loopback

auto eth0iface eth0 inet staticaddress 192.168.1.3netmask 255.255.255.0gateway 192.168.1.254dns-nameservers168.126.63.1 8.8.8.8

auto loiface lo inet loopback

auto eth0iface eth0 inet staticaddress 192.168.1.4netmask 255.255.255.0gateway 192.168.1.254dns-nameservers 168.126.63.1 8.8.8.8

auto eth1iface eth1 inet staticaddress 10.0.1.21netmask 255.255.255.0

# etth2 설정 내용(OVS 연동)auto eth2iface eth2 inet manualup ip link set dev $IFACE upup ip link set $IFACE promisc ondown ip link set dev $IFACEdown ip link set $IFACE promisc off

auto lo

iface lo inet loopback

auto eth0iface eth0 inet staticaddress 192.168.1.5netmask 255.255.255.0gateway 10.0.0.2dns-nameservers 168.126.63.1 8.8.8.8

auto eth1iface eth1 inet staticaddress 10.0.1.31netmask 255.255.255.0

auto loiface lo inet loopback

auto eth0iface eth0 inet staticaddress 192.168.1.6netmask 255.255.255.0gateway 192.168.1.254dns-nameservers 168.126.63.1 8.8.8.8

1. 인터페이스$ ifup eth0$ ifdown eth0

2. Tun/tap device$ ip link set eth2 down$ ip tuntap del mode tap dev eth2

3. DNS 서버$ vi /etc/init.d/resolvconf

Basic Configuration

7. 우분투 기본환경

1) Root 권한 설정$ sudo passwd root$ su –

2) IP 설정$ apt-get -y purge network-manager : ip 자동관리 패키지 제거

3) 재실행$ vi /etc/network/interface$ ifup ethX$ ifdown ethX

4) Network node의 가상 nic interface 생성$ vi /etc/init.d/ovs_nic.sh-----------------------------------#! /bin/ship tuntap add mode tap eth2ip link set eth2 upifdown eth2ifup eth2-------------------------------------$ chmod 755 /etc/init.d/ovs_nic.sh

$ vi /etc/rc.local--------------------------------------sudo /etc/init.d/ovs_nic.sh--------------------------------------

$ reboot 후, ifconfig로 확인

Basic Configuration

7. 우분투 기본환경

5) APT 서버 설정$ vi /etc/apt/sources.list

> :%s/us.archive/kr.archive/g : kr서버로 변경**$ apt-get update

6) SSH 설정: ssh를 사용하는 모든 Host 설치 (* sysv-rc-conf : 부팅 시작 시 자동실행 서비스 )$ apt-get install -y ssh sysv-rc-conf$ cd /etc/init.d$ netstat -ntlp | grep ssh$ ./ssh start$ netstat -ntlp | grep ssh$ sysv-rc-conf ssh on

7) Host 파일 수정: controller, network, compute, block (all nodes)$ vi /etc/hosts --------------------------------------192.168.1.3 controller192.168.1.4 network192.168.1.5 compute1192.168.1.6 block1127.0.0.1 localhost 없으면 ntpq –p 동작안함---------------------------------------

* 만약 windows os에서 접근 시 windows hosts파일도 동일하게 수정

8) 방화벽 정책 삭제 (iptables, rabbitmq 메시지가 차단됨: controller, network, compute, block (all nodes) $ ufw disable$ iptables -F

Basic Configuration

7. 우분투 기본환경

9) NTP 설정: controller, network, compute, block (all nodes) $ apt-get -y install ntp $ service ntp stop $ vi /etc/ntp.conf ------------------------------------ #그외 server 전부 주석server time.bora.neserver time.kriss.re.kr ------------------------------------$ service ntp start

* 확인$ ntpq -p $ ntpq -c assoc

10) Openstack package : controller, network, compute, block (all nodes)

< ubuntu 12.04 >$ apt-get –y install python-software-properties (14.04는 필수가 아님. 필요치 않음) $ add-apt-repository cloud-archive:icehouse (14.04는 필수가 아님. 필요치 않음) $ apt-get update $ apt-get dist-upgrade$ apt-get install linux-image-generic-lts-saucy linux-headers-generic-lts-saucy (neutron 사용시 backported linux kernal 설치 필요)$ reboot

< ubuntu 14.04 - icehouse 기본>$ apt-get -y update && apt-get -y dist-upgrade $ reboot

Basic Configuration

7. 우분투 기본환경

11) Messaging server (보통 controller에 설치): openstack은 message broker로 서비스간 동작/상태정보 교환 (* 메시지 브로커로 rabbitMQ 사용 )[Controller]$ apt-get -y install rabbitmq-server $ rabbitmqctl change_password guest expernet

12) X-Windows 설치 및 실행$ sudo apt-get install -y xinit$ sudo apt-get install -y ubuntu-desktop(* $ sudo apt-get install -y --no-install-recommends ubuntu-desktop)$ apt-get -y purge network-manager : ip 자동관리 패키지 제거 xwindows를 설치하면 위의 패키지가 같이 설치되는데, 기존의 네트워크 매니저와 충돌 할 수 있으므로 반드시 제거해준다.

$ startx$ reboot

13) X-Windows 로그인시 root 허용$ vi /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf --------------------------------------------------------------------------greeter-show-manual-login=true User name 입력 가능allow-guest=false 게스트계정 막기 (cf. allow-root = true : 자동으로 root 설정) --------------------------------------------------------------------------$ reboot

Basic Configuration

7. 우분투 기본환경

14) database

* Mysql 설치 시 warning : # apt-get update

* 재부팅 후 mysql –u root –p 시 mysqld.sock 오류 : # service mysql restart

Controller All Node(그외 나머지 노드 전부)

apt-get -y install python-mysqldb mysql-server

nano /etc/mysql/my.cnf-----------------------------------[mysqld]bind-address = 192.168.1.3 # Node 의 접근 허용 mysql 서버 IP

default-storage-engine = innodbinnodb_file_per_tablecollation-server = utf8_general_ciinit-connect = 'SET NAMES utf8'character-set-server = utf8------------------------------------ # InnoDB 사용 및 UTF8 설정

# service mysql restart# mysql_install_db 최초 DB 생성# mysql_secure_installation : DB 보안 관련 스크립트 임 (모두 y)- root password 변경 (n)- DB 접근 anonymous 계정 삭제 (y)- DB 원격 접근 차단 (?) y)- test DB 와 access 삭제 (y)- reload privilege table (y)

# sysv-rc-conf mysql on

apt-get -y install python-mysqldb

Basic Configuration

7. 우분투 기본환경

10. Openstack package (ubuntu 14.04): controller, network, compute, block

# apt-get –y update && apt-get –y dist-upgrade# reboot

11. Messaging server (보통 controller에 설치): openstack은 message broker로 서비스간 동작/상태정보 교환

: 메시지 브로커로 rabbitMQ 사용<controller>#apt-get –y install rabbitmq-server#rabbitmqctl change_password guest expernet

Keystone

Configure the Identity Service – keystone

- 사용자 및 API에 대한 인증 및 권한 설정 서비스- 사용자에 대한 인증, 인증된 사용자에 대한 토큰 검증 및 관리, 이용 가능한 서비스 정보 제공,

규칙 기반의 권한설정 기능 등

keystone identity manager

Keystone

Configure the Identity Service – keystone

- Token backend : 사용자별 token 관리- Catalog backend : 오픈스택의 모든 서비스의 end-point관리- Policy backend : 테넌트, 사용자 계정 및 롤 등을 관리- Identity backend를 통하여 사용자 인증을 관리

tenant, user, role

: 사용자일 경우 사용자 그룹인 tenant 사용자 계정정보인user ID와 PW, 사용권한인 role을 가지게 됨.

서비스일 경우 (nova, glance, neutron 등 다른 서비스),해당 서비스의 endpoint url을 등록.

- tenant에는 user가 포함- user는 role을 가짐- token을 발행할 때는 tenant와 user정보가 필요- 서비스가 있고 각각의 서비스는 endpoint url을 가짐- user는 endpoint-url을 통하여 서비스에 접근

<controller>

# apt-get –y install keystone

# vi /etc/keystone/keystone.conf

-----------------------------------------------

[database]

connection = mysql://keystone:expernet@controller/keystone

-----------------------------------------------

# rm /var/lib/keystone/keystone.db 기본생성되어있는 sqlite db삭제

# mysql –u root –p *keystone db 생성

>create database keystone;

>grant all privileges on keystone.* to ‘keystone’@’localhost’ identified by ‘expernet’;

>grant all privileges on keystone.* to ‘keystone’@’%’ identified by ‘expernet’;

>exit

#su –s /bin/sh –c “keystone-manage db_sync” keystone *identity service tables생성

#opens니 rand –hex 10 d81cde9be3e0cf6161b7

- keystone이 사용하는 공유암호키 지정을 위해 암호키 랜덤 생성.

- Admin_token에서 사용, keystone과 다른 서비스 간에 shared secret으로 사용됨

Keystone

<controller>

# vi /etc/keystone/keystone.conf

--------------------------------------------------------------------

[database]

admin_token = d81cde9be3e0cf6161b7 띄어쓰기 필수!

log_dir=/var/log/keystone

--------------------------------------------------------------------

# service keystone restart

# (crontab –l -u keystone 2>&1 | grep -q token_flush) || \ echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/crontabs/keystone

주기적으로 해당 파일을 업데이트 해줘야 하기 때문에 실행

※user, tenant, role 설정 필요. (service, endpoint가 이것을 사용)# export OS_SERVICE_TOKEN=d81cde9be3e0cf6161b7# export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0

*관리자생성# keystone user-create --name=admin --pass=expernet [email protected] * admin Users 생성# keystone role-create --name=admin * admin 사용자의 roile 생성# keystone tenant-create --name=admin --description="Admin Tenant” * admin 사용자의 tenant 생성# keystone user-role-add --user=admin --tenant=admin --role=admin * Users+Role+Tenant 조합# keystone user-role-add --user=admin --tenant=admin --role=_member_ * admin에 _member_ Role 연결

*일반유저생성(_member_ Role만 허용)# keystone user-create --name=demo --pass=expernet [email protected] *user 계정 생성# keystone tenant-create --name=demo --description="Demo Tenant"# keystone user-role-add --user=demo --tenant=demo --role=_member_

*service tenant 생성# keystone tenant-create --name=service --description="Service Tenant” *다른 서비스를 위해 필요한 service tenant

Keystone

<controller>

# keystone service-create --name=keystone --type=identity --description="OpenStack Identity“ *서비스 정의# keystone endpoint-create --service-id=$(keystone service-list | awk '/ identity / {print $2}') --publicurl=http://controller:5000/v2.0 --internalurl=http://controller:5000/v2.0 --adminurl=http://controller:35357/v2.0

**** 정상동작 검증 : 정상동작 시 값들이 화면에 출력# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT# keystone --os-username=admin --os-password=expernet --os-auth-url=http://controller:35357/v2.0 token-get# keystone --os-username=admin --os-password=expernet --os-tenant-name=admin --os-auth-url=http://controller:35357/v2.0 token-get

***사용의 편의를 위해 시스템 환경변수 파일 미리 생성# cd# vi .bashrc------------------------------------------export OS_USERNAME=adminexport OS_PASSWORD=expernetexport OS_TENANT_NAME=adminexport OS_AUTH_URL=http://controller:35357/v2.0------------------------------------------

#source .bashrc *환경변수 적용#export *변수확인

****토큰확인#keystone token-get#keystone user-list#keystone user-role-list --user admin --tenant admin

Keystone

Install and Configure OpenStack Client

OpenStack command-line client는 간단한 명령어로 API 호출 할 수 있음. OpenStack 를 통해서 여러 컴퓨터에 명령 내릴 수 있음.OpenStack 과 client 는 RESTful APIs 를 통해서 명령 제어.

OpenStack Client

Service Client Package Description

Block Storage cinder python-cinderclient Create and manage volumes.

Compute nova python-novaclient Create and manage images, instances, and flavors.

Database Service trove python-troveclient Create and manage databases.

Identity keystone python-keystoneclient Create and manage users, tenants, roles, endpoints, and credentials.

Image Service glance python-glanceclient Create and manage images.

Networking neutron python-neutronclientConfigure networks for guest servers. This client was previously called quantum.

Object Storage swift python-swiftclientGather statistics, list items, update metadata, and upload, download, and delete files stored by the Object Storage service. Gain access to an Object Storage installation for ad hoc processing.

Orchestration heat python-heatclientLaunch stacks from templates, view details of running stacks including events and resources, and update and delete stacks.

Telemetry ceilometer python-ceilometerclient Create and collect measurements across OpenStack.

< controller , network, compute, block >

1. #apt-get install python-novaclient#apt-get install python-pip

# pip install python-PROJECTclient : 오른쪽의 각각 client들 설치•참고- Ugrade : pip install --upgrade python-PROJECTclient-Remove : pip uninstall python-PROJECTclient

# vi 로 openrc파일 생성 후,# source admin-openrc.sh * 적용

*PROJECTceilometer - Telemetry APIcinder - Block Storage API and extensionsglance - Image Service APIheat - Orchestration APIkeystone - Identity service API and extensionsneutron - Networking APInova - Compute API and extensionsswift - Object Storage APItrove - Database Service API

OpenStack Client

admin-openrc.sh

export OS_USERNAME=adminexport OS_PASSWORD=expernetexport OS_TENANT_NAME=adminexport OS_AUTH_URL=http://controller:35357/v2.0

demo-openrc.sh

export OS_USERNAME=demoexport OS_PASSWORD=expernetexport OS_TENANT_NAME=demoexport OS_AUTH_URL=http://controller:35357/v2.0

Configure the Image Service - glance

<controller>

#apt-get –y install glance python-glanceclient

#vi /etc/glance/glance-api.conf#vi /etc/glance/glance-registry.conf 두개의 파일 각각에----------------------[database]connection = mysql://glance:expernet@controller/glance-----------------------

#vi /etc/glance/glance-api.conf 메시지 브로커 설정------------------------[DEFAULT]…rpc_backend = rabbit (없는 필드 이므로 추가)rabbit_host = controllerrabbit_password = expernet

# rm /var/lib/glance/glance.sqlite *sqlite db 패키지 삭제 (해당 파일 없었음 fine / -name glance.sqlite로 찾아도 없었음)

#mysql –u root –pCREATE DATABASE glance;GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY ‘expernet’;GRANT ALL PRIVILEGES ON glance.* TO 'glance'@’%' IDENTIFIED BY ‘expernet’;exit

Glance

<controller>

#su –s /bin/sh –c “glance-manage db_sync” glance 서비스 테이블 생성

※keystone 인증 설정# keystone user-create --name=glance --pass=expernet [email protected]# keystone user-role-add --user=glance --tenant=service --role=admin

※ 두개의 파일 각각에 keystone 설정 추가# vi /etc/glance/glance-api.conf# vi /etc/glance/glance-registry.conf---------------------------------------[keystone_authtoken]auth_uri = http://controller:5000auth_host = controllerauth_port = 35357auth_protocol = httpadmin_tenant_name = serviceadmin_user = glanceadmin_password = expernet

[paste_deploy]flavor = keystone---------------------------------------

Glance

<controller>

※ 서비스 정의, API Associate#keystone service-create --name=glance --type=image --description="OpenStack Image Service“#keystone endpoint-create --service-id=$(keystone service-list | awk '/ image / {print $2}') --publicurl=http://controller:9292 --internalurl=http://controller:9292 --adminurl=http://controller:9292

# service glance-registry restart# service glance-api restart

※ 이미지 다운로드 (cirros)# mkdir /tmp/images# cd /tmp/images/# wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img

※ 이미지서비스 업로드# glance image-create --name "cirros-0.3.2-x86_64" --disk-format qcow2 --container-format bare --is-public True --progress < cirros-0.3.2-x86_64-disk.img# glance image-list# rm –r /tmp/images# file cirros-0.3.2-x86_64-disk.img file type 확인

! tip. 추가이미지 등록 – ubuntu#source admin-openrc.sh#wget http://uec-images.ubuntu.com/trusty/current/trusty-server-cloudimg-amd64-disk1.img#glance image-create --name "ubuntu" --disk-format qcow2 \--container-format bare --is-public True --progress < trusty-server-cloudimg-amd64-disk1.img

Glance

Configure the compute Service - Nova

<노드별 설치되는 nova package>*controller node-nova-api-nova-cert-nova-conductor-nova-consoleauth-nova-novncproxy-nova-schduler-nova-client

*compute node-nova-compute-kvm-python-guestfs: 가상인스턴스를 생성할때 파일을 마들어주는

파이썬 라이브러리-qemu-kvm : 하이퍼바이저

<nova 아키텍쳐>

1. 데쉬보드나 커맨드 라인 명령어가 호출하는nova-api로부터 시작2. nova-api는 queue를 통해 nova-compute에게인스턴스를 생성하라는 명령을 전달3. 인스턴스 생성 명령을 받은 nova-compute는하이퍼바이저 라이브러리를 통해 하이퍼바이저에게인스턴스를 생성하라는 명령어를 다시 전달4. 하이퍼바이저가 인스턴스를 생성5. 생성된 인스턴스는 nova-console을 통해 사용자가 접근 가능

Nova

큰 그림, 동작 구조

keystoneNova-api

Nova-cert

Nova-consoleauth

Nova-compute

Nova-scheduler

Nova DB

Queue

Glance-api

swift

hypervisor

Neutron-agents

Cinder-api

Cinder-volumeCinder-scheduler

Glance-registry

Neutron-plugins

Neutron DB

Neutron-server

Cinder DB

horizon

Controller nodeCompute node

Network node

Block storage

12

34

5

6

7

8

9

10

11

12 13

1415

glance DB

Glance storage adapter

Nova

1. Horizon을 통해 request가 들어모녀 keystone에서 토큰 획득2. Nova-api에게 해당 토큰과 request가 저전달3. nova-api는 다시 keystone 해당 토큰이 진짜인지 재확인4. 진짜인지 확인되면 request를 받아들임5. Nova-api는 큐를 통해 스케줄러에게 명령을 전달6. Nova-scheduler는 스케줄링 정책에 의해 컴퓨팅 노드를 선택함7. Nova-compute는 요청을 받아 가상머신을 프로비져닝함8. 가상머신의 이미지를 만들기 위해 glance에게 이미지 요청9. Glance는 swift에 저장된 이미지를 다운

glance storage adapter는 이미지 저장 검색 삭제 확인등을수행하기 위해 글렌스와 스토리지간의 인터페이스 제공- glance DB에는 이미지 관련 정보를 저장한다- glance-registry는 이미지 관련 메타데이터를카탈로그처럼 저장하고 검색한다.

10. Nova-api는 인스턴스에게 네트워크를 할당하기위해neutron 에게 요청

11. Neutron에서는 agent와 plugin으로네트워크를 사용할수 있도록 연계

12. 같은내용neutron-server 에서 api를 제공하여 요청을neutron-plugin으로 전달하기도 함

13. 블록스토리지가 필요하다면 cinder-api를 통해 요청14. 요청을 받은 cinder-volume은 database에 그 상태를 읽고 들어온 요청을 처리

- database에는 어떤 볼륨이 어떤 인스턴스와 연결이 되어있는지와 cinder-scheduler의 정보가 상세히 기록- cinder-scheduler는 요청을 받은 블록 서비스를 스케쥴링하고 전달하는 역할. 볼륨 생성 요청이 왔을때 어떤 노드가 적당한지 선택해줌

Nova

<controller>※ controller에 compute 서비스 설정

# apt-get -y install nova-api nova-cert nova-conductor nova-consoleauth nova-novncproxy nova-scheduler python-novaclient

# vi /etc/nova/nova.conf---------------------------------------------------------------------------------[database]connection = mysql://nova:expernet@controller/nova

[DEFAULT]...rpc_backend = rabbit *메시지 브로커 설정rabbit_host = controllerrabbit_password = expernet

my_ip = 192.168.1.3 *MgMt ip 설정vncserver_listen = 192.168.1.3vncserver_proxyclient_address = 192.168.1.3glance_host = controller---------------------------------------------------------------------------------

# rm /var/lib/nova/nova.sqlite *sqlite db패키지 삭제

Nova

<controller>

# mysql -u root -pmysql> CREATE DATABASE nova;mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY ‘expernet’;mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY ‘expernet’;mysql> exit

# su -s /bin/sh -c "nova-manage db sync" nova 서비스 테이블 생성

※ 키스톤 인증 설정# keystone user-create --name=nova --pass=expernet [email protected]# keystone user-role-add --user=nova --tenant=service --role=admin

※ 키스톤 설정 추가# vi /etc/nova/nova.conf---------------[DEFAULT]auth_strategy = keystone

[keystone_authtoken]auth_uri = http://controller:5000auth_host = controllerauth_port = 35357auth_protocol = httpadmin_tenant_name = serviceadmin_user = novaadmin_password = expernet---------------------

Nova

<controller>

※ compute service 정의# keystone service-create --name=nova --type=compute --description="OpenStack Compute“# keystone endpoint-create --service-id=$(keystone service-list | awk '/ compute / {print $2}') \--publicurl=http://controller:8774/v2/%\(tenant_id\)s \--internalurl=http://controller:8774/v2/%\(tenant_id\)s \--adminurl=http://controller:8774/v2/%\(tenant_id\)s

# service nova-api restart# service nova-cert restart# service nova-consoleauth restart# service nova-scheduler restart# service nova-conductor restart# service nova-novncproxy restart# nova image-list

*nova-api 서비스가 제대로 시작되지 않고 죽음/var/log/nova/nova-api.log에서 oslo.rootwrap 어쩌고~ 오류 뱉어냄# pip install --upgrade oslo.rootwrap

서비스 restart 후, status로 상태 확인

Nova

* Controller (instance 요청) Compute에서 요청을 받아 처리•현재 kvm hypervisor 사용•현재 단일 compute노드 사용이 아니며 다른 compute node 확장이 쉽다.

<compute>

# apt-get -y install nova-compute-kvm python-guestfsWARNING nova.virt.libvirt.utils [...] admin admin] systool is not installed 에러 발생 시 # apt-get -y sysfsutils

※ 커널설정 (linux kernel은 hypervisor서비스를 제한하므로 해제가 필요함)#dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-$(uname -r)

※ kernel 모든 재설정 활성화를 위해 아래 파일 생성# touch /etc/kernel/postinst.d/statoverride# vi /etc/kernel/postinst.d/statoverride---------------------------------------------------------------------------------------------#!/bin/shversion="$1"# passing the kernel version is required[ -z "${version}" ] && exit 0dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version}---------------------------------------------------------------------------------------------

# 해당 파일을 실행가능하게 설정chmod +x /etc/kernel/postinst.d/statoverride

Nova

<compute>

# vi /etc/nova/nova.conf

[DEFAULT]...auth_strategy = keystone

rpc_backend = rabbit *메세지브로커rabbit_host = controllerrabbit_password = expernet

my_ip = 192.168.1.5 *remote console access 설정vnc_enabled = Truevncserver_listen = 0.0.0.0vncserver_proxyclient_address = 192.168.1.5novncproxy_base_url = http://192.168.1.53:6080/vnc_auto.html(위 10.0.0.11에 controller 로 작성 시 any 유저는 DNS 변환 처리 못하면 접근 안됨)glance_host = controller

[database]# The SQLAlchemy connection string used to connect to the databaseconnection = mysql://nova:expernet@controller/nova

[keystone_authtoken]auth_uri = http://controller:5000auth_host = controllerauth_port = 35357auth_protocol = httpadmin_tenant_name = serviceadmin_user = novaadmin_password = expernet

# egrep -c '(vmx|svm)' /proc/cpuinfo0 : CPU 가상화 지원 불가, KVM 대신 libvirt to QEMU 사용 필요1~ : CPU 가상화 지원 OK지원불가시,vi /etc/nova/nova-compute.conf----------------------------------[libvirt]...virt_type = qemu-----------------------------------# rm /var/lib/nova/nova.sqlite# service nova-compute restart# sysv-rc-conf nova-compute on

※최종확인

<controll node># source admin-openrc.sh# nova service-list (iptables -F 로 정책 삭제하지 않으면 서비스 활성화 보이지 않음, Status UP 되어야함)# nova image-list

Nova

Add a networking Service - Neutron

※ nova-network : 네트워크 서비스로 ip를 할당할 수 있는 개수가 제한Neutron : 다양한 SDN 스위치 플러그인을 연동하여 사용 가능.VLAN, 터널링 등 네트워킹 방식을 지원(기본적으로 ML2플러그인 사용)

Neutron

**** ML2 타입 드라이버 (Type Drivers)-VLAN (Virtual LAN) 하나의 물리 스위치에서 가상으로 나누어 랜을 구성

-- ◀ VLAN 모드의 컴퓨트 노드에 생성된 VM 구성

- GRE (Generic Route Encapsulation) : 인터넷 프로토콜 위에 가상 PTP(point to Point)를 제외한 다양한 네트워크 레이어 프로토콜 범위를 캡슐 화 할 수 있는 터널링 프로토콜: 오픈스택 neutron을 gre모드로 설치했을 경우 컴퓨트 노드에 생성된 VM은 다른 컴퓨트 노드와 통신을 할 경우 터널링 된 경로로 패킷을 주고받음

Neutron

**** ML2 타입 드라이버 (Type Drivers)-VxLAN (Virtual Extensible LAN) 물리네트워크에 연결된 다른 컴퓨트 노드의 VM끼리 통신할 경우 새로 올려 놓은 도화지 위에 가상의 터널을 그리고 그 터널을 통해서 통신을

- 메커니즘 드라이버 (Mechanism Drivers) 여러 컴퓨트 노드들이 다른 agent를 사용할 경우(예, Linuxbridge, openvswitch) 연동 할 수 없던 문제를 해결하고자 나온 드라이버

Neutron

<노드 별 설치되는 neutron package>

컨트롤러 노드- Neutron Server- Neutron Plugin Agent- 이더넷 네트워크 인터페이스 2개 필요 (관리용 네트워크, API 네트워크)컴퓨트 노드- Neutron Plugin Agent- L2 Layer Agent OpenvSwitch- 네트워크 노드와 컴퓨트 노드 간의 데이터 통신을 위한 데이터 네트워크 필요네트워크 노드- Neutron 플러그인 에이전트- L3 에이전트- DHCP 에이전트- OpenvSwitch- 이더넷 네트워크 인터페이스 3개 필요(관리용, 데이터, 외부)

< neutron 논리 아키텍쳐>

1. 사용자는 Neutron API를 이용하여 Neutron 서버로 IP를 할당을 요청합니다.2. Neutron 서버는 들어온 요청을 Queue로 다시 요청합니다.3. Queue는 Neutron 에이전트와 플러그인으로 IP 할당 지시를 내립니다.4. Neutron 에이전트와 플러그인은 지시 받은 작업을 데이터베이스에 저장합니다.5. Neutron 에이전트는 네트워크 프로바이더에게 작업을 지시합니다.6. 그리고, 수시로 작업상태를 데이터베이스에 업데이트합니다.7. 이제 할당된 IP를 인스턴스에서 사용할 수 있습니다.

* Neutron이 네트워킹 기능을 하는 것이 아니라 Neutron과 연결된다른 네트워크 프로바이더에 의해 네트워킹 된다는 사실

*Neutron이 지원하는 플러그인의 종류는 많지만거의 “ML2” (Modular Layer 2) Plug-in를 사용

Neutron

Ubuntu 14.04 Server ubuntuFixed IP Rangetenant : 192.168.100.0/24

Floating IP Range192.168.1.0/24

Public Gateway192.168.1.254

Floating Allocation IP RangeStart : 192.168.1.118End : 192.168.1.126

Internet

AP

NAT10.0.0.1

192.168.1.254

192.168.1.28

Tenant Private Net 192.168.100.0/24

Tenant Private Net 192.168.200.0/24

br-ex

br-int

192.168.1.127

192.168.1.119 qg~ 192.168.1.120 qg~

192.168.100.1 qg~ 192.168.200.1 qg~

VM VM VM VM VM VM

10.0.0.21

HOST IP 10.0.0.21

OPENSTACK

nova neutron keystone cinder

swift ML2 KVM glance

ovs

heat

Neutron# Neutron Architecture

<controller>

# mysql -u root -pmysql> CREATE DATABASE neutron;mysql> GRANT ALL PRIVILEGES ON neutron.* TO neutron'@'localhost‘ IDENTIFIED BY ‘expernet';mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY ‘expernet ';mysql> exit

※identity

#keystone user-create --name neutron --pass expernet --email [email protected]# keystone user-role-add --user neutron --tenant service --role admin# keystone service-create --name neutron --type network \--description "OpenStack Networking“

# keystone endpoint-create --service-id $(keystone service-list | awk '/ network / {print $2}') --publicurl http://controller:9696 --adminurlhttp://controller:9696 --internalurl http://controller:9696

# apt-get -y install neutron-server neutron-plugin-ml2

※ nova-network : 네트워크 서비스로 ip를 할당할 수 있는 개수가 제한Neutron : 다양한 SDN 스위치 플러그인을 연동하여 사용 가능.VLAN, 터널링 등 네트워킹 방식을 지원(기본적으로 ML2플러그인 사용)

# vi /etc/neutron/neutron.conf----------------[database]...connection = mysql://neutron:expernet @controller/neutron

[DEFAULT]...auth_strategy = keystone…rpc_backend = neutron.openstack.common.rpc.impl_komburabbit_host = controllerrabbit_password = expernet

notify_nova_on_port_status_changes = Truenotify_nova_on_port_data_changes = Truenova_url = http://controller:8774/v2nova_admin_username = novanova_admin_tenant_id = 09cfe23d95184b97b49953d735ce163f keystone의 service tenant의 ID (# keystone tenant-get service)

nova_admin_password = krdagnova_admin_auth_url = http://controller:35357/v2.0

core_plugin = ml2service_plugins = routerallow_overlapping_ips = Trueverbose = True

[keystone_authtoken]...auth_uri = http://controller:5000auth_host = controllerauth_protocol = httpauth_port = 35357admin_tenant_name = serviceadmin_user = neutronadmin_password = expernet

-------------------

Neutron

<controller>

※ ML2 plug-in 설정

# vi /etc/neutron/plugins/ml2/ml2_conf.ini----------------------------------------------------------------------[ml2]...type_drivers = gretenant_network_types = gremechanism_drivers = openvswitch

[ml2_type_gre]...tunnel_id_ranges = 1:1000

[securitygroup]...firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriverenable_security_group = True----------------------------------------------------------------------

*ml2 플러그인은 instance 네트워킹을 위해야 open vSwitchmechanism을 사용함.* Controller는 instance 네트워크 트래픽을 처리하지 않기 때문에 OVS agent와 service가 필요없음.

※ nova가 legacy networking 사용하므로 neutron으로 설정

# vi /etc/nova/nova.conf----------------------------------------------------------------------DEFAULT]...network_api_class = nova.network.neutronv2.api.APIneutron_url = http://controller:9696neutron_auth_strategy = keystoneneutron_admin_tenant_name = serviceneutron_admin_username = neutronneutron_admin_password = expernetneutron_admin_auth_url = http://controller:35357/v2.0linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriverfirewall_driver = nova.virt.firewall.NoopFirewallDriversecurity_group_api = neutron----------------------------------------------------------------------

# service nova-api restart# service nova-scheduler restart# service nova-conductor restart# service neutron-server restart

Neutron

<network>

※ Instance(VM)의 mac 허용을 위한 설정(RPF filter 기능 disble)※ IP 패킷 라우팅(L3 허용)

# vi /etc/sysctl.conf----------------------------------------------------------------------net.ipv4.ip_forward=1net.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0----------------------------------------------------------------------# sysctl –p *적용

# apt-get -y install neutron-plugin-ml2 neutron-plugin-openvswitch-agent neutron-l3-agent neutron-dhcp-agent* Kernel 3.11 이상은 openvswitch-datapath-dkms 필요 없음

# vi /etc/neutron/neutron.conf-------------------------[DEFAULT]...auth_strategy = keystone * keystone 인증설정

rpc_backend = neutron.openstack.common.rpc.impl_komburabbit_host = controllerrabbit_password = expernet * 메시지 브로커 설정

core_plugin = ml2 * ml2 플러그인 설정service_plugins = routerallow_overlapping_ips = Trueverbose = True

[keystone_authtoken] * keystone 인증설정...auth_uri = http://controller:5000auth_host = controllerauth_protocol = httpauth_port = 35357admin_tenant_name = serviceadmin_user = neutronadmin_password = expernet

Neutron

<network>

※ L3 Agent 설정-Layer-3 agent 는 VM(Instance)를 위해 Routing 기능 제공

# vi /etc/neutron/l3_agent.ini----------------------------------------------------------------------[DEFAULT]…interface_driver = neutron.agent.linux.interface.OVSInterfaceDriveruse_namespaces = Trueverbose = True----------------------------------------------------------------------

※ DHCP Agent 설정-DHCP agent 는 VM을 위해 DHCP 서비스를 제공

# vi /etc/neutron/dhcp_agent.ini----------------------------------------------------------------------[DEFAULT]…interface_driver = neutron.agent.linux.interface.OVSInterfaceDriverdhcp_driver = neutron.agent.linux.dhcp.Dnsmasquse_namespaces = Trueverbose = True----------------------------------------------------------------------

※ metadata Agent 설정- metadata agent 는 remote 에서 VM(Instance)에 접근 시 인증 정보를 제공, metadata_proxy_shared_secret 경우는 Controller Node와 Network Node 에 Shared 암호 설정

# vi /etc/neutron/metadata_agent.ini----------------------------------------------------------------------[DEFAULT]…auth_url = http://controller:5000/v2.0auth_region = regionOneadmin_tenant_name = serviceadmin_user = neutronadmin_password = expernetnova_metadata_ip = controllermetadata_proxy_shared_secret = expernet----------------------------------------------------------------------

※ Controller Node에 Nova metadata 설정# vi /etc/nova/nova.conf----------------------------------------------------------------------[DEFAULT]...service_neutron_metadata_proxy = trueneutron_metadata_proxy_shared_secret = expernet----------------------------------------------------------------------

# service nova-api restart

Neutron

<network>

※ ML2 plug-in 은 VM(Instance) networking 을 위하여 Open vSwitch(OVS) mechanism(agent)를 사용합니다.[ovs]에 local_ip 는 Network node 와 Compute node 간 VM 통신을 위한 NIC IP(10.0.1.21)

# vi /etc/neutron/plugins/ml2/ml2_conf.ini------------------------------------------------------------------------------------------[ml2]...type_drivers = gretenant_network_types = gremechanism_drivers = openvswitch

[ml2_type_gre]...tunnel_id_ranges = 1:1000

[ovs]local_ip = 10.0.1.21tunnel_type = greenable_tunneling = True

[securitygroup]...firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriverenable_security_group = True------------------------------------------------------------------------------------------

Neutron

<network>

※ OVS(Open vSwitch Service)는 VM(Instance)를 위한 가상 네트워크 framework 제공함- br-int 인터페이스 - 내부 Instance 트래픽 처리- br-ext 인터페이스 - 외부 Instance 트래픽 처리, br-ex 는 외부 접근을 할 수 있는 포트가 필요

# service openvswitch-switch restart * OVS service 재시작

# ovs-vsctl add-br br-int * int bridge 추가

# ovs-vsctl add-br br-ex * ext bridge 추가

# ovs-vsctl add-port br-ex eth2*외부 NIC(eth2)와 port bridge 설정

# ethtool -K eth1 gro off * 내부/외부 NIC 비활성화 Generic Receive Offload (GRO)# ethtool -K eth2 gro off

# service neutron-plugin-openvswitch-agent restart # service neutron-l3-agent restart# service neutron-dhcp-agent restart# service neutron-metadata-agent restart

※ neutron-plugin-openvswitch-agent 서비스가 제대로 시작되지 않고 죽음 /var/log/neutron에서 관련 로그 확인 : oslo.rootwrap 에서 오류 뱉어냄…..

# pip install --upgrade oslo.rootwrap서비스 restart 후, status로 상태 확인

Neutron

<compute>

※ Instance(VM)의 mac 허용을 위한 설정(RPF filter 기능 disble) # vi /etc/sysctl.conf----------------------------------------------------------------------net.ipv4.conf.all.rp_filter=0net.ipv4.conf.default.rp_filter=0----------------------------------------------------------------------# sysctl –p 적용

# apt-get -y install neutron-common neutron-plugin-ml2 neutron-plugin-openvswitch-agent

# vi /etc/neutron/neutron.conf----------------------------------------------------------------------[DEFAULT]...auth_strategy = keystone * keystone 인증

[keystone_authtoken] * keystone 인증auth_uri = http://controller:5000auth_host = controllerauth_protocol = httpauth_port = 35357admin_tenant_name = serviceadmin_user = neutronadmin_password = expernet

rpc_backend = neutron.openstack.common.rpc.impl_komburabbit_host = controllerrabbit_password = expernet * 메세지브로커

core_plugin = ml2 * ml2플러그인service_plugins = routerallow_overlapping_ips = Trueverbose = True----------------------------------------------------------------------

※ ML2 plug-in 은 VM(Instance) networking 을 위하여 Open vSwitch(OVS) mechanism(agent)를 사용- [ovs]에 local_ip 는 Network node 와 Compute node 간 VM 통신을 위한NIC IP(10.0.1.31)

# vi /etc/neutron/plugins/ml2/ml2_conf.ini------------------------------------------------------------------------------[ml2]...type_drivers = gretenant_network_types = gremechanism_drivers = openvswitch

[ml2_type_gre]tunnel_id_ranges = 1:1000

[ovs]local_ip = 10.0.1.31tunnel_type = greenable_tunneling = True

[securitygroup]firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriverenable_security_group = True------------------------------------------------------------------------------

Neutron

<compute>

※ br-int 인터페이스 : 내부 Instance 트래픽 처리

# service openvswitch-switch restart# ovs-vsctl add-br br-int

※ 기본 nova 가 legacy networking 사용하므로, Neutron 으로 설정 필요# /etc/nova/nova.conf--------------------------------------------------------------------------------------------------------------------------------------------------[DEFAULT]...network_api_class = nova.network.neutronv2.api.APIneutron_url = http://controller:9696neutron_auth_strategy = keystoneneutron_admin_tenant_name = serviceneutron_admin_username = neutronneutron_admin_password = expernetneutron_admin_auth_url = http://controller:35357/v2.0linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriverfirewall_driver = nova.virt.firewall.NoopFirewallDriversecurity_group_api = neutron--------------------------------------------------------------------------------------------------------------------------------------------------

# service nova-compute restart# service neutron-plugin-openvswitch-agent restart

※ neutron-plugin-openvswitch-agent 서비스가 제대로 시작되지 않고 죽음/var/log/neutron에서 관련 로그 확인 oslo.rootwrap 에서 오류 뱉어냄…..

# pip install --upgrade oslo.rootwrap서비스 restart 후, status로 상태 확인

Neutron

# 첫 VM(Instance)가 생성 전에 Networking Infra 를 설정이 필요

※ 미리 Iptables 정책 삭제 할 것(Controller/Network/Compute1 Node 전부)# iptables –F

※ external network 은 외부와 연결됨. VM(Instance)는 NAT를 통해서 외부 연결됨.Floating IP와 Security group rules 를 통해서 각각 VM을 연결 할 수 있음.admin tenant 가 이 외부 연결 네트워크를 소유하며 multiple tenants 이 사용 가능하게 공유해야 함. 접근&시큐리티 메뉴 > 시큐리티그룹 > 해당 룰 선택 > ALL TCP / ALL ICMP / ALL SSH 추가 접근&시큐리티 메뉴 > 유동 IP > 프로젝트에 IP 할당 인스턴스에 유동 IP 연결

<controller>※ 네트워크 생성 및 서브넷 생성# source admin-openrc.sh# neutron net-create ext-net --shared --router:external=True# neutron subnet-create ext-net --name ext-subnet \

--allocation-pool start=192.168.1.118,end=192.168.1.126 --disable-dhcp --gateway 192.168.1.254 192.168.1.0/24※ dns-nameservers 업데이트 : # neutron subnet-update ext-net –dns_nameservers 168.126.63.1 8.8.8.8※ external 은 기본적으로 dhcp disable 되어야 하며, 현재 VMnet0 환경인 192.168.1.0/24 중 dhcp ip range는 118~126, Gw는 .1 지정함

VMnet0은 자신의 VMwareWorkstation 의 실제 LAN의 subnet 임(Bridge 이므로)

※ FLOATING_IP_START & FLOATING_IP_END : 외부 network 의 IP 사용 범위Replace EXTERNAL_NETWORK_CIDR : 외부 network subnetReplace EXTERNAL_NETWORK_GATEWAY : 외부 network gateway IP 주소

Fixed IP Range VM 생성시 할당해 주는 사설IP주소 범위, 내부 통신만 가능

Floating IP Range VM을 외부에서 접속 할 수 있도록 할당해주는 공인 IP주소 범위

qbr 가상라우터

qvb 가상브릿지

qvo 가상네트워크

vnet 가상인스턴스

Neutron

※ tenant network 은 내부 VM(Instance)의 network 임, tenant 별 network 는 분리됨

<controller>

※ tenant(internal) network 생성# source demo-openrc.sh

# neutron net-create demo-net : 네트워크생성# neutron subnet-create demo-net --name demo-subnet --gateway 192.168.100.1 192.168.100.0/24 : 서브넷생성

※ tenant network 192.168.100.0/24, Gw는 .1 지정함

# neutron router-create demo-router : 라우터생성# neutron router-interface-add demo-router demo-subnet : 라우터에 demo tenant 연결# neutron router-gateway-set demo-router ext-net : 라우터에 external network 에 gateway 설정

Neutron

※확인 controller node에서 해당 port가 열려있는지 확인# neutron port-list# neutron port-show PORTID : Status가 활성화 되어있어야함

Hypervisor(ESXi 등)에서 VM이 구동 시 vSwitch에 permit promiscuous mode 허용 해야함위에서 할당 한 Floating IP주소 중 첫번째 IP인 192.168.1.118로 ping 됨 OK

!! 외부라우터 port의 status가 DOWN !!: I booted an Ubuntu Havana system with OVS 1.10.2 and found one problem in this area here. I have no idea what the purpose of these lines is:https://github.com/openstack/neutron/blob/60cb0911712ad11688b4d09e5c01ac39c49f5aea/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py#L666-L671but on this system `sudo ovs-vsctl br-get-external-id br-ex` returns nothing, and so br-ex is excluded from the list of ancillary bridges and so the gateway port always shows as DOWN.A workaround is to set the bridge-id to br-ex and restart the L2 agent:

$ sudo ovs-vsctl br-set-external-id br-ex bridge-id br-ex$ sudo service neutron-plugin-openvswitch-agent restart

Neutron

Add the Dashboard - Horizon

<compute># apt-get -y install apache2 memcached libapache2-mod-wsgi openstack-dashboard

# apt-get remove --purge openstack-dashboard-ubuntu-theme *네트워크 map 변환을 위한 삭제

※/etc/memcached.conf 파일과 /etc/openstack-dashboard/local_settings.py 의 CACHES의 Location/Port를 서로 동일하게 설정 별도 수정 할 내용 없음. 하지만, CACHES 하단부에 Tap 으로 띄어진 곳 잘 확인할것 (Python 형식 이므로)

# vi /etc/openstack-dashboard/local_settings.py

-----------------------------------------------------------------------------------------------------------------------------------------------------------CACHES = {

'default': {

'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache',

'LOCATION' : '127.0.0.1:11211'

}

}

OPENSTACK_HOST = "controller"

-----------------------------------------------------------------------------------------------------------------------------------------------------------

# service apache2 restart

#service memcached restart

※ http://controller/horizon 접근

※ 설치 시 중간에 에러 발생 및 대처•Starting web server apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.0.0.11. • Set the 'ServerName' directive globally to suppress this message#vi /etc/apache2/apache2.conf-------------------------------------------------------------------------ServerName controller-------------------------------------------------------------------------

#service apache2 restart

Horizon

Add the Block Storage Service - cinder

<cindenr 논리 아키텍쳐>: Nova에서 생성된 인스턴스에 확장하여 사용할 수 있는 저장 공간을

생성 및 삭제하고 인스턴스에 연결할 수 있는 기능을 제공- Cinder API를 통해 볼륨을 추가 및 삭제- 신더 볼륨은 볼륨을 실제로 생성하고 데이터베이스에 볼륨정보를 업데이트.- Cinder는 물리 하드 디스크를 LVM(Logical Volume Manager)으로 설정- 설정한 LVM은 cinder.conf와 nova.conf의 환경설정을 통하여 신더 볼륨을 할당- 신더 API를 통해 생성된 볼륨은 단일 인스턴스 또는 여러 인스턴스에 할당

<cinder가 제공하는 block starage드라이버>

<LVM>: LVM은 Logical Volume Manager의 약자로하드 디스크를 파티션 대신 논리 볼륨으로 할당하고,다시 여러 개의 디스크를 좀 더 효율적이고 유연하게관리할 수 있는 방식

Cinder

- 블록스토리지가 필요하다면 cinder-api를 통해 요청- 요청을 받은 cinder-volume은 database에 그 상태를 읽고

들어온 요청을 처리- database에는 어떤 볼륨이 어떤 인스턴스와 연결이 되어있는지와

cinder-scheduler의 정보가 상세히 기록- cinder-scheduler는 요청을 받은 블록 서비스를

스케쥴링하고 전달하는 역할. 볼륨 생성 요청이 왔을때 어떤 노드가 적당한지 선택해줌

※ swift와 cinder의 차이!

Cinder

<controller># apt-get -y install python-dev# pip install –-upgrade oslo.messaging# pip install –-upgrade oslo.rootwrap# apt-get -y install cinder-api cinder-scheduler

# vi /etc/cinder/cinder.conf

-----------------------------------------------------------------------------------------------------------------------------------[database]

connection = mysql://cinder:expernet@controller/cinder

-----------------------------------------------------------------------------------------------------------------------------------# mysql -u root -p

mysql> CREATE DATABASE cinder;

mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'krdag';

mysql> GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'krdag';

mysql> exit

# su -s /bin/sh -c "cinder-manage db sync" cinder 오류(로그 확인, olso.message관련)인 경우, pip install –upgrade oslo.messaging# keystone user-create --name=cinder --pass=expernet [email protected]

# keystone user-role-add --user=cinder --tenant=service --role=admin

# vi /etc/cinder/cinder.conf

-----------------------------------------------------------------------------------------------------------------------------------[DEFAULT]

rpc_backend = cinder.openstack.common.rpc.impl_kombu

rabbit_host = controller

rabbit_port = 5672

rabbit_userid = guest

rabbit_password = expernet

[keystone_authtoken]

auth_uri = http://controller:5000

auth_host = controller

auth_port = 35357

auth_protocol = http

admin_tenant_name = service

admin_user = cinder

admin_password = expernet

-----------------------------------------------------------------------------------------------------------------------------------

Cinder

<controller>

※ Block Service 서비스 정의/Endpoint 정의# keystone service-create --name=cinder --type=volume --description="OpenStack Block Storage"

# keystone endpoint-create --service-id=$(keystone service-list | awk '/ volume / {print $2}') \--publicurl=http://controller:8776/v1/%\(tenant_id\)s \--internalurl=http://controller:8776/v1/%\(tenant_id\)s \--adminurl=http://controller:8776/v1/%\(tenant_id\)s

※ Block Service Version 2 서비스 정의/Endpoint 정의# keystone service-create --name=cinderv2 --type=volumev2 --description="OpenStack Block Storage v2"

# keystone endpoint-create \--service-id=$(keystone service-list | awk '/ volumev2 / {print $2}') --publicurl=http://controller:8776/v2/%\(tenant_id\)s \--internalurl=http://controller:8776/v2/%\(tenant_id\)s \--adminurl=http://controller:8776/v2/%\(tenant_id\)s

# service cinder-scheduler restart# service cinder-api restart

Cinder

<block1>

* Chapter 2 에 기본 환경 설정 및 block1 - 10.0.0.41 추가* NTP 설정, LVM 설치•Cinder 연결된 외장 스토리지(iSCSI Target)와 Nova Compute의 VM(iSCSI initiator) 간 iSCSI로 연결

# apt-get -y install lvm2

# fdisk -l *현재 disk정보 확인# pvcreate /dev/sdb * LVM의 Disk 전체를 1개의 Physical Volumes(PV) 생성# pvcreate /dev/sdc# pvdisplay

# vgcreate cinder-volumes /dev/sdb * Volume Group(VG) 생성# pvscan

# apt-get –y install python-dev# pip install --upgrade oslo.messaging# pip install --upgrade oslo.rootwrap

# apt-get -y install cinder-volume python-mysqldb# apt-get -y install qemu-utils * Ubuntu 이미지 Block Storage에 올리기 위해 필요한 패키지 설치

ESXi에서 기본으로 잡은 하드디스크에 lvm으로 pv를 생성할 수 없었음.아래의 방법으로 대신 함.- Block1 VM에 새 하드디스크를 추가 (40G)# fdisk –l : 새로 붙인 디스크 확인# fdisk /dev/sdb > n > p > 1 > (enter) > (enter) > p > w : 파티션 작업# mkfs.ext4 /dev/sdb1 : 포맷# ls –l /dev/disk/by-uuid/ : uuid 확인# mount –a : mount# df –h : 확인

※ 추가 내용은 뒤~~~~ 에…

Cinder

<block1>

※ 부팅 볼륨을 만들 수 있는 이미지 서비스를 위해 Block 설정 (glance_host)

# vi /etc/cinder/cinder.conf

[DEFAULT]rpc_backend = cinder.openstack.common.rpc.impl_komburabbit_host = controllerrabbit_port = 5672rabbit_userid = guestrabbit_password = expernetglance_host = controller

[database]connection = mysql://cinder:expernet@controller/cinder

[keystone_authtoken]auth_uri = http://controller:5000auth_host = controllerauth_port = 35357auth_protocol = httpadmin_tenant_name = serviceadmin_user = cinderadmin_password = expernet

# service cinder-volume restart# service tgt restart : tgt = iSCSI Target 서비스

Cinder

※ 새 볼륨 생성 테스트

<controller># source demo-openrc.sh# cinder create --display-name myVolume 1# cinder list

※ 대쉬보드에서도 확인 가능생성된 볼륨에 glance(Ubuntu)로 VM 생성대쉬보드에서 연결 or VM 생성 시 VM 생성하면서 연결 가능

Cinder

Add the Orchestration Service - heat

Private나 public이나 클라우드 환경에서 가상머신 하나를 프로비져닝 하기 위해선 여러단계를 거친다.- Heat, 이런 과정을 자동화하여 몇번의 클릭으로 쉽게 인프라를 배포할 수 있도록 도와주는 프로젝트. 마치 오케스트라를 지휘하듯, 템플릿이라고 불리는 틀을 미리 만들어 놓고 이를 기반으로 자원을 배치, 관리, 조합하는 자동화된 과정

“서비스 오토메이션” : IaaS 개념의 인프라도 물론이지만, 배포 이후 특정 서비스 혹은 어플리케이션 작업도 자동화의 일환으로 지정가능

“오토스케일링” : 세일로미터와 연계하여 특정 사용량을 넘어가면인스턴스를 하나 더 자동으로 배포해! 등의 오토스케일링 기능 가능

<구성요소>- Heat CLI Tool

: heat툴은 AWS Cloud Formation API와 Heat API가 서로 커뮤니케이션 가능한 CLI임- Heat-api

: rest api를 제공. 요청을 heat엔진으로 보냄- Heat-api-cfn

: AWSCloudFormation과 호환되는 AWS타입의 Query API를 제공. : Native heat template와 함께 AWS CloudFormation template과도 호환

- Heat-engine: 템플릿을 만들고, 코어 오픈스택 서비스와 서로 커뮤니케이션하여오케스트레이션 핵심작업을 진행하는 엔진

Heat

<controller>

# apt-get -y install heat-api heat-api-cfn heat-engine# vi /etc/heat/heat.conf-------------------------------------------------------------------------------------------------------------------------------[database]connection = mysql://heat:expernet@controller/heat-------------------------------------------------------------------------------------------------------------------------------

# rm /var/lib/heat/heat.sqlite

# mysql -u root -pmysql> CREATE DATABASE heat;mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' IDENTIFIED BY ‘expernet’;mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY ‘expernet’;mysql> exit

# su -s /bin/sh -c "heat-manage db_sync" heat : 서비스table생성. 단, Ignore DeprecationWarning errors 무시해도 됨

# vi /etc/heat/heat.conf-------------------------------------------------------------------------------------------------------------------------------log_dir=/var/log/heatrabbit_host = controllerrabbit_password = expernet-------------------------------------------------------------------------------------------------------------------------------

※ HEAT 유저 인증 및 service tenant 와 heat 유저에 admin role 할당# keystone user-create --name=heat --pass=expernet [email protected]# keystone user-role-add --user=heat --tenant=service --role=admin

Heat

<controller>

※ 인증 설정 내용 추가# vi /etc/heat/heat.conf-------------------------------------------------------------------------------------------------------------------------------------[keystone_authtoken]auth_host = controllerauth_port = 35357auth_protocol = httpauth_uri = http://controller:5000/v2.0admin_tenant_name = serviceadmin_user = heatadmin_password = krdag

[ec2authtoken]auth_uri = http://controller:5000/v2.0-------------------------------------------------------------------------------------------------------------------------------------

※ Heat 와 CloudFormation APIs 를 Identity service 에 등록 및 Endpoint 등록# keystone service-create --name=heat --type=orchestration --description="Orchestration"# keystone endpoint-create --service-id=$(keystone service-list | awk '/ orchestration / {print $2}') \--publicurl=http://controller:8004/v1/%\(tenant_id\)s \--internalurl=http://controller:8004/v1/%\(tenant_id\)s \--adminurl=http://controller:8004/v1/%\(tenant_id\)s

# keystone service-create --name=heat-cfn --type=cloudformation --description="Orchestration CloudFormation"# keystone endpoint-create \--service-id=$(keystone service-list | awk '/ cloudformation / {print $2}') \--publicurl=http://controller:8000/v1 \--internalurl=http://controller:8000/v1 \--adminurl=http://controller:8000/v1

Heat

<controller>

※ heat_stack_user 에 대한 role 를 생성함# keystone role-create --name heat_stack_user

※ The metadata and waitcondition servers' URLs 설정# vi /etc/heat/heat.conf----------------------------------------------------------------------------------------------------------------------------------------------[DEFAULT]heat_metadata_server_url = http://192.168.1.3:8000heat_waitcondition_server_url = http://192.168.1.3:8000/v1/waitcondition----------------------------------------------------------------------------------------------------------------------------------------------

# service heat-api restart# service heat-api-cfn restart# service heat-engine restart

Heat

<controller>

※ heat은 HOT Template language를 통해 cloud resources를 생성-One-file template system에 다른 구성 요소를 통합-Template를 통하여 OpenStack resource types, such as instances, floating IPs, volumes, security groups, users 를 생성 가능함- 추가로 고급 기능인 instance high availability, instance auto-scaling, and nested stacks 기능을 제공

# source demo-openrc.sh# vi test-stack.yml : templete 파일 생성(yml형식이므로 들여쓰기 잘하기!)

heat_template_version: 2013-05-23description: Test Templateparameters:

ImageID:type: stringdescription: Image use to boot a server

NetID:type: stringdescription: Network ID for the server

resources:server1:

type: OS::Nova::Serverproperties:

name: "Test server"image: { get_param: ImageID }flavor: "m1.tiny"networks:- network: { get_param: NetID }

outputs:server1_private_ip:

description: IP address of the server in the private networkvalue: { get_attr: [ server1, first_address ] }

※ 템플릿 파일로 부터Stack(지정 자원-컴퓨터/네트워크 등-의 집합)를 생성

# NET_ID=$(nova net-list | awk '/ demo-net / { print $2 }')# heat stack-create -f test-stack.yml \-P "ImageID=cirros-0.3.2-x86_64;NetID=$NET_ID" testStack

# heat stack-list : CLI 확인

※ 데쉬보드 확인: 프로젝트 > Ochestration > stack

Heat

미터링 : 사용자들이 쓴 컴퓨터 파워, 스토리지. 네트워크 등의 사용량 데이터를 모으는 과정해당 데이터를 가지고 Rating-billing 과정을 거침.

Ceilometer-agent-compute : 그림에서 노바 에이전트에 해당되며, 컴퓨트 노드위에서 수행되고 리소스 사용량 데이터를 수집한다.

Ceilometer-agent-central: central management server에서 수행되며, 컴퓨트 노드외에 다른 리소스 사용량 데이터를 수집한다. 그림에서는 glance, cinder, neutron으로부터 데이터가 수집되는 걸로 표시되어있다.

Ceilometer-conllector: central management servers 에서 수행되며 메시지 큐로 들어오는 미터링 데이터들을모니터하는 역할이다.

Ceilometer-alarm-notifier: central management server 에서 수행되고 수집되는 샘플 데이터에 대해 정해놓은임계치를 기준으로 한 알람 기능을 제공

Database: API서버로부터 들어오는 읽기요청과 collerctor로부터 들어오는 쓰기요청을 동시에 처리하는 데이터 저장소

Ceilometer-api: central management servers에서 수행되며, 데이터베이스에 접근 가능하다. Collerctor와 API server두개만이 데이터에 접근이 가능

Ceilometer

- 안전하고, 쉬운 구축, 확장이 용이한, 다이나믹 스토리지 서비스 제공- 저장하려는 파일 수에 제한 없음, 개별 파일의 최대 크기는 5GB (대용량가능)- Rest API를 사용해 파일을 저장하고 끌어오므로, 개발자에게 다른 어플리케이션과의 쉬운 intergration을 유도

Account, container, object

Object : 그냥 파일오브젝트를 저장한다 파일 컨테이너라 불리는 폴더에 특정 사

용자 계정과 속성을 포함해서 업로드(즉, 하나의 오브젝트는 accont, container, object ID로 구별!)

swift 아키텍쳐

Proxy server : 들어오는 요청을 받아들이는 관문(요청 파일 업로드/다운로드, 메타데이터 수정,

컨테이너가 생성되는 등의 요청을 의미)

요청이 들어오면 정확한 처리를 위해 accont/container/object를 찾아야함.(Ring 사용, 성능향상을 위해 memcache사용 가능)

- Accont 서버 : 오브젝트 스토리지 서비스와 함께 사용될 계정 관리- Container서버 : 컨테이너와 저장된 오브젝트와의 매핑(조합)관리- Object 서버 : 스토리지 노드에 저장된 실제 오브젝트(파일)을 관리

각각의 서버들은 서로 유기적으로 얽힘, 제정된 데이터를 잘 관리하기 위해 여러가지 프로세스를 돌림 replication(복제)프로세스

Replication프로세스 : 데이터 일관성과 고 가용성을 제공하기 위한복제 프로세스

Swift

※ ESXi 클립보드 호환 (해당 vm)1. VMware Tools가 설치2. 가상머신>설정편집>옵션>일반>구성매개변수>추가>isolation.tools.copy.disable falseisolation.tools.paste.disable false

※ ESXi 클립보드 호환 (전체)1. SSH를 이용해서 ESXi 호스트에 root 유저로 로그인합니다.2. /etc/vmware/config 파일을 백업합니다. (cp /etc/vmware/config /etc/vmware/config.bak)3. /etc/vmware/config 파일을 엽니다 (vi /etc/vmware/config)4. config 파일에 다음 내용을 추가합니다.vmx.fullpath = "/bin/vmx"isolation.tools.copy.disable="FALSE"isolation.tools.paste.disable="FALSE"5. 파일을 저장합니다.6. 리부팅

ETC

※ ubuntu 14.04 파티션 GUI 툴# apt-get –y install gparted# gparted

# fdisk -l# fdisk /dev/sdb > n > P > 1 > (enter) > (enter) > P > w# mkfs.ext4 /dev/sdb1 : 포맷# ls –l /dev/disk/by-uuid : uuid 확인# mount –a# df –h : 확인 여기까지 작업 후 gparted로 확인 후 cinder 설치

※ 추가… 참고!# mkdir /srv/repository : mout등록# vi /etc/fstab----------------------------------------------------------------------------------------------------------------------------------UUID=(위에서 확인한 uuid) /srv/repository ext4 errors=remount-ro 0 1----------------------------------------------------------------------------------------------------------------------------------# mount –a # chmod로 권한 설정~ # df –h : 잘 올라왔는지 확인~

ETC

service mysql restartservice rabbitmq-server restartservice glance-registry restartservice glance-api restartservice keystone restartservice nova-api restartservice nova-cert restartservice nova-consoleauth restartservice nova-scheduler restartservice nova-conductor restartservice nova-novncproxy restartservice neutron-server restartservice apache2 restartservice memcached restart

(crontab -l -u keystone 2>&1 | grep -q token_flush) || echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/crontabs/keystone

service openvswitch-switch restartservice neutron-plugin-openvswitch-agent restartservice neutron-l3-agent restartservice neutron-dhcp-agent restartservice neutron-metadata-agent restart

service nova-compute restartservice openvswitch-switch restartservice neutron-plugin-openvswitch-agent restart

.sh

이상입니다.