Yii3.0 Kubernetes部署配置【云原生】

夜磊大大_5491

夜磊大大_5491

2026-08-08

247人浏览

原创

需确保php扩展(pdo、mbstring等)完整启用、使用statefulset绑定pvc持久化配置与日志、配置memory指标驱动的hpa防oom、ingress正确重写url,并通过livenessprobe:/healthz保障服务健康。

yii3.0 kubernetes部署配置【云原生】

在Kubernetes集群中稳定运行Yii3.0应用,需确保PHP运行时、容器镜像构建、资源配置与服务暴露全部适配云原生规范,避免因扩展加载缺失或资源限制过严导致Pod反复CrashLoopBackOff。

构建兼容K8s的Yii3.0容器镜像

使用Alpine基础镜像可显著减小体积,但必须手动启用PDO、OpenSSL、mbstring等Yii3运行必需扩展。

创建Dockerfile:

FROM php:8.3-alpine

RUN apk add --no-cache nginx supervisor curl git && \
docker-php-ext-install pdo_mysql mbstring opcache && \
pecl install xdebug && docker-php-ext-enable xdebug

COPY ./app /var/www/html

RUN chown -R www-data:www-data /var/www/html && \
chmod +x /var/www/html/yii

EXPOSE 80

CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

这一步不能跳过:Yii3默认依赖ext-pdo和ext-mbstring,Alpine镜像默认不启用,【缺少任一扩展将导致应用启动失败且无明确报错】。

编写StatefulSet部署Yii3应用

Yii3应用通常需要持久化配置(如.env)、日志路径及上传目录,用StatefulSet比Deployment更利于绑定PVC。

第一步:创建ConfigMap挂载环境变量

kubectl create configmap yii3-config --from-file=.env=./.env.prod --namespace=prod

第二步:声明PersistentVolumeClaim用于日志与上传存储

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: yii3-storage
namespace: prod
spec:
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 2Gi

第三步:定义StatefulSet,注意volumeMounts路径与Yii3实际写入路径严格一致

volumeMounts:
- name: config
mountPath: /var/www/html/.env
subPath: .env
- name: storage
mountPath: /var/www/html/runtime
- name: storage
mountPath: /var/www/html/web/uploads

第四步:设置livenessProbe与readinessProbe路径为/healthz,需在Yii3中提前注册该路由并返回200。

配置Ingress暴露Yii3服务

方法一:使用标准nginx-ingress控制器

Kubernetes Network Policy Generator
Kubernetes Network Policy Generator

使用加权评分卡在12项标准上评估和比较隐私解决方案供应商。适用于选择隐私管理软件、比较数据保护方案等场景。

下载

创建Ingress资源,host字段必须与集群DNS解析策略匹配,否则404

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: yii3-ingress
namespace: prod
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: nginx
rules:
- host: app.example.com
http:
paths:
- path: /(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: yii3-service
port:
number: 80

方法二:若使用Traefik,需额外添加traefik.ingress.kubernetes.io/router.middlewares注解启用重写中间件,否则Yii3的URL Manager规则无法生效。

配置HorizontalPodAutoscaler自动扩缩容

Yii3应用CPU使用率波动大,尤其在处理文件上传或报表导出时,应基于memory指标而非CPU触发扩容。

第一步:确认metrics-server已就绪

kubectl get apiservice | grep metrics

第二步:创建HPA,最小副本设为2,避免单点故障

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: yii3-hpa
namespace: prod
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: StatefulSet
name: yii3-app
minReplicas: 2
maxReplicas: 6
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 75

这一步很重要:Yii3的内存占用具有突发性,【仅监控CPU会导致扩缩容滞后,Pod OOM被Kill】。

验证Yii3 Pod健康状态

进入Pod执行诊断命令:

kubectl exec -it yii3-app-0 -n prod -- sh

检查PHP扩展是否完整加载:

php -m | grep -E "(pdo|mbstring|opcache)"

验证Yii3应用入口是否可响应:

curl -I http://localhost/index.php?r=site%2Fhealth

确认容器内Nginx进程运行正常:

ps aux | grep nginx

若返回HTTP 502,说明Supervisor未正确拉起Nginx子进程,需检查/etc/supervisor/conf.d/supervisord.conf中autostart=true和startsecs=10是否设置。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Golang 云原生与容器化开发
Golang 云原生与容器化开发

本专题聚焦 Golang 在云原生与容器化环境中的应用,系统讲解 Docker 镜像构建、Kubernetes 部署与调度、服务网格、微服务通信、日志与监控等关键技术。通过实战案例(如微服务电商平台部署、容器化API网关开发),帮助学习者掌握 从开发到运维的完整云原生实践能力。

2025.09.29

6385

11

Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

2025.12.22

116

5

Go云原生应用与Kubernetes服务部署实战
Go云原生应用与Kubernetes服务部署实战

本专题围绕 Go 语言在云原生环境中的应用展开,讲解容器化部署、Kubernetes 编排、服务发现、健康检查与弹性扩缩容机制。通过真实云端案例,帮助开发者构建可扩展的云原生微服务架构。

2026.06.29

168

19

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

2930

22

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

60

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

80

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习