일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- libvirt
- cloud-init
- nfs-provisioner
- ceph
- yum
- HTML
- Kubernetes
- repository
- Octavia
- Linux
- cephadm
- archlinux
- awx
- kolla-ansible
- golang
- OpenStack
- grafana-loki
- Docker
- terraform
- Kubeflow
- KVM
- Arch
- k8s
- i3
- ceph-ansible
- Ansible
- pacman
- kolla
- port open
- ubuntu
- Today
- Total
YJWANG
[OpenStack] Octavia 프로젝트 구축 (Load Balancer) 본문
Kolla-Ansible을 이용해서 OpenStack에 Octavia를 구축하고자합니다.
버전 정보
OpenStack - wallaby
참고자료
https://docs.openstack.org/kolla-ansible/latest/reference/networking/octavia.html
https://github.com/openstack/kolla-ansible/blob/master/doc/source/reference/networking/octavia.rst
기존의 구축된 OpenStack에 Octavia를 추가하는 것이 아닌 OpenStack 구축까지 한 번에 진행하는 것으로 추가와 일부분 다를 수 있습니다.
Kolla-Ansible을 활용하여 기본 OpenStack을 구축하는 부분은 관련 포스팅을 참고 부탁드립니다.
https://yjwang.tistory.com/112
Octavia 배포
globals.yaml 수정
# grep -Ev "^$|^#" /etc/kolla/globals.yml
---
config_strategy: "COPY_ALWAYS"
kolla_base_distro: "ubuntu"
kolla_install_type: "binary"
openstack_release: "wallaby"
kolla_internal_vip_address: "10.99.99.25"
kolla_external_vip_address: "xxx.xxx.xxx.xxx"
network_interface: "ens2"
kolla_external_vip_interface: "ens4"
octavia_network_interface: "ens2"
network_address_family: "ipv4"
octavia_network_address_family: "{{ api_address_family }}"
neutron_external_interface: "ens3"
neutron_plugin_agent: "openvswitch"
openstack_logging_debug: "True"
enable_openstack_core: "yes"
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
enable_horizon_octavia: "{{ enable_octavia | bool }}"
enable_neutron_provider_networks: "yes"
enable_octavia: "yes"
octavia_auto_configure: yes
octavia_amp_flavor:
name: "amphora"
is_public: no
vcpus: 1
ram: 1024
disk: 5
octavia_amp_network:
name: lb-net
provider_network_type: vxlan
shared: true
subnet:
name: lb-subnet
cidr: "{{ octavia_amp_network_cidr }}"
#no_gateway_ip: no
enable_dhcp: yes
gateway_ip: "20.0.0.1"
allocation_pool_start: "20.0.0.2"
allocation_pool_end: "20.0.0.254"
octavia_amp_network_cidr: "20.0.0.0/24"
octavia_amp_image_tag: "amphora"
octavia_loadbalancer_topology: "SINGLE"
Octavia 인증서 생성
# kolla-ansible octavia-certificates
생성된 인증서 확인
# ls -l /etc/kolla/config/octavia/
total 20
-rw-r--r-- 1 root root 5284 Jul 6 16:19 client.cert-and-key.pem
-rw-r--r-- 1 root root 2045 Jul 6 16:19 client_ca.cert.pem
-rw-r--r-- 1 root root 2045 Jul 6 16:19 server_ca.cert.pem
-rw-r--r-- 1 root root 3326 Jul 6 16:19 server_ca.key.pem
배포 진행
# ./kolla-ansible -i <inventory-file> deploy
post-deploy 진행
admin-openrc.sh와 octavia-openrc.sh 파일을 생성합니다.
# ./kolla-ansible -i <inventory file> post-deploy
Amphora 이미지 생성
Amphora 이미지는 Octavia를 통해 Load Balacer를 생성 시 LB역할을 할 인스턴스를 생성하게 되는데 그때 Amphora 이미지를 이용하여 인스턴스가 생성됩니다.
필요 패키지 설치
# apt -y install debootstrap qemu-utils git kpartx
git 프로젝트 clone
# git clone https://opendev.org/openstack/octavia
diskimage-builder 모듈 설치 및 이미지 빌드
# pip install diskimage-builder
# cd octavia/diskimage-create
# ./diskimage-create.sh
위 과정이 끝나면 amphora 이미지 파일이 생성됩니다.
wallaby 버전 기준 octavia 계정을 통해 이미지를 업로드해야합니다.
# . /etc/kolla/octavia-openrc.sh
# openstack image create amphora-x64-haproxy.qcow2 --container-format bare --disk-format qcow2 --private --tag amphora --file amphora-x64-haproxy.qcow2 --property hw_architecture='x86_64' --property hw_rng_model=virtio
이미지 업로드가 완료되면 기본으로 생성된 external router의 external gateway 주소를 확인합니다.
# openstack router show demo-router -c external_gateway_info
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| external_gateway_info | {"network_id": "fe058c5c-0554-48ee-b868-d4c8a7a1bd13", "external_fixed_ips": [{"subnet_id": "c5942aef-89d3-496a-9c17-d11593183edd", "ip_address": "10.99.99.190"}], "enable_snat": true} |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
이후 Amphora 인스턴스와 Octavia Container 들이 통신하기 위해 routing을 추가합니다. (Ubuntu 기준)
모든 Controller Node에 추가해야 합니다. 만약 지정한 Octavia Interface가 routing없이 바로 통신 가능하다면 해당 작업은 필요 없습니다.
# cat << EOF >> /etc/netplan/octavia.yaml
network:
version: 2
renderer: networkd
ethernets:
br-ex:
routes:
- to: 20.0.0.0/24
via: 10.99.99.190
EOF
기본 라우터를 통헤 Amphora 인스턴스와 통신하기 위해 lb-subnet을 추가합니다.
# openstack router add subnet demo-router lb-subnet
이후 admin 유저에 octavia 권한을 추가하고 loadbalancer를 생성 후 테스트해봅니다.
# openstack role add --project "admin" --user "admin" load-balancer_admin