kubernetes 种子提供者无法查找主机 cassandra-0.cassandra.default.svc.cluster.local
kubernetes Seed provider couldn't lookup host cassandra-0.cassandra.default.svc.cluster.local
aws 上的 Cassandra 集群无法启动。
报错如下
INFO [main] 2018-10-11 08:11:42,794 DatabaseDescriptor.java:729 -
Back-pressure is disabled with strategy
org.apache.cassandra.net.RateBasedBackPressure{high_ratio=0.9,
factor=5, flow=FAST}.
WARN [main] 2018-10-11 08:11:42,848 SimpleSeedProvider.java:60 - Seed
provider couldn't lookup host
cassandra-0.cassandra.default.svc.cluster.local Exception
(org.apache.cassandra.exceptions.ConfigurationException) encountered
during startup: The seed provider lists no seeds. The seed provider
lists no seeds. ERROR [main] 2018-10-11 08:11:42,851
CassandraDaemon.java:708 - Exception encountered during startup: The
seed provider lists no seeds.
这是我的详细信息。
$kubectl get pods [13:48]
NAME READY STATUS RESTARTS AGE
cassandra-0 1/1 Running 0 19h
cassandra-1 0/1 CrashLoopBackOff 231 19h
$kubectl get services [13:49]
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cassandra NodePort 100.69.201.208 <none> 9042:30000/TCP 1d
kubernetes ClusterIP 100.64.0.1 <none> 443/TCP 15d
$kubectl get pvc [13:50]
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
cassandra-data-cassandra-0 Pending fast 15d
cassandra-storage-cassandra-0 Bound pvc-f3ff4203-c0a4-11e8-84a8-02c7556b5a4a 320Gi RWO gp2 15d
cassandra-storage-cassandra-1 Bound pvc-1bc3f896-c0a5-11e8-84a8-02c7556b5a4a 320Gi RWO gp2 15d
$kubectl get namespaces [13:53]
NAME STATUS AGE
default Active 15d
kube-public Active 15d
kube-system Active 15d
甚至工作 pod 也没有加载存储。
它工作正常,直到我尝试将 MAX_HEAP_SIZE
从 1024M 更改为 2048M。
在那之后,即使我删除了所有旧的 pods 服务并重新创建,仍然无法正常工作。
您正在使用 NodePort 类型。这不会使该服务成为无头服务,这就是无法解析 pod 的 IP 地址的原因。
您需要做的是创建一个单独的无头服务。您还需要在入口点创建自己的 Docker 图像和 运行 脚本,该脚本将获取服务域名的所有 ips。
您可以看下面的项目为例:https://github.com/vyshane/cassandra-kubernetes/
我确实尝试过 Simon 的代码解决方案。但他给了我一个提示,它必须是一个无头的服务。但是在我的例子中,我通过添加 "clusterIP: None" 创建无头服务。它给出 "Seed provider couldn't lookup host" 没有这一行。
我找不到 pod(elassandra-0.elassandra.chargington.svc.cluster.local) 的 DNS,但我可以找到服务的 DNS(elassandra.chargington.svc.cluster.local).
Sometimes you don’t need or want load-balancing and a single service IP. In this case, you can create “headless” services by specifying "None" for the cluster IP (.spec.clusterIP).
https://kubernetes.io/docs/concepts/services-networking/service/
这是我的代码
apiVersion: v1
kind: Service
metadata:
labels:
app: elassandra
name: elassandra
namespace: chargington
spec:
clusterIP: None
ports:
- name: cassandra
port: 9042
- name: http
port: 9200
- name: transport
protocol: TCP
port: 9300
selector:
app: elassandra
在我的状态集中我需要设置
serviceName: elassandra
。这是将 StatefulSet 指向将管理 pod 的 DNS 名称的域的服务所必需的。
---
api版本:"apps/v1beta1"
种类:StatefulSet
元数据:
姓名:埃拉桑德拉
命名空间:chargington
规格:
服务名称:elassandra
复制品:1
模板:
元数据:
标签:
应用程序:elassandra
规格:
容器:
- 名称:艾拉桑德拉
图片:strapdata/elassandra:6.2.3.3
imagePullPolicy:如果不存在
端口:
- 容器端口:7000
名称:节点内
- 容器端口:7001
名称:tls-节点内
- 容器端口:7199
姓名:jmx
- 容器端口:9042
姓名:cql
- 容器端口:9200
名称:http
协议:TCP
- 容器端口:9300
名称:运输
协议:TCP
环境:
- 姓名:CASSANDRA_SEEDS
值:elassandra-0.elassandra.chargington.svc.cluster.local
- 姓名:MAX_HEAP_SIZE
价值:256M
- 姓名:HEAP_NEWSIZE
价值:100M
- 姓名:CASSANDRA_CLUSTER_NAME
值:"Cassandra"
- 姓名:CASSANDRA_DC
值:"DC1"
- 姓名:CASSANDRA_RACK
值:"Rack1"
- 姓名:CASSANDRA_ENDPOINT_SNITCH
值:GossipingPropertyFileSnitch
卷挂载:
- 名称:elassandra-data
挂载路径:/opt/elassandra-5.5.0.8/data
volumeClaimTemplates:
- 元数据:
名称:elassandra-data
注释:
volume.beta.kubernetes.io/storage-class: ""<br>
规格:
访问模式:["ReadWriteOnce"]
资源:
要求:
存储:1Gi
如果还有其他人仍然面临种子提供程序无法查找主机 cassandra 的问题-0.cassandra.default.svc.cluster.local 异常
对我来说问题是域。我已将种子配置为:
cassandra-0.cassandra.<my-kube-namespace>.svc.<kube-domain>
在我们公司,k8s 集群部署有一个集群域——而不是默认设置,所以我不得不使用那个域,它开始为我工作。
要了解域,您可能需要联系您当地的 kube 管理员。
aws 上的 Cassandra 集群无法启动。 报错如下
INFO [main] 2018-10-11 08:11:42,794 DatabaseDescriptor.java:729 - Back-pressure is disabled with strategy org.apache.cassandra.net.RateBasedBackPressure{high_ratio=0.9, factor=5, flow=FAST}.
WARN [main] 2018-10-11 08:11:42,848 SimpleSeedProvider.java:60 - Seed provider couldn't lookup host cassandra-0.cassandra.default.svc.cluster.local Exception (org.apache.cassandra.exceptions.ConfigurationException) encountered during startup: The seed provider lists no seeds. The seed provider lists no seeds. ERROR [main] 2018-10-11 08:11:42,851 CassandraDaemon.java:708 - Exception encountered during startup: The seed provider lists no seeds.
这是我的详细信息。
$kubectl get pods [13:48]
NAME READY STATUS RESTARTS AGE
cassandra-0 1/1 Running 0 19h
cassandra-1 0/1 CrashLoopBackOff 231 19h
$kubectl get services [13:49]
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cassandra NodePort 100.69.201.208 <none> 9042:30000/TCP 1d
kubernetes ClusterIP 100.64.0.1 <none> 443/TCP 15d
$kubectl get pvc [13:50]
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
cassandra-data-cassandra-0 Pending fast 15d
cassandra-storage-cassandra-0 Bound pvc-f3ff4203-c0a4-11e8-84a8-02c7556b5a4a 320Gi RWO gp2 15d
cassandra-storage-cassandra-1 Bound pvc-1bc3f896-c0a5-11e8-84a8-02c7556b5a4a 320Gi RWO gp2 15d
$kubectl get namespaces [13:53]
NAME STATUS AGE
default Active 15d
kube-public Active 15d
kube-system Active 15d
甚至工作 pod 也没有加载存储。
它工作正常,直到我尝试将 MAX_HEAP_SIZE
从 1024M 更改为 2048M。
在那之后,即使我删除了所有旧的 pods 服务并重新创建,仍然无法正常工作。
您正在使用 NodePort 类型。这不会使该服务成为无头服务,这就是无法解析 pod 的 IP 地址的原因。
您需要做的是创建一个单独的无头服务。您还需要在入口点创建自己的 Docker 图像和 运行 脚本,该脚本将获取服务域名的所有 ips。
您可以看下面的项目为例:https://github.com/vyshane/cassandra-kubernetes/
我确实尝试过 Simon 的代码解决方案。但他给了我一个提示,它必须是一个无头的服务。但是在我的例子中,我通过添加 "clusterIP: None" 创建无头服务。它给出 "Seed provider couldn't lookup host" 没有这一行。 我找不到 pod(elassandra-0.elassandra.chargington.svc.cluster.local) 的 DNS,但我可以找到服务的 DNS(elassandra.chargington.svc.cluster.local).
Sometimes you don’t need or want load-balancing and a single service IP. In this case, you can create “headless” services by specifying "None" for the cluster IP (.spec.clusterIP).
https://kubernetes.io/docs/concepts/services-networking/service/
这是我的代码
apiVersion: v1
kind: Service
metadata:
labels:
app: elassandra
name: elassandra
namespace: chargington
spec:
clusterIP: None
ports:
- name: cassandra
port: 9042
- name: http
port: 9200
- name: transport
protocol: TCP
port: 9300
selector:
app: elassandra
在我的状态集中我需要设置
serviceName: elassandra
。这是将 StatefulSet 指向将管理 pod 的 DNS 名称的域的服务所必需的。
---
api版本:"apps/v1beta1"
种类:StatefulSet
元数据:
姓名:埃拉桑德拉
命名空间:chargington
规格:
服务名称:elassandra
复制品:1
模板:
元数据:
标签:
应用程序:elassandra
规格:
容器:
- 名称:艾拉桑德拉
图片:strapdata/elassandra:6.2.3.3
imagePullPolicy:如果不存在
端口:
- 容器端口:7000
名称:节点内
- 容器端口:7001
名称:tls-节点内
- 容器端口:7199
姓名:jmx
- 容器端口:9042
姓名:cql
- 容器端口:9200
名称:http
协议:TCP
- 容器端口:9300
名称:运输
协议:TCP
环境:
- 姓名:CASSANDRA_SEEDS
值:elassandra-0.elassandra.chargington.svc.cluster.local
- 姓名:MAX_HEAP_SIZE
价值:256M
- 姓名:HEAP_NEWSIZE
价值:100M
- 姓名:CASSANDRA_CLUSTER_NAME
值:"Cassandra"
- 姓名:CASSANDRA_DC
值:"DC1"
- 姓名:CASSANDRA_RACK
值:"Rack1"
- 姓名:CASSANDRA_ENDPOINT_SNITCH
值:GossipingPropertyFileSnitch
卷挂载:
- 名称:elassandra-data
挂载路径:/opt/elassandra-5.5.0.8/data
volumeClaimTemplates:
- 元数据:
名称:elassandra-data
注释:
volume.beta.kubernetes.io/storage-class: ""<br>
规格:
访问模式:["ReadWriteOnce"]
资源:
要求:
存储:1Gi
如果还有其他人仍然面临种子提供程序无法查找主机 cassandra 的问题-0.cassandra.default.svc.cluster.local 异常
对我来说问题是域。我已将种子配置为:
cassandra-0.cassandra.<my-kube-namespace>.svc.<kube-domain>
在我们公司,k8s 集群部署有一个集群域——而不是默认设置,所以我不得不使用那个域,它开始为我工作。
要了解域,您可能需要联系您当地的 kube 管理员。