kolla之openstack的服务器部署过程记录以及踩坑记录

前言

自己是个小白,因为课程要求搭建个云平台环境,然后自己选择基于容器的openstack部署方法——kolla-ansible,花了将近两周时间来搭建该项目,今天终于将其部署成功。接下来会展示kolla-ansible的部署过程和相关网络配置。

实验环境

  1. 准备了两台安装了centos7的服务器。一台作为控制节点(node20),其IP地址为172.22.59.4,一台作为计算节点(node19),其IP地址为172.22.59.3。
  2. 控制节点上准备三张网卡(我的网卡分别是enp49s0f0和enp33s0f0和br-ex),控制节点的enp49s0f0网卡先用于连接外网使用(部署前需要先下载一些依赖包),对应上述的172.22.59.4地址,计算节点一张网卡就够(我的是enp49s0f0),对应上述172.22.59.3地址 。
  3. 如果大家用虚拟机来进行部署的话,就看最后的参考资料来配置即可。

准备工作

在下面的灰色框中,#标志的每一行都是完整的执行命令,每次复制一行命令到相应的主机上执行即可。(适用于centos7)

  1. 两台服务器都安装键补全软件包和vim软件包:
	#  yum -y install bash-completion.noarch vim
  1. 两台服务器都关闭firewalld和SELinux
	#. vim /etc/selinux/config
	


如上图所示,将上述config中的SELINUX字段的值设为disabled.接着

	#. setenforce 0
	#. getenforce
	#. systemctl disable firewalld && systemctl stop firewalld

查看防火墙的状态:

	# systemctl status firewalld

在这里插入图片描述
3. 在两台服务器上都配置hosts文件,如下:

	# vim /etc/hosts

在这里插入图片描述
只要在node19和node20服务器中的hosts配置文件中添加红框中两台服务器的IP地址和名称就行。

  1. 修改node20的enp33s0f0网卡配置
	[root@node20 ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp33s0f0

在enp33s0f0网卡配置中放入如下内容:

NAME=enp33s0f0
DEVICE=enp33s0f0
TYPE=OVSPort
NM_CONTROLLED=no
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes

然后重启网络服务:

 [root@node20 ~]# systemctl restart network
  1. 在node20服务器上安装并更新pip工具

安装epel源:

	[root@node20 ~]# yum -y install epel-release
	[root@node20 ~]# yum -y install python-pip
	[root@node20 ~]# cd ~
	[root@node20 ~]# mkdir .pip

提前安装一些依赖包,免得后面出错:

扫描二维码关注公众号,回复: 11338949 查看本文章
[root@node20 ~]# yum install openldap-devel

配置pip软件包源(下面命令多行一起复制执行)

[root@node20 ~]# tee /root/.pip/pip.conf << 'EOF'
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF

更新pip

[root@node20 ~]# 	pip install -U pip
  1. 配置node19的pip软件包源:

注意:这一步是为了后期安装
提前安装一些依赖包,免得后面出错:

[root@node19 ~]# yum install openldap-devel
[root@node19 ~]# mkdir .pip
[root@node19 ~]# tee /root/.pip/pip.conf << 'EOF'
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
EOF

开始部署

  1. 在node20上安装ansible
[root@node20 ~]# yum -y install python-devel libffi-devel gcc openssl-devel libselinux-python
[root@node20 ~]# pip install ansible
  1. 在node20上配置ansible参数

注意:pip安装的ansible是没有配置文件的,此时需要前往github将默认配置文件拷贝下来
网址:https://github.com/ansible/ansible/blob/devel/examples/ansible.cfg

[root@node20 ~]# mkdir /etc/ansible
//将github上的ansible.cfg的内容写入到服务器上/etc/ansible/ansible.cfg文件中
[root@node20 ~]# vim /etc/ansible/ansible.cfg
[root@node20 ~]# ansible --version

查询结果如下:
在这里插入图片描述
然后开始优化:

[root@OpenStack-con ~]# vim /etc/ansible/ansible.cfg

修改的内容如下:

forks = 10  //第19行,设置并行进程数。如果要管理的主机很多,可以优先尝试增加该值
host_key_checking = False  //第67行,跳过ssh首次连接提示验证部分
pipelining = True  //第403行,开启管道输送。ansible在执行一个模块需要ssh到目的主机多次,开启该模式减少ssh连接次数,缩短ansible执行时间。
//在部署大规模服务器或引用模块非常多时,开启pipelining会给ansible带来显著的性能提升
  1. node20扩展分区(使用虚拟机的直接跳过这部分就行,直接参考第一引用资料就行)

这里我踩了个坑,就是原服务器上在装系统时把全部磁盘空间都给分配了,所以没办法扩展分区。最后自己太菜,就重装一遍系统,自定义分区,没将全部磁盘空间全部分配出去,5T的磁盘空间分出去2T,剩下3T空间没分配,在这一步用来扩展分区。 这里我就以我自己扩展过程来讲(使用虚拟机的直接参考引用资料来配置).

查看磁盘使用情况:

	[root@node20 ~]# fdisk -l

在这里插入图片描述
可以看到我的/dev/sda就是5T的磁盘空间,然后我在重装系统时分配出去了2T空间,就如图中第二个红框所示/dev/sda3,这一部分空间的类型是linux LVM,但是这2T空间并不能用来做cinder服务的存储空间,因为该分区放着系统其它的文件信息。所以我将会扩展/dev/sda分区,将剩下的3T空间分配给一个新的空分区,也就是/dev/sda4。过程如下:

//开始扩展分区
[root@node20 ~]# fdisk /dev/sda

在这里插入图片描述
输入n就是创建一个新的分区。
在这里插入图片描述
然后需要指定分区号,前面的图中可以看到1,2,3分区号已经使用了。这里分区号从5开始是因为我早就已经将3T空间分配给4分区了,所以4分区号也使用了。我就简单演示一下创建分区的情况就行。
在这里插入图片描述
这样就创建了一个新的分区5了。然后再输入w,接着重启服务器才会生效,看一下效果:
在这里插入图片描述
接着正文,/dev/sda5分区只是演示用,/dev/sda4分区才是我用来当做cinder服务的存储空间。可以看到该分区的type是linux filesyste,然而我部署cinder服务时,使用的存储空间type应该是linux LVM的。所以我还需要将分区4的类型改为linux LVM,操作如下:
在这里插入图片描述
先输入t,然后指定分区4,输入L看看类型情况:
在这里插入图片描述
找到了linux LVM对应的typeID为31,然后输入31。在这里插入图片描述
然后输入w保存,重启服务器,就行。

  1. node20配置cinder(块存储)信息
[root@node20 ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
//我服务器的空白分区是/dev/sda4,虚拟机的添加的虚拟硬盘应该是/dev/sdb,注意区分
[root@node20 ~]# pvcreate /dev/sda4
[root@node20 ~]# vgcreate cinder /dev/sda4
// 保证开机自启
[root@node20 ~]# systemctl status lvm2-lvmetad.service

在这里插入图片描述

  1. node20安装kolla-ansible
//stein版本采用如下命令
[root@node20 ~]# pip install kolla-ansible==8.0.1 --ignore-installed PyYAML
//train版本采用如下命令,我这里就是使用的train版本
[root@node20 ~]# pip install kolla-ansible==9.0.1 --ignore-installed PyYAML	

复制kolla-ansible的相关配置文件:

[root@node20 ~]# cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/
[root@node20 ~]# cp /usr/share/kolla-ansible/ansible/inventory/* /etc/kolla/
[root@node20 ~]# ls /etc/kolla/
all-in-one  globals.yml  multinode  passwords.yml

文件说明:all-in-one是安装单节点OpenStack的ansible自动安装配置文件;multinode是安装多节点OpenStack的ansible自动安装配置文件;globals.yml是OpenStack部署的自定义配置文件;passwords.yml是OpenStack中各个服务的密码文件。

生成密钥,并授权两台服务器:

//直接回车到底就行
[root@node20 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MlEHvdjHadF+ydFC80Gg0u/sKcP+hvC8gDpvHTOGuL4 root@OpenStack-con
The key's randomart image is:
+---[RSA 2048]----+
|        oo.  +=o.|
|       . .o o o+o|
|      .  + = +..+|
|       .. + * .o.|
|      + S  o . . |
|     . +.*  o    |
|      ..o.O .o   |
|     o.. ..B...  |
|    .E=.  .o*+   |
+----[SHA256]-----+
[root@node20 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node20
[root@node20 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node19

配置multinode多节点主机

[root@node20 ~]# vim /etc/kolla/multinode
[control]
node20
[network]
node20
[compute]
node19
[monitoring]
node20
[storage]
node20
[deployment]
node20

检测所有主机是否正常通信:

[root@node20 ~]# ansible -i /etc/kolla/multinode all -m ping

出现node20和node19的success信息
自动生成openstack各服务的密码文件

[root@node20 ~]# kolla-genpwd
[root@node20 ~]# vim /etc/kolla/passwords.yml
keystone_admin_password: 123456    //第165行,修改网页登录密码

编辑/etc/kolla/global.yml自定义Openstack中的部署事项

[root@node20 ~]# vim /etc/kolla/globals.yml
//第14行和第15行,选择下载的基础镜像,5选1
# Valid options are ['centos', 'debian', 'rhel', 'ubuntu']
kolla_base_distro: "centos"

//第17行和第18行,选择的安装方法,2选1。binary二进制安装,source源码安装
# Valid options are [ binary, source ]
kolla_install_type: "source"

//第20行和第21行,选择OpenStack的版本标签,详细请看:https://releases.openstack.org/
# Valid option is Docker repository tag
openstack_release: "train"  //注意版本必须小写,后期下载的OpenStack相关的docker镜像标签也为stein。我是train版本失败,才换成stein
  
//第23行和第24行,存放配置文件的位置
# Location of configuration overrides
#node_custom_config: "/etc/kolla/config"  //默认存放地址
  
//第31行,OpenStack内部管理网络地址,通过该IP访问OpenStack Web页面进行管理。如果启用了高可用,需要设置为VIP(漂移IP)
kolla_internal_vip_address: "172.22.59.4"
  
//第87行,OpenStack内部管理网络地址的网卡接口
network_interface: "enp49s0f0"
 
//第92~94、97~98行去除注释,使内部通信网络都走ens32
api_interface: "{{ network_interface }}"
storage_interface: "{{ network_interface }}"
cluster_interface: "{{ network_interface }}"
tunnel_interface: "{{ network_interface }}"
dns_interface: "{{ network_interface }}"
  
//第105行,OpenStack外部(或公共)网络的网卡接口,可以是vlan模式或flat模式。
//此网卡应该在没有IP地址的情况下处于活动,如果不是,那么OpenStack云平台中的云主机实例将无法访问外部网络。(存在IP时br-ex桥接就不成功)
neutron_external_interface: "enp33s0f0"

//127行
neutron_plugin_agent: "openvswitch"

  
//第190行,关闭高可用
enable_haproxy: "no"
 
//第213行,启用cinder(块存储)
enable_cinder: "yes"
 
//第218行,cinder(块存储)后端启用lvm
enable_cinder_backend_lvm: "yes"
 
//第421行,cinder(块存储)的卷组名称,需要和OpenStack-sto主机上的一致
cinder_volume_group: "cinder"
 
//第443行和第444行,指定nova-compute守护进程使用的虚拟化技术。
//nova-compute是一个非常重要的守护进程,负责创建和终止虚拟机实例,即管理虚拟机实例的生命周期,
//使用虚拟机的下面字段设置qemu,我服务器的话就使用kvm的
# Valid options are [ qemu, kvm, vmware, xenapi ]
nova_compute_virt_type: "kvm"
// 559行
ironic_dnsmasq_dhcp_range:
// 601行
tempest_image_id:
tempest_flavor_ref_id:
tempest_public_network_id:
tempest_floating_network_name:

开始部署
马上就要开始部署了,不过还要做一些预防踩坑的准备,如下:

[root@node20 ~]# dig registry-1.docker.io

在这里插入图片描述
将红框的内容写入/etc/hosts文件中,如下:
在这里插入图片描述
部署语句如下:

[root@node20 ~]# kolla-ansible -i /etc/kolla/multinode bootstrap-servers
[root@node20 ~]# kolla-ansible -i /etc/kolla/multinode prechecks

编辑docker volume挂载方式,并指定docker加速器

//由于不存在docker卷挂载配置文件,所以需要手动生成
# mkdir -p /etc/systemd/system/docker.service.d/
# vim /etc/systemd/system/docker.service.d/kolla.conf
[Service]
MountFlags=shared
//指定加速器,这里使用阿里云的加速器
# tee /etc/docker/daemon.json << 'EOF'
{
  "registry-mirrors": ["https://8mkqrctt.mirror.aliyuncs.com"]
}
EOF
# systemctl daemon-reload
# systemctl restart docker && systemctl enable docker

拉取镜像

[root@node20 ~]# kolla-ansible -i /etc/kolla/multinode pull

拉取时,如果报错,可以尝试重新拉取。检查配置文件是否有问题,没有问题的前提下可以尝试换版本进行操作。

部署openstack

[root@node20 ~]# kolla-ansible -i /etc/kolla/multinode deploy

验证部署

在这里插入图片描述
部署完后,我就开始配置网络了。想办法让虚拟机实例可以通外网

网络配置

这里主要是针对node20(也就是控制节点),node20的enp33s0f0网卡在前面部署的时候已经配置过了。接下来主要重新配置enp49s0f0和br-ex。我原先的enp49s0f0的网卡配置如下:
在这里插入图片描述
现在要将enp49s0f0网卡配置成如下:
在这里插入图片描述
接着配置br-ex网卡:
在这里插入图片描述
注意:要将IPADDR、GATEWAY和DNS1改成你们主机上相应的地址
配置完网卡后,先别急着重启网络,继续配置neutron。

删除kolla默认创建的虚拟bridge

// 使用如下命令可以查看kolla默认创建的虚拟bridge
[root@node20 ~]# docker exec -u root -it neutron_openvswitch_agent ovs-vsctl show
//使用如下命令删除kolla默认创建的虚拟bridge
[root@node20 ~]# docker exec -u root -it neutron_openvswitch_agent ovs-vsctl del-br br-ex
[root@node20 ~]# docker exec -u root -it neutron_openvswitch_agent ovs-vsctl del-br br-int
[root@node20 ~]# docker exec -u root -it neutron_openvswitch_agent ovs-vsctl del-br br-tun

修改neutron原有的Network网络:
编辑/etc/kolla/neutron-openvswitch-agent/ml2_conf.ini

[root@node20 ~]# vim /etc/kolla/neutron-openvswitch-agent/ml2_conf.ini

在这里插入图片描述
修改红框处。

[root@node20 ~]# vim /etc/kolla/neutron-server/ml2_conf.ini

在这里插入图片描述
修改红框处。

//使用如下命令添加新的虚拟bridge
[root@node20 ~]# docker exec -u root -it neutron_openvswitch_agent ovs-vsctl add-br br-ex
// 将enp49s0f0换成你自己的网卡
[root@node20 ~]# docker exec -u root -it neutron_openvswitch_agent ovs-vsctl add-port br-ex enp49s0f0
// 将enp33s0f0换成你自己的网卡
[root@node20 ~]# docker exec -u root -it neutron_openvswitch_agent ovs-vsctl add-port br-ex enp33s0f0

重启网络和服务

[root@node20 ~]# systemctl restart network
[root@node20 ~]# docker restart neutron_openvswitch_agent
[root@node20 ~]# docker restart neutron_server

这样网络配置就搞好了,自行寻找创建实例和网络的教程,实例应该可以ping通外网了。

简单的创建实例和外网的方法

使用kolla自带的初始化脚本init-runonce

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

在这里插入图片描述
把脚本中红框地方换成自己主机的外网地址,这样脚本会自己帮你创建一个连接外网的实例。或者你自己到控制台创建。

[root@node20 ~]# source  /etc/kolla/admin-openrc.sh 
[root@node20 ~]# bash /usr/share/kolla-ansible/init-runonce

这个脚本会自动上传镜像,并创建一个简单的实例。
在这里插入图片描述
然后自己进实例的控制台去ping外网试试。

引用资料

  1. 总的部署过程我是参照这个多节点部署教程的。
  2. 单节点部署过程
    这两教程是同一个作者的,使用虚拟机多节点部署的人需要参考一下单节点中的准备工作
  3. 我参考的openstack的网络原理
  4. 我参考的openstack的网卡配置,这里面是ubuntu的配置,不过思路一样的

猜你喜欢

转载自blog.csdn.net/qq_33316576/article/details/106886301
今日推荐