基础-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 架构¶
准备环境¶
基础环境检查¶
在部署工作开始前,应件着手检查我们接手的基础环境,一般来说,需要一下几项检查:
- 检查确认公网、租户网、存储网等网络规划;
- 检查确认集群节点网卡状态、配置是否跟网络规划一致;
- 检查 YUM 是否正确可用,软件包版本是否符合预期;
- 检查 DNS 服务器是否正确可用, 需要用到的域名是否能正常解析;
- 确认数据库是否需要使用 SSD ,检查 SSD 状态和盘符是否符合预期。
部署机准备¶
我们推荐在生产环境部署 OpenStack 环境时,将 Ansible 部署机与 OpenStack 节点分离开,如果是测试环境,可以考虑使用某个 OpenStack 节点作为部署用机.
操作系统配置¶
-
CentOS 7 版本及以上操作系统;
-
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
- 部署机到 OpenStack 各节点的 SSH 免密;
- Clone 最新版本 Ansible 部署代码。
集群初始化¶
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 次
- 备份日志保存 4 周
这些规则,视情况而定,如果有必要,可以进行修改.
YUM¶
由于 OpenStack 是经我司二次研发定制的,所以需要配置我们自己的 YUM 源,而不能直接使用社区的 YUM 配置
SSH¶
修改sshd配置文件权限,以提升服务器访问安全性
NTP¶
安装配置NTP服务,以确保集群所有服务器时间同步。
必要工具安装¶
安装必要常用工具,以方便后续的操作和运维,一般安装工具如下:
- vim
- net-tools
- ntpdate
上述内容,在执行操作之前,需要先完成 [部署配置]
yum -y install vim net-tools ntpdate
部署前配置¶
Ansible引用一些包含强制和可选配置指令的文件。在运行Ansible playbooks之前,修改这些文件来定义目标环境。相关代码路径:
./config.yml
./hosts
配置任务包括:
- OpenStack 部署所依赖的基础服务、中间件等配置;
- 按角色分类 (E.g controller, network) 的集群主机列表;
- OpenStack 集群网卡、高可用地址、管理网、租户网、存储网等配置;
- 部署集群所用软件版本;
- OpenStack 计算、网络、存储所用后端
注意
在文件 config.yml
中所有配置项,已经在该文件中有详细解释说明,在做配置使用时,请仔细阅读这些注释,忽略这些信息可能会产生一些不必要的错误。
下面,我们将对 hosts
、 config.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