Kubernetes吊舱正在运行,但docker ps不提供任何输出

Kubernetes吊舱正在运行,但docker ps不提供任何输出,docker,kubernetes,Docker,Kubernetes,我一直在尝试使用kubernetes在集群上的端口5000上运行tomcat容器。但是当我使用kubectl create-f tmocate_pod.yaml时,它会创建pod,但docker ps不会给出任何输出。为什么会这样 理想情况下,当它运行一个pod时,它意味着它正在该pod内运行一个容器,并且该容器在yaml文件中定义。 为什么docker ps不显示任何正在运行的容器? 我以下网址: 如何让它运行并看到tomcat在5000端口的浏览器上运行。您是否尝试过“docker

我一直在尝试使用kubernetes在集群上的端口5000上运行tomcat容器。但是当我使用kubectl create-f tmocate_pod.yaml时,它会创建pod,但docker ps不会给出任何输出。为什么会这样

理想情况下,当它运行一个pod时,它意味着它正在该pod内运行一个容器,并且该容器在yaml文件中定义。 为什么docker ps不显示任何正在运行的容器? 我以下网址:


如何让它运行并看到tomcat在5000端口的浏览器上运行。

您是否尝试过“docker ps-a”来查看容器是否已死亡?如果它在那里,您可以看到带有“docker logs”的日志,这可能会给您一个提示。

我不确定您在哪里运行
docker ps
命令,但是如果您试图从主机执行此操作,并且k8s集群位于其他位置,即您的计算机不是集群中的节点,
docker ps
不会返回任何内容,因为容器未绑定到docker主机

假设你的吊舱正在运行,
kubectl get pods
将显示你所有的跑步吊舱。要查看更多详细信息,您可以使用
kubectl descripe pod
查看每个容器的状态(非常详细)。要获取pod名称,您应该能够使用tab complete和kubernetes cli。此外,如果您的pod包含多个容器,您还需要提供容器名称,您可以在选择pod后使用tab complete

输出将类似于:

kubectl describe pod comparison-api-dply-reborn-6ffb88b46b-s2mtx
Name:           comparison-api-dply-reborn-6ffb88b46b-s2mtx
Namespace:      default
Node:           aks-nodepool1-99697518-0/10.240.0.5
Start Time:     Fri, 20 Apr 2018 14:08:21 -0400
Labels:         app=comparison-pod-reborn
                pod-template-hash=2996446026
...
Status:         Running
IP:             *.*.*.*
Controlled By:  ReplicaSet/comparison-api-dply-reborn-6ffb88b46b
Containers:
  rabbit-mq:
    ...
    Port:           5672/TCP
    State:          Running
    ...

如果您的容器和吊舱已经在运行,那么您不需要对它们进行太多的故障排除。要使它们可以从公共Internet访问,请查看服务()以使API的IP地址固定且易于访问。

如果pod运行成功,并且如果您正在计划pod的节点上查找容器,则问题可能是kubernetes正在使用不同的容器运行时

范例

root@renjith-laptop:/home/renjith/raspbery-k8s# kubectl exec -it nginx-8586cf59-h92ct bash
root@nginx-8586cf59-h92ct:/# exit
exit
root@renjith-laptop:/home/renjith/raspbery-k8s# kubectl get po -o wide
NAME                   READY     STATUS    RESTARTS   AGE       IP         NODE
nginx-8586cf59-h92ct   1/1       Running   0          47s      10.20.0.3   renjith-laptop
root@renjith-laptop:/home/renjith/raspbery-k8s# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
root@renjith-laptop:/home/renjith/raspbery-k8s#

在这里,我可以执行pod,并且我在调度pod的同一个节点中,但是
docker ps
不显示容器。在我的例子中,kubelet使用不同的容器运行时,kubelet服务的一个参数是
--容器运行时端点=unix:///var/run/cri-containerd.sock

docker容器应该在虚拟机上运行。由于我只在本地机器上安装了minikube,因此我确认以下内容将满足您的要求:

minikub ssh
...
docker ps

在kubernetes中,Docker contaienrs在Pods上运行,Pods在节点上运行,节点在您的机器上运行(minikube/GKE)

当您运行
kubectl create-f tmocate_pod.yaml时,您基本上创建了一个pod,它在该pod上运行docker容器

持有这个pod的节点基本上是一个虚拟实例,如果您可以“SSH”到该节点,docker ps就可以工作

您需要的是:
kubectl get pods
您可以将终端连接到节点/VM中运行的docker服务器

在终端中使用此命令
eval$(minikube docker env)

  • 这仅配置当前的终端窗口


    • 可能是您没有使用docker作为容器运行时。 我面临着同样的问题,我忘记了我用
      runsc
      作为处理程序切换到gVisor

      cat/etc/default/kubelet
      

      如果是这样,您需要使用
      runsc
      命令而不是docker。

      只需检查:您是否可能正在主机上执行
      docker ps
      ,并且pod是在另一个节点上安排的?我有同样的问题,我正在手动设置kubernetes节点,作为初始阶段,我只有一个节点是主节点,令人惊讶的是,kubectl显示我的nginx pod成功运行,但它没有成功运行。为了调试,我检查了docker ps-a,它没有显示containerIt也没有列出。我如何从浏览器访问在pod内运行的tomcat容器?
      KUBELET_EXTRA_ARGS="--container-runtime remote --container-runtime-endpoint unix:///run/containerd/containerd.sock"