1 - 我正在阅读文档,我对措辞有点困惑.它说:
ClusterIP:在集群内部IP上公开服务.选择此值使服务只能从群集中访问.这是默认的ServiceType
NodePort:在静态端口(NodePort)上的每个Node的IP上公开服务.将自动创建NodePort服务将路由到的ClusterIP服务.您可以通过请求从群集外部联系NodePort服务
<NodeIP>:<NodePort>.LoadBalancer:使用云提供商的负载均衡器在外部公开服务.将自动创建外部负载均衡器将路由到的NodePort和ClusterIP服务.
NodePort服务类型是否仍然使用ClusterIP但只是在一个不同的端口,该端口对外部客户端开放?所以在这种情况下是<NodeIP>:<NodePort>一样的<ClusterIP>:<NodePort>吗?
或者NodeIP实际上是运行时找到的IP kubectl get nodes而不是用于ClusterIP服务类型的虚拟IP?
2 - 同样在以下链接的图表中:
http://kubernetes.io/images/docs/services-iptables-overview.svg
有什么特别的原因Client是里面的Node?我认为Cluster在ClusterIP服务类型的情况下它需要在a里面.
如果为NodePort绘制了相同的图表,那么将客户端完全绘制在两者之外是否有效Node,Cluster或者我是否完全忽略了这一点?
我很难理解replicaDocker Swarm模式中实例的想法.我已经读过它是一个有助于提高可用性的功能.
但是,如果一个节点发生故障,即使replica为服务定义了一个节点,Docker也会自动在另一个节点上启动新任务,这也提供了高可用性.
那么,replica对于任意服务,有3个实例而不是1 个实例的优势是什么?我的假设是,如果有更多副本,Docker会在发生故障时花费更少的时间在另一个节点上创建新实例,这有助于提高性能.它是否正确?
我正在使用官方的RabbitMQ Docker镜像(https://hub.docker.com/_/rabbitmq/)
我rabbitmq.config在运行后尝试编辑容器内的文件
docker exec -it <container-id> /bin/bash
但是,这似乎对容器中运行的rabbitmq服务器没有影响.由于Docker启动了一个全新的实例,因此重启容器显然没有帮助.
所以我假设配置rabbitmq.configDocker容器的唯一方法是在容器开始运行之前设置它,我可以部分地使用图像支持的环境变量.
遗憾的是,环境变量并不支持所有配置选项.举例来说,我想设置{auth_mechanisms, ['PLAIN', 'AMQPLAIN', 'EXTERNAL']}在rabbitmq.config.
然后我找到了RABBITMQ_CONFIG_FILE环境变量,这应该允许我指向我想用作conifg文件的文件.但是,我试过以下没有运气:
docker service create --name rabbitmq --network rabbitnet \
-e RABBITMQ_ERLANG_COOKIE='mycookie' --hostname = "{{Service.Name}}{{.Task.Slot}}" \
--mount type=bind,source=/root/mounted,destination=/root \
-e RABBITMQ_CONFIG_FILE=/root/rabbitmq.config rabbitmq
Run Code Online (Sandbox Code Playgroud)
默认rabbitmq.config文件包含:
[ { rabbit, [ { loopback_users, [ ] } ] } ]
Run Code Online (Sandbox Code Playgroud)
一旦它开始,它就在容器中
配置rabbitmq.configDocker容器内部的最佳方法是什么?