我一直在尝试使用kubernetes在群集上的端口5000上运行tomcat容器。但是当我使用kubectl create -f tmocat_pod.yaml时,它会创建pod但是docker ps不会提供任何输出。为什么会这样?
理想情况下,当它运行pod时,意味着它正在该pod中运行容器,并且该容器在yaml文件中定义。 为什么docker ps没有显示任何容器正在运行? 我关注以下网址:
如何让它运行并在端口5000上看到tomcat在浏览器上运行。
答案 0 :(得分:3)
docker容器应在虚拟机上运行。由于我只在本地计算机上安装了minikube,因此我确认以下内容将带来您想要的东西:
minikub ssh
...
docker ps
只需尝试使用minikube ssh
的kubernetes。
答案 1 :(得分:1)
我不确定您在哪里运行docker ps
命令,但是如果您尝试从主机执行此操作并且k8s群集位于其他位置,即您的计算机不是群集中的节点,docker ps
不会返回任何内容,因为容器未绑定到docker主机。
假设您的广告连播正在投放,kubectl get pods
将显示所有正在运行的广告连播。要查看更多详细信息,您可以使用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地址固定且易于访问。
答案 2 :(得分:1)
在Kubernetes中,Docker contaienrs在Pods上运行,而Pods在Nodes上运行,而Nodes在您的机器上运行(minikube / GKE)
运行kubectl create -f tmocat_pod.yaml
时,基本上创建了一个容器,它在该容器上运行docker容器。
拥有此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的日志。
答案 3 :(得分:1)
您可以将您的终端与Docker服务器连接,在您的Node / VM内部运行。
在终端中使用以下命令:eval $(minikube docker-env)
这只会配置您的当前终端窗口。
答案 4 :(得分:0)
你有没有尝试过#34; docker ps -a&#34;看容器是否已经死了?如果它在那里你可以看到它的日志&#34; docker logs&#34;也许这会给你一个提示。
答案 5 :(得分:0)
如果您的pod正在成功运行,并且如果您要在安排pod的节点上查找容器,则问题可能是kubernetes正在使用不同的容器运行时。
实施例
docker ps
在这里,我能够执行pod,并且我在安排pod的同一节点中,但--container-runtime-endpoint=unix:///var/run/cri-containerd.sock
没有显示容器。在我的情况下,kubelet使用不同的容器运行时,kubelet服务的一个参数是pthread_mutex_lock
答案 6 :(得分:0)
可能是您没有使用 docker 作为容器运行时。
我遇到了同样的问题,我忘了我用 runsc
作为处理程序切换到 gVisor。
cat /etc/default/kubelet
KUBELET_EXTRA_ARGS="--container-runtime remote --container-runtime-endpoint unix:///run/containerd/containerd.sock"
如果是这样,您需要使用 runsc
命令而不是 docker。