k歌里的相片是通过网站做的吗,手机淘宝客网站怎么做的,如今做哪个网站致富,设计软件免费版1. 为什么你需要考虑从Horizon迁移到Skyline Dashboard#xff1f; 如果你正在管理一个OpenStack云平台#xff0c;那么对Horizon这个默认的Web控制面板一定不会陌生。它功能齐全#xff0c;是OpenStack的“官方门面”#xff0c;但用久了#xff0c;尤其是在规模稍大或者…1. 为什么你需要考虑从Horizon迁移到Skyline Dashboard如果你正在管理一个OpenStack云平台那么对Horizon这个默认的Web控制面板一定不会陌生。它功能齐全是OpenStack的“官方门面”但用久了尤其是在规模稍大或者对运维效率有更高要求的场景下你可能会和我有一样的感受界面有点“老派”加载速度偶尔让人着急而且对于一些高级监控和运维操作总感觉差了那么点意思。我最早接触Skyline Dashboard其实是在一次社区技术分享会上。当时一位资深的运维工程师展示了他们如何用Skyline替代了Horizon整个仪表盘的响应速度和数据可视化效果让我眼前一亮。简单来说Skyline Dashboard是一个由社区驱动的、现代化的OpenStack控制面板替代方案。它并非要完全颠覆Horizon而是在其基础上针对用户体验、性能监控和可扩展性做了大量优化。那么迁移到Skyline能带来什么实实在在的好处呢从我实际部署和使用的经验来看主要有三点。第一是性能提升尤其是页面渲染和资源列表加载速度Skyline采用了更现代的前后端架构在处理大量虚拟机、镜像或网络资源时等待时间明显缩短。第二是增强的可观测性Skyline原生集成了更丰富的监控图表你可以在同一个界面里看到计算节点的CPU、内存、磁盘IO趋势而不需要再跳转到Grafana或其他监控工具这对日常健康检查非常友好。第三是更好的可维护性和扩展性Skyline的微服务化架构更清晰配置也相对独立后续如果你想自定义一些面板或者集成内部系统会感觉更顺手。当然迁移不是拍脑袋的决定。如果你的OpenStack环境非常稳定Horizon完全满足现有需求那么按兵不动也是明智的。但如果你已经对Horizon的某些方面感到不满或者希望给团队和用户一个更流畅、更强大的管理界面那么这次平滑迁移就非常值得尝试。整个过程说白了就是在不干扰现有云平台业务的前提下部署一套新的“驾驶舱”然后把“方向盘”慢慢切换过来。下面我就带你一步步走完这个流程把我踩过的坑和验证过的经验都分享给你。2. 迁移前的关键准备工作环境与心态在动手敲任何命令之前充分的准备是成功迁移的一半。这里的环境准备不仅仅是软件和配置还包括对整个操作过程的理解和风险预案。首先你需要一个健康运行的OpenStack环境。这是最基本的前提。Skyline需要与OpenStack的核心服务Keystone, Nova, Neutron, Cinder等进行通信。我建议你先通过Horizon面板和命令行工具openstack命令全面检查一遍你的云平台状态确保所有核心服务都是active和up的。特别要确认Keystone的端点Endpoint是可访问的因为Skyline首要任务就是和Keystone打交道来认证和获取令牌。你可以用openstack endpoint list命令来核对。其次准备一台独立的部署服务器。虽然理论上Skyline可以安装在控制节点上但我强烈建议你单独准备一台干净的Linux服务器Ubuntu 20.04/22.04或CentOS 7/8 Stream都行。这样做的好处是隔离性好不会影响现有OpenStack服务的稳定性。这台服务器需要能通过网络访问你的OpenStack控制节点通常是管理网络或API网络。服务器上需要安装好Docker或Podman容器引擎因为Skyline官方推荐以容器方式运行。安装Docker很简单以Ubuntu为例sudo apt-get update sudo apt-get install -y docker.io sudo systemctl enable --now docker接下来是获取Skyline的部署材料。主要是两样东西Docker镜像和配置文件。原始文章提到了从官方Git仓库克隆但由于网络原因直接克隆OpenDev或GitHub的仓库可能比较慢。我的经验是像文中那样在国内的代码托管平台如Gitee、极狐GitLab上寻找同步的镜像仓库速度会快很多。你只需要搜索“skyline-apiserver”就能找到。配置文件skyline.yaml.sample是核心它定义了Skyline如何连接你的OpenStack。你需要把这个文件下载到部署服务器上。最后也是最重要的一点做好备份和回滚计划。我们是在做迁移不是破坏。请务必备份你现有的Horizon相关配置虽然我们不会动它更重要的是记录下当前Horizon访问的完整URL和端口。在迁移过程中我们将让Skyline运行在一个新的端口默认9999这样Horizon和Skyline可以在一段时间内共存。你可以先让Skyline上线内部测试无误后再通过负载均衡器或修改访问习惯将流量逐步切到Skyline。万一新面板出现问题你可以瞬间切回Horizon业务零感知。这种“双活”过渡的策略能给你最大的安全感。3. 详解核心配置让Skyline认识你的OpenStack配置文件skyline.yaml是Skyline的“大脑”它告诉Skyline你的OpenStack家在哪里钥匙是什么。把这一步理解透后续就基本不会出错了。我们把下载的skyline.yaml.sample拷贝为skyline.yaml然后开始编辑。mkdir -p /etc/skyline cp /path/to/skyline.yaml.sample /etc/skyline/skyline.yaml vim /etc/skyline/skyline.yaml # 或者用你喜欢的编辑器打开文件后你会看到很多配置项但初期我们重点关注以下几个关键部分第一个是数据库连接database_url。Skyline需要自己的数据库来存储会话、面板布局等元数据。你需要准备一个MySQL/MariaDB数据库。这里有个小坑如果你的OpenStack是用Kolla-ansible部署的那么数据库很可能运行在Docker容器里。你需要连接到这个MariaDB容器去创建库和用户。配置格式如下database_url: mysql://skyline:YourStrongPassword控制节点IP:3306/skyline请将YourStrongPassword替换为一个高强度的密码控制节点IP替换为你的MariaDB服务实际IP通常是控制节点的管理IP或浮动IP。端口3306是默认的。第二个是身份认证地址keystone_url。这是Skyline与OpenStack对话的敲门砖。你需要将其指向Keystone的管理端点通常是35357端口下的v3版本。keystone_url: http://控制节点IP:35357/v3/务必确保这个URL从你的部署服务器上可以通过网络访问。你可以用curl -v http://控制节点IP:35357/v3/简单测试一下。第三个是监控数据源prometheus_endpoint。这是Skyline展示丰富监控图表的基础。假设你已经部署了Prometheus来监控OpenStack例如通过Kolla-ansible部署的Prometheus那么这里就填它的地址。prometheus_endpoint: http://监控节点IP:9091如果没有部署Prometheus这一项可以先注释掉Skyline的基础功能依然可用只是看不到监控图表。第四个是系统用户密码system_user_password。这个密码用于Skyline内部的一个特殊服务账户。你同样需要设置一个强密码。system_user_password: YourSkylineSystemPassword除了这些配置文件中还有关于会话存储、日志级别、监听端口默认9999等设置初期可以保持默认。配置完成后强烈建议你用yaml语法检查工具或者简单的python -m py_compile /etc/skyline/skyline.yaml如果安装了PyYAML检查一下格式避免因为缩进或特殊字符导致容器启动失败。4. 数据库与服务凭证打好地基配置写好了接下来就要为Skyline创建它运行所需的基础设施——数据库和OpenStack服务账户。4.1 创建并初始化数据库首先我们需要进入MariaDB容器创建数据库。假设你的OpenStack使用Kolla部署# 1. 找到MariaDB容器并进入 docker exec -it mariadb bash # 2. 进入容器后连接MySQL。密码需要从Kolla的密码文件中获取 # 在宿主机上密码通常在 /etc/kolla/passwords.yml 里的 database_password 项 # 在容器内你也可以通过环境变量或挂载文件找到。这里假设你知道root密码。 mysql -u root -p Enter password: # 输入你的MariaDB root密码 # 3. 创建skyline数据库使用utf8字符集 MariaDB [(none)] CREATE DATABASE IF NOT EXISTS skyline DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; Query OK, 1 row affected (0.001 sec) # 4. 创建数据库用户并授权。这里的‘SKYLINE_DBPASS’要替换成你在配置文件中设置的密码 MariaDB [(none)] GRANT ALL PRIVILEGES ON skyline.* TO skylinelocalhost IDENTIFIED BY SKYLINE_DBPASS; MariaDB [(none)] GRANT ALL PRIVILEGES ON skyline.* TO skyline% IDENTIFIED BY SKYLINE_DBPASS; MariaDB [(none)] FLUSH PRIVILEGES; # 5. 退出 MariaDB [(none)] exit bash-4.4# exit这里有两个授权语句一个给localhost一个给%任意主机。这是因为Skyline容器可能以host网络模式运行被视为localhost也可能在桥接网络下通过IP访问数据库。双重授权更保险。授权完成后你可以在部署服务器上用mysql -u skyline -h 数据库IP -p测试一下是否能远程连接成功。4.2 在Keystone中创建服务凭证Skyline需要以一个合法的OpenStack用户身份去调用其他服务的API。因此我们要在Keystone里为它创建一个专门的用户并赋予管理员角色。# 1. 激活你的OpenStack管理员环境变量。如果是Kolla部署通常是 source /etc/kolla/admin-openrc.sh # 2. 创建名为‘skyline’的用户密码设置为配置文件中system_user_password的值 openstack user create --domain default --password YourSkylineSystemPassword skyline # 命令会返回创建的用户信息记下用户ID非必须 # 3. 将‘skyline’用户添加到‘service’项目的‘admin’角色中 openstack role add --project service --user skyline admin # 4. 可选但建议验证一下角色是否添加成功 openstack role assignment list --user skyline --project service --names你应该能看到一条记录显示用户skyline在项目service中拥有角色admin。这一步非常关键它决定了Skyline是否有权限去列出虚拟机、创建网络、查看卷等。如果这里权限给错了后面Skyline面板里就会看到各种“禁止访问”的错误。5. 启动与初始化让Skyline跑起来基础工作全部就绪现在到了最激动人心的环节——启动Skyline容器。这个过程分为两步初始化引导和运行服务。这有点像安装一个数据库先要运行mysql_install_db来初始化数据目录然后再启动mysqld服务。5.1 使用引导容器初始化我们需要先运行一个一次性容器来执行数据库建表、初始化数据等操作。注意这里使用的镜像源直接拉取官方镜像可能会很慢。我实测下来使用国内镜像源速度非常快比如南京大学的镜像。docker run -d --name skyline_bootstrap \ -e KOLLA_BOOTSTRAP \ -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml \ --nethost \ docker.nju.edu.cn/99cloud/skyline:latest解释一下参数-d后台运行。--name给容器起个名字方便后续操作。-e KOLLA_BOOTSTRAP这是一个环境变量告诉容器“你现在处于引导模式”只执行初始化脚本不启动常驻服务。-v ...将我们精心准备的配置文件挂载到容器内的相同路径。--nethost使用主机网络模式。这简化了网络配置容器直接使用宿主机的IP和端口。对于管理面板这种需要访问内部多个服务的应用host模式通常最省心。最后的镜像地址我强烈推荐使用docker.nju.edu.cn/99cloud/skyline:latest这个国内源。运行这个命令后你可以用docker logs -f skyline_bootstrap来实时查看初始化日志。当看到数据库连接成功、表创建成功、初始化数据导入成功等字样并且容器自动退出状态为Exited (0)时就表示引导成功了。这个过程通常只需要几十秒。5.2 运行正式的Skyline服务容器引导容器完成使命后就可以删除它然后启动真正的服务容器。# 删除引导容器 docker rm -f skyline_bootstrap # 启动Skyline服务容器 docker run -d --name skyline --restartalways \ -v /etc/skyline/skyline.yaml:/etc/skyline/skyline.yaml \ --nethost \ docker.nju.edu.cn/99cloud/skyline:latest这个命令和之前很像去掉了KOLLA_BOOTSTRAP环境变量并且增加了--restartalways这意味着如果容器意外停止Docker守护进程会自动重启它保证了服务的高可用。启动后使用docker ps确认容器状态是Up再用docker logs skyline查看日志确保没有报错并且能看到服务启动在:9999端口的消息。6. 验证、访问与故障排查容器跑起来了但工作还没结束。我们需要验证Skyline是否真的正常工作了。首先在部署服务器本机测试一下端口是否监听curl -I http://localhost:9999如果返回HTTP/1.1 200 OK或者3xx重定向说明Web服务已经起来了。然后打开你的浏览器访问https://你的部署服务器IP:9999。注意Skyline默认使用HTTPS如果你的环境没有配置证书浏览器会提示不安全这是正常的点击“继续前往”即可。你应该能看到Skyline的登录界面。这里就是第一个关键验证点用你的OpenStack管理员账号或者有足够权限的账号登录。如果能成功登录并且跳转到了主面板那么恭喜你Keystone对接成功了登录后仔细检查各个功能模块计算看看虚拟机列表能否正常加载能否看到CPU、内存使用率如果配置了Prometheus。网络检查网络、子网、路由器列表。存储查看卷和快照。身份管理看看项目和用户列表。如果某个页面加载失败、空白或者报错比如403 Forbidden别慌。这时候Docker日志是你的最好朋友。打开终端运行docker logs --tail 100 -f skyline然后回到浏览器刷新出错的页面观察终端里输出的错误信息。常见的错误有数据库连接错误检查skyline.yaml中的database_url确保IP、端口、用户名、密码全对并且从部署服务器能连通数据库的3306端口。Keystone认证错误检查keystone_url是否正确以及Skyline服务用户的密码system_user_password是否和创建用户时的一致。同时确认该用户在service项目里是否有admin角色。其他服务端点错误Skyline会从Keystone获取Nova、Neutron等服务的端点。如果这些端点的URL在OpenStack中设置的是内部域名或IP比如在Kolla部署中而Skyline容器无法解析或访问就会出错。这时可能需要调整OpenStack服务的端点地址或者配置Skyline容器的网络比如使用宿主机网络--nethost通常能避免此问题。Prometheus连接错误如果监控图表出不来检查prometheus_endpoint配置并确保Prometheus服务本身是健康的。7. 迁移后的优化与日常使用心得成功登录并基本功能可用后迁移的核心步骤就完成了。但要让Skyline真正发挥威力成为你日常运维的得力助手还需要一些优化和习惯适应。首先是界面和语言的熟悉。Skyline的界面布局和操作逻辑与Horizon有所不同更偏向于现代Web应用的设计。多花点时间浏览各个菜单你会发现它把一些高级功能如主机聚合、迁移操作放在了更显眼的位置。在设置里你可以将语言切换为中文如果镜像支持这对团队协作更友好。其次是监控功能的深度利用。这是Skyline的一大亮点。除了总览页面多进入“管理员”视图下的“计算主机”或“监控”面板。你可以看到每个计算节点的详细资源使用历史曲线这对于定位性能瓶颈、规划容量非常有帮助。如果前期没有配置Prometheus我强烈建议你补上这一块它是提升运维效率的关键。关于性能。在我的测试中Skyline在加载包含数百个虚拟机的列表时速度优势明显。这得益于其API调用的优化和前端渲染机制。你可以将此作为一个卖点向你的云用户推广新的面板。最后是共存与切换策略。在很长一段时间内你可以让Horizon和Skyline并存。Horizon可能还在原来的端口比如80Skyline在新的端口9999。你可以通过内部链接、书签或者简单的反向代理如Nginx来引导不同用户群的访问。例如给普通用户继续使用Horizon而运维团队切换到Skyline。等到团队完全熟悉Skyline并且确认其稳定可靠后再考虑将默认访问入口完全切换到Skyline甚至可以将Horizon服务停用以节省资源。整个迁移过程最深的体会就是“准备大于操作”。花在检查环境、理解配置、准备备份上的时间远比敲命令的时间多但这些都是值得的它们保证了迁移的平稳。Skyline Dashboard带来的现代化体验和运维深度确实让日常的云平台管理工作变得稍微轻松和愉快了一些。如果你在迁移过程中遇到了上面没提到的问题不妨去OpenStack社区或Skyline的GitHub仓库看看Issues和讨论社区的力量总是很强大的。