Kubernetes 上对应用程序进行故障排除的 6 个技巧

从 Docker 迁移到 Docker Swarm,再到 Kubernetes,而后处理了多年来的全部各类 API 更改以后,我很是乐意发现部署中出现的问题和把问题进行修复。nginx

我今天分享下我认为最有用的5条故障排除技巧,以及一些其余的使用技巧。vim

kubectl –“瑞士军刀”app

kubectl 就是咱们的瑞士军刀,咱们常常在出现问题的时候使用他们,在出现问题如何使用他们很重要,让咱们从5个“实际案例”开始,看出现问题时如何使用它们。编辑器

状况将是:个人YAML已被接受,但个人服务未启动且已启动,但没法正常工做。工具

1.kubectl get deployment/pods

这个命令如此重要的缘由是它无需显示大量内容便可显示颇有用的信息。若是要为工做负载使用部署,则有两种选择:测试

kubectl get deploy
kubectl get deploy -n  名称空间
kubectl get deploy –all-namespaces [或“ -A”]

理想状况下,您但愿看到的是1/1或等值的2/2,以此类推。这代表您的部署已被接受,并已尝试进行部署。spa

接下来,您可能须要查看kubectl get pod,以查看部署的后备Pod是否正确启动。rest

  1. kubectl get events

我感到惊讶的是,我不得不常常向与Kubernetes有问题的人们解释这个小技巧。此命令将打印出给定名称空间中的事件,很是适合查找关键问题,例如崩溃的pod或没法pull容器镜像。日志

Kubernetes中的日志是“未排序的”,所以,您将须要添加如下内容,这些内容取自OpenFaaS文档。code

$ kubectl get events --sort-by=.metadata.creationTimestamp kubectl get事件的另外一个接近的命令是是kubectl  describe,就像get deploy / pod同样,它与对象的名称一块儿工做:

kubectl describe deploy/figlet -n openfaas

您会在这里得到很是详细的信息。您能够描述大多数事情,包括节点,这些节点将显示因为资源限制或其余问题而没法启动 Pod。

  1. kubectl logs

这个命令确定常常你们常用,但不少人使用了错误的方式。

若是您进行了部署,比方说cert-manager命名空间中的cert-manager,那么不少人认为他们首先必须找到Pod的长(惟一)名称并将其用做参数。不对。

kubectl logs deploy/cert-manager -n cert-manager

要跟踪日志,请添加-f

kubectl logs deploy/cert-manager -n cert-manager -f

您能够将全部三个结合起来。

若是您的 Deployment 或 Pod 有任何标签,则可使用 -l app = name 或任何其余标签集来附加到一个或多个匹配Pod的日志中。

kubectl logs -l app=nginx

有一些工具,例如 stern 和 kail,能够帮助您匹配模式并节省一些键入操做,但我发现它们会分散您的注意力。

4.kubectl get -o yaml

当您开始使用由另外一个项目或诸如Helm之类的其余工具生成的YAML时,您将很快须要它。在生产中检查镜像的版本或您在某处设置的注释也颇有用。

kubectl run nginx-1 --image=nginx --port=80 --restart=Always

输出yaml

kubectl get deploy/nginx-1 -o yaml

如今咱们知道了。并且,咱们能够添加–export并将YAML保存在本地以进行编辑并再次应用。

实时编辑YAML的另外一个选项是kubectl edit,若是您对vim感到困惑,不知道如何使用,请在命令前加上VISUAL = nano,使用这个简化编辑器。

  1. kubectl scale  您打开和关闭它了吗?

Kubectl scale可用于将Deployment及其Pod缩小为零个副本,实际上杀死了全部副本。当您将其缩放回1/1时,将建立一个新的Pod,从新启动您的应用程序。语法很是简单,您能够从新启动代码并再次进行测试。

kubectl scale deploy/nginx-1 --replicas=0
kubectl scale deploy/nginx-1 --replicas=1
  1. Port forwarding

咱们须要这个技巧, 经过kubectl进行的端口转发使咱们能够在咱们本身计算机上的本地或远程群集上公开一项服务,以便在任何已配置的端口上访问它,而无需在Internet上公开它。

如下是在本地访问Nginx部署的示例:

kubectl port-forward deploy/nginx-1 8080:80

有人认为这仅适用于部署或Pod,这是错误的。服务间是公平的,一般是转发的选择,由于它们将模拟生产集群中的配置。

若是您确实想在Internet上公开服务,一般会使用LoadBalancer服务,或运行kubectl暴露:

kubectl expose deployment nginx-1 --port=80 --type=LoadBalancer

技巧说完了,能够如今尝试一下,我但愿您发现这6条命令和技巧有用, 如今,您能够在真实的集群上对其进行测试了。

来源:https://www.mindg.cn/?p=2578

image

相关文章
相关标签/搜索