Node.js Kubernetes无法执行滚动更新

时间:2019-10-14 23:41:37

标签: node.js kubernetes google-cloud-platform google-kubernetes-engine

要在生产环境中部署Express Node.js API,我想使用kubernetes 请遵循以下步骤:

  • 在Google云中创建集群
  • 将代码从git克隆到集群
  • docker build -t gcr.io/[GCLOUDID]/app:v1。
  • docker pushgcr.io/ [GCLOUDID] / app:v1
  • kubectl运行应用程序--image = gcr.io / [GCLOUDID] / app:v1

这运行得很好,但是当我想更新代码时,我有点迷路了。 我试图构建一个v2(docker build -t gcr.io/[GCLOUDID]/app:v2。) 并通过kubectl设置映像设置映像部署/ app app = gcr.io / [GCLOUDID] / app:v2

此方法会引发各种错误(例如imagepullbackoff,crashloopbackoff)

已使用此dockerfile:

FROM node:11-alpine

WORKDIR /

COPY . /
RUN rm -rf node_modules
RUN rm -rf package-lock.json

RUN apk update && apk upgrade \
   && apk add --no-cache git \
   && apk --no-cache add --virtual builds-deps build-base python \
   && npm rebuild bcrypt --build-from-source

# Install imagemagick with support to native library
RUN apk add --no-cache file
RUN apk --update add imagemagick

RUN npm install 

ENV TYPE=docker

EXPOSE 80

CMD [ "npm", "start" ]

1 个答案:

答案 0 :(得分:0)

通过构建将您的容器嵌入部署中的Yaml,使用kubernetes声明性语法。这样比较干净,可以使您井井有条。每当您要更新时,只需更改图像名称并运行kubectl apply -f deployment.yaml。您不仅会更新图像,而且还会以蓝绿色的方式进行处理。 检查此示例https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80