使用高可用卷¶
HwameiStor 使用开源的 DRBD 数据同步技术创建**高可用卷**,本章节展示 高可用卷的使用这里我们使用一个 MySQL 应用作为例子。
Note
下面的 MySQL Yaml 文件来自 Kubernetes 的官方 Repo
前提条件¶
-
HwameiStor 已经安装成功
-
已经完成高可用存储池创建,如未创建请进行存储池 StorageClass 创建。
-
已经部署 DRBD 内核组件
目前 HwameiStor 安装成功后,Helm chart 会默认安装一个名为 hwameistor-storage-lvm-hdd
的 StorageClass
,可使用此存储池创建本地数据卷。
1. 点击`容器管理` -> 选择对应集群,进入集群详情,点击`容器存储`,确认是否已创建`高可用存储池`
![sc01](https://docs.daocloud.io/daocloud-docs-images/docs/storage/images/ha-sc01.jpg)
2. 点击`查看 YAML`,查看详情。`StorageClass` "hwameistor-storage-lvm-hdd-ha" 使用参数 `replicaNumber: "2"` 开启高可用功能:
![sc-yaml](https://docs.daocloud.io/daocloud-docs-images/docs/storage/images/ha-sc02.jpg)
```
$ kubectl apply -f examples/sc_ha.yaml
$ kubectl get sc hwameistor-storage-lvm-hdd-ha -o yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: hwameistor-storage-lvm-hdd-ha
parameters:
replicaNumber: "2"
convertible: "false"
csi.storage.k8s.io/fstype: xfs
poolClass: HDD
poolType: REGULAR
striped: "true"
volumeKind: LVM
provisioner: lvm.hwameistor.io
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
```
创建 StatefulSet
¶
在 HwameiStor 和 StorageClass
就绪后, 一条命令就能创建 MySQL 容器和它的数据卷:
请注意 volumeClaimTemplates
使用 storageClassName: hwameistor-storage-lvm-hdd-ha
:
spec:
volumeClaimTemplates:
- metadata:
name: data
labels:
app: sts-mysql-ha
app.kubernetes.io/name: sts-mysql-ha
spec:
storageClassName: hwameistor-storage-lvm-hdd-ha
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi
查看 MySQL Pod and PVC/PV
¶
在这个例子里,MySQL 容器被调度到了节点 k8s-worker-3
。
$ kubectl get po -l app=sts-mysql-ha -o wide
NAME READY STATUS RESTARTS AGE IP NODE
sts-mysql-ha-0 2/2 Running 0 3m08s 10.1.15.151 k8s-worker-1
$ kubectl get pvc -l app=sts-mysql-ha
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
data-sts-mysql-ha-0 Bound pvc-5236ee6f-8212-4628-9876-1b620a4c4c36 1Gi RWO hwameistor-storage-lvm-hdd 3m Filesystem
查看 LocalVolume
and LocalVolumeReplica
对象¶
通过查看和 PV
同名的 LocalVolume(LV)
, 可以看到本地卷创建在了节点 k8s-worker-1
和节点 k8s-worker-2
.
$ kubectl get lv pvc-5236ee6f-8212-4628-9876-1b620a4c4c36
NAME POOL REPLICAS CAPACITY ACCESSIBILITY STATE RESOURCE PUBLISHED AGE
pvc-5236ee6f-8212-4628-9876-1b620a4c4c36 LocalStorage_PoolHDD 1 1073741824 Ready -1 k8s-worker-1,k8s-worker-2 3m
LocalVolumeReplica (LVR)
进一步显示每个节点上的后端逻辑卷设备:
kubectl get lvr
NAME CAPACITY NODE STATE SYNCED DEVICE AGE
5236ee6f-8212-4628-9876-1b620a4c4c36-d2kn55 1073741824 k8s-worker-1 Ready true /dev/LocalStorage_PoolHDD-HA/5236ee6f-8212-4628-9876-1b620a4c4c36 4m
5236ee6f-8212-4628-9876-1b620a4c4c36-glm7rf 1073741824 k8s-worker-3 Ready true /dev/LocalStorage_PoolHDD-HA/5236ee6f-8212-4628-9876-1b620a4c4c36 4m