在 Cassandra 集群环境中部署 Cassandra 节点的模板

目录

使用 StatefulSet 和 PersistentVolumeClaim 在 Cassandra 集群环境中部署 Cassandra 节点的模板


apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cassandra
spec:
  selector:
    matchLabels:
      app: cassandra
  serviceName: cassandra
  replicas: 3
  template:
    metadata:
      labels:
        app: cassandra
    spec:
      containers:
        - name: cassandra
          image: cassandra:3.11
          ports:
            - containerPort: 7000
              name: intra-node
            - containerPort: 7001
              name: tls-intra-node
            - containerPort: 7199
              name: jmx
            - containerPort: 9042
              name: cql
          env:
            - name: MAX_HEAP_SIZE
              value: 128M
            - name: HEAP_NEWSIZE
              value: 128M
            - name: CASSANDRA_SEEDS
              value: "cassandra-0.cassandra.default.svc.cluster.local"
            - name: CASSANDRA_CLUSTER_NAME
              value: "Test Cluster"
            - name: CASSANDRA_DC
              value: "dc1"
            - name: CASSANDRA_RACK
              value: "rack1"
            - name: CASSANDRA_ENDPOINT_SNITCH
              value: GossipingPropertyFileSnitch
          volumeMounts:
            - name: data
              mountPath: /var/lib/cassandra
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 5Gi

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-cassandra
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-cassandra
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

- name: Wait for Cassandra server to start
  wait_for: 
    host: "{{ item }}"
    port: 9042
    state: started
    timeout: 300
  with_items: "{{ groups['cassandra'] }}"

- name: Start Cassandra node
  command: cassandra
  args:
    chdir: /path/to/cassandra
  when: wait_for.rc == 0

#!/bin/bash

# create PersistentVolume and PersistentVolumeClaim
kubectl apply -f pv_pvc_Cassandra.yaml

# check the status of PersistentVolumeClaim until it is bound
status="Pending"
while [ "$status" != "Bound" ]
do
  status=$(kubectl get pvc data -o jsonpath='{.status.phase}')
  echo "PersistentVolumeClaim status: $status"
  sleep 5
done

# deploy Cassandra cluster
kubectl apply -f Cassandra.yaml

随机文章