Kubernetes 中 rethinkdb 集群的高可用性问题

     2023-02-23     15

关键词:

【中文标题】Kubernetes 中 rethinkdb 集群的高可用性问题【英文标题】:High availability issue with rethinkdb cluster in kubernetes 【发布时间】:2015-10-21 11:25:17 【问题描述】:

我正在 kubernetes 中设置 rethinkdb 集群,但它不能按预期工作以满足高可用性要求。因为当一个 pod 宕机时,kubernetes 会创建另一个 pod,它运行同一个镜像的另一个容器,旧的挂载数据(已经持久化在主机磁盘上)将被擦除,新的 pod 将作为一个全新的实例加入集群.我在 CoreOS v773.1.0 stable 中运行 k8s。

如果我错了,请纠正我,但是这样在 k8s 中设置数据库集群似乎是不可能的。

更新:如http://kubernetes.io/v1.0/docs/user-guide/pod-states.html#restartpolicy 中所述,如果RestartPolicy: Always 退出失败,它将重新启动容器。这意味着通过“重新启动”它会启动同一个容器,还是创建另一个容器?或者可能是因为我通过命令 kubectl stop po 停止了 pod,所以它不会重新启动同一个容器?

【问题讨论】:

【参考方案1】:

这就是 Kubernetes 的工作方式,其他解决方案可能也以同样的方式工作。当一台机器死机时,它上面的容器将被重新安排在另一台机器上运行。那台机器没有容器状态。事件当它是同一台机器时,它上面的容器被创建为一个新容器,而不是重新启动退出的容器(里面有数据)。

要持久化数据,您需要某种外部存储(NFS、EBS、EFS,...)。如果是k8s,你可能想看看这个https://github.com/kubernetes/kubernetes/blob/master/docs/design/persistent-storage.md这个Github issue也有很多信息https://github.com/kubernetes/kubernetes/issues/6893

事实上,在我看来,这就是实现 HA 的方法。容器都是无状态的,它们里面没有任何东西。他们的任何配置需求都应该存储在外部,例如使用 Consul 或 Etcd 之类的东西。通过这样分离,重启容器更容易

【讨论】:

我使用 persistentVolume HostPath 来持久化数据。我意识到我对集群中的每个节点都使用了相同的 persistentVolume,即使它们被安排在不同的节点上也是错误的。这是 k8s 持久卷的行为,特别是 HostPath?但是,我认为不应该是这样。谢谢@kureikain,你的回答帮助了我!【参考方案2】:

尝试使用 PetSets http://kubernetes.io/docs/user-guide/petset/ 这允许您命名您的(宠物)豆荚。如果一个 pod 被杀死,那么它会以相同的名称返回。

petset功能总结如下。

稳定的主机名 稳定的域名 多个相似类型的宠物将使用“-n”命名(rethink-0, rethink-1, ... rethink-n 例如) 持久卷 现在应用可以集群/对等

当宠物吊舱死亡时,将启动一个新的吊舱,并采用与前一个吊舱相同的“状态”(包括磁盘)。

【讨论】:

Kubernetes 集群中的 Kafka - 如何从 Kubernetes 集群外部发布/使用消息

】Kubernetes集群中的Kafka-如何从Kubernetes集群外部发布/使用消息【英文标题】:KafkainKubernetesCluster-Howtopublish/consumemessagesfromoutsideofKubernetesCluster【发布时间】:2017-06-1114:40:29【问题描述】:我已经在Kubernetes集群中部署并运行了Kafka... 查看详情

如何从同一项目中的另一个 Kubernetes 集群调用 Kubernetes 集群公开的服务

】如何从同一项目中的另一个Kubernetes集群调用Kubernetes集群公开的服务【英文标题】:HowtocallaserviceexposedbyaKubernetesclusterfromanotherKubernetesclusterinsameproject【发布时间】:2015-10-1806:51:54【问题描述】:我有两个服务,集群K1中的S1和... 查看详情

私有子网中的本地 Kubernetes 集群

】私有子网中的本地Kubernetes集群【英文标题】:on-premisekubernetesclusterinprivatesubnet【发布时间】:2019-01-2019:00:16【问题描述】:我想在我们的本地数据中心内运行一个包含1个主节点和2个工作节点的Kubernetes集群,所有3个节点都位... 查看详情

如何从 Kubernetes 集群中删除分蘖

】如何从Kubernetes集群中删除分蘖【英文标题】:howtodeletetillerfromkubernetescluster【发布时间】:2018-05-1423:51:35【问题描述】:Tiller在我的Kubernetes集群中无法正常工作。我想删除Tiller的所有内容。Tiller(2.5.1)有1个Deployment、1个ReplicaSet... 查看详情

Kubernetes 集群中 Docker 镜像中的环境变量

】Kubernetes集群中Docker镜像中的环境变量【英文标题】:environmentvariablesinDockerimagesinKubernetesCluster【发布时间】:2019-06-2305:24:20【问题描述】:我正在开发一些GCP应用程序,这些应用程序在GCP的Kubernetes集群中被dockerized(我是Docker... 查看详情

Kubernetes:是不是可以在 Kubernetes 集群中使用单个请求来命中多个 pod

】Kubernetes:是不是可以在Kubernetes集群中使用单个请求来命中多个pod【英文标题】:Kubenetes:IsitpossibletohitmultiplepodswithasinglerequestinKubernetesclusterKubernetes:是否可以在Kubernetes集群中使用单个请求来命中多个pod【发布时间】:2018-09-11... 查看详情

在 kubernetes 集群中部署映像获取 CrashLoopBackOff

】在kubernetes集群中部署映像获取CrashLoopBackOff【英文标题】:deployingimageinkubernetesclustergettingCrashLoopBackOff【发布时间】:2018-12-1015:19:18【问题描述】:我正在使用kubernetes集群使用kubectlcreate-fdummy.yaml部署映像。我的图像在dockerhub中... 查看详情

Kubernetes:如何从 kubectl 配置中删除集群和上下文?

】Kubernetes:如何从kubectl配置中删除集群和上下文?【英文标题】:Kubernetes:HowdoIdeleteclustersandcontextsfromkubectlconfig?【发布时间】:2016-08-2905:33:12【问题描述】:kubectlconfigview显示与我已删除的集群相对应的上下文和集群。如何删... 查看详情

在 Kubernetes 中拥有多个命名空间和多个集群有啥区别

】在Kubernetes中拥有多个命名空间和多个集群有啥区别【英文标题】:WhatisthedifferencebetweenhavingmultiplenamespaceandmultipleclusterinKubernetes在Kubernetes中拥有多个命名空间和多个集群有什么区别【发布时间】:2020-10-1813:22:21【问题描述】:... 查看详情

在一个 kubernetes 集群中运行多个应用程序或每个应用程序在一个集群中运行

】在一个kubernetes集群中运行多个应用程序或每个应用程序在一个集群中运行【英文标题】:Multipleappsrunninginonekubernetesclusteroraclustersforeachapp【发布时间】:2019-02-1711:20:45【问题描述】:我有一些在Azure中工作的应用程序。所有这... 查看详情

如何检查 Kubernetes 集群中剩余的核心数和内存容量

】如何检查Kubernetes集群中剩余的核心数和内存容量【英文标题】:Howtochecknumberofcoresandramcapacityleftinkubernetescluster【发布时间】:2021-09-2314:02:23【问题描述】:我有一个大约18个节点的Kubernetes集群,其中很少有4核和16GRAM,很少有1... 查看详情

使用 TcpDiscoveryKubernetesIpFinder 在 Kubernetes 集群中无法发现 Ignite

】使用TcpDiscoveryKubernetesIpFinder在Kubernetes集群中无法发现Ignite【英文标题】:IgnitenotdiscoverableinkubernetesclusterwithTcpDiscoveryKubernetesIpFinder【发布时间】:2019-02-0114:23:40【问题描述】:我正在尝试使用TcpDiscoveryKubernetesIpFinder使部署在k8s... 查看详情

Kubernetes 在所有集群中更改 kubelet 配置

】Kubernetes在所有集群中更改kubelet配置【英文标题】:Kuberneteschangekubeletconfigatallcluster【发布时间】:2018-10-2215:52:04【问题描述】:我需要在Kubelet中添加参数--authentication-token-webhook。我可以用手一步一步地在所有节点上更改文件/... 查看详情

如何在 Google Cloud Platform 中编辑 Kubernetes 集群的描述字段?

】如何在GoogleCloudPlatform中编辑Kubernetes集群的描述字段?【英文标题】:HowcanIeditthedescriptionfieldofaKubernetesclusterinGoogleCloudPlatform?【发布时间】:2016-07-0911:30:53【问题描述】:我想编辑部署在Google容器引擎中的Kubernetes集群的描述字... 查看详情

指标服务器在 Kubernetes 集群中不起作用

】指标服务器在Kubernetes集群中不起作用【英文标题】:MetricsservernotworkinginKubernetescluster【发布时间】:2020-05-1502:39:02【问题描述】:我已经在ubuntu18+上设置了kubernetes集群。它工作正常。现在我添加了度量服务器,但它不工作。#... 查看详情

使用 Prometheus 监控 Kubernetes 集群中的 Spring Boot 应用程序

】使用Prometheus监控Kubernetes集群中的SpringBoot应用程序【英文标题】:UsingPrometheustomonitorSpringBootApplicationsinKubernetesCluster【发布时间】:2020-05-0605:28:39【问题描述】:我在本地kubernetes集群中部署了SpringBoot驱动的微服务。微服务使... 查看详情

sh与kubernetes集群中的db交互(代码片段)

查看详情

EKS:kubernetes 集群中的不健康节点

】EKS:kubernetes集群中的不健康节点【英文标题】:EKS:Unhealthynodesinthekubernetescluster【发布时间】:2021-04-1223:02:33【问题描述】:使用terraform在AWSEKS上预置节点组时出现错误。错误:等待创建EKS节点组(xxx)时出错:NodeCreationFailure:Unh... 查看详情