У моего клиента есть развертывание, требующее следующих трех элементов:
- Приложение Laravel, работающее на PHP Сервер Artisan, порт 8080.
- Сервер веб-сокетов, работающий через библиотека LaravelWebSockets (встроенная в приложение Laravel), порт 6001.
- 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: /