如何使用Helm在Kubernetes上部署Laravel7和MySQL

来自菜鸟教程
跳转至:导航、​搜索

作为 Write for DOnations 计划的一部分,作者选择了 Diversity in Tech Fund 来接受捐赠。

介绍

Laravel 是当今最流行的开源 PHP 应用程序框架之一。 它通常与 MySQL 数据库一起部署,但可以配置为使用各种后端数据存储选项。 Laravel 以利用 PHP 的许多现代特性和广泛的包生态系统而自豪。

Kubernetes 是一个容器编排平台,可以托管在 DigitalOcean Kubernetes 集群 上,以在生产环境中消除设置和运行容器的大部分管理工作。 Helm 是一个 Kubernetes 包管理器,可以更轻松地在 Kubernetes 上配置和安装服务和 Pod。

在本指南中,您将创建一个 Laravel PHP 应用程序,将您的应用程序构建到 Docker 映像中,并使用 LAMP Helm 图表 将该映像部署到 DigitalOcean Kubernetes 集群。 接下来,您将设置一个 Ingress Controller 以将 SSL 和自定义域名添加到您的应用程序。 完成后,您将有一个工作的 Laravel 应用程序连接到在 Kubernetes 集群上运行的 MySQL 数据库。

先决条件

第 1 步——创建一个新的 Laravel 应用程序

在这一步中,您将使用 Docker 创建一个新的 Laravel 7 应用程序,但您应该能够通过使用 MySQL 作为后备数据库的现有 Laravel 应用程序完成相同的过程。 您构建的新应用程序将验证 Laravel 是否已连接到数据库并显示数据库的名称。

首先,移动到你的主目录,然后使用 composer Docker 容器创建一个新的 Laravel 应用程序:

cd ~
docker run --rm -v $(pwd):/app composer create-project --prefer-dist laravel/laravel laravel-kubernetes

一旦容器完成并安装了所有 Composer 包,你应该会在名为 laravel-kubernetes/ 的当前目录中看到 Laravel 的全新安装。 导航到该文件夹:

cd ~/laravel-kubernetes

您将从此处执行本教程的其余命令。

此应用程序的目的是测试您的数据库连接并在浏览器中显示其名称。 为了测试数据库连接,在文本编辑器中打开 ./resources/views/welcome.blade.php 文件:

nano ./resources/views/welcome.blade.php

找到 <div class="links">...</div> 部分并将其内容替换为以下内容:

./resources/views/welcome.blade.php

...
<div class="links">
   <strong>Database Connected: </strong>
    @php
        try {
            DB::connection()->getPDO();
            echo DB::connection()->getDatabaseName();
            } catch (\Exception $e) {
            echo 'None';
        }
    @endphp
</div>
...

保存并关闭文件。

这就是您需要对本教程的默认 Laravel 应用程序进行的所有自定义。 完成后,这个简短的 PHP 片段将测试您的数据库连接并在您的 Web 浏览器的 Laravel 启动屏幕上显示数据库的名称。

在下一步中,您将使用 Docker 构建包含此 Laravel 应用程序的映像,并使用 Docker Compose 来测试它是否在本地运行并连接到 MySQL 数据库。

第 2 步 — 将 Laravel 应用程序容器化

现在您已经创建了一个新的 Laravel 应用程序,您需要将代码构建到 Docker 映像中,然后使用 Docker Compose 测试该映像。 虽然本教程的目标是将您的应用程序部署到 Kubernetes 集群,但 Docker Compose 是一种在云中运行之前在本地测试 Docker 映像和配置的便捷方式。 这种快速反馈循环可用于进行和测试小的更改。

首先,使用 nano 或您喜欢的文本编辑器,在 Laravel 应用程序的根目录中创建一个名为 Dockerfile 的文件:

nano ./Dockerfile

添加以下内容。 Docker 将使用此文件将您的代码构建到映像中:

./Dockerfile

FROM php:7.4-apache

# Install packages
RUN apt-get update && apt-get install -y \
    git \
    zip \
    curl \
    sudo \
    unzip \
    libicu-dev \
    libbz2-dev \
    libpng-dev \
    libjpeg-dev \
    libmcrypt-dev \
    libreadline-dev \
    libfreetype6-dev \
    g++

# Apache configuration
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN a2enmod rewrite headers

# Common PHP Extensions
RUN docker-php-ext-install \
    bz2 \
    intl \
    iconv \
    bcmath \
    opcache \
    calendar \
    pdo_mysql

# Ensure PHP logs are captured by the container
ENV LOG_CHANNEL=stderr

# Set a volume mount point for your code
VOLUME /var/www/html

# Copy code and run composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . /var/www/tmp
RUN cd /var/www/tmp && composer install --no-dev

# Ensure the entrypoint file can be run
RUN chmod +x /var/www/tmp/docker-entrypoint.sh
ENTRYPOINT ["/var/www/tmp/docker-entrypoint.sh"]

# The default apache run command
CMD ["apache2-foreground"]

保存并关闭文件。

这个 Dockerfile 从 Docker Hub 上的 PHP 7.4 Apache Docker Image 开始,然后安装 Laravel 应用程序通常需要的几个 Linux 包。 接下来,它创建 Apache 配置文件并启用标头重写。 Dockerfile 安装了几个常见的 PHP 扩展并添加了一个环境变量,以确保 Laravel 的日志通过 stderr 流式传输到容器。 这将允许您通过跟踪 Docker Compose 或 Kubernetes 日志来查看 Laravel 日志。

最后,Dockerfile 将 Laravel 应用程序中的所有代码复制到 /var/www/tmp 并安装 Composer 依赖项。 然后它会设置一个 ENTRYPOINT,但您需要创建该文件,我们接下来将执行此操作。

在项目的根目录中,创建一个名为 docker-entrypoint.sh 的新文件。 当您的容器在本地或在 Kubernetes 集群中运行时,此文件将运行,它会将您的 Laravel 应用程序代码从 /var/www/tmp 目录复制到 Apache 能够为其提供服务的 /var/www/html 目录。

nano ./docker-entrypoint.sh

现在添加以下脚本:

./docker-entrypoint.sh

#!/bin/bash

cp -R /var/www/tmp/. /var/www/html/
chown -R www-data:www-data /var/www/html

exec "$@"

最后一行 exec "$@" 指示 shell 运行接下来作为输入参数传入的任何命令。 这很重要,因为您希望 Docker 在此脚本执行后继续运行 Apache 运行命令 (apache2-foreground)。 保存并关闭文件。

接下来,在应用的根目录中创建一个 .dockerignore 文件。 此文件将确保在您构建 Docker 映像时,它不会被不应复制到其中的包或环境文件污染:

nano ./.dockerignore

./.dockerignore

.env
/vendor

保存并关闭文件。

在您可以使用 Docker Compose 在本地运行您的应用程序之前,您需要创建的最后一个文件是 docker-compose.yml 文件。 但是在配置这个 YAML 文件的时候,你需要输入 Laravel 在安装过程中生成的 APP_KEY。 通过打开并搜索 ./.env 文件或运行以下 catgrep 命令来找到它:

cat .env | grep ^APP_KEY

你会看到这样的输出:

OutputAPP_KEY=base64:0EHhVpgg ... UjGE=

将您的密钥复制到剪贴板。 请务必包含 base64: 前缀。 现在在应用程序的根目录中创建 docker-compose.yml 文件:

nano ./docker-compose.yml

在这里,我们将包含您的 Laravel 应用程序的 PHP 映像以及一个 MySQL 容器来运行您的数据库。 添加以下内容:

./docker-compose.yml

version: '3.5'
services:
  php:
    image: your_docker_hub_username/laravel-kubernetes:latest
    restart: always
    ports:
      - 8000:80
    environment:
      - APP_KEY="your_laravel_app_key"
      - APP_ENV=local
      - APP_DEBUG=true
      - DB_PORT=3306
      - DB_HOST=mysql
      - DB_DATABASE
      - DB_USERNAME
      - DB_PASSWORD
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
      - MYSQL_DATABASE=${DB_DATABASE}
      - MYSQL_USER=${DB_USERNAME}
      - MYSQL_PASSWORD=${DB_PASSWORD}

将复制到剪贴板的 APP_KEY 变量用于 your_laravel_app_key 变量,并将 Docker Hub 用户名用于 your_docker_hub_username 变量。 保存并关闭文件。

您将使用 docker build 在本地创建第一个图像。 第二个镜像是 Docker Hub 上可用的官方 MySQL Docker 镜像。 两者都需要几个环境变量,您将在运行容器时将其包括在内。

为了构建包含 Laravel 应用程序的 Docker 映像,请运行以下命令。 确保将 your_docker_hub_username 替换为您的用户名或您团队在 Docker Hub 上的用户名,该图像将存储在该处:

docker build -t your_docker_hub_username/laravel-kubernetes:latest .

接下来,您可以使用 Docker Compose 使用所需的数据库凭据运行这两个容器:

DB_ROOT_PASSWORD=rootpassword DB_DATABASE=local_db DB_USERNAME=admin DB_PASSWORD=password docker-compose up -d

如果您愿意,可以修改此处使用的四个环境变量(DB_ROOT_PASSWORDDB_DATABASEDB_USERNAMEDB_PASSWORD),但由于您只是在测试您的应用程序在本地,您不必担心保护它们。

MySQL 数据库初始化和容器准备就绪可能需要长达 30 秒的时间。 完成后,您可以在机器上的 localhost:8000 上查看您的 Laravel 应用程序。

您的 PHP 应用程序将连接到您的 MySQL 数据库。 连接成功后,Laravel logo 下方会出现“Database Connected: local_db”文字。

现在您已经使用 Docker Compose 在本地测试了 Docker 映像,您可以通过运行 docker-compose down 来关闭容器:

docker-compose down

在下一部分中,您会将 Docker 映像推送到 Docker Hub,以便您的 Helm 图表可以使用它来将您的应用程序部署到 Kubernetes 集群。

第 3 步 — 将 Docker 映像推送到 Docker Hub

您将用于将代码部署到 Kubernetes 的 LAMP Helm Chart 要求您的代码在容器注册表中可用。 虽然您可以将映像推送到私有或自托管注册表,但出于本教程的目的,您将在 Docker Hub 上使用公开可用且免费的 Docker 注册表。

使用 Web 浏览器在 Docker Hub 上访问您的帐户,然后创建一个名为 laravel-kubernetes 的新存储库。

接下来,如果您尚未从本地计算机连接到 Docker Hub,则需要登录到 Docker Hub。 您可以通过命令行执行此操作:

docker login -u your_docker_hub_username

出现提示时输入您的登录凭据。 这通常只需要每台机器执行一次,因为 Docker 会将您的凭据保存到主目录中的 ~/.docker/config.json 中。

最后,将你的镜像推送到 Docker Hub:

docker push your_docker_hub_username/laravel-kubernetes:latest

根据您的连接速度,上传您的应用程序可能需要几分钟,但是一旦 Docker 完成,您将在终端中看到最终的摘要哈希和图像的大小。 它看起来像这样:

Outputlatest: digest: sha256:df4bdeda91484c8c26a989b13b8f27ab14d93ab2e676e3c396714cb3811c4086 size: 4918

现在您的 Laravel 应用程序已经容器化,并且您已经将镜像推送到 Docker Hub,您可以在 Helm Chart 或 Kubernetes 部署中使用该镜像。 在下一步中,您将根据 LAMP Helm Chart 设置自定义值并将其部署到您的 DigitalOcean Kubernetes 集群。

第 4 步 — 使用 LAMP Helm Chart 配置和部署应用程序

Helm 提供了许多 Charts 来帮助您使用预设的工具组合设置 Kubernetes 应用程序。 虽然您可以编写自己的 Kubernetes 服务文件 来完成类似的部署,但您将在本节中看到使用 Helm Chart 所需的配置要少得多。

首先,您需要一个目录来存储所有 Helm 配置文件。 在 Laravel 项目的根目录中创建一个名为 helm/ 的新目录:

mkdir ./helm

helm/ 目录中,您将创建两个新文件:values.ymlsecrets.yml。 首先创建并打开values.yml

nano ./helm/values.yml

values.yml 文件将包含非机密配置选项,这些选项将覆盖 LAMP Helm 图表中的默认值。 添加以下配置,确保将 your_docker_hub_username 替换为您自己的用户名:

./helm/values.yml

php:
  repository: "your_docker_hub_username/laravel-kubernetes"
  tag: "latest"
  fpmEnabled: false
  envVars:
    - name: APP_ENV
      value: production
    - name: APP_DEBUG
      value: false
    - name: DB_PORT
      value: 3306
    - name: DB_HOST
      value: localhost

保存并关闭文件。

现在创建一个 secrets.yml 文件:

nano ./helm/secrets.yml

secrets.yml 不会被检入版本控制。 它将包含敏感的配置信息,例如您的数据库密码和 Laravel 应用程序密钥。 添加以下配置,根据需要进行调整以适合您的凭据:

./helm/secrets.yml

mysql:
  rootPassword: "your_database_root_password"
  user: your_database_user
  password: "your_database_password"
  database: your_database_name

php:
  envVars:
    - name: APP_KEY
      value: "your_laravel_app_key"
    - name: DB_DATABASE
      value: your_database_name
    - name: DB_USERNAME
      value: your_database_user
    - name: DB_PASSWORD
      value: "your_database_password"

确保为您的生产数据库使用强用户名和密码组合,并使用与上面相同的 your_laravel_app_key,或者打开一个新的终端窗口并通过运行以下命令生成一个新的终端窗口。 然后,您可以在 .env 文件中复制 Laravel 设置的新值:

docker run --rm -v $(pwd):/app php:cli php /app/artisan key:generate

保存并关闭 secrets.yml

接下来,为了防止您的 secrets.yml 文件被构建到 Docker 映像中或保存到版本控制中,请确保将以下行添加到您的 .dockerignore.gitignore文件。 打开并附加 /helm/secrets.yml 到每个文件,或运行以下命令添加两者:

echo '/helm/secrets.yml' >> ./.dockerignore && echo '/helm/secrets.yml' >> ./.gitignore

现在您已经为您的应用程序和 Docker 映像创建了 Helm 配置文件,您可以将此 Helm 图表作为新版本安装在您的 Kubernetes 集群上。 从应用程序的根目录安装图表:

helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

你会看到这样的输出:

OutputNAME: laravel-kubernetes
LAST DEPLOYED: Mon May 18 13:21:20 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1

您的应用程序需要一两分钟才能可用,但您可以运行此命令来监控集群中的 Kubernetes 服务:

kubectl get services -w

查找您的应用程序的名称:

OutputNAME                        TYPE            CLUSTER-IP          EXTERNAL-IP     PORT(S)
laravel-kubernetes-lamp     LoadBalancer    your_cluster_ip      your_external_ip   80:32175/TCP,3306:32243/TCP

当您的新 laravel-kubernetes-lamp 服务在 EXTERNAL-IP 下显示 IP 地址时,您可以访问 your_external_ip 以查看在您的 Kubernetes 集群上运行的应用程序。 您的应用程序将连接到您的数据库,您将在 Laravel 徽标下方看到数据库的名称,就像您在 Docker Compose 上本地运行您的应用程序一样。

在不安全的 IP 地址上运行 Web 应用程序对于概念验证来说可能没问题,但是如果没有 SSL 证书和自定义域名,您的网站就无法投入生产。 在下一步中进行设置之前,请通过命令行卸载您的版本:

helm delete laravel-kubernetes

在下一步中,您将扩展第一个 Helm 配置,将 Ingress 控制器、SSL 证书和自定义域添加到您的 Laravel 应用程序。

第 5 步 — 向 Kubernetes 集群添加入口控制器和 SSL

在 Kubernetes 中,Ingress Controller 负责将应用程序的服务暴露给互联网。 在上一步中,LAMP Helm 图表创建了一个 DigitalOcean 负载均衡器,并通过负载均衡器的 IP 地址直接公开您的应用程序。

您可以直接在负载均衡器 上终止 SSL 和您的域名 ,但由于您在 Kubernetes 中工作,因此在同一个地方管理它们可能会更方便。 有关 Ingress 控制器的更多信息和以下步骤的详细信息,请阅读 如何使用 Helm 在 DigitalOcean Kubernetes 上设置 Nginx Ingress

LAMP Helm 图表包含一个用于支持 Ingress 的配置选项。 打开你的 helm/values.yml 文件:

nano ./helm/values.yml

现在添加以下行:

./helm/values.yml

...
# Use Ingress Controller
service:
  type: ClusterIP
  HTTPPort: 80
ingress:
  enabled: true
  domain: your_domain

这指示您的部署不要安装负载均衡器,而是将应用程序公开到 Kubernetes 集群的端口 80,入口控制器会将其公开到互联网。 保存并关闭 values.yml

现在运行你之前运行的 helm install 命令,让你的 Laravel 应用程序再次运行。 确保从应用程序的根目录运行命令:

helm install laravel-kubernetes -f helm/values.yml -f helm/secrets.yml stable/lamp

接下来,使用 Kubernetes 维护的 Nginx Ingress Controller 在 Kubernetes 集群上安装 nginx-ingress 控制器:

helm install nginx-ingress stable/nginx-ingress --set controller.publishService.enabled=true

安装后,您将看到如下输出:

OutputNAME: nginx-ingress
LAST DEPLOYED: Mon May 18 13:28:34 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1

您还需要一个 Ingress Resource 来公开您的 Laravel 应用程序的部署。 在应用的根目录中创建一个名为 ingress.yml 的新文件:

nano ./ingress.yml

此文件定义应用程序的主机、SSL 证书管理器以及后端服务和端口名称。 添加以下配置,将 your_domain 替换为您选择的域:

./ingress.yml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: laravel-kubernetes-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
    - hosts:
        - your_domain
      secretName: laravel-kubernetes-tls
  rules:
    - host: your_domain
      http:
        paths:
          - backend:
              serviceName: laravel-kubernetes-lamp
              servicePort: 80

保存并关闭文件。

接下来,您应该安装 Cert-Manager 并创建一个颁发者,允许您使用 Let's Encrypt 创建生产 SSL 证书。 Cert-Manager 需要 自定义资源定义 ,您可以使用命令行从 Cert-Manager 存储库 应用:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.0/cert-manager.crds.yaml

这将创建一些 Kubernetes 资源,这些资源将显示在命令行中:

Outputcustomresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/issuers.cert-manager.io created
customresourcedefinition.apiextensions.k8s.io/orders.acme.cert-manager.io create

Cert-Manager 还需要 a namespace 以将其隔离在您的 Kubernetes 集群中:

kubectl create namespace cert-manager

您将看到以下输出:

Outputnamespace/cert-manager created

由于 Jetstack 的 Cert-Manager 不是 Kubernetes 维护的图表之一,因此您还需要添加 Jetstack Helm 存储库 。 运行以下命令以使其在 Helm 中可用:

helm repo add jetstack https://charts.jetstack.io

添加成功将输出以下内容:

Output"jetstack" has been added to your repositories

现在您已准备好将 Cert-Manager 安装到 Kubernetes 集群上的 cert-manager 命名空间中:

helm install cert-manager --version v0.15.0 --namespace cert-manager jetstack/cert-manager

完成后,您将看到如下所示的部署摘要:

OutputNAME: cert-manager
LAST DEPLOYED: Mon May 18 13:32:08 2020
NAMESPACE: cert-manager
STATUS: deployed
REVISION: 1

您需要添加到 Laravel 应用程序根目录的最后一个文件是 production_issuer.yml Kubernetes 配置文件。 创建文件:

nano ./production_issuer.yml

现在添加以下内容:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # Email address used for ACME registration
    email: your_email_address
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      # Name of a secret used to store the ACME account private key
      name: letsencrypt-prod-private-key
    # Add a single challenge solver, HTTP01 using nginx
    solvers:
      - http01:
          ingress:
            class: nginx

保存并关闭文件。

Let's Encrypt 将发送 your_email_address 任何重要通知和到期警告,因此请务必添加一个您将定期检查的地址。 保存此文件并为 Kubernetes 集群中的 Ingress 资源和生产颁发者创建一个新资源:

kubectl create -f ingress.yml
kubectl create -f production_issuer.yml

最后,更新域名的 DNS 记录,将 A 记录指向负载均衡器的 IP 地址。 要查找 Ingress Controller 的 IP 地址,请输入:

kubectl get service nginx-ingress-controller
OutputNAME                       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
nginx-ingress-controller   LoadBalancer   your_cluster_ip      your_external_ip   80:30187/TCP,443:31468/TCP   6m10s

使用 your_external_ip 地址作为您的 DNS A 记录的 IP 地址。 更新 DNS 记录的过程取决于您管理域名和 DNS 托管的位置,但如果您使用的是 DigitalOcean,您可以参考我们的 如何管理 DNS 记录 指南。

一旦您的 DNS 记录更新并生成您的 SSL 证书,您的应用程序将在 your_domain 可用并且 SSL 将启用。

虽然您的 PHP 应用程序和数据库已经连接,但您仍需要运行数据库迁移。 在最后一步中,您将了解如何在 Kubernetes pod 上运行 Artisan 命令 以执行数据库迁移和其他常见维护任务。

第 6 步 — 运行远程命令

当您的 Laravel 应用程序正在运行并连接到 Kubernetes 中的 MySQL 数据库时,您应该在新的 Laravel 安装上运行一些常见操作。 您应该执行的一项常见任务是 数据库迁移

在您可以在 Laravel 应用程序上运行 Artisan 命令之前,您需要知道运行 Laravel 应用程序容器的 pod 的名称。 使用命令行,您可以查看 Kubernetes 集群中的所有 pod:

kubectl get pods

你会看到这样的输出:

OutputNAME                                             READY   STATUS    RESTARTS   AGE
laravel-kubernetes-lamp-77fb989b46-wczgb         2/2     Running   0          16m

为您的 laravel-kubernetes-lamp-... 部署选择 pod。 确保在输出中使用名称,而不是上面列出的名称。 现在您可以在其上运行 kubectl exec。 例如,使用 artisan migrate 命令运行数据库迁移。 您将添加 --force 标志,因为您正在生产中运行 pod:

kubectl exec laravel-kubernetes-lamp-77fb989b46-wczgb -- php artisan migrate --force

此命令将产生一个输出:

OutputMigration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.16 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.05 seconds)

您现在已经成功地将 Laravel 7 和 MySQL 部署到 Kubernetes 并执行了一项基本的数据库维护任务。

结论

在本教程中,您学习了如何将 Laravel PHP 应用程序容器化,将其连接到 MySQL 数据库,将包含您的代码的 Docker 映像推送到 Docker Hub,然后使用 Helm 图表将该映像部署到 DigitalOcean Kubernetes 集群。 最后,您添加了 SSL 和自定义域名,并学习了如何在正在运行的 pod 上运行命令行工具。

与传统的 LAMP 堆栈托管相比,Kubernetes 和 Helm 为您提供了许多优势:可扩展性、无需直接登录服务器即可换出服务的能力、执行滚动升级的工具以及对托管环境的控制。 也就是说,最初容器化和配置应用程序的复杂性使得入门的障碍非常高。 以本指南为起点,将 Laravel 部署到 Kubernetes 变得更加容易。 从这里您可能会考虑更多地了解 Laravel 的强大功能,或者向 Kubernetes 中添加监控工具,例如 Linkerd,您可以使用我们的指南 DigitalOcean 1- 手动安装这些工具 单击。