본문 바로가기

가끔정상

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

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


1. 개요.
오픈스택 Mitaka 버전을 이용해서, CentOS 7 Minimal 버전에서 Packstack을 이용해서,
멀티NIC 로 컨트롤러노드, 네트워크노드,컴퓨트노드 기능을 구현하게 구성함.


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 에 설치) :
    root 권한으로 virtualbox 실행 후 메뉴환경설정에서 "NAT 네트워크" 를 10.0.2.0/24 로 사용하게함.
    가상환경에서 nic이름은 eth0,eth1,eth2 가 아니라  enp0s3, enp0s8,enp0s9 와 같은 이름임. 순서만 중요.
    그리고, /etc/sysconfig/network-script/ifg-enp0s? 파일의 설정에서 한 서버에서 랜카드가 여러개면
    DEFROUTE값을 외부로 나갈 랜카드 설정만 yes 로 하고 나머지는 no 로 해야 외부 인터넷접속 패킷이 경로를 찾음.
    아래에서 컨트롤노드,컴퓨트노드는 eth0만 yes, 네트워크노드는 eth2만 yes


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

    네트워크1 - eth0 : NAT 네트워크 : 10.0.2.0/24 ( 컨트롤러,네트워크,컴퓨트 3 모드 모두 적용)

    네트워크2 - eth1 : 호스트전용네트워크 : 10.0.10.0/24 ( 네트워크, 컴퓨트 노드) : kvm(qemu) 가상 터널로 서로 통신

    네트워크3 - eth2 : 외부 접속 : 192.168.219.0/24 (호스트IP, 네트워크 노드) - br-ex 로 브릿지로 변환.(promiscuous 모드)



    컨트롤노드 : Nic 이 1개만 필요함.
    : eth0 - 10.0.2.10 (DEFROUTE=yes)
   
    컴퓨트노드 : Nic 이 2 개필요함
    :  eth0 - 10.0.2.20 (DEFROUTE=yes)
    :  eth1 - 10.0.10.20(DEFROUTE=no,네트워크노드의 eth1와 통신)
            VirtualBox 에서 가상CPU(VCPU) 를 할당할 때, 이 컴퓨트노드에 가능하면 많은 VCPU를
            할당해야함. 인스턴스를 생성하면 총 인스턴스 사용VCPU 갯수가 더 많아지면 오류가 남.

    네트워크노드 : Nic 이 3 개 필요함
    : eth0 - 10.0.2.30 (DEFROUTE=no)
    : eth1 - 10.0.10.30 (DEFROUTE=no)
    : eth2 - 192.168.219.99 (DEFROUTE=yes) (이건 브릿지 어댑터로 외부로 나가는 아이피,
            Virtualbox 설정에서, 랜카드 고급 > 무작위 모드를 "거부" 가 아닌 "모두 허용"으로
        반드시 수정, br-ex 로 사용할 랜카드)
            /sbin/sysctl -w net.ipv4.ip_forward=1 포트포워딩 허용



    게이트웨이 : 10.0.2.1

    OS 는 CentOS7(minimal, X윈도우 설치안함) , 메모리 8G , HDD 16G
    CentOS 설치과정중에 반드시 네트워크를 사용함으로 설치함.
   
    랜카드는 네트워크노드 3번째 랜카드를 : 192.168.219.100 (virtualbox 에서 브릿지어댑터로 설정)
    Virtualbox 설정에서, 랜카드 고급 > 무작위 모드를 "거부" 가 아닌 "모두 허용"으로
    반드시 수정.(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.2.10
        CONFIG_COMPUTE_HOSTS=10.0.2.20
        CONFIG_NETWORK_HOSTS=10.0.2.30

        CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex

http://bderzhavets.blogspot.kr/2015/05/rdo-kilo-set-up-three-kvms-nodes.html

CONFIG_NEUTRON_ML2_TYPE_DRIVERS=vxlan
CONFIG_NEUTRON_ML2_TENANT_NETWORK_TYPES=vxlan
CONFIG_NEUTRON_ML2_MECHANISM_DRIVERS=openvswitch
CONFIG_NEUTRON_ML2_FLAT_NETWORKS=*
CONFIG_NEUTRON_ML2_VLAN_RANGES=
CONFIG_NEUTRON_ML2_TUNNEL_ID_RANGES=1001:2000
CONFIG_NEUTRON_ML2_VXLAN_GROUP=239.1.1.2
CONFIG_NEUTRON_ML2_VNI_RANGES=1001:2000
CONFIG_NEUTRON_L2_AGENT=openvswitch
CONFIG_NEUTRON_LB_TENANT_NETWORK_TYPE=local
CONFIG_NEUTRON_LB_VLAN_RANGES=
CONFIG_NEUTRON_LB_INTERFACE_MAPPINGS=
CONFIG_NEUTRON_OVS_TENANT_NETWORK_TYPE=vxlan
CONFIG_NEUTRON_OVS_VLAN_RANGES=
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS=physnet1:br-ex
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:eth2
CONFIG_NEUTRON_OVS_TUNNEL_RANGES=1001:2000
# This is VXLAN tunnel endpoint interface
# It should be assigned IP from vteps network
# before running packstack
CONFIG_NEUTRON_OVS_TUNNEL_IF=eth1 (CONFIG_NOVA_COMPUTE_PRIVIF 도 같은 터널용)
CONFIG_NEUTRON_OVS_VXLAN_UDP_PORT=4789

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


 

4. 노드의 외부 인터넷 연결될 랜카드 br-ex 설정 샘플
  멀티노드로 분리가 되면 외부인터넷은 네트워크노드에 해당함.
     
    #### 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. 기타
  - 한가지 문제가, 웹관리자접속을 위해서 컨트롤노드에 웹브라우저로 접속하려면,
   virtualbox 의 NAT 네트워킹으로 eth0(enp0s3) 을 설정하면, 외부에서 아이피로 막바로 접속이
   안된다. 포트포워딩도 말을 잘 안먹음.
   그래서 어쩟루 없이, 컨트롤러노드에 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.2.10 controller.node
10.0.2.20 compute.node
10.0.10.20 compute.node
10.0.2.30 network.node
10.0.10.30 network.node

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

[root@compute ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
NAME="enp0s3"
UUID="75136d19-ba80-45f2-a863-5a735421a967"
DEVICE="enp0s3"
ONBOOT="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_PRIVACY="no"
IPADDR=10.0.2.20
NETMASK=255.255.255.0
GATEWAY=10.0.2.1
DNS1=8.8.8.8

[root@compute ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
IPV4_FAILURE_FATAL="no"
IPV6_DEFROUTE="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@network ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="no"
IPV6_FAILURE_FATAL="no"
NAME="enp0s3"
DEVICE="enp0s3"
ONBOOT="yes"
IPADDR=10.0.2.30
NETMASK=255.255.255.0
GATEWAY=10.0.2.1
DNS1=8.8.8.8

[root@network ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="no"
IPV6INIT="no"
IPV6_DEFROUTE="no"
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@network ~]# cat /etc/sysconfig/network-scripts/ifcfg-enp0s9
TYPE="OVSPort"
BOOTPROTO=none
IPV6INIT=no
DEVICETYPE="ovs"
BOOTPROTO="none"
OVS_BRIDGE=br-ex
NAME="enp0s9"
DEVICE="enp0s9"
ONBOOT="yes"

[root@network ~]# cat /etc/sysconfig/network-scripts/ifcfg-br-ex
NAME=br-ex
DEVICE=br-ex
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILLURE_FATAL=no
IPADDR=192.168.219.99
NETMASK=255.255.255.0
GATEWAY=192.168.219.1
ONBOOT=yes
DNS1=8.8.8.8