通過(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 腳本,專(zhuān)門(mén)用于安裝核心擴(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
- 若類(lèi)型為
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)文章
k8s編排之StatefulSet知識(shí)點(diǎn)詳解二
這篇文章主要為大家介紹了k8s編排之StatefulSet知識(shí)點(diǎn)的部分詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
K8S部署Kafka界面管理工具(kafkamanager)方法詳解
這篇文章主要介紹了K8S部署Kafka界面管理工具(kafkamanager)方法詳解,需要的朋友可以參考下2022-01-01
k8s部署Pyroscope并分析golang性能瓶頸(最新推薦)
這篇文章主要介紹了k8s部署Pyroscope并分析golang性能瓶頸,Pyroscope支持多種編程語(yǔ)言并提供了豐富的性能數(shù)據(jù),可以幫助我們跟蹤應(yīng)用程序的執(zhí)行情況,并根據(jù)收集到的數(shù)據(jù)來(lái)識(shí)別性能瓶頸,需要的朋友可以參考下2023-04-04
k8s kubectl啟動(dòng)成功,但執(zhí)行命令時(shí)報(bào)錯(cuò)解決:The connection to&
用戶(hù)使用kubectl時(shí)出現(xiàn)連接拒絕錯(cuò)誤,排查發(fā)現(xiàn)配置文件名非admin.conf,修改后問(wèn)題解決,提示需使用kubernetes-admin配置文件以確保正確性2025-08-08
kubernetes部署dashboard及應(yīng)用小結(jié)
Dashboard?是基于網(wǎng)頁(yè)的?Kubernetes?用戶(hù)界面,可以對(duì)?Deployment?實(shí)現(xiàn)彈性伸縮、發(fā)起滾動(dòng)升級(jí)、重啟?Pod?或者使用向?qū)?chuàng)建新的應(yīng)用,這篇文章主要介紹了kubernetes部署dashboard,需要的朋友可以參考下2024-06-06
kubernetes?部署dashboard最新詳細(xì)步驟
這篇文章主要介紹了kubernetes?部署dashboard最新詳細(xì)步驟,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06

