Skip to main content

安装

安装前,请先确认:

  • Kubernetes 集群是 1.14 及以上版本
  • 集群能从外网拉取镜像,比如 Docker HubQuay,如果无法从这两个镜像仓库下载资源,考虑先「搬运镜像」

Helm

相比 kubectl,Helm 允许你将 CSI 驱动作为一个整体来管理,修改配置、启用高级特性,也只需要对 values.yaml 做少量编辑,无疑方便了许多,是我们更为推荐的安装方式。

安装需要 Helm 3.1.0 及以上版本,请参照 Helm 文档进行安装。

  1. 下载 JuiceFS CSI 驱动的 Helm chart

    helm repo add juicefs https://juicedata.github.io/charts/
    helm repo update
    helm fetch --untar juicefs/juicefs-csi-driver
    cd juicefs-csi-driver
    # values.yaml 中包含安装 CSI 驱动的所有配置,安装前可以进行梳理,并按需修改
    cat values.yaml
  2. 检查 kubelet 根目录

    执行以下命令

    ps -ef | grep kubelet | grep root-dir

    如果结果不为空或者 /var/lib/kubelet,则代表该集群的 kubelet 的根目录(--root-dir)做了定制,需要在 values.yaml 中将 kubeletDir 根据实际情况进行设置:

    values.yaml
    kubeletDir: <kubelet-dir>
  3. 安装 CSI 驱动:

    helm install juicefs-csi-driver juicefs/juicefs-csi-driver -n kube-system -f ./values.yaml

我们推荐将 CSI 驱动的 Helm chart 纳入版本控制系统管理。这样一来,就算 values.yaml 中的配置不断变化,也能对其进行追溯和回滚。

kubectl

kubectl 安装方式下,对 CSI 驱动的任何配置修改都需要手动操作,若不熟悉极容易出错。如果你希望开启某些 CSI 驱动的高级特性(例如「启用 pathPattern」),或者仅仅是想要更加体系化地管理资源,请优先选用 Helm 安装方式。

  1. 检查 kubelet 根目录

    在 Kubernetes 集群中任意一个非 Master 节点上执行以下命令:

    ps -ef | grep kubelet | grep root-dir
  2. 部署

    • 如果上一步检查命令返回的结果不为空或者 /var/lib/kubelet,则代表该集群 kubelet 定制了根目录(--root-dir),因此需要在 CSI 驱动的部署文件中更新 kubelet 根目录路径:

      # 请将下述命令中的 {{KUBELET_DIR}} 替换成 kubelet 当前的根目录路径

      # Kubernetes 版本 >= v1.18
      curl -sSL https://raw.githubusercontent.com/juicedata/juicefs-csi-driver/master/deploy/k8s.yaml | sed 's@/var/lib/kubelet@{{KUBELET_DIR}}@g' | kubectl apply -f -

      # Kubernetes 版本 < v1.18
      curl -sSL https://raw.githubusercontent.com/juicedata/juicefs-csi-driver/master/deploy/k8s_before_v1_18.yaml | sed 's@/var/lib/kubelet@{{KUBELET_DIR}}@g' | kubectl apply -f -
    • 如果上方检查命令返回的结果为空,则无需修改配置,直接部署:

      # Kubernetes 版本 >= v1.18
      kubectl apply -f https://raw.githubusercontent.com/juicedata/juicefs-csi-driver/master/deploy/k8s.yaml

      # Kubernetes 版本 < v1.18
      kubectl apply -f https://raw.githubusercontent.com/juicedata/juicefs-csi-driver/master/deploy/k8s_before_v1_18.yaml

检查部署状态

用下方命令确认 CSI 驱动组件正常运行:

$ kubectl -n kube-system get pods -l app.kubernetes.io/name=juicefs-csi-driver
NAME READY STATUS RESTARTS AGE
juicefs-csi-controller-0 3/3 Running 0 22m
juicefs-csi-node-v9tzb 3/3 Running 0 14m

CSI Node Service 是一个 DaemonSet,默认在所有节点部署,因此在上方命令的输出中,CSI Node pod 数量应该与 worker 节点数相同。如果你注意到数量不一致,请检查是否有节点被打上了污点。视情况删除污点,或给 CSI Node Service 打上对应的容忍,来修复此问题。如果你有需要,也可以仅在某些节点上运行 CSI Node Service

如果你对各组件功能仍有疑惑,请详读「架构」

ARM64 注意事项

CSI 驱动在 v0.11.1 及之后版本支持 ARM64 环境的容器镜像,如果你的集群是 ARM64 架构,需要在执行安装前,更换部分容器镜像,其他安装步骤都相同。

需要替换的镜像如下,请通过下方链接的网页,确定各镜像合适的版本(如果无法正常访问 k8s.gcr.io,请考虑先「搬运镜像」):

原镜像名称新镜像名称
quay.io/k8scsi/livenessprobek8s.gcr.io/sig-storage/livenessprobe
quay.io/k8scsi/csi-provisionerk8s.gcr.io/sig-storage/csi-provisioner
quay.io/k8scsi/csi-node-driver-registrark8s.gcr.io/sig-storage/csi-node-driver-registrar

Helm

values.yaml 中增加 sidecars 配置,用于覆盖容器镜像:

values.yaml
sidecars:
livenessProbeImage:
repository: k8s.gcr.io/sig-storage/livenessprobe
tag: "v2.6.0"
csiProvisionerImage:
repository: k8s.gcr.io/sig-storage/csi-provisioner
tag: "v2.2.2"
nodeDriverRegistrarImage:
repository: k8s.gcr.io/sig-storage/csi-node-driver-registrar
tag: "v2.5.0"

kubectl

k8s.yaml 中部分镜像进行替换(macOS 请换用 gnu-sed):

sed --in-place --expression='s@quay.io/k8scsi/livenessprobe:v1.1.0@k8s.gcr.io/sig-storage/livenessprobe:v2.6.0@' k8s.yaml
sed --in-place --expression='s@quay.io/k8scsi/csi-provisioner:v1.6.0@k8s.gcr.io/sig-storage/csi-provisioner:v2.2.2@' k8s.yaml
sed --in-place --expression='s@quay.io/k8scsi/csi-node-driver-registrar:v1.3.0@k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.5.0@' k8s.yaml