中小企业在 Kubernetes 托管服务中的最佳实践(一)

DigitalOcean 的使命非常简单——为你提供扩展和加速云开发所需的工具和基础设施。许多独立软件供应商(ISV)和初创公司,例如 Snipitz、ScraperAPI、Nitropack、Zing 和 BrightData,都在 DigitalOcean Kubernetes 平台(简称 DOKS)上实现了成功扩展和快速增长。我们将通过一个系列文章,分享这些中小企业在使用 DigitalOcean Kubernetes 托管服务过程中总结下来的实践,同时也结合了我们在服务客户过程中总结的经验。本文将分享他们在使用 Kubernetes 时的成功经验和最佳实践。

这些创新者通过采用 DigitalOcean 的 Kubernetes 平台受益匪浅,能够高效、有效地扩展其应用程序。借助 Kubernetes 的强大功能,ISV 可以轻松管理容器化的应用程序,并自动完成这些应用程序的部署、扩展和管理。此外,Kubernetes 使 ISV 能够在不必担心底层基础设施的情况下快速扩展服务,令他们能够更专注于软件开发。DigitalOcean 的 Kubernetes 平台还提供了自动扩展、负载均衡和自我修复等功能,能够帮助 ISV 为客户维护高性能、可靠的应用程序。这也使得 ISV 能够简化运营、降低管理成本,并随着业务增长无缝扩展其应用程序。

是什么让 DigitalOcean Kubernetes 脱颖而出

DigitalOcean Kubernetes 的突出之处在于其完全托管、符合 CNCF 标准的服务,因其简单性、可负担性和强大的生态系统而备受青睐,能够在简化初始部署的同时优化后续操作。DigitalOcean Kubernetes (DOKS) 通过以下几种方式为独立软件供应商、初创公司和成长中的数字企业提供很好的投入回报率:

  • 简化的用户体验:DOKS 通过简化的 Kubernetes 体验,只需在 UI 中执行单个命令或点击一次,即可创建集群。集群自动扩展器、水平 pod 自动扩展器、负载均衡器、DBaaS 和块存储的简单配置都进一步优化了 Kubernetes 的使用体验。DOKS 通过快速的控制平面修复,为非高可用性 (HA) 集群提供生产级的可靠性,最大限度地减少停机时间和技术负担。

  • 固定且可预测的定价模型:使用 DOKS 的客户享受透明的成本结构。除非选择高可用性 (HA) 设置,否则无需支付控制平面费用。此外,激增升级无需额外费用,在升级期间可以创建最多 10 个额外节点。节点成为集群活动部分后才开始计费,确保客户仅为实际使用的资源付费。DigitalOcean Container Registry (DOCR) 采用固定价格层,并且目前没有额外的出站费用。

  • 充足的出站数据传输:DOKS 提供的每个 DigitalOcean Droplet 云服务器 都包含大量的出站数据传输配额,范围从 500GB 到 5TB 以上,确保大多数用户不会超出免费带宽,从而避免意外的成本增加。

  • 多种虚拟机选择:DOKS 提供多种工作节点 (Droplet) 选项,能够满足不同工作负载的需求。无论是需要共享资源来节省成本,还是专用资源以提升性能,亦或是需要 CPU 和内存优化的工作负载,DOKS 都能提供合适的解决方案。

  • DigitalOcean Kubernetes 的“一键式操作”和 Kubernetes 市场附加组件极大简化了第二天的操作,比如入口、监控和日志记录。Snapshooter 还为 Kubernetes 应用程序提供了备份和恢复服务。对于托管 SaaS 体验,用户可以从市场上的各种 SaaS 附加组件中进行选择。

我们的客户从人工智能和数据平台,到 Web 应用程序、在线学习平台、区块链、视频流、游戏、广播和数字营销等各个行业都取得了成功,充分展现了 DOKS 的多功能性及其在广泛服务中的支持能力。例如,Bright Data 通过 DOKS 进行大规模的 Web 数据索引,NitroPack 则加速了基于 CMS 的网站,Atom Learning 提升了在线教育体验,Shoppermotion 在零售分析方面通过物联网实现了创新。这些案例展示了不同领域的企业如何利用 DOKS 提高效率、推动创新,并实现可扩展性。

“我们的负载是动态的,周末较低,周中较高。我们通过 DigitalOcean API 创建 Droplet,部署系统,但最终,Kubernetes 更加强大。为解决未充分利用 Droplet 的问题,DigitalOcean Kubernetes 是唯一想到的解决方案。” Bright Data 首席运营官 Nir Borenshtein 表示。

你可以通过 DigitalOcean 客户案例研究门户的 Kubernetes 部分,详细了解这些 ISV 如何利用 DOKS 取得成功,包括架构图等信息。

在 Kubernetes 上采用和扩展的过程中,独立软件供应商 (ISV) 面临一些挑战。效率对于 ISV 至关重要,许多供应商的开发团队精简高效,能够在短短几周内从发现阶段快速进入生产阶段。由于 Kubernetes 具备可扩展性、可移植性和庞大的生态系统,它已经成为容器化工作负载的首选平台。越来越多的新产品从首次发布时就直接支持 Kubernetes。

虽然托管的 Kubernetes 服务简化了平台管理,但很多服务并不涉及第二天的操作。下面详细介绍这些平台通常处理的内容,以及哪些工作仍需由用户自行处理:

管理职责:

  • 控制平面管理:确保中央编排层的顺利运行。
  • 平台软件升级:保持 Kubernetes 版本为最新的稳定版本。
  • 灾难恢复:在发生灾难性故障时恢复控制平面和应用程序配置。

用户职责:

  • 应用程序和连接监控:监督已部署应用程序的性能和运行状况。
  • 可观察性:实施系统以收集、汇总和分析日志、指标和跟踪数据。
  • 应用程序备份和灾难恢复:保护应用程序数据免遭丢失或损坏。

创建 Kubernetes 集群非常简单——通常只需一个命令即可完成。然而,部署和管理生产应用程序却需要额外的精力。定期的代码更新和不同工作负载的需求(例如流媒体服务的突增)需要仔细的规划和执行。这些挑战通常可以分为几个关键领域:

  • 自动化:虽然初始部署简单,但由于每个应用程序的配置独特,维护和更新可能会变得复杂。自动化对于确保效率和一致性至关重要。DOKS 提供了现成的自动化蓝图和 Terraform 脚本来帮助实现这一点。

  • 开发人员生产力:传统的部署方法可能会降低生产力。快速且高效的开发周期至关重要,因此需要优化构建和部署镜像的流程。

  • 可观察性:Kubernetes 生成大量日志和指标,尽管它简化了日志和指标的收集,专用的聚合和分析平台仍是必不可少的。DOKS 提供了市场上 Prometheus/Grafana/Loki 堆栈的一键式可观察性服务,此外,Cilium Hubble 默认启用了流日志,用于网络故障排除,并且还支持 Kubernetes 仪表板的一键式服务。

  • 扩展:应用程序可能需要 DNS 扩展或快速自动扩展。节点上较高的 Pod 密度要求底层的 CNI(容器网络接口)性能最佳。常见的扩展挑战集中在集群自动扩展器、DNS 和 CNI 性能上。DOKS 使用容器化的控制平面(控制平面组件以容器形式运行),因此它能够快速扩展以应对业务激增和随之而来的集群扩展需求。

  • 故障排除:问题可能出现在多个领域,包括入口设置、集群升级、存储连接和资源分配。有效的问题解决依赖于准备和知识。

  • 灾难准备:虽然云提供商会保护控制平面,但应用程序的数据和配置仍需要独立的备份和恢复策略。SnapShooter(DigitalOcean 的一部分)现在支持 DOKS 集群的发现和备份功能。

  • 安全性:良好的安全实践应贯穿开发人员的操作和集群生命周期的各个阶段。

幸运的是,解决这些挑战主要需要在第一次完成自动化和相关规划,后续则是持续的故障排除工作。

在接下来的部分和未来的博客文章中,我们将通过与不同客户合作的经验,探索应对这些 DigitalOcean 上挑战的模式和最佳实践。

Kubernetes 采用的最佳实践清单

开发人员生产力

提高开发人员的生产力需要简化 Kubernetes 环境中的开发和部署流程。以下清单提供了有针对性的建议,以提升效率并减少操作开销。

清单:采用正确的工具集来提高生产力

探索并采用能够提升生产力的工具。以下是一些按实用性排序的示例:

  • k9s:这是一款基于终端的 UI 工具,提供集群活动和资源的实时视图,使监控和管理应用程序变得更加简单高效。
  • stern:用于同时跟踪多个 pod 的日志,非常适合调试跨多个服务的复杂问题。
  • k8sgpt:利用 AI 辅助进行故障排除。
  • kubectx/kubens:在集群和命名空间之间快速切换,简化管理多个环境的工作流程。
  • k8syaml:一个帮助生成和验证 Kubernetes YAML 文件的工具,确保配置正确且准备好部署。
  • kustomize:通过自定义应用程序资源而不更改原始清单,使配置管理更容易,同时促进可重复的部署过程。

清单:建立内部循环开发

传统的 Kubernetes 部署周期包括多个步骤:容器化应用程序、将镜像推送到注册表、更新清单并将其应用于集群。这种过程可能会显著减慢开发速度,特别是在快速迭代阶段。内部循环开发方法通过优化代码编写与在实时环境中观察效果的周期,使开发人员能够迅速看到更改的反馈,从而大大提高工作效率。

一些用于内部循环开发的工具包括以下内容:

  • Skaffold:自动执行构建、推送和部署应用程序的多个任务,使代码的迭代修改变得更加容易。
  • Tilt:通过监控文件更改并自动实时更新环境,优化开发周期。
  • Telepresence:在本地开发环境和 Kubernetes 集群之间创建双向网络桥梁,实现无缝的测试和调试。
  • DevSpace:简化开发和部署应用程序到 Kubernetes 的工作流程,提供在目标环境中直接构建、测试和调试的强大功能。

自动化 (CI/CD)

CI/CD 准备工作不仅仅是选择正确的工具;它是一段结合 DevOps 实践与自动化的旅程,对成功有着重大影响。

CI/CD 流程

从代码到部署的路径可以分为四个关键阶段:

  1. Git 存储库分支策略:选择合适的分支策略至关重要。对于中小型企业的小团队,GitHub Flow 通常是理想选择,因为它简单且基于拉取请求 (PR) 的代码提交方法。这种方法促进了协作和迭代开发,鼓励代码审查与反馈。需要注意的是,其他分支策略如 GitLab Flow 和基于 Trunk 的开发也被广泛采用。

  1. 构建管道执行:此阶段由 PR 或计划任务触发,主要涉及从提交的代码构建容器映像并将其推送到容器注册表。这样可以确保代码被正确打包并随时准备好部署。

  1. 应用程序清单配置:在构建新映像后,应用程序的清单配置需要更新,以确保部署过程中使用应用程序的最新版本。

  1. 推出策略:将映像部署到集群是 CI/CD 管道的最后阶段。可根据项目的需求和风险承受能力选择直接部署、蓝绿部署或金丝雀发布等策略。

检查清单:建立暂存环境

在单独的集群中维护 24/7 的暂存环境能够简化测试和操作。这允许在接近生产的环境中仔细审查更改,而不会影响实际用户。

暂存环境管理

在暂存和生产环境中应用不同的角色权限。限制对生产环境的访问,以降低风险并确保对更改的严格控制。

检查清单:使用 GitOps 进行部署

利用 CI 管道(如 GitHub Actions)或 Kaniko 等工具来构建容器映像。通过自动化部署到暂存环境,可以持续进行测试和验证。

对于生产部署,可以从手动批准开始,再逐步转向持续部署模式。

  • 生产环境手动批准:虽然自动化能够简化操作,但在生产部署中引入手动批准步骤增加了质量保障。这一额外步骤有助于维持生产环境的稳定性与质量。

  • 持续部署:一旦建立了强大的测试和自动化系统,可以考虑转向持续部署模式,实现开发到生产的无缝过渡,从而加快新功能和修复的发布速度。

采用 GitOps 实践,将集群配置与 Git 存储库保持同步,是一种强大的部署管理方法。ArgoCD 和 Flux 等工具能够自动同步配置,提供清晰的审计跟踪,并在需要时简化回滚操作。

下图展示了使用 ArgoCD 将代码部署到多个环境的示例。更改首先应用于暂存环境进行测试,获得批准后,相同的更改将推广到生产环境,从而确保部署的一致性和可靠性。

下来几步

随着我们继续探索 ISV 采用 Kubernetes 的历程,我们即将发布的博客系列将深入探讨部署的弹性、效率和安全性。

  • 可观察性(第 2 部分):解读工具和策略,帮助你深入了解应用程序和基础设施,确保你能够有效监控性能并快速解决问题。
  • 可靠性和规模(第 3 部分):探讨如何实现零停机部署、就绪/活跃度探测、应用程序扩展、DNS 和 CNI 管理,以在不同负载条件下保持最佳性能。
  • 灾难准备(第 4 部分):讨论制定可靠灾难恢复计划的重要性,包括备份策略、实践以及定期演练,确保业务连续性。
  • 安全性(第 5 部分):深入研究如何保护 Kubernetes 环境,涵盖网络策略、访问控制以及保护应用程序工作负载的最佳实践。

每个主题都对应对 Kubernetes 的复杂性、提升基础设施弹性、扩展能力和安全性至关重要。请继续关注我们的分享,帮助你顺利实现 Kubernetes 相关的部署开发和维护。如果需要了解 DigitalOcean Kubernetes 托管服务的产品细节,可访问 DigitalOcean 中国区独家战略合作伙伴卓普云的官网,或直接联系卓普云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值