Kubernetes liveness 探测:pod 可以监控自己的标准输出吗?
Kubernetes liveness probe: can a pod monitor its own stdout?
我的想法是将 liveness probe 实现为命令,并使用类似
的东西
$ grep something ERROR
从 pod 内部,因此如果在 pod 的输出中存在包含 ERROR 的行,则 liveness 探测失败。
这可能吗?如果没有,我是否可以在同一个 pod 中添加另一个容器来监控第一个容器?
您可以查询 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)"
当然,每个 pod 可以有一个以上的容器。这不是标准方法,因为它违反了 "one process per container" 原则。您可以阅读此 article 解释 Kubernetes 中的多容器 pods,有哪些用例等等。
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
有两个容器。装有 /tmp/html
和 livenessProbe
的容器 1st
运行 nginx
开始后 10 秒检查文件 /tmp/html/test
是否每 3 秒存在一次缺少它会重新启动容器。 2nd
容器 运行 debian
安装了 /tmp/html/
,但它也会每 5 秒向文件 /tmp/html/test
添加数据条目。
在上面的示例中,如果您手动删除文件并探测缓存它,它将重新启动 1st
容器。
您必须根据您的特定需求调整此示例,例如使用 grep -q ERROR /tml/html/test
,如果成功删除 /tmp/html/test
或更改探测器本身。
我的想法是将 liveness probe 实现为命令,并使用类似
的东西$ grep something ERROR
从 pod 内部,因此如果在 pod 的输出中存在包含 ERROR 的行,则 liveness 探测失败。
这可能吗?如果没有,我是否可以在同一个 pod 中添加另一个容器来监控第一个容器?
您可以查询 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)"
当然,每个 pod 可以有一个以上的容器。这不是标准方法,因为它违反了 "one process per container" 原则。您可以阅读此 article 解释 Kubernetes 中的多容器 pods,有哪些用例等等。
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
有两个容器。装有 /tmp/html
和 livenessProbe
的容器 1st
运行 nginx
开始后 10 秒检查文件 /tmp/html/test
是否每 3 秒存在一次缺少它会重新启动容器。 2nd
容器 运行 debian
安装了 /tmp/html/
,但它也会每 5 秒向文件 /tmp/html/test
添加数据条目。
在上面的示例中,如果您手动删除文件并探测缓存它,它将重新启动 1st
容器。
您必须根据您的特定需求调整此示例,例如使用 grep -q ERROR /tml/html/test
,如果成功删除 /tmp/html/test
或更改探测器本身。