如何在Kubernetes上进行微服务部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Kubernetes上进行微服务部署相关的知识,希望对你有一定的参考价值。

使用Spring Cloud构建实际微服务架构 基本概念: 使用Docker进行集测试 混合持久化 微服务架构 服务发现 API网关 Docker 使用Docker每服务进行构建部署使用Docker Compose发机进行端端集测试 参考技术A 直接设置面设置

微服务部署在 kubernetes 上,但没有给出预期的结果

【中文标题】微服务部署在 kubernetes 上,但没有给出预期的结果【英文标题】:Microservice deloyed on kubernetes but not giving the desired result 【发布时间】:2020-07-10 02:55:06 【问题描述】:

我已经在google kubernetes云引擎上成功部署了一个微服务[spring app],但是endpoint不工作了。

Dockerfile

deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
 name: user-management-deployment
 labels:
  app: happy-paws  
spec:
 replicas: 3
 selector:
  matchLabels:
   name: user-management-deployment
   app: happy-paws
 template:
  metadata:
   name: user-management-deployment
   labels:
    name: user-management-deployment
    app: happy-paws
  spec:
   containers:
    - name: user-management
      image: docker/user-management
      ports:
       - containerPort: 9106

Service.yml

apiVersion: v1
kind: Service
metadata:
  name: user-management
  labels:
   name: user-management-service
   app: happy-paws
spec:
 type: LoadBalancer
 ports:
  - port: 9106
    targetPort: 9106
 selector:
  name: user-management-pod
  app: happy-paws

application.properties 请帮助我理解问题。

更新:

更新端口后,应用程序开始工作

已启动的服务: 用户订单详细信息负载均衡器 Kubernetes ClusterIP 订单管理负载均衡器 用户管理负载均衡器

user-order-detail 命中端点以检索所有用户。我收到此错误:虚拟主机名没有匹配项:用户管理**

String url = "user-management/user";
        InstanceInfo instance = eurekaClient.getNextServerFromEureka("user-management", false);
        Object response = restTemplate.getForObject(instance.getHomePageUrl() + url +"/" + userId, Object.class);

【问题讨论】:

您的服务转发到哪个 tcp 端口? 在您的服务中将负载均衡器中的目标端口更改为 9106 节点端口-31659 目标端口-80 @NimitJohri 那么端口的值呢? 更改您的服务 yaml 使其端口号与您的应用程序运行的端口相同 【参考方案1】:

尝试理解服务在 Kubernetes 术语中的含义。在高层次上,这可以解释为一种将在容器内运行的应用程序(在容器内运行(在网络内运行))暴露给外部世界的方法。

每个区块都可以拥有自己的独立网络。因此引入了服务的概念。通过这种方式,您可以公开容器的哪个端口需要向世界公开以及需要如何公开(服务类型,在您的情况下是 LoadBalancer)。

因此,如果您需要访问在容器内的端口 9106 上运行的应用程序,则需要公开该端口。

spec:
 type: LoadBalancer
 ports:
  - port: 9106
    targetPort: 9106

【讨论】:

我正在尝试从内部调用休息服务。它不起作用。知道为什么我无法执行服务间通信 你在里面是什么意思? 还有一个服务通过一个rest端点访问用户管理服务。我已经将它部署在 kubernetes 上,但无法访问其余端点 虚拟主机名没有匹配项:user-management 我收到此错误 我猜这是因为尤里卡的到来。你需要检查一下【参考方案2】:

尝试将所有端口更改为 9106

【讨论】:

以上是关于如何在Kubernetes上进行微服务部署的主要内容,如果未能解决你的问题,请参考以下文章

docker微服务部署之:Rancher管理部署微服务

如何在CentOS 7部署RabbitMQ服务

将微服务部署到 Cloud Foundry

微服务实战:选择微服务部署策略

微服务实战:选择微服务部署策略

spring cloud构建全球多租户分布式微服务部署的方案