You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求基于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类型

通用部署步骤

  1. 将上述内容分别保存为cassandra.yaml、elasticsearch.yaml、janusgraph.yaml文件
  2. 依次执行部署命令:
    kubectl apply -f cassandra.yaml
    kubectl apply -f elasticsearch.yaml
    kubectl apply -f janusgraph.yaml
    
  3. 验证Pod运行状态:
    kubectl get pods
    
    等待所有Pod进入Running状态即可使用

注意事项

  • 确保集群节点有足够CPU、内存资源,避免因资源不足导致Pod调度失败
  • 生产环境建议配置自定义StorageClass,优化持久化存储性能与可靠性
  • 可根据业务需求调整副本数、资源限制、存储容量等参数

内容的提问来源于stack exchange,提问作者syed adeeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 16:06:28