跳转至

使用非高可用本地卷

使用 HwameiStor 能非常轻松的运行有状态的应用。本文使用一个 MySQL 应用作为例子。

前提条件

  • Hwameistor 已经安装成功

  • 已经完成存储池创建,如未创建请进行存储池 StorageClass 创建

    目前 HwameiStor 安装成功后,Helm chart 会默认安装一个名为 hwameistor-storage-lvm-hddStorageClass,可使用此存储池创建本地数据卷。

    1. 点击容器管理 -> 选择对应集群,进入集群详情,点击容器存储,选择存储池

      sc01

    2. 点击查看 YAML,查看详情。

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: hwameistor-storage-lvm-hdd
      parameters:
        convertible: "false"
        csi.storage.k8s.io/fstype: xfs
        poolClass: HDD
        poolType: REGULAR
        replicaNumber: "1"
        striped: "true"
        volumeKind: LVM
      provisioner: lvm.hwameistor.io
      reclaimPolicy: Delete
      volumeBindingMode: WaitForFirstConsumer
      allowVolumeExpansion: true
      

      如果这个 storageClass 在安装时创建失败,可以通过界面创建存储池 StorageClass 或 YAML 创建方式完成安装,YAML 方式如下:

      kubectl apply -f examples/sc-local.yaml
      

操作步骤

通过界面创建 StatefulSet

  1. 点击 容器管理 -> 选择对应集群,进入集群详情,点击容器存储选择工作负载下的有状态工作负载,点击镜像创建

    imagecreate

  2. 完成基本信息进入到下一步,点击创建数据卷声明模板输入如下参数信息:

    pvctmp

    • 存储池:已经创建的本地存储池。
    • 容量:本地数据卷容量大小。
    • 访问模式:Pod 读写模式,建议使用 ReadWriteOnce。
    • 容器路径:数据存储挂载到容器上的路径。
  3. 完成后点击确定,连续点击下一步完成创建。创建完成后点击数据卷列表查看对应的数据卷状态是否正常。

    pvctmp02

通过 YAML 创建 StatefulSet

Note

下面的 MySQL Yaml 文件来自 Kubernetes 的官方 Repo

在 HwameiStor 和 StorageClass 就绪后, 一条命令就能创建 MySQL 容器和它的数据卷:

kubectl apply -f sts-mysql_local.yaml

请注意 volumeClaimTemplates 使用 storageClassName: hwameistor-storage-lvm-hdd:

spec:
  volumeClaimTemplates:
  - metadata:
      name: data
      labels:
        app: sts-mysql-local
        app.kubernetes.io/name: sts-mysql-local
    spec:
      storageClassName: hwameistor-storage-lvm-hdd
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Gi

schedulerName: hwameistor-scheduler:

spec:
  template:
    spec:
      schedulerName: hwameistor-scheduler

查看 MySQL 容器和 PVC/PV

在这个例子里,MySQL 容器被调度到了节点 k8s-worker-3

$ kubectl get po -l  app=sts-mysql-local -o wide
NAME                READY   STATUS    RESTARTS   AGE     IP            NODE        
sts-mysql-local-0   2/2     Running   0          3m08s   10.1.15.154   k8s-worker-3

$ kubectl get pvc -l  app=sts-mysql-local
NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                 AGE   VOLUMEMODE
data-sts-mysql-local-0   Bound    pvc-accf1ddd-6f47-4275-b520-dc317c90f80b   1Gi        RWO            hwameistor-storage-lvm-hdd    3m   Filesystem

查看 LocalVolume 对象

通过查看和 PV 同名的 LocalVolume(LV), 可以看到本地卷创建在了节点 k8s-worker-3上:

$ kubectl get lv pvc-accf1ddd-6f47-4275-b520-dc317c90f80b

NAME                                       POOL                   REPLICAS   CAPACITY     ACCESSIBILITY   STATE   RESOURCE   PUBLISHED      AGE
pvc-accf1ddd-6f47-4275-b520-dc317c90f80b   LocalStorage_PoolHDD   1          1073741824                   Ready   -1         k8s-worker-3    3m

[可选] 扩展 MySQL 应用成一个三节点的集群

HwameiStor 支持 StatefulSet 的横向扩展. StatefulSet容器都会挂载一个独立的本地卷:

$ kubectl scale sts/sts-mysql-local --replicas=3

$ kubectl get po -l  app=sts-mysql-local -o wide
NAME                READY   STATUS     RESTARTS   AGE     IP            NODE        
sts-mysql-local-0   2/2     Running    0          4h38m   10.1.15.154   k8s-worker-3
sts-mysql-local-1   2/2     Running    0          19m     10.1.57.44    k8s-worker-2
sts-mysql-local-2   0/2     Init:0/2   0          14s     10.1.42.237   k8s-worker-1

$ kubectl get pvc -l  app=sts-mysql-local -o wide
NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                 AGE     VOLUMEMODE
data-sts-mysql-local-0   Bound    pvc-accf1ddd-6f47-4275-b520-dc317c90f80b   1Gi        RWO            hwameistor-storage-lvm-hdd   3m07s   Filesystem
data-sts-mysql-local-1   Bound    pvc-a4f8b067-9c1d-450f-aff4-5807d61f5d88   1Gi        RWO            hwameistor-storage-lvm-hdd   2m18s   Filesystem
data-sts-mysql-local-2   Bound    pvc-47ee308d-77da-40ec-b06e-4f51499520c1   1Gi        RWO            hwameistor-storage-lvm-hdd   2m18s   Filesystem

$ kubectl get lv
NAME                                       POOL                   REPLICAS   CAPACITY     ACCESSIBILITY   STATE   RESOURCE   PUBLISHED      AGE
pvc-47ee308d-77da-40ec-b06e-4f51499520c1   LocalStorage_PoolHDD   1          1073741824                   Ready   -1         k8s-worker-1   2m50s
pvc-a4f8b067-9c1d-450f-aff4-5807d61f5d88   LocalStorage_PoolHDD   1          1073741824                   Ready   -1         k8s-worker-2   2m50s
pvc-accf1ddd-6f47-4275-b520-dc317c90f80b   LocalStorage_PoolHDD   1          1073741824                   Ready   -1         k8s-worker-3   3m40s

评论