透过 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 环境(目前版本为 Wallaby)

基本架构

一个 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/wallaby
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 上的 wallaby 版本所以填入 wallaby

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

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,可以根据自己需求选择要启用的服务。

到这里大部分的设定皆已经完成,在实际部署 Production 环境可以根据自己需求做一些细部的更改。
如果需要针对个别 service 设定档做更改及调整,在下一篇中会介绍如何使用 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

如果要安装 all-in-one 的话,可以透过 ansible/inventory/all-in-one 这个 inventory file。

实际部署

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 介面了。

最後使用帐号 admin 跟 /etc/kolla/passwords.yml" 中的keystone_admin_password``` 就可以登入进 Dashboard 了

Reference

Kolla-Ansible User Guide


<<:  #番外-让你的CSS好读起来!CSS命名方法论笔记

>>:  Day25:Dynamic Programming(DP) - 动态规划(上)

CSS选择器(Selector)-2(DAY9)

在上一篇我们认识了一些Selector,包括所有元素选择器、指定元素选择器、ID选择器和Class选...

D16 第八周 (回忆篇)

这礼拜进度开始落後,在写第七周作业的 todo list,自己後来才发现事件代理的用法,所以後面又重...

Day 04 建立关键字广告前,你所要谨记在心的事

很多人公司在设定广告活动时,常会犯了几个错,这些错也许不会造成什麽毁灭性的结果,但很有可能会每天浪费...

D21 - 走!去浏览器吃 好味双响 BOM DOM 饭

前言 铁人倒数十天!利用最後时间来分享浏览器,这里才是真正的战场。 在 ECMAScript 上并没...

DAY12 Kotlin基础 函式

欸!?这个不是在 hello world 的时候讲过了ㄇ?! 对。 其实函式还是有其他东西可以讲解的...