Kubernetes-在同一个Pod中为紧密耦合的websockets服务器添加基于相同映像的容器



我的客户端有一个需要以下三项的部署:

  1. 一个运行在PHP Artisan服务器上的Laravel应用程序,端口8080
  2. 通过LaravelWebSockets库(内置于Laravel应用程序(运行的websockets服务器,端口6001
  3. 一个mysql数据库,端口3306

部署当前正在使用项1和3运行。我想添加项目2(websockets服务器(。

我想在同一个吊舱中为以上每一项使用一个容器。仅仅为了托管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: /

如果我不想,你想在斑马主机上运行websocket,同时运行php项目,我看到你在使用"command"。我发现了这一点,也许它应该对你有所帮助:如何使用Kubernetes在一个yaml文件中设置多个命令?

对于端口,您可以添加以下行:

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

在我的情况下,我将使用websocket命令重建映像入口点。

最新更新