Отрывки, которые вы предоставляете, к сожалению, недостаточны, но у вас есть основы.
У меня был Google для вас для учебника и - к сожалению - ничего очевидного не выпрыгнуло. Это не значит, что его нет, просто я его не нашел.
У вас есть правильная идея, и есть довольно много уровней для понимания технологии, но я рекомендую вашемуподойдите и подумайте, что мы вас туда доставим.
- Начнем с учебного курса по 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, в который вы можете развернуть свое приложение
Мой совет (кроме 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!