部署模板中的 Kubernetes 探针
Kubernetes Probes in deployment template
我有一个关于 Kubernetes Liveness/Readiness 探测配置的问题。
我有一个在 netCore 3.1 中开发的应用程序,目前在生产环境(版本 1.0.0)中没有配置健康检查。
我已经在第二个版本(版本 2.0.0)中实现了 health 端点,但是我如何管理 Kubernetes 部署模板文件才能与没有端点的 v1 版本兼容?
如果我将部署配置了探测的模板,则在 v1 上运行的所有容器都将失败,因为无法访问任何端点。
我想知道我是否可以维护一个与 v1(无运行状况)和 v2(有运行状况)兼容的部署 yml 文件。
这里我post一个我实际部署yml的例子:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: "#{tenant}#-test-app"
name: "#{tenant}#-test-app"
labels:
app: "#{tenant}#-test-app"
product: "#{tenant}#-test-app"
app.kubernetes.io/name: "#{tenant}#-test-app"
app.kubernetes.io/version: "#{server_image_version}#"
app.kubernetes.io/component: "test-app"
app.kubernetes.io/part-of: "#{tenant}#-test-app"
app.kubernetes.io/managed-by: "#{managed_by}#"
spec:
selector:
matchLabels:
app: "#{tenant}#-test-app"
template:
metadata:
labels:
app: "#{tenant}#-test-app"
spec:
containers:
- name: "#{tenant}#-test-app"
image: mycontainerregistryurl/test-app:#{server_image_version}#
ports:
- containerPort: 80
envFrom:
- configMapRef:
name: "#{tenant}#-test-app-variables-config"
env:
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_SERVICE_NAME
value: "#{tenant}#-test-app"
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- NET_RAW
imagePullSecrets:
- name: test-registries
server_image_version 变量可用于确定我是否必须执行健康检查。
提前致谢,戴夫。
要检查 k8s 的活性,您可以使用这样的命令,我们可以定义一个环境变量,然后在活性部分我们可以使用 cammand 进行 if-else 来检查当前版本并指定我们需要在每个部分执行什么。
env:
- name: version
value: v2
livenessProbe:
exec:
command:
- /bin/bash
- -exc
- |
set +x
echo "running below scripts"
if [[ $version -eq "v1" ]]; then
echo "Running script or command for version 1 "
else
echo "Running wget to check the http healthy "
wget api/v2
fi
希望我的想法可以帮助您解决问题。
我有一个关于 Kubernetes Liveness/Readiness 探测配置的问题。
我有一个在 netCore 3.1 中开发的应用程序,目前在生产环境(版本 1.0.0)中没有配置健康检查。 我已经在第二个版本(版本 2.0.0)中实现了 health 端点,但是我如何管理 Kubernetes 部署模板文件才能与没有端点的 v1 版本兼容?
如果我将部署配置了探测的模板,则在 v1 上运行的所有容器都将失败,因为无法访问任何端点。 我想知道我是否可以维护一个与 v1(无运行状况)和 v2(有运行状况)兼容的部署 yml 文件。
这里我post一个我实际部署yml的例子:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: "#{tenant}#-test-app"
name: "#{tenant}#-test-app"
labels:
app: "#{tenant}#-test-app"
product: "#{tenant}#-test-app"
app.kubernetes.io/name: "#{tenant}#-test-app"
app.kubernetes.io/version: "#{server_image_version}#"
app.kubernetes.io/component: "test-app"
app.kubernetes.io/part-of: "#{tenant}#-test-app"
app.kubernetes.io/managed-by: "#{managed_by}#"
spec:
selector:
matchLabels:
app: "#{tenant}#-test-app"
template:
metadata:
labels:
app: "#{tenant}#-test-app"
spec:
containers:
- name: "#{tenant}#-test-app"
image: mycontainerregistryurl/test-app:#{server_image_version}#
ports:
- containerPort: 80
envFrom:
- configMapRef:
name: "#{tenant}#-test-app-variables-config"
env:
- name: DD_AGENT_HOST
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DD_SERVICE_NAME
value: "#{tenant}#-test-app"
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- NET_RAW
imagePullSecrets:
- name: test-registries
server_image_version 变量可用于确定我是否必须执行健康检查。
提前致谢,戴夫。
要检查 k8s 的活性,您可以使用这样的命令,我们可以定义一个环境变量,然后在活性部分我们可以使用 cammand 进行 if-else 来检查当前版本并指定我们需要在每个部分执行什么。
env:
- name: version
value: v2
livenessProbe:
exec:
command:
- /bin/bash
- -exc
- |
set +x
echo "running below scripts"
if [[ $version -eq "v1" ]]; then
echo "Running script or command for version 1 "
else
echo "Running wget to check the http healthy "
wget api/v2
fi
希望我的想法可以帮助您解决问题。