Kubernetes 中使用 Deployment 进行应用程序的管理与部署

阅读时长 9 分钟读完

在 Kubernetes 中使用 Deployment 进行应用程序的管理与部署是非常常见的,Deployments 是 Kubernetes 中一种资源类型,用于描述应用程序副本数量的期望状态,并且自动化部署应用程序更新。

术语解释

在开始之前,先了解一下几个常见的 Kubernetes 术语:

  • Pods:Kubernetes 最小的调度单元,一个 Pod 代表一个正在运行的进程或服务
  • ReplicaSets:ReplicaSets 用于确保指定数量的 Pod 副本正在运行,它可以创建、删除、调整 Pod 的数量。
  • Deployment:Deployment 可以控制 ReplicaSets,配合 ReplicaSets 可以实现自动化部署和自动化 scaling。

Deployment 的使用

使用 Deployment 可以实现应用程序的自动化部署、更新和扩展。在以下示例中,我们将使用一个简单的 Node.js 应用程序来演示如何使用 Deployment 进行部署。

我们的应用程序代码如下所示,它可以监听 HTTP 请求并返回一个 "Hello World!" 的响应:

-- -------------------- ---- -------
----- ---- - ----------------

----- -------- - ----------
----- ---- - ---------------- -- -----

----- ------ - ----------------------- ---- -- -
  -------------- - ----
  ----------------------------- --------------
  -------------- -----------
---

------------------- --------- -- -- -
  ------------------- ------- -- ------------------------------
---

在我们的项目根目录下创建一个 Dockerfile 文件,然后将以下内容添加到该文件中:

-- -------------------- ---- -------
---- -------

------- ----
--- - ----

--- ---- -------

------ ----

--- -------- --------

然后将该 Dockerfile 构建为一个 Docker 镜像。如果你还不熟悉如何构建 Docker 镜像,可以参考 Docker 官方文档。

在我们创建 Deployment 前,需要创建一个叫做 Namespace 的资源类型,Namespace 是指一个逻辑上的分区,用于隔离集群资源。在 Kubernetes 中默认有一个名为 default 的 Namespace。

接下来,我们需要创建一个 Deployment,将我们的 Docker 镜像部署到 Kubernetes 中。在创建 Deployment 之前,我们需要先创建一个名为 Deployment.yaml 的文件,然后将以下内容添加到该文件中:

-- -------------------- ---- -------
----------- -------
----- ----------
---------
  ----- ------------------
  -------
    ---- -------
-----
  --------- -
  ---------
    ------------
      ---- -------
  ---------
    ---------
      -------
        ---- -------
    -----
      -----------
        - ----- -------
          ------ --------------------
          ------
            - -------------- ----

在上面的内容中,我们定义了一个名为 example-deployment 的 Deployment。replicas 字段指定了我们需要启动的 Pod 副本数量,这里是 3 个。

selector 字段用于选择需要启动的 Pod,这里选择的是所有具有 app=example 标签的 Pod。

template 字段定义了我们启动 Pod 的配置,这里我们定义了一个名为 example 的 container,使用我们之前构建的 Docker 镜像,并将容器端口暴露为 3000。

然后我们可以使用 kubectl 命令来部署该 Deployment:

创建 Deployment 后,我们可以使用 kubectl get deploy 命令来查看 Deployment 的状态:

它告诉我们我们的 Deployment 名称为 example-deployment,目前它正在尝试运行 3 个 Pod 副本。

使用 kubectl get pods 命令可以查看 Pod 的状态:

我们可以看到,目前有 3 个 Pod 正在创建。

使用 kubectl logs 命令可以查看某个 Pod 的日志:

现在我们可以使用 kubectl expose 命令将我们的 Deployment 暴露为一个 Service:

现在我们访问 Kubernetes 集群中的任意节点的 NodePort 端口,就可以访问到我们的应用程序了。例如,如果 NodePort 端口为 32519,我们可以通过以下 URL 访问应用程序:

Deployment 的更新

使用 Deployment 进行应用程序更新是一个非常方便的功能。我们可以在不影响现有流量的情况下,平滑地将我们的应用程序升级到新的版本。

首先,我们需要更新我们的 Dockerfile,或者我们可以构建另一个 Docker 镜像来代表我们的新版本。

然后,我们只需要更新我们的 Deployment.yaml 文件并将 image 字段更改为新的镜像名称和版本,然后再次运行 kubectl apply 命令即可:

Kubernetes 现在会自动创建新的 Pod,使用新的镜像,然后要求旧的 Pod 逐渐退役。

我们可以使用 kubectl get pods 命令来查看 Pod 的状态。我们会看到一个新的 Pod 开始运行,并且旧的 Pod 正在逐渐关闭:

Scaling

使用 Deployment 还可以轻松地实现 Pod 副本的缩放。我们只需要更新 Deployment,将 replicas 字段更改为新的值,并再次运行 kubectl apply 命令即可:

Kubernetes 现在会启动两个新的 Pod 副本,从而使总副本数量达到 5 个:

-- -------------------- ---- -------
- ------- --- ----
----                                -----   ------              --------   ---
-----------------------------------   ---     -------             -          -----
-----------------------------------   ---     -----------------   -          --
-----------------------------------   ---     -----------------   -          --
----------------------------------   ---     -----------         -          -----
----------------------------------   ---     -----------         -          -----
----------------------------------   ---     -----------         -          -----
----------------------------------   ---     -----------         -          -----

结论

在本文中,我们介绍了如何使用 Kubernetes 中的 Deployment 进行应用程序的部署、更新和扩展。通过使用 Deployment,在我们的应用程序版本更新时非常方便。并且还可以轻松地扩展应用程序的副本数量,以满足流量的需求。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6770aa9be9a7045d0d7fa3a9

纠错
反馈