我在 Kubernetes 上使用一個帶有postStart鉤子的 MySQL,它應該在資料庫啟動后運行查詢。
這是我的相關部分template.yaml:
spec:
containers:
- name: ${{APP}}
image: ${REGISTRY}/${NAMESPACE}/${APP}:${VERSION}
imagePullPolicy: Always
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- hostname && sleep 12 && echo $QUERY | /opt/rh/rh-mysql80/root/usr/bin/mysql
-h localhost -u root -D grafana
-P 3306
ports:
- name: tcp3306
containerPort: 3306
readinessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 15
timeoutSeconds: 1
livenessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 120
timeoutSeconds: 1
當 pod 啟動時,資料庫的 PVC 損壞并且 pod 崩潰。當我重新啟動 pod 時,它可以作業。我猜查詢會在資料庫尚未啟動時運行。我想這可能會通過 readinessprobe 解決,但我不是這些主題的專家。
有沒有其他人遇到過類似的問題并知道如何解決?
uj5u.com熱心網友回復:
請注意,postStart將至少呼叫一次,但也可能多次呼叫。這使postStart運行查詢的地方變得糟糕。
您可以設定 podrestartPolicy: OnFailure并在單獨的 MYSQL 容器中運行查詢。使用wait啟動第二個容器并運行查詢。請注意,您的查詢應產生冪等結果,否則您的資料完整性可能會中斷;考慮何時使用現有資料卷重新創建 pod。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/358992.html
標籤:Kubernetes 开班 准备就绪探针 活性探针
