我正在尝试为应用程序开发Helm图表,以简化版本管理和将应用程序部署到kubernetes。为此,我在Helm图表中编写了一个预安装挂钩。

    apiVersion: batch/v1
kind: Job
metadata:
  name: px-etcd-preinstall-hook
  labels:
    heritage: {{.Release.Service | quote }}
    release: {{.Release.Name | quote }}
    chart: "{{.Chart.Name}}-{{.Chart.Version}}"
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-weight": "-5"
    "helm.sh/hook-delete-policy": hook-succeeded, hook-failed
spec:
  backoffLimit: 2
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: pre-install-job
        imagePullPolicy: Always
        image: "hrishi/px-etcd-preinstall-hook:v1"
        command: ['/bin/sh']
        args: ['/usr/bin/etcdStatus.sh',"{{ .Values.etcdEndPoint }}"]

该泊坞窗容器仅检查ETCD端点是否可访问。想法是等待几秒钟,尝试几次然后退出。
这是作为该容器的一部分运行的初始Shell脚本。
set -x
echo "Initializing..."
svcname=$1
echo $svcname
etcdURL=$(echo "$svcname" | awk -F: '{ st = index($0,":");print substr($0,st+1)}')
echo $etcdURL

response=$(curl --write-out %{http_code} --silent --output /dev/null "$etcdURL/version")
echo $response

if [[ "$response" != 200 ]]
then
    echo "Provided etcd url is not reachable. Exiting.."
    exit 1
fi

如果可以访问ETCD URL,那么一切都很好,但是如果无法访问etcd URL,那么我会收到一条错误消息,指出Error: Job failed: BackoffLimitExceeded”
我想检查是否有一种方法可以设置一条用户友好的错误消息,指出该URL无法访问或类似的内容。
似乎现在没有办法做到这一点,我不知道。我试图这只是一个Pod而不是Job,而且也不起作用。

查找有关Helm的文档,但似乎找不到有关此的任何信息。

最佳答案

我认为不可能。但是我会采取另一种方法。

如果您的应用程序需要ETCD,那么为什么不检查ETCD是否可作为Pod probes之一,如 liveness 或就绪性呢?这样,如果您的应用程序和ETCD之间没有连接,则您的应用程序将无法启动,并且您将以一种更加kubernetes的方式在描述Pod时知道探测失败。

此外,您甚至可以将helm install设为to wait until all the Pod's are Ready ,这意味着如果您的应用程序未连接到ETCD,则helm install命令将失败。

关于kubernetes - 预安装 Hook Helm -用户友好错误消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48375216/

10-15 20:24