从 Docker 迁徙到 Docker Swarm,再到 Kubernetes,而后解决了多年来的所有各种 API 更改之后,我十分乐意发现部署中呈现的问题和把问题进行修复。
我明天分享下我认为最有用的 5 条故障排除技巧,以及一些其余的应用技巧。
kubectl –“瑞士军刀”
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,以此类推。这表明您的部署已被承受,并已尝试进行部署。
接下来,您可能须要查看 kubectl get pod,以查看部署的后备 Pod 是否正确启动。
- kubectl get events
我感到诧异的是,我不得不常常向与 Kubernetes 有问题的人们解释这个小技巧。此命令将打印出给定名称空间中的事件,非常适合查找关键问题,例如解体的 pod 或无奈 pull 容器镜像。
Kubernetes 中的日志是“未排序的”,因而,您将须要增加以下内容,这些内容取自 OpenFaaS 文档。
$ kubectl get events –sort-by=.metadata.creationTimestamp kubectl get 事件的另一个靠近的命令是是 kubectl describe,就像 get deploy / pod 一样,它与对象的名称一起工作:
kubectl describe deploy/figlet -n openfaas
您会在这里取得十分具体的信息。您能够形容大多数事件,包含节点,这些节点将显示因为资源限度或其余问题而无奈启动 Pod。
- 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,应用这个简化编辑器。
- kubectl scale 您关上和敞开它了吗?
Kubectl scale 可用于将 Deployment 及其 Pod 放大为零个正本,实际上杀死了所有正本。当您将其缩放回 1 / 1 时,将创立一个新的 Pod,重新启动您的应用程序。语法非常简单,您能够重新启动代码并再次进行测试。
kubectl scale deploy/nginx-1 --replicas=0
kubectl scale deploy/nginx-1 --replicas=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