静态存储和动态存储是 Kubernetes(K8S)中常用的两种存储方式。静态存储是提前创建并手动分配给 Pod 的持久卷,而动态存储是在 Pod 运行时根据需求动态创建和挂载的持久卷。下面将详细介绍静态存储和动态存储的区别,并给出相应的代码示例。

### 静态存储 vs 动态存储

| 步骤 | 静态存储 | 动态存储 |
| ------ | ----------- | ----------- |
| 1 | 创建持久卷 | 创建 StorageClass |
| 2 | 创建持久卷声明 | 创建持久卷声明 |
| 3 | 创建 Pod | 创建 Pod |

### 操作步骤

#### 1. 创建持久卷

静态存储中,需要提前手动创建持久卷并将其分配给 Pod 使用。下面是创建持久卷的示例代码:

```yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data
```

这段代码创建了一个名为 my-pv 的持久卷,存储容量为 1Gi,访问模式为 ReadWriteOnce,路径为 /data。

#### 2. 创建持久卷声明

动态存储中,首先需要创建 StorageClass,然后创建持久卷声明来动态请求持久卷。以下是创建持久卷声明的示例代码:

```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
```

这段代码创建了一个名为 my-pvc 的持久卷声明,请求容量为 1Gi,访问模式为 ReadWriteOnce。

#### 3. 创建 Pod

最后,根据需求创建 Pod,并将上述步骤创建的持久卷或持久卷声明挂载到 Pod 中。以下是创建 Pod 的示例代码:

```yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: "/data"
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc
```

这段代码创建了一个名为 my-pod 的 Pod,容器中挂载了名为 my-volume 的持久卷声明 my-pvc,挂载路径为 /data。

通过以上步骤可以看出,静态存储需要手动创建和分配持久卷,而动态存储可以根据需求动态创建和挂载持久卷,更加灵活和自动化。

希望通过本文的介绍,新手小白能够理解静态存储和动态存储的区别,并能够根据需要选择适合的存储方式在 Kubernetes 中进行应用开发。