我有一个带有CMD的docker映像来运行Java应用程序。
此应用程序正被部署到容器中的kubernetes中。由于我将其部署为docker映像,因此我期望它作为docker进程运行。因此,我刚登录到Pod,并尝试使用“ docker ps ”。
但是,令我感到惊讶的是,它作为Java进程而不是作为docker进程运行。我可以通过“ ps -ef ”
查看该过程我很困惑,它在内部如何工作?不知道从哪里获得更多详细信息。背后的任何联系或理论...
谢谢
答案 0 :(得分:3)
正如其他人所述, 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映像的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
您可以按如下所示获取广告连播的状态:
$ 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部署到服务器上,您可以在其中登录到该特定服务器并找到所需的信息。
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 /容器如何进行部署的更多信息。
希望这会有所帮助。
答案 1 :(得分:0)
Kubernetes使用用户提供的yaml文件,部署其中具有一个或多个容器的pod(Kubernetes部署的较小单位)。
您可以使用 kubectl 工具访问容器内的容器。 例如,如果您的吊舱有一个容器,则可以在其中打开一个外壳:
kubectl exec -ti <pod-name> -n <pod-namespace> bash
通过此shell,您可以运行ps
命令,输出将是在容器内运行的隔离进程。
如果要观察Kubernetes已部署在节点中的Docker容器,可以连接到该节点并运行docker ps
命令。