Kubernetes 默认 StorageClass — OpenEBS 安装
· 阅读需 2 分钟
K8s 集群起来后第一个要配的就是默认 StorageClass。没有它,PVC 不会自动绑定 PV,有状态应用(数据库、缓存、日志)都跑不起来。
这篇文章记录在 CentOS 7 + containerd 集群上安装 OpenEBS 作为默认存储后端的过程。
为什么 OpenEBS
OpenEBS 是一个 CNCF 沙箱项目,核心优势:
- 轻量:不需要外部存储阵列,直接用节点的本地磁盘
- CSI 驱动:原生支持
WaitForFirstConsumer延迟绑定 - 简单:一条 yaml 搞定,不依赖 Helm
安装
kubectl apply -f https://openebs.github.io/charts/openebs-operator.yaml
这个 yaml 会创建:
openebs-hostpath— 基于节点本地路径的存储类openebs-device— 基于块设备的存储类openebs-localpv-provisioner— CSI provisioneropenebs-ndm— 节点磁盘管理器
设为默认
K8s 集群可以有多个 StorageClass,但只有一个标记为默认:
kubectl patch storageclass openebs-hostpath \
-p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
验证:
kubectl get sc
# openebs-hostpath (default) openebs.io/local Delete WaitForFirstConsumer 13s
看到 (default) 标记就对了。
验证 PVC 自动绑定
cat <<'EOF' | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
EOF
kubectl get pvc
# test-pvc Bound pvc-xxxx 1Gi RWO openebs-hostpath
注意事项
- WaitForFirstConsumer:PV 延迟绑定到使用它的 Pod 所在节点,这是最优行为
- 回收策略:默认
Delete,PVC 删除后 PV 和本地数据也会被删除。如需保留数据,改Retain - 本地存储限制:节点宕机后 Pod 漂移,无法访问原节点的本地数据。生产建议配合分布式存储使用