Kubernetes 是管理容器化应用程序的强大工具。然而,如果没有适当的实施,它可能会令人难以承受且难以管理。为了提供帮助,我们编制了 24 个 Kubernetes 最佳实践的列表。这些实践涵盖了从资源管理到安全性的各个方面,以确保 Kubernetes 部署顺利、安全地运行。

Kubernetes 已成为管理容器化应用程序的首选工具,近年来采用率飙升。然而,仅仅采用 Kubernetes 是不够的 - 要真正从这个强大的工具中受益,实施最佳实践以确保部署高效、安全且可管理非常重要。本文将讨论 24 个最重要的 Kubernetes 最佳实践,以帮助您优化部署。
但在深入探讨最佳实践之前,让我们快速浏览一下一些统计数据,这些统计数据强调了正确 Kubernetes 实施的重要性。
根据 2021 年 CNCF 调查, 91% 的受访者在生产中使用 Kubernetes,高于 2020 年的 83%。调查还发现,83% 的组织一半以上的容器化应用程序都在 Kubernetes 上。
这些统计数据表明 Kubernetes 在现代应用程序开发和部署中的持续增长和重要性。
那么,让我们开始了解如何从 Kubernetes 中获得最大成果。
内容
Kubernetes 安全最佳实践
Kubernetes 安全最佳实践对于确保部署安全并免受潜在威胁至关重要。在本节中,我们将介绍 Kubernetes 安全性的最佳实践,包括如何保护 Kubernetes API、使用 RBAC 控制访问以及应用容器安全最佳实践。
使用基于角色的访问控制 (RBAC)

基于角色的访问控制 (RBAC) 是一项强大的安全功能,允许您根据用户角色和权限控制对 Kubernetes 资源的访问。
要实施 RBAC,您必须定义角色和绑定来确定哪些用户或组可以访问特定资源。角色定义一组权限,而绑定将这些角色分配给特定的用户或组。在定义角色以限制每个用户或组可以访问的范围时,遵循最小权限原则至关重要。
RBAC 可以帮助防止未经授权的用户更改集群并限制对敏感资源的访问。
建议将 RBAC 与其他安全功能(例如网络和 Pod 安全策略)结合使用,以创建强大且安全的 Kubernetes 环境。
安全节点和 Pod
保护节点和 Pod 的安全对于维护 Kubernetes 集群的整体安全至关重要。节点是运行 pod 的工作机器,是 Kubernetes 中最小的可部署单元。
保护节点和 Pod 的最佳方法之一是使用考虑到安全性而构建的容器映像。这可以通过定期更新和修补容器镜像以及使用可信来源下载镜像来实现。
您还应该定期扫描映像是否存在漏洞,并使用映像签名等工具来验证容器映像的真实性。
另一个重要的安全实践是通过实施网络分段和防火墙来限制对节点和 Pod 的访问。这可以通过配置网络策略来限制 Pod 和节点之间的流量并仅允许来自可信来源的流量来完成。
消除容器安全风险
容器是 Kubernetes 的重要组成部分,但它们也带来了必须解决的新安全风险。
确保容器运行最新的安全补丁和更新是消除安全风险的有效措施。
您还应该定期扫描容器映像是否存在漏洞,并使用映像签名等工具来验证容器映像的真实性。
另一个重要的安全实践是使用容器安全策略来限制每个容器可以访问的资源。
为此,您可以设置 CPU、内存和其他系统资源的资源限制,并利用安全上下文来规范对系统资源的访问。
强化 Kubernetes 集群
强化涉及实施一组安全措施来减少攻击面并提高集群的弹性。
您可以限制对 Kubernetes API 服务器的访问以提高系统的安全性。这可以通过实施网络分段和防火墙来管理对 API 服务器的访问,以及使用强大的身份验证和授权机制来限制仅授权用户的访问来实现。
另一个重要的安全实践是定期更新和修补 Kubernetes 组件,包括 Kubernetes 控制平面和工作节点。
这可以通过使用自动化工具进行补丁管理并定期监控集群是否存在任何安全漏洞来实现。
最小化攻击面:基础容器镜像
基础镜像是容器的起点,选择安全且最新的基础镜像非常重要。
通过利用经过强化和修补的基础映像可以降低容器中存在漏洞的风险。这可确保容器构建在安全的基础上,并降低被利用的风险。
为了确保基础映像的安全,请使用受信任的注册表,例如 Docker Hub 或 Google 容器注册表。这些注册表具有防止未经授权的访问的安全措施,并且还可以扫描图像是否存在漏洞。
最小化攻击面的另一种方法是使用最小的基础映像。最小基础映像仅包含运行应用程序所需的基本组件,这降低了未使用组件中存在漏洞的风险。
将安全工具与 Kubernetes 集群集成
安全工具可以帮助您检测和防止对容器和 Kubernetes 环境的威胁。通过使用漏洞扫描器、入侵检测系统和日志分析器等安全工具,您可以在安全威胁对集群造成损害之前检测并预防它们。
监控 Kubernetes 集群是否有任何异常活动也很重要。这可以使用 Kubernetes 审核来完成,它会记录对集群所做的所有请求和更改。通过监控这些日志,您可以快速识别任何可疑活动并采取措施解决它。
还建议定期检查和更新安全策略。这包括有关访问控制、网络安全和数据保护的策略。定期安全审查可以帮助您识别安全状况中的任何弱点并采取措施解决这些弱点。
Kubernetes 监控和日志记录最佳实践
Kubernetes 监控和日志记录对于维护集群的健康和性能至关重要。本节将介绍一些监控和登录 Kubernetes 的最佳实践。
从设置指标收集到实施集中式日志记录,我们将探索可帮助您有效监控和管理 Kubernetes 部署的关键实践。
使用单一管理平台监控指标。
单一管理平台是 Kubernetes 集群所有指标的统一视图。此视图提供集群运行状况的整体情况,并可以帮助您快速识别任何需要注意的问题。
有多种工具可以帮助您设置用于 Kubernetes 监控的单一管理平台,包括 Prometheus 和 Grafana。这些工具允许您收集整个集群中的指标并将其可视化,从而轻松发现趋势并确定需要优化的领域。
实施集中日志记录
集中式日志记录涉及将 Kubernetes 集群中所有节点的日志聚合到一个集中位置。这使您可以在整个集群中搜索和分析日志,而不必手动检查每个节点上的日志。
有多种工具可用于在 Kubernetes 中实现集中式日志记录,包括 Fluentd、Elasticsearch 和 Kibana。这些工具允许您在集中位置收集、存储和可视化日志。
配置日志记录以捕获关键信息(包括应用程序日志、系统日志和审核日志)非常重要。审核日志对于了解谁正在访问集群及其操作非常有价值。
监控系统应可扩展并具有足够的数据保留
为了确保可扩展性,选择能够处理集群生成的数据量的监控和日志记录工具非常重要。这可能涉及用于监控和日志记录系统的额外节点或集群。
除了可扩展性之外,确保监控和日志记录系统具有足够的数据保留也很重要。这意味着确保您有足够的存储空间来保留日志和指标足够长的时间。
您需要的数据保留量取决于具体要求以及您可能需要满足的任何法规或合规性要求。一般来说,最好将日志保留至少 30 天,尽管某些组织可能需要将数据保留更长时间。
确保全面的可见性以确保所有 Kubernetes 组件的可观察性
为了有效地监控和记录 Kubernetes 环境,确保每个集群组件都是可观察的非常重要。
这意味着您需要全面了解 Kubernetes 基础设施,包括所有节点、pod、容器和其他组件。
为了实现全面的可见性,您应该利用监控和日志记录工具来深入了解 Kubernetes 环境。
根据具体需求和要求,这可能需要结合使用开源工具和商业解决方案。
利用具有基于角色的访问控制和用户权限的工具集
借助 RBAC 和用户权限,您可以确保只有授权用户才能访问 Kubernetes 资源,并且他们仅具有执行任务所需的访问级别。
RBAC 允许您为不同类型的用户定义角色并为这些角色分配权限。例如,您可以为开发人员创建一个角色,允许他们创建和更新 pod,但不能创建或删除节点。然后,您可以根据用户的工作职责将他们分配给这些角色。
另一方面,用户权限允许您控制对特定 Kubernetes 资源(例如 Pod、服务或部署)的访问。您可以向单个用户或用户组分配权限,并指定他们对每个资源拥有的访问级别。
将监控系统与 CI/CD 管道集成
通过将监控工具集成到CI/CD 管道中,您可以在开发过程的早期识别应用程序和基础设施的潜在问题,从而使您能够快速解决这些问题并防止它们影响生产环境。
Kubernetes 有多种监控工具可用,包括 Prometheus、Elastic Stack、Grafana 和 New Relic。
这些工具允许您收集和分析 Kubernetes 环境中的指标和日志,并提供有关应用程序和基础设施的运行状况和性能的实时见解。
使用开源监控工具的托管服务
托管服务可以帮助自动化 Kubernetes 集群中监控工具的部署、配置和维护,从而节省时间和精力。
适用于 Prometheus 和 Grafana 等开源监控工具的托管服务可在 AWS、Google Cloud 和 Azure 等流行云平台上使用。通过托管服务,您可以利用云提供商的专业知识和支持来确保监控系统高度可用、可扩展且可靠。
Kubernetes 命名空间最佳实践
Kubernetes 命名空间提供了一种将集群逻辑分区为多个虚拟集群的方法。正确管理命名空间可以改善 Kubernetes 环境中的资源分配、安全性和可扩展性。本节将介绍使用 Kubernetes 命名空间的最佳实践。
使用方便且可扩展的名称
在 Kubernetes 中创建命名空间时,使用方便且可扩展的命名约定非常重要。命名空间的命名方式应易于记忆并符合组织的命名约定。
此外,避免在命名空间名称中使用特殊字符或空格也很重要,因为这可能会导致其他 Kubernetes 资源出现问题。通过对命名空间使用一致且可扩展的命名约定,您可以提高 Kubernetes 环境的可读性和可维护性。
始终将标签附加到命名空间。
标签是键值对,提供有关 Kubernetes 对象的附加信息,包括命名空间。您可以通过将标签附加到命名空间来更好地组织和管理 Kubernetes 环境。
例如,您可以使用标签来标识命名空间属于哪个团队或项目,或者它在哪个环境中运行(例如开发、登台、生产)。这对于具有多个团队和应用程序的大型、复杂的 Kubernetes 环境特别有用。
创建命名空间时,始终附加标签并使用一致的标签命名约定以确保轻松过滤和可搜索性非常重要。
使用RBAC分配资源
在 Kubernetes 中,合理分配资源以避免资源浪费并保证资源的高效利用非常重要。基于角色的访问控制(RBAC)功能可以根据用户角色和访问控制策略将资源分配到不同的命名空间。
使用 RBAC,管理员可以定义哪些用户或组有权访问命名空间内的特定资源,确保只有授权用户才能操作或查看资源。这种做法有助于防止未经授权的访问,并增强 Kubernetes 集群的整体安全性和资源管理。
使用网络策略
通过利用 NetworkPolicy 资源,您可以定义如何允许 Pod 组相互通信以及 Kubernetes 中的其他网络端点通信。这允许实施规则来调节命名空间中进出 Pod 的流量,最终确保仅允许授权流量通过。这有助于增强安全性并防止恶意行为者访问敏感数据或资源。
创建 NetworkPolicy 时,为入口和出口流量定义明确的规则并指定允许哪些 pod 和命名空间相互通信非常重要。此外,您应该使用标签将 NetworkPolicy 应用于特定的 pod 或 pod 组,而不是将其应用于整个命名空间。
Kubernetes 资源限制最佳实践
优化 Kubernetes 资源限制对于提高应用程序性能和确保资源高效利用至关重要。本节将探讨在 Kubernetes 中设置资源限制的一些最佳实践。
设定现实合理的限制
使用 Kubernetes 时,为应用程序设置现实合理的资源限制非常重要。过度使用资源可能会导致性能问题和不稳定。
最佳实践是分析应用程序的资源使用情况并根据其要求设置适当的限制。这可以通过监控和日志记录工具来实现,这些工具可以帮助您深入了解资源利用模式。
此外,定期检查和调整资源限制可以确保最佳性能并防止资源浪费。
监控资源使用情况
监视资源使用情况可以帮助确定应用程序的实际资源消耗并防止资源耗尽,从而导致停机和中断。
适当的监控还可以深入了解资源使用模式,从而优化资源分配并识别潜在问题。通过定期监控资源使用情况,团队可以确保其应用程序高效且有效地运行。
利用自动缩放来限制 Kubernetes 资源限制
当涉及到 Kubernetes 资源限制时,自动扩展是一个至关重要的最佳实践。它确保应用程序可以处理增加的流量和工作负载,而不会导致性能问题。
通过启用自动扩展,您可以为应用程序设置最小和最大副本数量,Kubernetes 将根据需求自动扩展或缩小。这有助于优化资源使用并避免不必要的成本。
正确配置自动缩放参数对于确保应用程序能够毫无问题地处理预期工作负载非常重要。
Kubernetes 标签最佳实践
标签是组织和管理 Kubernetes 资源的重要组成部分。如果没有适当的标签,跟踪和管理资源就会变得具有挑战性。本节将讨论使用 Kubernetes 标签的最佳实践。
使用正确的语法

来源:kuberntes (dot) io
格式正确的标签对于有效组织和管理 Kubernetes 资源非常重要。建议的做法是在创建标签时使用正确的语法以避免错误和混淆。语法应遵循标签格式规则和最佳实践,以确保应用程序的正常运行和更轻松的集群维护。
了解标签选择选项

来源:kubernetes (dot) io
Kubernetes 标签是附加到 Kubernetes 对象的键值对,以帮助识别和组织它们。
使用标签时,了解 Kubernetes 中可用的标签选择选项非常重要。两种最常见的标签选择选项是基于相等的选择器和基于集合的选择器。
基于相等的选择器用于精确匹配标签。它们可以与“==”运算符一起使用,将标签的值与特定的字符串或数值相匹配。
另一方面,基于集合的选择器允许更灵活的标签匹配。您可以将这些标签与“in”、“notin”、“exists”和“不存在”等运算符结合使用,以根据一组可能值或标签是否存在来匹配标签。
为了确保在 Kubernetes 环境中有效使用标签,了解何时使用每种选择器类型并正确构建标签值以实现高效查询非常重要。
这样做可以提高您对集群中的对象进行过滤和分组的能力,从而更轻松地管理应用程序和排除应用程序故障。
始终使用 Kubernetes 推荐的标签。
使用这些标签作为标记 Kubernetes 资源的标准被广泛接受为最佳实践,因为它们是由 Kubernetes 社区定义的。
它确保不同环境和工具之间的一致性,使共享资源和协作变得更加容易。
避免在不同资源中使用冲突标签或重复标签也很重要。这可能会导致混乱,并使准确识别和管理资源变得困难。
此外,使用准确反映资源用途和功能的描述性标签有助于增进理解并减少错误。
常见问题
Kubernetes 最大的问题是什么?
Kubernetes 最大的问题是它的复杂性和陡峭的学习曲线。设置、配置和管理可能很困难,如果操作不当,可能会导致错误和停机。
Kubernetes 推荐多少个主节点?
为了 Kubernetes 的高可用性和容错能力,专家建议至少拥有三个主节点。
Kubernetes 秘密的安全性如何?
如果使用得当,Kubernetes 机密被认为是安全的,因为它们对静态和传输中的机密进行加密,并且可以使用 RBAC 限制它们的访问。然而,如果秘密管理不当或者存在集群泄露,秘密可能会被暴露,从而给系统的安全带来风险。