6.20. CIFS/SMB CSI Driver Operator
OpenShift Container Platform 能够置备持久性卷 (PV),它带有一个用于通用互联网文件系统(CIFS) dialect/Server Message Block (SMB)协议的 Container Storage Interface (CSI) 驱动程序。
在使用 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。
6.20.1. 关于 CSI 复制链接链接已复制到粘贴板!
在过去,存储厂商一般会把存储驱动作为 Kubernetes 的一个部分提供。随着容器存储接口 (CSI) 的实现,第三方供应商可以使用标准接口来提供存储插件,而无需更改核心 Kubernetes 代码。
CSI Operators 为 OpenShift Container Platform 用户提供了存储选项,如卷快照,它无法通过 in-tree 卷插件实现。
6.20.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 代理设置。
- CIFS/SMB CSI Driver Operator 不支持 Windows 分布式文件系统 (DFS)。
- 不支持 Kerberos 身份验证。
- SMB CSI 使用 Samba v4.21.2 和 Windows Server 2019 和 Windows Server 2022 测试。
6.20.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
6.20.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
-
6.20.5. 动态置备 复制链接链接已复制到粘贴板!
您可以创建一个存储类来动态置备通用互联网文件系统(CIFS)偏移/服务器消息块(SMB)协议卷。置备卷会在存储类中定义的 source 下创建具有持久性卷 (PV) 名称的子目录。
先决条件
- 已安装 CIFS/SMB CSI Driver Operator 和驱动程序。
- 已登陆到正在运行的 OpenShift Container Platform 集群。
已安装 SMB 服务器并了解有关服务器的以下信息:
- 主机名
- 共享名称
- 用户名和密码
流程
设置动态置备:
使用以下命令,使用以下示例 YAML 文件创建 Secret 以访问 Samba 服务器:
$ oc create -f <file_name>.yamlSecret YAML 文件示例
apiVersion: v1 kind: Secret metadata: name: smbcreds1 namespace: samba-server2 stringData: username: <username>3 password: <password>4 运行以下命令,使用以下示例 YAML 文件创建存储类:
$ oc create -f <sc_file_name>.yaml1 - 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: smbcreds3 csi.storage.k8s.io/provisioner-secret-namespace: samba-server4 csi.storage.k8s.io/node-stage-secret-name: smbcreds5 csi.storage.k8s.io/node-stage-secret-namespace: samba-server6 reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - dir_mode=0777 - file_mode=0777 - uid=1001 - gid=1001创建 PVC:
运行以下命令,使用以下示例 YAML 文件创建 PVC:
$ oc create -f <pv_file_name>.yaml1 - 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: Bound1 ...- 1
- PVC 处于 Bound 状态。
6.20.6. 静态置备 复制链接链接已复制到粘贴板!
您可以使用静态置备来创建持久性卷 (PV) 和持久性卷声明 (PVC) 来使用现有的服务器消息块协议 (SMB) 共享:
先决条件
- 访问 OpenShift Container Platform Web 控制台。
- 已安装 CIFS/SMB CSI Driver Operator 和驱动程序。
已安装 SMB 服务器并了解有关服务器的以下信息:
- 主机名
- 共享名称
- 用户名和密码
流程
设置静态置备:
使用以下命令,使用以下示例 YAML 文件创建 Secret 以访问 Samba 服务器:
$ oc create -f <file_name>.yamlSecret YAML 文件示例
apiVersion: v1 kind: Secret metadata: name: smbcreds1 namespace: samba-server2 stringData: username: <username>3 password: <password>4 运行以下命令,使用以下示例 YAML 文件创建 PV:
$ oc create -f <pv_file_name>.yaml1 - 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>.yaml1 - 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: Bound1 ...- 1
- PVC 处于 Bound 状态。
运行以下命令,使用以下示例 YAML 文件在 Linux 上创建部署:
注意以下部署不是使用在前面的步骤中创建的 PV 和 PVC 所必需的。以下是如何使用它们的示例。
$ oc create -f <deployment_file_name>.yaml1 - 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; done4 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 -h1 - 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) 文件系统。