本章节介绍如何安装华为CSI。
当前版本华为CSI添加了资源请求和限制,具体详情请参考华为CSI资源管理。
前提条件
- 已完成安装前准备。
- 集群的所有worker节点与待接入的存储设备的业务组网通信正常,iSCSI场景下允许使用ping命令进行连通性校验。
- 集群的所有worker节点已安装对应协议所需要的软件客户端,如iSCSI客户端、NFS客户端等。
本章节介绍如何使用Helm 3安装部署华为CSI。
- 华为CSI的安装支持root用户和非root用户。使用非root用户安装华为CSI时,需要保证当前用户能够访问Kubernetes集群的API Server,配置非root用户访问Kubernetes集群请参考配置非root用户访问Kubernetes集群。
- 华为CSI必须在root用户权限下运行。
Helm是Kubernetes生态系统中的一个软件包管理工具,类似Ubuntu的APT、CentOS的YUM、或Python的pip一样,专门负责管理Kubernetes的应用资源。
使用Helm可以对Kubernetes应用进行统一打包、分发、安装、升级以及回退等操作。
Helm在安装huawei-csi-controller时,将在指定命名空间的Deployment类型的工作负载中部署以下组件:
Helm在安装huawei-csi-node时,将在指定命名空间的DaemonSet类型的工作负载中部署以下组件:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录集群的任意master节点。
将Kubernetes CSI组件包中的"helm"目录拷贝到master节点的任意目录下。Helm工具路径请参见表 软件包组件描述。
进入到helm/esdk的工作目录下。
cd helm/esdk
准备values.yaml文件,华为CSI已经在软件包的helm/esdk目录下提供了values.yaml模板文件,您也可以根据Helm values.yaml参数说明修改参数对华为CSI进行定制。
安装前配置:
执行命令,更新存储后端CRD
kubectl apply -f ./crds/backend/
(可选) 请务必按照检查卷快照依赖组件章节检查快照依赖组件,确认无误后执行执行命令更新快照CRD,如果controller.snapshot.enabled参数设置为false或Kubernetes版本低于v1.17,可跳过本步骤,详情请参考表 controller配置项说明。
kubectl apply -f ./crds/snapshot-crds/ --validate=false
执行如下命令安装华为CSI。其中,helm-huawei-csi为自定义的Helm Chart名称,./表示使用当前目录下的Helm工程,huawei-csi为自定义的Helm Chart命名空间。
helm install helm-huawei-csi ./ -n huawei-csi --create-namespace
命令执行结果如下:
NAME: helm-huawei-csi
LAST DEPLOYED: Wed Jun 8 11:50:28 2022
NAMESPACE: huawei-csi
STATUS: deployed
REVISION: 1
TEST SUITE: None
完成huawei-csi服务部署后,可执行如下命令检查服务是否启动:
kubectl get pod -n huawei-csi
命令结果示例如下,Pod状态为“Running“则安装成功。
NAME READY STATUS RESTARTS AGE
huawei-csi-controller-6dfcc4b79f-9vjtq 9/9 Running 0 24m
huawei-csi-controller-6dfcc4b79f-csphc 9/9 Running 0 24m
huawei-csi-node-g6f4k 3/3 Running 0 20m
huawei-csi-node-tqs87 3/3 Running 0 20m
OpenShift平台请根据以下命令创建SecurityContextConstraints资源。
执行命令,编辑helm_scc.yaml文件。
vi helm_scc.yaml
修改helm_scc.yaml文件。其中,下列回显中huawei-csi是指创建的命名空间,请根据实际情况填写。
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
name: helm-scc
allowHostDirVolumePlugin: true
allowHostIPC: true
allowHostNetwork: true
allowHostPID: true
allowHostPorts: true
allowPrivilegeEscalation: true
allowPrivilegedContainer: true
defaultAddCapabilities:
- SYS_ADMIN
runAsUser:
type: RunAsAny
seLinuxContext:
type: RunAsAny
fsGroup:
type: RunAsAny
users:
- system:serviceaccount:huawei-csi:huawei-csi-controller
- system:serviceaccount:huawei-csi:huawei-csi-node
执行命令,创建SecurityContextConstraints。
oc create -f helm_scc.yaml
Tanzu平台请执行以下命令配置kubelet安装目录。
进入到安装包的helm/esdk目录下,执行命令打开配置文件,修改后保存。安装包目录请参见表 软件包组件描述。
vi values.yaml
修改kubeletConfigDir参数如下:
# Specify kubelet config dir path.
# kubernetes and openshift is usually /var/lib/kubelet
# Tanzu is usually /var/vcap/data/kubelet
# CCE is usually /mnt/paas/kubernetes/kubelet
kubeletConfigDir: /var/vcap/data/kubelet
Tanzu平台TKGI 1.16版本及以下请执行以下命令配置RBAC权限
执行命令, 创建rbac.yaml文件。
vi rbac.yaml
粘贴如下内容至rbac.yaml,保存并退出:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: huawei-csi-psp-role
rules:
- apiGroups: ['policy']
resources: ['podsecuritypolicies']
verbs: ['use']
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: huawei-csi-psp-role-cfg
roleRef:
kind: ClusterRole
name: huawei-csi-psp-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
apiGroup: rbac.authorization.k8s.io
name: system:serviceaccounts:huawei-csi
- kind: Group
apiGroup: rbac.authorization.k8s.io
name: system:serviceaccounts:default
执行命令,创建RBAC权限。
kubectl create -f rbac.yaml
本章节介绍如何在CCE / CCE Agile平台安装华为CSI。
CCE和CCE Agile平台无法直接通过Helm安装华为CSI,需要手动制作Helm安装包后上传至平台模板市场进行安装。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录已部署Helm的任意节点。
将华为CSI组件包中的"helm"目录拷贝到节点的任意目录下。Helm工具路径请参见表 软件包组件描述。
进入到helm的工作目录下。
cd helm/
修改helm/esdk/values.yaml文件中kubeletConfigDir和csiDriver.driverName参数。
vi ./esdk/values.yaml
修改如下参数:
# Specify kubelet config dir path.
# kubernetes and openshift is usually /var/lib/kubelet
# Tanzu is usually /var/vcap/data/kubelet
# CCE is usually /mnt/paas/kubernetes/kubelet
kubeletConfigDir: /mnt/paas/kubernetes/kubelet
# The CSI driver parameter configuration
csiDriver:
# Driver name, it is strongly recommended not to modify this parameter
# The CCE platform needs to modify this parameter, e.g. csi.oceanstor.com
driverName: csi.oceanstor.com
执行命令制作Helm安装包,该命令会将安装包生成到当前路径下。
helm package ./esdk/ -d ./
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录已部署CCE Agile平台master的任意节点。
执行命令创建部署华为CSI的命名空间,huawei-csi为自定义的命名空间。
kubectl create namespace huawei-csi
导出Helm安装包,具体请参考制作Helm安装包。
在主页单击“模板市场> 我的模板>上传模板”,进入上传模板对话框。将导出的Helm安装包导入CCE Agile平台。
安装包上传完毕,在主页单击“模板市场>我的模板”,进入我的模板页面,单击“安装>提交”。其中模板实例名称可自定义填写。
在主页单击“模板市场>模板实例”,选择安装时指定的项目(例如样例中的项目是“default”)。安装成功后执行状态将回显为“安装成功”。
在使用Helm安装CSI时,需要您根据部署时需要使用的特性准备Helm工程的values.yaml文件。华为CSI已经在软件包的helm/esdk目录下提供了values.yaml模板文件。
本章节将详细说明values.yaml中的配置项以及典型场景下的后端配置示例。
values.yaml中的images配置项主要配置华为CSI运行时依赖的组件镜像信息。需要配置的参数如下:
表 1 images配置项说明
livenessprobe sidecar镜像。 | |||
csi-provisioner sidecar镜像。 | |||
csi-attacher sidecar镜像。 | |||
csi-resizer sidecar镜像。 | |||
csi-snapshotter sidecar镜像。 | |||
snapshot-controller sidecar镜像。 | |||
csi-node-driver-registrar sidecar镜像。 |
- huaweiCSIService、storageBackendSidecar、storageBackendController、huaweiCSIExtender参数的值,请参考上传华为CSI镜像章节的说明,使用最终生成镜像的名称和版本。
- 其他sidecar镜像参数,请参考检查CSI依赖的镜像章节的说明,使用最终上传的镜像的名称和版本。
controller配置项用于配置huawei-csi-controller组件的相关配置。
表 2 controller配置项说明
PV名称的前缀,默认值为pvc,即创建的PV名称为:pvc-<uuid>。前缀必须满足DNS 子域名的命名规则,且PV名称总长度不得超过253个字符。 | 对应的provisioner参数名称为:--volume-name-prefix。 详细配置请参考配置PV名称前缀。
| |||
huawei-csi-controller的节点选择器。配置后huawei-csi-controller仅会调度到存在该标签的节点上。 | 节点选择器的详细说明请参考:将 Pod 分配给节点 | |||
huawei-csi-controller的污点容忍。配置后huawei-csi-controller能够容忍节点上存在该污点。 | 污点和容忍度的详细说明请参考:污点和容忍度 | |||
当controller.snapshot.enabled参数配置为true时,需要安装“helm/crd/snapshot-crds”目录下的卷快照CRD资源。
node配置项用于配置huawei-csi-node组件的相关配置。
表 3 node配置项说明
详细说明请参考:Volume Limits | ||||
节点选择器的详细说明请参考:将 Pod 分配给节点 | ||||
- key: "node.kubernetes.io/memory-pressure" operator: "Exists" effect: "NoExecute" - key: "node.kubernetes.io/disk-pressure" operator: "Exists" effect: "NoExecute" - key: "node.kubernetes.io/network-unavailable" operator: "Exists" effect: "NoExecute" | 污点和容忍度的详细说明请参考:污点和容忍度 | |||
当一个块设备被成功挂载之后,挂载路径的目录结构应该如下所示: /var/lib/kubelet/plugins/kubernetes.io/csi/{kubeletVolumeDevicesDirName}/publish/{specName}/{podUID} |
csiDriver配置项包括了华为CSI运行时的基本配置,如华为驱动名称、多路径类型等配置信息。
表 4 csiDriver配置项说明
如果您的容器环境已经部署了华为CSI,请确保csiDriver.driverName的设置和之前部署时的配置保持一致。否则会导致系统中已存在的有华为CSI发放的卷/快照无法被新部署的华为CSI管理。
其他配置项包括了CSI插件某些特性的开关或者镜像获取策略。
表 5 其他配置项说明
华为CSI运行时所在Kubernetes命名空间,支持用户自定义。名称必须由小写字母、数字和“-”组成,例如:my-name、123-abc。 | ||||
| ||||
CSIDriver特性在Kubernetes v1.18成为GA版本,因此要求Kubernetes版本高于v1.18,当Kubernetes版本低于 v1.18时,请设置该参数为false。 | ||||
| 参数attachRequired在Kubernetes v1.18支持配置。 如果CSIDriverObject.isCreate为true并且attachRequired参数设置为false时,huawei-csi插件将不会部署csi-attacher这个sidecar。
| |||
基础卷是否支持在装载之前更改卷的所有权和权限。支持配置如下参数:
| 参数fsGroupPolicy在Kubernetes v1.20支持配置,并且当CSIDriverObject.isCreate为true时该参数生效。 该特性在Kubernetes v1.20中为Beta版本,在Kubernetes v1.23成为GA版本,因此要求Kubernetes版本高于v1.20。 | |||
请确保此kubernetes.namespace填入的命名空间在Kubernetes上已经存在,如果不存在请使用如下命令创建对应的命名空间。本例中,华为CSI运行的命名空间为“huawei-csi”。kubectl create namespace huawei-csi
本章节介绍如何手动安装华为CSI。
手动安装华为CSI当前仅支持Kubernetes平台。
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录集群的任意master节点。
将Kubernetes CSI组件包中的"manual"目录拷贝到master节点的任意目录下。
执行命令创建一个命名空间。
kubectl create ns huawei-csi
进入到manual/esdk的工作目录下。具体路径请参见表 软件包组件描述。
cd manual/esdk
执行命令,更新存储后端CRD
kubectl apply -f ./crds/backend/
(可选) 请务必按照检查卷快照依赖组件章节检查快照依赖组件,确认无误后执行执行命令更新快照CRD,如果Kubernetes版本低于v1.17,跳过本步骤。
kubectl apply -f ./crds/snapshot-crds/ --validate=false
(可选) 执行命令安装CSIDriver。如果不使用CSIDriver特性,可跳过本步骤,详情请参考CSIDriver特性。
kubectl apply -f ./deploy/csidriver.yaml
执行命令安装huawei-csi-controller服务。如果Kubernetes版本低于v1.17,删除名称为csi-snapshotter和snapshot-controller的容器,并根据检查CSI依赖的镜像中的版本要求,修改其它容器镜像版本。
kubectl apply -f ./deploy/huawei-csi-controller.yaml
执行命令安装huawei-csi-node服务。
kubectl apply -f ./deploy/huawei-csi-node.yaml
执行命令检查服务是否启动。
kubectl get pod -n huawei-csi
回显示例如下,Pod状态为“Running“则安装成功。
NAME READY STATUS RESTARTS AGE
huawei-csi-controller-68745d489c-v5xkj 9/9 Running 0 13m
huawei-csi-node-4hbqp 3/3 Running 0 13m
huawei-csi-node-f7dkf 3/3 Running 0 13m
huawei-csi-node-xrntc 3/3 Running 0 13m
多副本controller部署场景下可以通过修改 ./deploy/huawei-csi-controller.yaml 文件中Deployment资源的spec.replica字段来指定副本个数,修改完成后,执行以下命令生效:
kubectl apply -f ./deploy/huawei-csi-controller.yaml