ARTICLE DETAIL

资讯详情

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

ZStack私有云部署实战:从选型规划到运维排错全指南

ZStack私有云部署实战:从选型规划到运维排错全指南 1. 为什么我选 ZStack 来搭私有云先看看它和其他方案的差别先说说我自己的情况。我之前负责过公司内部的一套测试环境里面跑着各种开发分支、自动化测试的虚拟机还有一堆临时性的数据库实例。最早用的是直接在物理机上装 VMware ESXi几台机器各自为政虚拟机到处乱放资源闲置率很高后来想统一纳管又试过 OpenStack结果被它的部署复杂度劝退了。最后之所以选定 ZStack是因为它在这两个极端之间找到了一个特别务实的平衡点。ZStack 的核心思路可以理解为把复杂的东西包装成简单的样子。它保留了虚拟化该有的能力——计算虚拟化、块存储、对象存储、网络虚拟化、VPC 隔离、多云管理——但底层不再要求你精通一堆互相独立的组件。整朵云可以理解成一个单元化架构所有核心服务都集中在一套管理进程里计算节点上只跑轻量的 Agent管理节点挂了可以再有备用数据不丢。相比 OpenStack 那种一个模块一个服务、要单独装十几个组件的玩法ZStack 更像是一台私有云一体机。我建议你在动手之前先想清楚一个现实问题你搭这朵私有云是为了解决什么如果只是想在一台服务器上跑几个虚拟机那确实没必要上 ZStack用 KVM 或者 Proxmox VE 就够。但如果你要面对的是多台物理机、需要统一管理镜像和网络、希望开发环境和生产环境能隔离、并且不想被某个厂商的授权费用绑死那 ZStack 就是很合适的选项。它有免费版也有商业版社区很活跃中文文档做得也到位遇到问题不至于没处问。市面上类似的方案里最容易拿来对比的是 VMware vSphere 和 OpenStack。VMware 的优势是稳定、生态成熟但价格不便宜而且对硬件兼容性有严格限制OpenStack 的优势是开源、灵活但运维门槛高对小团队很不友好。ZStack 走的是中间路线它更像是一个开箱即用的企业管理平台底层虽然是开源的 KVM、QEMU 这些技术但你已经不需要直接去跟它们打交道。如果你团队里只有一两个懂 Linux 基础的人又想快速把云环境跑起来那 ZStack 确实值得试试。2. 部署前最容易踩的坑硬件规划、系统选型和超融合到底怎么选很多教程上来就让你下载镜像、点下一步但实际踩过坑的人都知道部署 ZStack 之前最关键的不是软件本身而是硬件和架构规划。这一步没想清楚后面你装好了也会发现 CPU 不够、存储盘位尴尬、网络拓扑没法改到头来还得重新来过。2.1 管理节点和计算节点角色先分清楚ZStack 的部署模式可以分成两类一类是一体化部署也就是管理节点和计算节点装在同一台物理机上适合测试环境、边缘节点、或者中小型公司的起步阶段另一类是分离式部署管理节点单独一套机器计算节点另外几台。分离式的好处是管理节点出问题不会连累虚拟机运行适合生产环境。先说管理节点的配置要求。ZStack 官方给的最低要求是双核 CPU、4GB 内存但我要说的是这只是能跑起来的底线。实际使用中管理节点要承担 API 请求、调度、数据库、消息队列这些工作如果虚拟机数量超过 50 台建议至少 8GB 内存、四核 CPU磁盘用 SSD预留 100GB 以上空间。管理节点不用跑虚拟机所以对 CPU 的主频要求不高但内存和磁盘不能省。计算节点才是真正跑虚拟机的地方。CPU 必须支持硬件虚拟化Intel VT-x 或 AMD-V这个大多数服务器都满足但要注意 BIOS 里有没有开启。内存建议至少 16GB 起步如果计划跑数据库类虚拟机32GB 会更从容。磁盘方面如果你的存储方案是本地存储那计算节点上要多配几块大容量硬盘而且最好是 RAID 卡支持直通模式JBOD这样 ZStack 能直接管理物理磁盘做本地存储池。这里我要重点提一下超融合这个词。ZStack 的超融合模式指的是在计算节点本地多块盘上做 RAID 或者直通然后通过软件把多台计算节点的本地盘聚合成一个分布式存储池。它和管理节点 计算节点分离式部署是两回事。超融合的好处是存储随计算线性扩展不用单独买存储阵列坏处是节点故障时数据恢复依赖网络和磁盘性能。我的建议是测试环境直接用一体化部署 本地存储生产环境优先考虑计算节点本地盘 分布式存储管理节点独立出来。2.2 网络规划是最容易忽略的环节ZStack 对网络的要求其实不复杂但很多人因为局域网里有多台交换机、VLAN 划分不清晰导致后面创建网络时一脸懵。做规划时只需要明确三件事。第一网卡怎么分配。生产环境建议至少四块物理网卡一块用于管理网络管理节点和计算节点通信一块用于云平台业务网络虚拟机流量另外两块做备用或者做网卡绑定。如果硬件有限可以用两块的方案但一定要把这俩网卡接到不同的交换机上避免单点故障。测试环境一块网卡也能跑就是性能和安全性差点意思。第二VLAN 和 IP 段怎么规划。ZStack 支持扁平网络和 VPC 网络VPC 网络天然具备多租户隔离能力用 VRouter 做 DHCP 和 SNAT每个租户有自己独立的私网网段。这个设计对多部门共用一套云的环境特别友好。如果你的环境不涉及多租户只是自己用那扁平网络就足够一个网段解决所有虚拟机通信问题。第三DNS 和网关地址要提前想好。ZStack 安装时会问你管理网络的 IP这个 IP 不要跟 DHCP 自动分配的段重叠最好固定在一个专门的 IP 段里。我之前见过有人把管理口 IP 设在 192.168.1.x 段结果局域网里其他设备的 DHCP 正好也用了这个段导致管理节点 IP 冲突整个界面连不上。2.3 镜像版本和系统版本的选择ZStack 官方支持多种 Linux 发行版作为管理节点的宿主机但我实测最省心的是 CentOS 7.9 和 Ubuntu 18.04 Server。原因有两个一是 ZStack 的安装脚本对这些系统版本适配得最好依赖包基本都能自动装好二是社区里遇到问题的人大多也是用这两个版本网上能搜到的排错经验最多。另外要注意ZStack 的安装包分为两种一种是纯软件安装包需要你自己先装好操作系统另一种是ISO 一体化镜像里面直接集成了操作系统和 ZStack 安装程序。对于不想折腾系统安装的读者我推荐用一体化镜像省事很多。如果追求对系统的完全掌控就先把系统装好再跑纯软件安装包。3. 管理节点的完整安装过程从刻盘到初始化一步步操作环境规划好之后就可以真正开始装了。我用一体化镜像来演示这套流程在测试环境和生产环境里我都走过不止五遍按下面步骤操作基本没有意外。3.1 制作启动盘并安装操作系统首先去 ZStack 官网下载最新的 ISO 一体化安装镜像。下载完成后用 UltraISO 或者 Rufus 把它写入 U 盘这个过程和在 Windows 上做 PE 启动盘类似。服务器开机进入 BIOS选择 U 盘启动会进入 ZStack 的引导界面。这里有一个细节值得注意一体化镜像默认会把整块磁盘都占用来装系统如果你的服务器上有其他想保留的分区一定要提前备份或换机器。分区方案是自动的默认是 LVM把系统装好后ZStack 相关服务全部跑在这块盘上。建议选择系统盘容量在 100GB 以上后期日志和数据目录不会紧张。安装过程中会自动创建用户需要你设置 root 密码和一个用来登录平台的 admin 密码。这两个密码建议设强一点尤其 admin 密码因为 ZStack Web 登录界面会直接暴露在管理网络上。确认后系统开始安装整个过程大概 5 到 10 分钟取决于磁盘速度。安装完成后会提示你重启并且会在屏幕上显示一个管理节点 IP。如果你用的是先装系统再装 ZStack的方式那么步骤就是在操作系统装好后用 root 登录把安装包上传到服务器上执行安装脚本脚本会自动检测硬件虚拟化和依赖包然后给出一个管理节点 IP。两种方式殊途同归最终都会进入同一个界面。3.2 浏览器访问管理界面完成基础初始化管理节点 IP 拿到之后用另一台能访问到这台 IP 的电脑打开浏览器输入http://管理节点IP:5000就能看到 ZStack 的登录页面。第一次进入会让你初始化包括上传 License免费版可以去官网申请试用 License、设置云平台名称、选择时区。初始化完成后系统会进入一个向导式页面引导你添加区域Region、添加计算节点、创建集群。ZStack 的区域概念可以理解成一个数据中心一个区域里可以有多个集群每个集群里有多台计算节点。初次安装时如果管理节点本身也是计算节点一体化部署系统会自动把管理节点加进一个集群你只需要确认信息无误并提交就行。这一步最容易出现的问题是浏览器兼容性。ZStack Web 界面是基于 Java Web 的老版本对 Chrome 的部分版本有兼容问题表现为登录后页面空白或者按钮不响应。建议直接用新版的 Chrome 或者 Edge关闭兼容模式完全没问题。3.3 验证管理节点服务状态安装完成后先别急着创建虚拟机。打开管理节点的终端执行以下命令确认服务都活着systemctl status zstack-server systemctl status zstack-agent systemctl status zstack-database这三个服务分别是管理进程、计算节点代理如果是重合部署、数据库。如果哪个服务状态不是 running用journalctl -u zstack-server -n 50查看日志。最常见的原因是内存不足或者磁盘空间不够所以部署前检查配置是必须的。确认无误后在 Web 界面的管理菜单里能看到 CPU、内存、磁盘的汇总信息。到这里管理节点部分就算完成了。4. 添加计算节点和存储把物理资源变成云资源的关键一步管理节点跑起来只是搭了个架子真正让云平台有意义的是计算节点和存储这两块。我见过不少人卡在这一步因为对计算节点和存储之间的关系没搞清楚。4.1 一体化部署 vs 新增计算节点如果你采用的是分体部署在这时就需要把额外的计算节点加进来。在 Web 界面的计算节点页面点击添加计算节点输入 IP、root 账号密码ZStack 会自动推送 Agent 到这个节点上并完成安装。这个过程中节点会自动检查 CPU 是否支持嵌套虚拟化等特性。这里要注意一个现象计算节点加入后界面上可能显示无状态或者不可用。不要慌多半是 SSH 端口或者密钥问题。ZStack 添加计算节点时用的是 SSH 方式如果目标机器改了默认端口你需要先在系统配置里把 SSH 端口改过来。另外计算节点和 ZStack 之间通信走的是 7070 端口防火墙必须放行。4.2 本地存储和分布式存储的选择添加完计算节点下一步就是添加主存储。主存储是放虚拟机磁盘镜像的地方ZStack 支持本地存储、NFS、Ceph、SAN 等类型。对于测试环境最省事的就是本地存储每台计算节点把自己本地的一块磁盘贡献出来作为存储池。本地存储的缺点是没有数据冗余一旦某台计算节点的磁盘坏了上面的虚拟机数据也跟着没了。所以生产环境建议用 Ceph 或者 NFS。如果你有现成的存储阵列支持 NFS那 ZStack 配置 NFS 主存储最简单填入 IP 和共享路径ZStack 会验证可写性并挂载之后所有计算节点都能共享这一份存储池。Ceph 配置则复杂一些需要你先在外部或者平台里创建 Ceph 集群把监控节点 IP 和 key 填进去。ZStack 对 Ceph 的支持是可以直接用的一套方案存储池的创建、块设备的挂载都由平台管理你基本只需要提供一个可用的 Ceph 集群。我的经验是首次搭建不要一上来就搞 Ceph先本地存储跑通后面再考虑迁移。别的不说排查 Ceph 网络问题会消耗你大量时间本地存储至少能让你先看到虚拟机跑起来的样子获得正向反馈。4.3 备份存储和镜像仓库ZStack 里还有个概念叫备份存储用来存放镜像文件、备份数据和虚拟机导出文件。通常可以用 NFS 或者本地存储来实现。管理节点上默认有一个二级存储用于存放镜像模板。如果备份存储没配置虚拟机的导出和备份功能会不可用。所以建议配置一个路径只要服务端支持 NFS 就行。我用一个简单的表格整理一下存储类型的选择方便你对照存储类型适用环境优点缺点本地存储测试、边缘节点配置简单、无额外开销无冗余单点故障NFS中大型环境集中管理、易扩容依赖存储服务器性能受网络影响Ceph生产环境分布式、自动冗余部署维护复杂需要专门的网络规划SAN已有存储设备稳定、性能好硬件成本高与 ZStack 集成需测试我自己建议配置顺序是本地存储先打通流程NFS 保证备份Ceph 留给后续优化使用。5. 网络配置扁平和 VPC 分别怎么玩及关键避坑点创建网络的时候要先决定用哪种模式。很多人第一次用 ZStack会把网络配置想得很复杂实际上你只需要理解两个关键点。5.1 扁平网络和 VPC 网络的本质区别扁平网络Flat Network是所有虚拟机都直接桥接在物理网络的某个网段里虚拟机拿到的 IP 就是这个网段的真实 IP和物理机在同一二层网络内。这种模式配置最简单在网络页面点击创建网络选择物理网络填入网段、网关、DNS、起始 IP 和结束 IP然后关联到集群。虚拟机创建后会自动从这段 IP 池里取 IP。VPC 网络的本质是每个租户拥有一个独立的虚拟私有网络内部 IP 可以和别的租户重叠而不冲突。ZStack 用 VRouter 来实现每个 VPC 有一个虚拟路由器负责 DHCP、NAT、端口转发等功能。VPC 网络的配置过程是先创建 VPC 网络指定 CIDR比如 10.0.0.0/16再把该 VPC 挂到某个 L3 网络上连接到底层物理网络最后在 VRouter 上配置 SNAT 规则让虚拟机可以上网。5.2 创建网络的完整操作路径在 ZStack 界面里网络创建的完整路径如下在网络菜单下先创建L2 网络选择物理网络对应计算节点上的物理网卡。这里有需要特意说明的地方所有计算节点的同名网卡会被归入同一个物理网络所以网卡命名保持一致很重要。比如统一用 eth0 和 eth1别这台机器叫 ens1f0、那台叫 p1p2后面你会很难受。在L2 网络之上创建L3 网络指定 CIDR、网关和 DHCP 的相关配置。如果这个 L3 网络是 VPC 网络的出口则要在虚拟路由器里创建路由器并指定管理网络和公有网络。创建VPC 网络并挂载到已有的 L3 网络上最后把 VRouter 关联到集群。实际操作中ZStack 在创建 VPC 时会引导你把 VRouter 的管理 IP、公有 IP 都设置好你只需按提示填。公网 IP 段需要有一个与物理网络直连的网段这样才能让虚拟机通过 SNAT 访问到外部网络。5.3 网络踩坑记DHCP、路由和网卡绑定我踩过最深的坑是 DHCP 不生效。现象是虚拟机创建后一直拿不到 IP控制台里看只显示链路本地地址 169.254.x.x。排查了几个小时最终发现问题是 VRouter 所在的计算节点那块网卡的物理网络选择错了导致 VRouter 无法跟虚拟机通信。解决方法是重新创建 VRouter并且确认 L2 物理网络选中的是真正连接虚机网络的网卡。另一个坑是网卡绑定bond。生产环境里你很可能需要把两块网卡绑成一个 bond 来提高可用性ZStack 支持在计算节点上做 bond。但我建议你在云平台建网络之前先到计算节点上用cat /proc/net/bonding/bond0确认 bond 模式是否正确。如果 bond 模式配错比如该用 4 却配成 0虚拟机流量会时断时续定位起来非常费劲。6. 镜像管理和创建虚拟机从导入模板到首台 VM 上云网络和存储都就绪后就可以创建第一台虚拟机了。很多人到了这一步反而会卡住因为镜像模板的选择和导入方式没搞明白。6.1 如何制作并导入一个云镜像ZStack 支持导入多种格式的镜像包括 qcow2、raw、vmdk 等。最稳妥的方式是直接下载官方提供的云镜像比如 CentOS 7.9 的 qcow2 镜像在镜像页面点击创建镜像选择该文件上传到备份存储。上传完成后 ZStack 会做格式识别把镜像转换成平台内可用的模板。如果你想把手头的物理机或者一台 VMware 虚拟机做成模板可以用qemu-img convert命令比如qemu-img convert -f vmdk -O qcow2 vm-disk.vmdk vm-disk.qcow2转换完之后把它上传到 ZStack 的备份存储再创建镜像。需要注意云镜像默认开启了 DHCP所以如果你的网络配置没有正确下发 IP虚拟机启动后网络会不通。镜像里最好预先装好 cloud-init这样 ZStack 创建虚拟机时能自动注入密码和主机名。6.2 创建虚拟机的资源配置逻辑在虚拟机页面点击创建选择镜像模板指定 CPU、内存、磁盘大小。ZStack 的默认配置是按物理机 CPU 超线程来计算的所以你在界面上填的 2 核实际可能是物理机上 2 个超线程。如果你对性能敏感务必先把 CPU 模式设置成 host-passthrough否则虚拟机里看到的 CPU 型号是一颗很保守的虚拟 CPU性能会有 20% 左右的折损。创建虚拟机时还有一个关键选项是计算规格你可以预定义几套常用规格比如 small2C4G、medium4C8G、large8C16G。我的习惯是预先把规格建好后续创建虚拟机直接选保持资源使用井然有序。6.3 云主机创建的加速技巧使用标签和调度策略ZStack 支持用标签Tag来管理主机分组。可以在计算节点上打标签比如GPU节点高频计算节点然后在虚拟机创建时指定调度标签来限定这台机器只能跑在对应标签的节点上。这个功能对 GPU 虚拟化场景特别有用。我在实际项目中用标签把测试节点和生产节点分开避免测试用的虚拟机不小心调度到生产节点上抢资源。创建虚拟机时长按业务系统名称来命名不要用一串无意义编号。后面排查问题和做备份恢复时一个语义清晰的名字比找 IP 方便得多。7. 运维日常备份、升级和故障排查的经验清单私有云搭起来之后真正的考验才开始。很多人虚拟机都跑起来了结果过了一个月发现磁盘日志满了、备份任务失败、升级之后服务起不来。我把自己实际积累的几条经验列出来。7.1 备份策略别只备份虚拟机磁盘ZStack 的备份功能以备份任务为单位可以把虚拟机连同磁盘、网络配置一起备份到备份存储。我在配置备份时发现最容易忽略的地方是数据库备份。ZStack 的云平台状态所有虚拟机配置、网络配置、用户权限都存在管理节点的数据库里如果数据库坏了就算你的虚拟机磁盘文件还在也没法恢复平台状态。建议做一个定时任务把管理节点的数据库 dump 出来定期拷贝到外部存储。ZStack 自带备份数据库的脚本放在管理节点的/usr/local/zstack/下直接执行就能生成一个 SQL 文件。我的备份策略是备份对象方式频率虚拟机磁盘ZStack备份磁盘任务每天一次云平台数据库mysql dump 到本地 同步到外部每天一次镜像模板导出镜像到 NFS 备份存储每周一次磁盘备份不会太占用空间增量备份是默认开启的所以放心配置也不会爆盘。7.2 升级 ZStack 的正确姿势ZStack 的升级有两种路径一种是用官方提供的升级包在 Web 界面系统升级里上传另一种是在管理节点上用脚本升级。我强烈建议在测试环境先升级一次再动生产环境。升级前务必备份数据库快照如果升级失败可以回滚。升级后你会遇到一个小问题管理节点上旧的 zstack-agent 可能在升级完成后没有自动重启导致虚拟机的 QoS 或者监控数据异常。解决办法是升级完成后在所有计算节点上重启一下相关服务systemctl restart zstack-agent我升级时还遇到过界面里的升级按钮变灰的情况那个多半是因为管理节点和计算节点的版本不一致。先到计算节点页面上看看有没有需升级提示把所有节点的版本对齐后再操作。7.3 最值得记住的排查命令运维 ZStack 时有几个命令是我几乎每天都会用到的。当虚拟机网络不通、平台界面打不开、存储池显示不可用时按下面顺序排查效率最高。# 查看管理节点服务状态 systemctl status zstack-server # 查看计算节点 agent 日志 tail -f /usr/local/zstack/apache-tomcat/logs/zstack-agent.log # 查看管理服务器日志 tail -f /usr/local/zstack/apache-tomcat/logs/management-server.log # 查看数据库连接池情况 ss -tan | grep 3306日志路径可能随版本不同有变化但总体结构不变。当你看到 management-server.log 里大量报错时优先看是不是数据库连接不上。这个数据库连接问题八成是磁盘满了用df -h一眼就能确认。7.4 域名和证书为上生产做的准备如果你的私有云要长期使用我建议提前部署好 HTTPS 证书和自定义域名。ZStack Web 界面默认走 HTTP但生产环境直接裸奔 HTTP 会有安全风险。ZStack 支持在系统设置里上传证书配置后所有 API 和 Web 都走 HTTPS。证书要提前申请好注意证书链的顺序中间证书在前还是根证书在前不要搞反。还有一个容易被忽略的点是管理节点 IP 的固定性。如果管理节点的 IP 变了所有计算节点上的 agent 都要重新连接。所以给管理节点配置静态 IP 时要确保和所有计算节点之间的路由是持久稳定的。我也见过有人把管理节点做成 DHCP 保留地址但我不推荐因为计算节点启动时是靠 DNS 或 /etc/hosts 去解析管理节点的那个文件里有静态 IP 最保险。8. 我对 ZStack 上生产环境的几点真实看法最后说一点我个人的实际体会。ZStack 不是一个装完就不用管的产品但它确实是当前开源私有云领域里投入产出比很高的方案。相比偶尔需要花一整天去排查 OpenStack 某个组件之间微妙的兼容性问题ZStack 的排错路径要清楚得多。如果你打算用它上生产建议先小规模试运行一到两个月。这期间重点观察存储的性能曲线和虚拟机的调度稳定性。别一开始就导入上百台虚拟机你做压力测试的时间和之后返工的时间对比前者划算得多。还要说的是ZStack 的社区群和官方论坛能解决很多实际问题。遇到异常先搜索一下日志里报错的关键词往往能找到同病相怜的案例。我自己很多坑都是这么趟出来的。这套搭建流程我前前后后在不同服务器上跑过七八遍踩过的坑都写在上面了。照着做你大概率能在半天内把一朵能用的私有云搭出来即便中途出现意外也基本都能在日志里找到答案。祝你顺利。
返回列表