我们有一个k8s POD,其中包含两个容器c1和c2。我们如何触发重新启动 第二容器(c2)是基于第一容器(c1)的某个事件生成的?
例如,容器c1是一个数据容器,可从s3存储桶中提取数据。数据由第二个容器(c2)共享和使用。我们想在从s3中提取数据时重新启动第二个容器(c2),以便可以通过容器c2将其加载到内存中。
答案 0 :(得分:0)
我认为您可以使用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 以重新启动过程。