了解 Kubernetes 如何帮助应用程序依赖性和消费不再创建进展的主要瓶颈
每天分享最新软件开发,Devops,敏捷,测试以及项目管理最新,最热门的文章,每天花3分钟学习何乐而不为,希望大家点赞,加关注,你的支持是我最大的动力。
Kubernetes 在为开发人员提供生态系统、提高运输速度、将组件置于通用框架和 DSL 之下,以及扩展和扩展产品的灵活性方面表现出色。因此,难以置信的是,与客户对话、应用程序依赖性和消费仍然是进展的主要瓶颈,团队被阻止等待数据库、队列、对象存储等等。
问题是
- 大多数应用程序甚至还没有投入生产——软件交付周期的很大一部分是原型开发和实验。它被驱使着快速展示价值: 尝试,展示,看看是否失败
- 这种说法常常与平台工程相冲突,这是自然而然的。他们的产品化设置、可靠性、成本和安全性的所有权的目标是一个非常不同的世界观
- 在消除应用程序交付的障碍方面非常成功,使得开发团队和为了将平台体验为一种服务,大量组织中的应用程序依赖项仍然是一个票据系统; 单击、打开支持票据、等待响应,等等
虽然地形控制器并没有试图解决所有这些问题,但这是朝着正确方向迈出的一步。
- 重复使用 Terraform 模块和已有的代码; 没有支点或技术选择
- 允许团队在维护对资产(Terraform 模块)和安全配置文件(Checkov)的控制的同时使用它
- 让团队意识到他们自己的成本,允许他们改进他们
The Why and the What For
为什么和做什么
开发商须知
- 工作流在开发人员的名称空间之外运行,因此可以集中管理和共享凭据,而不必公开
- 可以事先批准更改,遵循计划并应用工作流
- 开发人员可以从他们的名称空间查看和调试 Terraform 工作流
- 将输出作为环境变量交付,准备直接从库伯内特秘密中使用,而不需要进一步操作这些值
平台工程师
- 它并非对所有人都是免费的; 平台工程师可以实现一些策略,应用程序团队可以围绕这些策略使用模块
- 配置可以是特定于环境的,使工程师能够将特定于环境的数据注入到模块配置中。可以注入环境标签、过滤器、项目标签、成本代码等用例
- 使开发人员能够看到他们在 Kubernetes 内配置的相关成本
- 支持 pod 标识(AWS 上的 IRSA)并将凭证管理移交给云供应商
- Integrates 与Infracost并提供查看预期成本和潜在执行政策(预算控制)的能力
- 重用Terraform 你可能已经写过了,你几乎肯定已经得到了经验
- 放置护栏周围的模块,你的团队可以使用,而不是参考或从互联网上拉任何 Terraform 模块
- 孤立资源的能力,即删除自定义资源而不删除支持它的云资源
先决条件
- Helm CLI
- Kind
启动和运行的最快方法是通过Helm。
部署控制器
Shell
$ git clone git@github.com:appvia/terraform-controller.git
$ cd terraform-controller
# kind create cluster
$ helm install -n terraform-system terraform-controller charts/ --create-namespace
$ kubectl -n terraform-system get po
为开发人员配置凭据
Shell
# The following assumes you are using static credentials. For managed pod identity see the docs: https://github.com/appvia/terraform-controller/blob/master/docs/providers.md
$ kubectl -n terraform-system create secret generic aws
--from-literal=AWS_ACCESS_KEY_ID=<ID>
--from-literal=AWS_SECRET_ACCESS_KEY=<SECRET>
--from-literal=AWS_REGION=<REGION>
$ kubectl -n terraform-system apply -f examples/provider.yaml
创建第一个配置
Shell
$ kubectl create namespace apps
# NOTE: Make sure to change the bucket name in examples/configuration.yaml (spec.variables.bucket)
$ vim examples/configuration.yaml
$ kubectl -n apps apply -f examples/configuration.yaml
# Check the module output
$ kubectl -n apps get secret test -o yaml
路线图上有什么?
预算限制
随着预算控制的引入,预算控制已经整合了一个想法。虽然它不会直接增加成本,而且一些资源是基于使用的(例如,一个 S3存储桶是免费的,但是在里面转储10TB,并且成本很高)。它可以是一种获取成本的轻量级方法,允许开发人员发挥/调整他们的依赖关系,并促进对成本的更好理解。
YAML
constraints:
budgets:
# Allow monthly spend of up to 100 dollars within each namespace for cloud resources
- namespaces:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: Exists
budget: 100
# Allow monthly spend of up to 500 dollars for namespaces with project cost center code PK-101
- namespaces:
matchExpression:
- key: company.com/costcode:
operator: In
values: [PK-101]
budget: 500
政策执行
将 Checkov 集成到管道中,并允许平台工程师从上面驱动策略。
YAML
constraints:
checkov:
source: https://github.com/<ORG>/<POLICY-REPO>.git?ref=v1.2.0
secretRef:
name: policy-sshkey
注意: 虽然这是一个障碍,但如果这是针对生产工作负载应用的,并且没有真正遵循 shift-left 方法,那么在游戏中就非常晚了。对于耦合方法(即在发布版本之前在 Terraform 模块 CI 工作流中使用相同的 PaC 存储库,以及在部署时在集群中强制执行) ,我们的 Policy As (Versioned) Code (PaC)博客绝对值得一读。
更新: 已经完成,可以从 v0.1.1开始使用:
https://github.com/appvia/terraform-controller/releases/tag/v0.1.1
那么,还有什么选择呢?
这并不意味着是一个独家的列表或比较,有很多博客谷歌搜索以外,但它值得强调一些著名的项目。
Crossplane
Crossplane 是一个有趣的项目,正好符合美国 DevOps 所喜爱的“金砖四国”模式。简而言之,它由被管理的资源(想想 Terraform 资源)组成,这些资源被打包成“组合”(想想 Terraform 模块的固执己见的集合) ,并作为可消费的 CRD 呈现给 Application Developer。最初试图复制 Terraform 云支持的广度,最近它加入了 Terrajet 项目俱乐部,该项目由 Terraform 供应商的编码控制器控制。
- 它有很多优点,但是确实伴随着技术上的支点和平台团队的学习曲线
- 不能重用以前的投资或经验。机会是你有一个尝试和测试的地形模块,即将被废弃的集合
- 没有演习或计划支持。对资源所做的任何更改都将尝试立即应用,这存在风险,因为修改特定资源属性可能会引发破坏性更改
Terraform Operator
也许是第一次谷歌点击时键入地形控制器。该项目的工作方式类似——通过 Kubernetes 工作协调一系列工作流程,并将其映射到“ terraform init”和“ terraform application”。
- T那个自定义资源定义 是非常灵活的,允许调整; 图像,版本,后期和预运行脚本,以及许多其他设置(虽然可以说,你可能不得不以某种方式阻止一些这种功能,因为它增加了表面积滥用)
- 目前,操作员无法共享凭据。这可以被看作是一种专业技术,但是,它确实使得开发人员的部署和使用更加复杂,因为您现在需要为团队管理凭据,或者可能需要与类似的产品集成Vault .
- 它具有 spec.resource 下载的特性,这个特性非常有用,可以用来提供特定于环境的配置
- 不支持批准或审查变更——所有东西都是“自动批准”的
- 该策略之后必须通过另一个组件(即 GateKeeper 或Kynervo admission controller Kynervo 入场控制器.
- Terraform 输出是作为 Kubernetes Secret 中的 JSON 对象编写的,因此您的应用程序可能需要更改来解析和使用这些值