阿里云上安装 OpenStack 是什么体验

阿里云上跑火车(安装 OpenStack Train 版本),猜猜最终花了多少钱?

前言

前面给大家提供了用虚拟机安装 OpenStack 的镜像,虽然已经很简便了,但还是略显笨重。一来镜像文件比较大,二来个人电脑资源比较有限,体验不是很好。

最最重要的是,使用个人电脑没法展示 Kolla 的真正实力,多节点安装

为了让大家能充分体验到云计算带来的便利,我把目光盯上了公有云。

本期先介绍基本操作,仍然是部署一个 All-In-One 的环境。

选择阿里云

国内首选的公有云当然是阿里云了,我其实很早就买了个阿里云的云服务器,但是一直没充分利用,这次虽然配置还不够来搭建环境,但是正好可以拿来构建镜像。

如果你是新用户当然要先去 阿里云 注册账号啦,新用户首购优惠幅度会比较大,可以等到促销的时候下手。

注意!!:本次演示用的是抢占式按量付费虚机,按照规则,在阿里云有任何消费,你就不属于新用户了。所以,如果你想利用新用户优惠买个云主机长期使用,务必请先把包年包月的服务器先买好,以免丧失了新用户的优惠资格。切记!切记!

准备出发!

准备工作

因为 Kolla 的镜像源存放在 docker hub,在云主机上直接访问是比较慢的(时间就是金钱啊!),并且没有提供最新的 OpenStack 版本 train 构建。

这次我是通过 kolla 自行构建了最新的镜像。并且上传到阿里云的容器镜像服务里,这样在阿里云的云主机里就可以享受内网的速度,非常快的拉取镜像了。

构建镜像还踩了点小坑,具体过程后续有机会再详述,就不在本文赘述了。

创建 ECS

选择计费方式

来到阿里云的 ECS 创建页面,可以看到有 3 种计费类型:

  • 包年包月
  • 按量付费
  • 抢占式实例

用 Kolla 部署 OpenStack 需要有 8GB 内存,按此配置,包年包月的价格其实不低了,也没那个必要。

按量付费,0.5 元/小时,已经能接受了。

别急,切换到抢占式实例,一个小时 0.07 元,不用四舍五入,这也等于不要钱好么!

阿里云创建ECS

果断升级到 4 vCPU 16 GiB 的配置吧。

相同的配置在不同的区域价格可能会有差别

选择镜像

选择最新的 CentOS 7.7 64位,取消勾选“安全加固”,我们只是临时测试,用不上:

镜像选择

选择 VPC 和交换机

默认情况下,阿里云为我们提供了默认的网络,但是这里虚机需要用到 2 块网卡,只有选择 VPC 网络后,才能支持添加弹性网卡。

选择VPC和交换机

VPC 网络和交换机参考下面的步骤创建。

创建 VPC 和交换机

依次填写信息:

  1. VPC 名字
  2. 交换机名字
  3. 交换机的可用区
  4. 交换机的地址段

创建VPC和交换机

VPC 每个区域内一个即可,所以地址段默认分的比较大,/16 ,交换机是每个可用区一个,地址段默认是 /24,每个可用区的地址段不能用冲突。多个可用区的交换机可以接到同一个 VPC 里面。

交换机必须和 ECS 在同一个可用区,如果 ECS 随机到了其它可用区,可以再去建一个交换机。

配置公网和安全组

必须要分配公网 IP,不然我们没法访问这个虚机了:

设置公网IP

勾选公网 IP 后,会多出来收费方式。不用担心公网流量的费用,拉取镜像的时候都是走的内网流量。只有从云服务器流出的流量才会收费。所以可以忽略不记。

勾选安全组,放开 80443 端口:

设置安全组

注意,安全组的配置是独立于 ECS 的,下次再用到这个默认安全组的时候,就不用再次开启了。

增加辅助网卡

Kolla 必须要有 2 块网卡,所以我们这里必须要再增加一块弹性网卡:

添加辅助网卡

实际测试中,并没有用到它,所以我们暂时不关心它的配置

密码和主机名配置

登录凭证按个人习惯,选择密钥对或者密码:

设置密码

建议使用密钥方式,更安全也更方便一点。

配置实例名和主机名,实例名是在阿里云网页上看到的名字,主机名是虚机内部的 hostname,如果虚机有多个的情况下,还是有必要配置一下。

这次我们仍然是单节点 All-In-One,所以主机名无所谓。

其它配置无需修改,直接确认订单。

回到控制台,等待实例状态变成 运行中

安装部署工具

从 SSH 登录到云服务器里,开始下面的步骤。

安装 docker-ce

CentOS7 系统自带的软件源里的 docker 版本比较低,我们需要安装 docker-ce。先配置安装源。

先去 阿里云镜像站,选择 容器,然后选择 docker-ce,按照页面帮助操作即可:

# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# Step 4: 开启Docker服务
sudo service docker start

安装 Ansible

sudo yum install -y ansible

安装 kolla-ansible

因为我用的是最新的 kolla 构建的镜像,对应的 kolla-ansible 貌似还没有发布到 pypi 上,所以这里我们选择从源码安装。

到我发此文时,新版本的 kolla-ansible 已经发布,所以可以直接安装:

pip install kolla-ansible

原文仍保留,以作为参考

先安装 git

sudo yum -y install git

克隆 kolla-ansible 源码,从国内的镜像站下载:

git clone http://git.trystack.cn/openstack/kolla-ansible

# 下载完毕后直接安装
pip install kolla-ansible/

注意到后面的斜杠 /,表示针对本地目录安装

配置 Kolla

在前面的 iso 镜像中,一些基础配置被合入到了系统启动脚本里,这里必须要手动执行了。

拷贝 /etc/kolla

先把 kolla-ansible 安装后生成的配置文件拷贝到 /etc/kolla/ 下:

mkdir /etc/kolla
cp /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/

生成密码

执行:

kolla-genpwd

执行完成后,所有的密码会存在 /etc/kolla/passwords.yml 中。

注意: 我在这里遇到个版本问题:

这个错误在我后面的测试中没有出现,应该已经被修复了。保留内容供参考。

# kolla-genpwd
Traceback (most recent call last):
  File "/usr/bin/kolla-genpwd", line 10, in <module>
    sys.exit(main())
  File "/usr/lib/python2.7/site-packages/kolla_ansible/cmd/genpwd.py", line 133, in main
    fernet_keys, hmac_md5_keys)
  File "/usr/lib/python2.7/site-packages/kolla_ansible/cmd/genpwd.py", line 67, in genpwd
    private_key, public_key = generate_RSA()
  File "/usr/lib/python2.7/site-packages/kolla_ansible/cmd/genpwd.py", line 52, in generate_RSA
    format=serialization.PublicFormat.OpenSSH
  File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/rsa.py", line 514, in public_bytes
    self._rsa_cdata
  File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1706, in _public_key_bytes
    return self._openssh_public_key_bytes(key)
  File "/usr/lib64/python2.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1740, in _openssh_public_key_bytes
    serialization._ssh_write_mpint(public_numbers.e) +
AttributeError: 'module' object has no attribute '_ssh_write_string'

cryptography 最新版本(2.8)有点兼容问题,重新卸载安装一个比较旧的版本:

pip uninstall cryptography
pip install "cryptography==2.7"

配置 /etc/kolla/globals.yml

需要修改的配置项如下:

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


# This should be a VIP, an unused IP on your network that will float between
# the hosts running keepalived for high-availability. If you want to run an
# All-In-One without haproxy and keepalived, you can set enable_haproxy to no
# in "OpenStack options" section, and set this value to the IP of your
# 'network_interface' as set in the Networking section below.
#kolla_internal_vip_address: "10.10.10.254"
kolla_internal_vip_address: "192.168.1.100"

docker_registry: "registry.cn-shanghai.aliyuncs.com"
docker_namespace: "davycloud"
docker_registry_insecure: "no"

除了 kolla_internal_vip_address 地址段是和你创建 ECS 时选择的 VPC 对应,其它配置项必须保持一致。

注意 镜像是在阿里云的 华东2(上海) 中的虚机内创建的,所以当时上传到了 cn-shanghai 的 registry。如果虚机也在同一个 VPC,可以配置为 VPC 的内网地址 registry.cn-shanghai.aliyuncs.com

实际测试结果,阿里云内即使不在同一个 VPC 拉取速度也很快。

开始部署

整体的部署流程和前面是一样的,唯一的区别在于 docker 镜像需要从 registry 中拉取。

虽然这个步骤在 deploy 的阶段会自动执行,但是仍然推荐单独执行下面的子命令:

kolla-ansible pull

这样可以避免安装过程中再发现镜像拉取的问题,引起不必要的麻烦。默认情况下差不多几分钟即可完成。

具体哪些镜像会被拉取是由 /etc/kolla/globals.yml 中启用的服务决定的。

任务完成后,查看默认会拉取的镜像列表:

# docker images
REPOSITORY                                                                                TAG                 IMAGE ID            CREATED             SIZE
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-compute                train               bd289389e057        3 days ago          1.81GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-glance-api                  train               c5f4f437fe90        4 days ago          1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-libvirt                train               c5afcfec7d0f        4 days ago          1.2GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-placement-api               train               56f706e9bd1a        4 days ago          1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-novncproxy             train               5fb9e0ab37ee        4 days ago          1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-api                    train               3187c2156d8d        4 days ago          1.08GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-conductor              train               b0ec4052f082        4 days ago          1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-ssh                    train               619985ecbd4c        4 days ago          1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-nova-scheduler              train               c2f8087e4786        4 days ago          1.05GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-kolla-toolbox               train               efd325bc7752        4 days ago          831MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-horizon                     train               24a60179a9d9        4 days ago          1.21GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-l3-agent            train               b6affea43948        4 days ago          1.08GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-openvswitch-agent   train               ee776c6af139        4 days ago          1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-server              train               7c26e6b47bea        4 days ago          1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-metadata-agent      train               1e5f0b221b41        4 days ago          1.04GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-rabbitmq                    train               837b834dc195        4 days ago          486MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-neutron-dhcp-agent          train               e143344ef32d        4 days ago          1.04GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-openvswitch-db-server       train               f6b855451cb8        4 days ago          422MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-openvswitch-vswitchd        train               de520a25d10c        4 days ago          422MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-heat-api                    train               ecddc82ba63d        4 days ago          1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-fluentd                     train               6f8d5a326d8e        4 days ago          687MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-heat-engine                 train               a4ec9714ecb3        4 days ago          1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-heat-api-cfn                train               4a53a1160b75        4 days ago          1.07GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-haproxy                     train               a85706a03d0f        4 days ago          430MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-keepalived                  train               c3bddac3ceed        4 days ago          411MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-memcached                   train               91eec81ebb43        4 days ago          405MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-cron                        train               7586cd069cb3        4 days ago          405MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-mariadb                     train               46fe8c756ebe        4 days ago          594MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-chrony                      train               9984c83c211a        4 days ago          405MB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-keystone-fernet             train               e74fe5bdef6c        4 days ago          1.03GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-keystone-ssh                train               f9744dcb500f        4 days ago          1.03GB
registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-keystone                    train               216e5b2be1af        4 days ago          1.03GB

注意,因为 kolla 中支持的镜像众多,不可能全部在阿里云上构建,所以如果你启用了其它服务,不能保证有对应的镜像存在。如果想要了解我是如何构建镜像的,请继续关注我。

其它部署命令和以前一样,就是 3 个命令依次执行即可:

kolla-ansible prechecks
kolla-ansible deploy
kolla-ansible post-deploy

整个安装过程就不赘述了。相较于在个人电脑上使用 VirtualBox,阿里云的 ECS 性能要好很多,deploy 耗时 10 分钟左右就搞定了。

这充分展示了,利用云平台真的可以显著得提高效率。复杂如 OpenStack 这样的系统也可以在云上快速完成搭建。虽然没什么实用,但是如果是作为演示或者是教学,显然要比自己去准备服务器好多了。

使用 openstack 客户端的方法

因为宿主机中没有安装 OpenStack 的客户端程序,所以我在自己构建的那个系统里加了一个 bash 脚本去模拟了 openstack 命令,其实也不用那么麻烦,一行命令就能搞定,先把镜像拉取下来:

docker pull registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-openstack-base:train

这个 centos-binary-openstack-base 镜像中包含了所有 OpenStack 相关的客户端,它也是所有 OpenStack 服务的基础镜像,换句话说,其它所有 OpenStack 服务容器中都是可以用 openstack 命令的,选择这个基础镜像只是为了避免无意中启动了其它不该运行的服务引起不必要的麻烦。

然后我们用下面这样一行命令即可启动一个临时容器:

docker run --rm -it -v /etc/kolla/admin-openrc.sh:/admin-openrc.sh:ro registry.cn-shanghai.aliyuncs.com/davycloud/centos-binary-openstack-base:train bash

# 下面是在容器内执行
()# source /admin-openrc.sh
()# openstack
(openstack) service list

简单介绍一下这几个选项:

  • --rm 退出容器的时候把容器删掉
  • -it 需要和容器在终端中交互的时候必须带上,别问,问我也解释不清
  • -v /etc/kolla/admin-openrc.sh:/admin-openrc.sh:ro 把宿主机上的文件挂载到容器内,:ro 表示容器对这个文件是只读的

其它方面也没有什么特别要介绍的了。可以愉快地玩耍了。

注意:计算节点的 virt_type = kvm 仍然需要修改,具体参考我前面的文章。

记得释放实例!

差点忘了最重要的事情,测试完成后别忘了去释放实例,以免一直扣费。

抢占式实例是保证实例有一个小时的稳定使用,不代表一个小时之后就会回收。如果供应比较大的情况下,系统可能会长期不回收你的实例,那就要一直扣费了!

记得释放实例!

记得释放实例!

记得释放实例!


对操作过程有不明的可以在 B站看视频

如果本文对你有帮助,请 点赞分享在看 来一波。

Davy
Davy
学习📚 技术👨‍💻 投资📈

一些心得体会,希望能对你有所帮助🚀。