我正在尝试为应用程序开发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 }}"]
此docker容器只检查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网址,那么一切都很好,但如果无法访问etcd网址,则会收到错误消息,指出Error: Job failed: BackoffLimitExceeded”
我想检查是否有一种设置用户友好错误消息的方法,指出该网址不可访问或类似的内容。
似乎现在没办法做到这一点,而不是我所知道的。我试过这只是Pod
而不是Job
而且也不起作用。
查看Helm的文档,但似乎无法找到有关此问题的任何信息。
答案 0 :(得分:1)
我认为不可能。但我会采取不同的方法。
如果您的申请需要ETCD,为什么不检查ETCD是否可以作为Pod probes之一访问,如活动或准备就绪?这样,如果您的应用程序和ETCD之间没有连接,那么您的应用程序将无法启动,并且您将以更多 kubernetes方式描述您的Pod时知道探测失败。
此外,您甚至可以helm install
to wait until all the Pod's are Ready
,这意味着如果您的应用程序未连接到ETCD,命令helm install
将失败。