当前位置: 首页 > 科技观察

在Kubernetes上排除应用程序故障的6个技巧

时间:2023-03-17 11:23:15 科技观察

在从Docker迁移到DockerSwarm再到Kubernetes之后,然后处理了多年来所有各种API更改,我非常乐意发现部署问题并将其解决。问题已解决。今天,我分享了我认为最有用的5个故障排除技巧,以及使用它们的一些其他技巧。kubectl–“瑞士军刀”kubectl是我们的瑞士军刀,我们经常在出错时使用它们,出错时如何使用它们非常重要,让我们从5个“实际用例”开始,看看如何使用他们在出现问题时。情况将是:我的YAML被接受,但我的服务没有启动,它启动了但不起作用。1、kubectlgetdeployment/pods命令之所以这么重要,是因为它不需要显示很多内容就可以显示有用的信息。如果你想为你的工作负载使用部署,你有两个选择:kubectlgetdeploykubectlgetdeploy-nnamespaceskubectlgetdeploy--all-namespaces[or"-A"]理想情况下你想看到1/1或2/2的等效值,并且很快。这表示您的部署已被接受并且已尝试部署。接下来,您可能想查看kubectlgetpods以查看部署的后备pod是否正确启动。2.kubectlgetevents我很惊讶我不得不经常向遇到Kubernetes问题的人解释这个小技巧。此命令将打印出给定命名空间中的事件,非常适合查找崩溃的pod或无法拉取容器映像等关键问题。Kubernetes中的日志是“无序的”,因此您需要添加以下内容,这些内容取自OpenFaaS文档。$kubectlgetevents--sort-by=.metadata.creationTimestampkubectlgetevents的另一个关闭命令是kubectldescribe,和getdeploy/pod一样,它与对象的名称一起工作:kubectldescribedeploy/figlet-nopenfaas你会在这里Get非常详细的信息。你可以描述大多数东西,包括节点,这将显示由于资源限制或其他问题而无法启动Pod。更多:什么,太多容器无法处理?我选择的是DockerComposeStud3,kubectllogs这个命令想必大家都经常用到,但是很多人用错了。如果您进行部署,比如说cert-manager命名空间中的cert-manager,许多人认为他们首先必须找到pod的长(唯一)名称并将其用作参数。错误的。kubectllogsdeploy/cert-manager-ncert-manager要跟踪日志,添加-fkubectllogsdeploy/cert-manager-ncert-manager-f你可以将这三个结合起来。如果您的Deployment或Pod有任何标签,您可以使用-lapp=name或任何其他标签集附加到一个或多个匹配Pod的日志中。kubectllogs-lapp=nginx有像stern和kail这样的工具,可以帮助你匹配模式并节省你的输入时间,但我发现它们会让人分心。4.kubectlget-oyaml当您开始使用由另一个项目或其他工具(如Helm)生成的YAML时,您很快就会需要它。在生产中检查图像的版本或您在某处设置的注释也很有用。kubectlrunnginx-1--image=nginx--port=80--restart=Alwaysoutputyamllkubectlgetdeploy/nginx-1-oyaml现在我们知道了。并且,我们可以添加--export并将YAML保存到本地,以便再次编辑和应用。实时编辑YAML的另一个选项是kubectledit,如果您对vim感到困惑并且不知道如何使用它,请在命令前加上VISUAL=nano以使用这个简化的编辑器。5.kubectlscale是否开启关闭?Kubectlscale可用于将Deployment及其Pod缩减为零副本,从而有效地杀死所有副本。当您将其缩小到1/1时,将创建一个新的pod,并重新启动您的应用程序。语法非常简单,您可以重新启动代码并再次测试。kubectlscaledeploy/nginx-1--replicas=0kubectlscaledeploy/nginx-1--replicas=16。端口转发我们需要这个技巧,通过kubectl的端口转发允许我们在本地或远程集群服务上公开我们自己的机器上的项目,以便可以在任何配置的端口上访问它,而无需在Internet上公开它。下面是一个在本地访问Nginx部署的示例:kubectlport-forwarddeploy/nginx-18080:80有些人认为这仅适用于部署或pod,这是错误的。服务之间的公平性通常是转发的选择,因为它们将模仿生产集群中的配置。如果你真的想在互联网上暴露你的服务,你通常会使用LoadBalancer服务,或者运行kubectl来暴露:kubectlexposedeploymentnginx-1--port=80--type=LoadBalancer技巧已经结束,你现在可以试试,我希望你发现这6个命令和技巧有效,现在你可以在真实的集群上测试它们。