IT/openstack

OpenStack 설치 : nova-network를 사용하는 compute node 구성

울티마 2015. 9. 5. 13:27

NOVA-Network를 사용하는 compute node 구성

- eth0 : floating - 외부 접속용

- eth1 : fixed - 내부 사용

- OS 구성 시 사전 절차는 아래 문서 참조

0. OpenStack 패키지 Repository 변경 (필요 시 수행)

(1) kilo config -> juno config  : jcloud 1.9에서 kilo의 모든 기능을 지원하지 않아 급하게 Juno로 변경

root@controller:~# rm /etc/apt/sources.list.d/cloudarchive-kilo.list

root@controller:~# echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu" "trusty-updates/juno main" > /etc/apt/sources.list.d/cloudarchive-juno.list

root@controller:~# apt-get update

root@controller:~# apt-get dist-upgrade

(2) NTP 설정

# vi /etc/ntp.conf

server controller iburst

# service ntp restart

# ntpq -c peers

     remote           refid      st t when poll reach   delay   offset  jitter

==============================================================================

*controller      203.248.240.140  3 u  156 1024  377    0.595  -15.814  15.528

--> remote가 controller인지 확인


# ntpq -c assoc

ind assid status  conf reach auth condition  last_event cnt

===========================================================

  1 27464  968a   yes   yes  none  sys.peer    sys_peer  8

--> condition 항목에 sys.peer로 설정되었는지 확인


1. Compute Hypervisor Components, Nova Netowrk 설치

(1) 패키지 설치 및 config 수정

# apt-get install nova-compute sysfsutils

# apt-get install nova-network nova-api-metadata

# apt-get install python-novaclient


(2) KVM 기본 브릿지 제거 및 커널 파라미터 수정

--> 내부 IP 용인 eth1에서 외부용인 eth2로 ip fowrward가 필요함, 이더넷 포트가 2개 이상일 경우 필요

# sudo vi /etc/sysctl.conf 

net.ipv4.ip_forward=1 

# sysctl -p

net.ipv4.ip_forward=1


--> KVM에서 기본적으로 구성하는 bridge 인터페이스 제거

# virsh net-destroy default

# virsh net-undefine default


--> 사설용을 eth1을 promisc로 구성. 멀티 노드로 구성할 경우 각 노드 간의 인스턴스 통신 가능하게 설정

# ip link set eth1 promisc on


(3) nova.conf

--> eth0를 외부용(192.168.0.x), eth1을 내부용(10.10.10.x)으로 구성

--> controller는 192.168.0.221

--> nova-network 중 FlatDHCPManager를 사용하는 설정


# vi /etc/nova/nova.conf

[DEFAULT]

logdir=/var/log/nova

state_path=/var/lib/nova

lock_path=/var/lock/nova

libvirt_use_virtio_for_bridges=True

verbose=True                                             <-- 에러 시 로그 분석용

ec2_private_dns_show_ip=True

api_paste_config=/etc/nova/api-paste.ini

enabled_apis=ec2,osapi_compute,metadata


# RabbitMQ 설정 패스워드는 기 설정 사용

rpc_backend = rabbit

rabbit_host = controller

rabbit_password = rabbitpass

auth_strategy = keystone


# VNC 설정 : 여기서는 noVNC 모드, SPICE일 경우 openstack 사이트 매뉴얼 참조

my_ip = 192.168.0.222  <-- local host

vnc_enabled = True

vncserver_listen = 0.0.0.0

vncserver_proxyclient_address = 192.168.0.222  <-- localhost

novncproxy_base_url = http://192.168.0.221:6080/vnc_auto.html  <-- controller


# Nova Network Service

network_api_class = nova.network.api.API

security_group_api = nova

firewall_driver = nova.virt.libvirt.firewall.IptablesFirewallDriver

network_manager=nova.network.manager.FlatDHCPManager

dhcpbridge_flagfile=/etc/nova/nova.conf

dhcpbridge=/usr/bin/nova-dhcpbridge


# 이 부분은 아래 내용 대로

flat_network_bridge=br100

flat_interface=eth1

public_interface = eth0

flat_injected=True

fixed_range=10.10.10.0/24                    <-- 내부 서비스용

fixed_network_dhcp_start=10.10.10.31       <-- DHCP 서비스 시작

                                                   10.10.10.30이 자동적으로 DHCP 서비스 IP가 됨

gateway = 10.10.10.1


network_size = 256

allow_same_net_traffic = True

multi_host = True

send_arp_for_ha = True

share_dhcp_address = False

force_dhcp_release = True


[keystone_authtoken]

auth_uri = http://controller:5000/v2.0

identity_uri = http://controller:35357

admin_tenant_name = service

admin_user = nova

admin_password = novapass


[database]

connection = mysql://nova:novadbpass@controller/nova


[glance]

host = controller


2. CPU 가상화를 지원하지 않을 경우 설정

# egrep -c '(vmx|svm)' /proc/cpuinfo

위 결과가 0일 경우 아래 설정 (가상화CPU를 지원하지 않을 경우 KVM 사용 불가)

# vi /etc/nova/nova-compute.conf

[libvirt]

virt_type = qemu


--> VMWare, Xen 처럼 가상화환경에서 구성할 경우 위 내용으로 할 경우 성능 이슈 발생

     VMWare의 VM CPU 가상화 기능 설정해서 사용 권장



3. 서비스 재가동

# service nova-compute restart

# service nova-network restart

# service nova-api-metadata restart


# rm -f /var/lib/nova/nova.sqlite


4. nova-network 구성 

(1) 인터페이스 구성 --> eth1은 설정하지 않음


# The loopback network interface

auto lo

iface lo inet loopback


# The primary network interface

auto eth0

iface eth0 inet static

address 192.168.0.222

netmask 255.255.255.0

network 192.168.0.0

broadcast 192.168.0.255

gateway 192.168.0.254

dns-nameservers 168.126.63.1

# Bridge interface

auto br100

iface br100 inet static

#address 192.168.0.212

address 10.10.10.1

netmask 255.255.255.0

bridge_ports eth1

bridge_stp off

bridge_maxwait 0

bridge_fd 0

post-up route add -net 10.10.10.0/24 gw 10.10.10.1 dev br100


(2) 초기 네트워크 구성 : Controller에서

# nova network-create --fixed-range-v4 10.10.10.0/24 --bridge br100 --bridge-interface eth1 --multi-host T --enable-dhcp T net_10.10.10

- 생성 확인 (ID 확인)

# nova network-list

- 프로젝트에 할당 (현재 사용중인 tenant에 할당됨)

# nova network-associate-project <net-id, 위에서 확인한 id>

   --> 가끔 VLAN enable 하라고 하는데 잠시 후에 다시 해보면 associate 됨. 안되면 몇 분 후에 다시 시도. 괜히 VLAN 넣지 말것


- 생성을 잘못해서 삭제해야 할 경우 : 과감하게 지워도 괜찮음 (혹시 인스턴스 있을 경우 먼저 제거해야 함)

# nova network-list

# nova network-disassociate <net-id>

# nova network-delete <net-id>


(3) floating ip 설정

- OpenStack 전체가 사용할 IP 대역 정의

# nova floating-ip-bulk-create 192.168.0.0/24   --> 환경에 맞게 대역/bit 적당히 조절


# nova floating-ip-create  --> 위에서 정의한 후보 대역 중 미사용 중인 IP를 순차적으로

                                        현재 tenant(project)에 추가 


5. 서비스 확인

# nova service-list

+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+

| Id | Binary           | Host       | Zone     | Status  | State | Updated_at                 | Disabled Reason |

+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+

| 1  | nova-cert        | controller | internal | enabled | up    | 2015-08-21T07:22:35.000000 | -               |

| 2  | nova-consoleauth | controller | internal | enabled | up    | 2015-08-21T07:22:40.000000 | -               |

| 3  | nova-scheduler   | controller | internal | enabled | up    | 2015-08-21T07:22:44.000000 | -               |

| 4  | nova-conductor   | controller | internal | enabled | up    | 2015-08-21T07:22:38.000000 | -               |

| 5  | nova-compute     | compute1   | nova     | enabled | up    | 2015-08-21T07:22:35.000000 | -               |

+----+------------------+------------+----------+---------+-------+----------------------------+-----------------+

# nova image-list

+--------------------------------------+---------------------+--------+--------+

| ID                                   | Name                | Status | Server |

+--------------------------------------+---------------------+--------+--------+

| 931fff4c-3c25-4477-b59c-19545760e772 | cirros-0.3.3-x86_64 | ACTIVE |        |

+--------------------------------------+---------------------+--------+--------+

# nova network-list

+--------------------------------------+--------------+---------------+

| ID                                   | Label        | Cidr          |

+--------------------------------------+--------------+---------------+

| 3f616f7f-d4e2-40cd-bf42-add76b76c6fd | net_10.10.10 | 10.10.10.0/24 |

+--------------------------------------+--------------+---------------+


6. 개선할 내용

- compute node의 br100 ip가 자동적으로 'nova network-create'에서 정의된 대역의 첫번째 ip로 바뀌는 부분

- 각 노드 내의 VM 간 통신은 지장이 업스나 compute node 간의 eth1을 통한 ping은 불가

  즉 다른 노드 내의 VM으로 통신 불가

- dnsmasq 서비스의 config를 조정하면 되는데 잘못설정할 경우 nova-network 서비스 자체가 동작하지 않아 

  명확히 이해한 후 변경 시도 해야 함