在Kubernetes集群中部署Nginx、PHP、MySQL和Node.js服务需要以下步骤:

  1. 创建Docker镜像
  • 对于Nginx,你可以基于官方的Nginx镜像并添加你的配置文件和静态资源。
  • 对于PHP,你可以基于官方的PHP-FPM镜像,并将你的PHP应用代码复制到镜像中。
  • 对于MySQL,你可以使用官方的MySQL镜像,并通过环境变量设置root密码和其他配置。
  • 对于Node.js,你可以基于官方的Node.js镜像,并将你的Node.js应用代码复制到镜像中。
  1. 编写Kubernetes YAML文件
  • Nginx服务和部署:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: your-nginx-image:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP
  • PHP服务和部署:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: php
  template:
    metadata:
      labels:
        app: php
    spec:
      containers:
      - name: php
        image: your-php-image:latest
        ports:
        - containerPort: 9000
---
apiVersion: v1
kind: Service
metadata:
  name: php-service
spec:
  selector:
    app: php
  ports:
  - protocol: TCP
    port: 9000
    targetPort: 9000
  type: ClusterIP
  • MySQL服务和部署:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:latest
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: your-root-password
        ports:
        - containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  selector:
    app: mysql
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306
  type: ClusterIP
  • Node.js服务和部署:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodejs-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodejs
  template:
    metadata:
      labels:
        app: nodejs
    spec:
      containers:
      - name: nodejs
        image: your-nodejs-image:latest
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: nodejs-service
spec:
  selector:
    app: nodejs
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000
  type: ClusterIP
  1. 配置Nginx以代理PHP和Node.js应用: 在Nginx的配置文件中,你需要配置反向代理规则来转发请求到PHP和Node.js服务。例如:
server {
  listen 80;
  server_name your-domain.com;

  location /php-app {
    proxy_pass http://php-service:9000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }

  location /nodejs-app {
    proxy_pass http://nodejs-service:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}
  1. 部署服务: 将上述YAML文件保存为单独的文件(如nginx-deployment.yaml、php-deployment.yaml、mysql-deployment.yaml和nodejs-deployment.yaml),然后使用kubectl命令部署它们:
kubectl apply -f nginx-deployment.yaml
kubectl apply -f php-deployment.yaml
kubectl apply -f mysql-deployment.yaml
kubectl apply -f nodejs-deployment.yaml
  1. 验证服务: 使用kubectl get命令检查部署和服务的状态:
kubectl get deployments
kubectl get services

如果一切正常,你应该能看到所有的部署都处于运行状态,而服务也有了分配的Cluster IP。

请注意,这只是一个基本的示例,实际部署可能需要根据你的具体需求进行调整,例如考虑数据持久化、滚动更新、健康检查、安全性等。同时,确保你的Kubernetes集群版本与使用的API版本兼容。