构建php应用kubernetes部署体系:1. 用dockerfile打包镜像并验证;2. 编写deployment与service实现高可用;3. 配置hpa按cpu自动扩缩容;4. 通过coredns实现内网域名解析;5. 用configmap和secret分离配置与敏感信息。

一、构建容器化PHP应用镜像
将PHP项目打包为Docker镜像,是Kubernetes部署的前提。镜像需包含运行时环境、应用代码及依赖,并遵循最小化原则以提升安全性和启动效率。
1、在PHP项目根目录创建Dockerfile,基础镜像选用php:8.2-apache,启用mod_rewrite并复制项目代码至/var/www/html。
2、添加COPY . /var/www/html/指令后,执行RUN chown -R www-data:www-data /var/www/html确保Apache进程可读写。
3、暴露80端口,设置HEALTHCHECK指令调用curl -f http://localhost/health.php || exit 1实现健康探测。
4、执行docker build -t my-php-app:v1 . 构建镜像,并通过docker run -d -p 8080:80 my-php-app:v1验证本地运行正常。
二、编写Deployment与Service资源清单
Deployment用于声明Pod副本的期望状态与更新策略,Service则提供稳定的网络端点和服务发现能力,两者协同支撑PHP应用的高可用访问。
1、创建deployment.yaml,spec.replicas设为3,containers.image字段指定my-php-app:v1,resources.requests.cpu设为100m,limits.memory设为256Mi。
2、在containers.ports中定义name: http、containerPort: 80,并添加livenessProbe与readinessProbe,均指向/health.php路径,initialDelaySeconds均为10。
3、创建service.yaml,type设为ClusterIP,selector匹配deployment中定义的app: php-app标签,ports.targetPort设为80。
4、执行kubectl apply -f deployment.yaml && kubectl apply -f service.yaml部署资源,kubectl get pods -l app=php-app确认Pod就绪状态。
三、配置HorizontalPodAutoscaler实现CPU驱动扩缩容
HorizontalPodAutoscaler(HPA)依据实时指标动态调整Pod副本数,确保PHP应用在流量高峰时获得足够计算资源,低谷时释放冗余实例。
1、确保集群已启用metrics-server,执行kubectl top nodes验证指标采集正常。
2、创建hpa.yaml,spec.scaleTargetRef.apiVersion设为apps/v1,kind为Deployment,name为php-app-deployment。
3、spec.metrics配置为type: Resource,resource.name: cpu,target.averageUtilization设为70,表示当平均CPU使用率达70%时触发扩容。
4、执行kubectl apply -f hpa.yaml,随后使用kubectl get hpa观察TARGETS列变化,配合ab或hey工具施加压力验证副本自动增加至5。
四、集成CoreDNS实现服务内网域名解析
Kubernetes原生通过CoreDNS为每个Service分配
1、在PHP代码中,将原本写死的数据库连接地址localhost:3306替换为mysql-service.default.svc.cluster.local:3306。
2、确保mysql-service已存在且位于default命名空间,其ClusterIP类型Service已正确关联MySQL Pod。
3、在PHP容器内执行nslookup mysql-service.default.svc.cluster.local,确认返回非空A记录且解析成功。
4、修改PHP应用配置文件,将DB_HOST常量值设为mysql-service.default.svc.cluster.local,重启Pod使配置生效。
五、挂载ConfigMap与Secret分离配置与敏感信息
将数据库凭证、API密钥等敏感数据存入Secret,非敏感配置如调试开关、缓存主机地址存入ConfigMap,避免镜像污染并支持运行时热更新。
1、执行kubectl create configmap php-config --from-literal=APP_ENV=prod --from-literal=CACHE_HOST=redis-service.default.svc.cluster.local。
2、执行kubectl create secret generic php-secrets --from-literal=DB_PASSWORD=strong-pass-2026 --from-literal=JWT_KEY=base64-encoded-key-xyz。
3、在deployment.yaml的containers.envFrom下追加configMapRef.name: php-config与secretRef.name: php-secrets。
4、在PHP代码中通过getenv('DB_PASSWORD')获取凭证,通过getenv('CACHE_HOST')读取Redis地址,确保环境变量注入生效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











