想在在 minikube 上部署一个 cassandra 数据库,提供给日常开发使用。所以要求没那么高,单节点 cassandra 就可以。 和其它微服务应用不同的是需要持久化存储的数据,这样就需要Persistent Volume Claims。那么 cassandra 就不是一个 Deployment,而是Stateful Sets。 基本步骤:
创建PersistentVolumeClaim创建StatefulSet创建Service创建文件 persistentVolumeClaim.yaml
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cassandra-data spec: storageClassName: standard accessModes: - ReadWriteOnce resources: requests: storage: 1Gi执行
kubectl apply -f persistentVolumeClaim.yaml创建文件 statefulSet.yaml
kind: StatefulSet apiVersion: apps/v1 metadata: name: cassandra spec: serviceName: cassandra replicas: 1 selector: matchLabels: app: cassandra template: metadata: labels: app: cassandra spec: dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 affinity: nodeSelector: {} tolerations: [] containers: - name: cassandra imagePullPolicy: IfNotPresent image: "cassandra:3.11.8" env: - name: MAX_HEAP_SIZE value: 160M - name: HEAP_NEWSIZE value: 64M ports: - containerPort: 7000 name: intra-node protocol: TCP - containerPort: 7001 name: tls-intra-node protocol: TCP - containerPort: 7199 name: jmx protocol: TCP - containerPort: 9042 name: cql protocol: TCP volumeMounts: - name: data mountPath: /var/lib/cassandra terminationMessagePolicy: File volumes: - name: data persistentVolumeClaim: claimName: cassandra-data执行
kubectl apply -f statefulSet.yaml创建文件 service.yaml
apiVersion: v1 kind: Service metadata: name: cassandra labels: app: cassandra spec: selector: app: cassandra type: NodePort sessionAffinity: None ports: - name: cqlsh protocol: TCP port: 9042 targetPort: 9042 nodePort: 30042执行
kubectl apply -f service.yaml示例:使用 Stateful Sets 部署 Cassandra cassandra Docker Official Images kubernetes storage