[英]Kubernetes Rollout Drop Old Pods When New Pods Are Not Fully Ready
我正在使用kubectl rollout
命令來更新我的部署。 但是由於我的項目是 NodeJS 項目。 npm run start
需要一些時間(在應用程序實際運行前幾秒鍾。)但是 Kubernetes 將在npm run start
執行后立即刪除舊 pod。
例如,
kubectl logs -f my-app
> my app start
> nest start
Kubernetes 現在將丟棄舊吊艙。 然而,這將需要另外 10 秒,直到
Application is running on: http://[::1]:5274
這意味着我的服務實際上已經啟動。
我想知道是否有辦法修改這個,比如在 kubernetes 放棄舊豆莢之前再等一段時間。
我的 docker 文件:
FROM node:14 AS builder
# Create app directory
WORKDIR /app
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./
COPY prisma ./prisma/
COPY protos ./protos/
COPY tsconfig.build.json ./
COPY tsconfig.json ./
# Install app dependencies
RUN npm install
RUN export NODE_OPTIONS=--max_old_space_size=16384
RUN npm run build
COPY . .
# FROM node:14
# COPY --from=builder /app/node_modules ./node_modules
# COPY --from=builder /app/package*.json ./
# COPY --from=builder /app/dist ./dist
# COPY --from=builder /app/protos ./protos
EXPOSE 5273
CMD ["npm", "run", "start"]
我的 kubernetes yaml 文件的規格:
spec:
replicas: 4
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: image
imagePullPolicy: Always
resources:
limits:
memory: "8Gi"
cpu: "10"
requests:
memory: "8Gi"
cpu: "10"
livenessProbe:
httpGet:
path: /api/Health
port: 5274
initialDelaySeconds: 180
periodSeconds: 80
timeoutSeconds: 20
failureThreshold: 2
ports:
- containerPort: 5274
- containerPort: 5900
在您的容器上使用啟動探針。 https://docs.openshift.com/container-platform/4.11/applications/application-health.html 。 在所有容器都通過啟動(和就緒)檢查之前,Pod 不算“就緒”。
在部署期間,調度程序將未就緒的 pod 計為“不可用”,例如部署的“maxUnavailable”設置。 因此,調度程序不會繼續關閉工作中的 pod,直到新的 pod 為流量做好准備。 ( https://docs.openshift.com/container-platform/4.11/applications/deployments/deployment-strategies.html )
另外一個好處是,服務不會將流量路由到未就緒的 pod,因此在容器通過啟動探測之前,它們不會收到任何流量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.