ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

90DaysOfDevOps Day 57:Terraform 入门——用声明式 IaC 构建、变更与版本化基础设施

90DaysOfDevOps Day 57:Terraform 入门——用声明式 IaC 构建、变更与版本化基础设施 文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本文是 90DaysOfDevOps 学习挑战第 57 天的内容系统讲解 HashiCorp Terraform 的核心定位、Write/Plan/Apply 三段式工作流、与 Vagrant 等同类工具的差异以及跨平台安装方法。结合本仓库2022/Days/IaC目录下的真实配置示例与测试代码你可以快速掌握用 Terraform 统一编排本地虚拟化、容器与云资源的基本套路为后续深入 HCL 语法和多云实践打下基础。什么是 Terraform从点鼠标到写代码的基础设施即代码HashiCorp 对 Terraform 的定义是Terraform is a tool for building, changing, and versioning infrastructure safely and efficientlyTerraform 是一种安全、高效地构建、变更和版本化基础设施的工具。HashiCorp 还给出了更完整的描述Terraform 是一个开源的基础设施即代码Infrastructure as CodeIaC软件工具提供一致的 CLI 工作流来管理数百种云服务并将云 API 编码为声明式配置文件。为什么需要它几乎所有云厂商和本地平台都会提供管理控制台让你通过 UI 创建资源多数平台也提供 CLI 或 API 来做同样的事情。区别在于通过 API 可以快速、可重复地批量供应资源而 IaC 的价值正是钩住这些 API把资源部署到期望状态desired state——你描述目标状态工具负责推导并执行达成该状态所需的步骤。在 IaC 工具谱系中既有云厂商绑定的方案也有跨云通用的方案原文给出如下对照云厂商专属云无关AWS CloudFormationTerraformAzure Resource ManagerPulumiGoogle Cloud Deployment Manager这正解释了本挑战选择 Terraform 的原因希望在演示乃至日常使用中对云平台保持中立agnostic同一套配置语言可以迁移到不同的目标平台。Terraform 概览一个以供应为使命的 CLITerraform 是一个专注供应provisioning的工具本质是一个 CLI具备供应复杂基础设施环境的能力。你可以用它在本地或云端定义复杂的基础设施需求而且不只是初始构建——还能在资源的整个生命周期内持续维护与更新。整个工作流可以概括为三个阶段Write编写、Plan规划、Apply应用官方的工作流程图如下Write用 HCL 声明式地描述环境Write 阶段要求我们用 Terraform 创建声明式配置文件。文件使用HashiCorp Configuration LanguageHCL编写通过块block、参数argument和表达式expression简洁地描述资源。本仓库 Hello-world/main.tf 就是一个最简单 Terraform 模块的示例terraform { # 该模块仅在 Terraform 0.13.x 下测试过为了便于升级 # 将最低版本设为 0.12.26因为该版本开始支持带 source URL 的 # required_providers向前兼容 0.13.x 代码。 required_version 0.12.26 } # 最简单的 Terraform 模块只输出 Hello, World! output hello_world { value Hello, 90DaysOfDevOps from Terraform }这里可以看到 HCL 的几个基础元素terraform块声明最低版本约束output块定义对外输出的值。真正的资源配置由resource块承担例如 Docker/docker.tf 中同时管理镜像与容器两个资源terraform { required_providers { docker { source kreuzwerker/docker version 2.16.0 } } } provider docker {} resource docker_image nginx { name nginx:latest keep_locally false } resource docker_container nginx { image docker_image.nginx.latest name tutorial ports { internal 80 external 8000 } }注意其中的资源依赖与引用docker_container.nginx的image参数引用docker_image.nginx.latestTerraform 会据此自动推导执行顺序。声明式配置的妙处就在这里——你只描述要什么不关心怎么做。Plan部署前先预演不产生任何变更Plan 阶段利用terraform plan等 CLI 功能在真正部署或修改任何东西之前先检查配置文件将部署出什么、会带来哪些变更。这一点特别重要Terraform 是持续管理基础设施的工具如果你要调整基础设施的某个方面应当通过修改代码再 plan/apply 来完成让所有变更都被代码记录在案而不是在控制台里手工偷偷改动。terraform plan会对比当前配置与已有状态state产出一份执行计划execution plan列出将要创建、更新、替换或删除的资源。这一步安全、可审查是 Terraform 工作流中版本化基础设施信任感的来源。Apply把配置应用到目标平台确认 plan 无误后就可以执行terraform apply把配置应用到 Terraform 支持的众多 provider供应商之上。provider 是 Terraform 与外部平台对话的桥梁数量庞大社区统一在 Terraform Registry 中发布和维护。本仓库各示例使用了完全不同的 provider正好演示同一套工作流、不同目标平台Docker providerkreuzwerker/docker版本2.16.0见 Docker/docker.tfVirtualBox providerterra-farm/virtualbox版本0.2.2-alpha.1见 Virtualbox/virtualbox.tfKubernetes providerhashicorp/kubernetes版本 2.0.0见 Kubernetes/kubernetes.tf以 Kubernetes/kubernetes.tf 为例provider 块还可以配置连接参数terraform { required_providers { kubernetes { source hashicorp/kubernetes version 2.0.0 } } } provider kubernetes { config_path ~/.kube/config }随后在同一个文件里用三个resource块依次创建 namespace、deployment 和 NodePort 类型的 servicekubernetes.tf并通过kubernetes_namespace.test.metadata.0.name、kubernetes_deployment.test.spec.0.template.0.metadata.0.labels.app这样的引用把三者串成一张依赖网——这正是 HCL 声明式表达力的体现。另外Registry 中还有大量模块modules。模块类似容器镜像别人已经创建并公开共享你无需重复造轮子直接复用以同样的最佳实践部署某种特定资源的现成方案保证不同环境的一致性。Terraform vs Vagrant别把开发环境和基础设施混为一谈在本挑战中我们已经用过 Vagrant它同样是 HashiCorp 的开源工具但两者定位完全不同Vagrant专注于管理开发环境development environmentsTerraform用于构建基础设施infrastructure。一个是开发者桌面上的可移植开发沙箱一个是面向生产与云资源的供应引擎。HashiCorp 官方对二者有详尽的对比说明简单记住开发环境用 Vagrant基础设施用 Terraform。Terraform 安装跨平台、一条命令搞定Terraform 的安装并不复杂它是一个跨平台的单二进制 CLI。在 Linux 机器上官方下载页通常会提供多种获取方式包括 macOS、Windows、Linux 各平台的二进制包以及面向 Ubuntu/Debian、CentOS/RHEL 等发行版的包管理器安装命令还会区分 386、Amd64、Arm 等不同架构官方下载页截图如下本仓库作者推荐使用arkade来安装arkade 是一个方便把所需工具、应用和 CLI 装进系统的小工具执行arkade get terraform即可安装若已有旧版本也会顺带升级arkade get terraform安装完成后可通过terraform version验证版本例如截图环境中装的是 v1.1.6仓库中的实战佐证从 Hello World 到完整编排与测试2022/Days/IaC目录按场景组织了多个可运行示例是本文档最好的配套实验场Hello-world/main.tf最小模块仅输出字符串适合验证工具链安装与terraform init/plan/apply/output全流程。Docker/docker.tf 与 Docker-Wordpress/docker-wordpress.tf前者部署 nginx 容器后者则是一个完整的 WordPress MySQL 编排用到了变量variable wordpress_port默认8080、docker_volume、docker_network以及mysql:5.7与wordpress:latest两个容器的环境变量注入与端口映射——非常适合理解 HCL 的变量、资源引用与网络编排。Virtualbox/virtualbox.tf用count 2批量创建两台node-01/node-02虚机演示format()函数、count.index与output中element()的用法是本地免费练手的好例子。Kubernetes/kubernetes.tf在 kubeconfig 指向的集群中创建 namespace、deploymentreplicas2与 NodePort servicenode_port30201。Terratest/examples一个面向 AWS 的完整示例目录包含 provider.tf、instance.tf、securitygroup.tf、vars.tf定义了AWS_ACCESS_KEY、AWS_SECRET_KEY、AWS_REGION默认ap-south-1、AMI 映射表AMIS与 terraform.tfvars。值得一提的还有 Terratest/test/terraform_test.go它用 Go 测试框架 Terratest 把整个 Terraform 生命周期串成自动化验证——terraform.WithDefaultRetryableErrors构造选项、terraform.InitAndApply执行初始化与应用、defer terraform.Destroy在测试结束时清理资源、terraform.Output读取实例公网 IP最后用 HTTP 请求断言实例返回200 OK且响应体为Hello, World!。这个测试恰好印证了本文档描述的工作流Write → Plan隐式于 init/apply 中校验→ Apply → 验证 → Destroy 清理。后续学习路径与资源在 90DaysOfDevOps 挑战中本节之后紧接着 Day 58HashiCorp Configuration LanguageHCL那里会深入讲解main.tf的组成、provider 声明如hashicorp/aws与~ 3.0版本约束、代码与 state 共同构成Terraform core的机制并用本地可运行的 VirtualBox/Docker/Kubernetes 示例继续展开。Day 57 原文还列举了一批官方与社区学习资源包括 HashiCorp 官方 Learn 平台、Terraform 入门到进阶的视频课程、HashiCorp Terraform Associate 认证备考课程、KodeKloud 的 Terraform for DevOps Beginners 实战实验室以及 Awesome Terraform 资源汇总等对初学者而言建议按官方文档 本仓库 IaC 示例逐个动手运行 认证课程查漏补缺的顺序推进。此外2022/Days/IaC 目录中的每个示例都配套了真实可运行的.tf文件比任何教程都更适合作为你第一个terraform init terraform apply的起点。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 之 HashiCorp Configuration Language (HCL)用 Terraform 声明式代码编排云上基础设施90DaysOfDevOps 之 HashiCorp Configuration Language HCL 用 Terraform 声明式代码编排云上基础设施文档/教程Encore声明式基础设施告别Terraform的代码驱动架构Encore声明式基础设施告别Terraform的代码驱动架构 基础设施管理的范式转换 当你还在编写数百行Terraform代码来配置一个简单的Postgre后端开发工具云原生微服务90DaysOfDevOps 第 56 天基础设施即代码IaC全景——从 Pets vs Cattle 到 Terraform 实战90DaysOfDevOps 第 56 天基础设施即代码IaC全景——从 Pets vs Cattle 到 Terraform 实战 本文是 90Days文档/教程上一篇如何快速实现HTML到Word文档的专业转换html-to-docx完整指南下一篇res-downloader 上手教程3 步搭好跨平台资源嗅探下载创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表