如何使用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 数据库。
先决条件
- Docker 安装在您将从中访问集群的机器上。 您可以在此处 或在 Docker 的网站 上找到有关 为大多数 Linux 发行版安装 Docker 的详细说明(用于其他操作系统)。
- Docker Hub 上的一个帐户,用于存储您将在本教程中创建的 Docker 映像。
- 一个 DigitalOcean Kubernetes 1.17+ 集群,您的连接配置设置为
kubectl
默认值。 要了解如何在 DigitalOcean 上创建 Kubernetes 集群,请参阅 Kubernetes 快速入门 。 要了解如何连接到集群,请参阅 如何连接到 DigitalOcean Kubernetes 集群。 - 安装在本地机器上的 Helm 3 包管理器。 完成第一步并添加 How To Install Software on Kubernetes Clusters with the Helm 3 Package Manager 教程的第二步中的
stable
存储库。 - 具有可用 A 记录的完全注册的域名。 本教程将自始至终使用
your_domain
。 您可以在 Namecheap 上购买一个域名,在 Freenom 上免费获得一个域名,或者使用您选择的域名注册商。 此时不要担心将您的域的 A 记录与 IP 相关联。 一旦您到达第 5 步并且您的 Ingress 控制器就位,您将your_domain
连接到正确的 IP。
第 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
文件或运行以下 cat
和 grep
命令来找到它:
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_PASSWORD
、DB_DATABASE
、DB_USERNAME
、DB_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.yml
和 secrets.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- 手动安装这些工具 单击。