dubbo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From GitBox <...@apache.org>
Subject [GitHub] vangoleo commented on issue #1441: how to use dubbo in docker
Date Fri, 23 Mar 2018 05:59:01 GMT
vangoleo commented on issue #1441: how to use dubbo in docker
URL: https://github.com/apache/incubator-dubbo/issues/1441#issuecomment-375553630
 
 
   @463535160 I have worked with Dubbo, Docker and k8s, and maybe I can give you some suggestion.
   As far as I know, Dubbo is just a container engine, with very simple network ability. If
you just use Docker itself, the only way to implement interaction between multiple container
on different machines, is to use the Host network mode. The container will share the Host's
IP and Port. Dubbo will register the IP of Host to the registry(e.g. zookeeper). 
   The above solution has a problem, the container share the Host's IP and port, so every
container must have different ports, which lead to extra configuration work. Meanwhile, it
is hard to implement auto scaling.
   Docker is not designed to resolve these problems, and here comes the container Orchestration
tools, for example, Docker swarm, Google Kubernetes(k8s).
   In k8s, we can use some network component to setup a virtual network:
   * each container has an unique IP, which is called Pod IP
   * any two container can communicate with each other directly, even they are in different
hosts.
   I use Flannel to implement above network.
   So if you deploy a containerized dubbo application to k8s cluster, the app will register
the Pod IP to Zookeeper. When a new container is deployed to k8s, k8s will assign a Pod IP
to it, and ensure the Pod IP is unique, and it can reach to all the other containers directly
in the k8s cluster. So when you want to scale up, you just need to deploy new container to
k8s. In fact, just one command in k8s. 
   
   So in k8s cluster:
   * service registration and discovery is implemented by Dubbo(zookeeper) itself.
   * the network communication is implemented by k8s(flanneld).
   
   
   You also mentioned the DNS, k8s also have a DNS plugin, out of box. The DNS is used to
map a k8s service name to a k8s service IP, also known as Cluster IP. The Service is in fact
a load balancer in the front of several container replicas. So you can use a readable service
name, for example, zookeeper to visit the zookeeper cluster, instead of the Service IP.
    If you are interested in these, you can find more details by your self. Or you can have
a look at my wiki:
   https://github.com/vangoleo/wiki/tree/master/k8s   
   
   Hope this may help you.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

Mime
View raw message