Kubernetes 库伯内特斯生命探测器:一个豆荚能监测它自己的卫星吗?

Kubernetes 库伯内特斯生命探测器:一个豆荚能监测它自己的卫星吗?,kubernetes,kubernetes-pod,Kubernetes,Kubernetes Pod,我的想法是将liveness探测器作为命令实现,并使用 $ grep something ERROR 从pod内部,因此,如果在pod的输出中存在包含错误的行,则liveness探测器将失败 这可能吗?如果没有,我是否可以在同一个pod中添加另一个容器来监视第一个容器?您可以查询 请求如下所示: GET/api/v1/namespace/{namespace}/pods/{name}/log 要使用通常安装在吊舱中的令牌,您可以这样称呼它: curlhttps://kubernetes/api

我的想法是将liveness探测器作为命令实现,并使用

$ grep something ERROR
从pod内部,因此,如果在pod的输出中存在包含错误的行,则liveness探测器将失败

这可能吗?如果没有,我是否可以在同一个pod中添加另一个容器来监视第一个容器?

您可以查询

请求如下所示:

GET/api/v1/namespace/{namespace}/pods/{name}/log

要使用通常安装在吊舱中的令牌,您可以这样称呼它:

curlhttps://kubernetes/api/v1/namespaces/default/pods/$HOSTNAME/log-k\
-H“授权:持票人$(cat/var/run/secrets/kubernetes.io/servicecomport/token)”

确保每个吊舱可以有多个容器。这不是一种标准方法,因为它违反了“每个容器一个进程”的原则。你可以阅读这篇文章,解释Kubernetes中的多容器吊舱,用例是什么,等等

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
  - name: 1st
    image: nginx
    volumeMounts:
    - name: html
      mountPath: /tmp/html
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/html/test
      initialDelaySeconds: 10
      periodSeconds: 3
  - name: 2nd
    image: debian
    volumeMounts:
    - name: html
      mountPath: /tmp/html
    command: ["/bin/sh", "-c"]
    args:
      - while true; do
          date >> /tmp/html/test;
          sleep 5;
        done
  volumes:
  - name: html
    emptyDir: {}
在本例中,
pod
有两个容器。容器
1st
运行
nginx
,并安装
/tmp/html
livenessProbe
,从启动开始10秒后,每隔3秒检查文件
/tmp/html/test
是否存在,如果丢失,则重新启动容器。和
2nd
容器运行
debian
,装载了
/tmp/html/
,但它也在每隔5秒向文件
/tmp/html/test
中添加数据条目

在上面的示例中,如果手动删除文件并对其进行缓存,它将重新启动
1st
容器


您必须根据您的特殊需要定制此示例,例如使用
grep-q ERROR/tml/html/test
,如果成功,将删除
/tmp/html/test
,或更改探针本身。

谢谢。为了完整起见,我最后将参数?sinceSeconds=添加到查询中,因为否则它太大了。