基础设施即代码

观看完本文后,你将能够定义基础设施即代码,描述临时性基础设施,并阐述通过容器实现的不可变交付。
基础设施即代码是指以文本格式描述基础设施的实践。这里我说的可不是文档,而是一种可执行的文本格式,也就是代码。你可以使用一种文本描述来配置基础设施,然后交给工具去执行。
实现这一过程的工具被称为配置管理系统,比如 Ansible、Puppet 和 Chef 这类工具,它们能让你将基础设施描述为代码,然后创建该基础设施并使其保持在相应状态。
永远不要手动对软件配置进行系统更改,这种方式不可重现且极易出错。你应该使用模板和脚本来描述如何安装并自动配置系统、设备、软件和用户等元素。
然后,你可以将这些文本代码存储在版本控制系统中,这样就能记录所有的更改历史。如此一来,每个人都知道哪个版本是最新版本,以及基础设施应该是什么样的。
像 Docker、Vagrant、Terraform,甚至 Kubernetes 这样的技术,也能让你将基础设施描述为代码,而且这些代码应该提交到版本控制中。
这一点之所以如此重要,是因为服务器配置漂移是导致故障的一个主要原因。随着时间的推移,服务器会因各种原因进行更新,而且进行更新的人也并不总是同一批。这就导致它们偏离了最初的配置。有时,这些更改的累积会以不可预测的方式引发故障。更糟糕的是,有些服务器本应是相同的,但其中一台却因某个地方的配置错误而不断出现故障。
“服务器是牲畜,不是宠物” 这句话说的是对待服务器的方式。假设你有一千头牛,你不会花时间给每头牛都取个名字。当有一头牛生病时,你会让它不再痛苦,并用另一头牛来替换它。而宠物呢?当它们生病时,你会悉心照料并护理它们恢复健康。
这里传达的理念是,不要精心打造服务器,当服务器出问题时也不要花太多时间去调试。你应该能够用一台正常工作的相同服务器来替换它。这意味着你必须把基础设施视为临时性或短暂存在的东西。它只在你需要的时候存在,当不再使用时就将其移除。
例如,过去搭建测试环境需要数周时间。所以,你会让它们持续运行数月,因为搭建需要花费数周时间。但是,当你采用基础设施即代码的方式时,部署一组新的测试服务器只需几分钟。你可以启动一个测试环境,使用一段时间后再将其销毁。如果改天你还需要,就再创建一个新的。你不用让它一直运行着,只在需要的时候启动,不再需要的时候关闭,它是短暂存在的。
这也让我们能够通过并行基础设施进行发布。例如,我可以搭建一台与生产环境中一模一样的服务器。我可以部署应用程序的新版本并进行监测,看它是否能正常工作。如果看起来运行正常,我就关闭生产环境中的服务器,将新服务器设为生产服务器。通过并行基础设施,我可以让服务持续运行。
基础设施即代码让我每次都能创建相同的基础设施。临时性基础设施可以使用后丢弃,因为服务器是通过自动化、利用基础设施即代码技术按需构建的。
像 Docker 这样的工具,有助于我们实现不可变交付。Docker 是一种打包技术,它能让我们在一个名为容器的隔离环境中,以一致的方式启动和关闭应用程序。Docker 支持基础设施即代码,它允许你通过一个名为 Dockerfile 的代码指定如何构建镜像。这些 Dockerfile 每次都以相同的方式构建相同的镜像。然后,Docker 每次部署时都会以相同的方式从该镜像创建容器。这意味着在生产环境中运行的容器,也能在开发人员的笔记本电脑上运行,实现了开发环境与生产环境的完美一致。这是因为运行应用程序所需的所有依赖项都被打包在容器内部,这就限制了任何差异或可能的副作用。除了像 Docker 这样的容器运行时环境,运行容器不再需要其他东西。
像 Docker 这样的工具还能让你进行滚动更新并立即回滚。你不用先安装应用程序看它是否能正常工作,不行的话再卸载。你只需启动一个包含新版本应用程序的 Docker 容器,如果它开始出现问题,你就停止并关闭它,然后启动之前已安装在其自身容器中的旧版本。这真的只需要几秒钟。
对于开始出现问题的容器,你也可以用同样的方式处理。删除该容器,再创建一个新容器来替代它。新容器在启动第一天会和旧容器完全一样。如果存在某种损坏,很明显这种损坏会使整个系统恢复到初始状态。这是一种截然不同的工作方式。你永远不要像对待正在运行的服务器那样对正在运行的容器进行更改。记住:“服务器是牲畜,不是宠物”。你不要为修复漏洞而给容器打补丁或以任何方式修改它们。要进行任何更改,你需要对创建容器的镜像进行更改,然后重新部署新容器来替换旧容器。原因很简单:如果你给一个容器打了补丁但它崩溃了,新启动的容器将不会有这些补丁。这就是为什么必须修改镜像,镜像是创建容器的模板,必须保持镜像为最新状态,而不是正在运行的容器。
在本文中,你了解到基础设施即代码是以可执行的文本格式描述基础设施;临时性基础设施可以使用后丢弃,服务器是通过自动化按需构建的;不可变交付不是对正在运行的容器进行打补丁,而是对容器镜像进行更改,然后重新部署新容器。

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 在 Linux 系统中,查找域名或主机名对应的 IP 地址是网络管理中的一项基础且关键任务,对于排查网络故障、调试网络问题以及监控网络服务是否正常运行等场景都非常重要。本文将介绍五种在 Linux 终端查询域名 IP 地址的方法。 首先,dig 命令(全称 Domain Information Groper)是一个功能强大的 DNS 查询工具,能够向 DNS 服务器发送查询请求并获取详细的响应信息。如果需要查询单个域名的 IP 地址,可以使用命令 dig 2daygeek.com +short 。此外,还可以通过编写 bash 脚本,将包含域名的文本文件中的域名逐个读取,然后利用 dig 命令进行查询,从而实现批量查询域名 IP 地址的功能。 其次,host 命令是一个简单易用的 DNS 查询工具,主要用于将域名解析为 IP 地址。要获取某个域名的 IP 地址,直接使用 host 2daygeek.com 即可。如果只想显示 IP 地址部分,可以通过管道结合 grep 和 sed 命令来实现,例如:host 2daygeek.com | grep "has address" | sed s/has address/-/g 。 再者,nslookup 命令也是一种常用的 DNS 查询工具,它支持交互式查询 DNS 信息。通过 nslookup 2daygeek.com 可以查询域名的 IP 地址。若要以非交互式的方式只显示 IP 地址,可以使用命令 nslookup 2daygeek.com | awk /^Address:/ {print $2} 。 另外,fping 命令与传统的 ping 命令不同,它不会直接进行 DNS 查询,而是通过发送 ICMP Echo Request(pi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值