Kubernetes活力探测器:Pod可以监控自己的stdout吗?

时间:2019-08-29 14:06:08

标签: kubernetes kubernetes-pod

我的想法是将活动性探针作为命令实施,并使用类似的

$ grep something ERROR

从容器内部,因此,如果在容器的输出中存在包含ERROR的行,则活动性探测将失败。

这可能吗?如果没有,是否可以在同一个容器中添加另一个容器来监视第一个容器?<​​/ p>

2 个答案:

答案 0 :(得分:2)

您可以查询Kubernetes API server

请求看起来像这样:

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

要使用通常安装在Pod中的令牌,可以这样命名:

curl https://kubernetes/api/v1/namespaces/default/pods/$HOSTNAME/log -k \
     -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"

答案 1 :(得分:1)

确保每个吊舱可以容纳多个容器。这不是标准方法,因为它违反了“每个容器一个过程”的原则。您可以阅读此article,其中介绍了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/htmllivenessProbe的容器,从启动开始10秒钟后检查文件/tmp/html/test是否每3秒存在一次,如果丢失,它将重启容器。并且2nd个容器在安装了debian的情况下运行/tmp/html/,但是每5秒钟还将向文件/tmp/html/test中添加数据条目。

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

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