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 的优势主要得益于容器技术:
- 得益于成熟的部署⼯具 ansible 和 docker,部署快速且稳定。
- ⼀个容器只跑⼀个服务,所以能将 openstack 服务控制到很⼩的粒度。
- 可以以组件为单位进⾏升级和回滚,例如升级 nova 组件,使⽤ kolla-ansible -i /path/to/inventory -t nova 命令即可。
- kolla 采⽤⼀切皆容器的基本思想,所以只需操作系统与 docker 兼容,从⽽规避了很多安装包依赖冲突的问题。
- ⽬前 kolla 项⽬在社区内的热度相对较⾼,社区⽀持更好。
kolla 的缺点
- 完全依赖于 docker ,docker 的不稳定性会给整个环境带来巨⼤的灾难,不过⽬前 docker 已经问题很少了。
- 使⽤ kolla 部署好云平台后,给开发的 debug 和运维的故障排查会带来更多的复杂度,这个问题也可能通过写⼀个简单的 client 解 决。
安装前的环境配置
这篇文章不是小白手册,不会教您如何使用KVM,设置网络,挂载硬盘,创建LVM等运维手段,需要您有一定的功底。底子太薄了,我就是写10万字也讲不完。
节点规划
计划用的是KVM创建了3台虚拟机。
- 一台作为openstack的manager管理节点,上面跑了openstack的keystone身份认证和RabbitMQ、etcd等基础组件,是openstack的命根子。往后的集群扩容都要连接manager的。CPU核心要足够用,内存要足,网速还要好。存储要求不高,只要一个系统盘,100GB也就够了。
- 一台作为计算节点,是专门运行云服务器的。计算节点的特点是cpu核心和内存要大。存储几乎没要求,云服务器的系统盘和块存储、对象存储、镜像快照存储都由另一台节点提供。
- 一台作为存储节点,上面运行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,每个虚拟机都是用之前创建的这两个虚拟网卡。
硬件规划:
- 主机名:kolla-manager。算力:4核8GB。硬盘:200GB系统盘。网络:两个网卡都使用。IP分别是10.0.0.201和192.168.100.201
- 主机名:kolla-compute1。算力:6核16GB。硬盘:200GB系统盘。网络:两张网卡都使用。IP分别是10.0.0.202和192.168.100.202
- 主机名: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