如何在Kubernetes 上部署安装PHP + Nginx 多容器应用

本文详细介绍了如何在Kubernetes集群上部署PHP应用,通过Nginx和PHP-FPM运行在不同容器中,实现服务的可重用性和可交换性。文章覆盖了从创建K8s环境、配置PHP-fpm和Nginx服务、创建持久卷到设置Ingress资源的全过程,适合有一定Kubernetes基础的学习者。同时,文中还提到了如何使用CSDN开发云的对象存储系统保存配置文件和应用代码。
摘要由CSDN通过智能技术生成

引言

Kubernetes是一个开源的容器编排系统。它允许你创建、更新和扩展容器,而无需担心停机。

要运行一个PHP应用程序,Nginx充当PHP-FPM的代理。将此设置打包到单个容器中可能是一个繁琐的过程,但Kubernetes将帮助在不同的容器中管理这两个服务。使用Kubernetes将允许你保持容器的可重用性和可交换性,并且不必在每次有新版本的Nginx或PHP时重新构建容器镜像。

在本教程中,你将在Kubernetes集群上部署一个PHP7应用程序,其中Nginx和PHP-FPM运行在不同的容器中。你还将学习如何使用CSDN 开发云的对象存储系统将配置文件和应用程序代码保存在容器映像之外。这种方法将允许你通过传递配置卷,为任何需要Web的应用程序重用Nginx镜像,而不是重新构建镜像。

点击下图观看一条命令部署安装过程
asciicast

先决条件

对 Kubernetes 有初步了解。如果你没有接触过 k8s,也完全可以按照教程完成php程序部署,在通过学习k8s官方文档 了解 k8s 的各个组件

整个教程大概用时 10 分钟 至 20 分钟。

步骤1 - 创建k8s环境

本教程采用CSDN 开发云提供了k8s学习环境,一键创建了k8s环境。CSDN 开发云k8s 学习环境按小时付费使用,每小时仅 0.1元。学习完毕后可以释放主机资源即会停止计费。

点这里一键拥有 k8s 环境
你也可以使用其他方法创建自己的k8s集群。
在这里插入图片描述
点击【立即购买】后,几分钟后你可以拥有自己的k8s集群。
在这里插入图片描述
使用 ssh 终端工具登录云主机,接下来的步骤都在终端中进行

步骤2- 创建PHP-fpm和Nginx服务

在本步骤中,你将创建PHP-FPM和Nginx服务。服务允许从集群内访问一组Pod。集群内的服务可以通过它们的名称直接访问,而不需要IP地址。PHP-FPM服务将允许访问PHP-FPM pod,而nginx服务将允许访问nginx pod。

由于Nginx Pod将代理PHP-FPM Pod,因此你需要告诉服务如何找到它们。与使用IP地址不同,你将利用Kubernetes的自动服务发现功能,使用名称将请求路由到对应的服务。

要创建服务,你需要创建一个对象定义文件。每个Kubernetes对象定义都是一个至少包含以下项的YAML文件:

  • apiVersion: 定义所属的Kubernetes接口版本
  • kind: 该文件所代表的Kubernetes对象,例如:pod 或 service
  • metadata: 它包含对象的名称以及你可能想要应用到它的任何Labels
  • spec: 它包含一个特定的配置,具体取决于你创建的对象的类型,例如容器镜像或容器将从其上访问的端口。

首先,你将创建一个目录来保存你的Kubernetes对象定义。

通过SSH连接到你的主节点,并创建存放你的Kubernetes对象定义的definitions目录。

mkdir definitions

导航到新创建的definitions目录:

cd definitions

创建php_service.yaml文件来创建你的PHP-fpm服务:

vi php_service.yaml

设置kindService,表示该对象为服务:

apiVersion: v1
  kind: Service

将服务命名为php,因为它将提供对PHP-fpm的访问:

php_service.yaml

...
metadata:
  name: php

你将使用标签对不同的对象进行逻辑分组。在本教程中,你将使用标签将对象分组为“层”,如前端或后端。PHP实例将运行在该服务的后面,因此你需要将其标记为tier:backend

...
  labels:
    tier: backend

服务使用`选择器‘标签来确定要访问哪些实例。无论Pod是在服务之前还是之后创建的,都将服务与这些标签匹配的Pod。在本教程的后面部分,你将为Pod添加标签。

使用tier:backend标签将实例分配到后端层。你还需要添加app:php标签,以指定该实例运行PHP。将这两个标签添加到metadata部分之后。

...
spec:
  selector:
    app: php
    tier: backend

接下来,指定用于访问此服务的端口。在本教程中,你将使用端口9000。添加到spec下的php_service.yaml文件中:

...
  ports:
    - protocol: TCP
      port: 9000

完成的php_service.yaml文件将如下所示:

apiVersion: v1
kind: Service
metadata:
  name: php
  labels:
    tier: backend
spec:
  selector:
    app: php
    tier: backend
  ports:
  - protocol: TCP
    port: 9000

点击CTRL+O保存文件,点击CTRL+X退出nano

现在你已经为你的服务创建了对象定义,要运行服务,你将使用kubectl apply命令和-f参数,并指定你的php_service.yaml文件。

用以下命令创建你的服务:

kubectl apply -f php_service.yaml

命令输出如下:

service/php created

验证你的服务是否正在运行:

kubectl get svc

你将看到你的PHP-fpm服务正在运行:

Output
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.43.0.1       <none>        443/TCP    10m
php          ClusterIP   10.43.76.123   <none>        9000/TCP   5m

Kubernetes支持多种服务类型。你的php服务使用默认服务类型ClusterIP。此服务类型分配一个内部IP,并使该服务只能从群集中访问。

现在已经准备好了PHP-fpm服务,你将创建nginx服务。使用编辑器创建并打开一个名为nginx_service.yaml的新文件:

nano nginx_service.yaml

此服务针对的是Nginx实例,因此你将其命名为nginx。你还需要添加一个tier:backend标签,因为它属于后端层:

nginx_service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    tier: backend

php服务类似,使用选择器标签app:nginxtier:backend来定位实例。使此服务可以在默认的HTTP端口80上访问。

nginx_service.yaml

...
spec:
  selector:
    app: nginx
    tier: backend
  ports:
  - protocol: TCP
    port: 80

你的nginx_service.yaml文件将如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    tier: backend
spec:
  selector:
    app: nginx
    tier: backend
  ports:
  - protocol: TCP
    port: 80
 

保存并关闭该文件。创建nginx服务:

kubectl apply -f nginx_service.yaml

当服务运行时,你将看到以下输出:

service/nginx created

你可以通过执行以下命令来查看所有正在运行的服务:

kubectl get svc

你将在输出中看到列出的PHP-fpm和nginx服务:

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.43.0.1      <none>           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多鱼的夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值