k8s使用pvc,pv,sc关联ceph集群

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。

一.使用pvc和pv关联ceph集群

1.ceph集群创建镜像设备

[root@ceph141 ~]# rbd create -s 2G yinzhengjie-k8s/rbd-pv01 --image-feature layering,exclusive-lock
[root@ceph141 ~]# 
[root@ceph141 ~]# rbd create -s 4G yinzhengjie-k8s/rbd-pv02 --image-feature layering,exclusive-lock
[root@ceph141 ~]# 
[root@ceph141 ~]# rbd ls -p yinzhengjie-k8s | grep rbd
rbd-pv01
rbd-pv02
[root@ceph141 ~]#

2.查看ceph集群的admin账号的对应的KEY并进行base64编码

[root@ceph141 ~]# grep key /etc/ceph/ceph.client.admin.keyring | awk '{printf "%s", $NF}' | base64 
QVFEakZycGx5dkZDRGhBQXBKZzExMVlNSUdRNi9GL3gvWStxcFE9PQ==
[root@ceph141 ~]#

3.删除默认的sc避免影响实验

[root@master231 pv-pvc]# kubectl get sc
NAME                         PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
yinzhengjie-nfs-sc (default)   yinzhengjie/linux   Delete          Immediate           false                  15d
[root@master231 pv-pvc]# 
[root@master231 pv-pvc]# kubectl delete sc --all
storageclass.storage.k8s.io "yinzhengjie-nfs-sc" deleted
[root@master231 pv-pvc]# 
[root@master231 pv-pvc]# kubectl get sc
No resources found
[root@master231 pv-pvc]#

4.编写资源清单

[root@master231 pv-pvc]# cat  01-pv-pvc-deploy-svc-ing-ceph.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: ceph-admin-secret
type: "kubernetes.io/rbd"
data:
  #  指定ceph的admin的KEY,将其进行base64编码,此处需要修改! 
  key: QVFEakZycGx5dkZDRGhBQXBKZzExMVlNSUdRNi9GL3gvWStxcFE9PQ==

---

apiVersion: v1
kind: PersistentVolume
metadata:
  name: yinzhengjie-ceph-01
  labels:
    school: yinzhengjie
spec:
   accessModes:
   - ReadWriteMany
   persistentVolumeReclaimPolicy: Retain
   rbd:
     image: rbd-pv01
     monitors:
     - 10.0.0.141:6789
     - 10.0.0.142:6789
     - 10.0.0.143:6789
     pool: yinzhengjie-k8s
     secretRef:
       name: ceph-admin-secret
     user: admin
   capacity:
     storage: 2Gi

---

apiVersion: v1
kind: PersistentVolume
metadata:
  name: yinzhengjie-ceph-02
  labels:
    school: yinzhengjie
spec:
   accessModes:
   - ReadWriteMany
   persistentVolumeReclaimPolicy: Retain
   rbd:
     image: rbd-pv02
     monitors:
     - 10.0.0.141:6789
     - 10.0.0.142:6789
     - 10.0.0.143:6789
     pool: yinzhengjie-k8s
     secretRef:
       name: ceph-admin-secret
     user: admin
   capacity:
     storage: 3Gi

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: yinzhengjie-ceph-pvc-01
spec:
  #  引用指定的pv
  volumeName: yinzhengjie-ceph-01
  accessModes:
  - ReadWriteMany
  resources:
    limits:
       storage: 2Gi
    requests:
       storage: 1Gi

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-volume-pvc
spec:
  replicas: 1
  selector:
    matchLabels:
      apps: ceph-pvc
  template:
    metadata:
      labels:
        apps: ceph-pvc
    spec:
      volumes:
      - name: data
        persistentVolumeClaim:
          claimName: yinzhengjie-ceph-pvc-01
      containers:
      - name: c1
        image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
        volumeMounts:
        - name: data
          mountPath: /yinzhengjie-data
        ports:
        - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: svc-ceph-pvc
spec:
  selector:
    apps: ceph-pvc
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-ceph-pvc
  annotations:
    #  指定Ingress controller的类型
    kubernetes.io/ingress.class: traefik
spec:
  #  指定Ingress controller的名称
  ingressClassName: mytraefik
  rules:
  - host: v1.yinzhengjie.com
    http:
      paths:
      - backend:
          service:
            name: svc-ceph-pvc
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific

[root@master231 pv-pvc]#

5.创建资源

[root@master231 pv-pvc]# kubectl get po,svc,ing,pv,pvc
NAME                                     READY   STATUS    RESTARTS   AGE
pod/deploy-volume-pvc-5db454bd94-7l7c8   1/1     Running   0          23s

NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubernetes     ClusterIP   10.200.0.1      <none>        443/TCP   4h14m
service/svc-ceph-pvc   ClusterIP   10.200.23.116   <none>        80/TCP    23s

NAME                                               CLASS       HOSTS              ADDRESS   PORTS   AGE
ingress.networking.k8s.io/ingress-ceph-pvc         <none>      v1.yinzhengjie.com             80      23s
ingress.networking.k8s.io/yinzhengjie-traefik-apps   mytraefik   v1.yinzhengjie.com             80      11d

NAME                                 CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                           STORAGECLASS   REASON   AGE
persistentvolume/yinzhengjie-ceph-01   2Gi        RWX            Retain           Bound       default/yinzhengjie-ceph-pvc-01                           23s
persistentvolume/yinzhengjie-ceph-02   3Gi        RWX            Retain           Available                                                           23s

NAME                                          STATUS   VOLUME              CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/yinzhengjie-ceph-pvc-01   Bound    yinzhengjie-ceph-01   2Gi        RWX                           23s
[root@master231 pv-pvc]# 
[root@master231 pv-pvc]# kubectl describe ingress.networking.k8s.io/ingress-ceph-pvc 
Name:             ingress-ceph-pvc
Labels:           <none>
Namespace:        default
Address:          
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host              Path  Backends
  ----              ----  --------
  v1.yinzhengjie.com  
                    /   svc-ceph-pvc:80 (10.100.2.43:80)
Annotations:        kubernetes.io/ingress.class: traefik
Events:             <none>
[root@master231 pv-pvc]#

6.访问测试

http://v1.yinzhengjie.com/

二.k8s使用rbd的动态存储类关联ceph集群

推荐阅读:
    https://github.com/ceph/ceph-csi/tree/release-v3.7/deploy/rbd/kubernetes

1.目录结构如下

[root@master231 rbd]# ll
total 24
-rw-r--r-- 1 root root 454 Nov 15 16:17 ceph-config-map.yaml
-rw-r--r-- 1 root root 392 Nov 15 16:18 csi-config-map.yaml
-rw-r--r-- 1 root root 358 Nov 15 16:20 csi-kms-config-map.yaml
-rw-r--r-- 1 root root 370 Nov 15 16:22 csi-rbd-secret.yaml
drwxr-xr-x 3 root root  17 Nov 15 15:22 deploy
-rw-r--r-- 1 root root 389 Nov 15 16:22 pvc.yaml
-rw-r--r-- 1 root root 833 Nov 15 16:22 storageclass.yaml
[root@master231 rbd]#

2.资源清单列表如下

https://gitee.com/jasonyin2020/cloud-computing-stack/tree/master/kubernetes/projects/ceph-cluster/sc

温馨提示:
  需要根据自己的ceph集群环境,修改对应的集群配置即可。

3.清空default集群的所有资源,(可选操作,主要是看起来方便,生产环境别这么玩,测试环境可以这样搞)

kubectl delete all --all

4.安装rbd的sc

[root@master231 rbd]# pwd
/yinzhengjie/manifests/cloud-computing-stack/linux89/manifests/23-projects/06-ceph/sc/rbd
[root@master231 rbd]# 
[root@master231 rbd]#  kubectl apply -f deploy/rbd/kubernetes/
configmap/ceph-csi-config created
serviceaccount/rbd-csi-nodeplugin created
clusterrole.rbac.authorization.k8s.io/rbd-csi-nodeplugin created
clusterrolebinding.rbac.authorization.k8s.io/rbd-csi-nodeplugin created
serviceaccount/rbd-csi-provisioner created
clusterrole.rbac.authorization.k8s.io/rbd-external-provisioner-runner created
clusterrolebinding.rbac.authorization.k8s.io/rbd-csi-provisioner-role created
role.rbac.authorization.k8s.io/rbd-external-provisioner-cfg created
rolebinding.rbac.authorization.k8s.io/rbd-csi-provisioner-role-cfg created
service/csi-rbdplugin-provisioner created
deployment.apps/csi-rbdplugin-provisioner created
daemonset.apps/csi-rbdplugin created
service/csi-metrics-rbdplugin created
csidriver.storage.k8s.io/rbd.csi.ceph.com created
[root@master231 rbd]# 
[root@master231 rbd]# 
[root@master231 rbd]#  kubectl apply -f .
configmap/ceph-config created
configmap/ceph-csi-config configured
configmap/ceph-csi-encryption-kms-config created
secret/csi-rbd-secret created
persistentvolumeclaim/rbd-pvc01 created
persistentvolumeclaim/rbd-pvc02 created
storageclass.storage.k8s.io/csi-rbd-sc created
[root@master231 rbd]#

5.查看数据

[root@master231 rbd]# kubectl get sc
NAME         PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
csi-rbd-sc   rbd.csi.ceph.com   Delete          Immediate           true                   4m55s
[root@master231 rbd]# 
[root@master231 rbd]# kubectl get po,pv,pvc
NAME                                             READY   STATUS    RESTARTS   AGE
pod/csi-rbdplugin-lqsxt                          3/3     Running   0          50s
pod/csi-rbdplugin-provisioner-5dfcf67885-5m9sj   7/7     Running   0          50s
pod/csi-rbdplugin-provisioner-5dfcf67885-92djh   7/7     Running   0          50s
pod/csi-rbdplugin-wmnm6                          3/3     Running   0          50s

NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS   REASON   AGE
persistentvolume/pvc-754a5284-5239-43be-99dd-03a5068f4b27   4Gi        RWO            Delete           Bound    default/rbd-pvc02   csi-rbd-sc              12s
persistentvolume/pvc-e6266518-9a17-42ac-aa60-e3c1f18f4696   2Gi        RWO            Delete           Bound    default/rbd-pvc01   csi-rbd-sc              12s

NAME                              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/rbd-pvc01   Bound    pvc-e6266518-9a17-42ac-aa60-e3c1f18f4696   2Gi        RWO            csi-rbd-sc     35s
persistentvolumeclaim/rbd-pvc02   Bound    pvc-754a5284-5239-43be-99dd-03a5068f4b27   4Gi        RWO            csi-rbd-sc     35s
[root@master231 rbd]#

6.验证ceph集群是否动态创建了pv和ceph对应的镜像文件

[root@ceph141 ~]# rbd ls -p yinzhengjie-k8s
csi-vol-027f1235-c26b-11ee-b24f-f65a0eab89b3
csi-vol-027f580e-c26b-11ee-b24f-f65a0eab89b3
nginx-web
rbd-pv01
rbd-pv02
[root@ceph141 ~]#
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
13天前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
93 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
13天前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
29 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
13天前
|
存储 Kubernetes 数据安全/隐私保护
k8s对接ceph集群的分布式文件系统CephFS
文章介绍了如何在Kubernetes集群中使用CephFS作为持久化存储,包括通过secretFile和secretRef两种方式进行认证和配置。
21 5
|
13天前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
31 2
|
13天前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
45 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
15天前
|
API UED 开发者
超实用技巧大放送:彻底革新你的WinForms应用,从流畅动画到丝滑交互设计,全面解析如何在保证性能的同时大幅提升用户体验,让软件操作变得赏心悦目不再是梦!
【8月更文挑战第31天】在Windows平台上,使用WinForms框架开发应用程序时,如何在保持性能的同时提升用户界面的吸引力和响应性是一个常见挑战。本文探讨了在不牺牲性能的前提下实现流畅动画与交互设计的最佳实践,包括使用BackgroundWorker处理耗时任务、利用Timer控件创建简单动画,以及使用Graphics类绘制自定义图形。通过具体示例代码展示了这些技术的应用,帮助开发者显著改善用户体验,使应用程序更加吸引人和易于使用。
35 0
|
存储 Kubernetes API
在K8S集群中,如何正确选择工作节点资源大小? 2
在K8S集群中,如何正确选择工作节点资源大小?
|
Kubernetes Serverless 异构计算
基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
在前一篇文章《基于ACK One注册集群实现IDC中K8s集群添加云上CPU/GPU节点》中,我们介绍了如何为IDC中K8s集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通过自动弹性伸缩,提高使用率,降低云上成本。这种直接添加节点的方式,适合需要自定义配置节点(runtime,kubelet,NVIDIA等),需要特定ECS实例规格等场景。同时,这种方式意味您需要自行
基于ACK One注册集群实现IDC中K8s集群以Serverless方式使用云上CPU/GPU资源
|
Kubernetes API 调度
在K8S集群中,如何正确选择工作节点资源大小?1
在K8S集群中,如何正确选择工作节点资源大小?
|
弹性计算 运维 Kubernetes
本地 IDC 中的 K8s 集群如何以 Serverless 方式使用云上计算资源
本地 IDC 中的 K8s 集群如何以 Serverless 方式使用云上计算资源