【问题标题】:Kubernetes Docker process inside podpod内的Kubernetes Docker进程
【发布时间】:2020-12-18 20:05:53
【问题描述】:

我有一个带有 CMD 的 Docker 映像来运行 Java 应用程序。

此应用程序正在部署到 Kubernetes 的容器中。因为,我将它部署为 Docker 映像,所以我期望它作为 Docker 进程运行。所以,我刚刚登录到 pod 并尝试“docker ps”。

但是,令我惊讶的是它作为 Java 进程而不是 docker 进程运行。我可以通过“ps -ef

看到这个过程

我很困惑,它在内部是如何工作的?

【问题讨论】:

  • 它在内部是如何运作的? 我 100% 非常肯定这个问题已经被打死了。或者,换一种说法:您已经阅读哪些文章没有充分解决您的问题? [另外,作为一个迂腐的注释:您将其标记为kubernetes,但您询问了docker]
  • 这是关于 kubernetes 中的 docker。这就是为什么标记为 Kubernetes。
  • 从技术上讲,它位于 Kubernetes 或 Docker 之下,用于在容器中运行应用程序。 Docker 和 Kubernetes 只是从容器中的镜像启动应用程序的方式。

标签: docker kubernetes


【解决方案1】:

正如其他人所说,Kubernetes 在内部使用 docker 来部署容器。为了详细解释,请考虑具有 4 个节点、1 个主节点和 3 个从节点的集群。

$ kubectl get nodes
NAME                           STATUS    ROLES     AGE       VERSION
******.mylabserver.com   Ready     master    13d       v1.10.5
******.mylabserver.com   Ready     <none>    13d       v1.10.5
******.mylabserver.com   Ready     <none>    13d       v1.10.5
******.mylabserver.com   Ready     <none>    13d       v1.10.5

我正在使用 nignx docker image 部署一个 pod。

$ cat pod-nginx.yml 
apiVersion: v1
kind: Pod
metadata:
  name: alpine
  namespace: default
spec:
  containers:
  - name: alpine
    image: alpine
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always

您可以通过以下方式获取 pod 的状态:

$ kubectl get pods -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP           NODE
alpine    1/1       Running   0          21s       10.244.3.4   ******.mylabserver.com

Kube-scheduler 会在其中一个可用节点上调度 pod。

现在 pod 已部署到服务器,您可以在其中登录到该特定服务器并找到您要查找的信息。

root@******:/home/user# docker ps
CONTAINER ID        IMAGE                                                                            COMMAND                  CREATED              STATUS         
     PORTS               NAMES
6486de4410ad        alpine@sha256:e1871801d30885a610511c867de0d6baca7ed4e6a2573d506bbec7fd3b03873f   "sleep 3600"             58 seconds ago       Up 57 seconds  
                         k8s_alpine_alpine_default_2e2b3016-79c8-11e8-aaab-

在该服务器中运行docker exec 命令以查看内部运行的进程。

root@******:/home/user# docker exec -it 6486de4410ad /bin/sh
/ # ps -eaf
PID   USER     TIME   COMMAND
    1 root       0:00 sleep 3600
    7 root       0:00 /bin/sh
   11 root       0:00 ps -eaf
/ # 

https://kubernetes.io/docs/home/- 这可以为您提供有关 pod 以及如何使用 pod/容器进行部署的更多信息。

希望这会有所帮助。

【讨论】:

【解决方案2】:

Kubernetes 使用用户提供的 yaml 文件,部署一个 pod(Kubernetes 部署的较小单元),其中包含一个或多个容器。

您可以使用 kubectl 工具访问 pod 内的容器。 例如,如果您的 pod 有一个容器,您可以在其中打开一个外壳:

kubectl exec -ti <pod-name> -n <pod-namespace> bash

通过这个 shell,您可以运行 ps 命令,您的输出将是在您的容器内运行的隔离进程。

如果您想观察 Kubernetes 已部署在某个节点中的 Docker 容器,您可以连接到该节点并运行docker ps 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-27
    • 2019-09-22
    • 1970-01-01
    • 2017-05-09
    • 2020-05-12
    • 1970-01-01
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多