云计算日益成为组织构建应用程序和服务的首选目的地。尽管一年来经济不确定性的头条新闻主要集中在通货膨胀增长和银行动荡方面,但大多数组织预计今年的云使用和支出将与计划的相同(45%),或高于计划的(45%)。Flexera公司2023年云现状报告中的新数据显示,仅有10%的受访者预计云支出会比计划的略低或显著降低。无论在支出方面的计划如何,许多组织都在寻找方法来控制高昂的云成本,同时确保Kubernetes工作负载的可靠性。但是,将成本尽可能降低并不意味着您不需要确保平台和服务的用户满意度。
通过分析超过150,000个工作负载和数百家组织的数据,Fairwinds制作了2023年Kubernetes基准报告。该报告将2022年的数据与上一年的基准进行了比较。行业报告显示,尽管在开发和生产环境中采用Kubernetes的情况增加,但对Kubernetes最佳实践的遵循仍然对许多组织构成挑战。不幸的是,缺乏遵循通常会导致现实世界中的后果,比如增加的安全风险、未受管控的云成本以及云应用程序和服务可靠性的降低。基准中有六个与可靠性相关的领域,每个领域都与配置错误相关联。
1. 内存限制和内存请求缺失
根据Kubernetes最佳实践,您应该始终在工作负载上设置资源限制和请求,但对于大多数人来说,很难确定每个应用程序应该使用哪些值。通常,这会导致要么根本不设置请求或限制,要么将它们设置得太高,然后再也不调整它们。根据2021年的基准数据,41%的组织为超过90%的工作负载设置了内存请求和限制。但在最新的报告中,这个比例下降到仅为17%。这可能是由于开发人员和DevOps团队不知道要设置什么限制,Kubernetes使用量增加而没有增加配置可见性,或者两者的结合。调整每个Pod的内存限制和请求可以确保您的Kubernetes集群扩展操作正常运行。适当设置内存限制和请求可以帮助您确保Kubernetes集群上的应用程序运行尽可能高效和可靠。
2. 存活探针和就绪探针缺失
存活探针用于确定容器是否在运行。在Kubernetes中,您使用探针定期监视应用程序的健康状况。当存活探针检测到失败状态时,Kubernetes会自动重新启动容器,将您的服务恢复到可运行状态。您应该在每个Pod的每个容器中放置一个存活探针;如果没有存活探针,有故障或不起作用的Pod将无限期地运行,消耗宝贵的资源并可能导致应用程序错误。最新的基准报告显示,83%的组织对超过10%的工作负载未设置存活探针或就绪探针。而在前一年,65%的组织对超过10%的工作负载未设置存活探针或就绪探针。可喜的是,这个问题并没有得到改善。
3. 拉取策略未设置为Always
有时团队会依赖Docker容器镜像的缓存版本,这可能导致可靠性问题。默认情况下,如果一个节点上没有缓存该镜像,它将始终被拉取。这可能导致每个节点上运行不同版本的镜像。它还可能在没有直接访问ImagePullSecret的情况下提供对镜像的访问权限。在最新的报告中,25%的组织几乎对所有的工作负载都依赖于缓存镜像,这与前一年的15%相比显著增加。这种增加对应用程序的可靠性产生了负面影响。
4. 部署副本缺失
在今年的基准测试中,新增了对仅有一个副本的部署进行检查,这也可能对可靠性产生负面影响。根据数据,25%的组织有超过一半的工作负载没有副本。这会影响可靠性,因为如果一个节点崩溃,当副本数为1时,部署将重启应用服务,但在此期间将没有可用的副本导致服务短时间内不可用。部署多个副本可以帮助组织确保容器稳定可用。
5. 缺失CPU限制
根据2021年的数据,36%的组织在少于10%的工作负载上缺少CPU限制。最新的报告显示,受影响的工作负载数量在各类工作负载中都增加了。86%的组织的工作负载中超过10%受到影响。指定CPU限制很重要,因为没有限制,容器将没有任何上限,可以消耗全部节点上可用的CPU,导致性能减慢并耗尽所有CPU资源。
6. 缺失CPU请求
之前,只有50%的组织在至少10%的工作负载上缺少请求。最新的基准报告显示,78%的组织的工作负载中有超过10%受到影响。工作负载中缺少CPU请求的组织数量从0%上升到17%。如果允许一个单独的Pod使用全部节点的CPU和内存,它可能会使其他Pod的资源匮乏。适当设置资源请求可以增加应用程序和服务的可靠性,因为它确保Pod将拥有访问所需资源的权限,并防止其他Pod占用节点上的所有可用资源。
Kubernetes的可靠性仍然是一个挑战
Kubernetes为组织提供了出色的价值,并支持按需扩展和灵活性。与此同时,它是一个复杂的环境,有很多可配置项。学习如何适当地调整它们以满足您的环境和业务需求可能会很具有挑战性,并容易出错。Kubernetes基准报告可以帮助您了解其他组织在哪些方面存在问题,并为您提供有助于使组织的部署尽可能安全、可靠和高效的改变。