k8s 基于ceph存储动态卷的使用

kubernetes 使用Ceph RBD进行动态卷配置

1. 实验环境简述:

  本实验主要演示了将现有Ceph集群用作k8s 动态创建持久性存储(pv)的示例。假设您的环境已经建立了一个工作的Ceph集群。

2. 配置步骤:

1. k8s所有节点安装ceph-common软件包

yum install -y ceph-common
# 在每一台k8s节点安装ceph-common软件包,无论是master节点还是node节点
如果k8s节点比较多,可以使用ansible安装
ansible kube-master -m copy -a "src=ceph.repo backup=yes dest=/etc/yum.repos.d"
ansible kube-master -m yum -a "name=ceph-common state=present"
ansible kube-node -m copy -a "src=ceph.repo backup=yes dest=/etc/yum.repos.d"
ansible kube-node -m yum -a "name=ceph-common state=present"

2. Create Pool for Dynamic Volumes
  在ceph管理节点上面创建一个pool,名称为kube

ceph osd pool create kube 1024
[[email protected] cluster]# ceph df
GLOBAL:
    SIZE      AVAIL     RAW USED     %RAW USED
    3809G     3793G       15899M          0.41
POOLS:
    NAME        ID     USED       %USED     MAX AVAIL     OBJECTS
    rbd         0           0         0         1196G           0
    k8sdemo     1           0         0         1196G           0
    kube        2      72016k         0         1196G          30
[[email protected] cluster]# cd /cluster
#创建密钥,用于k8s认证
ceph auth get-or-create client.kube mon ‘allow r‘ osd ‘allow class-read object_prefix rbd_children, allow rwx pool=kube‘ -o ceph.client.kube.keyring
[[email protected] cluster]# ls ceph.client.kube.keyring
ceph.client.kube.keyring
[[email protected] cluster]#

3. 在k8s集群上面创建一个ceph集群的secret

[[email protected] cluster]# ceph auth get-key client.admin | base64
QVFEdkJhZGN6ZW41SFJBQUQ5RzNJSVU0djlJVXRRQzZRZjBnNXc9PQ==
[[email protected] cluster]#
#   使用该命令在其中一个Ceph MON节点上生成此base64密钥ceph auth get-key client.admin | base64,然后复制输出并将其粘贴为密钥的值

[[email protected] ceph]# cat ceph-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
  namespace: kube-system
data:
  key: QVFEdkJhZGN6ZW41SFJBQUQ5RzNJSVU0djlJVXRRQzZRZjBnNXc9PQ==
type: kubernetes.io/rbd
[[email protected] ceph]#

kubectl apply -f ceph-secret.yaml

[[email protected] ceph]# kubectl describe secrets -n kube-system ceph-secret
Name:         ceph-secret
Namespace:    kube-system
Labels:       <none>
Annotations:
Type:         kubernetes.io/rbd

Data
====
key:  40 bytes
[[email protected] ceph]#
# k8s上面使用Ceph RBD 动态供给卷需要配置ceph secret

3. 在k8s集群上面创建一个ceph集群的用户 secret

[email protected] cluster]# ceph auth get-key client.kube | base64
QVFDTks2ZGNjcEZoQmhBQWs4anVvbmVXZnZUeitvMytPbGZ6OFE9PQ==
[[email protected] cluster]#
# 使用该命令在其中一个Ceph MON节点上生成此base64密钥ceph auth get-key client.kube | base64,然后复制输出并将其粘贴为密钥的值。
[[email protected] ceph]# cat ceph-user-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-user-secret
  namespace: kube-system
data:
  key: QVFDTks2ZGNjcEZoQmhBQWs4anVvbmVXZnZUeitvMytPbGZ6OFE9PQ==
type: kubernetes.io/rbd
[[email protected] ceph]#

kubectl apply -f ceph-user-secret.yaml

[[email protected] ceph]# kubectl get secrets -n kube-system ceph-user-secret
NAME               TYPE                DATA   AGE
ceph-user-secret   kubernetes.io/rbd   1      3h45m
[[email protected] ceph]#

# k8s上面使用Ceph RBD 动态供给卷需要配置ceph user secret

4. 在k8s集群上面创建dynamic volumes

[[email protected] ceph]# cat ceph-storageclass.yaml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: dynamic
  annotations:
    storageclass.beta.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/rbd
parameters:
  monitors: 10.83.32.224:6789,10.83.32.225:6789,10.83.32.234:6789
  adminId: admin
  adminSecretName: ceph-secret
  adminSecretNamespace: kube-system
  pool: kube
  userId: kube
  userSecretName: ceph-user-secret
[[email protected] ceph]#
kubectl apply -f ceph-storageclass.yaml
# 配置了ceph mon节点的地址和端口,在pool中可以创建image的Ceph client ID
# Secret Name for adminId. It is required. The provided secret must have type kubernetes.io/rbd.
# The namespace for adminSecret. Default is default.
# Ceph RBD pool. Default is rbd, but that value is not recommended.
# Ceph client ID that is used to map the Ceph RBD image. Default is the same as adminId.
# The name of Ceph Secret for userId to map Ceph RBD image. It must exist in the same namespace as PVCs. It is required unless its set as the default in new projects. 

5. 在k8s集群上面创建持久卷声明(PVC)

  持久卷声明(PVC)指定所需的访问模式和存储容量。目前,仅基于这两个属性,PVC被绑定到单个PV。一旦PV绑定到PVC,该PV基本上与PVC的项目相关联,并且不能被另一个PVC绑定。PV和PVC的一对一映射。但是,同一项目中的多个pod可以使用相同的PVC。
  对于PV,accessModes不强制执行访问权限,而是充当标签以将PV与PVC匹配

[[email protected] ceph]# cat ceph-class.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ceph-claim
  namespace: kube-system
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
[[email protected] ceph]#
kubectl apply -f ceph-class.yaml

6. 在k8s集群上面创建Pod,使用ceph RDB自动关联的pvc

  卷的名称。此名称在containers和 volumes部分中必须相同。

[[email protected] ceph]# cat ceph-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: ceph-pod1
  namespace: kube-system
spec:
  containers:
  - name: ceph-busybox
    image: busybox
    command: ["sleep","60000"]
    volumeMounts:
    - name: ceph-vol1
      mountPath: /usr/share/busybox
      readOnly: false
  volumes:
  - name: ceph-vol1
    persistentVolumeClaim:
      claimName: ceph-claim
[[email protected] ceph]#
kubectl apply -f  ceph-pod.yaml
[[email protected] ceph]# kubectl get pods -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
ceph-pod1                               1/1     Running   0          3h21m

# 进入容器,查看挂载
[[email protected] ceph]# kubectl exec -it -n kube-system ceph-pod1 -- /bin/sh
/ # df -h|grep busybox
/dev/rbd0                 1.9G      6.0M      1.9G   0% /usr/share/busybox
/ #

推荐关注我的个人微信公众号 “云时代IT运维”,周期性更新最新的应用运维类技术文档。关注虚拟化和容器技术、CI/CD、自动化运维等最新前沿运维技术和趋势;

原文地址:https://blog.51cto.com/zgui2000/2374614

时间: 2024-10-10 04:48:48

k8s 基于ceph存储动态卷的使用的相关文章

k8s对接ceph存储

前提条件:已经部署好ceph集群 本次实验由于环境有限,ceph集群是部署在k8s的master节点上的 一.创建ceph存储池 在ceph集群的mon节点上执行以下命令: ceph osd pool create k8s-volumes 64 64 查看下副本数 [root@master ceph]# ceph osd pool get k8s-volumes size size: 3 pg的设置参照以下公式: Total PGs = ((Total_number_of_OSD * 100)

Ceph 14.2.5-K8S 使用Ceph存储实战 -- &lt;6&gt;

K8S 使用Ceph存储 PV.PVC概述 管理存储是管理计算的一个明显问题.PersistentVolume子系统为用户和管理员提供了一个API,用于抽象如何根据消费方式提供存储的详细信息.于是引入了两个新的API资源:PersistentVolume和PersistentVolumeClaim PersistentVolume(PV)是集群中已由管理员配置的一段网络存储. 集群中的资源就像一个节点是一个集群资源. PV是诸如卷之类的卷插件,但是具有独立于使用PV的任何单个pod的生命周期.

基于本地存储的kvm虚拟机在线迁移

基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是热迁移基于本地存储 动态块迁移版本要求qemu版本要求  大于或等于0.12.1 rpm -qa|grep qemu qemu-kvm-0.12.1.2-2.491.el6_8.1.x86_64 qemu-kvm-tools-0.12.1.2-2.491.el6_8.1.x86_64 目标宿主机:10.11.30.52源宿主机:

K8S使用Ceph做持久化存储

一.概述 Cephfs 是一个基于 ceph 集群且兼容POSIX标准的文件系统.创建 cephfs 文件系统时需要在 ceph 集群中添加 mds 服务,该服务负责处理 POSIX 文件系统中的 metadata 部分,实际的数据部分交由 ceph 集群中的 OSDs 处理.cephfs 支持以内核模块方式加载也支持 fuse 方式加载.无论是内核模式还是 fuse 模式,都是通过调用 libcephfs 库来实现 cephfs 文件系统的加载,而 libcephfs 库又调用 librado

Ceph持久化存储为k8s应用提供存储方案(3)

一.CephFs介绍二.CephFS架构三.配置CephFS MDS1.创建一个Ceph文件系统1.1.以kernel client 形式挂载CephFS1.2.以FUSE client 形式挂载CephFS四.MDS主备与主主切换1.配置主主模式2.还原单主MDS 一.CephFs介绍 Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本 (10.2.0) 是第一个包含稳定 CephFS 的

Kubernetes持久化Ceph存储

一.依然简介 Kubernetes支持的卷类型详见:https://kubernetes.io/docs/concepts/storage/volumes/ Kubernetes使用Persistent Volume和Persistent Volume Claim两种API资源来管理存储. PersistentVolume(简称PV):由管理员设置的存储,它是集群的一部分.就像节点(Node)是集群中的资源一样,PV也是集群中的资源.它包含存储类型,存储大小和访问模式.它的生命周期独立于Pod,

K8S与Ceph RBD集成-多主与主从数据库示例

参考文章: https://ieevee.com/tech/2018/05/16/k8s-rbd.html https://zhangchenchen.github.io/2017/11/17/kubernetes-integrate-with-ceph/https://docs.openshift.com/container-platform/3.5/install_config/storage_examples/ceph_rbd_dynamic_example.htmlhttps://jim

Ceph存储的搭建

Ceph分布式文件存储的安装 1. Ceph简介: ??Ceph提供非凡的数据存储可扩展性 - 数以千计的客户端主机或KVM访问PB级到数据级的数据.它为应用程序提供对象存储.块存储.文件系统,存储在一个统一的存储集群中 .Ceph是开源产品可以免费使用,可以部署在经济实惠的商用服务器上. Ceph分布式存储系统支持的三种接口: Object:有原生的API,而且也兼容Swift和S3的API Block:支持精简配置.快照.克隆 File:Posix接口,支持快照 Ceph分布式存储系统的特点

2个Kubernetes使用同一个Ceph存储达到Kubernetes间持久化数据迁移

2个Kubernetes使用同一个Ceph存储达到Kubernetes间持久化数据迁移 [TOC] 当前最新Kubernetes稳定版为1.14.现在为止,还没有不同Kubernetes间持久化存储迁移的方案.但根据Kubernetes pv/pvc绑定流程和原理,只要 "存储"-->"PV"-->"PVC" 的绑定关系相同,即可保证不同间Kubernetes可挂载相同的存储,并且里面是相同数据. 1. 环境 原来我的Kubernet