Kubernetes Pod正在运行,但docker PS未提供任何输出

c6ubokkw  于 2022-09-19  发布在  Kubernetes
关注(0)|答案(8)|浏览(209)

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

理想情况下,当它运行Pod时,这意味着它在该Pod中运行一个容器,并且该容器在YAML文件中定义。为什么码头PS没有显示任何正在运行的集装箱?我遵循以下URL:

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

3zwtqj6y

3zwtqj6y1#

停靠容器应该在虚拟机上运行。由于我只在本地机器上安装了mini kube,所以我确认以下内容将带来您想要的东西:

minikub ssh
...
docker ps

试试kubernetes版的minikube ssh吧。

uajslkp6

uajslkp62#

您可以将您的终端连接到在您的Node/VM内部运行的扩展底座服务器。

在您的终端中使用命令eval $(minikube docker-env)

91zkwejq

91zkwejq3#

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

cat /etc/default/kubelet
KUBELET_EXTRA_ARGS="--container-runtime remote --container-runtime-endpoint unix:///run/containerd/containerd.sock"

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

xa9qqrwz

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的日志。

fwzugrvs

fwzugrvs5#

我不确定您在哪里运行docker ps命令,但如果您尝试从您的主机执行此操作,而K8S集群位于其他位置,即您的机器不是集群中的节点,则docker ps不会返回任何内容,因为容器没有绑定到您的坞站主机。

假设您的Pod正在运行,kubectl get pods将显示您正在运行的所有Pod。要查看更多详细信息,可以使用kubectl describe pod <yourpodname>检查每个容器的状态(更详细)。要获取Pod名称,您应该能够使用带有Kubernetes cli的Tab-Complete。此外,如果您的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
    ...

如果您的容器和Pod已经在运行,那么您应该不需要对它们进行太多的故障排除。要使它们可以从公共互联网访问,请查看服务(https://kubernetes.io/docs/concepts/services-networking/service/),以使您的API的IP地址固定且易于访问。

crcmnpdw

crcmnpdw6#

你有没有试过“docker ps-a”,看看集装箱是不是死了?如果它在那里,你可以看到它的日志和“码头日志”,也许这给了你一个提示。

xfyts7mz

xfyts7mz7#

如果您的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

7lrncoxx

7lrncoxx8#

从Kubernetes documentation获取系统上运行的容器镜像:

kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" |
tr -s '[[:space:]]' 'n' |
sort |
uniq -c

然后,你会得到类似的结果:

2 registry.k8s.io/coredns/coredns:v1.9.3
  1 registry.k8s.io/etcd:3.5.4-0
  1 registry.k8s.io/kube-apiserver:v1.25.1
  1 registry.k8s.io/kube-controller-manager:v1.25.1
  3 registry.k8s.io/kube-proxy:v1.25.1
  1 registry.k8s.io/kube-scheduler:v1.25.1

相关问题