引言
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 镜像:
$ docker build -t your-username/your-app-image .
其中,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 apply -f your-deployment.yaml
然后,可以使用 kubectl get pods
命令查看创建的 Pod:
$ kubectl get pods NAME READY STATUS RESTARTS AGE your-app-7cdf99f96d-g9pmn 1/1 Running 0 30s your-app-7cdf99f96d-vbhfh 1/1 Running 0 30s
可以看到,已经有两个 Pod 在运行了。接下来,需要创建一个 Kubernetes service 对象,通过它来暴露应用服务:
-- -------------------- ---- ------- ----------- -- ----- ------- --------- ----- -------- ----- --------- ---- -------- ------ - ----- ---- ----- -- ----------- ---- ----- ------------
这里,spec
部分将该 service 对象与 deployment 绑定起来,selector
指定了要暴露的 Pod。ports
指定了该服务对外提供的端口,targetPort
则是容器运行时监听的端口。type
指定了该服务的类型,这里使用了 LoadBalancer 类型,将代理端口映射到了 80 端口。
使用 kubectl apply
命令部署该 service 对象:
$ kubectl apply -f your-service.yaml
使用 kubectl get services
命令检查该服务是否已经成功暴露:
$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE your-app LoadBalancer 10.100.200.35 192.168.0.42 80:31970/TCP 1m
可以看到,该服务已经暴露在了 192.168.0.42 的 80 端口上,可以通过该地址访问该应用。
自动化部署
最后,可以使用 CI/CD 工具来实现自动化部署。例如,在 Github 上创建一个仓库,使用 Github Actions 来构建 Docker 镜像,并自动将其部署到 Kubernetes 中。
-- -------------------- ---- ------- ----- ------ -- ---------- --- ----- --------- - ---- ----- ------ -------- ------------- ------ - ----- -------- ----- ------------------- - ----- ----- ----- ----- --------------------------- ----- ----- ---- ----- ----------------------------------- - ----- ------ ----- ------------------------------ ----- ----- ----- -- -------------------- - ----- ------ ------- ----- ------------------------------ ----- ----- ----- -- -----------------
该配置文件包括了三个步骤:拉取代码、构建 Docker 镜像、部署到 Kubernetes。其中,docker/build-push-action@v2
和 appleboy/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