Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第1张图片

 

一、简介

Docker容器化再加上Ansible自动化运维工具的部署方式,构成了Kolla-Ansible项目。Kolla-Ansible的官方文档介绍了如何在在线的情况下,如何使用该项目部署Openstack。

本文详细介绍如何使用Kolla-Ansible项目,在离线的情况下,在物理机服务器上操作部署Openstack(Pike或是Queens)多节点(Multinodes)的步骤。将Kolla-Ansible转化为离线部署,主要就是yum源,python源以及docker仓库的搭建配置,有了这些离线基础,才具备离线安装部署Openstack的条件。

本文中设计的yum安装,python安装涉及的源均为自己搭建好的离线源,docker的registry本地私有仓库。其中yum源,python源以及docker仓库的搭建,参照其对应的文档,此处不详细叙述。

 

二、部署结构设计

本文部署示例采用七台机器部署高可用(HA)的Openstack环境,分别是: monitor,controller01,controller02,controller03,computer01,computer02, computer03另外一台机器提供离线yum、python源以及docker私有仓库,主机名是source。

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第2张图片

注:

1controller01、controller02、controller03三个组成control角色高可用(配置三台control自动会配置成HA),同时,部署ceph分布式集群,由三台controller和三台computer共同组成storage存储。

2源配置source主机,配有yum源、python源以及docker私有仓库。

3网卡做bond设置,模式(mode)取4,链路聚合(LACP)。本示例中俩个万兆网卡绑定做bond0, 俩个前兆网卡绑定做bond1。bond0走openstack管理和ceph存储,bond1走虚机对外访问公开网络。

 

三、双网卡绑定Bond设置

三台controller和三台computer以及monitor均执行。双网卡绑定,模式取4,链路聚合模式(LACP),俩个万兆的网卡(eth0和eth1)做bond0(有IP),俩个前兆的网卡(eth2和eth3)做bond1(无IP)。

1)bond0、eth0和eth1的配置文件如下:

ifcfg-bond0                                                       ifcfg-eth0                      ifcfg-eth1

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第3张图片

2)bond1、eth2和eth3的配置文件如下:

ifcfg-bond1                                                               ifcfg-eth2                      ifcfg-eth3

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第4张图片

配置修改完之后,重启网卡:

# service network restart

查看绑定结果

# cat /proc/net/bonding/bond0

# cat /proc/net/bonding/bond1

查看到的结果中,eth0、eth1和bond0的mac地址一致,eth2、eth3和bond1的mac地址一致,即可。

四、基础环境准备

三台controller和三台computer以及monitor均执行。

4.1升级系统

# yum update -y

4.2安装必须的软件

# yum install git net-tools ntp vim wget ansible gcc openssl-devel python-devel python-pip libffi-devel libselinux-python python-openstackclient python-neutronclient -y

4.3添加ntp时钟服务器

# vi /etc/ntp.conf

如下图所示,

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第5张图片

添加ntp时钟主备服务器,“10.109.192.4 10.109.192.42”是我们自己的时钟主备服务器,大家在安装部署中可以使用自己的时钟服务器,目的是保持各个服务器之间的时间一致,不然会导致openstack的服务异常。

server 10.109.192.4   prefer

server 10.109.192.42

# systemctl enable ntpd.service && systemctl start ntpd.service && systemctl status ntpd.service

# ntpq -p

可以查看到同步的时间主机:

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第6张图片

4.4关闭libvirtd服务

创建的虚机没有libvirtd服务,但是物理机服务器会有,这个必须要关闭。

# systemctl stop libvirtd.service && systemctl disable libvirtd.service && systemctl status libvirtd.service

4.5关闭防火墙

# systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld

4.6 disable 掉selinux

# sed -i '/^SELINUX=.*/c SELINUX=disabled' /etc/selinux/config

或是直接修改:

# vim /etc/selinux/config

设置SELINUX=disabled ,如下图所示:
 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第7张图片
reboot之后生效。

 

四、安装配置Docker

4.1安装Docker软件包

新增Docker的Yum仓库:

# vim /etc/yum.repos.d/docker.repo

添加以下内容

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

然后清除yum,做缓存:

# yum clean all && yum makecache

安装docker:

# yum install -y epel-release
# yum install -y docker-engine docker-engine-selinux
# pip install urllib3 shade docker

使用阿里的docker镜像服务:

# mkdir -p /etc/docker
# vim /etc/docker/daemon.json

添加以下内容:

{
  "registry-mirrors": ["https://7g5a4z30.mirror.aliyuncs.com"]
}

 

4.2重启Docker服务

# systemctl daemon-reload && systemctl enable docker && systemctl restart docker && systemctl status docker

4.3检查镜像服务是否正常

#  docker run --rm hello-world

结果正常输出,可下载hello-world镜像即可。

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第8张图片

4.4修改Docker服务配置

添加信任source节点的Registry服务

# vim /usr/lib/systemd/system/docker.service

修改如下:

ExecStart=/usr/bin/dockerd --insecure-registry 192.168.136.138:4000

重启Docker服务:

# systemctl daemon-reload && systemctl restart docker && systemctl status docker

4.5测试Registry服务是否正常

# curl -X GET http:// 192.168.136.138:4000/v2/_catalog

注:192.168.136.138:4000,是source主机的docker私有仓库地址和端口号。

正常如下返回数据即可:

{"repositories":["kolla/centos-source-aodh-api","kolla/centos-source-aodh-base","kolla/centos-source-aodh-evaluator","kolla/centos-source-aodh-expirer",………]}

4.6 source的私有docker仓库搭建以及kolla镜像导入

这里单独说一下source主机的私有仓库的kolla镜像的导入。
官方文档给出的centos-source-registry-pike.tar.gz该kolla镜像包去http://tarballs.openstack.org/kolla/images/上面wget上获取。但是该网站18年3月底已经不提供获取,只有去http://hub.docker.com/u/kolla上pull,但是镜像很多,一个个pull比较麻烦,现在给出制作好的centos-source-registry-pike.tar.gz包,按照官方文档,解压到挂载目录/opt/registry/即可。
解压OpenStack Pike的Docker镜像:

# tar zxvf centos-source-registry-pike.tar.gz -C /opt/registry/

然后测试registry服务数据

# curl -X GET http:// 192.168.136.138:4000/v2/_catalog

正常如下返回数据即可:

{"repositories":["kolla/centos-source-aodh-api","kolla/centos-source-aodh-base","kolla/centos-source-aodh-evaluator","kolla/centos-source-aodh-expirer",………]}

 

五、Ceph标签、设置Hostname以及授信于monitor

5.1为计算主机的空白硬盘打ceph标签

在三台计算主机(computer01、computer02、computer03)均执行。

物理机服务器上可能存在第二块或是第三四五六块等等硬盘(未格式化,未挂载,没有使用的空白硬盘)均执行相同操作。接下来,打上Ceph标签。

首先输入以下命令,查看有哪些硬盘:

# fdisk -l

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第9张图片

如上看到了“/dev/sdb”此块硬盘,现在为此块硬盘打上ceph标签。

# parted /dev/sdb -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1

再查看结果:

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第10张图片

如上图所示,可见“/dev/sdb”硬盘被打上“KOLLA_CEPH_OSD_BOOTSTRAP”的name标签。后续安装的时候,ceph容器安装会自动寻找这个标签进行操作。

若还存在别的硬盘也作为ceph存储,一样打上标签即可:

# parted /dev/sdc -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1
# parted /dev/sdd -s -- mklabel gpt mkpart KOLLA_CEPH_OSD_BOOTSTRAP 1 -1

5.2为ceph_rgw创建池

Ceph_RGW需要一个健康的集群才能成功部署。在初次启动时,RGW将创建几个池。第一个池应处于运行状态以继续第二个池,依此类推。因此,在进行一体化部署的情况下,必须在部署之前更改池的默认副本数。按照需求,本示例部署选用三个池副本。

本次部署针对monitor机器和所有的computer机器(computer01、computer02、computer03)修改文件 /etc/kolla/config/ceph.conf并添加内容:

# mkdir -pv /etc/kolla/config/ && vim /etc/kolla/config/ceph.conf

修改内容如下:

[global]
osd pool default size = 3
osd pool default min size = 3

5.3 配置Hostname

七台机器按照每台对应的角色执行如下命令修改hostname:

# hostnamectl set-hostname monitor

# hostnamectl set-hostname controller01

# hostnamectl set-hostname controller02

# hostnamectl set-hostname controller03

# hostnamectl set-hostname computer01

# hostnamectl set-hostname computer02

# hostnamectl set-hostname computer03

七台机器都修改“/etc/hosts”文件,然后reboot生效,如下图所示:

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第11张图片

这里选取bond0的IP地址。七台机器均执行命令如下:

# cat >> /etc/hosts <

 

5.4授信monitor节点

七台机器,七个节点都执行以下操作:

# ssh-keygen


 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第12张图片

然后将公钥分发给七台机器:

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@monitor

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@controller01

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@controller02

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@controller03

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@computer01

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@computer02

# ssh-copy-id -i ~/.ssh/id_rsa.pub root@computer03


 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第13张图片

这样每个节点的authorized_keys都有monitor的公钥,授信成功。

最后在monitor上分别如下操作,均成功ssh成功即可。

# ssh monitor

# ssh controller01

# ssh controller02

# ssh controller03

# ssh computer01

# ssh computer02

# ssh computer03

 

六、ansible和kolla-ansible的安装以及配置

以下步骤是在monitor上操作,这台是deployment机器。
本文不需要对kolla-ansible项目进行开发,使用pip方式安装,更为稳定。

6.1 ansible的其配置

ansible已经在上面安装好了,现在只需要配置即可。

# vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking=False
pipelining=True
forks=100
timeout=800
deprecation_warnings=False

注:
1)host_key_checking设置为false,在ansible远程主机时就不要主机的key校验;
2)timeout设置800秒,防止后面运行剧本时候会爆超时12秒错误。

 

6.2安装kolla-ansible及其配置

# pip install kolla kolla-ansible


配置kolla-ansible:
1)拷贝globals.yml 和passwords.yml 到 /etc/kolla 目录:

# cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/


2)拷贝kolla-ansible的主机清单文件(all-in-one和multinode):

# mkdir -pv /opt/kolla/config
# cd /opt/kolla/config
# cp -rv /usr/share/kolla-ansible/ansible/inventory/* .

 

6.3配置Nova(可选)

特别声明,VMware虚拟机上安装需要进行此步骤,直接在物理机服务器上安装,则跳过此步骤。

虚拟机操作,使用qemu,不是kvm,进行如下修改:

# mkdir -pv /etc/kolla/config/nova
# vi /etc/kolla/config/nova/nova-compute.conf


添加以下内容:

[libvirt]
virt_type=qemu
cpu_mode = none

6.4生成随机密码文件

# kolla-genpwd

修改刚才生成的随机密码,admin的web页面的登陆密码

# vim /etc/kolla/passwords.yml
keystone_admin_password: admin

6.5修改物理网卡的neutron配置(为vlan模式配置)

# vim /usr/share/kolla-ansible/ansible/roles/neutron/templates/ml2_conf.ini.j2

在大约41行修改成如下:

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第14张图片

6.6修改全局配置

全局配置文件globals.yml包含了如下修改项:

# vim /etc/kolla/globals.yml

按照以下内容进行修改:

kolla_base_distro: "centos"
kolla_install_type: "source"
openstack_release: "queens"

docker_registry: "20.46.87.183:4000"
docker_namespace: "kolla"

kolla_internal_vip_address: "20.46.10.21"

network_interface: "bond0"
neutron_external_interface: "bond1"

neutron_plugin_agent: "openvswitch"

enable_ceph: "yes"
enable_ceph_rgw: "yes"
enable_haproxy: "yes"
enable_neutron_dvr: "yes"
enable_neutron_agent_ha: "yes"

ceph_pool_pg_num: 128
ceph_pool_pgp_num: 128

以上各项解释:

1docker_registry: "192.168.136.137:4000",此处为配置的source的离线私有docker仓库的IP以及端口号。

2docker_namespace: "kolla",这个是仓库镜像的统一命名空间即是前缀,我给的镜像的前缀就是“kolla/”开头的。

3kolla_internal_vip_address: "17.17.62.2" ,这个是openstack的页面登陆地址,走的是“bond0”网卡。

4network_interface: "bond0",这个是openstack内部的api服务都会绑定到这个网卡接口上,除此之外,vxlan和隧道和存储网络也默认走这个网络接口。

5neutron_external_interface: "bond1",openstack的外部管理网络的网卡接口。

6enable_ceph: "yes"和enable_ceph_rgw: "yes",选择为yes,就可默认安装ceph。

7enable_haproxy: "yes",openstack的外部管理网络地址没有使用过,需要启用高可用proxy,确定可以使用。

8ceph_pool_pg_num: 128和ceph_pool_pgp_num: 128,参照如下:小于5个OSD时可把pg_num设置为128

  1. OSD数量在5到10个之间的,可以把pg_num设置为512
  2. OSD数量在10到50个时候,可以把pg_num设置为4096
  3. OSD大于50时,理解权衡方法,借助pgcalc工具计算pg_num取值

9neutron_plugin_agent: "openvswitch"enable_neutron_dvr: "yes"这个配置可以使创建虚机的时候,直接选择外部网络,而不需要绑定内部地址。enable_neutron_agent_ha启用,会为该虚机外部网络创建俩个dhcp分配IP,符合高可用模式。

特别说明:
此处的docker仓库配置的是自己的source源私有仓库。假如在线使用hub.docker.com的在线仓库,请参照如下配置。

docker_registry: ""
docker_namespace: "kolla"
openstack_release: "pike"

这里主要就是“docker_registry”配置为空即可。其他的如上不变。

参照:“http://tarballs.openstack.org/kolla/images/README.txt”(截图如下)

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第15张图片

 

6.6配置主机清单

由于本文是多节点安装,则需要修改multinode文件,即可做到修改剧本执行的主机清单文件。control角色配置三台,即可做到高可用(HA)。

# vim /opt/kolla/multinode

如下图所示:

[control]
controller01
controller02
controller03

[network]
controller01
controller02
controller03

[inner-compute]

[external-compute]
computer01
computer02
computer03

[compute:children]
inner-compute
external-compute

[storage]
controller01
controller02
controller03
computer01
computer02
computer03

[monitoring]
monitor

[deployment]
monitor

 

七、部署Openstack

部署操作均在montior节点执行,如下:

7.1预安装

kolla针对Bootstrap服务的依赖安装:
# kolla-ansible -i ./multinode bootstrap-servers
 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第16张图片
过程省略;
结果如下,则运行正确:
 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第17张图片

 

7.2检查

安装之前还需要预检查一下主机环境以及配置文件是否正确。

# ansible -i multinode all -m ping
# kolla-ansible -i ./multinode prechecks
 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第18张图片
过程省略;
结果如下,则运行正确:
 

7.3拉取镜像

相较于官方文档,在deploy部署之前增加此步骤,可以大大缩短部署openstack的时间(此步骤时间较长,预计2小时左右):
# kolla-ansible -i ./multinode pull
 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第19张图片
过程省略;
结果如下,则运行正确:
 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第20张图片

 

7.5部署

开始部署openstack(此步骤预计半小时之内):
# kolla-ansible -i ./multinode deploy
Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第21张图片
过程省略;
结果如下,则运行正确:
 

 

7.6部署之后

部署完成之后,还需要这步操作,生成环境变量和脚本:
# kolla-ansible -i ./multinode post-deploy
 Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第22张图片
# cat /etc/kolla/admin-openrc.sh
如下所示:

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://192.168.136.210:35357/v3
export OS_INTERFACE=internal
export OS_IDENTITY_API_VERSION=3
export OS_REGION_NAME=RegionOne

至此multinodes部署完成,浏览器输入外网访问地址:http://192.168.136.210,即可访问Openstack的登陆页面,用户名和密码都是之前设置的admin。界面如下图所示:

Openstack高可用离线部署(使用Kolla部署,后端存储使用CEPH)_第23张图片

 

7.8销毁openstack

假如不需要这个openstack环境了,可以执行如下命令进行销毁该环境:

# kolla-ansible destroy -i ./multinode  --yes-i-really-really-mean-i

该销毁指令,会停止并删除各台机器上运行的docker容器,但是对yum和python安装的文件以及pull的docker的images镜像文件不做变更。

 

八、安装openstack客户端

安装openstack客户端,方便控制台操控。

pip安装可能存在源码冲突,这里使用yum在线安装。

# yum install centos-release-openstack-pike

# yum install python-openstackclient python-neutronclient

# which openstack

即可查看安装的openstack的控制台客户端。

你可能感兴趣的:(linux,kolla,openstack,pike,queens)