使用Ceph集群作为Kubernetes的动态分配持久化存储(转)

   使用Docker快速部署Ceph集群 , 然后使用这个Ceph集群作为Kubernetes的动态分配持久化存储。

    Kubernetes集群要使用Ceph集群需要在每个Kubernetes节点上安装ceph-common

    

    1. 为kubernetes创建一个存储池

     

1
2
# ceph osd pool create k8s 128
pool 'k8s' created

 

    2. 创建用户

1
# ceph auth add client.k8s mon 'allow rx' osd 'allow rwx pool=k8s'

    k8s用户只能对k8s这个存储池有读写权限,注意一定要有执行权限才能执行ceph命令

   

    通过ceph auth list 查看

1
2
3
4
client.k8s
    key: AQC3Hm5Zan9LDhAAXZHCdAF39bXcEwdpV6y/cA==
    caps: [mon] allow r
    caps: [osd] allow rw pool=k8s

     

     在存储池k8s下创建一个镜像测试下k8s这个用户是否可以操作

     

1
2
3
4
# rbd create k8s/foo --size 1G --id k8s
 
# rbd map k8s/foo --id k8s
/dev/rbd0

      k8s这个ceph用户可以对k8s这个存储池进行操作了

 

   3.为ceph添加一个kubernetes secret

    

    

1
2
# echo "$(ceph auth get-key client.k8s)"|base64
QVFDM0htNVphbjlMRGhBQVhaSENkQUYzOWJYY0V3ZHBWNnkvY0E9PQo=

    

  ceph-secret.yaml

  

1
2
3
4
5
6
7
8
apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
  namespace: kube-system
type: "kubernetes.io/rbd"
data:
  key: "QVFDM0htNVphbjlMRGhBQVhaSENkQUYzOWJYY0V3ZHBWNnkvY0E9PQo="

 

   type这一行一定要有

   

1
# kubectl create -f ceph-secret.yaml

 

1
2
# kubectl get secret -n=kube-system|grep ceph
ceph-secret                     kubernetes.io/rbd                     1         1m

 

   4.创建一个StorageClass

   ceph-rbd-storageclass.yaml

   

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
   name: fast
provisioner: kubernetes.io/rbd
parameters:
  monitors: 172.30.30.215:6789,172.30.30.217:6789,172.30.30.219:6789
  adminId: k8s
  adminSecretName: ceph-secret
  adminSecretNamespace: kube-system
  pool: k8s
  userId: k8s
  userSecretName: ceph-secret

 

   Kubernetes 1.6 以上使用 storage.k8s.io/v1

 

   

1
# kubectl create -f ceph-rbd-storageclass.yaml

 

1
2
3
# kubectl get storageclass
NAME      TYPE
fast      kubernetes.io/rbd

   

   5.测试

 

    ceph-pvc.json

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
  "kind": "PersistentVolumeClaim",
  "apiVersion": "v1",
  "metadata": {
    "name": "claim1",
    "annotations": {
        "volume.beta.kubernetes.io/storage-class": "fast"
    }
  },
  "spec": {
    "accessModes": [
      "ReadWriteOnce"
    ],
    "resources": {
      "requests": {
        "storage": "3Gi"
      }
    }
  }
}

   

   

1
2
3
4
5
6
# kubectl create -f ceph-pvc.json
 
 
# kubectl get pvc
NAME      STATUS    VOLUME                                     CAPACITY   ACCESSMODES   AGE
claim1    Bound     pvc-28b66dcb-6c82-11e7-94da-02672b869d7f   3Gi        RWO           11m

 

   现在就可以使用Ceph RBD作为Kubernetes的动态分配持久化存储了。

转自:https://www.itency.com/topic/show.do?id=479247

 

posted @   littlevigra  阅读(1455)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示