Kubernetes吊舱正在运行,但docker ps不提供任何输出
我一直在尝试使用kubernetes在集群上的端口5000上运行tomcat容器。但是当我使用kubectl create-f tmocate_pod.yaml时,它会创建pod,但docker ps不会给出任何输出。为什么会这样 理想情况下,当它运行一个pod时,它意味着它正在该pod内运行一个容器,并且该容器在yaml文件中定义。 为什么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
如何让它运行并看到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"