kolla-ansible部署openstack yoga版本

Posted 上海一亩地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kolla-ansible部署openstack yoga版本相关的知识,希望对你有一定的参考价值。

目录

kolla介绍

简介

kolla 的使命是为 openstack 云平台提供⽣产级别的、开箱即⽤的交付能⼒。kolla 的基本思想是⼀切皆容器,将所有服务基于 Docker 运 ⾏,并且保证⼀个容器只跑⼀个服务(进程),做到最⼩粒度的运⾏ docker。 kolla 要实现 openetack 部署总体上分为两步,第⼀步是制作 docker 镜像,第⼆步是编排部署。因此,kolla 项⽬⼜被分为两个⼩项⽬: kolla、kolla-ansible 。

kolla 的优势

kolla 的优势主要得益于容器技术:

  1. 得益于成熟的部署⼯具 ansible 和 docker,部署快速且稳定。
  2. ⼀个容器只跑⼀个服务,所以能将 openstack 服务控制到很⼩的粒度。
  3. 可以以组件为单位进⾏升级和回滚,例如升级 nova 组件,使⽤ kolla-ansible -i /path/to/inventory -t nova 命令即可。
  4. kolla 采⽤⼀切皆容器的基本思想,所以只需操作系统与 docker 兼容,从⽽规避了很多安装包依赖冲突的问题。
  5. ⽬前 kolla 项⽬在社区内的热度相对较⾼,社区⽀持更好。

kolla 的缺点

  1. 完全依赖于 docker ,docker 的不稳定性会给整个环境带来巨⼤的灾难,不过⽬前 docker 已经问题很少了。
  2. 使⽤ kolla 部署好云平台后,给开发的 debug 和运维的故障排查会带来更多的复杂度,这个问题也可能通过写⼀个简单的 client 解 决。

安装前的环境配置

这篇文章不是小白手册,不会教您如何使用KVM,设置网络,挂载硬盘,创建LVM等运维手段,需要您有一定的功底。底子太薄了,我就是写10万字也讲不完。

节点规划

计划用的是KVM创建了3台虚拟机。

  1. 一台作为openstack的manager管理节点,上面跑了openstack的keystone身份认证和RabbitMQ、etcd等基础组件,是openstack的命根子。往后的集群扩容都要连接manager的。CPU核心要足够用,内存要足,网速还要好。存储要求不高,只要一个系统盘,100GB也就够了。
  2. 一台作为计算节点,是专门运行云服务器的。计算节点的特点是cpu核心和内存要大。存储几乎没要求,云服务器的系统盘和块存储、对象存储、镜像快照存储都由另一台节点提供。
  3. 一台作为存储节点,上面运行cinder、glance、swift等openstack存储组件。所以这类存储节点的特点就是磁盘大,网络快(不然虚拟机访问他的系统盘岂不是特别卡?)。

宿主机安装kvm

Debian或Ubuntu安装KVM的方法

sudo apt update
sudo apt -y install qemu qemu-system qemu-kvm virt-manager bridge-utils vlan

KVM中先创建两个NAT的虚拟网络设备

在创建虚拟机前先创建两张NAT类型的虚拟网卡。
第一个网络设备取名openstack,用于openstack各个组件的endpoint通信。网段是10.0.0.0/24
第二个网络设备取名public,用于云服务器的公网访问。网段是192.168.100.0/24

虚拟机硬件规划。

系统镜像使用Ubuntu-20.04-desktop,每个虚拟机都是用之前创建的这两个虚拟网卡。
硬件规划:

  1. 主机名:kolla-manager。算力:4核8GB。硬盘:200GB系统盘。网络:两个网卡都使用。IP分别是10.0.0.201和192.168.100.201
  2. 主机名:kolla-compute1。算力:6核16GB。硬盘:200GB系统盘。网络:两张网卡都使用。IP分别是10.0.0.202和192.168.100.202
  3. 主机名:kolla-storage。算力:2核4GB,硬盘200GB系统盘,另外添加两个250GB的额外硬盘,后面会把这两块盘合并成一个500GB的VG。网络:两张网卡都使用。(其实只用那个叫openstack的网卡就够了,再加一个不吃亏)IP分别是10.0.0.203和192.168.100.203

OS安装完成后的系统配置更改

安装OS的时候只能选择一个网卡和一个磁盘,所以等安装完OS后请立刻关机,并在硬件汇总添加第二章网卡,storage存储设备添加500GB硬盘设备。
再次开机,并做以下设置

# 设置主机名
hostnamectl set-hostname --static kolla-manager # 第一台
hostnamectl set-hostname --static kolla-compute1 # 第二台
hostnamectl set-hostname --static kolla-storage # 第三台

# 修改root密码
sudo passwd root
新密码:123456

# 修改ip
# 可以图形化修改,以下是命令行修改ip
ip -a   # 查看网络接口名

# 编辑netplan。以第一台的配置为例
vim /etc/netplan/01-network-manager-all.yaml
------------------------------------------------
network:
  version: 2
  renderer: NetworkManager
  # 新增
  ethernets:
   enp1s0: # 这是第一个网络设备名,这个设备名是通过ip a 命令获取的。
    dhcp4: no
    addresses: [10.0.0.201/24]
    optional: true
    gateway4: 10.0.0.1
    nameservers:
     addresses: [10.0.0.1]
   enp6s0: # 这是第二个网络设备名
    dhcp4: no
    addresses: [192.168.100.201/24]
    optional: true
    gateway4: 192.168.100.1
    nameservers:
     addresses: [192.168.100.1]


# 关闭防火墙
ufw disable

# 更新系统包
apt -y update && apt -y full-upgrade
apt -y install ssh vim git
apt -y install python3-dev libffi-dev gcc libssl-dev
vim /etc/ssh/sshd_config
# 修改PermitRootLogin,允许root用户通过密码登录
PermitRootLogin yes

# 重启ssh
systemctl restart ssh
systemctl enable ssh

storage节点配置VG(Volume Group)

一下操作在storage(10.0.0.203)上执行

# storage节点上创建一个500GB的VG
apt -y install lvm2
pvcreate /dev/vdb /dev/vdc
vgcreate cinder-volumes /dev/vdb /dev/vdc

不要自己擅自安装docker!

使用kolla-ansible部署openstack前,尽量保证各个节点的操作系统纯净,不要私自安装docker,不要私自修改GPG key。否则会导致kolla-ansible无法运行,最终只能逼着你去重装系统。
kolla-ansible会自动帮我们安装全套的运行环境,包括docker!!!

kolla安装openstack

安装Docker SDK

docker SDK的作用就是,ansible通过每台节点上的docker SDK来操作各个节点上的docker引擎,进而操作镜像和容器。所以每台机器上都要有安装这个docker SDK。
本来kolla-ansible会自动安装这个Docker SDK,但是我实际安装时发现网络不佳,导致Kolla-ansible经常跑失败。所以提前通过清华源安装好docker SDK后,就能保证kolla-ansible的100%成功。
以下操作每台机器都执行

# 安装sshpass
apt -y install sshpass # ansible依赖sshpass
apt -y install python3-dev libffi-dev gcc libssl-dev

# 安装python pip和venv
apt -y install python3-pip python3-venv

# 下载Docker SDK.如果这一步报错,可能是网络不良,重试几次就行了。
# 其实这一步是在kolla-ansible -i ./multinode bootstrap-servers中ansible的一个step
# 如果我们提前做了,后面就不会因为网络不良而报错

# 下方这个命令请在3台节点上都执行一下!!
pip3 install docker -i https://pypi.tuna.tsinghua.edu.cn/simple

安装配置Ansible

我们计划将manager节点上进行kolla部署,以下操作只在10.0.0.201上执行。



# 生成虚拟环境
python3 -m venv ~/venv3
source ~/venv3/bin/activate
pip install -U pip wheel setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple

# 安装ansible
pip install 'ansible>=4,<6' -i https://pypi.tuna.tsinghua.edu.cn/simple

# 新增一个配置文件,让ansible不要检查known host key
vim ~/ansible.cfg
----------------------------------
[defaults]
host_key_checking=False
pipelining=True
forks=100

下载kolla-ansible 14.0.0版本,并安装Galaxy依赖。

# 供github上下载kolla-ansible,yoga分支
pip install kolla-ansible==14.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

# 安装Ansible Galaxy依赖
cd ~  # 这一步cd为了让当前目录有ansible.cfg
kolla-ansible install-deps

配置inventory文件

# 配置ansible inventory
cd ~
cp ~/venv3/share/kolla-ansible/ansible/inventory/* ~/
ls ~
# 会出现两个文件:all-in-one 、 multinode
# all in one是把所有openstack部署在一个节点上。如果采用all-in-one,则不需要修改。
# 我们将openstack部署在3台节点上,使用multinode

vim ~/multinode
----------------------------------------
# 文件开头新增这3行,自行修改密码
manager ansible_host=10.0.0.201 ansible_user=root ansible_password=123456 ansible_python_interpreter=/usr/bin/python3
compute1 ansible_host=10.0.0.202 ansible_user=root ansible_password=123456 ansible_python_interpreter=/usr/bin/python3
storage1 ansible_host=10.0.0.203 ansible_user=root ansible_password=123456 ansible_python_interpreter=/usr/bin/python3

# 修改这几个组,其他的保留不变
[control] 
manager

[network]
control
compute1
storage1

[compute] 
compute1

[monitoring]
manager

[storage]
storage1

[deployment]
localhost ansible_connection=local become=true

其实通过查看原始的multinode文件,你可以发现,kolla将你所有的节点划分成了5种类型,即control类节点、network类节点、compute类、monitoring类节点、storage类节点。
这5个节点组是其他组的子组。
比方说文件下方有很多组件,比如loadbalance、trove等,都是[xxx:children]的形式,这个意思就是自由的组合这5个组。
加入我是生产环境的负责人,我手上有100台服务器,那么我会先计划将这100台机器分成5个类型。然后考虑openstack中哪些组件部署在哪种类型的节点上。
如nova是openstack的计算组件,我想把它安装在control和compute类型的机器上,我就会写

[nova:children]
control
compute

如horizon或者skyline是openstack的面板z组件,我就会把这些组件安装在monitoring显示类型的节点上。

[horizon:children]
monitoring

测试ansible和各个节点的连通性

ansible -i multinode all -m ping
-------------------------------------------
localhost | SUCCESS => 
    "ansible_facts": 
        "discovered_interpreter_python": "/usr/bin/python3"
    ,
    "changed": false,
    "ping": "pong"

manager | SUCCESS => 
    "changed": false,
    "ping": "pong"

compute1 | SUCCESS => 
    "changed": false,
    "ping": "pong"

storage1 | SUCCESS => 
    "changed": false,
    "ping": "pong"

配置kolla文件

# 创建kolla配置文件
mkdir -p /etc/kolla
chown -R $USER:$USER /etc/kolla
cp -r ~/venv3/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
ls /etc/kolla
# 两个文件globals.yml  passwords.yml

# 生成密码
kolla-genpwd
# 生成的密码会自动写入/etc/kolla/passwords.yml


# 编写配置模板

cat << EOF > /etc/kolla/globals.yml 
---  
kolla_base_distro: "ubuntu"
kolla_install_type: "source" #使⽤基于源代码的image  
openstack_release: "yoga" #该配置项最好与kolla-ansible分⽀版本保持⼀致
kolla_internal_vip_address: "10.0.0.250" # 找一个网段内没有占用的ip
# docker_registry: "10.0.0.203:5000" #指定私有registry  
network_interface: "enp1s0"  # 内部openstack管理网段
neutron_external_interface: "enp6s0"  
enable_haproxy: "yes"
enable_cinder: "yes"  # 这一个是启动cinder块存储并使用我们的VG
enable_cinder_backend_lvm: "yes" 
nova_compute_virt_type: "qemu" #使⽤虚拟机部署时,该配置项必须改为qemu,默认值为kvm  
EOF

# 以上算作一行命令,从cat到EOF。复制时一起复制

什么事VIP:我们能看到global.yml配置中有个kolla_internal_vip_address,这个VIP是所有组件endpoint使用的ip。说白了,openstack的每个组件交付形式都是对外提供一个URL,而所有组件URL的ip就是VIP。
官方文档也是要求这个VIP必须有

openstack的各个组件依赖VIP才能相互通信

开始安装

# 环境安装,这一步会自动安装docker
kolla-ansible -i ./multinode bootstrap-servers

# 参数预检查
kolla-ansible -i ./multinode prechecks

# 下载openstack各个组件容器镜像
kolla-ansible -i ./multinode pull

# 部署
kolla-ansible -i ./multinode deploy

# 遇到报错,销毁已安装的环境
kolla-ansible -i ./multinode destroy --yes-i-really-really-mean-it

下图是manager节点上的容器镜像

openstack CLI和RC文件安装

# CLI 客户端安装
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/master

# 生成RC文件
kolla-ansible post-deploy
. /etc/kolla/admin-openrc.sh

# 查看已经启动的服务
openstack service list
+----------------------------------+-------------+----------------+
| ID                               | Name        | Type           |
+----------------------------------+-------------+----------------+
| 052da6e26e3b40169d7a98c25c3a3524 | heat        | orchestration  |
| 1021eeae32df41998452e5f568f9b37c | neutron     | network        |
| 121644d1ca2b4dcea4bf7307b67266f8 | heat-cfn    | cloudformation |
| 349006301f34441dbcbd608e67f22595 | keystone    | identity       |
| 80f2041571584e7f9732bdf09439e7ec | placement   | placement      |
| 9350811e7bc0471ca193389095e8010a | nova        | compute        |
| a2a2040a434b4bd0bb596b8f261cb2af | nova_legacy | compute_legacy |
| adde91660a0f4a59b3cb0107008ffe48 | glance      | image          |
| f2246af5f4bc41e786c4f602d774e54d | cinderv3    | volumev3       |
+----------------------------------+-------------+----------------+

# 查看endpoint
openstack endpoint list
+----------------------------------+-----------+--------------+----------------+---------+-----------+-----------------------------------------+
| ID                               | Region    | Service Name | Service Type   | Enabled | Interface | URL                                     |
+----------------------------------+-----------+--------------+----------------+---------+-----------+-----------------------------------------+
| 05ad7101f81443cfa8662501ebc6ac0b | RegionOne | cinderv3     | volumev3       | True    | public    | http://10.0.0.250:8776/v3/%(tenant_id)s |
| 09032bbcbe624484921942216030a0e8 | RegionOne | cinderv3     | volumev3       | True    | internal  | http://10.0.0.250:8776/v3/%(tenant_id)s |
| 0a142961c46a461ab97d76af86dc1d98 | RegionOne | glance       | image          | True    | internal  | http://10.0.0.250:9292                  |
| 26d3381fe2e34cf09bd6f16cff1df777 | RegionOne | placement    | placement      | True    | internal  | http://10.0.0.250:8780                  |
| 27131aea054544a296adffd746f4b8ec | RegionOne | nova         | compute        | True    | internal  | http://10.0.0.250:8774/v2.1             |
| 2be216627f994de9af3cdb194e04b99d | RegionOne | heat         | orchestration  | True    | public    | http://10.0.0.250:8004/v1/%(tenant_id)s |
| 30f4be49399e40a7a27188e04e0cc7e7 | RegionOne | heat         | orchestration  | True    | internal  | http://10.0.0.250:8004/v1/%(tenant_id)s |
| 361582326057467297a0602f851d3efa | RegionOne | glance       | image          | True    | public    | http://10.0.0.250:9292                  |
| 363cef91256c492bb48bbc00035e17d6 | RegionOne | heat-cfn     | cloudformation | True    | public    | http://10.0.0.250:8000/v1               |
| 3969900770c24ad8b8a01686359bba42 | RegionOne | neutron      | network        | True    | internal  | http://10.0.0.250:9696                  |
| 62b1eb1b01ad4381b4ed27f45bf59fa3 | RegionOne | heat-cfn     | cloudformation | True    | internal  | http://10.0.0.250:8000/v1               |
| 653db0f9fb1c41cfbda84ba1d4b05e2a | RegionOne | nova_legacy  | compute_legacy | True    | public    | http://10.0.0.250:8774/v2/%(tenant_id)s |
| 73215e690046464ab291c52aade9fe52 | RegionOne | nova         | compute        | True    | public    | http://10.0.0.250:8774/v2.1             |
| 894360b84d18496ba6da655fc07d77e7 | RegionOne | placement    | placement      | True    | public    | http://10.0.0.250:8780                  |
| 9bb87213428c46e89842d1ba3a69cfc6 | RegionOne | keystone     | identity       | True    | admin     | http://10.0.0.250:35357                 |
| ae6ba80db41c4c41a523249cce2a08db | RegionOne | keystone     | identity       | True    | internal  | http://10.0.0.250:5000                  |
| b1aba9e7b93a42b18610e0c069573db5 | RegionOne | neutron      | network        | True    | public    | http://10.0.0.250:9696                  |
| c544455e03f045f9bcfc5a2cf3143e79 | RegionOne | keystone     | identity       | True    | public    | http://10.0.0.250:5000                  |
| cbf4436955134a7493545fa4391b25ce | RegionOne | nova_legacy  | compute_legacy | True    | internal  | http://10.0.0.250:8774/v2/%(tenant_id)s |
+----------------------------------+-----------+--------------+----------------+---------+-----------+-----------------------------------------+

Dashboard登录

openstack的Dashboard组件有两个,horizon(已经存在于多个版本中)和skyline(正在测试,没有官方容器)
kolla安装过程中会自动帮我们安装一个全功能的horizon组件。
登录网址:http://vip/auth/login/?next=/
比如本案例中就是http://10.0.0.250/auth/login/?next=/
但是我们还缺admin的密码。

. /etc/kolla/admin-openrc.sh
env|grep OS_

OS_ENDPOINT_TYPE=internalURL
OS_REGION_NAME=RegionOne
OS_INTERFACE=internal
OS_AUTH_PLUGIN=password
OS_AUTH_URL=http://10.0.0.250:35357/v3
OS_PROJECT_DOMAIN_NAME=Default
OS_TENANT_NAME=admin
OS_USERNAME=admin
OS_USER_DOMAIN_NAME=Default
OS_PROJECT_NAME=admin
OS_PASSWORD=TdHUeHzlu1SVgZuMkKmBFDWZudyOMxcadJwmFNch  # 这就是admin的密码
OS_IDENTITY_API_VERSION=3

登录成功

产生一个案例(可以不做)

~/venv3/share/kolla-ansible/init-runonce
开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于kolla-ansible部署openstack yoga版本的主要内容,如果未能解决你的问题,请参考以下文章

kolla-ansible部署openstack yoga版本

kolla-ansible部署openstack yoga版本

CentOS 8 2004 用 Kolla-Ansible 部署OpenStack Ussuri

使用kolla-ansible部署多节点OpenStack(T版)及对接Ceph

Kolla-Ansible在线部署OpenStack

kolla-ansible部署openstack