一个好的工具不在于它的炒作或流行度,而在于它能多好地解决你的问题并融入你的生态系统。
对于没有进入 kubernetes 生态的你,可以参考一下是否已经准备好了。本文译自 Kubernetes Isn’t Always the Right Choice 。
如今,几乎所有的应用程序都可以被封装在容器中执行。容器解决了很多问题,但也带来了新的编排挑战。由于大量团队需要容器编排来构建云原生应用程序,Kubernetes 作为一个强大的工具解决了这个挑战,因此获得了广泛的普及。
在一个管理良好的 Kubernetes 环境中开发,可以提供许多好处,比如自动扩缩容、自我修复、服务发现和负载均衡。然而,拥抱 Kubernetes 的世界通常意味着不仅仅是采用容器编排技术。团队需要从战略上考虑“Kubernetes 是我的解决方案的正确选择吗?”他们必须通过评估这个更广泛问题的几个组成部分来做到这一点。
对 Kubernetes (K8s) 的能力赞不绝口的文章数不胜数,这不是我们要质疑的。在许多情况下,K8s 是一个正确的选择。也就是说,并非所有团队和项目都适合直接与 Kubernetes 交互和维护。
与其确定 Kubernetes 是否满足您的一些要求,不如考虑识别与 Kubernetes 的能力不太匹配或引入不必要复杂性的特定特征和要求。
仅凭您的需求复杂性本身不会决定 Kubernetes 是否适合您的团队,但可以帮助您倾向于某一方向。如果您直接使用 Kubernetes,它不会自然提高您的产品。它的强大之处在于创建一个强大的平台,使您的产品可以茁壮成长。
图1
这将导致开发工作进一步远离成为您业务基础的方向,而更多地投入到您的产品之下。
这引出了一个真正的问题:我们是在建立一个平台,还是试图加快上市时间,以更快地实现核心业务目标的投资回报?
Kubernetes 通常以其具有挑战性的学习过程而闻名。什么因素导致了这种复杂性?为了更清楚地表达,我整理了一份基于特定标准的主题列表,这些标准有助于评估提高自己技能所需的努力。
复杂性 | 描述 |
---|---|
基本 | 基础概念,较容易理解的概念 |
中级 | 需要一些先前知识的概念 |
高级 | 需要广泛知识的复杂概念 |
注意:这些复杂性级别将根据个人背景和先前经验而异。
学习领域 | 描述 | 复杂性 |
---|---|---|
容器化 | 理解容器和 Docker 等工具。 | 初级 |
Kubernetes 架构 | 了解 Pod、Service、Deployment、ReplicaSet、Node 和Cluster。 | 中级 |
Kubernetes API 和对象 | 理解 Kubernetes 的声明性方法,使用 API 和YAML。 | 中级 |
网络 | 理解 Pod 间通信、Service、Ingress、网络策略和服务网格。 | 高级 |
存储 | 了解卷、持久卷(PV)、持久卷声明(PVC)和存储类。 | 高级 |
安全 | 理解 Kubernetes 安全性,包括 RBAC、安全上下文、网络策略和 Pod 安全策略。 | 高级 |
可观测性 | 熟悉监控、日志记录和跟踪工具,如 Prometheus、Grafana、Fluentd、Jaeger。 | 中级 |
Kubernetes 中的 CI/CD | 将 Kubernetes 与 CI/CD 工具(如 Jenkins、GitLab)集成,使用 Helm 图表进行部署。 | 中级 |
Kubernetes 最佳实践 | 熟悉 Kubernetes 使用中的最佳实践和常见陷阱。 | 中级到高级 |
对于缺乏必要的专业知识或没有时间学习的团队,整体开发和部署过程可能会变得令人不堪重负和缓慢,这对于时间紧迫或人手有限的项目不利。
尽管 Kubernetes 本身是开源且免费的,但运行它并非如此。您需要考虑与基础设施相关的费用,包括服务器、存储和网络的成本,以及隐藏的成本。
第一个隐藏的成本在于管理和维护 - 团队培训、故障排除、维护系统、维护内部工作流程和自助服务基础设施所花费的时间和资源。
由于各种原因,许多人在计算全面的 Kubernetes 环境成本时忽略了这项工作所需的高技能员工的工资。要警惕关于完全托管或无服务器提供的服务与自我管理的 Kubernetes 之间许多不准确的比较。它们通常未考虑员工成本以及由于花费在 Kubernetes 上而导致的失去时间的机会成本。
第二个隐藏成本与 Kubernetes 生态系统有关。拥抱 Kubernetes 世界通常意味着不仅仅是采用一个容器编排平台。这就像踏上一个广阔的大陆,拥有丰富的功能,以及各种供应商提供的各种工具、服务和产品,最终会引入其他成本。
一个好的工具不仅仅是因为它的炒作或流行,而是因为它能很好地解决您的问题并融入到您的生态系统中。在云原生应用程序的领域,Kubernetes 无疑占据了很大一部分讨论。然而,我鼓励团队考虑通过 OpenShift、Docker Swarm 或由 Nitric 等框架协调的无服务器和托管服务等解决方案实现的不同方法的权衡。
在后续文章中,我将探讨一种在不直接依赖 Kubernetes 的情况下创建云原生应用程序的方法。我将深入探讨通过托管服务(如 AWS Lambda、Google CloudRun 和 Azure ContainerApps )提供的基础设施构建和部署强大、可伸缩和有弹性的云原生应用程序的过程。
这种云中应用程序开发方法是我们正在构建的 Nitric 的灵感来源,该云框架旨在简化在多个云平台上创建、部署和管理应用程序的过程。它提供了在配置底层基础设施时抽象和自动化涉及的复杂性的一致的开发者体验。
对于发现直接互动和管理 Kubernetes 不合适的团队和项目,无论是因为预算限制、资源有限还是技能不足,Nitric 提供了一个途径来利用相同的优势。深入了解 Nitric 的方法,并在 GitHub 上与我们分享您的反馈。