簡體   English   中英

Kubernetes Rollout 在新 Pod 未完全准備好時丟棄舊 Pod

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM