通过kubernetes部署nginx+php网站环境过程

 更新时间:2026年01月26日 10:13:22   作者:ICT董老师  
本文详细介绍了如何在Kubernetes中部署Nginx+PHP网站环境,包括环境准备、部署步骤、Service、ConfigMap、Ingress等配置,并提供了具体的YAML文件示例和命令,通过这些步骤,可以实现高可用、可扩展的Web服务

在 Kubernetes 中部署 Nginx + PHP 网站环境,需通过 Deployment 管理应用副本、Service 暴露服务端口,并利用 Ingress 实现 HTTP 路由。

以下是具体步骤及配置示例:

一、环境准备

Kubernetes 集群

Docker 镜像

  • PHP 应用镜像:基于官方 PHP 镜像(如 php:7.4-fpm-alpine)构建,包含应用代码。
  • Nginx 镜像:使用官方 Nginx 镜像(如 nginx:1.16.1),需配置反向代理指向 PHP。

二、部署步骤

1. 创建 PHP Deployment

创建 Dockerfile

创建一个包含以下内容的 Dockerfile

官方 PHP 镜像提供了 docker-php-ext-install 脚本,专门用于安装核心扩展(包括 mysqli)。

dockerfile:

FROM php:7.4-fpm-alpine

# 使用官方脚本安装 mysqli 扩展
RUN docker-php-ext-install mysqli

构建并推送镜像

使用自己的镜像仓库 kubernetes-register.dong.com

# 构建镜像
docker build -t kubernetes-register.dong.com/php-with-mysqli:7.4-fpm-alpine .

docker tag kubernetes-register.dong.com/php-with-mysqli:7.4-fpm-alpine kubernetes-register.dong.com/mysql/php-with-mysqli:7.4-fpm-alpine

# 推送镜像到你的私有仓库
docker push kubernetes-register.dong.com/mysql/php-with-mysqli:7.4-fpm-alpine

定义 PHP 应用的副本数、容器镜像及端口(事先配置好PV动态供给)

php-deployment.yaml

# php-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: php
  template:
    metadata:
      labels:
        app: php
    spec:
      containers:
      - name: php
        image: kubernetes-register.dong.com/mysql/php-with-mysqli:7.4-fpm-alpine
        ports:
        - containerPort: 9000
        volumeMounts:
        - name: html
          mountPath: /var/www/html
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: nginx-pvc

命令:

kubectl apply -f php-deployment.yaml

2. 创建 PHP Service

暴露 PHP 应用的端口,供 Nginx 内部访问。

php-service.yaml

# php-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: php-service
spec:
  selector:
    app: php
  ports:
  - protocol: TCP
    port: 9000
    targetPort: 9000

命令:

kubectl apply -f php-service.yaml

3. 创建 Nginx Deployment

配置 Nginx 作为反向代理,指向 PHP Service。

nginx-deployment.yaml

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1
        ports:
        - containerPort: 80
        volumeMounts:
        - name: html
          mountPath: /var/www/html
        - name: nginx-config
          mountPath: /etc/nginx/conf.d
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: nginx-pvc
      - name: nginx-config
        configMap:
          name: nginx-config

关键点

  • 通过 ConfigMap 挂载 Nginx 配置文件(见下一步)。
  • 通过PVC挂载网站文件。
  • 容器端口为 80(HTTP 默认端口)。

4. 创建 Nginx ConfigMap

定义 Nginx 反向代理配置,指向 PHP Service。

nginx-configmap.yaml

# nginx-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  default.conf: |
    server {
        listen 80;
        server_name student.dong.com;

        location / {
            root   /var/www/html;
            index  index.php index.html index.htm;
        }

        location ~ \.php$ {
            fastcgi_pass   php-service:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }

命令:

kubectl apply -f nginx-configmap.yaml
kubectl apply -f nginx-deployment.yaml

5. 创建 Nginx Service

暴露 Nginx 端口到集群外部(如 NodePort 或 LoadBalancer)。

nginx-service.yaml

# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

命令:

kubectl apply -f nginx-service.yaml

6. 部署 Ingress(可选)

若需通过域名访问,可部署 Ingress Controller(如 Nginx Ingress)并配置路由规则。

ingress.yaml

# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
    # annotations:
    # nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  rules:
  - host: student.dong.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80

命令:

kubectl apply -f ingress.yaml

三、验证部署

检查 Pod 状态:kubectl get pods

获取 Service 外部 IP:kubectl get svc nginx-service

  • 若类型为 LoadBalancer,会显示外部 IP;若为 NodePort,需通过节点 IP + 端口访问。

访问应用

  • 直接访问外部 IP 或域名。
  • 检查 PHP 是否正常解析(如创建 info.php 文件输出 phpinfo())。

四、关键配置说明

  • PHP-FPM 端口:默认 9000,需与 Nginx 配置一致。
  • Nginx 反向代理:通过 fastcgi_pass 指向 PHP Service 的 ClusterIP。
  • 持久化存储:若需持久化数据(如上传文件),需添加 PersistentVolumeClaim(PVC)。

五、扩展优化

  • 自动扩缩容:为 Deployment 配置 Horizontal Pod Autoscaler(HPA)。
  • 健康检查:添加 livenessProbe 和 readinessProbe 确保服务可用性。
  • 日志收集:集成 Fluentd 或 Loki 收集容器日志。

通过以上步骤,即可在 Kubernetes 中高效部署 Nginx + PHP 网站环境,实现高可用、可扩展的 Web 服务。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Kubernetes应用配置管理创建使用详解

    Kubernetes应用配置管理创建使用详解

    这篇文章主要为大家介绍了Kubernetes应用配置管理创建使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • k8s中对gkv的理解TypeData详解

    k8s中对gkv的理解TypeData详解

    Kubernetes资源通过GKV(Group、Version、Kind)标识,用于分类、版本管理和资源识别,在YAML配置中,apiVersion和kind字段分别体现GKV,是K8s资源操作的基础,通过GKV,Kubernetes可以正确解析和执行资源配置,并确保版本兼容性
    2025-11-11
  • k8s的包管理工具helm使用简介

    k8s的包管理工具helm使用简介

    这篇文章主要为大家介绍了k8s的包管理工具helm使用简介,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 在k8s中副本使用pod的IP注册到consul全过程

    在k8s中副本使用pod的IP注册到consul全过程

    文章介绍了如何在Kubernetes环境中通过DNS获取POD的IP,并将其用于注册到Consul,通过修改服务启动脚本和Kubernetes样本文件,使得微服务能够获取POD信息并使用该IP注册到Consul,从而实现服务间的发现和通信
    2026-02-02
  • K8s集群(kubeadm)CA证书过期的解决过程

    K8s集群(kubeadm)CA证书过期的解决过程

    在K8s集群中,CA证书和Token都会过期,导致新节点无法加入集群,需要备份旧证书,重新生成新证书和配置文件,更新kubectl配置,重启kubelet,重新加入工作节点,验证集群节点状态和健康状况,确保K8s集群正常运行
    2026-01-01
  • K8s Taint污点与Toleration容忍详解

    K8s Taint污点与Toleration容忍详解

    Kubernetes通过Taint与Toleration控制Pod调度与驱逐,Taint类型包括NoSchedule、NoExecute、PreferNoSchedule,Toleration可配置匹配规则及容忍时间,用于应对节点故障、网络抖动等场景,同时需注意参数优先级和内置策略
    2025-08-08
  • Minikube极速搭建单机k8s集群全过程

    Minikube极速搭建单机k8s集群全过程

    本篇教程分享了如何在Ubuntu上安装和配置Minikube,一个用于运行单机Kubernetes集群的工具,文章详细介绍了安装Docker、Kubectl和Minikube的步骤,并指导如何启动集群、验证安装以及部署一个简单的Nginx服务
    2025-12-12
  • K8s之StatefulSet控制器使用实例

    K8s之StatefulSet控制器使用实例

    在Kubernetes实战中,StatefulSet控制器用于部署和管理有状态应用,这些应用需要稳定的持久化存储、有序的部署和扩展、以及唯一的网络标识,这篇文章主要介绍了K8s之StatefulSet控制器使用的相关资料,需要的朋友可以参考下
    2026-04-04
  • kubernetes 使用jq命令对资源配置查看方式

    kubernetes 使用jq命令对资源配置查看方式

    这篇文章主要介绍了kubernetes 使用jq命令对资源配置查看方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • kubernetes-1.25.6二进制部署方式

    kubernetes-1.25.6二进制部署方式

    这篇文章主要介绍了kubernetes-1.25.6二进制部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07

最新评论