[Openstack] 重部署记录
数据中心集群断电后,openstack没法正常连接vm,本身系统也是前人部署,留下来的资料有限,debug比较麻烦,加之instance基本都没人在用,索性重装了。
UPDATE 2020/04/25
- 为了修个后视镜,把车都给拆咯
记录一下,以后再出问题时,稍微提供一些参考。
网络架构
其实之前工作的主要难点就是没有整个网络架构的资料,每个地方都得像“盲人摸象”一样一点一点去尝试,再加上对 OpenStack 缺少系统性的了解,走了很多弯路。
疫情缓和,终于是从学校拿到了系统网络架构的资料,也得益于tripleZ的工作,整个系统终于可以顺利的恢复了。
相关
网络解释:
- Provider Network (提供者网络):外网 IP 网络通道,绑定公网 IP 后可直接访问 Internet ;
- Cluster External Network (集群外部网络):集群内网,可直接访问 Internet ;
- Tunnel Network (隧道网络):实例/系统网络组件之间的网络通道,通过
VLAN
实现不同自服务网络间的二层网络隔离;- Management Network(管理网络):用于 OpenStack 系统组件内部的连接通信;
- Storage Network(存储专用网络):高速的存储专线网络以获得较好的实例使用体验。
虚拟网络组件:
虚拟网桥是二层 SDN 的主要实现方式。
br-int
:集成网桥,对主机来说是整个 SDN 网络实现的核心,可理解为一个大型的内部虚拟交换机;br-tun
:隧道网桥,用于实现实例间的网络通信;br-ex
:外部网桥,直接连接在可访问外部网络的网卡上,实例可通过该网桥访问外部网络。
数据中心网络拓扑:
Openstack重新部署
从头开始部署请参照 Quick Start,由于大部分环境之前已经配置好了,所以为了避免麻烦,还是摸索着前人留下来的工具直接用,尽量别引入新的问题了,速战速决。
移除容器
$ cd /root/Kolla-ansible
,该路径下multinode
为ansible的inventory,记录了节点角色信息,由于compute11-13
节点离线,先备份 (multinode-datetime.bak),再将这三个节点从multinode
中移除scripts
中为ansible一些操作的脚本,将日志输入到logs
中,一般建议用这里面的脚本而非直接使用命令
$ ./scripts/stop
,stop过程中遇到了fatal: nova_libvirt cnotainers are running
的问题,如遇相似问题,可参考文末 Troubleshoot 章节$ ./scripts/destroy
,删除容器重新部署
相关文件
大部分的坑已经被前人给趟平了,这里如果需要自定义修改一些配置,主要关注:
/etc/kolla/globals.yml
:Kolla
的配置文件:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25kolla_base_distro: "centos"
kolla_install_type: "source"
openstack_release: "ocata"
node_custom_config: "/etc/kolla/config"
kolla_internal_vip_address: "10.0.0.254"
docker_registry: "10.0.0.41:4000"
enable_aodh: "yes"
enable_ceilometer: "yes"
enable_chrony: "yes"
enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
enable_designate: "yes"
enable_gnocchi: "yes"
enable_heat: "yes"
enable_horizon: "yes"
enable_mongodb: "yes"
enable_panko: "yes"
enable_swift: "no"
glance_backend_file: "yes"
glance_backend_ceph: "no"
ceilometer_database_type: "mongodb"
ceilometer_event_type: "mongodb"/root/Kolla-ansible/multinode
:ansible
的inventory
文件,用于指定集群中各个节点的角色,并分发容器,修改时注意备份;/usr/share/kolla-ansible/init-runonce
:OpenStack
的初始化脚本,可以参考里面的指令。
Kolla方式部署
$ cd /root/Kolla-ansible
$ ./scripts/prechecks
,部署前预先检查各个节点是否有问题,(其实在这一步之前一般需要kolla-ansible -i multinode bootstrap-servers
将所有节点都安装依赖,不过好在已经搞好,就不用这个,以免依赖版本更新造成一些奇怪的问题),解决这一步中出现的所有问题(error)后,方可进行下一步;$ ./scripts/deploy
,注意由于gathering facts
收集各个节点统计数据,这一步极为耗时,且会多次出现(所以 log 流停止的时候不要以为出问题了),要么可以直接将gathering facts
关掉(不建议这么做),要么使用一个Ansible的插件 https://github.com/jlafon/ansible-profile ,对统计信息进行缓存,大大减少等待的时间,更简单的做法:放这,干别的去,这也是推荐你用脚本而不是命令的原因;$ ./scripts/post-deploy
,漫长等待之后,可以看到在各个节点上,容器已经正常工作了;这时需要设置下 admin user 和环境变量,执行这步后
$ source /etc/kolla/admin-openrc.sh
获取操作权限;运行脚本创建示例网络,镜像等
init-runonce
:1
2
3EXT_NET_CIDR='211.65.102.1/24'
EXT_NET_RANGE='start=211.65.102.42,end=211.65.102.69'
EXT_NET_GATEWAY='211.65.102.1'执行:
1
. /usr/share/kolla-ansible/init-runonce
创建external网络:
1
2$ openstack network create --external --provider-physical-network physnet1 \
--provider-network-type flat external创建子网:
1
2
3
4
5
6
7$ openstack subnet create --no-dhcp \
--allocation-pool start=10.10.0.100,end=10.10.5.255 --network external \
--subnet-range 10.10.0.0/16 --gateway 10.10.0.1 external-share
$ openstack subnet create --no-dhcp \
--allocation-pool start=211.65.102.42,end=211.65.102.69 --network external \
--subnet-range 211.65.102.0/24 --gateway 211.65.102.1 public-subnet创建
internal
网络:1
2
3$ openstack network create --provider-network-type vxlan internal
$ openstack subnet create --subnet-range 192.168.0.1/24 --network internal \
--gateway 192.168.0.1 --dns-nameserver 8.8.8.8 internal-subnet创建路由:
1
2
3$ openstack router create admin-router
$ openstack router add subnet admin-router internal-subnet
$ openstack router set --external-gateway external admin-router创建浮动IP:
$ openstack floating ip create --subnet external-share --project admin external
导入镜像,镜像文件位于
/openstack-images
1
2openstack image create --disk-format qcow2 --container-format bare --public \
--file ./${IMAGE} ${IMAGE_NAME}关于镜像的制作,可以参考另外一篇文章:OpenStack镜像定制
参考
- 数据中心部署相关资料
Troubleshoot
stop/destory
无效:nova_libvirt cnotainers are running:
使用 $ kolla-ansible -i multinode stop
中发现,有部分节点上的容器无法正常停止,这是由于其中有正在运行的实例,一般可以用 $ openstack server delete INSTANCE_NAME
这种方式先将实例删除,再重新运行一遍 stop
命令即可,特殊情况下也可以手动删除(如下)。
报错如下:
1 | TASK [stop : Stopping Kolla containers] ***************************************************************************************************************************************************************** |
解决方法:
- 进入对应的宿主机,进入
nova_libvirt
容器:$ docker exec -it nova_libvirt /bin/sh
- 手动执行删除实例
1 | (nova-libvirt)[root@Compute02 /]$ virsh list |