将微服务容器部署到 Kubernetes
将 Docker 映像推送到 Docker Hub,使映像可供 Kubernetes 实例下载,然后创建了部署文件,以声明方式描述了 Kubernetes 应对每个微服务执行的操作。 你还了解到,使用 Kubernetes 缩放容器化微服务的过程其实很简单。
在基于微服务的开发方法中,每个微服务都有自己的模型和数据,因此从开发和部署角度来看,它具有自主性,独立于其他微服务。 在容器内部托管微服务是实现此目的的常见方法。 这些类型的系统在扩展和管理方面很复杂。 你需要考虑整理、添加、删除和更新多个容器的过程。 这个过程称为容器管理。
例如,你可能发现,你需要在一天的特定时间内增加处理缓存的容器实例数。 或者,你可能需要更新用于检查披萨库存的容器实例。
为了帮助处理容器管理任务,可以使用容器业务流程协调程序。 Kubernetes 就是这样一种业务流程协调程序。 它是一个可扩展的开放源代码平台,用于管理和编排容器化工作负荷。
一、将微服务映像推送到 Docker Hub ,以便 K8S 可以从Docker Hub 下载镜像
https://www.cnblogs.com/friend/p/16719439.html
二、将微服务容器部署到 Kubernetes
Kubernetes 会为你运行容器。 你需要通过 YAML 文件描述希望 Kubernetes 执行的操作。 本练习将逐步指导你完成文件创建过程,这样你就可以在 Kubernetes 上部署和运行后端服务了。
为后端服务创建部署文件
你可以创建一个文件,使用 YAML 文件管理将容器部署到 Kubernetes 的过程。 我们将创建一个文件来部署后端服务。
-
打开文本编辑器(例如 Visual Studio Code),并切换到之前将项目文件克隆到的目录。
-
在名为“backend-deploy.yml”的项目的根目录下,创建一个新文件。
-
将以下文本复制到该文件,然后保存文件。
--- apiVersion: apps/v1 kind: Deployment metadata: name: pizzabackend spec: replicas: 1 template: metadata: labels: app: pizzabackend spec: containers: - name: pizzabackend image: [YOUR DOCKER USER NAME]/pizzabackend:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 selector: matchLabels: app: pizzabackend --- apiVersion: v1 kind: Service metadata: name: pizzabackend spec: type: ClusterIP ports: - port: 80 selector: app: pizzabackend
注意:将占位符 [YOUR DOCKER USER NAME]
替换为实际的 Docker 用户名。
此文件的作用如下。
第一部分定义了将部署到 Kubernetes 中的容器的部署规范。 它指定了将会有一个副本,在哪里可以找到容器映像,在容器上打开哪些端口,并设置了一些环境变量。 第一部分还定义了可以引用容器和规范的标签和名称。
然后,第二部分定义了容器将作为 Kubernetes ClusterIP 运行。 对于本模块,你无需了解 ClusterIP 的所有细节,但需要知道此类服务不会公开外部 IP 地址。 只能从在同一 Kubernetes 群集中运行的其他服务访问它。
部署并运行后端微服务
接下来,我们来部署并运行微服务。
-
打开命令提示符,转到你创建了“backend-deploy.yml”文件的同一目录。
-
运行以下命令。
kubectl apply -f backend-deploy.yml
此命令将指示 Kubernetes 运行已创建的文件。 它将从 Docker Hub 下载映像并创建容器。
3. kubectl apply
命令将快速返回。 但容器可能需要一段时间才能创建完成。 若要查看进度,请使用以下代码。
kubectl get pods
在生成的输出中,你将在“名称”列下看到一个包含“pizzabackend”后跟一串随机字符的行。 一切准备就绪后,“就绪”列下会显示“1/1”,“状态”列下会显示“正在运行”。
4. 浏览到 http://localhost/pizzainfo
。 它将返回“HTTP 404 未找到”消息。 出现此错误是因为无法从外部访问披萨后端服务
创建部署文件并运行前端服务
与后端服务类似,我们也需要一个前端的部署文件。
-
创建一个名为“frontend-deploy.yml”的新文件
-
将以下代码粘贴到文件中。
--- apiVersion: apps/v1 kind: Deployment metadata: name: pizzafrontend spec: replicas: 1 template: metadata: labels: app: pizzafrontend spec: containers: - name: pizzafrontend image: [YOUR DOCKER USER NAME]/pizzafrontend:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 - name: backendUrl value: http://pizzabackend selector: matchLabels: app: pizzafrontend --- apiVersion: v1 kind: Service metadata: name: pizzafrontend spec: type: LoadBalancer ports: - port: 80 selector: app: pizzafrontend
3.将占位符 [YOUR DOCKER USERNAME] 替换为实际的 Docker 用户名。
你会注意到,此文件类似于我们为后端微服务创建的文件。 但有三点不同之处:
-
- 我们指定了一个不同的容器在部署的
spec.template.spec.containers.image
值下运行。 spec.template.spec.containers.env
部分下有一个新的环境变量。 “pizzafrontend”应用程序中的代码调用后端,但由于我们还没有指定一个完全限定的域名,也不知道后端微服务的 IP 地址,因此我们使用在Deployment
的metadata.name
节点下指定的名称。 然后,Kubernetes 将处理其余部分。- 在服务部分,我们为
spec.type
指定了 LoadBalancer 值。 并且端口 80 处于打开状态。 我们现在可以通过导航到 http://localhost 来浏览披萨前端。
- 我们指定了一个不同的容器在部署的
4. 通过以下命令将容器部署到 Kubernetes。
kubectl apply -f frontend-deploy.yml
-
同样,可以使用
kubectl get pods
来查看部署状态。 一旦“pizzafrontend”所在的行在“状态”列下显示“正在运行”,说明一切准备就绪。 -
成功部署容器后,浏览到
http://localhost
可以查看这两个正在运行的微服务。
在本练习中,你创建了一个部署文件,该文件准确描述了你希望容器在 Kubernetes 中的运行方式。 然后,你让 Kubernetes 从 Docker Hub 下载了映像并启动了容器。
参考:https://learn.microsoft.com/zh-cn/training/modules/dotnet-deploy-microservices-kubernetes/4-exercise-deploy-to-kubernetes