要在 Kubernetes 中使用 SMB 共享(例如使用 IP 地址 192.168.4.141),你需要创建一个 PersistentVolume (PV) 和一个 PersistentVolumeClaim (PVC),并在你的 Pod 中引用它们。下面是一个示例,包含所有必要的步骤。

1. 创建 Kubernetes Secret 来存储 SMB 凭据

首先,创建一个 Secret 来存储访问 SMB 共享所需的用户名和密码:

1
2
3
4
5
6
7
8
apiVersion: v1
kind: Secret
metadata:
name: smb-secret
type: Opaque
data:
username: c21iLXVzZXI= # base64 编码后的用户名,例如 "smb-user"
password: cGFzc3dvcmQ= # base64 编码后的密码,例如 "password"

你可以使用 echo -n 'your-username' | base64echo -n 'your-password' | base64 来获取 base64 编码的字符串。

2. 创建 PersistentVolume (PV)

接下来,创建一个 PV 来定义 SMB 共享:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: PersistentVolume
metadata:
name: smb-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
csi:
driver: smb.csi.k8s.io
volumeHandle: smb-pv-handle
volumeAttributes:
source: "//192.168.4.141/share" # SMB 共享路径
nodeStageSecretRef:
name: smb-secret
namespace: default

3. 创建 PersistentVolumeClaim (PVC)

然后,创建一个 PVC 来请求上述 PV:

1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: smb-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi

4. 在 Pod 中使用 SMB 共享

最后,在一个 Pod 中使用上述 PVC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
name: smb-client-pod
spec:
containers:
- name: smb-client-container
image: nginx
volumeMounts:
- name: smb-volume
mountPath: /usr/share/nginx/html
volumes:
- name: smb-volume
persistentVolumeClaim:
claimName: smb-pvc

安装和配置 CSI 驱动

为了使 Kubernetes 能够挂载 SMB 共享,你需要安装和配置 SMB CSI 驱动。你可以参考 SMB CSI 驱动的官方文档 进行安装和配置。

以下是安装 SMB CSI 驱动的基本步骤:

  1. 安装 Helm(如果你还没有安装 Helm):

    1
    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
  2. 添加 CSI 驱动的 Helm 仓库

    1
    helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts
  3. 安装 CSI 驱动

    1
    helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system

总结

通过以上步骤,你可以在 Kubernetes 中配置和使用 SMB 共享。请确保你已经安装和配置了适当的 CSI 驱动,并且你的 Kubernetes 集群能够访问 SMB 服务器。希望这些步骤能帮助你在 Kubernetes 中配置和使用 SMB 共享。