Cassandra - Kubernetes 如何在重启时保留 pod ip
Cassandra - Kubernetes how to keep pod ip when restart
我正在使用 kubernetes 1.2 示例对 运行 2 个 cassandra 节点进行测试。 https://github.com/kubernetes/kubernetes/blob/release-1.2/examples/cassandra/README.md
我使用 daemonset 通过 kubernetes 节点拥有一个 cassandra 节点。一切正常,直到一个 cassandra 节点重新启动。 POD 的 IP 地址更改和 nodetools 状态 returns 节点 DOWN
> kubectl exec -it cassandra-lnzhj -- nodetool status fruition
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 10.216.1.4 25.22 MB 256 39.6% 786aede9-ec4f-4942-b52a-135bc3cd68ce rack1
UN 10.216.0.3 2.11 MB 256 40.1% 457f7322-131a-4499-b677-4d50691207ba rack1
DN 10.216.0.2 377.41 KB 256 38.8% aa2ca115-e8ea-4c62-8d57-bfc5b3fabade rack1
然后,当我尝试在复制因子为 2 的键空间上发送一个简单的 "select * from table;" 时,我遇到了这个错误:
Traceback (most recent call last):
File "/usr/bin/cqlsh", line 1093, in perform_simple_statement rows = self.session.execute(statement, trace=self.tracing_enabled)
File "/usr/share/cassandra/lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 1602, in execute result = future.result()
File "/usr/share/cassandra/lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 3347, in result raise self._final_exception
Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ONE" info={'required_replicas': 1, 'alive_replicas': 0, 'consistency': 'ONE'}
如何保留POD IP地址,以免Kubernetes重启时出现Down节点?
使用 cassandra 配置有更好的方法吗?
您无法使用当前的 Kubernetes 实现此目的。您需要在 v1.3 中实现 PetSets。
不幸的是,即使现在在 Kubernetes 1.5 中称为 PetSets 或 Stateful Sets 也无法解决这个问题。新功能允许您保留相同的主机名,但不能保证 IP 地址将保持不变。引用他们的文档:
The Pods’ ordinals, hostnames, SRV records, and A record names have
not changed, but the IP addresses associated with the Pods may have
changed. In the cluster used for this tutorial, they have. This is why
it is important not to configure other applications to connect to Pods
in a StatefulSet by IP address.
如果您不依赖于 kubernetes 并且可以灵活地选择其他解决方案,check this out。
他们提供 container-based 结合计算、网络、存储的解决方案,因此您可以完全控制 cassandra 所需的所有资源,并执行 snapshot/restore、横向扩展、扩展 up/down、故障转移等。他们保证在容器的整个生命周期内保留相同的 IP 地址和卷。
我正在使用 kubernetes 1.2 示例对 运行 2 个 cassandra 节点进行测试。 https://github.com/kubernetes/kubernetes/blob/release-1.2/examples/cassandra/README.md
我使用 daemonset 通过 kubernetes 节点拥有一个 cassandra 节点。一切正常,直到一个 cassandra 节点重新启动。 POD 的 IP 地址更改和 nodetools 状态 returns 节点 DOWN
> kubectl exec -it cassandra-lnzhj -- nodetool status fruition
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 10.216.1.4 25.22 MB 256 39.6% 786aede9-ec4f-4942-b52a-135bc3cd68ce rack1
UN 10.216.0.3 2.11 MB 256 40.1% 457f7322-131a-4499-b677-4d50691207ba rack1
DN 10.216.0.2 377.41 KB 256 38.8% aa2ca115-e8ea-4c62-8d57-bfc5b3fabade rack1
然后,当我尝试在复制因子为 2 的键空间上发送一个简单的 "select * from table;" 时,我遇到了这个错误:
Traceback (most recent call last):
File "/usr/bin/cqlsh", line 1093, in perform_simple_statement rows = self.session.execute(statement, trace=self.tracing_enabled)
File "/usr/share/cassandra/lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 1602, in execute result = future.result()
File "/usr/share/cassandra/lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 3347, in result raise self._final_exception
Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ONE" info={'required_replicas': 1, 'alive_replicas': 0, 'consistency': 'ONE'}
如何保留POD IP地址,以免Kubernetes重启时出现Down节点? 使用 cassandra 配置有更好的方法吗?
您无法使用当前的 Kubernetes 实现此目的。您需要在 v1.3 中实现 PetSets。
不幸的是,即使现在在 Kubernetes 1.5 中称为 PetSets 或 Stateful Sets 也无法解决这个问题。新功能允许您保留相同的主机名,但不能保证 IP 地址将保持不变。引用他们的文档:
The Pods’ ordinals, hostnames, SRV records, and A record names have not changed, but the IP addresses associated with the Pods may have changed. In the cluster used for this tutorial, they have. This is why it is important not to configure other applications to connect to Pods in a StatefulSet by IP address.
如果您不依赖于 kubernetes 并且可以灵活地选择其他解决方案,check this out。
他们提供 container-based 结合计算、网络、存储的解决方案,因此您可以完全控制 cassandra 所需的所有资源,并执行 snapshot/restore、横向扩展、扩展 up/down、故障转移等。他们保证在容器的整个生命周期内保留相同的 IP 地址和卷。