译自 10 Kubernetes Best Practices in DevOps — without ChatGPT 。
当涉及到Kubernetes的最佳实践时,生成式AI仍有许多需要学习的地方,不应被视为灵丹妙药。人类知识仍然领先于AI。
自ChatGPT推出以来,这个聊天机器人已经在全球范围内被用于各种各样的用例。许多人感兴趣的是,与其他产品和搜索引擎相比,AI在满足特定查询时提供有用和准确答案的能力。
考虑到这一点,我们对ChatGPT进行了一次实验,以确定其在Kubernetes主题上的特定答案在哪些方面是正确的,以及它在哪些方面给出了可疑的回答,从而证明人类及其专业知识仍然不可或缺。
以下10个是目前在DevOps中使用Kubernetes的最佳实践,并非由AI编写,而是来自第一手的人类经验。
使用 Kubernetes 的关键在于根据工作负载的需求,如 CPU 或内存优化,选择不同类型的节点。正确地将容器与节点的 CPU 与内存比例匹配,可以让组织优化资源利用率。
但是,找到每个节点上适当的容器数量需要平衡各个应用或服务的资源消耗模式。使用拓扑扩散约束或反亲和性等技术将负载分散到各节点,可以优化资源利用率,灵活适应工作负载强度的变化。
监控 Kubernetes 控制平面非常关键,尤其是使用托管的 Kubernetes 服务时。虽然云服务提供商提供了可靠的控制与平衡,但其局限仍须警惕。控制平面缓慢会显著影响集群行为,包括调度、升级和扩缩容等操作。即使使用托管服务,也存在一定局限,过度使用托管控制平面可能导致灾难性事故。必须时刻注意,如果控制平面不恰当地监控和管理,可能会过载。
明确应用的优先级可以优化应用的可用性。设置容器优先级和服务质量等级,识别始终运行的高优先级应用;了解优先级水平可以优化稳定性和性能。同时,反亲和性可以防止同一服务的多个副本被部署到同一节点,避免单点故障,即如果一个节点故障,其他副本不受影响。此外,为关键任务应用单独配置节点池也很有益处。比如,为 ingress 容器和其他关键服务如 Prometheus 设置独立节点池,可以显著提高服务稳定性和用户体验。
公司需要做好准备,以处理大规模部署并提供必要的容量增长,同时避免对现有系统造成不利影响,也不能强制现有系统扩张。托管服务中的自动集群扩容可以提供帮助,但必须了解集群大小的局限。一个典型集群可能包含大约 100 个节点,达到此限制后,应新增集群,而不是强制扩展现有集群。需要考虑应用的垂直和水平扩展,关键是找到平衡,更好地利用资源而不过度紧张。通常首选水平扩展和复制或重复工作负载,但需注意这可能影响数据库连接和存储空间。
各种应用基础架构方面都需要为故障做好准备。可制定涵盖各种故障场景的应急手册,包括应用故障、节点故障和集群故障。实施高可用应用容器和反亲和性等策略,可在发生故障时提供容错。
每个公司都需要详细的集群宕机灾难恢复计划,并定期演练。控制恢复速度,逐步进行,可避免过载资源。
软件供应链一直面临错误和恶意行为的威胁。对每一步骤保持控制,不要轻信外部工具和提供商,务必认真审查其可信程度。对外部来源的控制包括扫描从远程仓库获取的二进制文件,使用软件成分分析解决方案验证其安全性。在整个流水线应用质量和安全检查,可提高对用户和流水线本身的信任度,保证交付软件的更高质量。
使用准入控制器实施规则,如阻止部署黑名单版本,可提高运行时安全性。OPA Gatekeeper等工具可帮助执行只允许从受控容器仓库部署等策略。
基于角色的访问控制也可用于保护 Kubernetes 集群安全,其他运行时保护方案可检测和应对实时风险。命名空间隔离和网络策略可阻止横向渗透,保护命名空间中的工作负载。考虑在隔离节点上运行关键应用,以降低容器逃逸的风险。
为了保护环境安全,应时刻警惕网络遭受持续攻击的可能。建议使用审计工具检测集群和基础设施中的可疑活动,采取运行时全面透明的保护措施和工作负载控制。
专业的最佳实践工具很有帮助,但一个完善的事件响应团队和针对警报或可疑活动的明确应急计划也是必需的。像灾难恢复计划一样,定期演练也很必要。许多公司还聘请漏洞奖励计划或外部安全研究人员试图入侵系统以发现漏洞。外部视角的专业调查可产生有价值的见解。
在发展系统和流程时,持续学习非常关键,需要收集历史性能数据以评估现状并采取措施。小幅持续改进很常见,过去相关的东西现在可能已不再适用。
主动监控性能数据可以帮助发现服务中的内存或 CPU 泄漏,或第三方工具的性能问题。积极分析数据趋势和异常可以提高对系统的理解和性能表现。主动监控和评估比对实时警报做出反应,效果更好。
在可能的情况下通过自动化减少人工参与,这在安全方面有好处。人是安全中最薄弱的环节。可评估各种自动化解决方案,选择最符合流程和需求的方案。
GitOps 是一种流行的做法,可将变更从开发自动推送到生产,它提供了熟悉的接口来管理配置变更。一个类似的方法是使用多个代码仓库存储不同类型的配置,但重要的是在开发、预生产和生产环境间保持明确的区分,即使它们应类似。
AI驱动的解决方案对未来具有很大前景,因为它们可以减少环境管理、部署和故障排除的操作复杂性。然而,人的判断不可或缺,需要始终考量。现有的 AI 依赖公开知识,其中可能包含不准确、过时或不相关的信息,可能导致错误的回答或建议。归根结底,运用常识并认识 AI 的局限非常重要。
欢迎于11月6-9日在芝加哥与我们一起参加 KubeCon + CloudNativeCon 北美洲,了解有关 Kubernetes 和关于云原生生态系统的更多信息。