Локальные kubernetes Hello World в nodejs с помощью Docker - PullRequest
1 голос
/ 31 октября 2019

Я следил за обучающими видео и пытался понять, как создать небольшое минималистичное приложение. Видео, за которыми я следил, извлекает контейнеры из реестров, пока я пытаюсь протестировать, собрать и развернуть все локально в настоящий момент, если возможно. Вот мои настройки.

  1. У меня установлена ​​последняя версия докера с включенным Kubernetes в Mac OS.

  2. Приложение helloworld NodeJS, работающее с Docker иDocker Compose

TODO: Я хотел бы иметь возможность запускать свои экземпляры, скажем, 3 в кластере kubernetes


Dockerfile

FROM node:alpine

COPY package.json package.json
RUN npm install

COPY . .
CMD ["npm", "start"]

docker-compose.yml

version: '3'

services:
    user:
      container_name: users
      build:
        context: ./user
        dockerfile: Dockerfile

Создание файла развертывания с помощьюэто учебное пособие и могут возникнуть проблемы, поскольку я объединяю информацию как с YouTube, так и с веб-ссылки.

Создание miminalistic yml файла, чтобы иметь возможность начать работу,позже мы изучим другие аспекты, такие как готовность и жизнеспособность.


apiVersion: v1
kind: Service
metadata:
  name: user
spec:
  selector:
    app: user
  ports:
    - port: 8080
  type: NodePort

Пожалуйста, проверьте правильность указанного выше yml-файла, поэтому вопрос в том, что мне делать дальше?

1 Ответ

2 голосов
/ 31 октября 2019

Отрывки, которые вы предоставляете, к сожалению, недостаточны, но у вас есть основы.

У меня был Google для вас для учебника и - к сожалению - ничего очевидного не выпрыгнуло. Это не значит, что его нет, просто я его не нашел.

У вас есть правильная идея, и есть довольно много уровней для понимания технологии, но я рекомендую вашемуподойдите и подумайте, что мы вас туда доставим.

  1. Начнем с учебного курса по Node.JS helloworld

https://nodejs.org/en/docs/guides/getting-started-guide/

Затем вы хотите заключить в контейнер это

https://nodejs.org/de/docs/guides/nodejs-docker-webapp/

Для # 3 ниже, последний шаг здесь:

docker build --tag=<your username>/node-web-app .

Но, потому чтовы используете Kubernetes, вы хотите отправить это изображение в публичный репозиторий. Это связано с тем, что независимо от того, где работает ваш кластер, он сможет получить доступ к образу контейнера.

Поскольку в примере используется DockerHub, давайте продолжим его использовать:

docker push <your username>/node-web-app

NB Здесь подразумевается https://docker.io/<your username>/node-web-app:latest здесь

Тогда вам понадобится кластер Kubernetes, в который вы можете развернуть свое приложение

  • Я думаю, microk8s отлично
  • Ябывший Googler, но Kubernetes Engine является эталоном (требуется $$$)
  • Большой поклонник DigitalOcean также имеет Kubernetes (также $$$)

Мой совет (кроме microk8 и minikube) никогда не запускайте свои собственные кластеры Kubernetes;оставьте это облачному провайдеру.

Теперь, когда у вас есть все части, я рекомендую вам просто:
kubectl run yourapp \
--image=<your username>/node-web-app:latest \
--port=8080 \
--replicas=1

IIRC kubectl run устарела, но все равно используйте его. Он создаст для вас Kubernetes Deployment (!) С 1 Pod (== реплика). Не стесняйтесь изменять это значение (возможно, --replicas=2), если хотите.

После того, как вы создали Deployment, вы захотите создать Службу, чтобы сделать ваше приложение доступным (в верхней части моей головы)команда:

kubectl expose deployment/yourapp --type=NodePort

Теперь вы можете запросить службу:

kubectl get services/yourapp

NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
yourapp NodePort   10.152.183.27   <none>        80:32261/TCP   7s

NB Назначенный NodePort (в данном случае!) - :32261и тогда я могу взаимодействовать с приложением, используя curl http://localhost:32261 (localhost, потому что я использую microk8s).

kubectl - мощный инструмент. Другой способ определения NodePort:

kubectl get service/yourapp \
--output=jsonpath="{.spec.ports[0].nodePort}"

Преимущество подхода, начинающегося с kubectl run, заключается в том, что вы можете легко определить конфигурацию Kubernetes, необходимую для воссоздания этой службы развертывания |, с помощью:

kubectl get deployment/yourapp \
--format=yaml \
> ./yourapp.deployment.yaml

kubectl get service/yourapp \
--format=yaml \
> ./yourapp.service.yaml

Эти команды будут опрашивать кластер, извлекать конфигурацию для вас и загружать ее в файлы. Он также будет включать в себя некоторые данные экземпляра, но его суть покажет вам, что вам потребуется для воссоздания развертывания. Вам нужно будет отредактировать этот файл.

Но вы можете проверить это, сначала удалив развертывание и службу, а затем воссоздав ее из конфигурации:

kubectl delete deployment/yourapp
kubectl delete service/yourapp

kubectl apply --filename=./yourapp.deployment.yaml
kubectl apply --filename=./yourapp.service.yaml

NB Вы часто будете видеть несколько конфигураций ресурсов, объединенных в один файл YAML. Это совершенно верный YAML, но вы только когда-либо видели, чтобы он использовался Kubernetes. Формат:

...
some: yaml
---
...
some: yaml
---

С его помощью вы можете объединить yourapp.deployment.yaml и yourapp.service.yaml в одну конфигурацию Kubernetes.

HTH!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...