5.21. CIFS/SMB CSI Driver Operator
OpenShift Container Platform 能够置备持久性卷 (PV),它带有一个用于通用互联网文件系统(CIFS) dialect/Server Message Block (SMB)协议的 Container Storage Interface (CSI) 驱动程序。
CIFS/SMB CSI Driver Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
在使用 CSI Operator 和驱动程序时,建议先熟悉 持久性存储和配置 CSI 卷。
安装 CIFS/SMB CSI Driver Operator 后,OpenShift Container Platform 默认会在 openshift-cluster-csi-drivers
命名空间中为 Operator 和驱动程序安装对应的 pod。这允许 CIFS/SMB CSI 驱动程序创建挂载到 CIFS/SMB 共享的 CSI 置备的持久性卷 (PV)。
-
安装之后,CIFS/SMB CSI Driver Operator 不会默认创建存储类来创建持久性卷声明 (PVC)。但是,您可以手动为动态置备创建 CIFS/SMB
StorageClass
。CIFS/SMB CSI Driver Operator 支持动态卷置备,方法是允许按需创建存储卷。这消除了集群管理员预置备存储的需求。 - CIFS/SMB CSI 驱动程序 允许您创建并挂载 CIFS/SMB PV。
5.21.1. 关于 CSI
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
5.21.2. 限制:
以下限制适用于通用互联网文件系统(CIFS)/服务器消息块(SMB) Container Storage Interface (CSI) Driver Operator:
不支持 FIPS 模式:
启用联邦信息处理标准(FIPS)模式时,禁用 md4 和 md5 的使用,这会阻止用户使用 ntlm、ntlmv2 或 ntlmssp 身份验证。另外,无法使用签名,因为它使用了 md5。在启用了 FIPS 模式时,使用这些方法的 CIFS 挂载都会失败。
CSI 驱动程序不支持使用 HTTP 代理配置连接到集群 SMB 服务器外。
由于 CIFS/SMB 是 LAN 协议,但可以路由到子网,它不设计为通过 WAN 扩展,且不支持 HTTP 代理设置。
5.21.3. 安装 CIFS/SMB CSI Driver Operator
默认情况下,在 OpenShift Container Platform 中不会安装 CIFS/SMB CSI Driver Operator (Red Hat Operator)。使用以下步骤在集群中安装和配置 CIFS/SMB CSI Driver Operator。
先决条件
- 访问 OpenShift Container Platform Web 控制台。
流程
从 web 控制台安装 CIFS/SMB CSI Driver Operator:
- 登录到 web 控制台。
安装 CIFS/SMB CSI Operator:
-
点 Operators
OperatorHub。 - 通过在过滤器框中输入 CIFS/SMB CSI 来找到 CIFS/SMB CSI。
- 点 CIFS/SMB CSI Driver Operator 按钮。
- 在 CIFS/SMB CSI Driver Operator 页中,点 Install。
在 Install Operator 页面中,确保:
- 选择 All namespaces on the cluster (default)。
- 安装的命名空间 被设置为 openshift-cluster-csi-drivers。
点 Install。
安装完成后,Web 控制台的 Installed Operators 部分列出了 CIFS/SMB CSI Operator。
-
点 Operators
5.21.4. 安装 CIFS/SMB CSI 驱动程序
安装 CIFS/SMB Container Storage Interface (CSI) Driver Operator 后,安装 CIFS/SMB CSI 驱动程序。
先决条件
- 访问 OpenShift Container Platform Web 控制台。
- 已安装 CIFS/SMB CSI Driver Operator。
流程
-
点 Administration
CustomResourceDefinitions ClusterCSIDriver。 - 在 Instances 选项卡上,单击 Create ClusterCSIDriver。
使用以下 YAML 文件:
apiVersion: operator.openshift.io/v1 kind: ClusterCSIDriver metadata: name: smb.csi.k8s.io spec: managementState: Managed
- 点 Create。
等待以下 Conditions 更改为 "True" 状态:
-
SambaDriverControllerServiceControllerAvailable
-
SambaDriverNodeServiceControllerAvailable
-
5.21.5. 动态置备
您可以创建一个存储类来动态置备通用互联网文件系统(CIFS)偏移/服务器消息块(SMB)协议卷。置备卷会在存储类中定义的 source
下创建具有持久性卷 (PV) 名称的子目录。
先决条件
- 已安装 CIFS/SMB CSI Driver Operator 和驱动程序。
- 已登陆到正在运行的 OpenShift Container Platform 集群。
已安装 SMB 服务器并了解有关服务器的以下信息:
- 主机名
- 共享名称
- 用户名和密码
流程
设置动态置备:
使用以下命令,使用以下示例 YAML 文件创建 Secret 以访问 Samba 服务器:
$ oc create -f <file_name>.yaml
Secret YAML 文件示例
apiVersion: v1 kind: Secret metadata: name: smbcreds 1 namespace: samba-server 2 stringData: username: <username> 3 password: <password> 4
运行以下命令,使用以下示例 YAML 文件创建存储类:
$ oc create -f <sc_file_name>.yaml 1
- 1
- 存储类 YAML 文件的名称。
存储类示例 YAML 文件
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <sc_name> 1 provisioner: smb.csi.k8s.io parameters: source: //<hostname>/<shares> 2 csi.storage.k8s.io/provisioner-secret-name: smbcreds 3 csi.storage.k8s.io/provisioner-secret-namespace: samba-server 4 csi.storage.k8s.io/node-stage-secret-name: smbcreds 5 csi.storage.k8s.io/node-stage-secret-namespace: samba-server 6 reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - dir_mode=0777 - file_mode=0777 - uid=1001 - gid=1001
创建 PVC:
运行以下命令,使用以下示例 YAML 文件创建 PVC:
$ oc create -f <pv_file_name>.yaml 1
- 1
- PVC YAML 文件的名称。
PVC YAML 文件示例
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> 1 spec: accessModes: - ReadWriteMany resources: requests: storage: <storage_amount> 2 storageClassName: <sc_name> 3
运行以下命令,确保 PVC 已创建并处于 "Bound" 状态:
$ oc describe pvc <pvc_name> 1
- 1
- 上一步中创建的 PVC 名称。
输出示例
Name: pvc-test Namespace: default StorageClass: samba Status: Bound 1 ...
- 1
- PVC 处于 Bound 状态。
5.21.6. 静态置备
您可以使用静态置备来创建持久性卷 (PV) 和持久性卷声明 (PVC) 来使用现有的服务器消息块协议 (SMB) 共享:
先决条件
- 访问 OpenShift Container Platform Web 控制台。
- 已安装 CIFS/SMB CSI Driver Operator 和驱动程序。
已安装 SMB 服务器并了解有关服务器的以下信息:
- 主机名
- 共享名称
- 用户名和密码
流程
设置静态置备:
使用以下命令,使用以下示例 YAML 文件创建 Secret 以访问 Samba 服务器:
$ oc create -f <file_name>.yaml
Secret YAML 文件示例
apiVersion: v1 kind: Secret metadata: name: smbcreds 1 namespace: samba-server 2 stringData: username: <username> 3 password: <password> 4
运行以下命令,使用以下示例 YAML 文件创建 PV:
$ oc create -f <pv_file_name>.yaml 1
- 1
- PV YAML 文件的名称。
PV YAML 文件示例
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: smb.csi.k8s.io name: <pv_name> 1 spec: capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" mountOptions: - dir_mode=0777 - file_mode=0777 csi: driver: smb.csi.k8s.io volumeHandle: smb-server.default.svc.cluster.local/share/ 2 volumeAttributes: source: //<hostname>/<shares> 3 nodeStageSecretRef: name: <secret_name_shares> 4 namespace: <namespace> 5
创建 PVC:
运行以下命令,使用以下示例 YAML 文件创建 PVC:
$ oc create -f <pv_file_name>.yaml 1
- 1
- PVC YAML 文件的名称。
PVC YAML 文件示例
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> 1 spec: accessModes: - ReadWriteMany resources: requests: storage: <storage_amount> 2 storageClassName: "" volumeName: <pv_name> 3
运行以下命令,确保 PVC 已创建并处于 "Bound" 状态:
$ oc describe pvc <pvc_name> 1
- 1
- 上一步中创建的 PVC 名称。
输出示例
Name: pvc-test Namespace: default StorageClass: Status: Bound 1 ...
- 1
- PVC 处于 Bound 状态。
运行以下命令,使用以下示例 YAML 文件在 Linux 上创建部署:
注意以下部署不是使用在前面的步骤中创建的 PV 和 PVC 所必需的。以下是如何使用它们的示例。
$ oc create -f <deployment_file_name>.yaml 1
- 1
- 部署 YAML 文件的名称。
部署 YAML 文件示例
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: <deployment_name> 1 spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx name: <deployment_name> 2 spec: nodeSelector: "kubernetes.io/os": linux containers: - name: <deployment_name> 3 image: quay.io/centos/centos:stream8 command: - "/bin/bash" - "-c" - set -euo pipefail; while true; do echo $(date) >> <mount_path>/outfile; sleep 1; done 4 volumeMounts: - name: <vol_mount_name> 5 mountPath: <mount_path> 6 readOnly: false volumes: - name: <vol_mount_name> 7 persistentVolumeClaim: claimName: <pvc_name> 8 strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 type: RollingUpdate
在容器中运行
df -h
命令检查设置:$ oc exec -it <pod_name> -- df -h 1
- 1
- pod 的名称。
输出示例
Filesystem Size Used Avail Use% Mounted on ... /dev/sda1 97G 21G 77G 22% /etc/hosts //20.43.191.64/share 97G 21G 77G 22% /mnt/smb ...
在本例中,有
/mnt/smb
目录被挂载为通用 Internet 文件系统 (CIFS) 文件系统。