Kubernetes 中如何管理持久存储

在 Kubernetes 上部署应用程序时,需要考虑到数据的存储问题。一些应用程序需要持久的存储来保存状态和数据。这就需要使用 Kubernetes 中的持久存储卷来实现。

Kubernetes 中的持久存储卷

在 Kubernetes 中,持久存储卷允许容器访问磁盘存储资源。它们允许容器在节点之间迁移时保留数据,并且可以允许多个容器共享同一个存储卷。

有以下几种不同类型的存储卷可供选择:

  • Azure File
  • Azure Disk
  • AWS Elastic Block Store (EBS)
  • AWS Elastic File System (EFS)
  • NFS
  • iSCSI
  • GCE Persistent Disk

Kubernetes 如何管理持久存储

Kubernetes 中使用 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 两个 API 资源对象来管理持久存储。

PersistentVolume

PersistentVolume 是一个集群层次的资源,它表示存储系统中的一个单独的存储卷。它是集群中的一个独立资源对象,可以在整个集群中使用它。多个 Pod 可以访问相同的 PersistentVolume,就好像它是本地的存储资源一样。

PersistentVolume 可以动态或静态地分配给 Pod 使用。如果使用动态分配,当 Pod 提出请求时,Kubernetes 将自动分配电平卷。如果使用静态分配,则需要提前手动创建一个 PersistentVolume,然后使用类似 PersistentVolumeClaim 的资源来声明使用。

下面是使用静态分配创建 PersistentVolume 的示例:

----------- --
----- ----------------
---------
  ----- -------
-----
  ---------
    -------- ---
  ------------
  - -------------
  ----
    ----- ---------
    ------- -----------

PersistentVolumeClaim

PersistentVolumeClaim 是一个声明,它请求 Kubernetes 动态地分配 PersistentVolume,其声明绑定没有指定节点的 PersistentVolume。Pod 中容器使用 PersistentVolumeClaim 来声明需要的存储资源。

PersistentVolumeClaim 可以指定需要的存储量,访问模式和存储类等属性。PersistentVolumeClaim 将被绑定到符合这些属性要求的 PersistentVolume 上。

下面是使用 PersistentVolumeClaim 的示例:

----------- --
----- ---------------------
---------
  ----- --------
-----
  ------------
  - -------------
  ----------
    ---------
      -------- -----
  ---------
    ------------
      ----- ---

示例代码

下面是使用动态分配 PersistentVolume 用于应用程序存储的示例代码:

----------- -------
----- ----------
---------
  ----- --------
  -------
    ---- --------
-----
  --------- -
  ---------
    ------------
      ---- --------
  ---------
    ---------
      -------
        ---- --------
    -----
      -----------
      - ----- --------
        ------ ----------
        ------
        - -------------- --
        -------------
        - ---------- -----
          ----- -------------
      --------
      - ----- -------------
        ----------------------
          ---------- -----------
---
----------- --
----- ---------------------
---------
  ----- -----------
  -------
    ---- --------
-----
  ------------
    - -------------
  ----------
    ---------
      -------- ----
  ----------------- --------

使用上述代码,首先会创建一个 PersistentVolumeClaim,它需要 10Gi 存储空间。随后,使用 Deployment 创建一个 Pod,它将使用上述的 PersistentVolumeClaim,并将存储挂载到容器中的 /data 目录。

下面是使用静态分配 PersistentVolume 用于应用程序存储的示例代码:

----------- -------
----- ----------
---------
  ----- --------
  -------
    ---- --------
-----
  --------- -
  ---------
    ------------
      ---- --------
  ---------
    ---------
      -------
        ---- --------
    -----
      -----------
      - ----- --------
        ------ ----------
        ------
        - -------------- --
        -------------
        - ----- -------------
          ---------- -----
      --------
      - ----- -------------
        ----------------------
          ---------- -----------
---
----------- --
----- ----------------
---------
  ----- ------------
  -------
    ----- ---
-----
  ---------
    -------- ----
  ------------
    - -------------
  ----
    ----- ---------
    ------- -----------
---
----------- --
----- ---------------------
---------
  ----- -----------
  -------
    ---- --------
-----
  ------------
    - -------------
  ----------
    ---------
      -------- ----
  ----------- ------------

使用上述代码,首先会创建一个 PersistentVolume,并在上面设置了 NFS 配置。然后使用 PersistentVolumeClaim 将其绑定到 PersistentVolume 上,最后使用 Deployment 创建 Pod,并将存储挂载到容器中的 /data 目录。

结论

在 Kubernetes 中使用持久存储卷来管理应用程序数据是非常重要的。Kubernetes 提供了 PersistentVolume 和 PersistentVolumeClaim 等 API 资源对象来管理持久存储,并且提供了多种类型的存储卷。使用此功能,您可以轻松地将数据存储到 Kubernetes 集群中,以实现更坚固和可靠的环境。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672897272e7021665e20ccea