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)
Table of Contents
基本架構
一個 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
,controller node 同時也是 Ceph 的 storage node,所以在 storage 的部分也是填入 controller node 的 hostname。control01, control02 control03
` 和一台 compute node
`compute01
[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
將會在要部署的 node 做一些基本的準備,例如安裝必要的套件,Docker 等。bootstrap-servers
tools/kolla-ansible -i ansible/inventory/multinode prechecks
將會根據設定檔做一些部署前基本的檢查,例如 VIP, port 是否都沒有人使用等。prechecks
tools/kolla-ansible -i ansible/inventory/multinode deploy
將會實際部署 OpenStack 環境,包含了 pull image, run image, 將 OpenStack 設定完成等步驟都會在這個 playbook 完成。跑的時間根據網路速度跟部署規模等不太一定,快的話 20 分鐘就能部署好一個 Production Ready, High-availability 的 OpenStack 環境。deploy
如果
跑完沒有任何問題的話,可以使用自己的 browser 到 kolla_internal_vip_address 或 kolla_internal_fqdn 就可以看到 OpenStack 介面了。deploy
最後使用帳號 admin 跟
就可以登入進 Dashboard 了/etc/kolla/passwords.yml" 中的
`keystone_admin_password
Reference
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.