【Kubernetes | Pod/容器】如何修改 Pod 中容器的守护进程

容器是一个运行中的进程。当一个Pod中运行了一个容器时,容器至少包含一个进程,那么这个进程是什么?

1. 环境设定

我们先创建一个 Nginx 容器,查看查看并修改该容器的默认守护进程。

1.1 创建名为 vmware-nginx 的 Pod

Pod 清单如下:

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: vmware-nginx
  name: vmware-nginx
  namespace: 1-pod
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: vmware-nginx
    resources: {
    
    }
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {
    
    }

使用声明式创建 Pod

kubectl apply -f vmware-nginx.yaml

2. 查看容器默认守护进程

2.1 查看容器所在节点

以 vmware-nginx.yaml 为例,用该 YAML 文件创建的pod运行的进程有哪些?我们先通过命令查看该pod在集群哪个节点上创建的。

kubectl -n 1-pod get pod -o wide

在这里插入图片描述

从输出结果可以看出,该容器运行在k8s-03节点上。

2.2 查看容器ID

SSH到k8s-03节点上,查看该容器具体的运行状态。在这里我们使用的容器运行时是Docker。

docker ps | grep vmware-nginx

在这里插入图片描述

从Docker运行状态可以看到,容器 vmware-nginx 有两个对应容器,一个为vmware-nginx,另一个是 Pause。

每个Pod 都会有对应的容器:pause。即每创建一个 Pod,里面会自动生成 pause容器,Pause 容器就是为解决 Pod 中的网络问题而生的。具体请关注之后的博文。

2.3 查看容器中运行的进程信息

docker top 23987e5d7ca9

在这里插入图片描述

可以看到,该容器运行的守护进程是 Nginx 。

我们也可以通过 docker history命令查看 Nginx 进程在 Docker 中运行的过程

docker history nginx

在这里插入图片描述

当一个 Pod 中运行了一个容器时,容器中肯定包含一个进程,这个进程是什么?其默认进程是由容器镜像决定的,如果镜像是 nginx,那么 Pod 默认守护进程就是 nginx 守护进程。

3. 修改容器默认守护进程

3.1 类比 Docker

Docker正常运行一个容器,该容器的守护进程默认为 imge_name

docker run --name=c1 --restart=alawys image_name

在上面的命令后面加上 sleep 1000,那么该容器将不在运行镜像文件默认的进程,而是改为 sleep 1000并覆盖默认进程

docker run --name=c1 --restart=alawys image_name sleep 1000

同理,我们也可以在 YAML 中更改容器默认守护进程

3.2 修改 YAML 文件改变默认守护进程

spec:
  containers:
  - image: nginx
    ....
    command: ["sh","-c","sleep 1000"]

参数说明

command:在容器中执行commad值的命令,其值默认语法为["sh","-c",""]。第三个""中输入自定义的命令即可
在这里插入图片描述

4. 验证

使用修改后的 vmware-nginx.yaml 文件创建容器,然后查看该 Pod 在哪个节点上运行,再去容器所在节点上使用docker 命令查看具体进程。即重复第2小节内容。

4.1 删除旧的 vmware-nginx.yaml 容器

kubectl delete -f vmware-nginx.yaml

4.2 创建新的 vmware-nginx.yaml 容器

再次使用声明式创建已修改默认进程的 YAML 文件。

kubectl apply -f vmware-nginx.yaml

在这里插入图片描述

查看容器所在节点,还是在 k8s-03 上。

4.3 查看容器守护进程

docker ps | grep vmware-nginx
docker top 2632f63a6403

在这里插入图片描述

从输出可以看出,该 Nginx 容器的默认守护进程已经变为了 sleep 1000,而不是 nginx

猜你喜欢

转载自blog.csdn.net/NOWSHUT/article/details/128517764