当前位置:网站首页>kolla-ansible部署openstack yoga版本
kolla-ansible部署openstack yoga版本
2022-06-26 05:39:00 【上海一亩地】
目录
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
边栏推荐
猜你喜欢

redis探索之布隆过滤器

cartographer_ optimization_ problem_ 2d

基于SDN的DDoS攻击缓解

AutowiredAnnotationBeanPostProcessor什么时候被实例化的?

uniCloud云开发获取小程序用户openid

Leetcode513. Find the value in the lower left corner of the tree

Ribbon负载均衡服务调用

cartographer_ pose_ graph_ 2d

LeetCode_二叉搜索树_简单_108.将有序数组转换为二叉搜索树

Could not get unknown property ‘*‘ for SigningConfig container of type org. gradle. api. internal
随机推荐
第九章 设置结构化日志记录(一)
The localstorage browser stores locally to limit the number of forms submitted when tourists do not log in.
虚拟项目失败感想
MySQL source code reading (II) login connection debugging
无线网络存在的安全问题及现代化解决方案
C# 40. Byte[] to hexadecimal string
Gram 矩阵
Introduction to alluxio
Last flight
Command line interface of alluxio
Thinking about bad money expelling good money
Navicat如何将当前连接信息复用另一台电脑
cartographer_ local_ trajectory_ builder_ 2d
Redis installation on Linux
[upsampling method opencv interpolation]
Positioning setting horizontal and vertical center (multiple methods)
vscode config
国务院发文,完善身份认证、电子印章等应用,加强数字政府建设
【ARM】在NUC977上搭建基于boa的嵌入式web服务器
Official image acceleration