使用考拉(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系统?

  1. 它是目前世界上最稳定的操作系统,没有之一。曾有一家公司的服务器装了debian连续12年未宕机。
  2. 完全开源,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获取配置文件的优先级:

  1. 首先读取环境变量ANSIBLE_CONFIG,获得配置文件路径,如果没有这个变量,则继续找。
  2. 继续从当前目录寻找ansible.cfg,如果当前目录也没有,继续找。
  3. 从~/.ansible/目录中找,即属主目录中的.ansible隐藏目录中找配置。
  4. 找/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端口

超强干货来袭 云风专访:近40年码龄,通宵达旦的技术人生

以上是关于使用考拉(kolla)和docker构建单节点openstack的主要内容,如果未能解决你的问题,请参考以下文章

kolla快速集成openstack-ocata和opencontrail-4.0.1.0单节点

Kolla安装单节点Ocata

kolla单节点部署openstack

kolla-ansible部署单节点OpenStack-Pike

Docker部署单节点ElasticSearch7+配置kibana7+X-Pack

管理2000+Docker镜像,Kolla是如何做到的