在 Kubernetes 上部署 etcd 集群可以使用 PV(Persistent Volume)和 PVC(Persistent Volume Claim)来持久化数据。在创建 etcd Pod 时,通过 PVC 来申请对应的 PV,该 PV 可以是 NFS、iSCSI 等存储卷,用于存储 etcd 数据。
以下是一个示例 YAML 文件:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: etcd-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: etcd-cluster
spec:
replicas: 3
serviceName: "etcd-headless"
selector:
matchLabels:
app: etcd
template:
metadata:
labels:
app: etcd
spec:
containers:
- name: etcd
image: quay.io/coreos/etcd:v3.4.0
command: ["/usr/local/bin/etcd"]
args: ["--name=$(HOSTNAME)", "--data-dir=/var/lib/etcd", "--listen-client-urls=http://0.0.0.0:2379", "--advertise-client-urls=http://$(HOSTNAME):2379"]
volumeMounts:
- name: etcd-data
mountPath: /var/lib/etcd
volumes:
- name: etcd-data
persistentVolumeClaim:
claimName: etcd-data
其中,PersistentVolumeClaim
定义了 etcd 数据的存储方式,StatefulSet
定义了 etcd Pod 的副本数量和模板,通过 volumes
和 volumeMounts
将 PVC 挂载到 Pod 中。这样,在 etcd Pod 重启或迁移时,数据可以持久化存储在 PV 中。