在Kubernetes上扩展MongoDB,这样可以吗?

  • 时间:
  • 浏览:3
  • 来源:5分快乐8APP下载_5分快乐8APP官方

mongo-0/1/2的内部IP是新创建的TCP负载均衡器的IP。 那先 是您的子网或对等网络,将会有话语。

部署MongoDB集群

Mongo Pod的Service Account和ClusterRole Binding

使用Ingress访问Pod(可选)

默认缓存大小的指导值是:“200%的RAM减去1GB,或256MB”。 鉴于所请求的内存量为2GB,此处的WiredTiger缓存大小已设置为256MB。

请务必注意,您的应用线程池池池相当于 应该知道有5个当前存在启动状况的Mongo节点,也不都都还后能 发现所有一些节点。

那先 细节都都还后能 在这里[1]找到。

在GKE中给Node Pool打Label非常容易,都都还后能 直接从GCP控制台进行。

新加带的成员遵循与先前成员相同的FQDN方案,很久 还与同一主节点同步。

Daemon Set for HostVM Configuration

Configuration for ServiceAccount, Storage Class, Headless SVC and StatefulSet

亲戚亲戚大伙都都还后能 把StatefulSets的底部形态归纳如下:

rs.status()查看副本集名称和成员个数

值得注意的是,每个MongoDB Pod就有运行有5个Sidecar,以便动态配置副本集。Sidecar每5秒检查一次新成员。

每个secondary成员正在同步到mongo-0,mongo-0是当前的primary。

亲戚亲戚大伙在Kubernetes文档中随时都都还后能 查看的信息上不不花费也不时间,让亲戚亲戚大伙专注于运行和扩展MongoDB集群。

实在亲戚亲戚大伙在Pod的Spec中指定了CPU和内存限制,但亲戚亲戚大伙也都都还后能 考虑部署VPA(Vertical Pod Autoscaler)。

有序并行的Pod管理

你需用有5个都都还后能 运行的Kubernetes群集并启用RBAC(推荐)。 在本教程中,我将使用GKE集群,很久 ,AWS EKS或Microsoft的AKS或Kops管理的Kubernetes也是可行的替代方案。

现在亲戚亲戚大伙扩展mongo Pods的Stateful Set以检查新的Mongo容器是与否被加带到ReplicaSet。

IPs(10.56.6.17,10.56.7.10,10.56.8.11)是亲戚亲戚大伙的Mongo StatefulSets的Pod IPs。 这都都还后能 通过在集群内部运行nslookup来测试。

对此最好的用例之一是对数据存储服务进行编排,相似MongoDB,ElasticSearch,Redis,ZooKeeper等。

让他通过以下命令查看所有组件状况:

通过Ingress访问Pod(可选)

亲戚亲戚大伙将为MongoDB集群部署以下组件:

每个成员都都都还后能 看了FQDN和状况。 此FQDN都都还后能 了从群集内部访问。

为mongo-1和mongo-2也部署有5个此类服务。

稳定的网络ID

服务的DNS规则是<服务名称>.<服务的命名空间>,很久 ,在亲戚亲戚大伙的例子中看了的是mongo.mongo。

将会要从集群内部访问Mongo节点,让他为每个Pod部署内部负载平衡或使用Ingress Controller(如NGINX或Traefik)创建有5个内部Ingress。

GCP Internal LB SVC Configuration(可选)

都都还后能 看出,所有5个Pod都部署到不同的GKE节点,很久 亲戚亲戚大伙的Pod-Anti Affinity策略工作正常。

让他将内部负载均衡的IP提供给MongoClient URI。

StatefulSets的有5个非常明显的底部形态是提供稳定网络ID,与Headless Services[2]同时使用时,功上不能更加强大。

给Mongo Pod的Node Pool打上相当于 的label并确保在StatefulSets和HostVM配置的DaemonSets的Spec中指定适当的Node Affinity会很有帮助。 这是将会DaemonSet将调整主机操作系统的一些参数,很久 那先 设置应仅限于MongoDB Pod。 那末那先 设置,对一些应用线程池池池将会会更好。

让亲戚亲戚大伙来验证一下DNS解析。 亲戚亲戚大伙在集群中启动了有5个交互式shell:

Kubernetes主要用于无状况应用线程池池池。 很久 ,在1.3版本中引入了PetSets,很久它们演变为StatefulSets。 官方文档将StatefulSets描述为“StatefulSets旨在与有状况应用线程池池池和分布式系统同时使用”。

为Pod提供永久性存储SSDs的Storage Class

我在本地mac上使用Robo 3T作为mongo客户端。 连接到其中有5个节点后并运行rs.status(),您都都还后能 查看副本集的全部信息,并检查是与否已配置一些有5个Pod并自动连接到副本集。



访问Mongo容器的Headless Service

对于同有5个的Replicaset,成员数现在为4。

应该使用适当的环境变量仔细配置Mongo的Sidecar,以及为Pod提供的标签,和为deployment和service的命名空间。 有关Sidecar容器的全部信息,请点击此处[3]。

如你所见,该服务那末Cluster-IP,也那末External-IP,它是Headless服务。 此服务将直接解析为StatefulSets的Pod-IP。

关键点:

也都都还后能 使用诸如Nginx相似的Ingress Controller来定向到Mongo StatefulSets的流量。 确保Ingress服务是内部服务,而就有通过PublicIP公开。 Ingress对象的配置看起来像也不:

进一步的考虑

将会你将会看了这里,我相信你将会浏览了整个博文。 我试图分发也不分散的信息并将其作为有5个整体呈现。 我的目标是为您提供足够的信息,以便现在开使了了使用Kubernetes上的Stateful Sets,并希望亲戚亲戚大伙中的亲戚亲戚大伙实在它很有用。 亲戚亲戚大伙非常欢迎您提出反馈、意见或建议。:)

要检查名为mongo-3的Pod是与否已加带到副本集,亲戚亲戚大伙将在同一节点上再次运行rs.status()并观察其差异。



都都还后能 通过实施网络策略或服务网格(如Istio)来控制从集群内部到亲戚亲戚大伙的数据库的流量。

配置HostVM的Daemon Set

Inter-Pod Anti-Affinity确保在同有5个工作节点上不不安排有5个Mongo Pod,从而使其不能适应节点故障。 此外,建议将节点保留在不同的可用区中,以便集群不能抵御区域故障。

当前部署的Service Account具有管理员权限。 很久 ,它应该仅限于DB的命名空间。

后面 提到的有5个配置文件也都都还后能 在这里[4]找到。

滚动更新

有序索引Pod

将会你的应用线程池池池部署在Kubernetes的群集中,那末它都都还后能 通过以下土办法访问节点:

GCP Internal LB:从Kubernetes集群内部访问MongoDB(可选)

扩展操作还将自动提供持久卷,该卷将充当新Pod的数据目录。

原文发布时间为:2018-12-13

本文作者: kelvinji2009 译

本文来自云栖社区合作土办法伙伴“ 数据和云”,了解相关信息都都还后能 关注“OraNews”微信公众号

Mongo Pods Stateful Set