跳转至

基础-O版-00-部署手册

集群简介

OpenStack 介绍

OpenStack 是 OpenStack 组基于开源社区自主研发的项目,旨在提供公共及私有云服务。主要包括计算服务(Nova)、网络服务(Neutron)、块存储服务(Cinder)、裸机服务(Ironic)、镜像服务(Glance)、认证服务(Keystone)等组件。

OpenStack 版本

现有的版本都是基于 OpenStack Queens 版本的基础上开发的自研版本,现在提供的稳定版本为 6.0.4.000,线上大部分环境都是部署的这个版本,而 6.1.0.000 正在发布中。

OpenStack 部署

OpenStack 的部署是基于 Ansible 的自动化部署,部署灵活,支持多种部署方式。现在的部署主要支持 KVM、KVM + Ironic 等方式,网络方面支持 VLAN、VXLAN 等。

OpenStack 架构

openstack-service

准备环境

基础环境检查

在部署工作开始前,应件着手检查我们接手的基础环境,一般来说,需要一下几项检查:

  • 检查确认公网、租户网、存储网等网络规划;
  • 检查确认集群节点网卡状态、配置是否跟网络规划一致;
  • 检查 YUM 是否正确可用,软件包版本是否符合预期;
  • 检查 DNS 服务器是否正确可用, 需要用到的域名是否能正常解析;
  • 确认数据库是否需要使用 SSD ,检查 SSD 状态和盘符是否符合预期。

部署机准备

prepare-1

我们推荐在生产环境部署 OpenStack 环境时,将 Ansible 部署机与 OpenStack 节点分离开,如果是测试环境,可以考虑使用某个 OpenStack 节点作为部署用机.

操作系统配置

  1. CentOS 7 版本及以上操作系统;

  2. 2.5.x 版本以上 Ansible;

YUM 源中提供的 Ansible ,一般是 2.4.x 版本,可以事先下载好 Ansible 2.5.x 安装包,使用 yum 本地安装的方式进行安装。

yum localinstall -y ansible-2.5.2-1.el7.ans.noarch.rpm

安装 Ansible 依赖包: python-netaddr、python2-jmespath、rsync;

yum install -y python-netaddr python2-jmespath rsync
  1. 部署机到 OpenStack 各节点的 SSH 免密;
  2. Clone 最新版本 Ansible 部署代码。

集群初始化

prepare-2

OpenStack 节点主机初始化工作,由 system_init 等角色来完成,下面将简单说明该role都完成了哪些工作。相关代码路径:

./roles/system_init
./roles/ntp
./roles/bind

主机名

通常我们为方便管理,会统一为 OpenStack 节点更改主机名,命名规则为:使用字母 ‘e’ 替换主机管理网IP的 ‘.’ 组成字符串,作为主机名使用

DNS

OpenStack 各组件间通信的 endpoint 我们使用域名的形势访问,所以,需要配置 DNS 服务器,通常 DNS 服务器在部署前已完成搭建并完成解析配置。

Kernel

根据 OpenStack 集群需求,我们通常需要通过文件 sysctl.conf 和 limits.conf 来调整一些内核参数

SELinux

为避免部署以及运维过程中一些不必要的问题,我们通常选择关闭 SELinux

Firewalld

为避免部署以及运维过程中一些不必要的问题,我们通常选择关闭 Firewalld

Logrotate

我们为日志轮转,设置了一些规则:

  1. 每周轮转 1 次
  2. 备份日志保存 4 周

这些规则,视情况而定,如果有必要,可以进行修改.

YUM

由于 OpenStack 是经我司二次研发定制的,所以需要配置我们自己的 YUM 源,而不能直接使用社区的 YUM 配置

SSH

修改sshd配置文件权限,以提升服务器访问安全性

NTP

安装配置NTP服务,以确保集群所有服务器时间同步。

必要工具安装

安装必要常用工具,以方便后续的操作和运维,一般安装工具如下:

  1. vim
  2. net-tools
  3. ntpdate

上述内容,在执行操作之前,需要先完成 [部署配置]

yum -y install vim net-tools ntpdate

部署前配置

prepare-2

Ansible引用一些包含强制和可选配置指令的文件。在运行Ansible playbooks之前,修改这些文件来定义目标环境。相关代码路径:

./config.yml
./hosts

配置任务包括:

  1. OpenStack 部署所依赖的基础服务、中间件等配置;
  2. 按角色分类 (E.g controller, network) 的集群主机列表;
  3. OpenStack 集群网卡、高可用地址、管理网、租户网、存储网等配置;
  4. 部署集群所用软件版本;
  5. OpenStack 计算、网络、存储所用后端

注意

在文件 config.yml 中所有配置项,已经在该文件中有详细解释说明,在做配置使用时,请仔细阅读这些注释,忽略这些信息可能会产生一些不必要的错误。

下面,我们将对 hostsconfig.yml 两个文件的主体内容,做一个简单的介绍:

hosts

# hosts
[ceph_rados_gateway]            # Ceph RGW 网关(对象存储)
[ceph_rados_gateway_ha]         # Ceph RGW 网关高可用 VIP
[dns_server]                    # DNS server 节点
[os_ha]                         # OpenStack 控制节点组件高可用vip
[proxy_ha]                      # novncproxy (分离部署时)高可用vip
[memcached_server]              # Memcached 节点
[mariadb]                       # MariaDB 节点
[mysql]                         # MySQL 节点
[nova_rabbit]                   # Nova 组件用 RabbitMQ 集群节点
[other_rabbit]                  # 其他组件用 RabbitMQ 集群节点
[kgc_server]                    # Keystone、Glance、Cinder 控制节点
[nova_server]                   # Nova 控制节点
[proxy]                         # novncproxy 节点
[neutron_server]                # Neutron 控制节点
[compute]                       # 计算节点
[network]                       # 网络节点
[ironic]                        # Bare Metal 节点
[ironic_inspector]              # ronic inspector 节点
[vmware_compute]                # 对接 VMware 的 compute 节点

注解

需要说明的是,Mariadb 部分,为数据库使用 Galera 集群时配置, 如果选用主从同步或单节点数据库, 则填写 MySQL 部分。

config.yml

# 各组件 endpoint 的域名配置
domain:

# NTP 服务器配置
ntp_server:

# YUM 服务器配置
yum_server:

# 数据库网络相关配置
# MariaDB
network_mariadb:
   internal:
     interface:
     cidr:

# MySQL:
network_mysql:
  internal:
    interface:
    cidr:
    vip:

# OpenStack 集群网络相关配置
network_openstack:
  # 管理网
  management:
    cidr:
    vip:
    proxy_vip:
  # 租户网
  tenant:
    interface:
      compute:
      network:
      vmware_compute:
    cidr:
    network_type:
    vlan_range:
  # 公网(或者是模拟公网)
  public:
    interface:
      compute:
      network:
      vmware_compute:
    cidr:
    vlan_id:
  # 存储网
  storage:
    cidr:
  # Ironic provision 网(非 Ironic 环境无需配置)
  provision:
    cidr:
    vlan_id:
    dhcp_range_start:
    dhcp_range_end:
    vip:
    switch_info:
  # Ironic Inspector 网(非 Ironic 环境无需配置)
  inspector:
    cidr:
    dhcp_range_start:
    dhcp_range_end:

# OpenStack 版本配置,可进行全局配置,或单独配置某个组件或客户端版本
version_openstack:
  global:
  cinder:
  cinderclient:
  glance:
  glanceclient:
  ironic:
  ironicclient:
  ironic_inspector:
  keystone:
  keystoneclient:
  neutron:
  neutronclient:
  nova:
  novaclient:
  openstackclient:

# OpenStack 后端配置
backend_openstack:
  # 存储后端配置
  cinder:
    backends:
  glance:
    stores:
  # 网络后端配置
  neutron:
    l3_mode:
  # 计算后端配置
  nova:
    compute_driver:
    images_type:

# 使用 VMware ESXI 作为 OpenStack 后端时的配置
vmware_openstack:
  username:
  password:
  host:
  cluster_name:
  network_maps:
  uplink_maps:

注意

各项配置值均为字符串形式,填写时,请注意双引号 " " 的使用。

开始部署

运行 playbooks

整个安装过程,分为三个步骤,需要运行三个主要 playbook:

  • setup_hosts.yml 该 playbook 将完成 OpenStack 集群各主机的初始化任务,所完成操作内容见 集群初始化
  • setup_middleware.yml 该 playbook 将完成 OpenStack 集群所依赖的中间件的部署安装,如 MySQL(MariaDB)、 HAproxy、 Memcached、 RabbitMQ等
  • setup_openstack.yml 该 playbook 将完成 OpenStack 集群的部署工作包含核心组件 Keystone、Nova、Neutron、Glance、Cinder 等

初始化集群

进入 ./playbooks 目录,执行以下命令:

ansible-playbook setup_hosts.yml

部署中间件

在部署数据库的时候,需要根据选用类型不同(E.g. Galera、主从等),需要更改 setup_middleware.yml 中要执行的 playbook 。

E.g. 数据库使用 Galera 集群方式:

# cat setup_middleware.yml
- import_playbook: memcached_install.yml
- import_playbook: rabbitmq.yml
- import_playbook: haproxy_keepalived_install.yml
- import_playbook: mariadb_install.yml
#- import_playbook: mysql_install.yml

./playbooks/ 目录下,执行以下命令:

# ansible-playbook setup_middleware.yml

警告

请注意,部署中间件这个步骤在完成 OpenStack 部署之后(维护阶段),切记不要再重复执行,否则会导致 OpenStack 集群出错。

集群部署

同样,根据集群的部署规划,需要调整 playbook 来完成个性化部署定制,例如是否部署 Ironic、是否启用 L3 模式等,下面是 setup_openstack.yml 文件的说明:

# cat setup_openstack.yml
- import_playbook: keystone.yml                             # 部署 Keystone 服务
- import_playbook: glance_install.yml                       # 部署 Glance 服务
- import_playbook: cinder_controller_install.yml            # 部署 controller 节点 Cinder 服务
- import_playbook: neutron_controller_install.yml           # 部署 controller 节点 Neutron 相关服务
- import_playbook: nova_controller.yml                      # 部署 controller 节点 Nova 相关服务
- import_playbook: nova_novncproxy.yml                      # 部署 Nova 的 novncproxy 服务
- import_playbook: cinder_compute_install.yml               # 部署 compute 节点 Cinder 服务
- import_playbook: neutron_compute.yml                      # 部署 compute 节点 Neutron 相关服务
- import_playbook: nova_compute.yml                         # 部署 compute 节点 Nova 相关服务
- import_playbook: neutron_network.yml                      # 部署网络节点,启用 L3 模式
#- import_playbook: ceph_rados_gateway.yml                   # 部署 Ceph RGW,部署 Ironic 需要用到对象存储
#- import_playbook: ironic_inspector.yml                     # 部署 Ironic Inspector 服务
#- import_playbook: ironic.yml                               # 部署 Ironic 服务

./playbook/ 目录下,执行以下命令:

# ansible-playbook setup_openstack.yml

由此,完成 OpenStack 集群部署工作,准备检查验收。

上传镜像

1.下载镜像(第一台控制节点上执行)

curl -O  http://10.129.178.104/ctyun/images/images-os/base/centos76-220310-0e43.qcow2



mkdir /data/images/ -p  && cd /data/images/ 
curl -O http://10.129.178.104/ctyun/centos-iso/centos76_v1.qcow2
curl -O  http://10.129.178.104/ctyun/centos/7/cloud/x86_64/CT-dev/cirros-0.3.5-x86_64-disk.img


qemu-img convert -f qcow2 -O raw centos76-220310-0e43.qcow2 centos76-220310-0e43.raw

2.上传镜像

glance image-create --name CentOS7.6 --file /data/images/centos76-220310-0e43.raw --disk-format raw --container-format bare --visibility public --protected True --property hw_qemu_guest_agent=yes --property os_type=linux --property os_distro=centos --property os_version=7.6 --property hw_vif_multiqueue_enabled=true --property ctcm_enabled=true --progress



source /root/admin-openrc.sh 
 glance image-create --name "centos76-220310-0e43" \
  --file /data/images/centos76-220310-0e43.raw \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --property os_type="linux" \
  --visibility public \
  --progress

source /root/admin-openrc.sh
 glance image-create --name "centos79200920220510" \
  --file /data/images/centos79200920220510.qcow2 \
  --disk-format qcow2 --container-format bare \
  --property hw_qemu_guest_agent=yes \
  --property os_type="linux" \
  --visibility public \
  --progress



source /root/admin-openrc.sh
glance image-create --name "cirros" \
  --file cirros-0.3.5-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --visibility public
openstack image list

3.检查镜像

source /root/admin-openrc.sh
openstack image list

虚拟化

我们可以修改虚拟化类型直接使用物理机CPU

virsh capabilities

[root@compute1 ~]# vim /etc/nova/nova.conf 
[libvirt]
注释此行
virt_type = qemu

添加如下行
virt_type = kvm
# 更改虚拟化类型
hw_machine_type = x86_64=pc-i440fx-rhel7.2.0
# 直接使用宿主机cpu
cpu_mode = host-passthrough

virt_type = kvm
hw_machine_type = x86_64=pc-i440fx-rhel7.2.0
cpu_mode = host-passthrough

systemctl restart libvirtd.service openstack-nova-compute.service

检查验收

在部署工作完成之后,我们需要执行以下操作来验证集群是否正常可用:

检查OpenStack服务状态

openstack compute service list
openstack volume service list
openstack network agent list

创建公网网络

source /root/admin-openrc.sh 
openstack network create --external --provider-network-type  vlan --provider-physical-network external --provider-segment 200 ext-net



openstack network create --external --provider-network-type  flat  --provider-physical-network  external  ext-net

openstack subnet create --network ext-net \
  --allocation-pool start=192.168.12.10,end=192.168.12.250 \
  --dns-nameserver 114.114.114.114 --gateway 192.168.12.254 \
  --subnet-range 192.168.12.0/24 sub-net

创建公网子网

openstack subnet create fip-agent-sub --subnet-range 192.168.11.0/24 --no-dhcp --service-type network:floatingip_agent_gateway --service-type network:router_gateway --network ext-net --allocation-pool start=192.168.11.11,end=192.168.11.100 --gateway 192.168.11.254

openstack subnet create ext-sub --subnet-range 192.168.12.0/24 --no-dhcp --service-type network:floatingip --network ext-net --allocation-pool start=192.168.12.11,end=192.168.12.100 --gateway 192.168.12.254

openstack subnet list

创建租户网络

openstack router create test
openstack router set --external-gateway ext-net test

openstack router unset --external-gateway ext-net test

openstack network create test
openstack subnet create --subnet-range 10.10.10.0/24 --network test --dns-nameserver 114.114.114.114 test
openstack router add subnet test test

openstack network list
openstack subnet list

安全组规则设置

openstack security group create --description "test" test

openstack security group rule create --proto icmp test
openstack security group rule create --proto tcp --dst-port 22  test

openstack security group list

创建flavor

openstack flavor create --vcpus 1 --ram 2048 flavor1

创建虚拟机

source /root/admin-openrc.sh 
nova boot \
--flavor flavor1 \
--nic net-name=test \
--security-group test \
--block-device id=ecfb7bf7-c906-4c3c-aec2-c90619570ae9,source=image,dest=volume,bootindex=0,size=100,shutdown=remove \
--meta vif_model=virtio \
--meta admin_pass=www.123 \
test01

source /root/admin-openrc.sh 
nova boot \
--flavor flavor1 \
--nic net-name=test \
--security-group test \
--block-device id=ecfb7bf7-c906-4c3c-aec2-c90619570ae9,source=image,dest=volume,bootindex=0,size=100,shutdown=remove \
--meta vif_model=virtio \
--meta admin_pass=www.123 \
test02

source /root/admin-openrc.sh 
nova boot \
--flavor flavor1 \
--nic net-name=test \
--security-group test \
--block-device id=ecfb7bf7-c906-4c3c-aec2-c90619570ae9,source=image,dest=volume,bootindex=0,size=100,shutdown=remove \
--meta vif_model=virtio \
--meta admin_pass=www.123 \
test03

source /root/admin-openrc.sh 
nova boot \
--flavor flavor1 \
--nic net-name=test \
--security-group test \
--block-device id=ecfb7bf7-c906-4c3c-aec2-c90619570ae9,source=image,dest=volume,bootindex=0,size=100,shutdown=remove \
--meta vif_model=virtio \
--meta admin_pass=www.123 \
test04





nova delete cirros
nova boot \
--flavor flavor1 \
--nic net-name=test \
--security-group default \
--block-device id=fff24b6c-96f7-4dfe-ac66-ad1b94979372,source=image,dest=volume,bootindex=0,size=100,shutdown=remove \
--meta vif_model=virtio \
--meta admin_pass=www.123 \
cirros

nova delete cirros01
nova boot \
--flavor flavor1 \
--nic net-name=test \
--security-group default \
--block-device id=fff24b6c-96f7-4dfe-ac66-ad1b94979372,source=image,dest=volume,bootindex=0,size=100,shutdown=remove \
--meta vif_model=virtio \
--meta admin_pass=www.123 \
cirros01

nova delete cirros02
nova boot \
--flavor flavor1 \
--nic net-name=test \
--security-group default \
--block-device id=fff24b6c-96f7-4dfe-ac66-ad1b94979372,source=image,dest=volume,bootindex=0,size=100,shutdown=remove \
--meta vif_model=virtio \
--meta admin_pass=www.123 \
cirros02


openstack console url show test01
openstack console url show test02

openstack console url show cirros

绑定浮动IP

openstack floating ip create ext-net
openstack floating ip list

openstack server add floating ip test01 192.168.12.14

nova list

openstack floating ip delete 192.168.12.16


systemctl stop neutron-l3-agent.service neutron-metadata-agent.service neutron-openvswitch-agent.service
systemctl disable neutron-l3-agent.service neutron-metadata-agent.service neutron-openvswitch-agent.service
poweroff

systemctl enable neutron-l3-agent.service neutron-metadata-agent.service neutron-openvswitch-agent.service
systemctl start neutron-l3-agent.service neutron-metadata-agent.service neutron-openvswitch-agent.service