Kolla?

部署 OpenStack 的方式和工具有很多,截至目前在网络上可以搜索到的部署方式和工具有:

  1. Fuel
  2. Devstack
  3. Diablo
  4. Stackops
  5. Crowbar
  6. Maas+Juju
  7. Rackspace Private Cloud
  8. Cisco OpenStack
  9. Puppetlab
  10. dodai-deploy
  11. General Bare-Metal Provisioning Framework
  12. Folsom
  13. Cobbler
  14. Openstack-Anvil
  15. Altai Private Cloud
  16. Rdo
  17. SaltStack
  18. TripleO
  19. Packstack
  20. Kolla

好多!!!(雾

在这么多的部署工具中,为什么我们选择了 Kolla 呢?不仅仅是因为它基本覆盖了全部的 OpenStack 组件,更重要的是 Kolla 是使用的 容器虚拟化技术 来部署 OpenStack。这将直接降低部署 OpenStack 的难度,以及避免运行环境重叠导致的各种未知错误。同时,使用 Kolla 部署的 OpenStack 可以很方便的升级版本而不用担心运行环境异常,因为所有服务均运行在容器中,不依赖于外部环境、大批量自动化部署而不用去每一个机器手动执行重复的操作。更多的,Kolla 是目前 OpenStack 部署方式中,更新以及适配速度最快、官方推荐的、最现代化的部署方式。

Kolla的优势和使用场景,体现在如下几个方面:

  • 原子性的升级或者回退OpenStack部署;
  • 基于组件升级OpenStack;
  • 基于组件回退OpenStack;

这里,我们予以拆分来理解:

Kolla的最终目标是为OpenStack的每一个服务都创建一个对应的Docker Image,通过Docker Image将升级的粒度减小到Service级别,从而使升级时,对OpenStack影响能达到最小,并且一旦升级失败,也很容易回滚。升级只需要三步:Pull新版本的容器镜像,停止老版本的容器服务,然后启动新版本容器。回滚也不需要重新安装包了,直接启动老版本容器服务就行,非常方便。

Kolla是通过Docker Compose来部署OpenStack集群的,现在主要是针对裸机部署的,所以在部署Docker Container时,默认的网络配置都是Host模式。

首先,只需要通过一个命令就可以把管理节点部署完成,这个命令是调用Docker Compose来部署OpenStack的所有服务,然后我们可以在每一个计算节点上通过Docker Compose安装计算节点需要的服务,就能部署一个OpenStack集群。因为Kolla的Docker Image粒度很小,它针对每个OpenStack服务都有特定的Image,所以我们也可以通过Docker Run来操作某个具体的OpenStack服务。

所以,我们采用了 Kolla 部署 OpenStack 的方案。相较于其它方案,此方案在快速构建 OpenStack 集群的同时还可以节省运维成本以及运维压力,实现了一举两得。


操作系统的选择

目前而言,Kolla Ansible 支持自动化部署的操作系统如下:

CentOsDebianRHELUbuntu
8bullseye8focal

CentOs 已经步入付费时代,CentOs 8 将成为最后一个可以白嫖的版本,RHEL 本身就是企业级产品。所以 Debian 或 Ubuntu 是最好的选择。本人选择了 Ubuntu,你也可以根据实际情况选择另外三个操作系统。


环境配置

Kolla 本身是基于容器部署的,所以我们需要准备 Docker 运行环境,这个很简单,一行命令解决:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun,现在的 Docker 安装脚本真的很人性化添加一个 --mirror Aliyun 便可以选择使用阿里云镜像源进行安装,比原先手动配置仓库快乐多了。

在 Docker 安装过程中,咱们也不能闲着,来配置下集群 Hostname、Hosts 以及 时间同步:

  • 在每个节点上分别使用 hostname set-hostname *名字* 来设置节点名称,注意节点名称不可以相同
  • 在每个节点上分别使用 vi /etc/hosts 来配置 hosts 文件,将每个节点的名称以及IP地址加入列表,!!!本步操作时一定要注意,不可以将本机节点指向的IP地址设置为 127.0.0.1,否则 RabbitMQ 将安装失败,因为在容器内部使用 127.0.0.1 访问将访问到容器本身的网络而不能访问到外部物理机!!!
  • 通过 Chrony 使用 阿里云授时服务器同步主机时间

等待 Docker 安装完成后便可以开始我们的 Kolla Ansbile 安装:

以下所有操作均在 Root 用户下执行

dnf install python3-devel libffi-devel gcc openssl-devel python3-libselinux

apt install python3-dev libffi-dev gcc libssl-dev

Kolla Ansible 安装脚本 基于 Python,所以我们可以采用 Virtual Environmen 的方式安装:

Using a virtual environment

You don't need to do anything.

sudo apt install python3-venv

python3 -m venv /path/to/venv
source /path/to/venv/bin/activate

pip install -U pip

pip install 'ansible==5.*'

当然你也可以选择不使用:

Not using a virtual environment

dnf install python3-pip
pip3 install -U pip
dnf install ansible

apt install python3-pip
pip3 install -U pip
apt install ansible

Kolla 要求 Ansible 的版本为 5.* 如果你用以上方式安装到了不合适的版本,可以选择使用 pip install -U 'ansible==5.*' 命令安装合适的版本。

创建 Kolla 配置文件夹:

sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla

创建 Ansible 配置:

mkdir -p /etc/ansible
cat >> /etc/ansible/ansible.cfg << EOF
[defaults]
host_key_checking=False
pipelining=True
forks=100
EOF

安装 Kolla Ansible 以及 DockerPython-OpenStackClient

Using a virtual environment

pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/master
pip install git+https://opendev.org/openstack/kolla-ansible@master docker
cp -r /path/to/venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp /path/to/venv/share/kolla-ansible/ansible/inventory/* .

Not using a virtual environment

pip3 install python-openstackclient -c https://releases.openstack.org/constraints/upper/master
pip3 install git+https://opendev.org/openstack/kolla-ansible@master docker
cp -r /usr/local/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp /usr/local/share/kolla-ansible/ansible/inventory/* .


配置文件详解

Inventory

前面提到过,Kolla 部署为 容器化 部署,服务充分解耦,可以很方便的部署到不同的位置。同时,Kolla 还将服务划分了不同的领域,方便运维人员快速部署服务。总的来说 Kolla 分为了 6 大领域:

  1. Control 控制节点
  2. Network 网络节点
  3. Compute 计算节点
  4. Storage 储存节点
  5. Monitoring 监控节点
  6. Deployment 部署节点

表现在配置文件中可以看到,配置文件被注释分为了三部分:

  1. 初始 6 大领域,定义了有哪些物节点以及怎么连接到这些节点
  2. 对于每一个服务(在 OpenStack 体系中被定义为 Project),例如 novaneutron,定义它们运行在哪些领域
  3. 对于每一个服务具体的模块,定义它们运行在哪一个服务下,例如 nova-schedulernova-novncproxy,运行在 nova 服务下

总的来看,这三个层次越往下粒度越小,甚至可以精准到每一个具体的服务,可谓是很贴心了。

You don't need to do anything.

Todo

global.yml

我们需要修改以下设置使得 OpenStack Core 可以运行:

不要忘记删除前面的 # 号哦,要不改了也没用←_←

修改 Kolla 镜像为基于 Ubuntu,你也可以选择基于 CentOs 或其它:

kolla_base_distro: "ubuntu"

修改安装类型为源码安装:

这只会影响OpenStack服务。基础设施服务总是“二进制的”。

事实证明,源代码版本比二进制版本更可靠。

kolla_install_type: "source"

修改内部网络使用的网卡:

network_interface: "eth0"

修改外部网络使用的网卡:

neutron_external_interface: "eth1

修改内部网络地址为 eth0 上一条未被占用的 IP:

kolla_internal_vip_address: "10.10.10.254"

如果你不想使用 OpenStack 服务负载均衡功能,你可以选择更改配置项 enable_haproxyno 来关闭负载均衡功能,同时设置 kolla_internal_vip_address 为 物理机 IP,来节省 IP 资源。

根据上一章的构想,我们还需要启动以下服务:

  1. Aodh:用于提供告警服务 enable_aodh: "yes"
  2. Ceilometer:用于提供监控服务 enable_ceilometer: "yes"
  3. Cinder:用于提供储存服务 enable_cinder: "yes"
  4. Gnocchi:用于为 Ceilometer 提供时序化的储存服务 enable_gnocchi: "yes"
  5. enable_neutron_qos: yes"enable_port_forwarding: "yes" 来启用 三层网络 QOS 和 三层网络端口转发

在 Kolla 中还提供了很多服务的安装,如果有需要你也可以手动开启它们。

如果你想更改可用区名称,请设置:

openstack_region_name: "EastChina"

激动人心的部署

使用如下命令来生成集群密码文件用于部署服务:

kolla-genpwd

kolla-ansible -i ./${inventory} bootstrap-servers

kolla-ansible -i ./${inventory} prechecks
kolla-ansible -i ./${inventory} deploy


就是嘛,有什么必要 PreCheck!

kolla-ansible -i ./${inventory} deploy

安装成功后,请输入:

kolla-ansible post-deploy

来生成必须的 admin-openrc.sh 身份验证文件来连接到 OpenStack 集群:

. /etc/kolla/admin-openrc.sh

你也可以用 cat admin-openrc.sh 来查看登录 Horizon 的账号密码。


You are free to use the following init-runonce script for demo purposes but note it does not have to be run in order to use your cloud. Depending on your customisations, it may not work, or it may conflict with the resources you want to create. You have been warned.

运行:

Using a virtual environment

/path/to/venv/share/kolla-ansible/init-runonce


Not using a virtual environment

/usr/local/share/kolla-ansible/init-runonce

来生成默认的网络、规格等配置。如上个提示所示,这不是必须的且有可能会生成你不需要的数据。如果你需要其中的数据,如:规格,建议先编辑 init-runonce 文件,修改以下内容:

# This EXT_NET_CIDR is your public network,that you want to connect to the internet via.
ENABLE_EXT_NET=${ENABLE_EXT_NET:-1}
EXT_NET_CIDR=${EXT_NET_CIDR:-'10.0.2.0/24'}
EXT_NET_RANGE=${EXT_NET_RANGE:-'start=10.0.2.150,end=10.0.2.199'}
EXT_NET_GATEWAY=${EXT_NET_GATEWAY:-'10.0.2.1'}

重新定义 L3 公有网络为你当前的网络环境。

以及修改其它配置项为你想要的配置,在此不再赘述。


结语

通过对 Kolla Ansible 的简单配置,我们可以很方便的部署出来一个强壮的云计算集群来实现各种云计算需求。但是,这还远远不够,OpenStack 是一个庞大的项目,想要实现更好的使用,还需要更多的探索与实践。


撒花~

最后修改:2022 年 02 月 25 日
如果觉得我的文章对你有用,请随意赞赏