본문 바로가기

가끔정상

Packstack 을 이용해서 Openstack Mitaka 설치 ( 2node - 3Nic 으로)

### 쓴것 : Packstack 을 이용해서 Openstack Mitaka 설치 ( 2node - 3Nic 으로)
### 쓴때 : 2016-05-6
### 쓴이 : 권성재 (nonots@hanmail.net)


1. 개요.
오픈스택 Mitaka 버전을 이용해서, CentOS 7 Minimal 버전에서 Packstack을 이용해서,
멀티NIC 로 2노드 컨트롤러노드,컴퓨트노드 기능을 구현하게 구성함.
참고 : https://thinkit.co.jp/story/2015/05/19/6017


2. 환경.
  - 호스트 컴퓨터(물리적인 내 PC) : 우분투리눅스 16.04
    집에서 LG 인터넷사용하는데, 공인IP 220.120.xx.32가 공유기에 할당되고
    공유기 거쳐 들어오면 사설아이피 192.168.219.0/24 대역에서
    192.168.219.160 으로 PC 가 할당됨.
    게이트 웨이: 192.168.219.1

  - VirtualBox 설정(VirtualBox 5.0.18 에 설치) :
    가상환경에서 nic이름은 eth0,eth1,eth2 가 아니라  enp0s3, enp0s8,enp0s9 와 같은 이름임. 순서만 중요.
    그리고, /etc/sysconfig/network-script/ifg-enp0s? 파일의 설정에서 한 서버에서 랜카드가 여러개면
    DEFROUTE값을 외부로 나갈 랜카드 설정만 yes 로 하고 나머지는 no 로 해야
    외부 인터넷접속 패킷이 경로를 찾음.  아래에서 컨트롤노드,컴퓨트노드는 eth0만 yes,
    네트워크노드는 eth2만 yes
    네트워크노드기능은 모든 모드에 다 설치.


    ### 내가 할 , 버추얼박스 네트워크 설정 ###

    네트워크1 - eth0 : 브릿지어댑터 : 192.168.219.0/24 ( 컨트롤러,컴퓨트1,컴퓨트2, 모두 적용,br-ex)
    네트워크2 - eth1 : 호스트전용네트워크 : 10.0.10.0/24 ( 매니지먼트 네트워크)
    네트워크3 - eth2 : 호스트전용네트워크 : 10.0.20.0/24 , kvm(qemu) 가상 터널로 서로 통신



    컨트롤(네트워크)노드 :  외부 연결, br-ex 설정
    : eth0 - 192.168.219.10 (DEFROUTE=yes)
    : eth1 - 10.0.10.10 (DEFROUTE=no)
    : eth2 - 10.0.20.10 (DEFROUTE=no)
   
    컴퓨트(네트워크)노드1 : 매니지먼트 네트워크, br-ex 설정
    : eth0 - 192.168.219.20 (DEFROUTE=yes)
    : eth1 - 10.0.10.20 (DEFROUTE=no)
    : eth2 - 10.0.20.20 (DEFROUTE=no)

    컴퓨트(네트워크)노드2 : 매니지먼트 네트워크, br-ex 설정
    : eth0 - 192.168.219.30 (DEFROUTE=yes)
    : eth1 - 10.0.10.30 (DEFROUTE=no)
    : eth2 - 10.0.20.30 (DEFROUTE=no)


    게이트웨이 : 192.168.219.1

    OS 는 CentOS7(minimal, X윈도우 설치안함) , 메모리 8G , HDD 16G
    CentOS 설치과정중에 반드시 네트워크를 사용함으로 설치함.
   
    Virtualbox 설정에서, eth0 랜카드 고급 > 무작위 모드를 "거부" 가 아닌 "모두 허용"으로
    반드시 수정.(br-ex 로 사용할 랜카드)

  - 오픈스택에서 내부적으로 할당할 IP 대역 :
     FloatingIP : 192.168.219.0/24  (실제 인터넷을 물고 나갈 아이피, 보통 공인아이피 이지만
       NAT로 네트워크 가능한 내부사설도 가능)
     각 인스턴스에 할당될 내부 사설 IP : 10.1.1.0/24 ( 이건 사설아이 대역 아무거나 할당하면됨)
     Private네트워크를 여러게 만든다면 10.1.2.0/24 같이 추가 가능함


3. 서버의 공통 사전 작업,
   yum update ; reboot;
   systemctl stop firewalld
   systemctl disable firewalld
   systemctl stop NetwokManager
   systemctl disable NetwokManager
   systemctl enable network
   systemctl start network

   systemctl enable ntp
   systemctl start ntp

   chkconfig NetworkManager off
   chkconfig network on
   service network restart
   yum install net-tools ntp lsof screen sysstat wget 등등 필요한 패키지 설치,
   setenforce 0
   /etc/selinux/config 파엘애서 SELINUX=permissive 로 수정,
   /etc/hosts 파일에 호스트 등록.(멀티 노드이면 여러개 등록)
   hostnamectl set-hostname my.hostname 등과 같이 hostname 수정함

   yum install -y https://www.rdoproject.org/repos/rdo-release.rpm
   yum install -y openstack-packstack
   packstack --gen-answer-file=/root/answer.txt


        # 비번없이 ssh 접속(controller.node 에서의 명령어. 다른 노드는 각각 또 따로)
        ssh-keygen (엔터만 여러번 쳐서 종료)
        ssh-copy-id -i /root/.ssh/id_rsa.pub root@compute.node
        ssh-copy-id -i /root/.ssh/id_rsa.pub root@network.node
        ssh root@compute.node (하면 비번 없이 로그인 해야함)
        ssh root@network.node (하면 비번 없이 로그인 해야함)

   packstack --gen-answer-file=/root/answer.txt
        ## answer.txt에서 n 로 설치안할 것과 기타 설정 수정
        CONFIG_CINDER_INSTALL=n
        CONFIG_SWIFT_INSTALL=n
        CONFIG_CEILOMETER_INSTALL=n
        CONFIG_AODH_INSTALL=n
        CONFIG_GNOCCHI_INSTALL=n
        CONFIG_NAGOIS_INSTALL=n
        CONFIG_CONTROLLER_HOST=10.0.10.10
        CONFIG_COMPUTE_HOSTS=10.0.10.20,10.0.10.30
        CONFIG_NETWORK_HOSTS=10.0.10.10,10.0.10.20,10.0.10.30

    CONFIG_NOVA_COMPUTE_PRIVIF=eth2 (혹은 enp0s9)
    CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan
    CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan
    CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch,l2population
    CONFIG_NEUTRON_ML2_TUNNEL_ID_RANGES=10:1000
    CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex
    CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0 (혹은 enp0s3)
    CONFIG_NEUTRON_OVS_TUNNEL_IF=eth2 (혹은 enp0s9)


   수정후 실행
   packstack --answer-file=/root/answer.txt

 

4. 노드의 외부 인터넷 연결될 랜카드 br-ex 설정 샘플
  멀티노드로 분리가 되면 외부인터넷은 네트워크노드에 해당함.

    >> 위 answer.txt 파일 설정에서 아래와 같이 정확하게 지정을 해주면,
    >> 수동으로 아래 ifcfg-br-ex 를 복사해서 수정할 필요없이 자동으로
    >>  /etc/sysconfig/network-scripts/ifcfg-br-ex 파일이 생성됨. 신기.
    >> CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex
    >> CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth0 (혹은 enp0s3)
    >> CONFIG_NEUTRON_OVS_TUNNEL_IF=eth2 (혹은 enp0s9)

     
    #### ovs 랜카드 설정 :  ifcfg-enp0s? br-ex 로 할 샘플
    NAME=enp0s?
    DEVICE=enp0s?
    BOOTPROTO=none
    IPV6INIT=no
    TYPE=OVSPort
    DEVICETYPE=ovs
    OVS_BRIDGE=br-ex
    ONBOOT=yes

    #### ovs br-ex 랜카드 설정 : ifcfg-br-ex 샘플
    NAME=br-ex
    DEVICE=br-ex
    DEVICETYPE=ovs
    TYPE=OVSBridge
    BOOTPROTO=none
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPADDR=192.168.219.??
    NETMASK=255.255.255.0
    GATEWAY=192.168.219.1
    DNS1=8.8.8.8
    ONBOOT=yes



5.  웹 대시보드 초기 관리 순서

    - admin 비밀번호 쉬운걸로 변경.
    - 관리자 > 시스템 > 라우터와 네트워크  설정 삭제,
    - 관리자 > 시스템 > 네트워크 : public 네트워크 생성.
        (네트워크타입을 VXLAN 으로하고, segmentID 는 숫자0,shared,external network 체크.
    - 관리자 > 시스템 > 네트워크 public 의 서브넷(public_subnet) 생성.
        192.168.219.0/24 와 같이 할당가능한 floatingIP 영역.
        AllocationPool(할당영역) 은 192.168.219.2,192.168.219.50 같이 실제 사용할 영역.
    - 프로젝트 > 네트워크 > 네트워크 : Private 네트워크 생성.
        10.1.1.0/24 와 같이 내부 사설 네트워크 생성. 게이트웨이는 보통 끝에 1 번으로.
        AllocationPool(할당영역) 은 10.1.1.2,10.1.1.50 같이 실제 사용할 영역을 쉼표로.
    - 프로젝트 > 네트워크 > 라우터 : 라우터 생성. external 외부 네트워크를 public 으로 선택.
        라우터 생성 후 상세보기에서 인터페이스를 추가함.
        서브텟은 위에서 만든 Private 네트워크 10.1.1.0/24 를 선택.
        IP 주소는 10.1.1.0/24 의 게이트웨이인 10.1.1.1 를 입력.
    - 프로젝트 > 네트워크 > 네트워크토폴로지 : 가지모양 네트워크 구성도 확인


6. 인스턴스 샘플 생성 및 접속

 - 프로젝트 > Compute > 접근 보안 : 보안 그룹 규칙을 잘 손보고, 키패어 생성해서 파일을
   mycentos_key.pem 등의 적당한 이름으로 다운 보관.

 - 관리자 > 시스템 > 이미지 : 이미지 생성 창을 연다.
   http://cloud.centos.org/centos/7/images/ 에서 최신 qcow2 이미지 경로
   http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1603.qcow2c
   를 복사해서 위 이미지 생성 창에서 "이미지 위치" 에 붙여 넣기 한다.
   포맷란에는 QCOW2 를 선택. 적당한 이름 넣은후. 한단에 공용에 체크하고 저장.

 - 프로젝트 > Compute > 인스턴스 에서 상단 "인스턴스 구동" 으로 인스턴스를 만든다.
   팝업창에서 "네트워크" 는 반드시 Private 네트워크를 선택하고, 소스 부분에 위에서 만든
   Centos7 이미지를 선택하고, 미리 만든 키페어 선택 등등
   만들어 지면, 10.1.1.? 와 같이 내부 사설IP 만 할당되므로,인터넷을 하려면 FloatingIP를 연결해서
   예를 들어 192.168.219.13 와 같이 할당받는다.

 - 위 centos 인스턴스에  ssh 로 접속하려면 외부에서, 다운받은 키파일을 이용해서
   ssh -i mycentos_key.pem centos@192.168.219.13 와 같이 접속하면 비번 없이 접속가능함.
   만약 로그인후 외부로 핑이 안나가면,  VirturlBox 에서 랜카드 설정 고급에서
   무작위모드가 "모두 허용" 으로 된건지 확인.

 - 만약 인스턴스의 총 하이퍼바이저 즉, VCPU 갯수가, 컴퓨트노드에 사용된 총 CPU 갯수보다 많으면
   오류가 남.

 - 가능하면 가상모드 자원이 부족하면, 여러개 인스턴스를 동시 활성화 하지말고, 하나씩만 활성화해서
   자원을 아낀다. 너무 부하가 많으면 에러가 난다.





7. 기타


    Horizon 웹관리모드 접속시, 만약 내부 관리네트워크(Management network)의 아이피를
    밖에서 접속할 수 없는 경우, 외부에서 웹브라우저로 접속 가능하도록 설정,
    예들들어, 컨트롤러노드의 내부 매니지먼트  네트워크 아이피가 10.0.10.10 이고
    외부 아이피는 192.168.219.10 이라면, 외부 웹브라우저로 10.0.10.10 아이피를 쳐도
    관리모드에 들어갈수 없다.
    이때는
    컨트롤노드의 가상호스팅 설정파일 /etc/httpd/conf.d/15-horizon-vhost.conf 에서
    Serveralias 의 alias 설정에 192.169.219.10 을 추가 해준다.
         30   ## Server aliases
         31   ServerAlias 10.0.10.10
         32   ServerAlias 192.168.219.10
         33   ServerAlias controller.node
         34   ServerAlias localhost

  또 다른 방법은, 10.0.10.10 컨트롤러 노드 안에  X윈도를 직접 설치하면 됨.
   yum grouplist hidden 하면 Server with GUI 라는 그룹이 있는데
   yum groupinstall "Server with GUI" 를 실행하면, 컨트롤러노드에 기본 X 윈도가 설치됨.
   콘솔에서 startx 로 하면, 윈도우모드 뜸.

  - 만약 인스턴스 생성에에 알수 없는 에러가 자꾸 나면, 자원이 부족한지 보고, 만약 그것도 아니라면,
   웹관리모드에서 네트워크와 라우터 등 다 삭제하고  새로 생성해서 해 본다.


================ 설정,

[root@controller ~]# cat /etc/hosts (모든 노드 공통)
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

10.0.10.10 controller.node
10.0.10.20 compute1.node
10.0.10.30 compute2.node

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex
DEFROUTE="yes"
ONBOOT="yes"
IPADDR=192.168.219.10
NETMASK=255.255.255.0
GATEWAY=192.168.219.1
PEERDNS="yes"
PEERROUTES="yes"
DEVICE=br-ex
NAME=br-ex
DEVICETYPE=ovs
OVSBOOTPROTO="none"
TYPE=OVSBridge

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
DEVICE=enp0s3
NAME=enp0s3
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s8"
DEVICE="enp0s8"
ONBOOT="yes"
IPADDR=10.0.10.10
NETMASK=255.255.255.0
GATEWAY=10.0.10.1
DNS1=8.8.8.8

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s9"
DEVICE="enp0s9"
ONBOOT="yes"
IPADDR=10.0.20.10
NETMASK=255.255.255.0
GATEWAY=10.0.20.1
DNS1=8.8.8.8


[root@compute1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex
DEFROUTE="yes"
ONBOOT="yes"
IPADDR=192.168.219.20
NETMASK=255.255.255.0
GATEWAY=192.168.219.1
DEVICE=br-ex
NAME=br-ex
DEVICETYPE=ovs
OVSBOOTPROTO="none"
TYPE=OVSBridge

[root@compute1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
DEVICE=enp0s3
NAME=enp0s3
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none

[root@compute1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
IPV6_FAILURE_FATAL="no"
NAME="enp0s8"
DEVICE="enp0s8"
ONBOOT="yes"
IPADDR=10.0.10.20
NETMASK=255.255.255.0
GATEWAY=10.0.10.1
DNS1=8.8.8.8

[root@compute1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
IPV6_FAILURE_FATAL="no"
NAME="enp0s9"
DEVICE="enp0s9"
ONBOOT="yes"
IPADDR=10.0.20.20
NETMASK=255.255.255.0
GATEWAY=10.0.20.1
DNS1=8.8.8.8


[root@compute2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex
DEFROUTE="yes"
UUID="75136d19-ba80-45f2-a863-5a735421a967"
ONBOOT="yes"
IPADDR=192.168.219.30
NETMASK=255.255.255.0
GATEWAY=192.168.219.1
PEERDNS="yes"
PEERROUTES="yes"
DEVICE=br-ex
NAME=br-ex
DEVICETYPE=ovs
OVSBOOTPROTO="none"
TYPE=OVSBridge

[root@compute2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
DEVICE=enp0s3
NAME=enp0s3
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ex
ONBOOT=yes
BOOTPROTO=none

[root@compute2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp0s8"
DEVICE="enp0s8"
ONBOOT="yes"
IPADDR=10.0.10.30
NETMASK=255.255.255.0
GATEWAY=10.0.10.1
DNS1=8.8.8.8

[root@compute2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
NAME="enp0s9"
DEVICE="enp0s9"
ONBOOT="yes"
IPADDR=10.0.20.30
NETMASK=255.255.255.0
GATEWAY=10.0.20.1
DNS1=8.8.8.8