nodejs kubernetes не может выполнить непрерывное обновление - PullRequest
1 голос
/ 15 октября 2019

Чтобы развернуть экспресс-файл node.js в рабочей среде, я хотел использовать kubernetes. Были выполнены следующие шаги:

  • создан кластер в облаке Google
  • клонировать код в кластер изgit
  • сборка докера -t gcr.io/[GCLOUDID]/app:v1.
  • docker pushgcr.io/[GCLOUDID]/app:v1
  • запустить приложение kubectl --image = gcr.io / [GCLOUDID] / app: v1

Это работает нормально, но когда я хочу обновить код, я немного заблудился. я попытался собрать v2 (сборка докера -t gcr.io/[GCLOUDID]/app:v2.) и установить образ с помощью kubectl set image deployments / app app = gcr.io / [GCLOUDID] / app: v2

этот метод генерирует все виды ошибок (например, imagepullbackoff, crashloopbackoff)

этот файл docker использовался:

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 голосов
/ 15 октября 2019

Используйте декларативный синтаксис kubernetes путем создания yaml, который встраивает ваш контейнер в развертывание. Это чище и будет держать вас в порядке. Всякий раз, когда вы хотите обновить, просто измените имя образа и запустите 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
...