как развернуть папку dist в npm, запустить сборку в kubernetes? - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть приложение node.js, которое я пытаюсь развернуть в Kubernetes. Чтобы нормально запустить его на моей машине без использования Kubernetes, я бы запустил команды npm install и npm run build, а затем обслуживал папку «dist».Обычно я устанавливаю npm's serve с помощью «npm install -g serve», а затем запускаю «serve -s dist». Это отлично работает. Но теперь, чтобы развернуть в Kubernetes для производства, как я могу создать свой образ? Я имею в виду, как должен быть файл Dockerна это похоже?

Примечание: я не хочу использовать nginx, apache или любой другой веб-сервер. Я хочу сделать это, используя сервер node / npm для обслуживания папки dist.Plz

Dockerfile (что я пробовал)

FROM node:8

WORKDIR /usr/src/app

COPY /dist

RUN npm install -g serve

serve -s dist


Я уверен, что этот dockerfile правильный. Так что мне нужно руководство о том, как правильно создать образ для обслуживания папки dist в npm, запустите build.Plz help

1 Ответ

0 голосов
/ 20 сентября 2019

Я думаю, что вы можете найти тонны учебных пособий по всему миру об интеграции клиентских веб-приложений в кластере Kubernetes и дальнейшей демонстрации их посетителям сервиса.

На самом деле, приложение, упакованное в среду Docker , должно быть перенесено в конкретное Изображение из Dockerfile или построено в Docker Compose инструмент, чтобы сохранить все сервисные зависимости приложения;когда изображение готово, оно может быть сохранено в общедоступном DockerHub или в изолированном личном реестре , таким образом контейнер Kubernetes runtime затем извлекает это изображение и создает соответствующие рабочие нагрузки ( Модули ) внутри кластера в соответствии с объявленным ресурсом модель .

Я бы порекомендовал следующий сценарий:

Создание образа докера из вашего исходного Dockerfile (я внес некоторые исправления):

FROM node:8

WORKDIR /usr/src/app

COPY dist/ ./dist/

RUN npm install -g serve

$ sudo docker image build <PATH>

Создать тег , связанный с исходным изображением:

$ sudo docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Экспортируйте изображение в DockerHub или в какой-либо личный реестр:

$ sudo docker push [OPTIONS] NAME[:TAG]

Создайте соответствующую рабочую нагрузку Kubernetes (Pod) и примените ее вКластер Kubernetes, запускающий Node-сервер внутри контейнера, прослушивающий порт 5000:

apiVersion: v1
kind: Pod
metadata:
  name: nodetest
  labels:
    node: test
spec:
  containers:
  - name: node-test
    image: TARGET_IMAGE[:TAG]
    ports:
    - containerPort: 5000
    command: [ "/bin/bash", "-ce", "serve -s dist" ]

Если вы хотите представить приложение для внешних клиентов кластера, посмотрите на службу NodePort :

$ kubectl expose po nodetest --port=5000 --target-port=5000 --type=NodePort

Update_1:

Служба приложений может быть доступна на хост-машине в пределах определенного порта, вы можете просто получить это значение порта:

kubectl get svc nodetest -o jsonpath='{.spec.ports[0].nodePort}'

Update_2:

Для предоставления услуги NodePort на некотором желаемом порту просто примените следующий манифест, приближающийся к назначению порта 30000:

apiVersion: v1
kind: Service
metadata:
  labels:
    node: test
  name: nodetest
spec:
  ports:
  - nodePort: 30000
    port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    node: test
  type: NodePort
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...