openstack Mitaka版本-2
openstack Mitaka版本-2
1.增加一个flat网络
flat 网络所引发的问题,在重启网络服务之后在桥接的网卡上和原本被桥接的网卡上面都会出现IP地址,这样就会发生网络混乱导致无法创建虚拟机。如果发生了这样的问题需要手动的把原来网卡上面的IP地址删除掉。
ip addr del IPADDRESS dev DEV
flat 网络的特点就是一个网段需要桥接到一个物理网卡上面。
1.1 给新增物理网卡配置IP
1.2 控制节点配置
vi /etc/neutron/plugins/ml2/ml2_conf.ini
# ====== 此处省略 ======
[ml2_type_flat]
# 在现有网络后面添加名称用逗号分开即可
flat_networks = provider,net172
# ====== 此处省略 ======
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
# ====== 此处省略 ======
[linux_bridge]
# 在现有网络后面添加名称用逗号分开即可
physical_interface_mappings = provider:eth0,net172:eth1
# ====== 此处省略 ======
systemctl restart neutron-server.service neutron-linuxbridge-agent.service
1.3 计算节点配置
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
# ====== 此处省略 ======
[linux_bridge]
# 在现有网络后面添加名称用逗号分开即可
physical_interface_mappings = provider:eth0,net172:eth1
# ====== 此处省略 ======
systemctl restart neutron-linuxbridge-agent.service
1.4 创建网络
注意物理网络和网络类型的地方要与配置文件中的一致不然会报错。
1.5 创建子网
2.对接nfs存储
2.1 配置nfs存储
yum -y install nfs-utils
cat>/etc/exports<<EOF
/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)
EOF
systemctl start nfs-server.service
systemctl enable nfs-server
2.2 配置cinder-volume
也就是存储节点
vi /etc/cinder/cinder.conf
[DEFAULT]
......
enabled_backends = nfs
[nfs]
volume_driver = cinder.volume.drivers.nfs.NfsDriver
nfs_shares_config = /etc/cinder/nfs_shares
volume_backend_name = nfs
vi /etc/cinder/nfs_shares
10.0.0.33:/data
systemctl restart openstack-cinder-volume.service
2.3 验证
连接到compute之后
3.云主机冷迁移
- 云主机需要在同一可用域内。
- 迁移的物理机需要有足够的计算资源。
- nova用户的家目录文件是
/var/lib/nova
- 冷迁移虚拟机功能需要在功能配置之后,还未配置之前已经创建的虚拟机无法冷迁移。
- nova用户要一个能登陆的解释器环境。
3.1 使用nova用户互相免密
# 所有节点
usermod -s /bin/bash nova
# 如果想生成家目录可以
su - nova
cp /etc/skel/.* ~
# 使用nova用户生成密钥
ssh-keygen -q -N "" -f ~/.ssh/id_rsa
cd ~/.ssh && cp -fa id_rsa.pub authorized_keys
# 先连接自己一遍,生成一个known_hosts,后面就就不用因为yes而引发报错。
ssh 127.0.0.1
# 分发密钥
scp -r /var/lib/nova/.ssh root@compute2:/var/lib/nova
# 计算节点更改文件属性
cd /var/lib/nova && chown -R nova.nova .ssh/
3.2 更改nova配置文件
# 控制节点
vi /etc/nova/nova.conf
[DEFAULT]
......
scheduler_default_filters = RetryFilter,AvailabilityZoneFilter,RamFilter,DiskFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter
systemctl restart openstack-nova-scheduler.service
# 计算节点
vi /etc/nova/nova.conf
[DEFAULT]
......
allow_resize_to_same_host = True
systemctl restart openstack-nova-compute.service
3.2 验证
dashboard 冷迁移
3.3 主机聚合
创建实例的时候创建在指定的域中就把实例创建到了指定的计算节点。
云主机热迁移
热迁移功能需要做特定配置不然是无法进行热迁移的。
1.查看nova用户gid,uid
id nova
uid=162(nova) gid=162(nova) groups=162(nova),99(nobody),107(qemu)
# 如果不相同着修改uid,gid:
usermod -u uid nova XXX
gropumod -g gid nova XXX
2.修改libvirt配置文件
计算节点操作
vi /etc/sysconfig/libvirtd
LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf
LIBVIRTD_ARGS="--listen"
grep -vE '^#|^$' /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
auth_tcp = "none"
# 重启服务:
systemctl restart libvirtd.service
# 检查端口:
ss -ntl | grep 16509
[root@compute ~]# ss -ntl | grep 16509
LISTEN 0 30 *:16509 *:*
# 再来测试下可否无密连接:
virsh -c qemu+tcp://compute/system
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh #
3.修改nova.conf配置文件
计算节点操作
vi /etc/nova/nova.conf
[libvirt]
inject_key = True
live_migration_flag = VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_TUNNELLED
block_migration_flag = VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC
live_migration_downtime = 500
live_migration_downtime_steps = 10
live_migration_downtime_delay = 75
# 计算节点nova服务:
systemctl restart openstack-nova-compute
# 在[libvirtd]选项中:一定要把
block_migration_flag = VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC
中的 VIR_MIGRATE_TUNNELLED删除。
# 否则报错:
tail -f nova-compute.log
2019-05-15 16:24:50.692 4833 ERROR nova.virt.libvirt.driver [req-254721d5-5269-4c08-8d06-92ec37f6a306 c86d50b40c7b4b858952bdd24f11f9f9 bd8bb97a45cb4e6781c7f51952d16ffa - - -] [instance: 02e0808d-dae1-42e9-ae91-0e0a00f0f524] Live Migration failure: Operation not supported: Selecting disks to migrate is not implemented for tunnelled migration
2019-05-15 16:24:50.752 4833 ERROR nova.virt.libvirt.driver [req-254721d5-5269-4c08-8d06-92ec37f6a306 c86d50b40c7b4b858952bdd24f11f9f9 bd8bb97a45cb4e6781c7f51952d16ffa - - -] [instance: 02e0808d-dae1-42e9-ae91-0e0a00f0f524] Migration operation has aborted
4.开始迁移:
dashboard 操作。
4.定制化主机原理
4.1 云主机的定制化
云主机的定制化主要是在创建云主机的时候加入公钥,执行开机脚本;公钥及脚本都是云镜像在启动的时候执行脚本访问了
http://169.254.169.254/
虚拟容器提供的元数据
服务获取到其中的公钥以及定制的脚本。如果说是普通的镜像开机的时候没有定制化的脚本,那么就不会有创建虚拟机定制的功能。
注入公钥,直接注入,如果网络能够通信那么可以直接ssh.
定制脚本启动,在镜像启动之后就会执行这个脚本里面的内容。
4.2 底层原理
进入云主机控制台。
curl http://169.254.169.254/latest
这里面包含了用户定义的元数据信息,用户在定制化操作系统的时候 会访问里面的内容。
里面的IP地址是真实存在的IP地址。就是一个容器里面提供的服务。
# 控制节点查看容器
ip netns
# 进入容器
ip netns exec qdhcp-e54cd98e-df99-411d-9a5b-5b5537ea6464 /bin/bash
# ip a 查看是否存在169.254的IP地址。
5.vxlan网络
控制节点
5.1 修改配置文件
记忆文档1中最开始的配置文件。
vi /etc/neutron/neutron.conf
[DEFAULT]
......
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
vi /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
......
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
[ml2_type_vxlan]
vni_ranges = 1:1000
# vni_ranges vxlanid范围
# vlan 支持 1-4094
# vxlan 支持 4096*4096-2
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
.......
[vxlan]
enable_vxlan = True
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
l2_population = True
# OVERLAY_INTERFACE_IP_ADDRESS vxlan隧道网络中的eth1的IP地址。
# 172.16.0.11/24
vi /etc/neutron/l3_agent.ini
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
external_network_bridge =
# external_network_bridge选项特意设置成缺省值,这样就可以在一个代理上允许多种外部网络
5.2 重启服务
systemctl restart neutron-server.service \
neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
neutron-metadata-agent.service
systemctl start neutron-l3-agent.service
systemctl enable neutron-l3-agent.service
计算节点
5.3 修改配置
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
......
[vxlan]
enable_vxlan = True
local_ip = 172.16.0.31
l2_population = True
local_ip # 隧道的IP地址,第二张网卡
5.4 重启配置
systemctl restart neutron-linuxbridge-agent.service
5.5 dashboard开启路由器功能
vi /etc/openstack-dashboard/local_settings
OPENSTACK_NEUTRON_NETWORK = {
'enable_router': True,
......
}
# 重启dashboard
systemctl restart httpd
5.6 创建自有网络
现在用户可以创建自己的网络了。
现在有的两种网络。
5.7 设置外部网络
把provider网络
设置为外部网络,用来直接连上外网。把外部网络勾选上。
provider网络的图标变成了地球的图案。
5.8 添加从自有网络到外部网络的路由
网络拓扑的变化
添加子网把自建网络和外部网络通过路由器连接起来。vxlan网络在配置的时候local_ip = 172.16.1.11
使用的是eth1纯内网接口,如果不做路由是无法上网的。
5.9 创建虚拟机
5.10 绑定浮动IP
项目 ====》云主机 ====》绑定浮动IP
这样就完成了外部网络对内部网络的访问。
2.vxlan原理
这样的好处是用户可以随便建立自己想要的网络,但是如果虚拟机的数量足够多的话,控制节点的eth0网卡承受的流量就会很大,容易发生瓶颈。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具