Kubernetes是业界最流行的容器编排开源平台,它可以自动化我们很多与容器相关的任务。公司使用它来解决与部署、可扩展性、测试、管理等相关的问题。然而,Kubernetes很复杂,需要陡峭的学习曲线。在本文中,我们将介绍大多数公司会遇到的一些常见Kubernetes陷阱。这些是许多采用Kubernetes的公司在扩展业务时面临的问题。在讨论这些问题的同时,我们还将强调如何避免或解决它们。最后,我们将讨论如何在不面对其复杂性的情况下充分利用Kubernetes的最佳解决方案。接下来,让我进入正题。1.标签和选择器的错误使用初学者常犯的错误之一就是在配置中错误地使用了标签(Label)和选择器(Selector)。标签是与Pod、服务等对象关联的键/值对。选择器允许您识别标有标签的对象。选择器不匹配会使部署资源处于不受支持的状态,您可能会看到与不正确的标签和选择器相关的错误。下面的例子说明了这个概念。请注意,标签区分大小写。确保您在YAML文件中使用了正确的标签和选择器,并仔细检查拼写错误。#Thisisanerrordemonstration,fromStackOverflow,问题是第13行app的值与第18行的值不匹配apiVersion:apps/v1kind:ReplicaSetmetadata:name:label-demolabels:environment:productionapp:nginxspec:副本:3选择器:匹配标签:应用程序:应用程序1模板:元数据:标签:环境:生产应用程序:nginx规范:容器:-名称:nginx图像:nginx:1.7.92。忽略健康检查在Kubernetes中部署服务时,健康检查对于维护服务起着至关重要的作用。在Kubernetes中,健康检查的使用率非常低。通过健康检查,您可以密切关注pod及其容器的健康状况。Kubernetes具有三个主要的健康检查工具。Startup探测确认Pod已成功启动和创建。Liveliness探测器将告诉您应用程序是否处于活动状态。Readness探测器确保应用程序可以成功接收请求。3.始终使用默认命名空间命名空间(namespace)允许你对不同的资源进行分组,比如部署(Deployment)和服务(Service)。当多个团队在同一产品或基于微服务的应用程序上工作时,命名空间是必不可少的。在开发环境中,使用默认命名空间可能没有问题,但如果在执行命令时没有提到命名空间,在生产中可能会出现问题。请记住,如果您不提及任何命名空间,您将不会看到错误,但服务或部署将应用于默认命名空间,而不是您想要的命名空间。请看下面的例子。#错误,未指定命名空间kubectlapply-fdeployment.yamlKubectlapplication-floyalty.yaml#正确,使用--namespace指定命名空间kubectlapply-fdeployment.yaml--namespaceproduction-apiKubectlapplication-f4。使用“latest”标签很多用户认为“latest”标签(Tag)总是指向最新推送的镜像版本,其实不然。“最新”标签并不总是部署您认为的最新版本。在部署上使用“最新”,您将无法回滚到以前的版本。使用明确的版本标签将确保始终部署正确的版本,同时允许您的团队使用以前已知版本的标签来控制回滚。5.缺乏监控和日志记录构建Kubernetes的一个陷阱是忽视了适当的监控和日志记录。您应该设置一个日志聚合服务器和监控系统来监控您的应用程序。这不仅可以帮助您发现系统中的各种瓶颈,还可以帮助您衡量和优化Kubernetes集群的性能。强大的监控系统包括针对各种资源指标的警报和通知。如前所述,Kubernetes很复杂,因此您需要适当的监控和日志记录来排查和解决不同的问题。采用强大的监控系统对于Kubernetes系统的平稳运行和主动??管理至关重要。由于原生监控工具缺少日志聚合、跟踪审计事件和警报通知等许多有用的功能,因此最好使用第三方工具进行日志记录和监控。6.Pod和服务端口映射错误如果您看到“连接被拒绝”或“容器未响应”错误,那么这可能是映射到服务的容器端口不正确。这是因为服务中的两个参数彼此相似。一个是“Targetport”,一个是“port”,很容易混淆导致这个问题。请注意,您服务的“targetPort”是服务将流量转发到的Pod中的端口。下图说明了这一点。“端口”参数是指服务本身暴露给接入端的端口。7.Crashloopbackoff错误Kubernetes另一个经常出现的错误是Crashloopbackoff。当pod正在运行时会发生这种情况,但其中一个容器由于终止而不断重新启动。结果,容器一直卡在开始-崩溃-开始-崩溃的循环中。导致此错误的原因有很多。可能是简单的配置文件错字、内存不足、配置不正确等,需要查看pod描述和日志,排查并修复根本原因。
