在之前的文章中,我们了解了Kubernetes中的基本概念,其硬件结构,不同的软件组件(例如Pod、Deployment、StatefulSet、Services、Ingress和Persistent Volumes),并了解了如何在服务之间与外部进行通信。
在本文中,我们将了解到:
-
使用MongoDB数据库创建NodeJS后端
-
编写Dockerfile来容器化我们的应用程序
-
创建Kubernetes Deployment脚本以启动Pod
-
创建Kubernetes Service脚本以定义容器与外界之间的通信接
-
部署Ingress Controller以请求路由
-
编写Kubernetes Ingress脚本来定义与外界的通信。
由于我们的代码可以从一个节点重定向到另一个节点(例如,一个节点没有足够的内存,所以工作将重新调度到另一个具有足够内存的节点上),因此保存在节点上的数据容易丢失 ,意味着MongoDB 数据不稳定。在下一篇文章中,我们将讨论数据持久性问题以及如何使用Kubernetes持久卷安全地存储我们的持久数据。
在本文中,我们将使用NGINX作为Ingress Controller和Azure容器镜像仓库来存储我们的自定义Docker镜像。文中编写所有脚本都可以在Stupid Simple Kubernetes git repo中找到,如有需要可访问链接获取:
http://GitHub - CzakoZoltan08/StupidSimpleKubernetes-AKS
请注意:这些脚本不限定于某个平台,因此您可以使用其他类型的云提供程序或带有K3s的本地集群来实践本教程。我之所以建议使用K3s,因为它非常轻量,所有依赖项都被打包在一个小于100MB的单个二进制文件中。更重要的是,它是一种高可用的、经过CNCF认证的Kubernetes发行版,专门用于资源受限的环境中的生产工作负载。有关更多信息,您可以访问官方文档:
前期准备
在开始本教程之前,请确保您已安装Docker。同时也要安装kubectl。
Kubectl安装链接:
https://kubernetes.io/docs/tasks/tools/#install-kubectl-on-windows
在本教程中使用的Kubectl命令可以在Kubectl cheat sheet(https://kubernetes.io/docs/reference/kubectl/cheatsheet/)中找到。
在本教程中,我们将使用Visual Studio Code,但这不是必要的,你也可以使用其他的编辑器。
创建可用于生产的微服务架构
将应用程序容器化
第一步,创建NodeJS后端的Docker镜像。创建镜像后,我们会将其推送到容器镜像仓库中,在该镜像仓库中可以访问它,并且可以通过Kubernetes服务(在本例中为Azure Kubernetes Service)拉取。</