关于Kubernetes在生产中的应用,这十大要点ChatGPT不会说?


关于Kubernetes在生产中的应用,这十大要点ChatGPT不会说?

文章插图

事实证明 , 生成式AI在许多相对基础的用例中已发挥作用,但是当它需要在技术方面给予更多指导时,表现又如何呢?
 
在推出ChatGPT时,我们也和大家一样想将它给出的答案与常规网络搜索得到的答案进行比较 。我们进行实验,询问技术问题并要求它回答具体内容 。并非所有的回答都有效或正确,但我们仍非常认可其提供反馈以改进回答的能力 。
 
然后,我们向ChatGPT更具体地询问有关使用 Kube.NETes 的建议 。它提供了一份在生产中使用Kubernetes的12项最佳实践清单,其中大部分都是正确且相关的 。但当被要求将该列表扩展到50项最佳实践时 , 我们很快就发现,人类仍具有无可取代的价值 。
 
我们如何使用 Kubernetes
JFrog在Kubernetes上运行其整体平台已有六年多的时间,使用的是主流云提供商(包括AWS、Azure和GCP)提供的托管Kubernetes服务 。我们在全球30多个地区开展业务,每个地区都有多个Kubernetes集群 。在中国,许多公司都在使用Kubernetes和其他AI赋能的解决方案来加强运营并保持市场竞争力 。
 
在JFrog的案例中,Kubernetes主要用于运行工作负载和运行时任务,而非存储 。JFrog采用云提供商提供的托管数据库和对象存储服务 。Kubernetes基础设施由数千个节点组成,节点数量可根据自动扩展配置进行动态扩展或缩减 。
 
JFrog生产环境包括数十万个Pod (Kubernetes中最小的部署单元) 。确切数量会随着Pod的创建或终止而变化;目前,约30万个Pod在我们全球生产环境中运行,因此需要管理的工作负载量巨大 。
 
我们经常发布新的应用程序版本、补丁和错误修复 。我们实施一个内置系统来推出这些更新,包括在全面部署前进行适当的金丝雀(Canary)测试,以此保持连续的发布周期,并确保服务的稳定性 。
 
大多数使用过该服务的人都知道,ChatGPT明确给出免责声明,表明其所基于的数据并不完全是最新的 。鉴于此 , 并考虑到上述背景之下的需求,在OpenAI更新其数据和算法之前,关于Kubernetes在生产中的现代化应用,以下十点是ChatGPT无法告知的:
 
1. 节点划分是门艺术
节点划分涉及在较小的节点(可减少 "爆炸半径")和较大的节点(可提高应用性能)之间找到平衡 。关键在于根据工作负载要求(如CPU或内存优化)来使用不同的节点类型 。调整容器资源,使其与节点的CPU与内存比率相匹配,可以优化资源利用率 。
 
也就是说,考虑到每个应用程序或服务的资源消耗模式各不相同,找到每个节点上合适的Pod数量也是一项均衡工作 。使用Pod拓扑分布约束或节点反亲和性等技术在节点间分散负载以优化资源使用 , 有助于适应工作负载强度的变化 。对于使用基于Kubernetes的云服务的大型企业,负载均衡和负载分发至关重要 。
 
2. 保护Control Plane的重要性
监控Kubernetes Control Plane至关重要,尤其是在托管Kubernetes服务中 。虽然云提供商能提供可靠的控制和均衡,但仍需要了解其局限性 。应做好监控和警报,以确保Control Plane以最佳状态运行 。Control Plane运行缓慢会严重影响集群行为,包括调度、升级和扩展操作 。即使是托管服务,也存在需要考虑的限制 。
 
过度使用托管Control Plane可能会导致灾难性的崩溃 。许多人都经历过这种情况,这也时刻提醒如果控制计划没有得到适当的监控和管理,它们就可能会不堪重负 。
 
3. 如何维持应用程序正常运行时间
确定关键服务的优先级可优化应用程序的正常运行时间 。Pod优先级和服务质量决定了需要始终运行的高优先级应用程序;了解优先级有助于优化稳定性和性能 。
 
同时,Pod的反亲和性可防止同一服务的多个副本部署在同一节点上 。这就避免单点故障 , 意味着如果一个节点出现问题,其他副本不会受到影响 。
 
还应采用为任务关键型应用程序创建专用节点池的方法 。例如,为init Pod其他重要服务(如 Prometheus)创建单独的节点池,可显著提高服务的稳定性和最终用户体验 。
 
4. 需要制定扩展计划
是否准备好处理双倍部署,以提供必要的容量增长 , 同时不带来任何负面影响?托管服务中的集群自动扩容功能可提供帮助,但了解集群规模限制也很重要 。对我们来说,典型的集群规模约为100个节点;如果达到这一限制,我们就会启动另一个集群,而非勉强现有集群增长 。


推荐阅读