分布式,微服务,k8s,dubbo, Kubernetes

理解Kubernetes微服务, helloworld https://blog.csdn.net/weixin_45273693/article/details/96188912

如何在kubernetes中开发微服务? - 倚天码农的回答 - 知乎 https://www.zhihu.com/question/359333952/answer/936150750

作者:倚天码农
链接:https://www.zhihu.com/question/359333952/answer/936150750
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

它有两种方式:

第一种,直接使用Kubernetes的注册发现功能。这时,服务的注册和发现是写在Kubernetes的配置文件里的(你不需要直接使用Kubernetes内置的etcd功能,直接使用Kubernetes的服务(service)就行了),不需要应用程序(例如Java)写任何代码。微服务的调用是通过Kubernetes的服务名来实现的,从Java代码的角度讲它跟调用非Kubernetes服务没有任何区别。 你不需要使用任何k8s的API。K8s对程序是完全透明的,对程序没有任何侵入性。这时Java的远程调用使用的是RESTFul的API,而不是k8s的API。既然服务注册是由Kubernetes来完成的,那么应用程序怎么知道注册到Kubernetes里的服务是什么呢?你可以在Kubernetes里通过环境变量把服务名传递到部署了应用程序的容器里,应用程序就可以通过环境变量得到服务名。完整的代码和解释请参见倚天:如何把应用程序迁移到k8s​zhuanlan.zhihu.com. 它用的是Go语言做例子,但Java也是一样的,只要能从环境变量里读取服务名就可以了。

   这基本上是一个完美的方案,但它的应用范围有一定的限制。Kubernetes的服务只在Kubernetes集群内部有效,如果你有多个Kubernetes集群,或你的有些微服务不是部署在Kubernetes集群上的,那么Kubernetes就需要额外的load Balancer和Ingress来解决问题。这时Kubernetes就不能提供统一的服务注册和发现功能(虽然微服务之间也可以调用)。这时你也可以考虑第二种方式。

第二种,使用专门的服务注册发现软件,例如Eureka或Consul。这种软件能对部署在各种环境下的微服务提供统一的服务注册和发现功能。以Eureka为例,这时服务注册功能需要通过Eureka的API来实现,微服务的远程调用需要使用RESTFul的API,这时你的程序就跟Kubernetes没有直接关系了(不需要调用Kubernetes的API)。当然Eureka的服务和Kubernetes的服务之间需要进行同步。我对Eureka不是很熟,不知道它是怎么完成的。Consul里有个软件叫consul-k8s,能实现Consul和K8s服务之间的自动同步。

1. spring cloud 和k8s 区别

Spring Cloud和Kubernetes技术

from 【架构】Kubernetes和Spring Cloud哪个部署微服务更好?
Dubbo与Kubernetes集成 [官网]
* docker的网络模式混合部署(混部)

猜你喜欢

转载自blog.csdn.net/fei33423/article/details/107392405