学海无涯

导航

将微服务容器部署到 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 的过程。 我们将创建一个文件来部署后端服务。

  1. 打开文本编辑器(例如 Visual Studio Code),并切换到之前将项目文件克隆到的目录。

  2. 在名为“backend-deploy.yml”的项目的根目录下,创建一个新文件。

  3. 将以下文本复制到该文件,然后保存文件。

---
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 群集中运行的其他服务访问它。

部署并运行后端微服务

接下来,我们来部署并运行微服务。

  1. 打开命令提示符,转到你创建了“backend-deploy.yml”文件的同一目录。

  2. 运行以下命令。

kubectl apply -f backend-deploy.yml

  

此命令将指示 Kubernetes 运行已创建的文件。 它将从 Docker Hub 下载映像并创建容器。

3. kubectl apply 命令将快速返回。 但容器可能需要一段时间才能创建完成。 若要查看进度,请使用以下代码。

kubectl get pods

  

在生成的输出中,你将在“名称”列下看到一个包含“pizzabackend”后跟一串随机字符的行。 一切准备就绪后,“就绪”列下会显示“1/1”,“状态”列下会显示“正在运行”。

4. 浏览到 http://localhost/pizzainfo。 它将返回“HTTP 404 未找到”消息。 出现此错误是因为无法从外部访问披萨后端服务

创建部署文件并运行前端服务

与后端服务类似,我们也需要一个前端的部署文件。

  1. 创建一个名为“frontend-deploy.yml”的新文件

  2. 将以下代码粘贴到文件中。

---
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

  

  1. 同样,可以使用 kubectl get pods 来查看部署状态。 一旦“pizzafrontend”所在的行在“状态”列下显示“正在运行”,说明一切准备就绪。

  2. 成功部署容器后,浏览到 http://localhost 可以查看这两个正在运行的微服务。

在本练习中,你创建了一个部署文件,该文件准确描述了你希望容器在 Kubernetes 中的运行方式。 然后,你让 Kubernetes 从 Docker Hub 下载了映像并启动了容器。

 参考:https://learn.microsoft.com/zh-cn/training/modules/dotnet-deploy-microservices-kubernetes/4-exercise-deploy-to-kubernetes

 

posted on 2022-09-22 16:37  宁静致远.  阅读(427)  评论(0编辑  收藏  举报