随着 Web 应用程序的复杂性不断增长,更多的 Web 开发人员开始注重他们的应用程序在生产环境中的稳定性和可扩展性。Kubernetes 是一个流行的开源容器编排系统,它可以帮助开发人员轻松地管理容器化 Web 应用程序的运行和扩展。本文将介绍如何使用 Kubernetes 构建长时间运行的 Web 应用程序。
什么是 Kubernetes?
Kubernetes 是一种容器编排系统,用于管理容器化工作负载和服务。Kubernetes 可以管理多个主机上的容器,并确保容器在运行时具有所需的资源。Kubernetes 允许用户轻松地扩展应用程序并提供弹性。Kubernetes 具有自我修复、自我管理和自我调整的能力,并支持开发人员使用多种编程语言和开发框架构建应用程序。
开始使用 Kubernetes
在使用 Kubernetes 构建 Web 应用程序之前,我们需要准备一些基本的工具和环境:
- Docker:用于打包 Web 应用程序并创建容器。
- Kubernetes:容器编排系统,用于管理应用程序并实现扩展性和弹性。
- Kubectl:命令行工具,用于与 Kubernetes API 交互。
下面是一个简单的 Kubernetes 架构图:
- Pods:最小的可部署单元,通常包含一个或多个容器。
- Services:稳定的 IP 地址和 DNS 名称,用于访问 Pod。
- Replication Controller:用于复制 Pod 并保持指定数量的 Pod 副本。
- Deployment:用于管理 Pod 的版本并升级它们。
- ConfigMap 和 Secret:用于存储应用程序的配置和敏感数据。
创建 Kubernetes 集群
在开始构建 Web 应用程序之前,我们需要创建一个 Kubernetes 集群来管理我们的容器。Kubernetes 集群通常包含多个主机(或节点),每个主机运行着一个或多个容器。我们可以使用 Kubernetes 的官方工具 kubeadm 来快速创建一个 Kubernetes 集群。
以下是创建 Kubernetes 集群的步骤:
- 选择一个云服务提供商或自己搭建一套 Kubernetes 集群。
- 安装 Docker 和 Kubernetes 工具。
- 使用 kubeadm 工具初始化 Kubernetes 集群。
- 加入其他节点以增加集群容量。
构建 Web 应用程序
在 Kubernetes 集群准备就绪后,我们可以开始构建我们的 Web 应用程序了。下面是一个基本的 Web 应用程序的架构图:
我们将创建一个简单的 Node.js 应用程序、使用 MongoDB 数据库存储数据,并使用 Kubernetes 将应用程序打包为容器并运行在集群中。
创建 Node.js 应用程序
我们将创建一个简单的 Node.js 应用程序,用于存储和检索用户信息。首先,我们需要创建一个名为 package.json
的文件来定义我们的应用程序依赖项和启动脚本:
-- -------------------- ---- ------- - ------- --------- ---------- -------- -------------- -- ------ --- ----- ------- ------------ --------------- - ---------- ---------- ----------- --------- -- ---------- - -------- ----- ---------- - -
然后,我们需要创建一个名为 server.js
的文件来实现应用程序的逻辑:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ---------------------------------------------- - ---------------- ----- ------------------- ---- ---------- -- - ---------------------- -- ----------- ------------ -- - -------------------- --- ------- -- ---------- ----- --- ----- ---------- - --- ----------------- ----- ------- ------ ------- --------- ------ --- ----- ---- - ---------------------- ------------ ----- --- - ---------- ------------------------ ---------------------------- --------- ---- ---- ----------------- ----- ----- ---- -- - ----- ----- - ----- ------------ ---------------- --- ------------------ ----- ----- ---- -- - ----- ---- - --- --------------- ----- ------------ --------------- --- ---------------- -- -- - ------------------- ---------- ---
我们的应用程序使用 Express 框架来实现 REST API,使用 Mongoose 框架来管理 MongoDB 数据库。应用程序包含两个 API:GET /users
和 POST /users
,用于检索和创建用户。
创建 Docker 镜像
现在我们已经创建了我们的 Node.js 应用程序,接下来我们可以使用 Docker 将其打包为容器。我们将创建一个名为 Dockerfile
的文件来定义 Docker 镜像的构建过程:
-- -------------------- ---- ------- ---- ------- ------- ---- ---- ------------ - --- --- ------- ------------ ---- - - ------ ---- --- ------- --------
Dockerfile 定义了以下步骤:
- 使用 Node.js 14 作为基础镜像。
- 设置工作目录为
/app
。 - 复制
package.json
文件并安装依赖。 - 复制所有文件并暴露端口号 3000。
- 启动应用程序。
构建 Docker 镜像的命令如下所示:
docker build -t webapp .
运行该命令后,Docker 将执行 Dockerfile 中定义的操作,并生成名为 webapp
的 Docker 镜像。
在 Kubernetes 中运行应用程序
现在我们已经成功地创建了一个 Docker 镜像,接下来我们可以使用 Kubernetes 来部署并管理应用程序。首先,我们将创建一个名为 deployment.yaml
的 Kubernetes 部署文件:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ------ ----- --------- - --------- ------------ ---- ------ --------- --------- ------- ---- ------ ----- ----------- - ----- ------ ------ ------ ------ - -------------- ---- ----------------- - ----- ---------------
该文件定义了一个名为 webapp
的部署,用于在 Kubernetes 集群中运行我们的应用程序。spec.replicas
属性定义了应用程序的副本数量,spec.selector
属性定义了部署所选的实例。然后我们在 spec.template
属性定义了应用程序容器的配置,包括容器名称、Docker 镜像和端口号。最后,我们使用 imagePullSecrets
属性配置了一个 Docker 仓库的凭据来拉取 Docker 镜像。
部署应用程序的命令如下所示:
kubectl apply -f deployment.yaml
运行该命令后,Kubernetes 将启动一个名为 webapp
的部署,并在集群中创建三个副本:
$ kubectl get pods NAME READY STATUS RESTARTS AGE webapp-cd6c8bd7-2h6fg 1/1 Running 0 3m45s webapp-cd6c8bd7-2s6s7 1/1 Running 0 3m45s webapp-cd6c8bd7-lgzfw 1/1 Running 0 3m45s
最后,我们需要创建一个 Kubernetes 服务以暴露我们的应用程序。我们将创建一个名为 service.yaml
的文件:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- ------ ----- --------- ---- ------ ------ - ----- ---- ----- -- ----------- ----
该文件定义了一个名为 webapp
的 Kubernetes 服务,用于在集群中暴露我们的应用程序。spec.selector
属性与我们之前定义的部署名称相同,该属性用于选择要暴露的部署。spec.ports
属性定义了服务要暴露的端口号,并指向我们之前定义的应用程序端口号 3000。
创建服务的命令如下所示:
kubectl apply -f service.yaml
最后,我们可以使用 kubectl get services
命令查看服务的 IP 地址和端口号:
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d webapp ClusterIP 10.96.208.124 <none> 80/TCP 1m
我们可以使用 http://10.96.208.124
访问我们的应用程序。
结论
本文介绍了如何使用 Kubernetes 构建长时间运行的 Web 应用程序,并展示了使用 Docker 和 Kubernetes 打包、部署和管理应用程序的基本步骤。Kubernetes 是一个强大的容器编排系统,可以帮助开发人员管理容器化应用程序的生命周期,并为应用程序提供高稳定性和高可扩展性。我们希望本文能够为 Web 开发人员提供有价值的指导和深入学习 Kubernetes 的基础知识。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672322da2e7021665e0e9044