在 Kubernetes(K8S)中实现共享存储是非常重要的一项技能,它可以让不同的Pod之间共享文件或数据,提高了应用之间的协作和灵活性。本文将向你介绍在K8S中实现共享存储的全过程,并提供代码示例帮助你更好地理解。

整个过程大致可以分为以下几个步骤:创建存储类(StorageClass)、创建持久卷声明(PersistentVolumeClaim)、创建Pod并挂载共享存储。

接下来我们一步步来操作:

### 步骤一:创建存储类(StorageClass)

首先我们需要定义一个存储类,用于定义不同存储卷的类型(例如:本地存储、云存储等)。我们可以通过以下YAML文件创建一个名为`shared-storage-class.yaml`的存储类:

```yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: shared-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
```

在这个文件中,我们定义了一个名为`shared-storage`的存储类,它的`volumeBindingMode`为`WaitForFirstConsumer`,表示只有当有Pod请求时才会绑定持久卷。

然后我们可以使用以下命令来创建这个存储类:

```bash
kubectl apply -f shared-storage-class.yaml
```

### 步骤二:创建持久卷声明(PersistentVolumeClaim)

接下来我们需要创建一个持久卷声明,用于请求一个持久卷实例。我们可以通过以下YAML文件创建一个名为`shared-pvc.yaml`的持久卷声明:

```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: shared-storage
resources:
requests:
storage: 1Gi
```

在这个文件中,我们定义了一个名为`shared-pvc`的持久卷声明,它要求一个容量为1Gi的存储卷,并指定了`storageClassName`为我们之前创建的`shared-storage`存储类。

然后我们可以使用以下命令来创建这个持久卷声明:

```bash
kubectl apply -f shared-pvc.yaml
```

### 步骤三:创建Pod并挂载共享存储

最后,我们可以创建一个Pod,并在Pod的容器中挂载我们之前创建的持久卷声明。以下是一个示例Pod的定义,你可以将以下内容保存在一个名为`shared-pod.yaml`的YAML文件中:

```yaml
apiVersion: v1
kind: Pod
metadata:
name: shared-pod
spec:
containers:
- name: shared-container
image: nginx
volumeMounts:
- name: shared-volume
mountPath: /usr/share/nginx/html
volumes:
- name: shared-volume
persistentVolumeClaim:
claimName: shared-pvc
```

在这个文件中,我们定义了一个名为`shared-pod`的Pod,它使用了一个Nginx镜像,并且在容器的`/usr/share/nginx/html`路径下挂载了我们之前创建的`shared-pvc`持久卷声明。

最后,我们可以使用以下命令来创建这个Pod:

```bash
kubectl apply -f shared-pod.yaml
```

通过上述步骤,我们成功地实现了在K8S中的共享存储功能。现在这位刚入行的小白应该也能够掌握这个技能了。希望这篇文章对你有所帮助!