目录
一、构建私有网络
1 配置控制节点的私有网络
2 配置计算节点的私有网络
二、 构建块存储设备
1 配置控制节点
2 安装并配置块节点
三、镜像封装
根据第一章节配置时设置的共有网络,现在共有网络上进行添加
私有网络主要用于实现网络隔离,外部访问私有网络时,需要申请浮点IP,进行备案
##配置`/etc/neutron/neutron.conf`` 文件并完成如下操作:
------------------------------------------------------
[DEFAULT] ---在[DEFAULT]部分,启用路由服务和重叠的IP地址
....
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
... <其他内容不变>
------------------------------------------------------
##配置 Modular Layer 2 (ML2) 插件,ML2插件使用Linuxbridge机制来为实例创建layer-2虚拟网络基础设施。
##配置/etc/neutron/plugins/ml2/ml2_conf.ini
------------------------------------------------------
[ml2]
...
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
...
flat_networks = provider
[ml2_type_vxlan] --为私有网络配置VXLAN网络识别的网络范围
...
vni_ranges = 1:1000
[securitygroup]
...
enable_ipset = True
------------------------------------------------------
##Linuxbridge代理为实例建立layer-2虚拟网络并且处理安全组规
##配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini``文件并且完成以下操作:
------------------------------------------------------
[linux_bridge]
physical_interface_mappings = provider:ens33
[vxlan]
enable_vxlan = True
local_ip = 192.168.19.71
l2_population = True
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
------------------------------------------------------
##配置layer-3代理--Layer-3代理为私有虚拟网络提供路由和NAT服务
##编辑``/etc/neutron/l3_agent.ini``文件并完成以下操作:
------------------------------------------------------
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
external_network_bridge =
------------------------------------------------------
##配置DHCP代理
##编辑``/etc/neutron/dhcp_agent.ini``文件并完成下面的操作:
------------------------------------------------------
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
------------------------------------------------------
##重启网络服务
systemctl restart neutron-server.service netutron-linuxbridge-agent.service
##编辑``/etc/neutron/plugins/ml2/linuxbridge_agent.ini`` 文件,建立layer-2虚无网络并且处理安全住规则操作:
--------------------------------------------------------
[vxlan]
enable_valan = True
local_ip = 192.168.19.72
l2_population = True
--------------------------------------------------------
##重启Linuxbridge代理
systemctl restart neutron-linuxbridge-agent.service
##接下来配置Dashboard,编辑文件 /etc/openstack-dashboard/local_settings
--------------------------------------------------------
OPENSTACK_NEUTRON_NETWORK = { --打开支持3层网络服务
...
'enable_router': True,
'enable_quotas': True,
'enable_distributed_router': True,
'enable_ha_router': True,
'enable_lb': True,
'enable_firewall': True,
'enable_': True,
'enable_fip_topology_check': True,
}
--------------------------------------------------------
##启动web服务以及会话会话存储
systemctl restart httpd.service mecached.service
同样我们可以在web界面进行访问,通过图形化页面进行网络构建,这里不进行具体阐述。
OpenStack块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础设施为了管理卷,以及和OpenStack计算服务交互,为实例提供卷。此服务也会激活管理卷的快照和卷类型的功能。
块存储服务通常包含下列组件:
cinder-api:
接受API请求,并将其路由到cinder-volume执行。
cinder-volume:
与块存储服务和例如cinder-scheduler的进程进行直接交互。它也可以与这些进程通过一个消息队列进行交互。cinder-volume服务响应送到块存储服务的读写请求来维持状态。它也可以和多种存储提供者在驱动架构下进行交互。
cinder-scheduler守护进程:
选择最优存储提供节点来创建卷。其与nova-scheduler组件类似。
cinder-backup守护进程:
cinder-backup服务提供任何种类备份卷到一个备份存储提供者。就像cinder-volume服务,它与多种存储提供者在驱动架构下进行交互。
消息队列:
在块存储的进程之间路由信息。
【环境】创建最基础的虚拟机block1,设置20G的虚拟磁盘,设置域名解析,加入到集群中
在控制节点上安装和配置块设备存储服务,即 cinder。这个服务需要至少一个额外的存储节点,以向实例提供卷。在安装和配置块存储服务之前,必须创建数据库、服务证书和API端点。
##先决条件:
1 构建数据库
##以 root 用户连接到数据库服务器:
mysql -u root -p root
##创建cinder数据库:
CREATE DATABASE cinder;
##允许 cinder 数据库合适的访问权限:
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'cinder';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder';
2 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
. admin-openrc
3 要创建服务证书
##创建一个 cinder 用户:
openstack user create --domain default --password-cinder cinder
##添加 admin 角色到 cinder 用户上:
openstack role add --project service --user cinder admin
##创建 cinder 和 cinderv2 服务实体:
openstack service create --name cinder --description "OpenStack Block Storage" volume
openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
4 创建块设备存储服务的 API 入口点:
openstack endpoint create --region RegionOne \
volume public http://controller:8776/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne \
volume internal http://controller:8776/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne \
volume admin http://controller:8776/v1/%\(tenant_id\)s
openstack endpoint create --region RegionOne \
volumev2 public http://controller:8776/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne \
volumev2 internal http://controller:8776/v2/%\(tenant_id\)s
openstack endpoint create --region RegionOne \
volumev2 admin http://controller:8776/v2/%\(tenant_id\)s
##安全并配置组件
1 安装软件包
yum install openstack-cinder
2 编辑 /etc/cinder/cinder.conf,同时完成如下动作:
----------------------------------------------------------------
[database]
...
connection = mysql+pymysql://cinder:cinder@controller/cinder
[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.17.71
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = cinder
[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp
3 初始化块设备的数据库
su -s /bin/sh -c "cinder-manage db sync" cinder
----------------------------------------------------------------
##配置计算节点以使用块设备存储
1 编辑文件 /etc/nova/nova.conf 并添加如下到其中:
----------------------------------------------------
[cinder]
os_region_name = RegionOne
----------------------------------------------------
##完成安装
1 重启API服务
systemctl restart openstack-nova-api.service
2 启动块设备并设置为开机自启
systemctl enable --now openstack-cinder-api.service openstack-cinder-scheduler.service
1 安装支持的工具包
##安装lvm包:
yum install lvm2
##启动LVM的metadata服务并且设置该服务随系统启动:
systemctl enable --now lvm2-lvmetad.service
2 创建LVM物理卷/dev/sdb
pvcreate /dev/sdb
3 创建 LVM 卷组 cinder-volumes
vgcreate cinder-volumes /dev/sdb
4 只有实例可以访问块存储卷组。不过,底层的操作系统管理这些设备并将其与卷关联。默认情况下,LVM卷扫描工具会扫描``/dev`` 目录,查找包含卷的块存储设备。如果项目在他们的卷上使用LVM,扫描工具检测到这些卷时会尝试缓存它们,可能会在底层操作系统和项目卷上产生各种问题。您必须重新配置LVM,让它只扫描包含``cinder-volume``卷组的设备。编辑``/etc/lvm/lvm.conf``文件并完成下面的操作:
-------------------------------------------------------
devices {
...
filter = [ "a/sdb/", "r/.*/"]
-------------------------------------------------------
##如果您的计算节点在操作系统磁盘上使用了 LVM,您也必需修改这些节点上 /etc/lvm/lvm.conf 文件中的过滤器,将操作系统磁盘包含到过滤器中。例如,如果``/dev/sda`` 设备包含操作系统:
-------------------------------------------------------
filter = [ "a/sdb/", "r/.*/"]
-------------------------------------------------------
##安全并配置组件
1 安装软件包
yum install openstack-cinder targetcli python-keystone
2 编辑 /etc/cinder/cinder.conf,同时完成如下动作:
------------------------------------------------------------
[database]
...
connection = mysql+pymysql://cinder:cinder@controller/cinder
[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.17.72
enabled_backends = lvm
glance_api_servers = http://controller:9292 --配置镜像服务 API 的位置
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = openstack
[keystone_authtoken]
...
auth_uri = http://controller:5000
auth_url = http://controller:35357
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = cinder
[lvm] --配置LVM后端以LVM驱动结束,卷组``cinder-volumes`` ,iSCSI 协议和正确的 iSCSI服务
...
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm
[oslo_concurrency]
...
lock_path = /var/lib/cinder/tmp
------------------------------------------------------------
##完成安装
systemctl enable --enable openstack-cinder-volume.service target.service
##验证操作
1 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
. admin-openrc
2 列出服务组件以验证是否每个进程都成功启动:
inder service-list
【注】卷存在热拉伸的问题,在配置过程中需要注意注意卷在挂在时的文件格式和拉伸时的方式。
同样我们也可以通过访问图形节点进行卷的挂载。
官网各种系统封装
这里我们一CentOS为例,去封装一个系统。当然官方也有封装好的可以提供使用:
CentOS Cloud images下载
##自己封装:
1 下载一个需要封装的系统,并进行安装过程
##这里不做具体阐述,可根据自己的需求进行下载和安装
-----------------------------------------------
区别:
1 设置selinux开机禁用
开机页面-->e ctrl+x 在系统行设置selinux=0
2 配置selinux 的配置文件
vi /etc/sysconfig/selinux
+++++++++++++++++++++
SELINUX=disabled
+++++++++++++++++++++
3 关闭防火墙
systemctl disable --now firewalld
4 配置网卡信息:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
+++++++++++++++++++++
TYPE=Ethernet
BOOTROTO=dhpc
DEVICE=ens33
ONBOOT=yes
+++++++++++++++++++++
5 添加一个新的IP
ip addr add 197.169.17.0/24 /dev/eth0
-----------------------------------------------
##安装 ACPI 服务--->要使管理程序能够重新启动或关闭实例
yum install acpid
systemctl enable acpid
##配置获取元数据-->实例必须与元数据服务交互,以便在启动时执行几个任务。例如,实例必须获取ssh公钥并运行用户数据脚本。要确保实例执行这些任务,需要安装:
##安装一个cloud-initRPM--Ubuntu cloud-init包的一个端口。这是推荐的方法
yum install cloud-init
##cloud-utis-growpart,允许分区调整大小为了正确调整根分区的大小,其中包含允许使用cloud-init调整磁盘大小的适当工具
yum install cloud-utils-growpart
##cloud-init 通过编辑/etc/cloud/cloud.cfg文件并添加具有不同用户的行来更改所用帐户的名称。
---------------------------------------------
users:
- name: admin
(...)
---------------------------------------------
##禁用 zeroconf 路由--要让实例访问元数据服务
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
##配置控制台
##编辑/etc/default/grub文件并配置 GRUB_CMDLINE_LINUX选项。删除 并添加到选项。
---------------------------------------------------
rhgb quietconsole=tty0 console=ttyS0,115200n8
-----------------------------------------------------
##保存上述修改:
grub2-mkconfig -o /boot/grub2/grub.cfg
##关闭实例
poweroff
##清理(删除 MAC 地址详细信息)
virt-sysprep -d centos
##压缩母镜像
virt-sparsify --compress centos.qcows /var/tmp/images
##取消定义 libvirt 域 --libvirt不在管理
virsh undefine centos
##镜像上传:使用qemu-img create命令创建的底层图像文件 已准备好上传
【注】当系统中现有的镜像模式和当前自己封装的镜像不匹配时,可以使用admin用户进行自行配置 。