TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. Kubernetes
  3. 正文

k8s集群-挂载ceph分布式存储之rbd实现数据持久化

2024年1月27日 1015点热度 0人点赞 0条评论

k8s-使用ceph分布式存储

1)k8s集群ceph环境准备

`下载key`
"k8s集群里所有节点都要执行,我这里只演示一个"
root@k8s-master01:~# wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add -
`导入ceph源`
"k8s集群里所有节点都要执行,我这里只演示一个"
root@k8s-master01:~# apt-add-repository 'deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-octopus/ buster main'
root@k8s-master03:~# cat /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-mimic/ bionic main
root@k8s-master01:~# apt update
`搜索ceph版本信息`
root@k8s-master03:~# apt-cache madison ceph-common
ceph-common | 15.2.17-0ubuntu0.20.04.5 | https://mirrors.aliyun.com/ubuntu focal-updates/main amd64 Packages
ceph-common | 15.2.17-0ubuntu0.20.04.3 | https://mirrors.aliyun.com/ubuntu focal-security/main amd64 Packages
ceph-common | 15.2.1-0ubuntu1 | https://mirrors.aliyun.com/ubuntu focal/main amd64 Packages
ceph-common | 13.2.10-1bionic | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-mimic bionic/main amd64 Packages
ceph-common | 12.2.4-0ubuntu1 | http://mirrors.aliyun.com/ubuntu bionic/main amd64 Packages
      ceph | 15.2.1-0ubuntu1 | https://mirrors.aliyun.com/ubuntu focal/main Sources
      ceph | 15.2.17-0ubuntu0.20.04.3 | https://mirrors.aliyun.com/ubuntu focal-security/main Sources
      ceph | 15.2.17-0ubuntu0.20.04.5 | https://mirrors.aliyun.com/ubuntu focal-updates/main Sources
`安装ceph-common`
root@k8s-master03:~# apt-get -y install ceph-common

2)准备ceph资源

2.1)准备存储池

[ceph@ceph-deploy ceph-cluster]$ ceph -s
  cluster:
    id:     93b70727-4253-4b8a-845e-28b766e34392
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-mon-34
    mgr: ceph-mgr-35(active)
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   3.0 GiB used, 147 GiB / 150 GiB avail
    pgs:
​
`创建存储池`
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool create rbd-data1 32 32
`在存储池启用rbd:`
[ceph@ceph-deploy ceph-cluster]$ ceph osd pool application enable rbd-data1 rbd
`初始化rbd:`
[ceph@ceph-deploy ceph-cluster]$ rbd pool init -p rbd-data1
`创建两个镜像img`
[ceph@ceph-deploy ceph-cluster]$ rbd create data-img01 --size 3G --pool rbd-data1 --image-format 2 --image-feature layering
[ceph@ceph-deploy ceph-cluster]$ rbd create data-img02 --size 5G --pool rbd-data1 --image-format 2 --image-feature layering
`列出镜像个多信息:`
[ceph@ceph-deploy ceph-cluster]$ rbd ls --pool rbd-data1 -l
NAME        SIZE PARENT FMT PROT LOCK 
data-img01 3 GiB          2           
data-img02 5 GiB          2   

2.2)准备ceph用户

`创建用户`
[ceph@ceph-deploy ceph-cluster]$ ceph auth get-or-create client.stj mon 'allow r' osd 'allow rwx pool=rbd-data1'
[client.stj]
    key = AQCec7Rl+vvCHBAAiDR03Q47oMZKVniQnxh54Q==
`验证用户`
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.stj
exported keyring for client.stj
[client.stj]
    key = AQCec7Rl+vvCHBAAiDR03Q47oMZKVniQnxh54Q==
    caps mon = "allow r"
    caps osd = "allow rwx pool=rbd-data1"
`导出用户信息到keyring文件`
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.stj > ceph.client.stj.keyring
[ceph@ceph-deploy ceph-cluster]$ cat client.stj.keyring
[client.stj]
    key = AQCec7Rl+vvCHBAAiDR03Q47oMZKVniQnxh54Q==
    caps mon = "allow r"
    caps osd = "allow rwx pool=rbd-data1"

2.3)同步认证文件到k8s集群

[ceph@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.stj.keyring root@192.168.139.231:/etc/ceph/
[ceph@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.stj.keyring root@192.168.139.232:/etc/ceph/
[ceph@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.stj.keyring root@192.168.139.235:/etc/ceph/
[ceph@ceph-deploy ceph-cluster]$ scp ceph.conf ceph.client.stj.keyring root@192.168.139.236:/etc/ceph/

如果要动态创建卷,就要把ceph.conf拷贝到k8s的master节点,我这里我都拷贝了

2.4)k8s节点验证用户权限

root@k8s-master01:~# ceph --user stj -s
  cluster:
    id:     93b70727-4253-4b8a-845e-28b766e34392
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum ceph-mon-34
    mgr: ceph-mgr-35(active)
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   2 pools, 64 pgs
    objects: 6  objects, 51 B
    usage:   3.0 GiB used, 147 GiB / 150 GiB avail
    pgs:     64 active+clean

3)k8s节点配主机名解析

  • k8s节点都要配置,这里我演示一个

root@k8s-master01:~# vim /etc/hosts
# 最后一行都要添加
192.168.139.33 ceph-osd-33
192.168.139.34 ceph-mon-34
192.168.139.35 ceph-mgr-35
192.168.139.36 ceph-deploy

手动配置rbd挂载

1)通过keyring文件挂载rbd

基于ceph提供的rbd实现存储卷的动态提供,由两种实现方式, - -是通过宿主机的keyring文件挂载Ibd,另外-一个是通过将keyring中key定义为k8s中的secret,然后pod通过secret挂载rbd。

1.1)通过keyring文件直接挂载-busybox

1.1.1)创建yaml并应用

root@k8s-master01:~# mkdir -p /stj-soft/yaml/ceph-rbd/busybox
root@k8s-master01:~# cd /stj-soft/yaml/ceph-rbd/busybox
`编写yaml文件`
root@k8s-master01:/stj-soft/yaml/ceph-rbd/busybox# cat busybox.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: stj-ns
spec:
  containers:
  - name: busybox
    image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: Always
    volumeMounts:
    - name: stj-rbd1
      mountPath: /data
  volumes:
    - name: stj-rbd1
      rbd:
        monitors:
          - '192.168.139.34:6789'
         # - '192.168.139.38:6789'
         # - '192.168.139.39:6789'
        pool: rbd-data1    # 指定ceph创建的存储池
        image: data-img01  # 指定该存储里创建的镜像
        fsType: ext4       # 格式化rbd的文件系统类型
        readOnly: false
        user: stj          # 使用哪个用户进行挂载
        keyring: /etc/ceph/ceph.client.stj.keyring # 指定授权用户的文件路径
        
`应用yaml文件`
root@k8s-master01:/stj-soft/yaml/ceph-rbd/busybox# kubectl apply -f busybox.yaml 

1.1.2)验证是否挂载

root@k8s-master01:/stj-soft/yaml/ceph-rbd/busybox# kubectl get pod -n stj-ns
NAME      READY   STATUS    RESTARTS   AGE
busybox   1/1     Running   0          106s
`进入该镜像` 
root@k8s-master01:/stj-soft/yaml/ceph-rbd/busybox# kubectl exec -it busybox -n stj-ns sh
`验证是否挂载`
/ # df -h
Filesystem                Size      Used Available Use% Mounted on
overlay                  35.0G     13.5G     21.4G  39% /
tmpfs                    64.0M         0     64.0M   0% /dev
tmpfs                     1.9G         0      1.9G   0% /sys/fs/cgroup
/dev/rbd0                 2.9G     24.0K      2.9G   0% /data   # 这个可以看到已经挂载
/dev/sda4                35.0G     13.5G     21.4G  39% /dev/termination-log
/dev/sda4                35.0G     13.5G     21.4G  39% /etc/resolv.conf
/dev/sda4                35.0G     13.5G     21.4G  39% /etc/hostname
/dev/sda4                35.0G     13.5G     21.4G  39% /etc/hosts
shm                      64.0M         0     64.0M   0% /dev/shm
tmpfs                     1.9G     12.0K      1.9G   0% /var/run/secrets/kubernetes.io/serviceaccount
tmpfs                     1.9G         0      1.9G   0% /proc/acpi
tmpfs                    64.0M         0     64.0M   0% /proc/kcore
tmpfs                    64.0M         0     64.0M   0% /proc/keys
tmpfs                    64.0M         0     64.0M   0% /proc/timer_list
tmpfs                    64.0M         0     64.0M   0% /proc/sched_debug
tmpfs                     1.9G         0      1.9G   0% /proc/scsi
tmpfs                     1.9G         0      1.9G   0% /sys/firmware

1.1.3)验证是否可以写数据

`验证ceph的pool的空间`
[ceph@ceph-deploy ceph-cluster]$ ceph df
GLOBAL:
    SIZE        AVAIL       RAW USED     %RAW USED 
    150 GiB     147 GiB      3.0 GiB          2.01 
POOLS:
    NAME          ID     USED        %USED     MAX AVAIL     OBJECTS 
    rbd-data1     1      7.4 MiB      0.02        46 GiB          15 
`进入该镜像生成100M数据` 
root@k8s-master01:/stj-soft/yaml/ceph-rbd/busybox# kubectl exec -it busybox -n stj-ns sh
/data # dd if=/dev/zero of=data-file bs=1M count=100
/data # ls -lh
total 100M   
-rw-r--r--    1 root     root      100.0M Jan 27 04:06 data-file
drwx------    2 root     root       16.0K Jan 27 03:55 lost+found
`验证ceph的pool的空间`
[ceph@ceph-deploy ceph-cluster]$ ceph df
GLOBAL:
    SIZE        AVAIL       RAW USED     %RAW USED 
    150 GiB     138 GiB       12 GiB          7.75 
POOLS:
    NAME          ID     USED        %USED     MAX AVAIL     OBJECTS 
    rbd-data1     1      2.9 GiB      6.19        44 GiB         746 

1.2)通过keyring文件直接挂载-nginx

1.2.1)创建yaml并应用

root@k8s-master01:~# mkdir -p /stj-soft/yaml/ceph-rbd/nginx
root@k8s-master01:~# cd /stj-soft/yaml/ceph-rbd/nginx
root@k8s-master01:/stj-soft/yaml/ceph-rbd/nginx# cat nginx.yaml 
kind: Deployment   
apiVersion: apps/v1
metadata:          
  labels:           
    app: nginx-stj-deployment-label
  name: nginx-deployment    
  namespace: stj-ns          
spec:               
  replicas: 1        
  selector:           
    matchLabels:        
      app: nginx-stj-selector 
  template:          
    metadata:         
      labels:          
        app: nginx-stj-selector  
    spec:             
      containers:      
      - name: nginx-stj-container 
        image: harbor.stangj.net/pub-images/nginx-1.24.0:v1
        imagePullPolicy: Always 
        ports:   
        - containerPort: 80      
          protocol: TCP         
​
        volumeMounts:
        - name: stj-rbd1
          mountPath: /data
      volumes:
        - name: stj-rbd1
          rbd:
            monitors:
              - '192.168.139.34:6789'
             # - '192.168.139.38:6789'
             # - '192.168.139.39:6789'
            pool: rbd-data1    # 指定ceph创建的存储池
            image: data-img01  # 指定该存储里创建的镜像
            fsType: ext4       # 格式化rbd的文件系统类型
            readOnly: false
            user: stj          # 使用哪个用户进行挂载
            keyring: /etc/ceph/ceph.client.stj.keyring # 指定授权用户的文件路径
---
kind: Service       
apiVersion: v1       
metadata:             
  labels:              
    app: nginx-stj-label 
  name: nginx-stj-svc
  namespace: stj-ns  
spec:                 
  type: NodePort       
  ports:        
  - name: http   
    protocol: TCP 
    port: 80       
    targetPort: 80  
    nodePort: 40001  
  - name: https       
    protocol: TCP  
    port: 443       
    targetPort: 443  
    nodePort: 40043   
  selector:
    app: nginx-stj-selector 

1.2.2)验证是否挂载

root@k8s-master01:/stj-soft/yaml/ceph-rbd/nginx# kubectl get pod -n stj-ns
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-d6c55c674-2pgzx   1/1     Running   0          43s
root@k8s-master01:/stj-soft/yaml/ceph-rbd/nginx# kubectl exec -it nginx-deployment-d6c55c674-2pgzx -n stj-ns sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
sh-4.2# df
Filesystem     1K-blocks     Used Available Use% Mounted on
overlay         36679172 14197984  22481188  39% /
tmpfs              65536        0     65536   0% /dev
tmpfs            1990824        0   1990824   0% /sys/fs/cgroup
/dev/rbd0        3021608   102428   2902796   4% /data  # 以及挂载
/dev/sda4       36679172 14197984  22481188  39% /etc/hosts
shm                65536        0     65536   0% /dev/shm
tmpfs            1990824       12   1990812   1% /run/secrets/kubernetes.io/serviceaccount
tmpfs            1990824        0   1990824   0% /proc/acpi
tmpfs            1990824        0   1990824   0% /proc/scsi
tmpfs            1990824        0   1990824   0% /sys/firmware

1.2.3)验证是否可以写数据

`进入该镜像生成200M数据` 
root@k8s-master01:/stj-soft/yaml/ceph-rbd/nginx# kubectl exec -it nginx-deployment-d6c55c674-2pgzx -n stj-ns sh
sh-4.2# dd if=/dev/zero of=data-file bs=2M count=100
sh-4.2# ls -lh
total 201M
-rw-r--r-- 1 root root 200M Jan 27 04:26 data-file
drwx------ 2 root root  16K Jan 27 03:55 lost+found

 

标签: 暂无
最后更新:2024年1月27日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • k8s-使用ceph分布式存储
    • 1)k8s集群ceph环境准备
    • 2)准备ceph资源
      • 2.1)准备存储池
      • 2.2)准备ceph用户
      • 2.3)同步认证文件到k8s集群
      • 2.4)k8s节点验证用户权限
    • 3)k8s节点配主机名解析
  • 手动配置rbd挂载
    • 1)通过keyring文件挂载rbd
      • 1.1)通过keyring文件直接挂载-busybox
      • 1.2)通过keyring文件直接挂载-nginx

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号