MAAS Anvil - 高可用 MAAS 部署管理工具
本文翻译整理自:https://github.com/canonical/maas-anvil
一、关于 MAAS Anvil
MAAS Anvil 是一个用于管理 charmed (高可用) MAAS 部署的 snap 工具。
注:MAAS Anvil 目前处于封闭测试阶段,正在接近生产稳定性
MAAS 部署组件
MAAS Anvil 是 MAAS 部署策略的一部分,包括:
1、MAAS Charms:MAAS 组件的 Charmed 版本
- MAAS Agent Charm
- MAAS Region Charm
2、MAAS Anvil:使用 MAAS charms 简化 MAAS 部署
3、MAAS Terraform Provider:配置活跃的 MAAS 部署
MAAS Anvil 使用 MAAS charms 简化部署流程。部署完成后,可以使用 MAAS Terraform provider 对活跃的 MAAS 环境进行进一步配置。
相关链接资源
- github : https://github.com/canonical/maas-anvil
- 官网:https://maas.io
- 官方文档:https://maas.io/docs
- MAAS Agent Charm : https://charmhub.io/maas-agent
- MAAS Region Charm : https://charmhub.io/maas-region
- Terraform Provider : https://registry.terraform.io/providers/maas/maas/latest/docs
- Juju 文档:https://juju.is/docs/juju/charmed-operator
二、文档目录
学习资源 | 工作资源 |
---|---|
教程 MAAS Anvil 功能实践入门 | 操作指南 关键操作的分步指南 |
参考文档 技术规范 |
三、教程
1、引导 maas-anvil 集群学习基础知识
以下说明假设您有三个运行 Ubuntu 24.04 LTS 的节点 infra1
、infra2
、infra3
,并且它们的网络配置正确。
此外,说明假设 MAAS Anvil 在所有三个节点上部署所有可用组件(角色):
- MAAS 区域控制器
- MAAS 机架控制器(agent)
- PostgreSQL
- HAProxy
每个节点的准备步骤
首先需要安装 MAAS Anvil 并设置一些先决条件。这需要在每个节点上完成。您可以在 CLI 接口参考 中了解 maas-anvil prepare-node-script
的具体作用。
ubuntu@infra{1,2,3}:~$ sudo snap install maas-anvil --edge
ubuntu@infra{1,2,3}:~$ maas-anvil prepare-node-script | bash -x
prepare-node-script 会将当前用户添加到 snap_daemon
组。为了使组更改生效,您必须_注销_并_重新登录_。如果文件所属组对您不是主要问题,您也可以运行以下命令立即激活组更改。
ubuntu@infra{1,2,3}:~$ newgrp snap_daemon
引导第一个节点
要初始化集群,您需要在第一个节点上运行引导命令。
ubuntu@infra1:~$ maas-anvil cluster bootstrap \--role database --role region --role agent --role haproxy \--accept-defaults
注:--accept-defaults
标志,顾名思义,接受 MAAS Anvil 的默认配置。最重要的配置是 虚拟 IP、PostgreSQL 最大连接数 和 TLS 终止。如果省略 --accept-defaults
标志,系统会在部署过程中提示您输入配置。如果您想预先指定配置,可以创建一个清单文件并通过 --manifest
标志提供该文件。了解更多关于如何使用清单文件配置 MAAS Anvil 部署的信息。
向 MAAS 集群添加新节点
要向集群添加其他节点,您必须首先在引导集群的初始节点上创建加入令牌。确保在 fqdn 标志中指定要加入节点的完全限定域名(FQDN)。
ubuntu@infra1:~$ maas-anvil cluster add --fqdn infra2、Token for the Node infra2.: eyJuYW1lIjoibWFhcy00Lm1hYXMiLCJzZWNyZXQiOiI3MmE512342abcdEASWWxOWNlYWNkYmJjMWRmMjk4OThkYWFkYzQzMDAzZjk4NmRkZDI2MWRhYWVkZTIxIiwiZmluZ2VycHJpbnQiOiJlODU5ZmY5NjAwMDU4OGFjZmQ5ZDM0NjFhMDk5NmU1YTU3YjhjN2Q2ZjE4M2NjZDRlOTg2NGRkZjQ3NWMwZWM1Iiwiam9pbl9hZGRyZXNzZXMiOlsiMTAuMjAuMC43OjcwMDAiLCIxMC4yMC4wLjg6NzAwMCJdfQ==ubuntu@infra1:~$ maas-anvil cluster add --fqdn infra3、Token for the Node infra3.: eyJuYW1lIjoibWFhcy00Lm1hYXMiLCJzZWNyZXQiOiI3MmE512342abcdEASWWxOWNlYWNkYmJjMWRmMjk4OThkYWFkYzQzMDAzZjk4NmRkZDI2MWRhYWVkZTIxIiwiZmluZ2VycHJpbnQiOiJlODU5ZmY5NjAwMDU4OGFjZmQ5ZDM0NjFhMDk5NmU1YTU3YjhjN2Q2ZjE4M2NjZDRlOTg2NGRkZjQ3NWMwZWM1Iiwiam9pbl9hZGRyZXNzZXMiOlsiMTAuMjAuMC43OjcwMDAiLCIxMC4yMC4wLjg6NzAwMCJdfQ==
将新节点加入 MAAS 集群
现在我们必须使用 cluster join
命令和刚创建的加入令牌在加入节点上加入集群。节点加入集群的角色可以特定于该节点,不必与引导节点的角色匹配。在本例中,我们选择每个节点都有每个组件的配置。
ubuntu@infra2:~$ maas-anvil cluster join \--role database --role region --role agent --role haproxy \--token eyJuYW1lIjoibWFhcy00Lm1hYXMiLCJzZWNyZXQiOiI3MmE512342abcdEASWWxOWNlYWNkYmJjMWRmMjk4OThkYWFkYzQzMDAzZjk4NmRkZDI2MWRhYWVkZTIxIiwiZmluZ2VycHJpbnQiOiJlODU5ZmY5NjAwMDU4OGFjZmQ5ZDM0NjFhMDk5NmU1YTU3YjhjN2Q2ZjE4M2NjZDRlOTg2NGRkZjQ3NWMwZWM1Iiwiam9pbl9hZGRyZXNzZXMiOlsiMTAuMjAuMC43OjcwMDAiLCIxMC4yMC4wLjg6NzAwMCJdfQ==
ubuntu@infra3:~$ maas-anvil cluster join \--role database --role region --role agent --role haproxy \--token eyJuYW1lIjoibWFhcy00Lm1hYXMiLCJzZWNyZXQiOiI3MmE512342abcdEASWWxOWNlYWNkYmJjMWRmMjk4OThkYWFkYzQzMDAzZjk4NmRkZDI2MWRhYWVkZTIxIiwiZmluZ2VycHJpbnQiOiJlODU5ZmY5NjAwMDU4OGFjZmQ5ZDM0NjFhMDk5NmU1YTU3YjhjN2Q2ZjE4M2NjZDRlOTg2NGRkZjQ3NWMwZWM1Iiwiam9pbl9hZGRyZXNzZXMiOlsiMTAuMjAuMC43OjcwMDAiLCIxMC4yMC4wLjg6NzAwMCJdfQ==
确认集群状态
如果一切顺利,MAAS-Anvil 集群现在应该已经运行。您可以使用以下命令检查集群状态。如果您想了解更多关于如何监控正在进行的 MAAS Anvil 部署的信息,可以在 监控正在进行的部署 部分内容。
ubuntu@infra1:~$ maas-anvil cluster list
┏━━━━━━━━┳━━━━━━━━┳━━━━━━━━┳━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━┓
┃ Node ┃ Status ┃ Region ┃ Agent ┃ Database ┃ HAProxy ┃
┡━━━━━━━━╇━━━━━━━━╇━━━━━━━━╇━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━┩
│ infra1 │ up │ x │ x │ x │ x │
│ infra2 │ up │ x │ x │ x │ x │
│ infra3 │ up │ x │ x │ x │ x │
└────────┴────────┴────────┴───────┴──────────┴─────────┘
创建 MAAS 管理员用户
要完成部署,您可以使用以下命令创建 MAAS 管理员用户:
ubuntu@infra1:~$ maas-anvil create-admin --username admin --password pass --email admin@maas.io --ssh-import=lp:maasadmin
您现在应该有一个运行中的 MAAS Anvil HA 集群和一个管理员用户 ✨。
四、操作指南
1、引导集群
这是 引导 maas-anvil 集群学习基础知识 教程的简化版本。如果您之前部署过 MAAS Anvil 集群,但需要复习流程,可以参考此操作指南。
准备节点
在每个节点上,您需要运行以下命令为 MAAS Anvil 使用做准备:
ubuntu@infra{1,2,3}:~$ sudo snap install maas-anvil --edge
ubuntu@infra{1,2,3}:~$ maas-anvil prepare-node-script | bash -x
prepare-node-script 会将当前用户添加到 snap_daemon
组。为了使组更改生效,您必须_注销_并_重新登录_。如果文件所属组对您不是主要问题,您也可以运行以下命令立即激活组更改。
ubuntu@infra{1,2,3}:~$ newgrp snap_daemon
引导第一个节点
要初始化集群,您需要在第一个节点上运行引导命令。
ubuntu@infra1:~$ maas-anvil cluster bootstrap \--role database --role region --role agent --role haproxy \--accept-defaults
添加新节点
要向集群添加新节点,请在引导节点上运行以下 cluster add
命令并记下令牌。
ubuntu@infra1:~$ maas-anvil cluster add --fqdn infra2、Token for the Node infra2.: eyJuYW1lIjoibWFhcy00Lm1hYXMiLCJzZWNyZXQiOiI3MmE512342abcdEASWWxOWNlYWNkYmJjMWRmMjk4OThkYWFkYzQzMDAzZjk4NmRkZDI2MWRhYWVkZTIxIiwiZmluZ2VycHJpbnQiOiJlODU5ZmY5NjAwMDU4OGA5ZDM0NjFhMDk5NmU1YTU3YjhjN2Q2ZjE4M2NjZDRlOTg2NGRkZjQ3NWMwZWM1Iiwiam9pbl9hZGRyZXNzZXMiOlsiMTAuMjAuMC43OjcwMDAiLCIxMC4yMC4wLjg6NzAwMCJdfQ==ubuntu@infra1:~$ maas-anvil cluster add --fqdn infra3、Token for the Node infra3.: eyJuYW1lIjoibWFhcy00Lm1hYXMiLCJzZWNyZXQiOiI3MmE512342abcdEASWWxOWNlYWNkYmJjMWRmMjk4OThkYWFkYzQzMDAzZjk4NmRkZDI2MWRhYWVkZTIxIiwiZmluZ2VycHJpbnQiOiJlODU5ZmY5NjAwMDU4OGFjZmQ5ZDM0NjFhMDk5NmU1YTU3YjhjN2Q2ZjE4M2NjZDRlOTg2NGRkZjQ3NWMwZWM1Iiwiam9pbl9hZGRyZXNzZXMiOlsiMTAuMjAuMC43OjcwMDAiLCIxMC4yMC4wLjg6NzAwMCJdfQ==
将新节点加入集群
使用 cluster join
命令、刚创建的加入令牌以及您希望特定节点具有的角色,在加入节点上加入集群。
ubuntu@infra2:~$ maas-anvil cluster join \--role database --role region --role agent --role haproxy \--token eyJuYW1lIjoibWFhcy00Lm1hYXMiLCJzZWNyZXQiOiI3MmE512342abcdEASWWxOWNlYWNkYmJjMWRmMjk4OThkYWFkYzQzMDAzZjk4NmRkZDI2MWRhYWVkZTIxIiwiZmluZ2VycHJpbnQiOiJlODU5ZmY5NjAwMDU4OGFjZmQ5ZDM0NjFhMDk5NmU1YTU3YjhjN2Q2ZjE4M2NjZDRlOTg2NGRkZjQ3NWMwZWM1Iiwiam9pbl9hZGRyZXNzZXMiOlsiMTAuMjAuMC43OjcwMDAiLCIxMC4yMC4wLjg6NzAwMCJdfQ==
ubuntu@infra3:~$ maas-anvil cluster join \--role database --role region --role agent --role haproxy \--token eyJuYW1lIjoibWFhcy00Lm1hYXMiLCJzZWNyZXQiOiI3MmE512342abcdEASWWxOWNlYWNkYmJjMWRmMjk4OThkYWFkYzQzMDAzZjk4NmRkZDI2MWRhYWVkZTIxIiwiZmluZ2VycHJpbnQiOiJlODU5ZmY5NjAwMDU4OGFjZmQ5ZDM0NjFhMDk5NmU1YTU3YjhjN2Q2ZjE4M2NjZDRlOTg2NGRkZjQ3NWMwZWM1Iiwiam9pbl9hZGRyZXNzZXMiOlsiMTAuMjAuMC43OjcwMDAiLCIxMC4yMC4wLjg6NzAwMCJdfQ==
2、登录 Juju 控制器
如果您收到类似以下错误消息:
Please enter password for $node on anvil-controller
这是因为 Juju OAuth macaroons 通常会在 24 小时后过期。如果您需要在 macaroon 过期后与 MAAS Anvil Juju 控制器交互,您需要重新验证会话。您可以使用以下命令重新验证会话:
ubuntu@$node:~$ maas-anvil juju-login
您也可以手动从 MAAS Anvil 获取登录凭据:
ubuntu@$node:~$ cat ~/snap/maas-anvil/current/account.yaml
password: $password
user: $user
然后像往常一样使用 juju login
。
3、配置您的 MAAS Anvil 部署
在高可用性部署 MAAS 时,您可能需要配置数据库的最大连接数、虚拟 IP、TLS、使用的 charms 版本,甚至是组件的部署方式。MAAS Anvil 允许您配置所有这些内容,本节将解释如何操作。
如果您想确切了解有哪些配置选项可用以及它们有什么效果,请阅读 配置选项 部分。
MAAS Anvil 的配置选项通常分为两类:
- 部署
- 软件
在部署类别中,您可以配置部署的一般选项;在软件类别中,您可以选择 MAAS Anvil 中使用的所有 charms 的版本和配置,并定义这些 charms 的部署方式。
--accept-defaults
标志
如果在引导节点和加入节点上设置 --accept-defaults
标志,您将接受 MAAS Anvil 附带的默认配置。对于所有