通過(guò)kubernetes部署nginx+php網(wǎng)站環(huán)境過(guò)程
在 Kubernetes 中部署 Nginx + PHP 網(wǎng)站環(huán)境,需通過(guò) Deployment 管理應(yīng)用副本、Service 暴露服務(wù)端口,并利用 Ingress 實(shí)現(xiàn) HTTP 路由。
以下是具體步驟及配置示例:
一、環(huán)境準(zhǔn)備
Kubernetes 集群
Docker 鏡像
- PHP 應(yīng)用鏡像:基于官方 PHP 鏡像(如
php:7.4-fpm-alpine)構(gòu)建,包含應(yīng)用代碼。 - Nginx 鏡像:使用官方 Nginx 鏡像(如
nginx:1.16.1),需配置反向代理指向 PHP。
二、部署步驟
1. 創(chuàng)建 PHP Deployment
創(chuàng)建 Dockerfile:
創(chuàng)建一個(gè)包含以下內(nèi)容的 Dockerfile:
官方 PHP 鏡像提供了 docker-php-ext-install 腳本,專門用于安裝核心擴(kuò)展(包括 mysqli)。
dockerfile:
FROM php:7.4-fpm-alpine # 使用官方腳本安裝 mysqli 擴(kuò)展 RUN docker-php-ext-install mysqli
構(gòu)建并推送鏡像:
使用自己的鏡像倉(cāng)庫(kù) kubernetes-register.dong.com:
# 構(gòu)建鏡像 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 # 推送鏡像到你的私有倉(cāng)庫(kù) docker push kubernetes-register.dong.com/mysql/php-with-mysqli:7.4-fpm-alpine
定義 PHP 應(yīng)用的副本數(shù)、容器鏡像及端口(事先配置好PV動(dòng)態(tài)供給)
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. 創(chuàng)建 PHP Service
暴露 PHP 應(yīng)用的端口,供 Nginx 內(nèi)部訪問(wèn)。
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. 創(chuàng)建 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
關(guān)鍵點(diǎn):
- 通過(guò)
ConfigMap掛載 Nginx 配置文件(見(jiàn)下一步)。 - 通過(guò)PVC掛載網(wǎng)站文件。
- 容器端口為
80(HTTP 默認(rèn)端口)。
4. 創(chuàng)建 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. 創(chuàng)建 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(可選)
若需通過(guò)域名訪問(wèn),可部署 Ingress Controller(如 Nginx Ingress)并配置路由規(guī)則。
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
三、驗(yàn)證部署
檢查 Pod 狀態(tài):kubectl get pods
獲取 Service 外部 IP:kubectl get svc nginx-service
- 若類型為
LoadBalancer,會(huì)顯示外部 IP;若為NodePort,需通過(guò)節(jié)點(diǎn) IP + 端口訪問(wèn)。
訪問(wèn)應(yīng)用:
- 直接訪問(wèn)外部 IP 或域名。
- 檢查 PHP 是否正常解析(如創(chuàng)建
info.php文件輸出phpinfo())。
四、關(guān)鍵配置說(shuō)明
- PHP-FPM 端口:默認(rèn)
9000,需與 Nginx 配置一致。 - Nginx 反向代理:通過(guò)
fastcgi_pass指向 PHP Service 的 ClusterIP。 - 持久化存儲(chǔ):若需持久化數(shù)據(jù)(如上傳文件),需添加
PersistentVolumeClaim(PVC)。
五、擴(kuò)展優(yōu)化
- 自動(dòng)擴(kuò)縮容:為 Deployment 配置
Horizontal Pod Autoscaler(HPA)。 - 健康檢查:添加
livenessProbe和readinessProbe確保服務(wù)可用性。 - 日志收集:集成 Fluentd 或 Loki 收集容器日志。
通過(guò)以上步驟,即可在 Kubernetes 中高效部署 Nginx + PHP 網(wǎng)站環(huán)境,實(shí)現(xiàn)高可用、可擴(kuò)展的 Web 服務(wù)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Kubernetes應(yīng)用配置管理創(chuàng)建使用詳解
這篇文章主要為大家介紹了Kubernetes應(yīng)用配置管理創(chuàng)建使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
在k8s中副本使用pod的IP注冊(cè)到consul全過(guò)程
文章介紹了如何在Kubernetes環(huán)境中通過(guò)DNS獲取POD的IP,并將其用于注冊(cè)到Consul,通過(guò)修改服務(wù)啟動(dòng)腳本和Kubernetes樣本文件,使得微服務(wù)能夠獲取POD信息并使用該IP注冊(cè)到Consul,從而實(shí)現(xiàn)服務(wù)間的發(fā)現(xiàn)和通信2026-02-02
K8s集群(kubeadm)CA證書過(guò)期的解決過(guò)程
在K8s集群中,CA證書和Token都會(huì)過(guò)期,導(dǎo)致新節(jié)點(diǎn)無(wú)法加入集群,需要備份舊證書,重新生成新證書和配置文件,更新kubectl配置,重啟kubelet,重新加入工作節(jié)點(diǎn),驗(yàn)證集群節(jié)點(diǎn)狀態(tài)和健康狀況,確保K8s集群正常運(yùn)行2026-01-01
K8s Taint污點(diǎn)與Toleration容忍詳解
Kubernetes通過(guò)Taint與Toleration控制Pod調(diào)度與驅(qū)逐,Taint類型包括NoSchedule、NoExecute、PreferNoSchedule,Toleration可配置匹配規(guī)則及容忍時(shí)間,用于應(yīng)對(duì)節(jié)點(diǎn)故障、網(wǎng)絡(luò)抖動(dòng)等場(chǎng)景,同時(shí)需注意參數(shù)優(yōu)先級(jí)和內(nèi)置策略2025-08-08
Minikube極速搭建單機(jī)k8s集群全過(guò)程
本篇教程分享了如何在Ubuntu上安裝和配置Minikube,一個(gè)用于運(yùn)行單機(jī)Kubernetes集群的工具,文章詳細(xì)介紹了安裝Docker、Kubectl和Minikube的步驟,并指導(dǎo)如何啟動(dòng)集群、驗(yàn)證安裝以及部署一個(gè)簡(jiǎn)單的Nginx服務(wù)2025-12-12
kubernetes 使用jq命令對(duì)資源配置查看方式
這篇文章主要介紹了kubernetes 使用jq命令對(duì)資源配置查看方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11

