【问题标题】:Testing Application code local while using k8s for for the deployment of app在使用 k8s 部署应用程序时在本地测试应用程序代码
【发布时间】:2020-07-04 08:13:21
【问题描述】:

我们正在使用k8s来部署我们的应用程序,它工作得很好。但是有一个小问题。我们已经从http层通信转移到tcp层。不同微服务之间的通信是通过服务(k8s服务)名称并且效果很好,但是开发人员无法在本地测试相同的代码,因为服务名称将仅在集群内解析。所以这里有一些我有的解决方案:-

1. 为他们提供不同的命名空间,让他们可以通过小的更改来测试应用程序。

这样做的问题是开发人员使用了一些断点并在代码中测试了一些小的更改,并通过这种方法进行调试。

2.他们可以在本地实现 minikube,但这对我来说也不好。

3.他们可以在本地运行ms的容器,并在/etc/hosts中输入与k8s服务名称相对应的容器ip。在此相同的代码将起作用。 欢迎任何其他更好的解决方案。 ??????????????????

【问题讨论】:

  • 你用哪个java框架做微服务开发? spring-boot 或类似的,最合适的答案也取决于它。
  • 使主机名可配置是个好主意。如果它们是环境变量,它们很容易在命令行或 Kubernetes YAML 文件中进行更改。
  • 使用@Avnish Spring boot 框架。
  • @DavidMaze 感谢您的快速响应。如果没有其他解决方案将使用此救世主。

标签: java kubernetes deployment web-applications automation


【解决方案1】:

您是否考虑过为此目的使用spring boot profiles?我们在我们的团队中长期有效地使用它。为此,您必须将服务主机提取为 application.yml(或 application.properties)中的单独属性,并在其余属性中将此主机用作变量。下面sn-p解释了这个

application.yml
----------------
serviceA:
  host: service-A-Name
  api-one-endpoint: http://${serviceA.host}/api/v1/one
  api-two-endpoint: http://${serviceA.host}/api/v1/two
  api-three-endpoint: http://${serviceA.host}/api/v1/three
  api-four-endpoint: http://${serviceA.host}/api/v1/four

在生产中(任何托管/托管环境),您为 spring 属性 serviceA.host 提供适当的值。在您的用例中,您将按原样使用此值并提供 k8s 服务名称绑定。

对于本地开发环境,您只需要覆盖单个属性。对于简单的用例(假设您只需要覆盖单个属性),您可以将其作为 agrument 传递给您的 Spring Boot 启动器(例如“--serviceA.host=localhost”)。如果你有很多服务(你可能有),那么你只需要覆盖众所周知的少数主机名属性。在这种情况下,使用专用的开发配置文件要好得多。以下示例说明了相同的场景

application-dev.yml
-------------------
serviceA:
  host: mylocalhost:9090

然后,您通过添加“--spring.profiles.active=dev”作为附加参数,在 eclipse/intellij 启动器配置中使用此配置文件来执行或调试目的,并且 Spring Boot 将使用来自开发配置文件的更新主机。事实上,结合这两种方法可以为您提供更多的灵活性来处理高级案例。如果您同意跨团队的通用端口约定,那么您甚至可以签入 application-dev.yml 以供所有人使用。

spring boot 配置文件是一个更强大的功能,我强烈建议您阅读it's documentation 和一些教程 (like this one) 来全面了解它并有效地利用它来解决像这样的用例。

【讨论】:

  • 这是一个很好的解决方案,但是对于 localhost,问题是相同的,我们必须使用 http(应用层)通信和集群层 tcp,因此本地和集群的代码将是不同的。
  • @RenuSaharan 不清楚代码中的 b/w http 和 tcp 层的通信究竟有何不同。您可以添加相应的代码 sn-p 来澄清这一点吗?
  • 现在我没有带宽让我有时间再回来。谢谢
猜你喜欢
  • 2012-11-26
  • 1970-01-01
  • 2020-04-12
  • 2013-04-05
  • 2015-01-08
  • 2020-07-17
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多