如何使用 Kubernetes 部署持久性存储

介绍

随着云原生趋势的发展, Kubernetes 成为了一种主流的容器编排平台。Kubernetes 不仅能够简化容器化部署、扩展、管理等环节,还有许多高级特性,如持久化存储、服务发现、自动伸缩等。本文将重点介绍如何使用 Kubernetes 部署持久性存储。

前置知识

在阅读本文之前,您需要掌握以下知识:

  • Kubernetes 的基本概念和组件
  • 存储卷和持久化存储
  • Kubernetes 的 StorageClass 和 PersistentVolumeClaim

持久性存储的意义

容器是短暂的,它们可以随时启动和结束。如果您不希望每次启动容器时都重新生成数据,就需要让容器使用持久性存储。持久性存储可以将数据独立于容器之外保存,即使容器结束,数据仍然可以存储在持久性存储中,这是容器的一个关键特性。

Kubernetes 中的持久性存储模型有三个组成部分:StorageClass、PersistentVolumeClaim 和 PersistentVolume,我们将在下面的章节中介绍每个部分。

StorageClass

StorageClass 是 Kubernetes 中定义存储后端的资源。StorageClass 告诉 Kubernetes 集群如何定义一个存储类别(如 NFS、iSCSI、AWS EBS 等)。在 StorageClass 中,您应该指定底层存储提供商的信息,并从中为存储分配一个名字。

下面是一个 Kubernetes YAML 文件的例子,用于定义一个名为“nfs”类型的 StorageClass:

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

在 YAML 文件中,provisioner 属性用于指定底层存储提供程序的名称,parameters 属性用于传递存储提供程序的参数,如 nfsServer 和 nfsPath。

为了在 Kubernetes 集群上部署存储提供程序,您应该在 Kubernetes 中部署一个 Provisioner,以便 Kubernetes 可以自动创建 PersistentVolume。

PersistentVolumeClaim

PersistentVolumeClaim(PVC)是 Kubernetes 中的一个新概念,它与 StorageClass 配合使用,用于请求持久性存储资源(PersistentVolume)。PVC 可以看作是要求会给自己分配一个 PersistentVolume 的声明,PersistentVolume 包含了存储的详细信息。

下面是一个 Kubernetes YAML 文件的例子,用于请求一个名为“nfs”类型的 PersistentVolume:

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

在 YAML 文件中,storageClassName 属性指定了 PersistentVolume 所属的 StorageClass 名称,accessModes 属性指定了用户可以访问 PersistentVolume 的方式(读写、只读、只写等),resources 属性指定了 PersistentVolume 所占用的存储空间。

PersistentVolume

PersistentVolume(PV)是 Kubernetes 中的一个持久性存储资源,它代表了一个实际的物理存储设备(如 NFS、iSCSI、AWS EBS 等)。

下面是一个 Kubernetes YAML 文件的例子,用于创建名为“my-pv”的 PersistentVolume:

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

在 YAML 文件中,capacity 属性指定了 PersistentVolume 所占用的存储空间,accessModes 属性指定了用户可以访问 PersistentVolume 的方式,persistentVolumeReclaimPolicy 属性指定了当 PersistentVolume 中的数据被删除时的行为,nfs 属性指定了 NFS 服务器和路径。

一个完整的 Kubernetes 部署持久性存储示例

在此章节中,我们将演示在 Kubernetes 中如何部署一个简单的 MySQL 容器,并使用 NFS 端口来保存 MySQL 数据库的数据。

步骤 1:创建 NFS 服务器

为了存储 MySQL 数据库的数据,我们需要创建一个 NFS 服务器并将其与 Kubernetes 集群关联。在本示例中,我们将 NFS 服务器的 IP 地址设置为 192.168.0.100,并将共享文件夹路径设置为 /home/nfs。

步骤 2:创建 StorageClass

创建一个名为 “nfs” 的 StorageClass,告诉 Kubernetes 如何连接到 NFS 服务器:

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

步骤 3:创建 PersistentVolumeClaim

创建一个 PVC,该 PVC 请求一个名为“nfs”的 PersistentVolume:

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

步骤 4:创建 MySQL 容器

创建一个 YAML 文件,用于启动 MySQL Pod 和关联的 VPC:

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

在本示例中,我们启动了一个 MySQL 容器,该容器作为 Pod 的一个容器运行,并使用一个名为“mysql-pvc”的 PVC 存储 MySQL 数据库的数据。

结论

本文介绍了如何使用 Kubernetes 部署持久性存储,并提供了一个 MySQL 容器的示例。通过学习本文,您应该对 Kubernetes 持久性存储的基本概念、组件和实现有一个更深入的了解,可以在实践中更加熟练和自信。

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