多容器POD-根据第一个容器中的事件重新启动第二个容器

我们有一个k8s pod,其中包含两个容器c1和c2。我们如何触发重新启动 第二容器(c2)是基于第一容器(c1)的某个事件生成的?

例如,容器c1是一个数据容器,可从s3存储桶中提取数据。数据由第二个容器(c2)共享和使用。我们想在从s3中提取数据时重新启动第二个容器(c2),以便可以通过容器c2将其加载到内存中。

zz19860418 回答:多容器POD-根据第一个容器中的事件重新启动第二个容器

我认为您可以使用shareProcessNamespace选项来实现它。

看看这个虚拟的例子:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: mult
iple  name: multiple
spec:
  selector:
    matchLabels:
      app: multiple
  template:
    metadata:
      labels:
        app: multiple
    spec:
      shareProcessNamespace: true
      containers:
      - image: nginx:alpine
        name: nginx
      - image: redis:alpine
        name: redis

结果应该是这样的:

# kubectl get pods
multiple-5f44d65855-xzgz2                   2/2     Running            0          84s

现在,如果您输入Pod的容器nginx,则可以看到共享的PID名称空间:

# kubectl exec -it multiple-5f44d65855-xzgz2 -c nginx -- ps aux
PID   USER     TIME  COMMAND
    1 root      0:00 /pause
   51 root      0:00 nginx: master process nginx -g daemon off;
   56 nginx     0:00 nginx: worker process
   57 nginx     0:00 nginx: worker process
   58 nginx     0:00 nginx: worker process
   59 nginx     0:00 nginx: worker process
   74 999       0:00 redis-server
   86 root      0:00 ps aux

此时,您可以执行可能为 kill -9 的业务逻辑,或者,如果可以捕获信号,则可以拦截 sighup 以重新启动过程。

本文链接:https://www.f2er.com/3122753.html

大家都在问