Skip to content

使用 kolla-ansible 部署 OpenStack

Posted on:2018年8月1日 at 02:46
  |   6 min read   |  

使用kolla-ansible部署”all-in-one” OpenStack Queens

准备

此教程在MacOS上完成,在开始前请预留8Gb内存,30G的磁盘空间,因为要下载相关资源文件,最好搭好梯子。

安装环境

MacOS上强烈推荐使用Homebrew 🔗, 然后使用命令brew tap caskroom/cask安装cask,安装完毕之后,安装上述两个Application只需要使用brew cask install virtualbox vagrant即可快速完成解压、安装等一系列人手操作。

下载Vagrantfile并启动

cd
mkdir -p workspace/learning/openstack
cd workspace/learning/openstack
curl -sS https://gist.github.com/Stark-X/d1e7ce4b8fcd2ea775249978237939f1
time vagrant up

Vagrantfile使用了CentOS 7 作为VM的image,还包含了一些初始化操作,如安装docker,花费时间视主机性能、网络而定。 * 作为参考,笔者使用的15版MBP(2.2Ghz i7 cpu, 16Gb mem, macOS High Sierra v10.13.6),已有CentOS镜像缓存的情况下,用了10分钟。

配置

globals.yml

位置:/etc/kolla/globals.yml 这个文件是kolla-ansible部署的关键配置文件,网络、组件开启关闭等所有的配置都由此文件决定。 以下几个配置只是其中一部分,OpenStack还有更多的参数可以改变,具体查看官方文档。

# Valid options are ['centos', 'debian', 'oraclelinux', 'rhel', 'ubuntu']
kolla_base_distro: "centos"
# Valid options are [ binary, source ]
kolla_install_type: "source"
# Valid option is Docker repository tag
openstack_release: "queens"
enable_haproxy: no
network_interface: eth0
network_external_interface: eth1
kolla_internal_vip_address: 10.0.2.15

部署

部署前检查

# 开启调试模式的输出回显,便于查看日志
# ref: https://github.com/ansible/ansible/issues/27078
export ANSIBLE_STDOUT_CALLBACK=debug
sudo kolla-ansible prechecks -i all-in-one

这个步骤会检查配置文件设置是否可用,实际上是底层调用了ansible-playbook执行了一系列的操作。

可能会遇到的问题:

Error: Hostname has to resolve to IP address of api_interface

检查/etc/hosts文件里面的主机名是否为127.0.0.1,更新”kolla_internal_vip_address”在globals.yml文件里的值。

TASK [haproxy : Checking if kolla_internal_vip_address and kolla_external_vip_address are not pingable from any node] failed

因为部署为”all_in_one”,不需要”HA Proxy”,编辑globals.yml,去掉”enable_haproxy”的注释,并把值改为”no”

部署

sudo kolla-ansible deploy -i all-in-one

部署时间与网络状况挂钩,globals.yml中enable_*为yes的组件越多,时间越长,另外,第一次部署会拉取需要的Docker镜像,可自行架设私有镜像仓库,更改docker配置使用私有镜像仓库,加快部署速度。

生成命令行控制文件

sudo kolla-ansible post-deploy -i all-in-one
# 加载环境信息
. /etc/kolla/admin-openrc.sh

执行完毕后,/etc/kolla/admin-openrc.sh 会被生成,使用cat命令可以查看到其中的环境信息,这些信息会被openstack client用于操作OpenStack。

Have fun

初始化demo环境

# 创建虚拟网络,创建flavor,上传模板等
bash /usr/share/kolla-ansible/init-runonce

执行完毕后,提示用以下命令创建一个demo实例。

openstack server create \\
    --image *** \\
    --flavor m1.tiny \\
    --key-name mykey \\
    --nic net-id=*** \\
    demo1

创建完毕后,执行openstack console url show demo1查看在线控制台的URL,可通过noVNC连接到实例的shell。 *在virtualbox设置nat端口映射 或者在虚拟机内执行命令sudo ip netns exec [NAME] ssh cirros@<ip>切换network namespace,ssh到目标实例。 另外,类似docker logs <container_name>,我们可执行命令openstack console log show demo1查看实例的日志。

登录Admin

获取密码

grep keystone_admin_password /etc/kolla/passwords.yml

登录Admin

Url: http://localhost:8080/auth/login/ 🔗 User: admin Password: *** *在virtualbox设置nat端口映射

其它

修正错误的配置

若发现配置错误,需要重新部署,可选择使用以下工具清理环境。

bash /usr/share/kolla-ansible/tools/stop-containers
bash /usr/share/kolla-ansible/tools/cleanup-containers
bash /usr/share/kolla-ansible/tools/cleanup-host
bash /usr/share/kolla-ansible/tools/cleanup-images
# Or
sudo  kolla-ansible destroy -i all-in-one --yes-i-really-really-mean-it && kolla-ansible deploy -i all-in-one

设定的IP无法访问

原本宿主机、虚拟机之间可通过192.168.56.101通讯,部署完成后,无法继续通讯了,这是因为Neutron接管了网络,放置到了不同的namespace,可通过ip netns看到两个新的network namespace,使用命令ip netns exec [NAME] ping <ip>验证。

OpenStack Client相关命令

以下列出部分OpenStack client的命令,可使用openstack [command] help查看相关的帮助信息。

Reference