千家信息网

如何使用Rancher在K8S上部署高性能PHP应用程序

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"如何使用Rancher在K8S上部署高性能PHP应用程序",在日常操作中,相信很多人在如何使用Rancher在K8S上部署高性能PHP应用程序问题上存在疑惑,小编查阅了各式资料,整理
千家信息网最后更新 2026年11月02日如何使用Rancher在K8S上部署高性能PHP应用程序

这篇文章主要介绍"如何使用Rancher在K8S上部署高性能PHP应用程序",在日常操作中,相信很多人在如何使用Rancher在K8S上部署高性能PHP应用程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用Rancher在K8S上部署高性能PHP应用程序"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

介 绍

PHP是网络上最流行的编程语言之一,许多被广泛使用的内容管理系统都使用它开发,如WordPress和Drupal,并为现代服务器端框架(如Laravel和Symfony)提供核心代码。

尽管PHP很受欢迎,但是其缓慢和难以维护也是众所周知的。近几年这两个毛病已经没有那么严重了,但是高性能的PHP应用程序依然会需要两个功能:OPcache和PHP FastCGI进程管理器(PHP-FPM)。

在本文中,你将了解到在Kubernetes上如何使用自定义OPcache和PHP-FPM配置部署一个PHP应用程序以提高其性能。你将使用Rancher来部署一个PHP应用程序,该应用程序使用自定义环境变量来动态配置OPcache和PHP-FPM。我们将展示如何在你的Docker镜像中构建PHP-FPM配置选项并在容器中使用环境变量调整它们。

在PHP中的性能

首先,了解PHP应用程序中如何处理网络请求将对本文接下来的内容很有帮助。

PHP通常运行在web服务器旁边,处理请求并将它们发送到PHP应用程序中。你可以使用PHP-FPM或mod_PHP来运行你的应用程序,但在本文中我们将使用PHP-FPM,因为其性能优势并且NGINX是最常与PHP-FPM一起使用的web服务器。

OPcache介绍

OPcache通过在首次调用脚本时将脚本存储在内存中来加速PHP应用程序。进而,随后的请求将从内存而不是文件系统加载,这可以使你的速度提高74%。

OPcache提供了一些设置,你可以调整这些设置来提高应用程序的性能和可靠性。在本篇教程中,你将了解到如何设置一个PHP Docker镜像,该镜像可以调整OPcache的内存限制、缓存文件数量以及重新验证缓存频率。

PHP-FPM介绍

PHP-FPM(FastCGI进程管理器)会启动一个或多个进程以运行你的PHP应用程序。与mod_PHP(将PHP捆绑为Apache模块)不同,PHP-FPM使你可以精确控制服务器(或容器)运行的进程数量,以及它们应该如何启动和停止。

找到一个理想的PHP-FPM配置高度依赖于你的应用程序以及它所服务的请求数量和容器中的内存和CPU限制。我推荐你阅读Hayden James关于这个主题的文章(链接已放在文末)并且在负载测试环境下测试几种不同的配置。

在K8S上部署一个PHP应用程序

前期准备

在你进行本篇教程之前,你需要做好以下准备:

  • 在你本地机器上安装好的Docker

  • Docker Hub或其他Docker镜像仓库上的账号

  • Rancher部署(如果你还没部署,可以按照Quick start进行)

  • 通过Rancher管理的Kubernetes集群

在本教程中使用的所有代码都可以在Github中获取,或者你可以按照以下步骤从头开始构建应用程序。

PHP应用程序

你将要使用的应用程序是一个显示当前日期的PHP文件。创建一个新文件并将其命名为index.php:

创建Dockerfile和配置文件

在Docker Hub上,你可以获得很多PHP Docker镜像,但它们都没有提供使用环境变量来修改OPcache或PHP-FPM配置的简便方法。使用环境变量的优势在于,您无需每次要调整PHP-FPM或OPcache设置时都需要重建PHP映像。这可以让你快速调整你的应用程序以提升性能。

首先,创建一个名为opcache.ini的新文件。你将复制该文件到PHP镜像中并在Dockerfile中为每个环境变量添加默认值。

# See https://www.php.net/manual/en/opcache.configuration.php for all available configuration options.[opcache]opcache.enable=${PHP_OPCACHE_ENABLE}opcache.memory_consumption=${PHP_OPCACHE_MEMORY_CONSUMPTION}opcache.max_accelerated_files=${PHP_OPCACHE_MAX_ACCELERATED_FILES}opcache.revalidate_freq=${PHP_OPCACHE_REVALIDATE_FREQUENCY}opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMPS}

接下来,创建另一个名为www.conf的新文件。该文件将存储PHP-FPM配置选项,你可以通过环境变量对其进行更新:

; See https://www.php.net/manual/en/install.fpm.configuration.php for all available configuration options; Required user, group, and port options[www]user = www-datagroup = www-datalisten = 127.0.0.1:9000; Process manager optionspm = ${PHP_FPM_PM}pm.max_children = ${PHP_FPM_MAX_CHILDREN}pm.start_servers = ${PHP_FPM_START_SERVERS}pm.min_spare_servers = ${PHP_FPM_MIN_SPARE_SERVERS}pm.max_spare_servers = ${PHP_FPM_MAX_SPARE_SERVERS}pm.max_requests = ${PHP_FPM_MAX_REQUESTS}

你需要复制这些文件到你的Docker镜像中并且设置默认的环境变量值,因此请在项目的根目录中创建一个新的Dockerfile。添加以下步骤:

FROM php:7.4-fpm# OPcache defaultsENV PHP_OPCACHE_ENABLE="1"ENV PHP_OPCACHE_MEMORY_CONSUMPTION="128"ENV PHP_OPCACHE_MAX_ACCELERATED_FILES="10000"ENV PHP_OPCACHE_REVALIDATE_FREQUENCY="0"ENV PHP_OPCACHE_VALIDATE_TIMESTAMPS="0"# Install opcache and add the configuration fileRUN docker-php-ext-install opcacheADD opcache.ini "$PHP_INI_DIR/conf.d/opcache.ini"# PHP-FPM defaultsENV PHP_FPM_PM="dynamic"ENV PHP_FPM_MAX_CHILDREN="5"ENV PHP_FPM_START_SERVERS="2"ENV PHP_FPM_MIN_SPARE_SERVERS="1"ENV PHP_FPM_MAX_SPARE_SERVERS="2"ENV PHP_FPM_MAX_REQUESTS="1000"# Copy the PHP-FPM configuration fileCOPY ./www.conf /usr/local/etc/php-fpm.d/www.conf# Copy the PHP application fileCOPY ./index.php /var/www/public/index.phpRUN chown -R www-data:www-data /var/www/public

Dockerfile将OPCache配置、PHP-FPM配置以及PHP应用程序文件复制到镜像中,并确保包含PHP代码的var/www/public目录为PHP-FPM用户所有。ENV 声明设置了默认的PHP_OPCACHE_...和PHP_FPM_...环境变量,但你可以在运行这个镜像时随时覆盖它们。这将使实际部署中的性能调整变得更加容易。

构建并推送到DockerHub

至此,你的项目中已经有了一个单文件PHP应用程序、一个OPcache配置文件、一个PHP-FPM配置文件和一个Dockerfile。你现在可以构建你的Docker镜像:

docker build -t /php-fpm .

接下来,将镜像推送到Docker Hub:

docker push /php-fpm

部署一个PHP-FPM工作负载

既然你的自定义PHP-FPM镜像在Docker Hub上已经可以获取,你可以将其作为工作负载的一部分部署在Kubernetes集群上。使用Rancher UI,创建一个新的deployment,将其命名为php-fpm,并使用/php-fpm作为Docker镜像。你可以修改以上Dockerfile中使用的任何PHP_OPCACHE _...和PHP_FPM _...环境变量。

在设置Nginx工作负载以服务于PHP-FPM deployment之前,请检查你的PHP-FPM和OPcache设置是否已正确添加到容器中。在Rancher UI中,单击PHP deployment旁边的三个点,然后单击" Execute Shell":

要检查OPcache模块是否已启用,请键入php-fpm -i。这将输出整个PHP .ini配置。浏览一下OPcache上的部分,你应该会看到类似以下内容(更改的任何值都会反映出来):

...opcache.blacklist_filename => no value => no valueopcache.consistency_checks => 0 => 0opcache.dups_fix => Off => Offopcache.enable => On => Onopcache.enable_cli => Off => Offopcache.enable_file_override => Off => Offopcache.error_log => no value => no valueopcache.file_cache => no value => no valueopcache.file_cache_consistency_checks => 1 => 1opcache.file_cache_only => 0 => 0opcache.file_update_protection => 2 => 2opcache.force_restart_timeout => 180 => 180opcache.huge_code_pages => Off => Offopcache.interned_strings_buffer => 8 => 8opcache.lockfile_path => /tmp => /tmpopcache.log_verbosity_level => 1 => 1opcache.max_accelerated_files => 10000 => 10000opcache.max_file_size => 0 => 0opcache.max_wasted_percentage => 5 => 5opcache.memory_consumption => 256 => 256opcache.opt_debug_level => 0 => 0opcache.optimization_level => 0x7FFEBFFF => 0x7FFEBFFFopcache.preferred_memory_model => no value => no valueopcache.preload => no value => no valueopcache.preload_user => no value => no valueopcache.protect_memory => 0 => 0opcache.restrict_api => no value => no valueopcache.revalidate_freq => 0 => 0opcache.revalidate_path => Off => Offopcache.save_comments => 1 => 1opcache.use_cwd => On => Onopcache.validate_permission => Off => Offopcache.validate_root => Off => Offopcache.validate_timestamps => Off => Off...

每当你重新部署PHP-FPM工作负载时,PHP-FPM都会重新启动并重置OPcache,因此,当你在Kubernetes上运行PHP-FPM时,你通常不必担心重置OPcache。如果确实要手动刷新缓存,最简单的方法是从Rancher UI重新部署工作负载。

为了确保PHP-FPM配置更改可以生效,请在shell中键入php-fpm -tt。你应该看到所有PHP-FPM选项的列表,包括进程管理器更新的部分(该管理器添加到www.conf文件并使用环境变量进行设置):

NOTICE:  pm = dynamicNOTICE:  pm.max_children = 10NOTICE:  pm.start_servers = 2NOTICE:  pm.min_spare_servers = 1NOTICE:  pm.max_spare_servers = 2NOTICE:  pm.process_idle_timeout = 10NOTICE:  pm.max_requests = 1000

部署Nginx工作负载

现在,你有一个PHP-FPM工作负载,但是没有Web服务器可以访问它。你可以使用许多NGINX Docker镜像来为你的PHP应用程序提供服务,但是我通常使用这个NGINX镜像(https://www.shiphp.com/blog/2018/nginx-php-fpm-with-env ),它允许你通过使用环境变量将一个镜像用于任意数量的PHP-FPM工作负载。

在Rancher UI中创建新的工作负载,该负载与PHP-FPM工作负载在相同的集群上。将其命名为nginx,使用Docker镜像shiphp / nginx-env,将容器上的端口80映射到集群上的开放端口,并添加环境变量NGINX_HOST = php-fpm:

如果你把PHP-FPM工作负载命名为php-fpm以外的名字,或者你想为第二个工作负载提供服务,你可以使用NGINX_HOST环境变量来连接它,这也允许你在同一个集群上运行多个PHP-FPM和Nginx工作负载。这也允许你在同一个集群上运行多个PHP-FPM和Nginx工作负载。

一旦你的Nginx工作负载可用,点击它所在的端口链接,打开Web应用程序。你应该看到你的PHP脚本生成的当前日期。

结 论

现在,你已经将PHP-FPM工作负载部署到了Kubernetes集群中,你可以开始真正的性能调优工作了。幸运的是,现在更新 PHP-FPM 和 OPcache设置就像更改环境变量和重新部署 Workload 一样简单。这将允许你尝试新的设置,并比重新构建镜像更快获得反馈。

从Web应用程序中获得最佳性能是一个反复的过程,但希望本教程中的Kubernetes部署能帮助你构建更高性能的PHP应用程序。

到此,关于"如何使用Rancher在K8S上部署高性能PHP应用程序"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

应用程序 程序 应用 镜像 工作 文件 环境 配置 变量 服务 性能 运行 集群 高性能 管理 调整 容器 服务器 进程 接下来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 河南真二互联网科技有限公司 互联网中国科技 互联网 视角下的科技创新 互联网前沿科技 互联网科技生活的内容 互联网时代科技改变生活 来此购互联网科技有限公司 湖南一路畅行互联网科技 宜昌元轩互联网科技有限公司 互联网媒体平台算高科技产业 用友工业互联网科技发展 群盈汇互联网科技有限公司 元气玛特互联网科技公司是外包吗 电子商务与互联网科技的关系 卡尔迅互联网科技有限公司 绵阳真晨互联网科技有限公司 山东蛋芒互联网科技有限公司 优雇互联网科技有限公司 高科技和互联网的现代国家 广州为想互联网科技有限公司 互联网科技战争 海南科技产业互联网平台 中国科技互联网公司收入 科技与互联网哪个更好 栖莱科技互联网股份有限公司 千方科技属于互联网企业吗 山东星卡互联网科技有限公司官网 互联网科技收购价值 三亚科技创新互联网基地
0