我的想法是将活动性探针作为命令实施,并使用类似的
$ grep something ERROR
从容器内部,因此,如果在容器的输出中存在包含ERROR的行,则活动性探测将失败。
这可能吗?如果没有,是否可以在同一个容器中添加另一个容器来监视第一个容器?</ p>
答案 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/html
和livenessProbe
的容器,从启动开始10秒钟后检查文件/tmp/html/test
是否每3秒存在一次,如果丢失,它将重启容器。并且2nd
个容器在安装了debian
的情况下运行/tmp/html/
,但是每5秒钟还将向文件/tmp/html/test
中添加数据条目。
在上面的示例中,如果您手动删除文件并进行探针缓存,它将重新启动1st
容器。
您将不得不根据您的特定需求定制此示例,例如使用grep -q ERROR /tml/html/test
,如果成功,该示例将删除/tmp/html/test
或更改探针本身。