以Chef和Ansible为例快速入门服务器安装

ASP站长网这篇文章讨论了如何在我们的环境中安装和配置软件,这个任务通常被称为服务器配置(Server Provisioning)。
 
服务器配置
在开始介绍现代化的工具之前,我们来看看最基本且经过实战考验的服务器配置工具:shell脚本。在Chef、Ansible或Puppet出现之前,很多运营团队使用Bash来配置服务器(在Windows上则使用PowerShell脚本)。
 
例如,如果想在运行Ubuntu的Amazon EC2实例上安装Nginx,可以使用以下脚本(install-nginx.sh):
 
#!/bin/sh
ssh -t ubuntu@$1 sudo apt-get upgrade
ssh -t ubuntu@$1 sudo apt-get -y install nginx
我们可以使用shell脚本来配置服务器上的所有东西。据我所知,所有主流的配置工具都使用了基于安全传输层(如SSH)的shell命令或PowerShell(Chef可能是个例外)。即使你使用了配置工具,在某些时候也需要用到脚本。因此,当你开始使用配置工具(如Chef或Ansible)时,学习如何使用基本的shell脚本也会为你带来很多好处。
 
你可能会问自己,为什么在shell脚本已经可以完成所有工作的同时还要学习配置工具?很多环境已经使用shell脚本进行服务器配置,那么为什么要使用配置工具代替它们?
 
首先,shell脚本通常使用的是声明性语法。shell脚本通过运行命令序列来安装软件,而配置工具只需要指定服务器应该安装哪些软件,这样就可以使用相同的代码在不同的操作系统上、使用不同的包管理器以及指定不同的版本来安装和配置相同的软件。
 
其次,配置工具通常会提供用于组织基础设施的方式。虽然使用shell脚本也可以做到这一点,但配置工具通常会提供更简洁明了的方案。因为是行业标准,开发人员可以更轻松地找出QA环境中哪些服务器运行RabbitMQ。
 
第三,每个主要的配置工具都有一个蓬勃发展的社区,他们构建可复用的模块来安装大多数开源软件。你可以直接在模块配置中指定内存限制,而不需要记住Postgres配置文件在哪里,这样可以节省很多时间。
 
当然,原因还有很多,这里就不一一例举了。尽管学习曲线有点陡峭,但学习配置工具仍然是值得的。与shell脚本相比,配置工具更容易使用,便于思考,也更容易维护。
 
关于命名
学习使用Chef(服务器配置工具)的前几周给我留下了深刻的印象。入门指南展示了如何创建一个“recipe”,其中包含安装或配置软件的说明,我能够理解这种比喻背后的含义。recipe必须存在于“cookbook”中,这是有道理的。然后你在“kitchen”里测试cookbook,但我开始有点怀疑了。
 
这种比喻有点令人感到困惑,于是我决定去看一下其他工具,如Ansible。Ansible文档的第一页介绍了“playbook”的概念,而playbook包含一系列“play”。
 
那么,这些问题很重要吗?当然很重要了,因为在学习配置工具之前,你应该知道,它们很有可能会引入大量令人费解的术语。即使是为了完成基本的任务,你也必须重新学习很多术语。如果你是刚开始学习配置工具,我强烈建议你随时写下这些术语定义,你还有很多东西要学。
 
每个软件开发人员都会为现有的单词创建不同的含义,他们甚至还会发明一些单词,比如“uninitialize”和“unregister”。这已经成为软件开发的一部分。
 
我会尽量用大家熟悉的术语来解释这些工具。
 
配置管理
你决定使用花哨的配置工具在远程服务器上安装Nginx。在开始设置数据库备份节点前,一切都很顺利。你已经编写了MySQL主服务器的配置文件,但是你不太确定如何配置MySQL从服务器的内部DNS地址。这个时候配置管理就派上用场了。
 
在设置服务器时,最好可以将应用程序视为由两部分组成:不可变部分(通常是代码或编译的二进制文件)和可变部分(通常是配置文件或环境变量)。大部分由社区创建的模块默认情况下会安装二进制文件,并提供尽可能合理的配置,而且会为我们暴露出一些属性,方便对其进行覆盖。
 
这些属性通常包含特定于用户环境的值。大多数配置工具都为用户提供了一种机制,通过模板将特定于环境的值插入到配置文件中,或直接插入到环境变量中。
 
你可以使用配置工具提供的配置管理来配置MySQL主服务器的配置文件,然后在其中配置从服务器。
 
Secret管理
这样就可以解决上述的问题,但后来发现,你必须上传AWS凭证才能让MySQL从服务器访问S3。你知道不能直接将这些凭证提交到代码库中,因此这些凭证只能存在于你的机器和NSA服务器上。
 
这个时候你需要的是Secret管理。
 
与自动化领域的所有东西一样,你也有很多管理秘钥的可选项。谷歌提供了一项名为KMS的服务,AWS也提供了一项名为Secret Manager的服务,Chef提供了加密数据包,Hashicorp提供了一款名为Vault的产品,Ansible也有一款名为Vault的产品。除了KMS会对字符串进行加密之外,所有这些工具都提供了相同的功能:保护对加密秘钥的访问(这些秘钥被用在配置管理中)。
 
有好几次,我不小心将秘钥提交到了代码库。这类事情一直在发生,而且非常危险。
 
切勿以明文形式存储API密钥或凭证。
 
可以使用Secret管理解决方案来存储这些数据,然后将其绑定到配置工具中。

dawei

【声明】:九江站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。