我一直在尝试使用Kubernetes在集群的端口5000上运行Tomcat容器。但是当我使用kubectl create-f tmocat_pod.yaml时,它会创建Pod,但docker ps不会给出任何输出。为什么会这样呢?
理想情况下,当它运行Pod时,这意味着它在该Pod中运行一个容器,并且该容器在YAML文件中定义。为什么码头PS没有显示任何正在运行的集装箱?我遵循以下URL:
- http://containertutorials.com/get_started_kubernetes/k8s_example.html
- https://blog.jetstack.io/blog/k8s-getting-started-part2/
我如何让它运行并看到Tomcat在端口5000上的浏览器上运行。
8条答案
按热度按时间3zwtqj6y1#
停靠容器应该在虚拟机上运行。由于我只在本地机器上安装了mini kube,所以我确认以下内容将带来您想要的东西:
试试kubernetes版的
minikube ssh
吧。uajslkp62#
您可以将您的终端连接到在您的Node/VM内部运行的扩展底座服务器。
在您的终端中使用命令:
eval $(minikube docker-env)
91zkwejq3#
您可能没有使用docker作为容器运行时。我遇到了同样的问题,我忘记了我切换到了使用
runsc
作为处理程序的gVisor。如果是这样的话,您需要使用
runsc
命令而不是docker。xa9qqrwz4#
在Kubernetes中,Docker Contaienr在Pod上运行,Pod在节点上运行,节点在您的机器上运行(mini kube/GKE)
当您运行
kubectl create -f tmocat_pod.yaml
时,您基本上创建了一个Pod,它在该Pod上运行停靠容器。持有该Pod的节点基本上是一个虚拟示例,如果您可以通过SSH连接到该节点,那么docker PS就可以工作了。
您需要的是:
kubectl get pods
<--它就像Docker PS,它向您显示正在运行的所有Pod(可以将其视为Docker容器kubectl get nodes
<--查看Pod的主机。kubectl describe pods <pod-name>
<--查看Pod的系统日志。kubectl logs <pod-name>
<--将为您提供特定Pod的日志。fwzugrvs5#
我不确定您在哪里运行
docker ps
命令,但如果您尝试从您的主机执行此操作,而K8S集群位于其他位置,即您的机器不是集群中的节点,则docker ps
不会返回任何内容,因为容器没有绑定到您的坞站主机。假设您的Pod正在运行,
kubectl get pods
将显示您正在运行的所有Pod。要查看更多详细信息,可以使用kubectl describe pod <yourpodname>
检查每个容器的状态(更详细)。要获取Pod名称,您应该能够使用带有Kubernetes cli的Tab-Complete。此外,如果您的Pod包含多个容器,您还需要提供容器名称,您可以在选择Pod之后使用Tab-Complete键。输出将类似于:
如果您的容器和Pod已经在运行,那么您应该不需要对它们进行太多的故障排除。要使它们可以从公共互联网访问,请查看服务(https://kubernetes.io/docs/concepts/services-networking/service/),以使您的API的IP地址固定且易于访问。
crcmnpdw6#
你有没有试过“docker ps-a”,看看集装箱是不是死了?如果它在那里,你可以看到它的日志和“码头日志”,也许这给了你一个提示。
xfyts7mz7#
如果您的Pod运行成功,并且您正在调度Pod的节点上查找容器,则问题可能是Kubernetes正在使用不同的容器运行时。
示例
在这里,我能够执行pod,并且我在调度pod的同一节点中,但是
docker ps
没有显示容器。在我的例子中,kubelet使用不同的容器运行时,kubelet服务的一个参数是--container-runtime-endpoint=unix:///var/run/cri-containerd.sock
7lrncoxx8#
从Kubernetes documentation获取系统上运行的容器镜像:
然后,你会得到类似的结果: