[英]Expose node js app with host as localhost on kubernetes
[英]Expose Cassandra running on Kubernetes
我正在Kubernetes(3个实例)上运行Cassandra,并希望将其公开给外部,我的应用程序尚未在Kubernetes中。 所以我创建了这样的负载均衡服务:
apiVersion: v1
kind: Service
metadata:
namespace: getquanty
labels:
app: cassandra
name: cassandra
annotations:
kubernetes.io/tls-acme: "true"
spec:
clusterIP:
ports:
- port: 9042
name: cql
nodePort: 30001
- port: 7000
name: intra-node
nodePort: 30002
- port: 7001
name: tls-intra-node
nodePort: 30003
- port: 7199
name: jmx
nodePort: 30004
selector:
app: cassandra
type: LoadBalancer
结果是:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cassandra 10.55.249.88 GIVEN_IP_GCE_LB 9042:30001/TCP,7000:30002/TCP,7001:30003/TCP,7199:30004/TCP 26m
我能够使用sh(cqlsh GIVEN_IP_GCE_LB)进行连接,但是当我尝试使用用于节点的datastax驱动程序将数据添加到Cassandra时,我得到了:
message: 'Cannot achieve consistency level SERIAL',
info: 'Represents an error message from the server',
code: 4096,
consistencies: 8,
required: 1,
alive: 0,
coordinator: '35.187.166.68:9042' },
'10.52.4.32:9042': 'Host considered as DOWN',
'10.52.2.15:9042': 'Host considered as DOWN' },
info: 'Represents an error when a query cannot be performed because no host is available or could be reached by the driver.',
message: 'All host(s) tried for query failed. First host tried, 35.187.166.68:9042: ResponseError: Cannot achieve consistency level SERIAL. See innerErrors.' }
我的第一个想法是我也需要公开其他端口,所以我做了(节点内,tls节点内,jmx),但这是相同的错误。
Kubernetes使您可以访问代理,我尝试使用已构建的Pod的URL从我的计算机代理来测试我是否可以访问,但无法使用cqlsh进行连接:
http://127.0.0.1:8001/api/v1/namespaces/qq/pods/cassandra-0:cql/proxy
我没有主意,可以尝试做的一件事是暴露每个实例(为每个实例提供服务),这很丑陋,但这会让我从外部连接到节点,直到将应用程序迁移到Kubernetes为止。
是否有人想出如何将Cassandra节点公开到Internet并使Datastax驱动程序知道所有节点的想法? 感谢您的时间。
经过更多的阅读后,我发现复制策略是导致问题的一种,NetworkStrategy适用于多集群,我有一个,因此我根据拥有的节点数将复制更改为简单,现在一切正常。
编辑1:将数据库放在Kube上不是一个好的解决方案,我最终制作了一个独立的群集,将其添加到与kube相同的网络中,并且能够从kube pod中访问它。
Kube可以管理应用程序并使它们“具有弹性”,我认为人们真的不需要像应用程序那样快速扩展数据库,此外,数据库的扩展与无状态应用程序的操作不同。
您需要为创建的复制控制器使用无头服务。
您的服务应类似于:
apiVersion: v1
kind: Service
metadata:
labels:
app: cassandra
name: cassandra
spec:
clusterIP: None
ports:
- port: 9042
selector:
app: cassandra
另外,您可以参考以下链接,并启动一个cassandra群集。 https://github.com/kubernetes/kubernetes/tree/master/examples/storage/cassandra
我建议通过复制控制器或statefulset或daemonset运行cassandra pod,因为kubernetes会在需要时管理pod的重启/重新调度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.