如何使用虚拟化/LAMP(小型 IaC)自动化服务器安装?

如何使用虚拟化/LAMP(小型 IaC)自动化服务器安装?

如何实现服务器安装自动化?哪些基础设施/系统符合我们的需求?

我们有 10 多个物理服务器和 100 多个虚拟机,大部分都是 LAMP。数量不多,但也不是所有虚拟机都能独立运行。所有服务器都配有 KVM 虚拟化。我们为客户托管各种定制应用程序,并经常对其进行修改。因此,这不是需要扩展的单个应用程序。项目团队直接与客户和虚拟机合作,这是一项要求。

我们经常遇到的问题是,重新安装虚拟机/机器变得很棘手,因为没有人控制对它们的最新更改,这会带来不稳定的风险,人们会尽可能地推迟它,并且问题会随着时间的推移变得越来越大。

我希望至少每 3 个月根据需要建立一次重新安装程序。重新安装应从代码存储库和备份开始。这不应是 VM 复制。

我们估计,如果手工完成,在目前的设置下,每 3 个月将花费我们大约 6 个工月的时间。我们如何才能减少这个时间并提高流程的可重复性?

问题是哪种软件可以帮助我们自动完成这项任务。它应该尽可能轻量。我们不需要自动节点分配。我们只需要让重新安装尽可能自动化。我们假设每次重新安装都有人工监督。

我们的节点大多是 LAMP,其中两个系统有超过 1TB 的结构化数据库数据,几个系统有超过 200GB 的数据,还有大约 50 个小型自定义虚拟机。我们可以轻松安排每个系统的计划停机时间,因此这不是重新安装期间的高可用性问题。

我们只需要尽可能地实现自动重新安装。

答案1

您需要一个配置管理框架,如 Ansible、Saltstack、Puppet 或 Chef。

这是用于管理和应用配置的工具。但是,选择实际的工具只是项目的一小部分。

您需要设计和部署该流程,其中对基础设施的所有更改都通过此工具进行管理。

这需要:

  • 培训人们使用工具
  • 改变系统架构,以便没有工具就无法进行更改
  • 应对改变人们基本运作模式的阻力

您还应该考虑统一软件堆栈基础设施。

如果每台虚拟机的软件配置略有不同,则

  • 针对不同安装的配置管理代码中存在大量重复代码
  • 选择如何应用哪种配置的复杂逻辑

任何一个因素都会增加大量的维护开销,最终结果可能会变得像您当前的情况一样痛苦。

答案2

你的云有 API 密钥吗?

大多数云都有一键式 LAMP 镜像,例如

弱点:https://www.vultr.com/apps/lamp/

数字海洋:https://marketplace.digitalocean.com/apps/lamp

Linode:https://www.linode.com/docs/guides/lamp-stack-marketplace-app/

如果没有,我绝对会选择 VestaCPhttps://vestacp.com/install/

https://hestiacp.com/

两者都添加了 apache 后端、nginx 前端、MySQL/mariadb/postgres 和 php/php-fpm。所有选项也都一样。

对于更新,我将创建一个单独的服务器,在分离的服务器中放置一个通用的 SSH 公钥/root/.ssh/authorized_keys,该公钥可以自动登录到每个服务器,如下所示:

INSTANCES=(
10.0.0.5
10.0.0.6
10.0.0.7
...
)


for INSTANCE in "${INSTANCES[@]}"; do
    ssh root@${INSTANCE} /bin/bash -c "apt update -y && apt upgrade -y"
done

这几乎是 Terraform、Kubernetes 等 DIY。

此外,在 GitHub 上还有大量特定于云的指南,例如:

另一个 Digital Ocean 的产品:https://github.com/ethanbeyer/DigitalOcean-Droplet-Setup

AWS 的一个:https://github.com/elionaz/aws-LAMP/blob/master/install_lamp.sh

相关内容