微服务架构师封神之路07-在 minikube 上部署 cassandra
需求
想在在 minikube 上部署一个 cassandra 数据库,提供给日常开发使用。所以要求没那么高,单节点 cassandra 就可以。
和其它微服务应用不同的是需要持久化存储的数据,这样就需要Persistent Volume Claims。那么 cassandra 就不是一个 Deployment,而是Stateful Sets。
基本步骤:
- 创建PersistentVolumeClaim
- 创建StatefulSet
- 创建Service
创建PersistentVolumeClaim
创建文件 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
创建文件 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
创建文件 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