透過 Kolla-Ansible 跟 Container 部署 OpenStack

透過 Kolla-Ansible 跟 Container 部署 OpenStack

OpenStack 早期在部署方面相當複雜也難以維護,但是在近期 DevOps 跟 Container 的概念熱門起來後,OpenStack Community 中也出現了透過 Container 跟 Ansible 部署 OpenStack 的方式。這種方式就是透過 Kolla 跟 Kolla-Ansible 實現。Kolla 提供可 Dockerfile 來 build OpenStack 所需要的 Docker images,Kolla-Ansible 則提供了一個部署這些 Container 所需要的 Ansible playbook。本篇文章將會介紹如何透過這個專案快速部署一個 Production Ready, High-availability 的 OpenStack 環境(目前版本為 Queens)

基本架構

一個 High-availability 的 OpenStack 環境基本上最少需要 4 個 node,3 個 controller node (ceph node) 加上至少一台的 compute node。每個 node 至少有兩個 interface。

Kolla-Ansible 將 OpenStack 網路分為幾種

  • API interface 為 OpenStack 內部個元件互相溝通還有存取 database 的介面,建議使用內部網路。
  • External VIP Interface 為 OpenStack 對外的 endpoint
  • Storage Interface 是 OpenStack VM 跟 Ceph 溝通的介面,建議使用 10G 以上的網路
  • Cluster Interface 是 Ceph 內部複製檔案的網路介面,也是建議使用 10G 以上的網路
  • Tunnel Interface 是 OpenStack VM 對 VM 網路溝通走的介面
  • Neutron External Interface 是提供 VM 對外網路的介面,floating IP 的 flat / vlan 網路也是走此介面,須為獨立的的介面上不能用 IP

除了 Neutron External Interface 需要為獨立的介面以外,其他網路都可以共用介面,預設壞帶入 network_interface 的值

事前準備

本篇範例使用官方 upload 到 DockerHub 的 image,若需要自行修改 image 需要架設 Docker Registry。

在要跑部署的機器上先下載 Kolla-Ansible 的 code 並且。

git clone https://github.com/openstack/kolla-ansible -b stable/queens
pip install -U ansible

將 kolla-ansible 設定檔放到 /etc/kolla 底下。

cp kolla-ansible/etc/kolla/ /etc/kolla

安裝 Ansible

安裝 Ansible 可以直接使用 Linux distro 的 package manager 安裝。

CentOS

sudo yum install epel-release
sudo yum install ansible

Ubuntu

sudo apt install ansible

設定環境

Kolla-Ansible 所有設定皆會放在 /etc/kolla/globals.yml 內。

編輯的時候記得先將要編輯的那行前的註解拿掉,一開始填入的值是預設值。

Kolla Options

kolla_install_type 指的是 OpenStack code 安裝的方式,binary 就是使用各個 distro 所包好的 binary 檔案,source 便是使用 OpenStack upstream 的 source code。這方面的選擇就因人而異,個人習慣都是選擇使用 source 的方式安裝

openstack_release 基本上就是 Kolla Image 所使用的 Docker repository tag,這篇範例因為是使用 DockerHub 上的 queens 版本所以填入 queens

# Valid option is Docker repository tag
openstack_release: "queens"

kolla_internal_vip_address 跟 kolla_internal_fqdn 是 OpenStack service 內部溝通用的 IP address 跟 FQDN,這裡根據每個人的環境不同會填入不同的 IP Address,這個 IP Address 要跟 API interface 在同一個 CIDR 並且是未被使用的 IP

kolla_external_vip_address 跟 kolla_external_fqdn 則是 OpenStack service 面向 public user 使用的 IP address 跟 FQDN

kolla_internal_vip_address: "192.168.113.0"

#kolla_internal_fqdn: "{{ kolla_internal_vip_address }}"

kolla_external_vip_address: "140.113.0.1"

kolla_external_fqdn: "openstack.igene.tw"

Docker Options

Docker Options 填入的是 Docker Registry 的一些認證跟位置設定,因為本篇範例是直接使用 DockerHub 上的 Image,所以保留註解即可。

Network Options

Network Options 的部分是要設定上面所提到各個不同網路所使用的 interface,這邊的 interface 名稱則是要根據機器所有的 interface 名稱做更改,如果有不一樣的地方也可以在 Ansible Inventory 做 override。

#kolla_external_vip_interface: "eth0"
#api_interface: "{{ network_interface }}"
#storage_interface: "enp2s0f0"
#cluster_interface: "enp2s0f1"
#tunnel_interface: "{{ network_interface }}"
#dns_interface: "{{ network_interface }}"

#neutron_external_interface: "eth1"

OpenStack Option

這裡可以選擇要啟用的 OpenStack Service,本篇教學會額外啟用 Ceph 跟 Cinder

enable_ceph: "yes"
enable_ceph_rgw: "yes"
enable_cinder: "yes"

Glance – Image Options

這裡我們因為啟用了 Ceph,會希望直接將 OpenStack 的 Image 存在 Ceph 中,所以要將 Ceph 的 backend 改成使用 Ceph

glance_backend_file: "no"
glance_backend_ceph: "yes"

Cinder – Block Storage Options

Cinder Volume 跟 Cinder Backup 也是會由 Ceph 提供,同樣將 backend 改成 Ceph

cinder_backend_ceph: "yes"

cinder_backup_driver: "ceph"

Nova – Compute Options

Nova 的儲存部分同樣也改為使用 Ceph

nova_backend_ceph: "yes"

到這裡大部分的設定皆已經完成,在實際部署 Production 環境可以根據自己需求做一些細部的更改。
如果需要針對個別 service 設定檔做更改及調整,可以參考這篇 在 Kolla-Ansible 使用 Custom Config

Ansible Inventory 設定

Ansible Inventoy 就根據自己所選擇各個 node 的 hostname 或是 IP address 填入,本篇範例會包含三台 controller node control01, control02 control03 和一台 compute node compute01,controller node 同時也是 Ceph 的 storage node,所以在 storage 的部分也是填入 controller node 的 hostname。

[control]
control01
control02
control03

[network]
control01
control02
control03

[inner-compute]

[external-compute]
compute01

[compute:children]
inner-compute
external-compute

[monitoring]
control01
control02
control03

[storage]
control01
control02
control03

實際部署

Kolla-Ansible 在設定完之後實際部署很簡單,只需要跑四個指令即可。

cd kolla-ansible
tools/generate_passwords.py

generate_passwords 這個 script 將會產生 OpenStack 使用的密碼並且填入 /etc/kolla/passwords.yml 這個檔案。

tools/kolla-ansible -i ansible/inventory/multinode bootstrap-servers

bootstrap-servers 將會在要部署的 node 做一些基本的準備,例如安裝必要的套件,Docker 等。

tools/kolla-ansible -i ansible/inventory/multinode prechecks

prechecks 將會根據設定檔做一些部署前基本的檢查,例如 VIP, port 是否都沒有人使用等。

tools/kolla-ansible -i ansible/inventory/multinode deploy

deploy 將會實際部署 OpenStack 環境,包含了 pull image, run image, 將 OpenStack 設定完成等步驟都會在這個 playbook 完成。跑的時間根據網路速度跟部署規模等不太一定,快的話 20 分鐘就能部署好一個 Production Ready, High-availability 的 OpenStack 環境。

如果 deploy 跑完沒有任何問題的話,可以使用自己的 browser 到 kolla_internal_vip_address 或 kolla_internal_fqdn 就可以看到 OpenStack 介面了。

OpenStack Login Page

最後使用帳號 admin 跟 /etc/kolla/passwords.yml" 中的keystone_admin_password“` 就可以登入進 Dashboard 了

Reference

Kolla-Ansible User Guide


Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.