使用考拉(kolla)和docker构建单节点openstack
Posted 上海一亩地
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用考拉(kolla)和docker构建单节点openstack相关的知识,希望对你有一定的参考价值。
目录
官方文档
https://docs.openstack.org/kolla-ansible/latest/user/quickstart.html
本文使用kolla-ansible和docker部署openstack容器,所以最好了解一下Ansible和容器技术。
安装Openstack的操作系统要求
系统能安装docker
内存大于等于8GB
系统盘大于等于40GB
2个网卡(network interface)
虚拟机准备
宿主机安装KVM
# 关闭防火墙
sudo systemctl disable firewalld
sudo systemctl stop firewalld
# 确认你的cpu支持虚拟化,否则换一台新的电脑
egrep -o '(vmx|svm)' /proc/cpuinfo
命令返回vmx或者svm,表示支持虚拟化
# 宿主机安装KVM
sudo apt update
sudo apt -y install qemu qemu-system qemu-kvm virt-manager bridge-utils vlan
# 启动虚拟机管理页面
virt-manager
新建两个NAT网络设备
双击如图中的QEMU/KVM
网络设备的网段和范围自己定义,如下是我的网络:
创建第一个虚拟网络设备:类型NAT,名称openstack,网段10.0.0.0/24
,ip范围10-254 。这个网络用于openstack内部管理和服务互联
创建第二个虚拟网络设备:类型NAT,名称tenant,网段192.168.104.0/24,ip范围5-254 。这个网络给云服务租客使用。
新建虚拟机,安装Debian 11
我的宿主机 Debian11.2.0 ,桌面gnome
我的虚拟机 Debian11.2.0,桌面gnome,内存8GB,核心6,存储总共300GB,包括200GB系统盘sda和两个50GB的虚拟硬盘sdb和sdc。
如何使用kvm新建虚拟机我就不赘述了,网上有很多教程,注意在创建虚拟机的时候网络选择openstack的那个,然后存储卷分200GB作为系统盘。第二个网卡以及两个小的虚拟硬盘后期再加进去。
为什么选Debian系统?
- 它是目前世界上最稳定的操作系统,没有之一。曾有一家公司的服务器装了debian连续12年未宕机。
- 完全开源,Debian的安装镜像iso文件中没有任何闭源软件,所以好多人在安装的时候抱怨Debian识别不了wifi硬件,这是正常的,因为wifi驱动是闭源的。Debian是最自由的,最遵循GPL协议的,永远不会像Centos那样说没就没了,全世界有超1百万大牛每天贡献代码。
装系统的时候先捏着鼻子装完,然后再装wifi驱动。装完系统后需要一通折腾的。
最低要求你能成功地最小化安装Debian,有个shell就行了。
常见问题解决FQA:
# Deiban没有桌面,解决:
tasksel
# 会弹出来好多种版本的桌面选项。
# 空格选中你想要的桌面版本,tab键切换到ok按钮然后enter开始安装
# 没有reboot和poweroff命令
# 其实命令是有的,但是没有加到环境变量。所以修改启动文件
echo 'export PATH=$PATH:/usr/sbin' >> ~/.bashrc
source ~/.bashrc
# apt源换成163.com的,仅限Debian11
sudo mv /etc/apt/source.list /etc/apt/source.list.bak
sudo echo 'deb http://mirrors.163.com/debian/ bullseye contrib main' > /etc/apt/source.list
sudo apt -y update
# 安装所有驱动,包括wifi驱动
sudo apt -y install firmware-*
# 没有ifconfig命令
sudo apt -y install net-tools
# 桌面显示没有网卡(Wired Unmanaged)
# 需要打开network management
vim /etc/NetworkManager/NetworkManager.conf
确保 managed=true
# 安装ssh并能通过密码登陆root用户
sudo apt -y install ssh vim
vim /etc/ssh/sshd_config
修改成 PermitRootLogin yes
systemctl restart ssh
systemctl enable ssh
# 关闭Debian的自动休眠
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
添加第二张网络设备和存储设备
虚拟机先关机。poweroff 命令
点击上方的白色灯泡,然后点击添加硬件。
添加网络设备,选择之前创建的tanent网络
添加硬盘,50GB,两个,共100GB。这两个磁盘必须加,后期需要组成vg卷组,然后供给Cinder块存储服务。
最后这台虚拟机的设备:
创建cinder-volumns卷组
启动虚拟机,然后执行如下命令创建一个名叫cinder-volumns的卷组
# 查看系统识别到的硬盘设备
ls /dev
有的人的机器上能看到sda、sdb、sdc,我的是vda、vdb、vdc,本质都一样。
下面开始创建VG
sudo pvcreate /dev/vdb /dev/vdc # 将物理设备变成物理卷
sudo vgcreate cinder-volumes /dev/vdb /dev/vdc # 将多个物理卷融合成卷组
虚拟机安装依赖
安装系统依赖
下面开始安装系统包和pip,并做pip加速和升级。
# apt安装系统依赖
sudo apt update
sudo apt -y full-upgrade
sudo apt -y install python3-dev libffi-dev gcc libssl-dev git wget
# 安装python3的pip
sudo apt -y install python3-pip
# 安装python3虚拟环境生成器
sudo apt -y install python3-env
# 说明:本次安装openstack中使用的python一律是python3版本。
# 因为Debian11没有python2,系统中只有python3,所以只安装pip3,如果使用旧系统,请自行安装3版本python并使用python3构建虚拟环境。
# 为当前系统用户指定阿里pip源,这样能加速pip下载
mkdir ~/.pip
vim ~/.pip/pip.conf
# 文件中写入以下信息
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host=mirrors.aliyun.com
# 升级pip
sudo pip install -U pip
# 查看pip版本
sudo pip -V
pip安装kolla-ansible
下面开始安装kolla-ansible
# 家目录创建一个python虚拟环境
python3 -m venv ~/venv3
# 激活虚拟环境
source ~/venv3/bin/activate
# 此后,你的命令行提示符前有个(venv3)
# 升级虚拟环境中的pip
pip install -U pip
# 安装 Ansible 4
pip install ansible==4.*
# 官方文档说下载ansible 5 但是版本太高了,无法运行kolla-ansible
# 安装 kolla-ansible
# pip install git+https://github.com/openstack/kolla-ansible@master
# kolla-ansible项目已经迁移到了github上了,官方文档给的地址不能用了
pip install kolla-ansible
安装docker
以下是Debian安装docker的方法,其他系统请自行查看官方文档。
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装系统包
sudo apt-get update
sudo apt-get -y install ca-certificates curl gnupg lsb-release
# 下载GPG key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加stable稳定版docker apt库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装docker-ce
sudo apt-get update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
# 阿里云容器镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
"registry-mirrors": ["https://6wgjtrq3.mirror.aliyuncs.com"]
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
# 装完docker后,这个软件包源文件可以删了,因为它很慢,后期会打断openstack的安装
# 这一步过河拆桥必须做
sudo rm -f /etc/apt/sources.list.d/docker.list
sudo rm -rf /var/lib/apt/lists/lock
sudo apt -y update
安装openstack
复制模板文件
# 创建kolla目录并设置权限
sudo mkdir -p /etc/kolla
sudo chown $USER:$USER /etc/kolla
# 创建一个空目录用于构建openstack环境,这个目录到最后其实是个ansible项目
sudo mkdir -p ~/build-openstack
sudo chown $USER:$USER ~/build-openstack
# 复制模板文件
cp -r ~/venv3/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
# 复制完成后会在/etc/kolla目录u下看到来两个yaml文件
ls /etc/kolla/
# globals.yml passwords.yml
# 复制inventory文件到构建目录,包含all-in-one(单节点)和multinode(多节点)
cp ~/venv3/share/kolla-ansible/ansible/inventory/* ~/build-openstack
ls ~/build-openstack
# all-in-one multinode
至此我们有3个目录,分别是:
~/venv3:python虚拟环境
~/build-openstack: 一个ansible项目。里面有all-in-one和multinode
/etc/kolla: 节点配置模板。里面有globals和password
添加ansible.cfg配置文件
vim ~/build-openstack/ansible.cfg
----------------------
[defaults]
host_key_checking=False
pipelining=True
forks=100
知识补充:
ansible是如何知道配置文件在服务器的什么位置?
一个服务器上有很多ansible.cfg,运行ansible时哪个配置文件生效了?
如下是ansible获取配置文件的优先级:
- 首先读取环境变量ANSIBLE_CONFIG,获得配置文件路径,如果没有这个变量,则继续找。
- 继续从当前目录寻找ansible.cfg,如果当前目录也没有,继续找。
- 从~/.ansible/目录中找,即属主目录中的.ansible隐藏目录中找配置。
- 找/etc/ansible/ansible.cfg文件,没有则不继续找了,直接报错。
配置inventory文件
懂ansible的同学都知道,inventory里面写的是所有的node信息,包括别名、ip、用户、密码、sudo用户、sudu密码、节点python路径等等信息。
我们尝试部署all in one,所以不用修改inventory,里面都是连接的local。
如果你尝试multinode,需要修改文件信息
网上有很多multinode的文档,如下所示,其实都是类似的,换个ip而以。
知识补充:
下文中10.0.0.10表示节点ip,10.0.0.[10:12]表示10、11、12三台机器。
ansible_user=系统用户
ansible_password=密码
ansible_become=true 表示执行步骤时使用sudo,借用root权限
[机器组]
[机器组:children]表示其下的都是这个组的子组。
本人通读了《奔跑吧Ansible》第二版。想学Ansible的推荐这本书。
vim ~/build-openstack/multinode
--------------------------------
[control]
10.0.0.[10:12] ansible_user=ubuntu ansible_password=foobar ansible_become=true
# Ansible supports syntax like [10:12] - that means 10, 11 and 12.
# Become clause means "use sudo".
[network:children]
control
# when you specify group_name:children, it will use contents of group specified.
[compute]
10.0.0.[13:14] ansible_user=ubuntu ansible_password=foobar ansible_become=true
[monitoring]
10.0.0.10
# This group is for monitoring node.
# Fill it with one of the controllers' IP address or some others.
[storage:children]
compute
[deployment]
localhost ansible_connection=local become=true
# use localhost and sudo
测试节点的连通性
cd ~/build-openstack/ # cd这一步必须有,不然ansible.cfg读不到
ansible -i all-in-one all -m ping
# 返回-----------------------
localhost | SUCCESS =>
"ansible_facts":
"discovered_interpreter_python": "/usr/bin/python3"
,
"changed": false,
"ping": "pong" # 这个表示连通成功。
配置passwords.yml
我们已经有了在/etc/kolla/password.yml和global.yml.
其中password.yml中规定了各个服务的密码,初始状态下所有密码都是空的。
我们需要一键生成所有密码。
kolla-genpwd
然后你再观察/etc/kolla/password.yml,会发现有变化了。
配置globals.yml
global.yml 中规定了你的各个节点的情况
写入如下信息:
kolla_base_distro: "debian" # 操作系统发行版
kolla_install_type: "source"
openstack_release: "victoria"
network_interface: "enp7s0" # openstack内部管理的网卡,按照你自己的实际填写
neutron_external_interface: "enp1s0" # 租客网络,或者是外部网络
kolla_internal_vip_address: "10.0.0.250" # 你的openstack网站登陆ip,这个ip属于network_interface中的一个空闲ip
enable_haproxy: "no"
enable_keepalived: " enable_haproxy | bool "
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
cinder_volume_group: "cinder-volumes"
我的网卡设备名:
## 配置虚拟化类型
每次使用openstack创建的云服务器用什么跑?kvm?VMware?
所以在安装openstack时候指定虚拟化软件类型
mkdir -pv /etc/kolla/config/nova
vim /etc/kolla/config/nova/nova-compute.conf
----------------------------------------
[libvirt]
virt_type=qemu
cpu_mode = none
开始安装openstack
cd ~/build-openstack # 必须cd,获取ansible.cfg
netstat -natlp 80 # 查看当前80端口是否被占用,如果是,杀死进程.
#如果上一步看到是apache2占用了80端口,则卸载apache2
apt -y remove apache2
kolla-ansible -i ./all-in-one bootstrap-servers # 安装bootstrap依赖,报错了就多试几次
# zheyi
kolla-ansible -i ./all-in-one prechecks # 预检查
kolla-ansible -i ./all-in-one deploy # 开始安装
pip install python-openstackclient -c https://releases.openstack.org/constraints/upper/master # 安装客户端
kolla-ansible post-deploy # 结束安装
. /etc/kolla/admin-openrc.sh
~/venv/share/kolla-ansible/init-runonce
报错自己百度就行了。
登陆openstack
openstack登陆直接浏览器输入ip即可,使用的80端口
以上是关于使用考拉(kolla)和docker构建单节点openstack的主要内容,如果未能解决你的问题,请参考以下文章
kolla快速集成openstack-ocata和opencontrail-4.0.1.0单节点
kolla-ansible部署单节点OpenStack-Pike