仪表板未运行

时间:2020-03-28 13:15:11

标签: kubernetes

我使用this链接在ubuntu服务器上设置了kubenertes。

然后我使用以下命令安装了kubernetes仪表板:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-rc6/aio/deploy/recommended.yaml

然后我将ClusterIP更改为NodePort 32323,将服务更改为NodePort。

但是容器没有运行。

uday@dockermaster:~$ kubectl -n kubernetes-dashboard get all
NAME                                             READY   STATUS             RESTARTS   AGE
pod/dashboard-metrics-scraper-779f5454cb-pqfrj   1/1     Running            0          50m
pod/kubernetes-dashboard-64686c4bf9-5jkwq        0/1     CrashLoopBackOff   14         50m

NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
service/dashboard-metrics-scraper   ClusterIP   10.103.22.252   <none>        8000/TCP        50m
service/kubernetes-dashboard        NodePort    10.102.48.80    <none>        443:32323/TCP   50m

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/dashboard-metrics-scraper   1/1     1            1           50m
deployment.apps/kubernetes-dashboard        0/1     1            0           50m

NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/dashboard-metrics-scraper-779f5454cb   1         1         1       50m
replicaset.apps/kubernetes-dashboard-64686c4bf9        1         1         0       50m

uday@dockermaster:~$ kubectl -n kubernetes-dashboard describe svc kubernetes-dashboard
Name:                     kubernetes-dashboard
Namespace:                kubernetes-dashboard
Labels:                   k8s-app=kubernetes-dashboard
Annotations:              Selector:  k8s-app=kubernetes-dashboard
Type:                     NodePort
IP:                       10.102.48.80
Port:                     <unset>  443/TCP
TargetPort:               8443/TCP
NodePort:                 <unset>  32323/TCP
Endpoints:
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

无论是Tomcat / nginx /数据库,其他应用程序都可以与NodePort正常运行。

但是在这里,创建容器失败了。

C:\Users\uday\Desktop>kubectl.exe get pods -n kubernetes-dashboard
NAME                                         READY   STATUS             RESTARTS   AGE
dashboard-metrics-scraper-779f5454cb-pqfrj   1/1     Running            1          20h
kubernetes-dashboard-64686c4bf9-g9z2k        0/1     CrashLoopBackOff   84         18h

C:\Users\uday\Desktop>kubectl.exe describe pod kubernetes-dashboard-64686c4bf9-g9z2k -n kubernetes-dashboard
Name:         kubernetes-dashboard-64686c4bf9-g9z2k
Namespace:    kubernetes-dashboard
Priority:     0
Node:         slave-node/10.0.0.6
Start Time:   Sat, 28 Mar 2020 14:16:54 +0000
Labels:       k8s-app=kubernetes-dashboard
              pod-template-hash=64686c4bf9
Annotations:  <none>
Status:       Running
IP:           182.244.1.12
IPs:
  IP:           182.244.1.12
Controlled By:  ReplicaSet/kubernetes-dashboard-64686c4bf9
Containers:
  kubernetes-dashboard:
    Container ID:  docker://470ee8c61998c3c3dda86c58ad17817468f55aa73cd4feecf3b018977ce13ca3
    Image:         kubernetesui/dashboard:v2.0.0-rc6
    Image ID:      docker-pullable://kubernetesui/dashboard@sha256:61f9c378c427a3f8a9643f83baa9f96db1ae1357c67a93b533ae7b36d71c69dc
    Port:          8443/TCP
    Host Port:     0/TCP
    Args:
      --auto-generate-certificates
      --namespace=kubernetes-dashboard
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    2
      Started:      Sun, 29 Mar 2020 09:01:31 +0000
      Finished:     Sun, 29 Mar 2020 09:02:01 +0000
    Ready:          False
    Restart Count:  84
    Liveness:       http-get https://:8443/ delay=30s timeout=30s period=10s #success=1 #failure=3
    Environment:    <none>
    Mounts:
      /certs from kubernetes-dashboard-certs (rw)
      /tmp from tmp-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from kubernetes-dashboard-token-pzfbl (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  kubernetes-dashboard-certs:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  kubernetes-dashboard-certs
    Optional:    false
  tmp-volume:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
    SizeLimit:  <unset>
  kubernetes-dashboard-token-pzfbl:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  kubernetes-dashboard-token-pzfbl
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  beta.kubernetes.io/os=linux
Tolerations:     node-role.kubernetes.io/master:NoSchedule
                 node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason   Age                     From                 Message
  ----     ------   ----                    ----                 -------
  Warning  BackOff  4m49s (x501 over 123m)  kubelet, slave-node  Back-off restarting failed container

kubectl.exe logs kubernetes-dashboard-64686c4bf9-g9z2k -n kubernetes-dashboard
2020/03/29 09:01:31 Starting overwatch
2020/03/29 09:01:31 Using namespace: kubernetes-dashboard
2020/03/29 09:01:31 Using in-cluster config to connect to apiserver
2020/03/29 09:01:31 Using secret token for csrf signing
2020/03/29 09:01:31 Initializing csrf token from kubernetes-dashboard-csrf secret
panic: Get https://10.96.0.1:443/api/v1/namespaces/kubernetes-dashboard/secrets/kubernetes-dashboard-csrf: dial tcp 10.96.0.1:443: i/o timeout

goroutine 1 [running]:
github.com/kubernetes/dashboard/src/app/backend/client/csrf.(*csrfTokenManager).init(0xc0004e2dc0)
    /home/travis/build/kubernetes/dashboard/src/app/backend/client/csrf/manager.go:40 +0x3b0
github.com/kubernetes/dashboard/src/app/backend/client/csrf.NewCsrfTokenManager(...)
    /home/travis/build/kubernetes/dashboard/src/app/backend/client/csrf/manager.go:65
github.com/kubernetes/dashboard/src/app/backend/client.(*clientManager).initCSRFKey(0xc00043ae80)
    /home/travis/build/kubernetes/dashboard/src/app/backend/client/manager.go:499 +0xc6
github.com/kubernetes/dashboard/src/app/backend/client.(*clientManager).init(0xc00043ae80)
    /home/travis/build/kubernetes/dashboard/src/app/backend/client/manager.go:467 +0x47
github.com/kubernetes/dashboard/src/app/backend/client.NewClientManager(...)
    /home/travis/build/kubernetes/dashboard/src/app/backend/client/manager.go:548
main.main()
    /home/travis/build/kubernetes/dashboard/src/app/backend/dashboard.go:105 +0x20d

1 个答案:

答案 0 :(得分:2)

问题

应用程序无法启动的原因是仪表板容器本身未运行。如果查看提供的输出,则可以看到以下内容:

pod/kubernetes-dashboard-64686c4bf9-5jkwq 0/1 CrashLoopBackOff 14

那我们如何troubleshoot呢?嗯,有三种主要方法。其中一种您可能会比其他两种使用更多。

描述

Describe是一个命令,可让您获取有关kubernetes中资源的详细信息。这可能是元数据信息,您分配的副本数量,甚至是一些描述资源启动失败的事件。例如,在可用的容器注册表中找不到Pod清单中引用的容器映像。使用Describe的语法如下:

kubectl describe pod -n kubernetes-dashboard kubernetes-dashboard-64686c4bf9-5jkwq

在此工具上也有一些很棒的文档。

日志

您可能会在Kubernetes中利用的下一个故障排除步骤是使用logging architecture。您可能已经知道,派生Docker容器时,通常的做法是将应用程序生成的日志重定向到STDOUTSTDERR进行处理。 Kubernetes他们为您捕获此日志数据,并提供一个API抽象层,您可以与之交互。有时,您的Describe事件不会指示进程为何未运行。但是,您可以从过程中继续进行grabbing logs,以确定出了什么问题。语法示例如下:

kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-64686c4bf9-5jkwq

执行

最后一种常见的故障排除技术是Exec。 Exec有效地使您可以将附件附加到正在运行的容器中的shell上,以便可以在实时环境中interact对应用程序进行故障排除。这使您可以执行以下操作,例如查看配置​​文件是否正确放置在容器的文件系统上,确定环境变量是否正确展开和设置等。Exec的示例语法可能如下:

kubectl exec -it -n kubernetes-dashboard kubernetes-dashboard-64686c4bf9-5jkwq sh

但是,在这种情况下,您的Pod处于CrashLoopBackoff状态。这意味着由于容器未运行,您将无法执行它。 Kubernetes API Server识别出一种故障模式,并自动减少了相应地调度工作负载的尝试。

这里有一个很好的thread on how to troubleshoot豆荚进入了这种状态。

摘要

现在,我已经说完了所有这些。我们如何回答您的问题?好吧,我们不能直接回答。但是我对上面的总结做了一些处理。因为您要寻找的真正答案是如何正确解决在Kubernetes中运行的linux容器的问题。这些问题将是您使用Kubernetes时反复出现的主题,因此尽快开发生态系统中的调试技能至关重要。

如果DescribeLogsExec命令无法帮助您找出Dashboard窗格无法显示的原因,请随时在此答案上添加注释请求其他支持,我们将竭诚为您服务!