Octavia 수동 설치 및 DevStack 배포 가이드

환경: Pike, CentOS 7

Octavia 수동 설치

1. 패키지 설치


yum -y install \
  openstack-octavia-api.noarch \
  openstack-octavia-common.noarch \
  openstack-octavia-health-manager.noarch \
  openstack-octavia-housekeeping.noarch \
  openstack-octavia-worker.noarch \
  openstack-octavia-diskimage-create.noarch

# Load Balancer CLI 확장
git clone https://github.com/openstack/python-octaviaclient.git -b stable/pike
pip install -r requirements.txt -e .

2. 데이터베이스 생성


mysql> CREATE DATABASE octavia;
mysql> GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'localhost' IDENTIFIED BY 'OCTAVIA_DBPASS';
mysql> GRANT ALL PRIVILEGES ON octavia.* TO 'octavia'@'%' IDENTIFIED BY 'OCTAVIA_DBPASS';
mysql> FLUSH PRIVILEGES;

3. Keystone 인증 구성


openstack user create --domain default --password-prompt octavia
openstack role add --project service --user octavia admin
openstack service create load-balancer --name octavia
openstack endpoint create octavia public http://192.168.100.10:9876 --region RegionOne
openstack endpoint create octavia admin http://192.168.100.10:9876 --region RegionOne
openstack endpoint create octavia internal http://192.168.100.10:9876 --region RegionOne

4. 보안 그룹 생성


# Amphora VM 통신을 위한 보안 그룹
openstack security group create lb-mgmt-sec-grp --project <admin_project_id>
openstack security group create lb-mgmt-sec-grp --project <service_project_id>

# Health Manager 통신용 보안 그룹
openstack security group create lb-health-mgr-sec-grp --project <admin_project_id>
openstack security group create lb-health-mgr-sec-grp --project <service_project_id>

5. LB 관리 네트워크 생성


openstack network create lb-mgmt-net
openstack subnet create \
  --subnet-range 192.168.0.0/24 \
  --allocation-pool start=192.168.0.2,end=192.168.0.200 \
  --network lb-mgmt-net lb-mgmt-subnet

6. CA 인증서 생성


source /opt/pike/octavia/bin/create_certificates.sh /etc/octavia/certs/ /opt/pike/octavia/etc/certificates/openssl.cnf

7. Health Manager 네트워크 포트 생성


neutron port-create --name octavia-health-manager-standalone-listen-port \
  --security-group <lb-health-mgr-sec-grp> \
  --device-owner Octavia:health-mgr \
  --binding:host_id=<hostname> lb-mgmt-net \
  --tenant-id <octavia_service>

ovs-vsctl --may-exist add-port br-int o-hm0 \
  -- set Interface o-hm0 type=internal \
  -- set Interface o-hm0 external-ids:iface-status=active \
  -- set Interface o-hm0 external-ids:attached-mac=<MAC> \
  -- set Interface o-hm0 external-ids:iface-id=<PORT_ID>

8. Health Manager IP 설정


# /etc/octavia/dhcp/dhclient.conf
request subnet-mask,broadcast-address,interface-mtu;
do-forward-updates false;

ip link set dev o-hm0 address <MAC>
dhclient -v o-hm0 -cf /etc/octavia/dhcp/dhclient.conf

9. SSH 키 생성


mkdir -p /etc/octavia/.ssh
ssh-keygen -b 2048 -t rsa -N "" -f /etc/octavia/.ssh/octavia_ssh_key
nova keypair-add --pub-key=/etc/octavia/.ssh/octavia_ssh_key.pub octavia_ssh_key --user <user_id>

10. Amphora 이미지 생성


octavia-diskimage-create.sh -i centos
openstack image create amphora-x64-haproxy \
  --public \
  --container-format=bare \
  --disk-format qcow2 \
  --file /opt/pike/octavia/diskimage-create/amphora-x64-haproxy.qcow2 \
  --tag amphora

11. Octavia 설정 파일 수정


[DEFAULT]
transport_url = rabbit://stackrabbit:admin@172.18.128.109:5672/
api_handler = queue_producer
bind_host = 172.18.128.109

[api_settings]
bind_port = 9876

[database]
connection = mysql+pymysql://root:admin@127.0.0.1:3306/octavia

[health_manager]
bind_port = 5555
bind_ip = 192.168.0.7
controller_ip_port_list = 192.168.0.7:5555
heartbeat_key = insecure

[certificates]
ca_private_key_passphrase = foobar
ca_private_key = /etc/octavia/certs/private/cakey.pem
ca_certificate = /etc/octavia/certs/ca_01.pem

[haproxy_amphora]
server_ca = /etc/octavia/certs/ca_01.pem
client_cert = /etc/octavia/certs/client.pem
base_path = /var/lib/octavia
base_cert_dir = /var/lib/octavia/certs
connection_max_retries = 1500
connection_retry_interval = 1
rest_request_conn_timeout = 10
rest_request_read_timeout = 120

[controller_worker]
amp_boot_network_list = 6fd0afdc-c683-4157-8354-dcdd43011dad
amp_image_tag = amphora
amp_secgroup_list = d4d7a2bb-efc4-4a0f-bb6b-efcc6f9797d3
amp_flavor_id = 0b8517a7-0a9c-4d66-b9f1-60afd2e3061c
amp_image_owner_id = 542a9377317a4fe081c9bac54780eb75
amp_ssh_key_name = octavia_ssh_key
network_driver = allowed_address_pairs_driver
compute_driver = compute_nova_driver
amphora_driver = amphora_haproxy_rest_driver
workers = 2
amp_active_retries = 100
amp_active_wait_sec = 2
loadbalancer_topology = ACTIVE_STANDBY

[house_keeping]
load_balancer_expiry_age = 3600
amphora_expiry_age = 3600

[keystone_authtoken]
memcached_servers = 172.18.128.109:11211
project_domain_name = Default
project_name = service
user_domain_name = Default
password = admin
username = octavia
auth_url = http://172.18.128.109/identity
auth_type = password

12. 데이터베이스 마이그레이션


octavia-db-manage upgrade head

13. 서비스 시작


systemctl start octavia-api octavia-worker octavia-health-manager octavia-housekeeping

14. Horizon 대시보드 설정


git clone https://github.com/openstack/neutron-lbaas-dashboard.git -b stable/pike
pip install -r requirements.txt -e .
cp /opt/pike/neutron-lbaas-dashboard/neutron_lbaas_dashboard/enabled/_1481_project_ng_loadbalancersv2_panel.py /opt/pike/horizon/openstack_dashboard/enabled/
/opt/pike/horizon/manage.py collectstatic
/opt/pike/horizon/manage.py compress
systemctl restart apache2

15. Neutron 설정 수정


# /etc/neutron/neutron.conf
[DEFAULT]
service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,lbaasv2

[octavia]
base_url = http://172.18.128.109/load-balancer
request_poll_timeout = 3000

# /etc/neutron/neutron_lbaas.conf
[service_providers]
service_provider = LOADBALANCERV2:Octavia:neutron_lbaas.drivers.octavia.driver.OctaviaDriver:default

# /etc/neutron/services/loadbalancer/haproxy/lbaas_agent.ini
[DEFAULT]
user_group = nobody
interface_driver = openvswitch
ovs_use_veth = False

[haproxy]
user_group = nobody

# Neutron 서비스 재시작
systemctl restart neutron-server

DevStack 배포

local.conf 파일 예시:


[[local|localrc]]
HOST_IP=172.18.128.109
RECLONE=no
DEST=/opt/pike
LOGFILE=$DEST/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=$DEST/logs

DOWNLOAD_DEFAULT_IMAGES=False
IMAGE_URLS="http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img"

GIT_BASE=http://git.trystack.cn
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/sice-html5.git

ADMIN_PASSWORD=admin
DATABASE_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=$ADMIN_PASSWORD

ENABLED_SERVICES+=,q-lbaasv2
ENABLED_SERVICES+=,octavia,o-cw,o-hk,o-hm,o-api
enable_plugin neutron-lbaas https://git.openstack.org/openstack/neutron-lbaas
enable_plugin octavia https://git.openstack.org/openstack/octavia
enable_plugin neutron-lbaas-dashboard https://github.com/openstack/neutron-lbaas-dashboard
disable_service n-net
enable_service q-svc q-agt q-dhcp q-l3 q-meta neutron
enable_service q-fwaas q-vpn

참고: 원문 블로그 게시물 (https://blog.csdn.net/jmilk/article/details/81279795)

태그: openstack Octavia Pike LoadBalancer CentOS7

7월 8일 18:25에 게시됨