在部署中定義的容器有一個livenessProbe設定:根據定義,它呼叫遠程端點并檢查回應是否包含有用資訊或空回應(這應該觸發 pod 的重啟)。
整個定義如下(為了更清晰的標記,我洗掉了進一步的檢查):
apiVersion: apps/v1
kind: Deployment
metadata:
name: fc-backend-deployment
labels:
name: fc-backend-deployment
app: fc-test
spec:
replicas: 1
selector:
matchLabels:
name: fc-backend-pod
app: fc-test
template:
metadata:
name: fc-backend-pod
labels:
name: fc-backend-pod
app: fc-test
spec:
containers:
- name: fc-backend
image: localhost:5000/backend:1.3
ports:
- containerPort: 4044
env:
- name: NODE_ENV
value: "dev"
- name: REDIS_HOST
value: "redis"
livenessProbe:
exec:
command:
- curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats | head -c 30 > /app/out.log
initialDelaySeconds: 20
failureThreshold: 12
periodSeconds: 10
我還嘗試將命令放入陣列中:
command: ["sh", "-c", "curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats", "|", "head", "-c", "30", ">", "/app/out.log"]
并分成單獨的行:
- /bin/bash
- -c
- curl
- -X
- GET
- $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats
- |
- head
- -c
- "30"
- >
- /app/out.log
甚至像這樣:
command:
- |
curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats | head -c 30 > /app/out.log
所有的嘗試都是在有和沒有的情況下進行的(/bin/ba)sh -c- 結果相同。
但是,當您閱讀本文時,您已經知道這些都不起作用。
我exec通過進入正在運行的容器并嘗試查找/app/out.log檔案來知道它- 在我查看目錄內容時它不存在。看起來探測器從未執行過。
在正在運行的容器內運行的命令作業正常:獲取資料并將其寫入指定的檔案。
什么可能導致探測器無法執行?
uj5u.com熱心網友回復:
在使用exec探針型別時,Kubernetes不會運行 shell 來處理命令,它只會直接運行命令。這意味著您只能使用一個命令并且該|字符被認為只是您的curl.
要解決這個問題,需要使用sh -cto exec shell 代碼,如下所示:
livenessProbe:
exec:
command:
- sh
- -c
- >-
curl -X GET $BACKEND_SERVICE_HOST:$BACKEND_SERVICE_PORT/api/v3/stats |
head -c 30 > /app/out.log
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/385095.html
標籤:Kubernetes 雅姆
上一篇:連接被拒絕呼叫kubernetesClusterIP服務
下一篇:如何為我的部署定義持久存盤宣告?
