开放网络的先行者与推动者—星融元
技术支持(Support)  TEL:(+86)4000989811

技术

2022-06-17

关键词


关注星融元

技术

解决方案-Kolla-Ansible:在容器环境中部署OpenStack

2022-06-17

OpenStack简介

OpenStack是一个云操作系统,它控制整个数据中心的大型计算、存储和网络资源池,所有这些资源都通过一个仪表板进行管理,该仪表板赋予管理员控制权,同时允许用户通过web界面提供资源。

它为私有云和公有云提供可扩展的弹性的云计算服务,提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。

Kolla-Ansible简介

Kolla旨在为运行OpenStack提供生产就绪的容器和部署工具。

Kolla-Ansible是Kolla的子项目,该项目使用Ansible部署Kolla容器映像。

Kolla-Ansible是开箱即用的工具,即使你是个新手也可以快速部署OpenStack,也允许你根据需求定制化的部署。

目标

在容器中部署OpenStack最大的特点就是升级,用户基本是无感知的状态下完成。同时可以实现本地与云端一致,一次开发随处运行,通过迁移到不同的设备,快速的完成部署和升级操作。

本文将以详细操作指导的方式,给出一种在Docker容器环境中部署OpenStack的指导方法。

环境准备

两台server,一台作为controller,另一台作为compute节点,操作系统CentOS 7.6.1810 镜像CentOS-7-x86_64-DVD-1810.iso。服务器具体配置要求如下:

  • 2个千兆网口
  • 至少8G内存
  • 磁盘至少40G
  • 计算节点的BISO中开启CPU嵌套虚拟化(INTEL叫VT-x,AMD的叫AMD-V)

部署过程

关闭SELinux 【控制节点、计算节点】

SELinux不关闭的情况下无法实现,会限制ssh免密码登录

[root@localhost  ~]#setenforce 0

[root@localhost  ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/sysconfig/selinux

关闭防火墙【控制节点、计算节点】

防止安装时出现各个组件的端口不能访问的问题

[root@localhost  ~]#systemctl stop firewalld && systemctl disable firewalld

禁用宿主机的 Libvirt 服务

大多数操作系统会默认启动 Libvirt,但使用 Kolla 来部署 OpenStack 的话,Libvirt 应该在容器中运行并管理虚拟机。所以宿主机的 Libvirt 需要被关闭,以免造成冲突。

[root@localhost  ~]#systemctl stop libvirtd.service
[root@localhost  ~]#systemctl disable libvirtd.service

设置主机名,hosts文件【控制节点、计算节点】

控制节点

[root@localhost  ~]#hostname controller
[root@localhost  ~]#echo “controller”> /etc/hostname

计算节点根据节点名称修改

[root@localhost  ~]#vim /etc/hosts
192.168.4.2 controller
192.168.4.150 computer1

修改网卡名称【控制节点、计算节点】

说明:网卡名字不是必须改,保持各服务器使用的网卡名称一样。

网卡1:

[root@localhost  ~]#cd /etc/sysconfig/network-scripts
[root@localhost  ~]#vim ifcfg-enp6s0f0
IPADDR=192.168.1.*
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
NAME=eno1
DEVICE=eno1

网卡2:

[root@localhost  ~]#cd /etc/sysconfig/network-scripts
[root@localhost  ~]#vim ifcfg-enp6s0f1
IPADDR=192.168.2*
NETMASK=255.255.255.0
GATEWAY=192.168.21
NAME=eno2
DEVICE=eno2

修改网卡文件名称:

[root@localhost  ~]#mv ifcfg-enp6s0f0 ifcfg-eno1
[root@localhost  ~]#mv ifcfg-enp6s0f1 ifcfg-eno2

修改net配置文件

[root@localhost  ~]#vi /etc/udev/rules.d/70-persistent-net.rules
SUBSYSTEM==”net”,ACTION==”add”,DRIVERS==”?*”,ATTR{address}==”78:24:af:85:0c:ac”,ATTR{type}==”1″, NAME=”eno1″    
SUBSYSTEM==”net”,ACTION==”add”,DRIVERS==”?*”,ATTR{address}==”78:24:af:85:0c:ad”,ATTR{type}==”1″, NAME=”eno2″

ATTR和服务器两网口MAC地址保持一致

重启服务器

[root@localhost  ~]#reboot

重启网络服务

[root@localhost  ~]#systemctl restart network

安装【控制节点、计算节点】

[root@localhost  ~]#yum install -y epel-release
[root@localhost  ~]#yum install -y python-pip
[root@localhost  ~]#pip install -U pip

安装编译环境【控制节点】

[root@controller  ~]#yum install -y python-devel libffi-devel gcc openssl-devel libselinux-python

安装ansible【控制节点】

[root@controller  ~]#pip install -U ansible

安装docker【控制节点、计算节点】

[root@localhost  ~]#tee /etc/yum.repos.d/docker.repo <<-‘EOF’
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
[root@localhost  ~]#yum install -y docker-engine docker-engine-selinux

  • 问题1 安装docker失败,提示与其他安装包冲突Error: docker-engine-selinux conflicts with 2:container-selinux-2.107-3.el7.noarch

解决方法如下:

[root@compute1 ~]#rpm -qa |grep container-selinux-2.107-3.el7.noarch
[root@compute1 ~]#yum -y remove container-selinux-2.107-3.el7.noarch

设置Docker【控制节点、计算节点】

[root@localhost  ~]#mkdir /etc/systemd/system/docker.service.d
[root@localhost  ~]#tee /etc/systemd/system/docker.service.d/kolla.conf << ‘EOF’
[Service]
MountFlags=shared
EOF

重启相关服务【控制节点、计算节点】

[root@localhost  ~]#systemctl daemon-reload
[root@localhost  ~]#systemctl enable docker
[root@localhost  ~]#systemctl restart docker

安装模块【控制节点、计算节点】

[root@localhost  ~]#pip install docker

安装【控制节点】

[root@controller  ~]#yum install git

安装kolla-ansible【控制节点】

[root@controller  ~]#pip install kolla-ansible

如果报如下错误

Cannot uninstall ‘PyYAML’. It is a distutils installed project and thus we

cannot accurately determine which files belong to it which would lead to only a

partial uninstall.

[root@controller  ~]#rm -rf /usr/lib64/python2.7/site-packages/PyYAML*

拷贝配置文件【控制节点】

[root@controller  ~]#cp -r  /usr/share/kolla-ansible/etc_examples/kolla  /etc/kolla/

[root@controller  ~]#cp  /usr/share/kolla-ansible/ansible/inventory/*  /home/

配置免密登录【控制节点】

[root@controller  ~]#ssh-keygen                        #一路回车
[root@controller  ~]#ssh-copy-id controller         #回车后输入服务器密码
[root@controller  ~]#ssh-copy-id computer1          #回车后输入服务器密码

存储节点配置【计算节点】

(演示版本可以跳过此步骤)

  • 要启动cinder存储服务,需先添加一块新的硬盘,然后创建pv、vg

[root@computer1 ~]#pvcreate /dev/sdb
[root@computer1 ~]#vgcreate cinder-volumes /dev/sdb  //vg名取名为 cinder-volumes,这里主要跟 kolla配置文件里vg名一致

  • 问题1 如果出现创建不了pv

解决方法如下:

[root@compute1 ~]#pvcreate devsdb
Device /dev/sdb excluded by a filter.

解决:

[root@compute1 ~]#dd if=/dev/urandom of=/dev/sdb bs=512 count=64
64+0 records in
64+0 records out
32768 bytes (33 kB) copied, 0.00760562 s, 4.3 MB/s
[root@compute1 ~]#pvcreate /dev/sdb                            
Physical volume “/dev/sdb” successfully created.

重启服务【计算节点】

[root@compute1 ~]#systemctl restart lvm2-lvmetad.service

修改【控制节点】

[root@controller ~]#vim /home/multinode
[control]
controller
[network]
controller
[inner-compute]
[external-compute]
computer1
[compute:children]
inner-compute
external-compute
[storage]
computer1
[monitoring]
controller
[deployment]
controller

获取docker镜像【控制节点、计算节点】

  • 使用kolla官方镜像源

[root@localhost  ~]#vim /etc/kolla/globals.yml
kolla_install_type: “binary”
openstack_release: “stein”
docker_namespace: “kolla”

  • 下载镜像包

[root@controller  ~]#kolla-ansible pull -i /home/multinode

修改全局配置文件globals.yml【控制节点】

管理网口eno1,外网网口eno2

如果采用cinder磁盘存储

kolla_base_distro: “centos”

kolla_install_type: “binary”
openstack_release: “stein”
kolla_internal_vip_address: “192.168.4.2”
# Valid options are [ qemu, kvm, vmware, xenapi ]
nova_compute_virt_type: “kvm”
network_interface: “eno1”
api_interface: “{{ network_interface }}”
neutron_external_interface: “eno2”
neutron_plugin_agent: “openvswitch”
enable_cinder: “yes”
enable_cinder_backend_iscsi: “no”
enable_cinder_backend_lvm: “yes”
enable_haproxy: “yes”
enable_heat: “yes”
glance_enable_rolling_upgrade: “no”
ironic_dnsmasq_dhcp_range:
tempest_image_id:
tempest_flavor_ref_id:
tempest_public_network_id:
tempest_floating_network_name:

如果采用外部ceph存储:

kolla_base_distro: “centos”

kolla_install_type: “binary”

openstack_release: “stein”

kolla_internal_vip_address: “192.168.4.2”

# Valid options are [ qemu, kvm, vmware, xenapi ]

nova_compute_virt_type: “qemu”

nova_backend_ceph: “yes”

network_interface: “eno1”

api_interface: “{{ network_interface }}”

neutron_external_interface: “eno2”

neutron_plugin_agent: “openvswitch”

enable_ceph: “no”

enable_cinder_backup: “yes”

cinder_backup_driver: “ceph”

enable_cinder: “yes”

enable_cinder_backend_iscsi: “no”

enable_cinder_backend_lvm: “no”

enable_haproxy: “yes”

enable_heat: “yes”

enable_sahara: “yes”

enable_trove: “yes”

cinder_backend_ceph: “yes”

glance_backend_ceph: “yes”

glance_enable_rolling_upgrade: “no”

ironic_dnsmasq_dhcp_range:

tempest_image_id:

tempest_flavor_ref_id:

tempest_public_network_id:

tempest_floating_network_name:

生成密码文件passwords.yml【控制节点】

这个密码文件可以使用工具自动生成,也可以手动输入但是手动输入需要注意格式,在:后需要空一格

再输入;而且ssh_key也比较麻烦所以推荐使用工具自动生成但是直接输入

[root@controller  ~]#kolla-genpwd

修改dashboard登录密码

[root@controller  ~]#vi /etc/kolla/passwords.yml

keystone_admin_password: admin

修改部署文件multinode【控制节点】

[root@controller  ~]#vim /home/multinode
[control]
controller
[network]
controller
[inner-compute]
[external-compute]
computer1
[compute:children]
inner-compute
external-compute
[monitoring]
controller
[storage]
computer1
[deployment]
localhost       ansible_connection=local

检查配置【控制节点】

[root@controller  ~]#kolla-ansible prechecks -i /home/multinode

配置SchedNova主机基础环境【控制节点】

[root@controller  ~]#kolla-ansible -i /home/multinode bootstrap-servers

部署OpenStack【控制节点】

[root@controller  ~]#kolla-ansible deploy -i /home/multinode

验证OpenStack安装【控制节点】

[root@controller  ~]#kolla-ansible post-deploy -i /home/multinode

OpenStack更新【控制节点】

### 修改镜像版本(此处不用更新,以后想更新版本再更新)

[root@controller  ~]# vim /etc/kolla/globals.yml
openstack_release: “stein”
[root@controller  ~]# kolla-ansible upgrade -i /home/multinode

重启所有应用【控制节点】

[root@controller  ~]#kolla-ansible -i /home/multinode reconfigure

环境还原【控制节点】

#如果安装有错误,想重新安装,可以选择如下操作

##将删除所有容器和卷

[root@controller  ~]#kolla-ansible destroy –yes-i-really-really-mean-it -i /home/multinode

生成 admin-openrc.sh【控制节点】

[root@controller  ~]#kolla-ansible post-deploy

初始demo【控制节点】

执行后会自动下载cirros镜像, 创建网络, 并创建一批测试虚拟机.

[root@controller  ~]#/usr/share/kolla-ansible/init-runonce

查询登录密码【控制节点】

[root@controller  ~]#grep admin /etc/kolla/passwords.yml

安装OpenStack命令行客户端【控制节点】

[root@controller  ~]#pip install python-openstackclient

创建实例到指定计算节点

  • 查看有效区域

[root@controller  ~]#openstack availability zone list

  • 查看有效主机列表

[root@controller  ~]#openstack host list

  • 查看有效计算节点列表

[root@controller  ~]#openstack hypervisor list

  • 查询网络id

[root@controller  ~]#openstack network list

  • 查看安全组

[root@controller  ~]#openstack security group list

  • 创建flavor

[root@controller  ~]#openstack flavor create –id 0 –vcpus 1 –ram 64 –disk 1 m1.nano
[root@controller  ~]#openstack flavor create –id 1 –vcpus 1 –ram 512 –disk 1 m1.tiny
[root@controller  ~]#openstack flavor create –id 2 –vcpus 1 –ram 2048 –disk 20 m1.small
[root@controller  ~]#openstack flavor create –id 3 –vcpus 2 –ram 4096 –disk 40 m1.medium
[root@controller  ~]#openstack flavor create –id 4 –vcpus 4 –ram 8192 –disk 80 m1.large
[root@controller  ~]#openstack flavor create –id 5 –vcpus 8 –ram 16384 –disk 160 m1.xlarg

  • 创建实例

[root@controller  ~]#openstack server create –flavor m1.nano \
–image cirros  \
–nic net-id=88b84388-40d2-48d9-b4ec-ab0dfa9b244e \
–security-group 5431def1-8856-4e48-ab02-50b9d459f9b1  \
–key-name mykey  \
–availability-zone nova:computer2:computer2  instance2

–flavor 实例类型

–image 镜像

–nic 网络 net-id网络id 第4步查得

 –availability-zone nova:compute1:compute1 前三步查得

compute1为指定计算节点。

结论

从上面的安装过程我们发现Kolla-Ansible来完成OpenStack安装过程非常的简洁,不需要过多修改OpenStack的配置文件,从而可以很轻松的完成部署和升级等操作。

参考资料

  1. OpenStack官网: openstack.org
  2. Kolla-Ansible项目官网:https://wiki.openstack.org/wiki/Kolla#Kolla
  3. Kolla-Ansible官网安装:https://docs.openstack.org/kolla-ansible/latest/

相关文章

对星融元产品感兴趣?

立即联系我们

返回顶部

© 星融元数据技术(苏州)有限公司 苏ICP备17070048号-2