kubernetes集群故障排查的几种方法

1.kubectl describe

查看资源的详细信息,根据事件信息获取当前资源的状态,从而给出解决方案。
[root@master231 pod]# kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
image-resources-stress-04   0/1     Pending   0          2m13s
[root@master231 pod]# 

	三种查看方式:
[root@master231 pod]# kubectl describe -f 06-pods-resources.yaml 
[root@master231 pod]# kubectl describe pod image-resources-stress-04 
[root@master231 pod]# kubectl describe pod/image-resources-stress-04 
...
Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  24s (x3 over 2m32s)  default-scheduler  0/3 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 2 Insufficient memory.
[root@master231 pod]# 





[root@master231 pod]# kubectl get pods -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP       NODE      NOMINATED NODE   READINESS GATES
image-resources-stress-04   0/1     Pending   0          23s   <none>   work232   <none>           <none>
[root@master231 pod]# 
[root@master231 pod]# kubectl describe pod image-resources-stress-04 
Name:         image-resources-stress-04
Namespace:    default
Priority:     0
# 观察当前的Node字段名称,和"kubectl get nodes "的NAME是否相同。
Node:         work232/
Labels:       <none>
Annotations:  <none>
Status:       Pending
....
# 如下所示,没有发现时间,此时可能是调度的节点不存在,请对比Node名称是否正确。
Events:                      <none>
[root@master231 pod]# 
[root@master231 pod]# kubectl get pods -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP       NODE      NOMINATED NODE   READINESS GATES
image-resources-stress-04   0/1     Pending   0          27s   <none>   work232   <none>           <none>
[root@master231 pod]# 
[root@master231 pod]# 
[root@master231 pod]# kubectl get nodes 
NAME        STATUS   ROLES                  AGE   VERSION
master231   Ready    control-plane,master   26h   v1.23.17
worker232   Ready    <none>                 26h   v1.23.17
worker233   Ready    <none>                 26h   v1.23.17
[root@master231 pod]# 

2.kubectl logs


kubectl logs <pod-name> -c <container-name>

将`<pod-name>`替换为要查看其日志的Pod的实际名称,并选择性地将`<container-name>`替换为要查看其日志的特定容器的名称(如果Pod中有多个容器)。

假设有一个名为`my-pod`的Pod,其中包含一个名为`my-container`的容器,可以使用以下命令查看该容器的日志:

kubectl logs my-pod -c my-container

3.kubectl exec

[root@master231 pod]#kubectl exec --help

连接到指定容器查看
[root@master231 pod]# kubectl get pods
NAME           READY   STATUS    RESTARTS   AGE
linux-web    1/1     Running   0          102s
linux-wp   2/2     Running   0          50s
[root@master231 pod]# 
[root@master231 pod]# kubectl exec -it linux-web -- sh  # 当一个Pod内只有一个容器时,无需使用-c选项。


[root@master231 pod]# kubectl exec -it linux-wp -c wp -- bash  # 当Pod内有多个容器时,可以使用-c选项连接到指定的容器。若不指定,默认连接到第一个容器。

4.kubectl get

kubectl get命令用于获取Kubernetes集群中的资源信息。通过该命令,可以列出各种资源的状态、名称、标签和其他详细信息。要使用kubectl get命令,需要指定要获取的资源类型。

1. 列出所有Pods:
kubectl get pods

2. 列出所有Services:
kubectl get services

3. 列出所有Deployments:
kubectl get deployments

4. 列出所有Nodes:
kubectl get nodes

还可以通过添加选项来进一步筛选和查看资源。例如使用`-n`选项指定命名空间,或使用`-l`选项按标签进行过滤。

5.kubectl cp

kubectl cp命令用于在本地计算机和Kubernetes Pod之间复制文件或目录。这个命令很有用,可以轻松地从Pod中复制文件到本地计算机,或者将本地文件复制到Pod中。

以下是kubectl cp命令的基本语法:
kubectl cp <source> <destination>

- `<source>` 是源路径,可以是本地文件或目录,也可以是Pod中的文件或目录。
- `<destination>` 是目标路径,指定要将文件或目录复制到哪里,同样可以是本地文件或目录,也可以是Pod中的文件或目录。


1. 从Pod中复制文件到本地计算机:
kubectl cp <namespace>/<pod-name>:<path/to/file> <local/destination/path>

2. 将本地文件复制到Pod中:
kubectl cp <local/source/path> <namespace>/<pod-name>:<path/inside/pod>
posted @ 2024-02-07 12:30  只为心情愉悦  阅读(40)  评论(0编辑  收藏  举报