DevOps - 基础设施
DevOps 基础设施是现代软件开发和运营的基础。它可以帮助团队协同工作、轻松扩展和自动执行任务。主要思想是混合使用工具、方法和实践,以便在整个软件流程中更好地处理基础设施。
当开发和运营团队协同工作时,手动工作就会减少。它还使流程更快、更可靠。这样,我们可以提供质量更好的应用程序。
DevOps 中的基础设施是什么?
在 DevOps 中,基础设施是指我们创建、部署和运行应用程序所需的资源。这些资源可以是物理的、虚拟的或基于云的。它们包括 −
- 服务器 − 运行应用程序的机器(物理或虚拟)或容器。
- 网络 −用于数据传输、平衡负载和连接服务的设置。
- 存储 − 文件存储、数据库和数据处理工具等系统。
- 工具和服务 − 用于自动执行任务、监控系统、管理 CI/CD 管道和设置配置的平台。
DevOps 将基础设施视为代码。这意味着我们可以像使用基础设施即代码 (IaC) 管理应用程序代码一样管理它。 IaC 确保一切都一致且易于重复或扩展。
DevOps 基础设施的关键原则
下表重点介绍了 DevOps 基础设施的关键原则 −
| 原则 | 描述 |
|---|---|
| 自动化 | 我们自动执行设置、配置和扩展资源等任务。这节省了时间并减少了错误。Terraform 或 Ansible 等工具可帮助我们每次都创建相同的设置。 |
| 可扩展性和弹性 | 我们设计可自动处理工作负载变化的系统。使用云平台,我们可以根据需要轻松添加或删除资源。 |
| 不变性 | 我们不会更改现有的基础设施,而是在更新期间替换容器等部件。这使事情保持一致和可预测。 |
| 版本控制 | 我们使用 Git 等工具跟踪基础设施变化。这使得管理和在需要时回滚更改变得更加容易。 |
| 监控和可观察性 | Prometheus 和 Grafana 等工具可帮助我们随时关注系统的健康和性能。 |
| 设计安全 | 安全性从一开始就融入到我们的工作流程中。我们使用秘密管理和自动合规性检查等技术来保证系统的安全。 |
基础设施即代码 (IaC):端到端示例
基础设施即代码 (IaC) 帮助我们使用代码管理和设置基础设施。它用自动化取代了手动工作。这使事情变得一致、易于扩展和可重复。Terraform、AWS CloudFormation 或 Ansible 等工具通常用于 IaC。
IaC 与 DevOps 管道配合良好。它支持持续交付,并让我们可以像使用代码一样跟踪基础设施中的变化。
分步示例:使用 Terraform 配置 Web 服务器
先决条件
首先,在您的机器上安装 Terraform。接下来,设置一个 AWS 账户并使用凭证配置 aws-cli。
目录结构
像这样排列项目文件 −
/iac-example ├── main.tf ├── variables.tf ├── outputs.tf
定义变量 (variables.tf)
此文件可帮助我们灵活地进行设置 −
variable "region" {
description = "AWS region"
default = "us-east-1"
}
variable "instance_type" {
description = "EC2 instance type"
default = "t2.micro"
}
配置资源 (main.tf)
我们在此定义基础设施 −
provider "aws" {
region = var.region
}
resource "aws_instance" "web" {
ami = "ami-0c02fb55956c7d316" # Amazon Linux 2 AMI
instance_type = var.instance_type
tags = {
Name = "TerraformExampleWebServer"
}
provisioner "remote-exec" {
inline = [
"sudo yum update -y",
"sudo yum install -y httpd",
"sudo systemctl start httpd",
"sudo systemctl enable httpd"
]
}
}
resource "aws_security_group" "web_sg" {
name_prefix = "web-sg-"
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
输出信息 (outputs.tf)
设置后显示重要详细信息−
output "instance_public_ip" {
value = aws_instance.web.public_ip
}
执行 Terraform 工作流
运行这些命令来创建基础设施 −
terraform init # 初始化 Terraform 环境 terraform plan # 查看执行计划 terraform apply # 应用更改
验证设置
运行 terraform apply 后,Terraform 将为您提供 EC2 实例的公共 IP。在浏览器中打开 IP 以检查 Web 服务器是否正常运行。
此示例展示了如何使用 Terraform 在 AWS 上设置一个简单的 Web 服务器。IaC 简化了现代基础设施管理。它帮助我们更快更好地开展 DevOps 实践。
云基础设施
云基础设施是通过互联网提供存储、网络和计算能力等计算资源所需的硬件和软件的组合。
AWS、Microsoft Azure 和 Google Cloud Platform (GCP) 等云服务提供商管理此基础设施。借助云基础设施,我们可以随时访问资源,而无需物理硬件。它具有可扩展性、灵活性,并且可以按需工作。
公有云、私有云和混合云
公有云 − 公有云由 AWS、Azure 或 GCP 等第三方公司管理。他们通过互联网提供资源。在公有云中,许多组织使用相同的基础设施。这使得它便宜、可扩展且易于使用,采用即用即付模式。示例包括 Amazon EC2 和 Microsoft Azure 虚拟机。
私有云 −私有云专用于一个组织。它可以在本地或由第三方提供商托管。与公共云相比,这种类型的云提供了更好的安全性、更多的控制和定制。但是,它可能更昂贵。私有云非常适合需要高数据隐私的行业。
混合云 − 混合云结合了公共云和私有云。这允许数据和应用程序在两者之间移动。混合模型很灵活。它允许企业使用公共云的可扩展性,同时将敏感数据保留在私有云中。这有助于管理工作负载、安全性和合规性
使用 AWS / GCP / Azure 进行基础设施管理
以下每个云平台都有自己的优势。最佳选择取决于我们的需求、我们当前的设置和业务需求。
AWS(亚马逊网络服务)
AWS 提供许多服务,如计算(EC2)、存储(S3)和数据库(RDS、DynamoDB)。它还提供 CloudFormation 和 AWS OpsWorks 等工具来实现自动化。AWS 提供托管服务,如用于 Web 应用的 AWS Elastic Beanstalk 和用于无服务器计算的 AWS Lambda。
GCP(谷歌云平台)
GCP 适用于机器学习、分析和人工智能。主要工具包括用于虚拟机的 Google Compute Engine、用于容器的 Google Kubernetes Engine (GKE) 和 Google Cloud Storage。GCP 对于使用 BigQuery 等工具进行数据分析特别有用。
Microsoft Azure
Azure 是微软的云平台。它提供计算(Azure 虚拟机)、存储(Azure Blob 存储)和网络(Azure 虚拟网络)。 Azure 与 Microsoft 软件配合良好。它还支持使用 Azure Arc 的混合云设置。许多使用 Microsoft 工具的企业更喜欢 Azure。
云基础设施的高级概念
下表重点介绍了云基础设施的一些高级概念 −
| 概念 | 要点 | 解释 |
|---|---|---|
| CI/CD 管道基础设施 | 使用 Jenkins、GitLab CI 或 ArgoCD 构建 CI/CD 管道 | Jenkins 帮助使用插件实现构建和部署自动化。GitLab CI 连接版本控制和 CI/CD。 ArgoCD 用于使用 GitOps 进行 Kubernetes 原生持续部署。 |
| 在管道中自动部署基础设施 | 借助 Terraform 和 CloudFormation 等 IaC 工具,我们可以自动部署基础设施,确保其在 CI/CD 管道中一致且可重复。 | |
| DevOps 基础设施中的网络 | 管理虚拟网络和子网 | 虚拟网络 (VNet) 创建隔离的云环境。子网将这些网络拆分成更小的部分以管理流量并提高安全性。 |
| 负载均衡器和流量路由 | 负载均衡器在服务器之间共享流量,确保可用性。路由通过以智能方式引导流量来帮助提高应用程序性能。 | |
| 实施服务网格(Istio、Linkerd) | Istio 和 Linkerd 等服务网格管理微服务之间的通信,无需更改应用程序代码即可提供流量管理、安全性和可观察性。 | |
| 基础设施中的安全性 | 将基础设施作为代码进行保护 | 我们使用 Checkov 或 Sentinel 等工具验证 IaC 脚本。这有助于在部署前执行安全规则并避免错误。 |
| 使用 Vault 进行机密管理 | Vault 安全地存储敏感数据,如 API 密钥和密码。它加密并动态管理机密,适合 CI/CD 工作流以实现安全的凭证管理。 | |
| DevSecOps:将安全性集成到管道中 | 我们在 CI/CD 管道早期使用 Snyk 和 Aqua Security 等工具添加安全实践。这些工具会在构建或部署期间扫描代码以查找漏洞。 | |
| 扩展基础设施 | 水平与垂直扩展 | 水平扩展增加了更多实例以共享负载。垂直扩展为现有机器增加了更多资源(CPU/RAM)。水平扩展提供了更好的灵活性和冗余性。 |
| 使用 Kubernetes 和云工具自动扩展基础设施 | Kubernetes 和云服务(AWS、GCP、Azure)根据需求自动扩展资源,有助于提高性能和资源利用率。 | |
| 扩展时的成本优化 | 为了优化成本,我们可以选择合适大小的实例、使用 Spot 实例并启用自动扩展。这有助于平衡成本和性能。 | |
| 灾难恢复和备份 | DevOps 基础设施的备份解决方案 | AWS Backup 和 Azure Backup 等备份工具可保存数据和配置。这些备份确保我们可以在故障期间恢复数据。 |
| 在故障转移场景中自动恢复 | Route 53 和 Cloud DNS 等工具有助于在故障期间自动恢复。它们最大限度地减少停机时间,确保系统保持平稳运行。 | |
| 基础设施测试和验证 | 单元测试 IaC 脚本 | 单元测试有助于在部署之前验证 IaC 脚本的正确性。 Terraform 等工具会检查和规划脚本,以确保它们按预期工作。 |
| 使用 Test Kitchen 和 Terratest 等工具 | Test Kitchen 和 Terratest 通过部署基础设施、运行测试和检查其是否正常工作来自动测试 IaC。 | |
| 混沌工程测试弹性 | 混沌工程使用 Chaos Monkey 等工具引入受控故障,以检查基础设施的弹性并确保其从中断中恢复。 |
结论
在本章中,我们研究了现代基础设施管理的关键部分。我们介绍了设置 CI/CD 管道、网络、安全、扩展、灾难恢复和基础设施测试。 Jenkins、GitLab CI 和 ArgoCD 等工具可帮助我们轻松实现管道自动化。我们还讨论了负载平衡、服务网格和云扩展如何提高性能并保持可用性。
我们还讨论了使用 DevSecOps 和 Vault 等实践来保护基础设施。为了确保一切保持弹性,我们讨论了使用混沌工程和自动恢复。通过理解和使用这些想法,我们可以构建强大、可扩展且安全的基础设施,以支持持续交付、安全性和平稳运营。

