当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-30 03:40:48 PHP

使用Laravel和Symfony等RancherFrameworks提供核心代码,在K8S上部署高性能PHP应用程序。尽管它很受欢迎,但众所周知,PHP速度慢且难以维护。这两个问题近年来已经不那么严重了,但是高性能的PHP应用程序仍然需要两个功能:OPcache和PHPFastCGI进程管理器(PHP-FPM)。在本文中,您将学习如何使用自定义OPcache和PHP-FPM配置在Kubernetes上部署PHP应用程序以提高其性能。您将使用Rancher部署一个PHP应用程序,该应用程序使用自定义环境变量来动态配置OPcache和PHP-FPM。我们将展示如何将PHP-FPM配置选项构建到您的Docker镜像中,并使用容器中的环境变量调整它们。PHP中的性能首先,了解网络请求在PHP应用程序中的处理方式将对本文的其余部分有所帮助。PHP通常在Web服务器旁边运行,处理请求并将它们发送到PHP应用程序。您可以使用PHP-FPM或mod_PHP来运行您的应用程序,但在本文中我们将使用PHP-FPM,因为它具有性能优势,而NGINX是最常使用PHP-FPM的Web服务器。OPcache简介OPcache通过在第一次调用时将脚本存储在内存中来加速PHP应用程序。反过来,后续请求将从内存而不是文件系统加载,这可以使您获得74%的加速。OPcache提供了一些设置,您可以调整这些设置以提高应用程序的性能和可靠性。在本教程中,您将学习如何设置一个PHPDocker镜像,该镜像可以调整OPcache的内存限制、缓存文件数和缓存重新验证频率。PHP-FPM简介PHP-FPM(FastCGI进程管理器)将启动一个或多个进程来运行您的PHP应用程序。与mod_PHP(将PHP捆绑为Apache模块)不同,PHP-FPM可让您精确控制服务器(或容器)运行的进程数,以及它们应如何启动和停止。找到理想的PHP-FPM配置在很大程度上取决于您的应用程序及其服务的请求数量以及容器内的内存和CPU限制。我建议您阅读HaydenJames关于此主题的文章(链接在末尾)并在负载测试环境中测试几种不同的配置。在K8S上部署PHP应用程序的前期准备在继续本教程之前,您需要做以下准备工作:在您本地机器上安装的DockerHub或其他Docker镜像仓库(如果您还没有)上部署帐户Rancher全部本教程中使用的代码在Github中可用,或者您可以按照以下步骤从头开始构建应用程序。PHP应用程序您将使用的应用程序是一个显示当前日期的PHP文件。创建一个新文件并将其命名为index.php:/php-fpm。接下来,将图像推送到DockerHub:dockerpush/php-fpm以部署PHP-FPM工作负载,因为您的自定义PHP-FPM图像已经在DockerHub上可用,并且您可以将它们部署在Kubernetes集群上作为你的工作量。使用RancherUI,创建一个新部署,将其命名为php-fpm,并使用/php-fpm作为Docker镜像。您可以修改上述Dockerfile中使用的任何PHP_OPCACHE_...和PHP_FPM_...环境变量。在设置Nginx工作负载以服务于PHP-FPM部署之前,请检查您的PHP-FPM和OPcache设置是否已正确添加到容器中。在RancherUI中,单击PHP部署旁边的三个点,然后单击“执行Shell”:要检查OPcache模块是否已启用,请键入php-fpm-i。这将输出整个PHP.ini配置。查看关于OPcache的部分,您应该看到类似这样的内容(任何更改的值都会反映出来):...opcache.blacklist_filename=>novalue=>novalueopcache.consistency_checks=>0=>0opcache。dups_fix=>Off=>Offopcache.enable=>On=>Onopcache.enable_cli=>Off=>Offopcache.enable_file_override=>Off=>Offopcache.error_log=>无值=>无值opcache.file_cache=>无值=>无值缓存。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_locks_buffer=>pcath=>8>/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_debug_op=>0=>0opcache.optimization_level=>0x7FFEBFFF=>0x7FFEBFFFopcache.preferred_memory_model=>无值=>无值opcache.preload=>无值=>无值opcache.preload_user=>无值=>无值opcache.protect_memory=>0=>0opcache.restrict_api=>无值=>无值opcache.revalidate_freq=>0=>0opcache.revalidate_path=>关=>Offopcache.save_comments=>1=>1opcache.use_cwd=>开=>Onopcache.validate_permission=>关=>Offopcache.validate_root=>Off=>Offopcache.validate_timestamps=>Off=>Off...每当你重新部署PHP-FPM工作负载时,PHP-FPM会重启并重置OPcache,所以当你在Kubernetes中时,你通常没有在Rancher上运行PHP-FPM时担心重置OPcache。如果您确实必须手动刷新缓存,最简单的方法是从RancherUI重新部署工作负载。为确保PHP-FPM配置更改生效,请在shell中键入php-fpm-tt。您应该看到所有PHP-FPM选项的列表,包括流程管理器的更新部分(添加到www.conf文件并使用环境变量设置):注意:pm=dynamicNOTICE:pm.max_children=10NOTICE:pm.start_servers=2注意:pm.min_spare_servers=1注意:pm.max_spare_servers=2注意:pm.process_idle_timeout=10注意:pm.max_requests=1000部署Nginx工作负载现在,您有一个PHP-FPM工作负载,但没有Web服务器可以访问它.您可以使用许多NGINXDocker镜像来为您的PHP应用程序提供服务,但我通常使用这个NGINX镜像(https://www.shipphp.com/blog/2…),它允许您将一个镜像用于任意数量的PHP-FPM工作负载。在RancherUI中创建一个新的工作负载,在与PHP-FPM工作负载相同的集群上。将其命名为nginx,使用Docker镜像shipphp/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设置就像更改环境变量和重新部署工作负载一样简单。这将允许您尝试新设置并比重建图像更快地获得反馈。从Web应用程序中获得最佳性能是一个迭代过程,但希望本教程中的Kubernetes部署将帮助您构建性能更高的PHP应用程序。参考链接:PHP性能提升:https://gbksoft.com/blog/php-...PHP-FPM性能优势:https://www.cloudways.com/blo...NGINXhttp://nginx.org/en/OPcache配置设置:https://www.php.net/manual/en...提高OPcache应用程序的性能和可靠性:https://tideways.com/profiler...HaydenJames的PHPFPM调整文章:https://haydenjames.io/php-fp...PHP-FPM配置测试:https://speakerdeck.com/erict...