求基于Ubuntu20.04的Kubernetes部署Cassandra、Elasticsearch、JanusGraph的方案
在Kubernetes 1.26.1集群部署Cassandra、Elasticsearch和JanusGraph
一、部署Cassandra
1. StatefulSet与Service YAML
apiVersion: v1 kind: Service metadata: name: cassandra labels: app: cassandra spec: clusterIP: None ports: - port: 9042 selector: app: cassandra --- apiVersion: apps/v1 kind: StatefulSet metadata: name: cassandra spec: serviceName: cassandra replicas: 3 selector: matchLabels: app: cassandra template: metadata: labels: app: cassandra spec: containers: - name: cassandra image: cassandra:4.1.3 ports: - containerPort: 7000 name: intra-node - containerPort: 7001 name: tls-intra-node - containerPort: 7199 name: jmx - containerPort: 9042 name: cql resources: limits: cpu: "1000m" memory: 2Gi requests: cpu: "500m" memory: 1Gi volumeMounts: - name: cassandra-data mountPath: /var/lib/cassandra env: - name: CASSANDRA_SEEDS value: "cassandra-0.cassandra.default.svc.cluster.local" - name: CASSANDRA_CLUSTER_NAME value: "K8sCassandraCluster" - name: CASSANDRA_DC value: "DC1" - name: CASSANDRA_RACK value: "Rack1" - name: MAX_HEAP_SIZE value: 1G - name: HEAP_NEWSIZE value: 200M volumeClaimTemplates: - metadata: name: cassandra-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 10Gi
部署说明
- 采用StatefulSet保证Pod稳定网络标识与持久化存储,3副本适配你的3节点集群
- 通过环境变量配置集群核心参数,可根据集群资源实际情况调整CPU、内存限制
- 持久化存储使用PVC,按需修改存储容量
二、部署Elasticsearch
1. StatefulSet与Service YAML
apiVersion: v1 kind: Service metadata: name: elasticsearch labels: app: elasticsearch spec: clusterIP: None ports: - port: 9200 name: rest - port: 9300 name: inter-node selector: app: elasticsearch --- apiVersion: apps/v1 kind: StatefulSet metadata: name: elasticsearch spec: serviceName: elasticsearch replicas: 3 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: initContainers: - name: fix-permissions image: busybox:1.36.1 command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"] securityContext: privileged: true volumeMounts: - name: es-data mountPath: /usr/share/elasticsearch/data - name: increase-vm-max-map image: busybox:1.36.1 command: ["sysctl", "-w", "vm.max_map_count=262144"] securityContext: privileged: true containers: - name: elasticsearch image: docker.elastic.co/elasticsearch/elasticsearch:8.11.3 ports: - containerPort: 9200 name: rest - containerPort: 9300 name: inter-node resources: limits: cpu: "1000m" memory: 2Gi requests: cpu: "500m" memory: 1Gi volumeMounts: - name: es-data mountPath: /usr/share/elasticsearch/data env: - name: node.name valueFrom: fieldRef: fieldPath: metadata.name - name: cluster.name value: "K8sElasticCluster" - name: discovery.seed_hosts value: "elasticsearch-0.elasticsearch.default.svc.cluster.local,elasticsearch-1.elasticsearch.default.svc.cluster.local,elasticsearch-2.elasticsearch.default.svc.cluster.local" - name: cluster.initial_master_nodes value: "elasticsearch-0,elasticsearch-1,elasticsearch-2" - name: ES_JAVA_OPTS value: "-Xms1g -Xmx1g" - name: xpack.security.enabled value: "false" volumeClaimTemplates: - metadata: name: es-data spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 10Gi
部署说明
- 两个初始化容器分别修复存储目录权限、调整内核参数,满足Elasticsearch运行要求
- 关闭xpack.security便于测试,生产环境需开启并配置认证机制
- 3副本适配3节点集群,资源限制可根据实际情况调整
三、部署JanusGraph
1. Deployment与Service YAML(基于Cassandra存储+Elasticsearch索引)
apiVersion: v1 kind: Service metadata: name: janusgraph labels: app: janusgraph spec: type: NodePort ports: - port: 8182 targetPort: 8182 nodePort: 30082 selector: app: janusgraph --- apiVersion: apps/v1 kind: Deployment metadata: name: janusgraph spec: replicas: 1 selector: matchLabels: app: janusgraph template: metadata: labels: app: janusgraph spec: containers: - name: janusgraph image: janusgraph/janusgraph:0.6.3 ports: - containerPort: 8182 name: gremlin resources: limits: cpu: "1000m" memory: 2Gi requests: cpu: "500m" memory: 1Gi env: - name: JANUSGRAPH_STORAGE_BACKEND value: "cassandra" - name: JANUSGRAPH_STORAGE_HOSTS value: "cassandra.default.svc.cluster.local" - name: JANUSGRAPH_INDEX_BACKEND value: "elasticsearch" - name: JANUSGRAPH_INDEX_HOSTS value: "elasticsearch.default.svc.cluster.local" - name: JAVA_OPTS value: "-Xms1g -Xmx1g"
部署说明
- 通过K8s内部服务名关联Cassandra存储与Elasticsearch索引后端
- 初始为单副本部署,可根据业务需求扩容
- 采用NodePort暴露服务便于外部访问,也可切换为ClusterIP或LoadBalancer类型
通用部署步骤
- 将上述内容分别保存为
cassandra.yaml、elasticsearch.yaml、janusgraph.yaml文件 - 依次执行部署命令:
kubectl apply -f cassandra.yaml kubectl apply -f elasticsearch.yaml kubectl apply -f janusgraph.yaml - 验证Pod运行状态:
等待所有Pod进入Running状态即可使用kubectl get pods
注意事项
- 确保集群节点有足够CPU、内存资源,避免因资源不足导致Pod调度失败
- 生产环境建议配置自定义StorageClass,优化持久化存储性能与可靠性
- 可根据业务需求调整副本数、资源限制、存储容量等参数
内容的提问来源于stack exchange,提问作者syed adeeb
相关产品推荐
相关产品推荐

