상세 컨텐츠

본문 제목

Openstack 설치

Cloud/Openstack

by yellowmarine 2020. 10. 8. 17:26

본문

Openstack 설치 가이드

Terraform을 사용한 kvm node 설치

Prerequest

~/openstack# . pre.sh
  • proxy를 사용하여 외부의 데이터를 사용할 경우가 생기므로 proxy.sh의 설정을 소스파일에 덮어 씌워준다.

  • kvm을 사용하기 위한 인스톨 파일 설치

  • Terraform 0.12.26 을 사용한다 (안정화 버전의 이유로 0.13이 아닌 0.12 버전을 사용)

  • 내부의 host only 네트워크로 사용하기 위한 internal1 network에 대해 설정.

  • Terraform을 통해 생성될 kvm들이 사용할 default pool 설정.

Terraform

Controller node 설치

os 설정
~/openstack/terraform-libvirt-ubuntu/controller# ssh-keygen -t rsa -b 4096 -f id_rsa -C simple -N "" -q
  • controller node에서 접속에 사용될 ssh key 생성
  • 만약 ssh key를 사용하지 않고 password 접속을 하고자 한다면 cloud-init.cfg 파일을 아래와 같이 변경하도록한다.
#cloud-config
hostname: ${hostname}
fqdn: ${fqdn}
manage_etc_hosts: true
users:
  - name: deploy
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, admin
    home: /home/ubuntu
    shell: /bin/bash
    lock_passwd: false
# only cert auth via ssh (console access can still login)
password: asdfqwer
chpasswd: { expire: False }
ssh_pwauth: True
disable_root: false
packages:
  - qemu-guest-agent
  • 기존 ssh-authorized-keys를 삭제, ssh_pwauth를 활성화 하여주고 password를 개인적으로 설정해주면된다.
  • 만약 user에 대한 data를 수정하고 싶다면 users 내의 내용들을 개인적으로 수정하면된다.
network 설정
  • network 설정은 static.tf, network_config_dhcp.cfg 내의 설정을 토대로 구성되어진다.
  • 만약 추가적인 네트워크를 추가 혹은 삭제를 하고 싶다면 static.tf 내의 아래 부분을 수정한다.
    network_interface {
       network_name = "default"
  }
  network_interface{
       network_name = "internal1"
  }
  • 참고적으로 특정 virsh net이 활성화된 상태여야지 연결이 됨으로 virsh net을 활성화 시켜주도록한다. 활성화 방법은 링크 참고.
  • 네트워크에 특정 ip를 설정 및 구성하기 위해 network_config_dhcp.cfg 설정을 작성한다.
version: 2
ethernets:
  ens3:
     dhcp4: true
     # default libvirt network
     addresses: [ 192.168.122.3/24 ]
     gateway4: 192.168.122.1
     nameservers:
       addresses: [ 192.168.122.1 ]
  ens4:
     dhcp4: true
     # default libvirt network
     addresses: [ 172.16.1.3/24 ]
     gateway4: 172.16.1.1
     nameservers:
       addresses: [ 172.16.1.1 ]
  • 위의 경우 default network에 192.168.122.3 , internal1 172.16.1.3 을 자동으로 할당해주게 된다.

  • 하지만 두 네트워크 모두 nat 네트워크로 가상화 노드의 default network로 설정이 되어있다. 이를 해결하고자 한다면 2가지 방법이 존재한다.

    • Bridge

      • Host only로 설정하고자 하는 network를 bridge로 설정하여 생성한다면 문제 없이 생성 가능하다.
      • 단, dhcp4 : false로 설정 해주는건 잊지 말아야한다.
    • ifmetric

      ifmetric.png
      • 위 사진과 같이 네트워크 별로 metric을 통해 우선순위가 주어지게 된다.
      • 원하는 네트워크의 metric을 낮춰서 우선순위를 올려주도록한다
      ifmetric ens4 600
      ifmetric ens3 0
terraform 실행
  • terraform plugin에 접속을 하기 위해 proxy를 켜준다. 추후 bionic 이미지를 받아오기위해 계속 켜놓은 상태로 진행한다.
terraform init
terraform plan
terraform apply
  • staticip.tf , cloud-init.cfg의 데이터를 기반으로 kvm을 설치한다.

  • 접속 방법

ssh deploy@192.168.122.3 -i id_rsa

Compute1 node 설치

~/openstack/terraform-libvirt-ubuntu/compute1# ssh-keygen -t rsa -b 4096 -f id_rsa -C simple -N "" -q
  • compute1 node에서 접속에 사용될 ssh key 생성

  • 이하 위의 controller node의 설치와 동일하다.

  • 기본적으로 compute1 의 경우 network는 192.168.122.4, 172.16.1.4 을 사용하며 user는 deploy로 사용되어진다.

KVM 수동 설치 및 정보 가이드

  • 을 참고하기 바랍니다.

Openstack component 설치

Controller node

/openstack/terraform-libvirt-ubuntu/controller# ssh deploy@192.168.122.3 -i id_rsa
  • controller node에 접속 후 깃을 복사한다.

Prerequest

root@controller:~/openstack/controller#    . Prerequest.sh
  • NTP(Network Time Protocol), Openstack package, SQL database, Messages queue, Memcached, etcd 설치를 위한 스크립트 및 conf 파일들을 복사하는 작업을 하게 된다.
  • NTP(Network Time Protocol)
    • controller와 compute node의 동기화를 위해 사용한다.
    • NTP 서버는 controller를 사용한다.
    • 사용하는 시간대는 time1.daumkakao.io 서버를 사용한다.
  • Openstack package
    • Stein verison을 사용 할 것이기 때문에 python3 버전을 사용하도록 한다.
    • ubuntu 18.04 에서는 stein repository를 직접 생성 해줘야 설치가 가능하다.
  • SQL database
    • Mysql-server를 설치 후 사용한다.
    • Openstack component 각각의 database로써 사용되어진다.
  • Messages queue
    • RabbitMQ를 설치하도록한다.
    • Openstack component들이 내부 API통신을 위해 사용되어진다.
  • Memcached
    • 분산형 캐시 시스템으로써 database, API 등의 읽기 횟수를 줄이기 위해 사용되어진다. 읽기 횟수가 많아지면 openstack 자체가 느려질 수 있으며 database의 max connection을 빈번하게 넘어서는 경우가 발생한다.
  • etcd
    • Key-value 저장소로써 openstack의 데이터 백업을 주로 담당하게된다.

Component 설치

  • Openstack.org 의 설치가이드를 토대로 설치하였다.

  • 세부사항을 알고자 한다면 공식 홈페이지를 참조하기 바랍니다.

  • 설치 순서

    • Keystone -> glance or horizon -> placement -> nova -> neutron
    • 모든 component가 keystone에 의존성이 있기때문에 위와 같이 설치한다.
  • 설치 버전

    • 일반적으로 안정된 버전으로써 최신 버전에서 -2의 버전을 사용하며 현재 카카오에서 stein 버전을 사용하기에 stein 버전을 사용한다.
  • 설치 참고사항

    • 모든 프로젝트와 user에 대한 password는 1234로 통일하여 자동 설치가 되도록 설정하였다.
    • Admin 외에 demo user로써 myuser를 생성하였다.
    • 설치가 제대로 이루어지지 않는다면 /var/log/(component)/(component).log 를 확인하면서 조치를 취하기 바란다.
keystone
root@controller:~/openstack/controller# . keystone.sh
  • 위의 스크립트는 기본적으로 하나의 머신 혹은 가상머신에서 돌아갈 수 있도록 설치를 한다.
  • 만약 두개 이상의 분리된 영역에서 설치 후 사용을 하고자 한다면 아래의 region-id 부분에 가용하고자 하는 region을 추가한다.
keystone-manage bootstrap --bootstrap-password 1234 \
  --bootstrap-admin-url http://controller:5000/v3/ \
  --bootstrap-internal-url http://controller:5000/v3/ \
  --bootstrap-public-url http://controller:5000/v3/ \
  --bootstrap-region-id RegionOne
  • 기본적으로 keystone과 horizon의 경우 region이 여러개여도 1개의 component 구성으로 다 접근이 가능하기때문에 새로운 머신에 설치가 필요없다.
glance
root@controller:~/openstack/controller# . glance.sh
horizon
root@controller:~/openstack/controller# . horizon.sh
  • Selfservice를 구성할 경우 network topology 창에서 router가 표시되도록 'enable_router': True, 'enable_fip_topology_check': True로 바꿔준다.
OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': True,
    'enable_quotas': False,
    'enable_ipv6': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_lb': False,
    'enable_firewall': False,
    'enable_vpn': False,
    'enable_fip_topology_check': True,
}
placement
root@controller:~/openstack/controller# . placement.sh
nova
root@controller:~/openstack/controller# . nova-controller.sh
neutron
root@controller:~/openstack/controller# . neutron.sh

network 설정

  • ens3, ens4 모두 default gateway로 설정이 되어있기때문에 외부 통신을 위해 사용될 ens3 네트워크에 대해서 metric을 재설정 해주기 바란다.
root@controller:~/openstack/controller(demo)]# ifmetric ens3 0
root@controller:~/openstack/controller(demo)]# ifmetric ens4 600
  • 추후에 문제가 생길시 openstack network가 설정되며 ens3를 대상으로 생성된 bridge의 metric이 상승 될 수 있다. 이럴 경우 해당 브릿지의 metric을 0으로 설정해준다.

Compute1 node

~/openstack/terraform-libvirt-ubuntu/compute1# ssh deploy@192.168.122.4 -i id_rsa

component 설치

  • compute node의 경우 nova와 neutron만 설치를 해주면 된다.
nova
root@compute1:~/openstack/compute-script# . nova-compute.sh
  • 실제 가속화 되어 사용될 수 있는 환경이 아니라면 vi /etc/nova/nova-compute.conf 안의 kvm 을 qemu를 사용하기 바란다.
neutron
root@compute1:~/openstack/compute-script# . neutron-compute.sh

Network 생성

network_topology.png

  • 위 그림과 같이 selfservice network를 생성하여 제공하는 것을 목표로한다.
root@controller:~/openstack/controller# . create-network.sh
  • 위 스크립트는 provider, selfservice network, flavor, security group 생성을 자동으로 해주도록 설정되어있다.
  • 셀프 서비스로 제공 하고 싶은 네트워크는 프로바이더 네트워크와 실제 internet에 연결된 네트워크를 피해서 설정해주면 된다.
    • selfservice 내의 인스턴스가 아니라면 selfservice로 설정된 ip 주소로는 접근이 불가능하다.
    • 하지만 selfservice 내의 인스턴스끼리는 접근이 가능하다.
    • 위에 대한 이유는 외부로 노출되어 있는 gateway가 존재하지 않으며 selfservice network 자체가 외부로 노출이 안되기 때문에 어디서도 찾을 수가 없다.
    • 하지만 provider network 상의 특정 ip에 router가 설정이 되어 selfservice에 연결이 되어있기 때문에 floatingip로는 접근이 가능하다.

Port forwarding

  • PM 내부의 프로바이더 네트워크를 외부로 연결시키기 위해 필요한 방법이다.
iptables -I FORWARD -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
  • 위의 커맨드느 192.168.122.0/24 의 네트워크 대역에 대해 iptables에 추가하고 받아들이는 것을 허용하는 명령어로 따로 특정하여 provider network를 생성하였다면 192.168.122.0/24 를 알맞은 ip로 수정한다.
iptables -t nat -A PREROUTING -p tcp -d 10.90.149.153 --dport 25000 -j DNAT --to-destination 192.168.122.3:22
  • 위의 명령어는 외부로부터 10.90.149.153: 25000 으로 접속 되는 요청에 대해 192.168.122.3:22 로 redirection 시켜주는 명령어이다.

'Cloud > Openstack' 카테고리의 다른 글

Openstack 설치계획서  (0) 2020.10.08
Region & AZ  (0) 2020.10.08
Neutron  (0) 2020.10.08
Nova  (0) 2020.10.08
Placement  (0) 2020.10.08

관련글 더보기