정보공간_1

[4기 강북 김민호] Cloud Computing 환경 구성하기 (2) 본문

IT 놀이터/Elite Member Tech & Talk

[4기 강북 김민호] Cloud Computing 환경 구성하기 (2)

알 수 없는 사용자 2013. 11. 19. 22:45

안녕하세요. 강북멤버십 20-2기 김민호입니다.

지난 포스팅에 이어 2번째 포스팅입니다. 이번 포스팅에서는 OpenStack을 이용한 Cloud Computing Infra를 구성하기 위한 방법에 관해 알아보도록 하겠습니다. 

OpenStack은 Grizzly 버전을 기준으로 하겠습니다. OpenStack을 구성하기 위하여 필요한 환경은 다음과 같습니다. 3개의 데스크탑의 Ubuntu를 기준으로 설명하도록 하겠습니다. 물론 1개의 데스크탑에서도 구성이 가능하지만 본 포스팅에서는 멀티 노드 기반의 Cloud Infra를 구축하는 방법을 설명하겠습니다. 


구성하고자 하는 Physical Network 구성은 위의 그림과 같습니다. 위의 네트워크 모델을 기반으로 한 Cloud Infra를 구성하도록 하겠습니다. 각 노드의 요구 조건은 아래와 같습니다.

 

Controller Node

Network Node 

Compute Node 

 hostname

controller 

network 

compute01 

 Service

 MySQL, RabbitMQ, Nova, Cinder, Glance, Keystone, Neutron

Neutron-L3-agent, Neutron-DHCP-agent, Neutron Agent with OpenvSwitch

nova-compute, KVM, nova-api, Neutron Agent with OpenvSwitch 

 External Network

10.0.0.10/24 

10.0.0.9/24 

 

 Internal Network

10.10.10.10/24 

10.10.10.9/24 

10.10.10.11/24 

 Total number of NIC

2

위에 나와 있는 표를 기준으로 구성을 해보도록 하겠습니다. 이번 포스팅에서는 Controller Node에 관한 설치 방법에 대해서 설명하도록 하겠습니다.


* 설치 전 준비 사항

  - OpenStack을 설치 하기 위한 저장소 정보를 추가합니다.

  # sudo apt-get install ubuntu-cloud-keyring

 - /etc/apt/sources.list.d/cloud-archive.list에 다음 내용을 추가합니다.

 deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/grizzly main

 - 다음으로 저장소를 업데이트와 업그레이드를 실시 합니다.

 # sudo apt-get update && apt-get upgrade

 - OpenStack Grizzly 버전의 저장소를 추가 합니다. 위치는 /etc/apt/sources.list.d/grizzly.list 입니다.

deb http://archive.gplhost.com/debian grizzly main

deb http://archive.gplhost.com/debian grizzly-backports main

  - 마찬가지로 저장소를 업데이트 합니다.

  # apt-get update

  # apt-get install gplhost-archive-keyring

  # apt-get upgrade

  - /etc/network/interfaces에서 네트워크 인터페이스 카드 설정을 합니다. 

# Internal Network

auto eth0

iface eth0 inet static

    address 10.10.10.10

    netmask 255.255.255.0


# External Network

auto eth1

iface eth1 inet static

    address 10.0.0.10

    netmask 255.255.255.0

    gateway 10.0.0.1

    dns-nameservers 8.8.8.8

  - /etc/sysctl.conf를 수정합니다.

net.ipv4.conf.all.rp_filter = 0

net.ipv4.conf.default.rp_filter = 0

  - 네트워크를 재시작합니다.

  - 변경한 sysctl설정을 적용합니다.

  # sysctl -e -p /etc/sysctl.conf

  - /etc/hosts에 다른 노드들의 아이피 정보를 등록합니다.

127.0.0.1       localhost

10.10.10.10     controller

10.10.10.9      network

10.10.10.11     compute01

  - ntp를 설치합니다.

  # sudo apt-get install ntp


Database 설정

- MySQL을 설치 합니다.
# apt-get install -y python-mysqldb mysql-server
- Mysql에 외부에서도 접속할 수 있도록 /etc/mysql/my.cnf 파일의 bind_address를 다음과 같이 수정합니다.
-- bind_address=127.0.0.1
++ bind_address=0.0.0.0

- MySQL을 재시작합니다.

- 그다음 OpenStack 서비스 DB를 생성하고 이 DB를 사용할 수 있도록 계정 엑세스 정보를 생성해줍니다.

# mysql -u root -p <<EOF

CREATE DATABASE nova;

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \

IDENTIFIED BY 'password';

CREATE DATABASE cinder;

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' \

IDENTIFIED BY 'password';

CREATE DATABASE glance;

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \

IDENTIFIED BY 'password';

CREATE DATABASE keystone;

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \

IDENTIFIED BY 'password';

CREATE DATABASE neutron;

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \

IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'10.10.10.9' \

IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'10.10.10.11' \

IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

EOF


RabbitMQ 설치

- OpenStack에서 사용하는 큐잉 서비스인 RabbitMQ를 설치합니다.

# sudo apt-get install rabbitmq-server

- RabbitMQ 비밀번호를 변경해줍니다.

# rabbitmqctl change_password guest password


OpenStack Identity Service : Keystone

- Keystone 패키지를 설치합니다.

# apt-get install -y keystone python-keystone python-keystoneclient

- Keystone 설정파일을 다음과 같이 설정해줍니다. 설정파일의 위치는 /etc/keystone/keystone.conf입니다.

[DEFAULT]

admin_token = password

debug = True

verbose = True


[sql]

connection = mysql://keystone:password@localhost/keystone

- Keystone을 재시작 해주고, 생성한 DB와 동기화를 해줍니다.

service keystone restart

# keystone-manage db_sync

- 다음은 openrc라는 파일을 생성해줍니다. 이 파일은 OpenStack 커맨드 사용을 위한 admin의 자격을 증명하기 위한 환경 설정 파일입니다.

export OS_TENANT_NAME=admin

export OS_USERNAME=admin

export OS_PASSWORD=password

export OS_AUTH_URL="http://localhost:5000/v2.0/"

export OS_SERVICE_ENDPOINT="http://localhost:35357/v2.0"

export OS_SERVICE_TOKEN=password

- 위의 설정파일을 source 명령어로 적용한 후에 아래의 bash script 파일을 다운받아 실행하여 Keystone을 초기화 해줍니다.


keystone_setup.sh


OpenStack Image Service : Glance

- 다음은 glance 패키지를 설치합니다.

# sudo apt-get install glance

- /etc/glance/glance-api.conf와 /etc/glance/glance-registry.conf 파일을 다음과 같이 수정합니다.

[DEFAULT]

sql_connection = mysql://glance:password@localhost/glance

[keystone_authtoken]

admin_tenant_name = service

admin_user = glance

admin_password = password

[paste_deploy]

flavor=keystone 

- glance 서비스를 재시작합니다.

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

- 생성한 DB와 glance를 동기화 시켜줍니다.

# glance-manage db_sync

- 가상 머신의 이미지를 등록하기 위해서 다음 위치에서 가상 머신 이미지를 다운 받고 glance에 cirros 이미지를 등록합니다.

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

# glance image-create --is-public true --disk-format qcow2 --container-format bare --name "CirrOS 0.3.1" < cirros-0.3.1-x86_64-disk.img


OpenStack Compute : Nova

- Nova 패키지를 설치합니다.

# apt-get install -y nova-api nova-cert nova-common nova-conductor \

    nova-scheduler python-nova python-novaclient nova-consoleauth novnc \

    nova-novncproxy

- 패키지 설치 후 Nova의 환경 설정 파일을 수정합니다. 먼저 /etc/nova/api-paste.ini을 다음과 같이 수정합니다.

admin_tenant_name = service 

admin_user = nova 

admin_password = password

- 다음은 /etc/nova/nova.conf를 다음과 같이 설정합니다. Nova 환경 설정은 원하시는 설정에 따라 바꿀 수 있지만 기본적인 설정은 다음과 같습니다.

[DEFAULT]

sql_connection=mysql://nova:password@localhost/nova

my_ip=10.10.10.10

rabbit_password=password

auth_strategy=keystone


# Networking

network_api_class=nova.network.neutronv2.api.API

neutron_url=http://10.10.10.10:9696

neutron_auth_strategy=keystone

neutron_admin_tenant_name=service

neutron_admin_username=neutron

neutron_admin_password=password

neutron_admin_auth_url=http://10.10.10.10:35357/v2.0

libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver

linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver  


# Security Groups                                    

firewall_driver=nova.virt.firewall.NoopFirewallDriver

security_group_api=neutron                           

                                                     

# Metadata                                           

neutron_metadata_proxy_shared_secret=password          

service_neutron_metadata_proxy=true                  

metadata_listen = 10.10.10.10        

metadata_listen_port = 8775                          


# Cinder

volume_api_class=nova.volume.cinder.API


# Glance

glance_api_servers=10.10.10.10:9292

image_service=nova.image.glance.GlanceImageService


# novnc

novnc_enable=true             

novncproxy_port=6080          

novncproxy_host=10.0.0.10

vncserver_listen=0.0.0.0  

- 다음은 DB를 동기화 시켜줍니다.

# nova-manage db sync

- 이제 nova 서비스들을 재시작 시켜줍니다.

# service nova-api restart

# service nova-cert restart

# service nova-consoleauth restart

# service nova-scheduler restart

# service nova-novncproxy restart


OpenStack Block Storage : Cinder

- VM의 볼륨을 관리하는 서비스인 Cinder 패키지를 설치합니다.

# apt-get install -y cinder-api cinder-scheduler cinder-volume iscsitarget \

    open-iscsi iscsitarget-dkms python-cinderclient linux-headers-`uname -r`

- iSCSI 서비스의 설정 변경 및 서비스를 시작합니다.

# sed -i 's/false/true/g' /etc/default/iscsitarget

# service iscsitarget start

# service open-iscsi start

- cinder의 설정 파일을 다음과 같이 수정해줍니다.

/etc/cinder/cinder.conf

[DEFAULT]

sql_connection = mysql://cinder:password@localhost/cinder

rabbit_password = password

/etc/cinder/api-paste.ini

admin_tenant_name = service

admin_user = cinder 

admin_password = password

- OpenStack에서 생성하는 VM 인스턴스의 볼륨을 사용하기 위한 LVM Physical Volume과 Logical Volume을 생성합니다.

# pvcreate /dev/sdb

# vgcreate cinder-volumes /dev/sdb

- cinder를 DB와 동기화 시켜줍니다.

# cinder-manage db sync

- cinder 서비스를 재시작해줍니다.

# service cinder-api restart

# service cinder-scheduler restart

# service cinder-volume restart


OpenStack Network Service : Neutron

- OpenStack의 네트워크를 관리하는 Neutron 패키지를 설치합니다. 현재 구성 상으로는 Network Node가 분리되어 있기 때문에 컨트롤러에는 neutron-server만 설치하게 됩니다.

# apt-get install -y neutron-server

- neutron의 환경 설정 파일을 다음과 같이 수정해줍니다.

/etc/neutron/neutron.conf

[DEFAULT]

verbose = True

rabbit_password = password

[keystone_authtoken]

admin_tenant_name = service

admin_user = neutron

admin_password = password

/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini

[DATABASE]

sql_connection = mysql://neutron:password@localhost/neutron

[OVS]

tenant_network_type = gre 

tunnel_id_ranges = 1:1000

enable_tunneling = True

local_ip = 10.10.10.10

[SECURITYGROUP]

firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver

- 다음은 위의 ovs_plugin 설정파일에 관한 심볼링 링크를 걸어주고 neutron-server를 재시작해줍니다.

# ln -s /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini /etc/neutron/plugin.ini

# service neutron-server restart


OpenStack Dashboard : Horizon

- 이제 컨트롤러 설치의 막바지에 왔습니다. 사용자가 OpenStack의 서비스를 좀더 편리하게 사용할 수 있도록 하는 Web-accessible GUI인 Horizon을 설치합니다.

# apt-get install -y openstack-dashboard memcached python-memcache

- 해당 ip를 통해 horizon에 접속할 수 있습니다.


여기까지가 OpenStack의 Controller를 구성하기 위한 설치 과정이었습니다. OpenStack의 설치과정이 조금 긴편입니다. 또한 설정파일이 잘못된 경우 서비스들이 제대로 동작하지 않기 때문에 주의가 필요합니다.

다음 포스팅에는 OpenStack의 Network Node의 설치 방법에 관해서 알아보도록 하겠습니다.


참고 사이트 : http://docs.openstack.org