## Ceph块存储与K8S集成

### 1. 整体流程

下表展示了整个Ceph块存储与K8S集成的流程:

| 步骤 | 内容 |
| --- | --- |
| 1 | 部署Ceph集群 |
| 2 | 创建Ceph块存储池 |
| 3 | 安装RBD插件到K8S集群 |
| 4 | 创建StorageClass和PersistentVolumeClaim |
| 5 | 创建Pod并挂载使用Ceph块存储 |

### 2. 步骤详解

#### 步骤1:部署Ceph集群

在Ceph集群中,我们需要确保已经部署了至少一台Ceph监控节点和一台Ceph OSD节点。具体的部署过程可以参考Ceph官方文档。

#### 步骤2:创建Ceph块存储池

在Ceph集群中创建一个用于存储块设备的池子,可以使用下面这段代码:

```bash
ceph osd pool create
```

这里需要设置好`pool_name`、`pg_num`和`pgp_num`参数。

#### 步骤3:安装RBD插件到K8S集群

在K8S集群中,我们需要安装RBD插件,该插件负责将Ceph块存储挂载到Pod中。可以使用Helm来快速安装RBD插件:

```bash
helm install --namespace kube-system --name rbd-ceph-provisioner stable/rook-ceph
```

#### 步骤4:创建StorageClass和PersistentVolumeClaim

创建一个StorageClass用于定义Ceph块存储的属性:

```yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-block
provisioner: ceph.com/rbd
parameters:
monitors:
pool:
adminId: admin
adminSecretName: ceph-secret
adminSecretNamespace: default
```

然后创建PersistentVolumeClaim来使用这个StorageClass:

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

#### 步骤5:创建Pod并挂载使用Ceph块存储

在创建Pod的时候,指定使用上面创建的PersistentVolumeClaim,并挂载到容器中:

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

### 结语

通过以上步骤,我们成功实现了Ceph块存储与K8S集成。希望这篇文章能够帮助你快速上手并使用这一技术。如果有任何问题,欢迎随时与我联系。祝你学习愉快!