Kubernetes - Добавить контейнер на основе одного и того же изображения для тесно связанного сервера веб-сокетов в одном модуле? - PullRequest
0 голосов
/ 24 марта 2020

У моего клиента есть развертывание, требующее следующих трех элементов:

  1. Приложение Laravel, работающее на PHP Сервер Artisan, порт 8080.
  2. Сервер веб-сокетов, работающий через библиотека LaravelWebSockets (встроенная в приложение Laravel), порт 6001.
  3. A mysql база данных, порт 3306.

В настоящее время развертывание выполняется с элементами 1 и 3 Я хотел бы добавить пункт 2 (сервер веб-сокетов).

Я хотел бы использовать контейнер для каждого из вышеупомянутых элементов в одном модуле. Для меня не имеет никакого смысла создавать совершенно новое развертывание только для размещения сервера websockets.

Поскольку предлагаемый сервер websockets работает на том же Dockerized приложении, что и сервер Artisan, я использую тот же изображение для построения соответствующего контейнера, используя другой порт и другой CMD .

Это хороший способ приблизиться к этому, или есть лучший способ? Вот мой файл Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zebra-master
  labels:
    app: zebra-master
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zebra-master
  template:
    metadata:
      labels:
        app: zebra-master
    spec:
      containers:
      - name: zebra-master
        image: registry/zebra-master:build-BUILDNUMBER
        ports:
        - containerPort: 8080
        command: ["php artisan serve --host=0.0.0.0 --port=8080 -vvv"]
      - name: websockets-master
        image: registry/zebra-master:build-BUILDNUMBER
        ports:
        - containerPort: 6001
        command: ["php artisan websockets:serve"]
      - name: mysql
        image: mysql/mysql-server:5.7
        ports:
        - containerPort: 3306
        volumeMounts:
        ...
      restartPolicy: Always
      volumes:
      ...
---

apiVersion: v1
kind: ConfigMap
...

---

apiVersion: v1
kind: Service
metadata:
  name: zebra-master
  annotations:
    field.cattle.io/targetWorkloadIds: '["deployment:default:zebra-master"]'
spec:
  ports:
  - name: "8080"
    port: 8080
    targetPort: 8080
  selector:
    workload: "zebra-master"
  type: ClusterIP

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: zebra-master
spec:
  rules:
  - host: zebra.com
    http:
      paths:
      - backend:
          serviceName: zebra-master
          servicePort: 8080
        path: /

1 Ответ

0 голосов
/ 24 марта 2020

Если я понимаю, вы хотите запустить websocket на Zebra-Master и одновременно запустить проект php, я увидел, что вы используете «команду». я нашел это, может быть, это должно помочь вам: Как установить несколько команд в одном файле yaml с Kubernetes?

и для порта вы можете добавить следующие строки:

 ports:
 - containerPort: 8080
   name: http
 - containerPort: 6001
   name: websocket-port

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

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