我一直在尝试使用kubernetes在集群上的端口5000上运行tomcat容器。但是当我使用kubectl create -f tmocat_pod.yaml时,它会创建pod但是docker ps不会提供任何输出。为什么会这样?
理想情况下,当它运行一个pod时,意味着它在该pod中运行一个容器,该容器在yaml文件中定义。为什么docker ps没有显示任何容器正在运行?我关注以下网址:
如何让它运行并在端口5000上看到tomcat在浏览器上运行。
docker容器应该在虚拟机上运行。由于我只在我的本地机器上安装了minikube,我确认以下内容会带来你想要的东西:
minikub ssh
...
docker ps
试试相当于minikube ssh
的kubernetes。
我不确定你在哪里运行docker ps
命令,但如果你试图从你的主机上做到这一点并且k8s集群位于其他地方,即你的机器不是集群中的节点,docker ps
将不会返回任何内容容器未绑定到docker主机。
假设您的pod正在运行,kubectl get pods
将显示所有正在运行的pod。要查看更多详细信息,您可以使用kubectl describe pod <yourpodname>
检查每个容器的状态(非常详细)。要获取pod名称,您应该能够使用tab-complete和kubernetes cli。此外,如果您的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
...
如果您的容器和容器已在运行,那么您不需要对它们进行太多故障排除。要使它们可以从公共互联网访问,请查看服务(https://kubernetes.io/docs/concepts/services-networking/service/)以使您的API的IP地址固定且易于访问。
在Kubernetes中,Docker容器在Pod上运行,Pod在节点上运行,节点在您的机器上运行(minikube / GKE)
当你运行kubectl create -f tmocat_pod.yaml
时,你基本上创建了一个pod,它在该pod上运行docker容器。
保存此pod的节点基本上是一个虚拟实例,如果你可以“SSH”进入该节点,docker ps就可以了。
你需要的是:kubectl get pods
kubectl get nodes
你的pods的kubectl describe pods <pod-name>
系统日志。
kubectl logs <pod-name>
您是否尝试过“docker ps -a”来查看容器是否已经死了?如果它在那里你可以看到它的日志与“docker logs”,也许这会给你一个提示。
如果您的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服务的参数之一是--container-runtime-endpoint=unix:///var/run/cri-containerd.sock