Deno 应用中如何使用 Kubernetes 进行容器编排

引言

Kubernetes(简称 K8s)是 Google 开源的容器编排平台,具有自我修复、动态扩缩容等强大特性,广泛适用于云计算领域。而 Deno 则是一种新兴的 JavaScript 运行时环境,由 Node.js 的创始人 Ryan Dahl 开发,它提供了更好的安全性、更强大的模块化机制和更快的执行速度。本文将结合这两个技术,讲解如何在 Kubernetes 中部署和管理 Deno 应用。

准备工作

在开始前,需要先安装好以下工具:

  • Docker:用于构建和打包 Docker 镜像。
  • Kubernetes CLI 工具:包括 kubectl 和其他一些必要组件,用于和 Kubernetes 集群进行交互。
  • Deno:用于编写和运行 Deno 应用。

此外,还需要一个可用的 Kubernetes 集群,可以使用自建的、云厂商提供的或者开源的 Kubernetes 发行版,例如 Rancher、Minikube 等。

构建 Docker 镜像

首先,我们需要将 Deno 应用封装到 Docker 镜像中,以便进行部署。可以参考如下的 Dockerfile:

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

------- ----

---- - -

------ ----

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

其中,hayd/deno:alpine-1.14.0 是 Deno 的官方 Docker 镜像,基于 Alpine Linux 系统,只包含了必要的运行时组件。WORKDIR 指定了容器中的工作目录,COPY 命令将应用文件复制到容器中。EXPOSE 声明了容器监听的端口号,CMD 指定了启动容器时执行的命令。

然后,使用 docker build 命令构建 Docker 镜像:

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

其中,your-username 是你的 Docker Hub 用户名,your-app-image 是你的应用名称。可以将镜像上传到 Docker Hub 或者私有仓库中,也可以直接使用本地镜像。

部署到 Kubernetes

接下来,将 Docker 镜像部署到 Kubernetes 中。首先,需要创建一个 Kubernetes deployment 对象:

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

其中,metadata 部分包括了对象名称和其他元数据。spec 部分用于描述该 deployment 要创建的 Pod,即容器应用实例。selector 指定了如何选择要控制的 Pod,可以根据 labels 进行筛选。replicas 指定了需要创建的 Pod 个数。template 则包含了 Pod 的模板,包括了容器的定义和其他配置。

接下来,使用 kubectl apply 命令将该 deployment 对象部署到 Kubernetes 中:

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

然后,可以使用 kubectl get pods 命令查看创建的 Pod:

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

可以看到,已经有两个 Pod 在运行了。接下来,需要创建一个 Kubernetes service 对象,通过它来暴露应用服务:

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

这里,spec 部分将该 service 对象与 deployment 绑定起来,selector 指定了要暴露的 Pod。ports 指定了该服务对外提供的端口,targetPort 则是容器运行时监听的端口。type 指定了该服务的类型,这里使用了 LoadBalancer 类型,将代理端口映射到了 80 端口。

使用 kubectl apply 命令部署该 service 对象:

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

使用 kubectl get services 命令检查该服务是否已经成功暴露:

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

可以看到,该服务已经暴露在了 192.168.0.42 的 80 端口上,可以通过该地址访问该应用。

自动化部署

最后,可以使用 CI/CD 工具来实现自动化部署。例如,在 Github 上创建一个仓库,使用 Github Actions 来构建 Docker 镜像,并自动将其部署到 Kubernetes 中。

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

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

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

该配置文件包括了三个步骤:拉取代码、构建 Docker 镜像、部署到 Kubernetes。其中,docker/build-push-action@v2appleboy/kubectl-action 是 Github Actions 仓库中提供的组件,用于构建 Docker 镜像和与 Kubernetes 集群进行交互。

这样,当代码 push 到 main 分支时,Github Actions 就会自动构建 Docker 镜像并部署到 Kubernetes 中。

结论

本文介绍了如何在 Kubernetes 中部署和管理 Deno 应用。首先,需要将应用封装到 Docker 镜像中,然后创建 Kubernetes deployment 和 service 对象,最后使用 kubectl 命令进行部署和暴露。最终,可以使用 CI/CD 工具来实现自动化部署。

本文包含了完整的示例代码以及相关配置文件,读者可以下载并尝试部署自己的应用。希望这篇文章能够对前端开发者有所帮助,能够让更多的人了解和掌握 Kubernetes 在 Deno 应用中的使用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66fa53b544713626014b6cd7