首页 > 其他分享 >将微服务容器部署到 Kubernetes

将微服务容器部署到 Kubernetes

时间:2022-09-22 16:45:30浏览次数:55  
标签:容器 服务 Kubernetes 文件 部署 spec

将 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

 

标签:容器,服务,Kubernetes,文件,部署,spec
From: https://www.cnblogs.com/friend/p/16719863.html

相关文章

  • 在 Kubernetes 中缩放容器实例
    在一天中的某些时间,微服务可能会负载很大。Kubernetes通过为你添加额外的实例来轻松缩放微服务。运行以下命令,将后端微服务缩放为五个实例。kubectlscale--replic......
  • pybind11使用(3) 使用stl容器
    假设c++侧读到的数据是一个结构体,定义如下:structAirwayData{intuavId;introuteId;std::vector<int>longitude;std::vector<int>latitude;......
  • Linux下was9集群部署(NC was集群)
    首先在另外一台服务器上也安装was,安装请看集群部署拓扑图如下(拓扑图片来源于用友was安装手册)部署拓扑图要点说明部署机器为:192.168.31.128(主)、192.168.31.130(从)。......
  • Kubernetes 业务流程协调程序
    在基于微服务的开发方法中,每个微服务都有自己的模型和数据,因此从开发和部署角度来看,它具有自主性,独立于其他微服务。在容器内部托管微服务是实现此目的的常见方法。这些......
  • Kubernetes(K8s)部署 SpringCloud
    1.概述老话说的好:有可能性就不要放弃,要敢于尝试。言归正传,之前我们聊了一下如何在Kubernetes(K8s)中部署容器,今天我们来聊一下如何将SpringCloud的服务部署到Kubern......
  • dt804部署脚本
    #!/bin/bash$1=192.168.8.111passwd=gd654321Guobiao=99993201002000008111cat<<EOF1.部署docker程序cat<<EOF1.部署docker程序2.部署redis3.部署mysql4.安装媒体5.安......
  • Windows - 部署 Elasticsearch
    Windows-部署Elasticsearch                                      引用:https://blog......
  • 如何在k8s工作节点上,查看容器对应的pod的名字?
    在k8s中,所有的容器,工作负载,最终都是要运行到节点上的,以容器的方式运行 那么,如果要在节点上,查看该节点上运行的容器的pod的名字,pod的信息,该怎么查看? 方法非常的简单......
  • JAVA中容器设计的进化史:从白盒到黑盒,再到跻身为设计模式之一的迭代器
    大家好,又见面了。在我们的项目编码中,不可避免的会用到一些容器类,我们可以直接使用List、Map、Set、Array等类型。当然,为了体现业务层面的含义,我们也会根据实际需要自行封......
  • CI持续集成系统环境---部署Gitlab环境完整记录
    ​最近在看CI/CD集成的相关部分,发现几篇好文,转载分享一波。 来源网络:[原创]CI持续集成系统环境---部署Gitlab环境完整记录-散尽浮华-博客园Gitlab是一个代码托管......