ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenStack私有云搭建实战:从两台裸机到云主机与云硬盘全流程

OpenStack私有云搭建实战:从两台裸机到云主机与云硬盘全流程 简介这份资源是一份面向云计算初学者与运维人员的 OpenStack 私有云搭建实操文档围绕从零部署一套可用私有云平台这一目标展开适合正在学习 OpenStack 组件原理、需要动手完成实验环境搭建的读者参考。资源包内共 1 个 doc 文件约 119KB以图文步骤与命令示例为主内容涵盖主机名修改、主机名与地址映射、防火墙规则清除、SELinux 状态设置、镜像上传、目录创建与挂载、YUM 源配置、IaaS-Xiandian 软件包安装、OpenStack 组件安装以及镜像、磁盘、内外网创建等完整流程并附有控制节点与计算节点的具体操作命令。目前已有 618 人学习下载说明该文档在同类实验场景中具有一定参考价值。读者可借助它梳理私有云搭建的整体脉络对照命令逐项完成部署并理解各组件之间的协作关系适合作为课程实验或自学练手的辅助材料。1. 从两台裸机到能开虚机的私有云这份 OpenStack 搭建文档到底能省你多少事如果你手里正好有两台装了 CentOS 7 的物理机或者虚拟机想搭一套能跑通「创建镜像、建网络、开云主机、挂云硬盘」全流程的 OpenStack 私有云又不想在官方文档的几十个服务里迷路那这份搭建文档值得你花一个下午跟着走一遍。它走的不是 Kolla 容器化那条路而是国内技能竞赛和教学场景里很常见的 iaas-xiandian 脚本化安装路线——控制节点加计算节点两台机器从改主机名一路做到在云主机里格式化挂载云硬盘。适合谁适合要交实验报告的学生、要快速搭一套演示环境的运维、以及想搞明白 OpenStack 各组件到底怎么串起来再决定要不要上生产的人。不适合谁不适合想直接上生产高可用集群的人这套流程是单点控制节点没有做 HA心里要有数。2. 装之前先把地基砸实主机名、hosts、防火墙与 SELinux 四件套很多人搭 OpenStack 翻车不是翻在 OpenStack 本身而是翻在这些看起来「跟 OpenStack 没关系」的前置步骤上。主机名没改对后面 Keystone 认证的 endpoint 就指向一个解析不了的域名hosts 没做映射控制节点和计算节点互相找不到防火墙和 SELinux 没关干净RabbitMQ 和数据库的连接就会时通时断报错还特别玄学。所以这一章先把地基砸实后面装组件才顺。2.1 主机名与 hosts 映射两台机器必须互相认识控制节点和计算节点分别执行下面的命令改主机名。改完必须CtrlD退出重新登录或者直接reboot否则当前 shell 里hostname显示的还是旧的。# 控制节点执行 hostnamectl set-hostname controller # 计算节点执行 hostnamectl set-hostname compute改完主机名紧接着做 hosts 映射。控制节点上编辑/etc/hosts把两个节点的 IP 和主机名写进去。这里假设控制节点是 192.168.1.130计算节点是 192.168.1.140你按自己实际网段改。# 控制节点编辑 /etc/hosts加入两行 192.168.1.130 controller 192.168.1.140 compute计算节点不用手动再写一遍直接从控制节点 scp 过来保证两边完全一致避免手抖写错。# 计算节点执行把控制节点的 hosts 拉过来 scp rootcontroller:/etc/hosts /etc/hosts逻辑说明/etc/hosts是本地静态解析优先级高于 DNS。OpenStack 各服务的 endpoint 里写的是主机名controller如果计算节点解析不了这个名字Nova 和 Neutron 的通信就会失败。参数上没什么可调的就是 IP 和主机名一一对应注意别把 IP 写错写错了后面报错会绕很大一圈才查到这。2.2 清防火墙与 SELinux 设为 permissive两个节点都要清 iptables 规则。注意iptables-save是把当前空规则持久化防止重启后又冒出来。# 两个节点都执行 iptables -F # 清空所有链的规则 iptables -Z # 计数器归零 iptables -X # 删除自定义链 iptables -L # 查看确认已空 iptables-save # 保存当前状态SELinux 改成 permissive。编辑/etc/selinux/config把SELINUXenforcing改成SELINUXpermissive保存后重启生效。重启后用getenforce确认输出是Permissive。# 临时生效不用重启 setenforce 0 getenforce逻辑说明setenforce 0只是临时把 SELinux 降到 permissive重启就恢复。永久生效必须改配置文件再 reboot。为什么用 permissive 而不是 disabledpermissive 只记录不拦截出问题时还能从审计日志里看到线索disabled 是彻底关掉排查时反而少了一条线索。这是常见做法竞赛和教学环境基本都这么设。提示改完 SELinux 配置文件后CtrlD可能不生效老老实实reboot两个节点别偷懒。3. 本地 YUM 源与 iaas-xiandian 安装离线环境怎么把依赖喂饱OpenStack 组件依赖一大堆包如果机器不能连外网就必须搭本地 YUM 源。这份文档的思路是把两个 ISO 镜像挂载到本地目录再写 repo 文件指过去。控制节点和计算节点的源配置方式还不一样——控制节点用本地 file 源计算节点通过 ftp 或 http 从控制节点拉。这一章把镜像挂载、repo 编写、ftp/http 两种共享方式、以及 iaas-xiandian 的安装和环境变量配置讲透。3.1 挂载镜像与编写本地 repo先把两个镜像上传到两个节点的/root目录CentOS-7-x86_64-DVD-1804.iso和chinaskills_cloud_iaas.iso。然后创建挂载点并挂载。# 两个节点都执行 mkdir /opt/centos mkdir /opt/iaas mount -o loop /root/CentOS-7-x86_64-DVD-1804.iso /opt/centos mount -o loop /root/chinaskills_cloud_iaas.iso /opt/iaas # 验证挂载 lsblk ls /opt/centos ls /opt/iaas逻辑说明-o loop是把普通文件当块设备挂载ISO 镜像必须用这个参数。挂载完用lsblk或直接ls看目录里有没有内容空的就是没挂上。这一步失败最常见的原因是镜像路径写错或者镜像没传完先ls -lh /root/*.iso确认文件大小正常。控制节点写 repo 文件。先把系统自带的 repo 挪走避免干扰。# 控制节点执行 cd /etc/yum.repos.d/ mkdir /home/bak mv /etc/yum.repos.d/* /home/bak vi /etc/yum.repos.d/local.reporepo 内容如下[centos] namecentos baseurlfile:///opt/centos gpgcheck0 enabled1 [iaas] nameiaas baseurlfile:///opt/iaas/iaas-repo gpgcheck0 enabled1清缓存并验证yum clean all yum repolist逻辑说明gpgcheck0是关掉包签名校验离线源常见做法省去导入 GPG key 的麻烦。baseurl指向挂载点iaas 源指向iaas-repo子目录这个路径是镜像里固定的别自己改。yum repolist能列出 centos 和 iaas 两个源且包数量不为零就说明源配好了。3.2 计算节点通过 ftp 或 http 获取源计算节点不挂载镜像而是从控制节点共享。控制节点先装 vsftpd 或 httpd二选一看题目要求。ftp 方式# 控制节点执行 yum install vsftpd -y # 把匿名用户根目录指向 /opt sed -i 1i anon_root/opt /etc/vsftpd/vsftpd.conf systemctl restart vsftpd systemctl enable vsftpdhttp 方式# 控制节点执行 yum install httpd -y systemctl start httpd systemctl enable httpd计算节点的 repo 文件baseurl 指向控制节点[centos] namecentos baseurlftp://controller/centos gpgcheck0 enabled1 [iaas] nameiaas baseurlftp://controller/iaas/iaas-repo gpgcheck0 enabled1如果走 http把ftp://换成http://即可。同样yum clean all加yum repolist验证。逻辑说明anon_root/opt让匿名用户登录 ftp 后直接看到/opt下的 centos 和 iaas 目录所以 baseurl 里路径是/centos和/iaas/iaas-repo。http 方式默认根目录就是/var/www/html但这里 baseurl 直接写主机名加路径实际访问的是/opt吗不是——http 方式需要确认 httpd 的 DocumentRoot如果没改得把镜像软链到/var/www/html下或者改 DocumentRoot 指向/opt。这是文档里没写全、实际容易卡住的地方我一般会curl ftp://controller/centos或浏览器访问一下确认能列目录再往下走。3.3 安装 iaas-xiandian 并配置 openrc.sh前九步无误后两个节点一先一后安装 iaas-xiandian。# 控制节点先装装完再装计算节点 yum install iaas-xiandian -y装完改环境变量文件/etc/xiandian/openrc.sh。这个文件是整套部署的核心所有密码、IP、网卡名、磁盘分区都在这。关键项如下参数含义示例值HOST_IP控制节点 IP192.168.1.130HOST_PASS控制节点 root 密码000000HOST_NAME控制节点主机名controllerHOST_IP_NODE计算节点 IP192.168.1.140HOST_NAME_NODE计算节点主机名computeINTERFACE_IP本节点管理网 IP控制节点填 130计算节点填 140INTERFACE_NAME第二块网卡名p4p1BLOCK_DISKCinder 用的空白分区sda3OBJECT_DISKSwift 用的空白分区sda4network_segment_IP管理网段192.168.1.0/24改完控制节点的 openrc.shscp 到计算节点然后在计算节点上把INTERFACE_IP改成计算节点自己的 IP网卡名不一样也要改。# 控制节点传到计算节点 scp /etc/xiandian/openrc.sh rootcompute:/etc/xiandian/openrc.sh两个节点一前一后执行预配置脚本然后CtrlD重连iaas-pre-host.sh逻辑说明INTERFACE_NAME是第二块网卡OpenStack 的 Neutron 用它做 provider 网络的出口写错会导致后面创建的外网不通。BLOCK_DISK和OBJECT_DISK必须是空白分区不能是已挂载的否则 Cinder 和 Swift 初始化会失败。minvlan和maxvlan是 VLAN 范围按实验要求填一般 2 到 200。这些参数一旦iaas-pre-host.sh跑完就固化了改的话得重来所以执行前逐项核对。4. 组件安装顺序与云主机全流程从 iaas-install 到挂载云硬盘环境变量配好、预配置脚本跑完接下来就是按顺序装组件。这个顺序不能乱Keystone 是认证基础必须最先Glance 依赖 KeystoneNova 依赖 Glance 和 KeystoneNeutron 依赖 KeystoneDashboard 最后装用来网页访问。装完还要在网页和命令行里走一遍创建镜像、网络、云主机、云硬盘的完整流程这一章把命令和参数都列出来。4.1 控制节点与计算节点的组件安装顺序控制节点依次执行iaas-install-mysql.sh iaas-install-keystone.sh iaas-install-glance.sh iaas-install-nova-controller.sh iaas-install-neutron-controller.sh iaas-install-dashboard.sh计算节点执行iaas-install-nova-compute.sh iaas-install-neutron-compute.sh逻辑说明每个脚本内部会装包、改配置、起服务、建数据库表、注册 endpoint。顺序错了比如先装 Nova 再装 KeystoneNova 注册 endpoint 时找不到认证服务就会失败。计算节点的 nova-compute 和 neutron-compute 要在控制节点对应组件装完之后再装因为计算节点需要连控制节点的 RabbitMQ 和数据库。装完 Dashboard 后浏览器访问http://控制节点IP/dashboard能出登录页就说明前面都通了。注意如果 Dashboard 打不开先在控制节点systemctl status httpd和systemctl status neutron-server看服务起没起这两个是网页访问的直接依赖。4.2 命令行创建镜像、网络、云主机与云硬盘所有 openstack 命令执行前先认证source /etc/keystone/admin-openrc.sh创建镜像openstack image create cirros --disk-format qcow2 --container-format bare --file /root/cirros-0.3.3-x86_64-disk.img创建规格flavoropenstack flavor create Fmin --id 6 --ram 1024 --disk 20 --vcpus 1 openstack flavor list创建外网和内网# 外网必须带 --external 区分 openstack network create --external ext-net openstack subnet create --network ext-net --subnet-range 192.168.1.0/24 --gateway 192.168.1.1 ext-subnet # 内网 openstack network create int-net openstack subnet create --network int-net --subnet-range 10.0.0.0/24 --gateway 10.0.0.1 int-subnet创建路由并连通内外网openstack router create router openstack router set --external-gateway ext-net --enable-snat router openstack router add subnet router int-subnet创建云主机并绑定浮动 IPopenstack server create --flavor Fmin --image cirros --nic net-idint-net vm1 openstack floating ip create ext-net openstack server add floating ip vm1 上一步生成的浮动IP逻辑说明--external是标记外网的关键不加就默认是内网后面路由的网关就设不上去。--enable-snat让内网云主机能通过路由访问外网。浮动 IP 从外网子网里分配绑到云主机后就能从外部 SSH 进去。如果连不上 vm1先openstack server list看状态是不是 ACTIVE不是就openstack server start vm1。4.3 创建云硬盘并挂载到云主机创建卷类型和云硬盘openstack volume type create type1 openstack volume create --size 1 --type type1 examlv1 openstack volume list把云硬盘挂到云主机openstack server add volume vm1 examlv1进入云主机 vm1 后查看新磁盘并分区格式化ls /dev/vd* sudo fdisk /dev/vdb # 在 fdisk 里依次输入n 回车 回车 p w sudo mkfs /dev/vdb1 sudo mkdir /data sudo mount /dev/vdb1 /data df -h逻辑说明openstack server add volume把 Cinder 卷挂给 Nova 实例实例里会多出一块/dev/vdb。fdisk里n新建分区、一路回车用默认值、p打印确认、w写入。格式化用mkfs默认 ext4。挂载到/data后用df -h确认。这一步的坑是卷挂上去后实例里不一定立刻识别lsblk刷一下或者稍等几秒。5. 避坑与排查这套流程里最容易卡住的五个地方5.1 计算节点 yum repolist 报错找不到源现象计算节点yum repolist提示Cannot retrieve metalink或者Could not resolve host: controller。原因hosts 没做映射或者 ftp/http 服务没起或者 baseurl 路径写错。解决先ping controller确认解析通再systemctl status vsftpd或systemctl status httpd确认服务在跑最后curl ftp://controller/centos看能不能列目录。三样都通还报错检查 repo 文件里 baseurl 的路径是不是多写或少写了斜杠。5.2 iaas-pre-host.sh 执行后主机名或网络异常现象脚本跑完重连主机名变了或者网卡配置丢了。原因脚本会改网络配置和主机名如果 openrc.sh 里INTERFACE_NAME写错可能把管理网卡配错。解决执行前用ip addr确认第二块网卡的真实名字填进INTERFACE_NAME。已经跑错的改回 openrc.sh 重新跑一遍预配置脚本或者从快照回滚重来。5.3 Dashboard 登录后创建网络报错现象网页上创建外网时提示External network is not allowed或者路由网关设不上。原因创建网络时没勾选 External或者命令行创建时漏了--external。解决删掉重建命令行加--external网页上勾选「外部网络」复选框。已经建了内网的不用删只重建外网。5.4 云主机创建后一直 ERROR 或连不上现象openstack server list显示 vm1 状态 ERROR或者 ACTIVE 但 SSH 连不上。原因镜像格式不对、flavor 太小、网络没绑对、或者计算节点 nova-compute 服务没起。解决openstack server show vm1看 fault 信息nova service-list看 nova-compute 是否 up。镜像确认是 qcow2 且--container-format bare。网络确认--nic net-id用的是内网 ID。计算节点systemctl status openstack-nova-compute确认服务在跑。5.5 云硬盘挂载后实例里看不到 /dev/vdb现象openstack server add volume执行成功但进实例ls /dev/vd*只有 vda。原因卷挂载有延迟或者实例内核没重新扫描。解决等十几秒再lsblk或者sudo partprobe触发重扫。还不行就openstack server remove volume再add volume一次。确认卷状态是available再挂in-use的卷挂不上。6. 从能跑到好用几个让这套环境更稳的进阶习惯搭完能跑只是及格真正让这套环境少出问题的是一些执行顺序和验证上的习惯。第一个习惯是每装完一个组件就验证一次别一口气全装完再排查。比如装完 Keystone 就openstack token issue看能不能拿到 token装完 Glance 就openstack image list看服务通不通装完 Nova 就openstack compute service list看计算节点注册没有。这样出问题能立刻定位到是哪个组件不用从头翻日志。第二个习惯是 openrc.sh 改完先备份再 scp。这个文件里几十个参数改错一个后面报错能查半天。我一般cp /etc/xiandian/openrc.sh /etc/xiandian/openrc.sh.bak出问题直接对比。计算节点那份也要备份因为两边INTERFACE_IP不一样容易搞混。第三个习惯是善用快照。这套流程从裸机到能开虚机顺利的话两三个小时中间任何一步跑错重来都费时间。控制节点和计算节点在「预配置脚本跑完、组件还没装」这个节点各打一个快照后面组件装崩了直接回滚到快照重装比从头来快得多。第四个习惯是浮动 IP 和防火墙的联动检查。云主机绑了浮动 IP 还连不上先确认实例内部防火墙没拦再确认安全组规则放行了 SSH。OpenStack 默认安全组只放行同安全组内的流量从外部 SSH 需要加规则openstack security group rule create --proto tcp --dst-port 22 default逻辑说明这条命令在 default 安全组里加一条放行 22 端口的入站规则。--proto tcp指定协议--dst-port 22指定端口。不加这条浮动 IP 绑了也连不上这是新手最容易忽略的一步。最后一个习惯是记日志位置。OpenStack 各组件日志在/var/log/下按服务分目录Nova 在/var/log/nova/Neutron 在/var/log/neutron/Keystone 在/var/log/keystone/。出问题先tail -f对应日志比瞎猜快得多。从那以后我每次搭完环境都会先openstack service list把所有服务状态过一遍确认全是 up 再交付这个习惯帮我省了无数次返工。希望帮到你。本文还有配套的精品资源点击获取
返回列表