前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >是什么促使用户使用基础设施即代码?

是什么促使用户使用基础设施即代码?

作者头像
云云众生s
发布于 2024-10-01 02:22:35
发布于 2024-10-01 02:22:35
17600
代码可运行
举报
文章被收录于专栏:云云众生s云云众生s
运行总次数:0
代码可运行

用户采用基础设施即代码 (IaC) 的原因,既有 GUI 和 CLI 的局限性,也有 IaC 的优势。

译自 What drives users to Infrastructure as Code?,作者 Brian Grant。

在我的 Infrastructure as Code 和声明式配置系列的前几篇文章中,我写到了 Infrastructure as Code 的优点一些挑战。为什么云和 Kubernetes 用户一开始就采用 Infrastructure as Code (IaC)?相对于其他常见的用户界面,例如图形用户界面 (GUI) 和命令行界面 (CLI),优缺点是什么?

GUI

图形用户界面是无处不在的服务接口。它们相当流行,尤其在非开发人员用户中,甚至在许多应用程序开发人员中也是如此。

这是一个示例表单:

Image of a GUI form
Image of a GUI form

用于运行容器的示例 GUI

GUI 可以提供更简单的体验,特别是对于不熟悉所有产品功能和术语的新用户。许多用户体验设计专注于 GUI。

用户喜欢的 GUI 特征包括:

  • 逐步指导
  • 渐进式披露
  • 早期验证
  • 自动完成和默认值
  • 上下文帮助 / 文档
  • 错误解决协助
  • 导航工具
  • 复杂信息的组织
  • 动态、交互式更新
  • 数据的图形表示

那么,为什么用户从使用 GUI 转向 IaC 呢?一个原因是缺少重要功能,例如:

  • 可再现性/可重复性——创建配置的类似变体的功能
  • 从多个服务调配资源
  • 审查和批准
  • 组织政策强制
  • 执行版本控制和撤销
  • 注释/备注
  • 记录谁在何时、为何更改了内容
  • 共享/协作

这些功能可以通过 IaC 实现。

请注意,其中许多功能(例如撤消、评论、共享,以及谁更改了什么内容的详细信息)都可以通过其他产品的 GUI 使用。云 GUI 的 UX 远不及它本应达到的水平。

很常见的情况是,即使是相对常见的用例也没有在云 GUI 中得到明确支持。相反,冗长的文档教程和解决方案可能需要用户访问多个单独的 GUI 页面才能完成其任务。

以下是一个简单的示例,需要导航到五个不同的页面才能完成任务。我只展示 Google Cloud 的示例,因为我对此最熟悉。其他供应商(例如 AWS、Azure)看起来并不简单。

教程摘录

CLI

好的,命令行界面如何?对于精通供应商的服务、资源、功能、术语等且经常执行类似任务并且可以使用脚本和/或其 shell 历史记录执行类似命令的经验丰富的用户而言,CLI 可能很有效。

以下是使用 gcloud CLI 的上述示例。它看起来更长,主要是因为我将上面的 GUI 示例简写为仅显示页面转换。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gcloud compute networks subnets update SUBNET \
    --network=NETWORK \
    --stack-type=IPV4_ONLY \
    --range=10.1.2.0/24 \
    --region=REGION
gcloud compute instance-templates create TEMPLATE_NAME \
  --region=REGION \
  --network=NETWORK \
  --subnet=SUBNET \
  --stack-type=IPV4_ONLY \
  --tags=allow-health-check \
  --image-family=debian-10 \
  --image-project=debian-cloud \
  --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
gcloud compute instance-groups managed create lb-backend-example \
   --template=TEMPLATE_NAME --size=2 --zone=ZONE_A
gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone ZONE_A
gcloud compute firewall-rules create fw-allow-health-check \
    --network=NETWORK \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80
gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global
gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global
 gcloud compute health-checks create http http-basic-check \
     --port 80
gcloud compute backend-services create web-backend-service \
    --load-balancing-scheme=EXTERNAL \
    --protocol=HTTP \
    --port-name=http \
    --health-checks=http-basic-check \
    --global
gcloud beta compute backend-services add-backend web-backend-service \
  --instance-group=lb-backend-example \
  --instance-group-zone=ZONE_A \
  --global
gcloud beta compute url-maps create web-map-https \
  --default-service web-backend-service
gcloud compute target-https-proxies create https-lb-proxy \
  --url-map=web-map-https \
  --ssl-certificates=www-ssl-cert
gcloud compute forwarding-rules create https-content-rule \
  --load-balancing-scheme=EXTERNAL \
  --network-tier=PREMIUM \
  --address=lb-ipv4-1 \
  --global \
  --target-https-proxy=https-lb-proxy \
  --ports=443
gcloud compute ssl-policies create my-ssl-policy \
  --profile MODERN \
  --min-tls-version 1.0
gcloud compute target-https-proxies update https-lb-proxy \
  --ssl-policy my-ssl-policy
gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \
    --global

显然,这个“简单”的例子相当复杂。交互式资源创建可能不是 CLI 的最佳用例。基础设施资源往往包含大量属性,而像这样的场景需要相当多的资源。此外,这可能不是你每天都会做的事情,因此命令的精确顺序可能很难记住,需要记录在脚本或笔记本中。

用户喜欢的 CLI 属性包括:

  • 可重复
  • 减少上下文切换和导航
  • 增量和迭代
  • 可以处理和使用输出
  • 使用脚本和笔记本自动化任务
  • 可共享

然而,我个人认为,复杂命令长序列的脆弱性促使用户转向 IaC:

  • 不同的初始状态通常需要不同的命令。特别是,更新通常需要与创建不同的命令。此外,CLI 命令不一定是幂等的。
  • 错误处理比在通用编程语言中更难
  • 不一定能够在不执行命令的情况下验证命令(例如,通过 dry run)

IaC 更健壮,因为它会根据初始状态自动确定要采取的操作,并且在发生短暂故障(例如,由于 API 配额耗尽或竞争条件)时,通常可以安全地再次应用。

IaC

因此,用户采用 IaC 有充分的理由。它提供了一些特定的功能,并解决了常见的问题。

然而,虽然 IDE 中有一些语法自动完成,但从历史上看,与 GUI 和 CLI 相比,从头开始编写 IaC 模板/代码的帮助较少。很多重点都放在了 重用现有模板 上。

当然,也有一些例外。Azure 门户具有 导出 ARM 模板 的功能,这似乎非常有用。

这种情况似乎正在随着一些 较新的 IaC 产品 的出现而改善。例如,Firefly 可以 为现有资源创建 IaC。

模板/模块的组合似乎是多个类别产品正在解决的领域,例如基于图表的界面,如 Brainboard 和 Massdriver,以及来自代码的基础设施产品,如 Nitric。

至于编写模块本身的帮助,有 Structura,它有点像 Scratch,至少可以帮助确保语法正确。当然,还有新的尖端 AI 产品,它们目前无法始终如一地生成正确的 IaC。

IaC 有一个显著的学习曲线,并伴随着 复杂性和工作量。在我看来,为了采用 IaC,我们不得不放弃很多东西。

我们也遇到了这种范式的局限性,这种范式是围绕 人为驱动的、手工的流程 设计的。但是 经过 30 年 之后,我们应该进行范式转变。

你怎么看?如果你能提供等效的功能,你会更喜欢 GUI 或 CLI 而不是 IaC 吗?你对任何新的以 GUI 为中心的基于 IaC 的产品感兴趣吗?你希望从新的基础设施管理范式中得到什么?你使用过任何有趣的 IaC 替代方案吗?

欢迎在这里回复,或者在 LinkedIn 或 X/Twitter 上给我发消息,我计划将此内容交叉发布。

如果您觉得这篇文章有趣,您可能还会对我在 基础设施即代码和声明式配置系列 中的其他文章感兴趣。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-302,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
自动化基础设施是否能够消除工单?
曾经有一段时间,开发人员编写的代码与其运行的基础设施非常接近。基础设施简单到工程师可以处理整个技术栈。这意味着他们可以同时管理用户体验、业务逻辑和服务器。但是企业软件发生了巨大变化:多个环境、云的兴起以及在可扩展性、监控和测试方面的巨大需求增加,使得产品工程师更难以按需创建、访问和管理基础设施。
云云众生s
2024/03/28
1090
自动化基础设施是否能够消除工单?
使用 Packer、Ansible 和 Terraform 构建不可变的基础设施
在容器编排领域,Kubernetes 已成为事实上的标准,而容器镜像 (Docker Image) 作为容器技术栈中最关键的创新之一,极大的推动了企业内部 Devops 运动的进程。
青年夏日
2021/04/11
2.3K0
Terraform:多云、混合云环境下实现基础设施即代码
将基础设施代码化,使用代码对硬件进行管理,在运维领域借用软件领域的最佳实践,将基础设施的运维纳入软件工程的范畴,最终整体改善软件开发和软件交付的过程。
yeedomliu
2024/01/24
1.3K0
Terraform:多云、混合云环境下实现基础设施即代码
使用Terraform进行基础设施管理:让基础设施自动化更简单
大家好,我是Echo_Wish。在当今云计算时代,基础设施即代码(Infrastructure as Code,IaC)已成为管理和部署云资源的重要方式。而Terraform作为一款开源的IaC工具,凭借其强大的功能和简单易用的语法,受到了越来越多开发者和运维人员的青睐。今天,我将与大家分享如何使用Terraform进行基础设施管理,并通过代码示例展示其强大之处。
Echo_Wish
2025/03/04
2100
使用Terraform进行基础设施管理:让基础设施自动化更简单
从基础设施即代码到环境即代码的进化之路
运用GitOps来启动环境,可为开发团队带来一致性、版本控制、速度等多方面的好处。
云云众生s
2024/03/28
1400
Crossplane 很棒,但关键基础设施呢?
翻译自 Crossplane is great, but what about critical infrastructure? 。
云云众生s
2024/03/27
3470
Crossplane 很棒,但关键基础设施呢?
理解Neutron (7): Neutron LBaaS v1
特别说明:本文于2015年基于OpenStack M版本发表于本人博客,现转发到公众号。因为时间关系,本文部分内容可能已过时甚至不正确,请注意。
SammyLiu
2019/06/28
1.3K0
理解Neutron (7): Neutron LBaaS v1
如何高效的进行腾讯云上的资源编排,一起来聊一聊Terraform
“腾讯云IaC最佳实践”系列文章希望通过介绍Terraform、Chef和Ansible等生态产品工具及相关案例,使用户能够更好地在腾讯云上实践IaC,为腾讯云用户提供增值服务。本文是“腾讯云IaC最佳实践”系列文章的第1篇。
生态产品团队
2019/07/22
18.6K4
用于基础设施即代码的生成式AI工具
基础设施即代码(IaC)帮助DevOps、IT运维和其他工程师在不断扩大、复杂化和多样化的动态IT环境中管理数据、应用程序和基础设施。通过GitOps驱动的工作流,工程师可以在不同环境中引入急需的标准化、安全性和操作一致性。
云云众生s
2024/03/28
1910
基础设施即代码或云平台—由您决定!
翻译自 Infrastructure as Code or Cloud Platforms — You Decide! 。
云云众生s
2024/03/27
1140
Container in Windows
Linux容器是指一个或者一组从系统中隔离出来的进程,运行此进程的所有文件均由一个image提供。由此定义我们知道容器包含两个点一是隔离,二是运行文件的封装。其中隔离包含cpu,memory隔离,网络隔离,文件系统隔离,设备可见性隔离等。下面来分段介绍windows平台如何实现以上几种隔离。文件封装沿用docker image本文不再详细阐述。内容较多使用Windows容器运行UE4渲染任务会单独拆分一个文章介绍。
harrisonzhu
2022/09/15
1.6K0
如何控制云基础设施漂移
基础设施漂移不仅仅是技术上的小麻烦;它是一个普遍存在的问题,如果不加以控制,会危及整个组织。
云云众生s
2024/12/04
1200
如何控制云基础设施漂移
持续测试基础设施
基础设施作为应用程序的支柱,为之提供关键的运行环境、网络连接和资源调度等支持。一旦基础设施出现故障,整个应用生态系统都可能面临严重的连锁反应,如性能降低、数据丢失乃至系统崩溃。因此,基础设施的稳定性和可靠性对于运行在其上的应用程序至关重要。
ThoughtWorks
2023/08/08
3220
持续测试基础设施
基础设施即代码(IaC):自动化基础设施管理的未来
随着云计算和大规模分布式系统的迅速发展,手动管理和配置基础设施的传统方式已逐渐跟不上快速迭代的步伐。于是,基础设施即代码(Infrastructure as Code,IaC)作为一种创新实践,成为现代运维管理的基础。IaC不仅提高了基础设施的配置速度,还提升了系统的一致性和可重复性。本文将深入讲解IaC的基本概念、核心优势和实现方法,并通过实例展示其在实际工作中的应用。
Echo_Wish
2024/10/27
6800
基础设施即代码(IaC):自动化基础设施管理的未来
探索基础设施即代码(IaC):Terraform 与 CloudFormation 的应用
在现代运维和开发的世界里,基础设施即代码(IaC)已经成为一个不可或缺的概念。IaC 让我们可以通过编写代码来管理和配置基础设施,而不是手动操作。本文将详细介绍常用的 IaC 工具——Terraform 和 CloudFormation,以及它们的应用场景和基本用法。
Echo_Wish
2024/10/28
5490
探索基础设施即代码(IaC):Terraform 与 CloudFormation 的应用
kolla-ansible部署openstack多节点
如果需要调整配置. 那么编辑 globals.yml 后, 然后运行 reconfigure. 使用 -t 参数可以只对变动的模块进行调整.
cuijianzhe
2022/06/14
1K0
kolla-ansible部署openstack多节点
基础设施即代码:IaC简介
IaC:自动化您的IT,消除错误并更快扩展。学习Terraform和Ansible。拥抱当今基础设施的未来!
云云众生s
2025/01/11
1860
基础设施即代码:你需要知道的一切
基础设施是软件开发过程的核心原则之一——它直接负责软件应用程序的稳定运行。这种基础设施的范围从服务器、负载平衡器、防火墙和数据库一直到复杂的容器集群。
陈哥聊测试
2022/05/13
8990
基础设施即代码:从命令式到声明式再回到命令式
向混合 IaC 模型转变是由开发者体验、效率以及对可扩展云原生解决方案的需求所驱动的。
云云众生s
2025/02/11
1290
弥合基础设施即代码和GitOps的鸿沟
如何将Terraform、Crossplane和Atlantis巧妙地组合使用,发挥每项技术的优势,同时保留实施严格日常管理的灵活性。
云云众生s
2024/03/28
1420
弥合基础设施即代码和GitOps的鸿沟
推荐阅读
相关推荐
自动化基础设施是否能够消除工单?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验