# Ceph对接K8S 教程

## 1. 总体流程

在对接Ceph和K8S的过程中,需要完成以下步骤:

| 步骤 | 操作 |
|----|----|
| 1 | 创建Ceph集群 |
| 2 | 配置Ceph存储池 |
| 3 | 配置K8S使用Ceph存储 |
| 4 | 部署应用程序使用Ceph存储 |

## 2. 具体操作步骤

### 步骤1: 创建Ceph集群

1. 下载Ceph-deploy工具

```bash
sudo wget -q -O ceph-deploy https://git.io/ceph-deploy
```

2. 授权Ceph-deploy工具

```bash
sudo chmod +x ceph-deploy
```

3. 初始化Ceph集群

```bash
ceph-deploy new ceph-mon-node1 ceph-mon-node2 ceph-mon-node3
```

4. 安装Ceph

```bash
ceph-deploy install --repo-url https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/ ceph-mon-node1 ceph-mon-node2 ceph-mon-node3
```

5. 部署Ceph监控器

```bash
ceph-deploy mon create-initial
```

### 步骤2: 配置Ceph存储池

1. 创建存储池

```bash
ceph osd pool create
```
其中 `` 为存储池名称, `` 和 `` 为PG数量,可以根据实际情况设置。

2. 设置副本数

```bash
ceph osd pool set size
```
其中 `` 为副本数,一般设置为2或3。

### 步骤3: 配置K8S使用Ceph存储

1. 安装RBD插件

```bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.20/examples/k8s-storage/ceph/rbd/storageclass.yaml
```

2. 创建存储类

```bash
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-rbd
provisioner: kubernetes.io/rbd
parameters:
monitors: :6789,:6789,:6789
pool:
imageFormat: "2"
imageSize: "5G"
```
将 `, , ` 替换为Ceph监控器节点的IP地址, `` 替换为之前创建的存储池名称。

### 步骤4: 部署应用程序使用Ceph存储

1. 创建PersistentVolumeClaim

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

2. 创建Deployment使用Ceph存储

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: ceph-app
spec:
replicas: 1
selector:
matchLabels:
app: ceph-app
template:
metadata:
labels:
app: ceph-app
spec:
containers:
- name: ceph-container
image: nginx:latest
volumeMounts:
- mountPath: "/data"
name: ceph-volume
volumes:
- name: ceph-volume
persistentVolumeClaim:
claimName: ceph-claim
```

通过以上步骤,你就成功将Ceph和K8S进行了对接,应用程序可以使用Ceph存储进行数据存储了。

希望以上内容对你有所帮助,如有任何疑问,欢迎随时向我咨询。