k8s-pvc/pv扩容记录
背景
一次聊天过程中,对方提及pvc的扩容,虽然有注意过 storageclass 有个AllowVolumeExpansion的配置(有些csi插件是不支持该配置的,比如local-volume-provisoner),但是没有实际用过,所以还是心里没底,所以抽时间 做了下扩容的操作。这里是基于 ceph-csi 插件,在rbd的使用方式下做的 扩容
原理
需要csi 插件的支持,更改pod的 pvc 申明的存储空间需求,csi插件便会自动对原来的rbd卷 做扩容操作
步骤
##检查当前storage class 支持的特性
wsg@k8snode1v18:~/k8s_deploy/ceph-csi/examples/rbd$ kubectl describe sc csi-rbd-sc
AllowVolumeExpansion: True
MountOptions:discard
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
可以看到,AllowVolumeExpansion 为true
创建test pod 并且 申明使用
测试pod 定义如下:
wsg@k8snode1v18:~/k8s_deploy/ceph-csi/examples/rbd$ cat pod-test-pv-expansion.yaml
---
apiVersion: v1
kind: Pod
metadata:name: pod-test-pvc-expansion
spec:containers:- name: nginx-serverimage: nginxvolumeMounts:- name: mypvcmountPath: /var/lib/www/htmlvolumes:- name: mypvcpersistentVolumeClaim:claimName: rbd-pvcreadOnly: false---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: rbd-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: csi-rbd-sc
进入测试pod 检查 volume 挂载情况
wsg@k8snode1v18:~/k8s_deploy/ceph-csi/examples/rbd$ kubectl exec -it pod-test-pvc-expansion – /bin/bash
/dev/rbd1 on /var/lib/www/html type ext4 (rw,relatime,stripe=16)
可以看到 声明的 1G rbd 磁盘已经 自动 mount 上了,并且采用 ext4 文件系统
写入测试数据
root@pod-test-pvc-expansion:/var/lib/www/html/wsg-inpod# md5sum before-expansion.txt >md5
root@pod-test-pvc-expansion:/var/lib/www/html/wsg-inpod# md5sum before-expansion.txt
0b4cfe43fc1f774cc0ed294515f626e1 before-expansion.txt
root@pod-test-pvc-expansion:/var/lib/www/html/wsg-inpod# cat md5
0b4cfe43fc1f774cc0ed294515f626e1 before-expansion.txtroot@pod-test-pvc-expansion:/var/lib/www/html# md5sum test.txt |tee md5
798f8e998aa4c359f7ef66549866fb01 test.txt
root@pod-test-pvc-expansion:/var/lib/www/html# cat md5
798f8e998aa4c359f7ef66549866fb01 test.txt
执行扩容(调整 pvc 声明的大小)
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: csi-rbd-scvolumeMode: FilesystemvolumeName: pvc-abfad8c1-9d71-45fd-834c-60b8109c6b75wsg@k8snode1v18:~$ kubectl edit pvc rbd-pvc
persistentvolumeclaim/rbd-pvc edited
wsg@k8snode1v18:~$
检查 pod 状态
##扩容中看到 pod 没有重启的记录(扩容前 kubectl exec的 会话 也是一直保持正常,没有中断)
pod-test-pvc-expansion 1/1 Running 0 25m##进一步检查 pod 的event,发现已经有 成功扩容的记录
wsg@k8snode1v18:~$ kubectl describe pod pod-test-pvc-expansion
Name: pod-test-pvc-expansion
Namespace: default
Priority: 0
Node: k8snode1v18/172.17.73.53
Start Time: Sat, 27 Nov 2021 14:05:46 +0800
Labels: <none>
Annotations: cni.projectcalico.org/podIP: 10.106.176.31/32
Status: Running
IP: 10.106.176.31
IPs:IP: 10.106.176.31
Containers:nginx-server:Container ID: docker://ce3e35282b5ff3dcd62848ab69efb751f592510e67aed9ad3183eaf817f54f21Image: nginxImage ID: docker-pullable://nginx@sha256:097c3a0913d7e3a5b01b6c685a60c03632fc7a2b50bc8e35bcaa3691d788226ePort: <none>Host Port: <none>State: RunningStarted: Sat, 27 Nov 2021 14:06:35 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/lib/www/html from mypvc (rw)/var/run/secrets/kubernetes.io/serviceaccount from default-token-gc5x4 (ro)
Conditions:Type StatusInitialized True Ready True ContainersReady True PodScheduled True
Volumes:mypvc:Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)ClaimName: rbd-pvcReadOnly: falsedefault-token-gc5x4:Type: Secret (a volume populated by a Secret)SecretName: default-token-gc5x4Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300snode.kubernetes.io/unreachable:NoExecute for 300s
Events:Type Reason Age From Message---- ------ ---- ---- -------Warning FailedScheduling <unknown> default-scheduler persistentvolumeclaim "rbd-pvc" not foundWarning FailedScheduling <unknown> default-scheduler persistentvolumeclaim "rbd-pvc" not foundWarning FailedScheduling <unknown> default-scheduler running "VolumeBinding" filter plugin for pod "pod-test-pvc-expansion": pod has unbound immediate PersistentVolumeClaimsNormal Scheduled <unknown> default-scheduler Successfully assigned default/pod-test-pvc-expansion to k8snode1v18Normal SuccessfulAttachVolume 17m attachdetach-controller AttachVolume.Attach succeeded for volume "pvc-abfad8c1-9d71-45fd-834c-60b8109c6b75"Normal Pulling 17m kubelet, k8snode1v18 Pulling image "nginx"Normal Pulled 16m kubelet, k8snode1v18 Successfully pulled image "nginx"Normal Created 16m kubelet, k8snode1v18 Created container nginx-serverNormal Started 16m kubelet, k8snode1v18 Started container nginx-serverNormal FileSystemResizeSuccessful 48s kubelet, k8snode1v18 MountVolume.NodeExpandVolume succeeded for volume "pvc-abfad8c1-9d71-45fd-834c-60b8109c6b75"
wsg@k8snode1v18:~$
扩容前后 pvc 的对比
rbd-pvc Bound pvc-abfad8c1-9d71-45fd-834c-60b8109c6b75 1Gi RWO csi-rbd-sc 13m//扩容后
rbd-pvc Bound pvc-abfad8c1-9d71-45fd-834c-60b8109c6b75 10Gi RWO csi-rbd-sc 19m
wsg@k8snode1v18:~$
可以看到 容量的变化,并且 绑定的 pv编号 也是没有变化的,说明是同一个pv
检查 pod 中的数据
root@pod-test-pvc-expansion:/var/lib/www/html/wsg-inpod# md5sum before-expansion.txt
0b4cfe43fc1f774cc0ed294515f626e1 before-expansion.txt
root@pod-test-pvc-expansion:/var/lib/www/html/wsg-inpod# cat md5
0b4cfe43fc1f774cc0ed294515f626e1 before-expansion.txt
root@pod-test-pvc-expansion:/var/lib/www/html/wsg-inpod#
知识点
pod 可以看到 host mount namespce
root@pod-test-pvc-expansion:/# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 2.5M 1 loop
loop1 7:1 0 99.4M 1 loop
loop2 7:2 0 61.8M 1 loop
loop3 7:3 0 2.5M 1 loop
loop4 7:4 0 61.8M 1 loop
loop5 7:5 0 242.3M 1 loop
loop6 7:6 0 548K 1 loop
loop7 7:7 0 4K 1 loop
loop8 7:8 0 704K 1 loop
loop10 7:10 0 704K 1 loop
loop11 7:11 0 65.1M 1 loop
loop12 7:12 0 140.7M 1 loop
loop13 7:13 0 548K 1 loop
loop14 7:14 0 2.5M 1 loop
loop15 7:15 0 247.9M 1 loop
loop16 7:16 0 219M 1 loop
loop17 7:17 0 2.5M 1 loop
loop18 7:18 0 65.2M 1 loop
loop19 7:19 0 219M 1 loop
loop20 7:20 0 55.5M 1 loop
loop21 7:21 0 140.7M 1 loop
loop22 7:22 0 99.4M 1 loop
loop23 7:23 0 55.5M 1 loop
sda 8:0 0 500G 0 disk
`-sda1 8:1 0 500G 0 part /etc/hosts
rbd0 252:0 0 60G 0 disk
rbd1 252:16 0 1G 0 disk /var/lib/www/html
root@pod-test-pvc-expansion:/#
相关文章:
k8s-pvc/pv扩容记录
背景 一次聊天过程中,对方提及pvc的扩容,虽然有注意过 storageclass 有个AllowVolumeExpansion的配置(有些csi插件是不支持该配置的,比如local-volume-provisoner),但是没有实际用过,所以还是心…...
关于Unity插件TriLib使用的一点儿心得
最近做一个项目的时候,由于要求动态加载fbx或者glb等格式文件,而我们自己开发加载插件难度又有点大,所以最后使用了TriLib这个插件,现在说一点使用心得。 由于文件加载之后要对加载的内容进行复制,比如加载一个柱子&am…...
计算机二级Python基本排序题-序号45(补充)
1. 文件"singup.txt”中保存了若干条参加运动会学生的报名记录,每条记录的形式为“班级号_学号”,例如"A1_12”,将每个班级报名情按参加运动会人数从多到少排列(假设不存在人数相同的情况)并输出,…...
响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-6 fieldset
代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>fieldset</title> </head><body> <form action"#"><fieldset><legend>学生信息</legend>姓名:&…...
html渲染优先级
在前端开发中,优先布局是指在设计和构建页面时,将页面的各个部分按照其重要性和优先级进行排序,并依次进行布局和开发。这种方法可以帮助开发团队在项目初期就确定页面结构的核心部分,从而更好地掌控项目的整体进度和优先级。且确…...
linux 更新镜像源
打开终端,备份一下旧的 源 文件,以防万一 cd /etc/apt/ ls sudo cp sources.list sources.list.bak ls然后打开清华大学开源软件镜像站 搜索一下你的linux发行版本,我这里是ubuntu发行版本 点击这个上面图中的问号 查看一下自己的版本号&a…...
【征服Redis12】redis的主从复制问题
从现在开始,我们来讨论redis集群的问题,在前面我们介绍了RDB和AOF两种同步机制,那你是否考虑过这两个机制有什么用呢?其中的一个重要作用就是为了集群同步设计的。 Redis是一个高性能的键值存储系统,广泛应用于Web应用…...
php函数 一
一 自动加载 1.1 __autoload(string $class) 类自动加载,7.2版本之后废弃。可使用sql_autoload_register()注册方法实现。 类自动加载,无返回值。 #php7.2之前function __autoload($class) {if(strpos($class, CI_) ! 0){if (file_exists(APPPATH . …...
监督学习 - 梯度提升回归(Gradient Boosting Regression)
什么是机器学习 梯度提升回归(Gradient Boosting Regression)是一种集成学习方法,用于解决回归问题。它通过迭代地训练一系列弱学习器(通常是决策树)来逐步提升模型的性能。梯度提升回归的基本思想是通过拟合前一轮模…...
【工具】使用ssh进行socket5代理
文章目录 shellssh命令详解正向代理:反向代理:本地 socks5 代理 shell ssh -D 3333 root192.168.0.11 #输入密码 #3333端口已经使用远程机进行转发设置Windows全局代理转发 socks127.0.0.1 3333如果远程机为公网ip,可通过搜索引擎查询出网…...
(delphi11最新学习资料) Object Pascal 学习笔记---第2章第六节(类型转换)
Object Pascal 学习笔记,Delphi 11 编程语言的完整介绍 作者: Marco Cantu 笔记:豆豆爸 2.6 类型转换和类型转换 正如我们所见,不能将一种数据类型的变量赋值给另一种类型的变量。原因在于,根据数据的实际表示,你…...
计算机服务器中了mallox勒索病毒怎么办,mallox勒索病毒解密数据恢复
企业的计算机服务器存储着企业重要的信息数据,为企业的生产运营提供了极大便利,但网络安全威胁随着技术的不断发展也在不断增加,近期,云天数据恢复中心接到许多企业的求助,企业的计算机服务器中了mallox勒索病毒&#…...
CPU相关专业名词介绍
CPU相关专业名词 1、CPU 中央处理器CPU(Central Processing Unit)是计算机的运算和控制核心,可以理解为PC及服务器的大脑CPU与内部存储器和输入/输出设备合称为电子计算机三大核心部件CPU的本质是一块超大规模的集成电路,主要功…...
VRRP协议负载分担
VRRP流量负载分担 VRRP负载分担与VRRP主备备份的基本原理和报文协商过程都是相同的。同样对于每一个VRRP备份组,都包含一个Master设备和若干Backup设备。与主备备份方式不同点在于:负载分担方式需要建立多个VRRP备份组,各备份组的Master设备可以不同;同一台VRRP设备可以加…...
maven 基本知识/1.17
maven ●maven是一个基于项目对象模型(pom)的项目管理工具,帮助管理人员自动化构建、测试和部署项目 ●pom是一个xml文件,包含项目的元数据,如项目的坐标(GroupId,artifactId,version )、项目的依赖关系、构建过程 ●生命周期&…...
【Java】HttpServlet类简单方法和请求显示
1、HttpServlet类简介🍀 Servlet类中常见的三个类有:☑️HttpServlet类,☑️HttpServletRequest类,☑️HttpResponse类 🐬其中,HttpServlet首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对…...
使用Rancher管理Kubernetes集群
部署前规划 整个部署包括2个部分,一是管理集群部署,二是k8s集群部署。管理集群功能主要提供web界面方式管理k8s集群。正常情况,管理集群3个节点即可,k8s集群至少3个。本文以3节点管理集群,3节点k8s集群为例 说明部署过…...
QT中操作word文档
QT中操作word文档: 参考如下内容: C(Qt) 和 Word、Excel、PDF 交互总结 Qt对word文档操作总结 QT中操作word文档 Qt/Windows桌面版提供了ActiveQt框架,用以为Qt和ActiveX提供完美结合。ActiveQt由两个模块组成: QAxContainer模…...
纯前端在线Office文档安全预览之打开Word文档后禁止打印、禁止另存为、禁止复制
在一些在线Office文档中,有很多重要的文件需要保密控制,比如:报价单、客户资料等数据,只能给公司成员查看,但是不能编辑,并且不能拷贝,打印、不能另存为,导致重要资料外泄。 可以通…...
李沐深度学习-d2lzh_pytorch模块实现
d2lzh_pytorch 模块 import random import torch import matplotlib_inline from matplotlib import pyplot as plt import torchvision import torchvision.transforms as transforms import torchvision.datasets import sys from collections import OrderedDict# --------…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
