首页 > 解决方案 > 部署模板中的 Kubernetes 探针

问题描述

我有一个关于 Kubernetes Liveness/Readiness 探针配置的问题。

我有一个在netCore 3.1 中开发的应用程序,目前在生产环境(版本 1.0.0)中没有配置健康检查。我已经在第二个版本(版本 2.0.0)中实现了运行状况端点,但是如何管理 Kubernetes 部署模板文件以符合没有端点的 v1 版本?

如果我将部署配置了探针的模板,则在 v1 上运行的所有容器都将失败,因为无法访问任何端点。我想了解我是否可以维护一个与 v1(无运行状况)和 v2(运行状况)兼容的部署 yml 文件。

这里我贴一个我实际部署 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 变量可用于识别我是否必须执行健康检查。

在此先感谢,戴夫。

标签: kuberneteskubernetes-deploymentreadinessprobelivenessprobe

解决方案


要检查 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

我希望我的想法可以帮助您解决您的问题。


推荐阅读