安装 DirectPV

先决条件

名称 版本
Kubernetes v1.19+
kubectl v1.19+
krew v0.4.3+

生产就绪清单

在开始生产部署之前,请确保已完成以下步骤,如果适用

插件安装

在本地环境中安装 DirectPV 插件,以在 Kubernetes 集群中管理 DirectPV CSI 驱动程序。您可以使用 krew 或作为二进制文件进行安装。

使用 krew 安装 DirectPV 插件

最新的 DirectPV 插件在 Krew 存储库中可用。

  1. 更新 Krew 以下载最新版本的插件。

    kubectl krew update
    
  2. 将 DirectPV 安装到您的 krew 安装目录(默认:$HOME/.krew)。

    kubectl krew install directpv
    
  3. 运行 kubectl directpv --version 以验证 DirectPV 是否已正确安装。

    如果您收到错误 Error: unknown command "directpv" for "kubectl",您可能需要将 $HOME/.krew/bin 添加到您的 $PATH 中。

以二进制形式安装 DirectPV 插件

插件二进制文件名称以 kubectl-directpv 开头,可在 https://github.com/minio/directpv/releases/latest 获取。下载适用于您的操作系统和架构的二进制文件。您可能需要将该文件移至系统路径可访问的位置。

请参考您操作系统的文档,了解如何使二进制文件可执行以及如何运行该文件。本文档不提供所有可用操作系统的详细说明。

以下是以 amd64 架构上的 GNU/Linux 为例

# Download DirectPV plugin.
$ release=$(curl -sfL "https://api.github.com/repos/minio/directpv/releases/latest" | awk '/tag_name/ { print substr($2, 3, length($2)-4) }')
$ curl -fLo kubectl-directpv https://github.com/minio/directpv/releases/download/v${release}/kubectl-directpv_${release}_linux_amd64
# Make the binary executable.
$ chmod a+x kubectl-directpv
$ mv kubectl-directpv /usr/local/bin/kubectl-directpv
使用二进制文件时,请使用 kubectl-directpv 而不是 kubectl directpv 来调用命令。

驱动程序安装

将 DirectPV 驱动程序安装到您的 Kubernetes 部署中。

要在生产级环境中进行安装,请确保满足 生产就绪检查清单 中的所有条件。

标准安装

标准安装使用默认选项,并在所有节点上安装 DirectPV。

先决条件

  • Kubernetes >= v1.18 on GNU/Linux on amd64。

  • 如果您使用的是私有注册表,则必须将以下映像推送到您的注册表中。

    您可以使用 辅助脚本 来完成此操作。

    • quay.io/minio/csi-node-driver-registrar:v2.8.0
    • quay.io/minio/csi-provisioner:v3.5.0 (适用于 Kubernetes >= v1.20)
    • quay.io/minio/csi-provisioner:v2.2.0-go1.18 (适用于 kubernetes < v1.20)
    • quay.io/minio/livenessprobe:v2.10.0
    • quay.io/minio/csi-resizer:v1.8.0
    • quay.io/minio/directpv:latest
  • 如果启用了 seccomp,请在要安装 DirectPV 的节点上加载 DirectPV seccomp 配置文件,并将 --seccomp-profile 标志用于 kubectl directpv install 命令。

    有关更多信息,请参考 Kubernetes 关于 seccomp 的文档。

  • 如果启用了 apparmor,请在要安装 DirectPV 的节点上加载 DirectPV apparmor 配置文件,并将 --apparmor-profile 标志用于 kubectl directpv install 命令。

    有关更多信息,请参考 Kubernetes 关于 apparmor 的文档

  • 卷扩展 功能启用 ExpandCSIVolumes 功能开关

  • 查看 驱动程序规范文档

  • 对于 Red Hat OpenShift 用户,请参考 OpenShift 特定文档,了解在安装 DirectPV 之前进行的配置。

过程

安装过程会创建一个名为 directpv-min-io 的新存储类。您可以使用此存储类作为 PodSpec.VolumeClaimTemplates 中的 storageClassName 来配置 DirectPV 卷。

有关使用 directpv-min-io 的示例,请参阅 GitHub 上的 MinIO 示例

请参考 CLI 指南,了解有关以下命令的更多帮助程序。

安装驱动程序

在 Kubernetes 集群中的所有节点上安装 directpv-min-io CSI 驱动程序。

kubectl directpv install
  • DirectPV 组件安装在 directpv 命名空间中。
  • 使用 kubectl directpv --kubeconfig /path/to/kubeconfig 指定备用 kubeconfig。
  • DirectPV 驱动程序需要 规范文档 中列出的基于角色的访问控制 (RBAC)。
  • DirectPV 驱动程序在 privileged 模式下运行,需要挂载、卸载和格式化驱动器。
  • DirectPV 使用的守护进程集需要以下开放端口
    • 10443 用于指标
    • 端口 30443 用于就绪处理程序
要使用容差或非标准 kubelet 目录在选定节点上安装 DirectPV,请参阅下面的 自定义安装 部分。

列出发现的驱动器

列出 Kubernetes 集群中所有可用的驱动器。DirectPV 会生成一个 init 配置文件(默认:drives.yaml),您可以使用它来初始化这些驱动器。

kubectl directpv discover

根据需要修改该文件,以删除 DirectPV 不应控制的任何驱动器。

初始化驱动器

初始化 drives.yaml 中选择的驱动器

kubectl directpv init drives.yaml
潜在的数据丢失
初始化会擦除驱动器上所有现有的数据。请确保仅在传递给 init 命令的文件中指定了预期的驱动器。

验证安装

要验证安装,请使用以下命令来列出有关已格式化并添加到 DirectPV 的驱动器的信息。

kubectl directpv info

使用脚本安装

以下命令会下载并运行一个 install.sh 脚本文件,以在所有节点上执行 DirectPV 的标准安装。

curl -sfL https://github.com/minio/directpv/raw/master/docs/tools/install.sh | sh - apply

断开网络安装(私有注册表)

将以下映像推送到您的私有注册表

  • quay.io/minio/csi-node-driver-registrar:v2.6.3
  • quay.io/minio/csi-provisioner:v3.4.0
  • quay.io/minio/livenessprobe:v2.9.0
  • quay.io/minio/csi-resizer:v1.7.0
  • quay.io/minio/directpv:latest

说明

  • 如果您使用的 Kubernetes 版本早于 v1.20,则需要推送 quay.io/minio/csi-provisioner:v2.2.0-go1.18

以下 shell 脚本会执行上述步骤

/bin/bash -e

# set this to private registry URL (the URL should NOT include http or https)
if [ -z $PRIVATE_REGISTRY_URL ]; then "PRIVATE_REGISTRY_URL env var should be set"; fi

images[0]=quay.io/minio/csi-node-driver-registrar:v2.6.3
images[1]=quay.io/minio/csi-provisioner:v3.4.0
images[2]=quay.io/minio/livenessprobe:v2.9.0
images[3]=quay.io/minio/csi-resizer:v1.7.0
images[4]=quay.io/minio/directpv:$(curl -s "https://api.github.com/repos/minio/directpv/releases/latest" | grep tag_name | sed -E 's/.*"([^"]+)".*/\1/')

function privatize(){ echo $1 | sed "s#quay.io#${PRIVATE_REGISTRY_URL}#g"; }
function pull_tag_push(){ docker pull $1 &&  docker tag $1 $2 && docker push $2; }
for image in ${images[*]}; do pull_tag_push $image $(privatize $image); done

在 OpenShift 上安装

将 DirectPV 部署到 OpenShift 时,需要不同的配置选项。使用以下命令以适当的设置在 OpenShift 上安装 DirectPV

$ kubectl directpv install --openshift

自定义安装

在选定节点上安装

要仅在选定节点上安装 DirectPV,请使用 --node-selector 标志来指定所需的节点

kubectl directpv info
# Install DirectPV on nodes having label 'group-name' key and 'bigdata' value
$ kubectl directpv install --node-selector group-name=bigdata

在污染节点上安装

在污染节点 上安装 DirectPV,请使用 --toleration 标志。

以下示例通过容忍值为 ‘PVs’ 且具有 ‘NoSchedule’ 效应的 ‘key1’ 键,在污染节点上安装 DirectPV

kubectl directpv install --tolerations key1=PVs:NoSchedule

以下示例通过容忍值为 ‘NoExecute’ 效应的 ‘key2’ 键的存在(无论分配给该键的任何值),在污染节点上安装 DirectPV。

$ kubectl directpv install --tolerations key2:NoExecute

在非标准 kubelet 目录上安装

要在非标准 kubelet 目录上安装,请在开始安装之前设置 KUBELET_DIR_PATH 环境变量。

export KUBELET_DIR_PATH=/path/to/my/kubelet/dir
kubectl directpv install

通过生成 DirectPV 清单来安装

要使用生成的清单文件进行安装,请使用以下命令。

curl -sfL https://github.com/minio/directpv/raw/master/docs/tools/install.sh | sh -s - apply