Как использовать kubectl port-forward из файла манифеста (и вообще файл манифеста против запуска kubectl) - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь запустить свое первое приложение с Kubernetes локально (или я бы сказал, minikube).

У меня есть довольно простой веб-сервер (один локальный образ докера) и официальный образ mongodb (который я хотел бы в идеале извлечь из dockerhub).

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

Сначала мне удается запустить мой веб-сервер в одиночку с kubectl run <MY_APP> --image=<MY_IMAGE> --port 3030 --image-pull-policy=IfNotPresent, затем kubectl port-forward <MY_POD> 3030:80, и он работает нормально, я могу подключиться к приложению через порт 3030 (приложение прослушивает, и контейнер открывает порт 80).

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

Моя первая проблема - я не могу найти, как kubectl port-forward должен быть переведен в файл манифеста. Я думал о targetPort, но у меня возникает ошибка проверки, похоже, что мы не можем использовать targetPort в описании портов контейнеров pods.

Моя вторая проблема заключается в том, что я не совсем уверен в том, что я делаю, пытаясь запустить этот стек, описывая только модуль. Возможно, понадобятся другие части, service я считаю необязательными для своих нужд, я не уверен насчет deployment, но я видел endpoint, и я мог бы игнорировать другие ...

Я немного сбит с толку, поскольку kubectl run, кажется, создает пакет, развертывание и наборы реплик, я не уверен, нужно ли мне создавать все это из моего файла манифеста.

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

Итак, у моего вопроса есть несколько подвопросов из-за недостатка знаний о Kubernetes, но в основном я хотел бы знать, как перевести мои kubectl run <MY_APP> и kubectl port-forward <MY_POD> 3030:80 в файл манифеста, чтобы я мог добавить контейнер mongodb и начать весь стек с одной командной строки kubectl create -f ./local.yaml.

Вот первый черновик:

apiVersion: v1
kind: Pod
metadata:
  name: my_app
spec:
  containers:
    - name: web-server
      image: my_app
      imagePullPolicy: IfNotPresent
      ports:
        - name: my_app
          containerPort: 3030
          targetPort: 80
          protocol: TCP
    - name: mongodb
      image: mongodb
      ports:
        - name: mongodb
          containerPort: 27017
          protocol: TCP

1 Ответ

0 голосов
/ 27 апреля 2018

Да, вы правы. Вы можете представить свое приложение как службу с Типом NodePort (хотя это не очень понятно в документации), и yaml службы будет выглядеть следующим образом:

apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  type: NodePort
  ports:
    - port: 3030
      targetPort: 80
  selector:
    app: app-server

Yaml вашего развертывания будет выглядеть так:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-server
  labels:
    app: app-server
spec:
  selector:
    matchLabels:
      app: app-server
  template:
    metadata:
      labels:
        app: app-server
    spec:
      containers:
      - name: web-server
        image: my_app
        ports:
        - containerPort: 80
      - name: mongodb
        image: mongodb
        ports:
        - containerPort: 27017

Как видите, я выставил только ваш веб-сервер. Теперь, чтобы получить доступ к Монго из-за пределов Kubernetes, вы должны также выставить его.

Вы можете развернуть свое приложение как команда:

kubctl apply -f ./file_with_service.yaml ./file_with_deployment.yaml

И вы можете использовать все это в качестве примера для начала и прочитать дополнительную документацию , чтобы понять это ясно.

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