kubernetes存储核心原理

etcd原理与实战:Kubernetes集群的强一致KV存储核心 etcd是一种面向分布式系统的强一致性键值存储,基于Raft共识算法实现线性一致性读写,为Kubernetes等云原生平台提供高可用、低延迟的元数据持久化能力。其核心价值在于保障集群状态的全局唯一视图和严格时序,支撑API Server的资源版本控制(resourceVersion)、Watch事件分发与多节点协同决策。典型应用场景包括K8s的Pod调度状态同步、ConfigMap热更新、Leader选举及服务发现元数据管理。本文深入解析etcd的WAL日志机制、Snapshot快照策略、Raft心跳与选举 阅读详情
volume设计解读

​ 在Kubernetes中,volume的使用方式类似于虚拟机的磁盘,需要给pod(即一个逻辑上的虚拟机)挂一个磁盘,然后该pod里的进程(容器)才能通过volumeMounts的方式使用挂载磁盘。pod容器内的进程能够看到的文件系统由两部分组成:一部分是Docker像文件系统,另一部分是零或多个volume。每个容器都会单独指定每个volume在其内部的挂载点,即pod资源文件的volumeMounts属性.这也印证了nod内的容器是共享这个volume的。

​ kubernetes的volume机制特点:

  • Kubernetes中,volume的生命周期与pod相同,volume会随着pod的销毁而销毁。然而volume并不会因为pod内某个容器的重启而销毁。所以说Kubernetes的volume的生命周期大于pod内容器,而等于pod。
  • Kubernetes对volume的用途进和场景行了细化,实现了许多特殊用途的volume,比如persistent volume类型,可以不随pod的销毁而销毁,并且支持GCEPersistentDisk以及AWSElasticBlockStore等第三方存储;secret可以用来在pod之前传递诸如用户名密码之类的敏感信息;configmap可以用来在pod之间传递应用的配置信息。

下面介绍常用的19种不同功能的volume,它们的主要功能如表所示。

在这里插入图片描述

volume实现原理分析

​ 在Kubernetes中,volume是作为kubelet的插件的形式而存在的,在kubelet启动的时候,需要
传人一个VolumePlugin数组,VolumePlugin的主要功能功能如下:

  • 对插件本身的初始化操作,比如在empty_ dir类型的volume中,初始化操作就是设定plugins实例的host的名称为这个volume所在的host。
  • 检查该volume插件是否支持创建volume的配置文件中所指定的volume类型。
  • 返回一系列实现各种接口的实例,用以支持对具体类型的volume的操作。

​ 可以看到,VolumePlugin所暴露出来的方法主要方便kubelet管理各种类型的volume。而为了实现对具体类型的volume的操作,如挂载、删除等,需要实现一些列如Builder, Cleaner之类的其他接口,这些接口都扩展了一个共同的Volume接口。

​ Volume接口定义很简单,只有两个函数,一个是得到volume要挂载的目录的路径,另一个是得到当前volume的度量值(即volume已经使用的空间大小,底层文件系统的总空间的大小,以及volume可以用的底层文件系统的容量大小)。在Volume这个基本接口的基础上,又扩展出了一系列的接口,用于进行特定volume类型的操作,比如Builder接口和Cleaner接口用于mount或者unmont一类具体的volume; Attacher与Detacher接口用于将一类特定volume分配到node上,或者解除绑定,等等。

​ 下面我们以empty-dir类型(创建volume时候默认的类型)的volume为例,看看这些接口是如何实现的。

​ 在empty_dir的package中,定义了一个名为emptyDirPlugin的结构体,这个结构体实现了上文所说的VolumePlugin的全部方法,在kubelet启动的时候,emptyDirPlugin的实例会被转化为VolumePlugin接口,并被注册到kubelet的参数中。

​ kubeler可以使用emptyDirPlugin的方法获取实现了各种接口的实例,这些实例就是上文所说的实现了Volume接口的struct所生成的。在empty-dir中,名为emptyDir的结构体实现了上文所说的接口,比如Builder, Deleter等,用于执行具体的挂载以及删除的操作。

volume使用案例
  • EmptyDir

    ​ EmptyDir类型的volume创建于pod被调度到某个宿主机上的时候,而同一个pod内的容器都能读写EmptyDir中的同一个文件。一旦这个pod离开了这个宿主机,EmptyDir中的数据就会被永久删除。所以目前EmptyDir类型的volume主要用作临时空间,比如Web服务器写日志或者tmp文件需要的临时目录。

    使用步骤如下:

    首先,需要在pod内声明了一个名称为redis-data的volume。

    volumes:
    	- name: redis-data
    		emptyDir:{}
    

    然后,才能在容器中挂在这个volume。

    volumeMounts:
    	# mountPath即volume在容器内的挂载点路径
    	- mountPath: /redis-master-data
    	# name字段必须与下面的volume名匹配
          name: redis-data
    

    ​ 按照以上的配置文件创建了pod之后,可以在宿主机上的/var/lib/kubelet/pods/<pod uid>/volumes/kubernetes.io~empty-dir目录下查看到新生成的名为redis-data的目录。如果登录
    到该pod创建的docker容器中,也可以看到名为/redis-master-data的目录,这个目录与宿主机上的redis-data目录是同一个。

  • HostDir

    ​ HostDir属性的volume使得对应的容器能够访问当前宿主机上的指定目录。例如,需要运行一个访问Docker系统目录的容器,那么就使用/var/lib/docke:目录作为一个HostDir类型的volume;或者要在一个容器内部运行cAdvisor,那么就使用/dev/cgroups目录作为一个HostDir类型的volume。一旦这个pod离开了这个宿主机,HostDir中的数据虽然不会被永久删除,但数据也不会随pod迁移到其他宿主机上。因此,需要注意的是,由于各个宿主机上的文件系统结构和内容并不一定完全相同,所以相同pod的HostDir可能会在不同的宿主机上表现出不同的行为。

  • NFS

    ​ NFS类型的volume允许一块现有的网络硬盘在同一个pod内的容器间共享。先来看下面这个在
    一个pod中使用NFS volume的例子。

    在这里插入图片描述

    ​ 在这个例子中,可以看到一个名为myshare的volume挂载到容器testpd文件系统的/var/www/html/mount-test路径上。该volume被定义为NFS类型,非只读类型,来自于IP为172.17.0.2的NFS服务器,该NFS服务器对外暴露/tmp作为共享目录。

persistent volume

​ pv(PersistentVolume)与Kubernetes中nfs等其他volume类型不同,具有与pod独立的生命周期,并有单独的管理API。pvc(PersistentVolumeClaim)是用户对于某存储资源的请求,它充当了pod和pv之间的“中介”。在创建pod时,用户可以指定volume的来源为pvc,并在其中指定希望绑定的pv资源的规格,如存储空间大小、访问模式等。之后,Kubernetes会在创建pod时根据pvc的需求,将之与可选的pv匹配,匹配成功后pod就可以使用pv所代表的volume资源。

​ 用户使用pvc和pv的流程一般包含如下几个阶段:

  • pv创建阶段:在这个阶段中,集群的管理员可以通过Kubernetes所提供的API提前创建好多种规格的pv资源,将来供pod使用。
  • pvc与pv绑定阶段:master节点会不断对状态为pending的pvc进行遍历,所以一旦用户创建了新的pvc对象,master就会从所有的volume中找出最合适的pv,选择的过程会参考pvc列出的storage和accessmode两方面的参数。一旦匹配成功,pv以及pvc的状态都会变为Bound,该pv不可以再被其他的pvc所使用。
  • pod使用pvc阶段:当Kubernetes启动pod时,可以通过pod使用的pvc中所持有的pv信息,找到对应的pv并挂载到pod中。
  • 释放pv阶段:当用户使用完pv之后,可以通过删除pvc来释放其所持有的pv资源。
  • 回收阶段:Kubernetes会回收被释放了的pv。目前支持的回收策略包括:Retained(资源保持)、Recycled(资源回收)、Deleted(资源删除)几种不同的方式。
Kubernetes (K8S)讲解存储/网络/运维 本文是关于 K8S 的技术文章简介。首先是基本概念,包括 K8S 的定义、在容器编排领域的地位,以及 API Server 等核心组件功能。接着阐述资源对象,如 Pod 概念、生命周期,Deployment、StatefulSet、DaemonSet 的区别与应用场景,还有 Service 类型与作用。然后是存储部分,涵盖存储卷类型及 PV 和 PVC 的关系与原理。网络方面涉及 K8S 网络模型原理和 CNI 插件。最后是运维与监控,包括 K8S 集群监控方法和集群升级回滚的流程及注意事项。 阅读详情

相关推荐

K8S面试题总结

1、kubenetes针对pod资源对象的健康监测机制? 答:提供了三类probe(探针)来执行对pod的健康监测: 1)livenessProbe探针:可以根据用户自定义规则来判定pod是否健康,用于判断容器是否处于Running状态,如果不是,kubelet就会杀掉该容器,并根据重启策略做相应的处理。如果容器不包含该探针,那么kubelet就会默认返回值都是success; 2)ReadinessProbe探针:同样是可以根据用户自定义规则来判断pod是否健康,容器服务是否可用(Rea...

孤独天狼的博客 1万+

k8s从入门到放弃-第八章 数据存储

文章目录8.1基本存储8.1.1 EmptyDir8.1.2 HostPath8.1.3 NFS8.2.1 PV和PVC8.2.2 PV8.2.3 PVC8.2.4生命周期8.3.1 ConfigMap8.3.2 Secret 在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数 据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes 引入了Volume的概念。 Volume是Pod中能够被多个容器访问的共享目

每天进步一点点!!! 644

Kubernetes数据存储机制详解

PVC是对PV的申请。Volume提供了对各种存储的抽象,容器在使用Volume读写数据的时候,不需要关心数据到底是存放在本地节点的文件系统中,还是存储在云硬盘上。这个pod是启动nginx容器,然后把主机的/tmp目录挂载到nginx容器的网站根目录下,这里共享的是/tmp目录,如果是挂载其他的目录的话,要确保每个节点上都有这个目录。为了持久化保存在容器的数据,我们可以使用Kubernetes Volume,Volume的生命周期独立于容器,Pod中的容器可能被销毁和重建,但Volume会被保留。

悦分享 262

十一、详解Kubernetes存储类型的技术原理

Kubernetes存储类型技术原理是Kubernetes中的一个重要概念,它允许管理员定义如何将数据存储到容器中。Kubernetes支持多种存储类型,管理员可以根据应用程序的需求来选择适合的存储类型,并使用存储卷、存储类、持久卷声明和持久卷等对象来实现存储。

左安青的博客 724

深入解析Kubernetes(K8s)工作原理:从架构到核心机制

设计理念:K8s不直接调度单个容器,而是将多个密切相关的容器(如主容器+辅助容器)封装为一个Pod,共享网络命名空间和存储卷。关键属性容器定义:spec.containers数组,包含镜像、资源限制、探针配置等。网络配置:每个Pod分配一个独立IP(Pod IP),同一Node内Pod通过localhost通信。生命周期钩子:PostStart/PreStop钩子,用于容器启动后/停止前的自定义操作。状态流转。

AI天才研究院 929

微信小程序实现锚点效果 scroll-view的scroll-into-view属性

小程序中实现锚点效果,可以直接使用scroll-view的scroll-into-view属性就可以实现锚点效果,比较方便简单。那么需要用到scroll-view那些参数呢,下面具体讲讲:效果展示: wxml **注意:**viewid值是动态的,通过setData设置即可。js wxss......

FaxMiao的博客 5447

【云原生】kubernetes之数据存储详解

一、存储卷的作用一、存储卷的作用容器部署过程中一般有以下三种数据:• 启动时需要的初始数据,例如配置文件• 启动过程中产生的临时数据,该临时数据需要多个容器间共享• 启动过程中产生的持久化数据, 例如MySQL的data目录二、数据卷概述•Kubernetes中的Volume提供了在容器中挂载外部存储的能力•Pod需要设置卷来源(spec.volume)和挂载点(spec.containers.volumeMounts)两个信息后才可以使用相应的。

康师傅没有眼泪 2803

Bootloader Design of PIC18 series MCU

注意:下列描述是在PIC单片机上启用Bootloader的一个相关知识的近似完备集。所有需要了解的,与bootloader与用户态程序交互的理论知识都已给出。包含内存组织,跳转,中断等必备功能的描述。

含光左卫的工作笔记集 1266

K8S基础

Service是一组运行相同应用程序的pod的逻辑集和,提供一个固定的IP地址和DNS名称,及时pod变化,Service地址不变。K8S的网络设计基本目标:容器间互信通信,Pod间互信通信,与外部通信。

qq_35628964的博客 193

grafana对接zabbix数据展示

【配置】点击【模板】点击【创建模板】添加三个监控项:【名称】搜索【】创建的模板;点击上方【监控项】,点击创建【监控项】点击上方【触发器】点击【创建触发器】主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】查看:左侧点击【监测】点击【主机】点击【Zabbix server】点击最新数据,找到添加的三个模板主机关联监控模板:左侧【配置】点击 【主机】点击【Zabbix server】把监控模板用起来① 明确获取指标数据的方法。

2401_83883919的博客 6591

如何使用superpowers

"这个 bug 帮我修一下" → 我会自动走 systematic-debugging → TDD → verify 流程。- "帮我添加一个登录功能" → 我会自动走 brainstorming → plan → TDD → verify 流程。只要任务有 1% 的可能性适用某个技能,我就会先调用它再行动。→ TDD(测试驱动开发)→ verification(验证)→ code review(代码审查)提出需求 → brainstorming(头脑风暴)→ writing-plans(编写计划)

xiaojingjianqiang的博客 610

Java实战教程:【原理剖析】K8S存储原理剖析与实战

今天这篇文章我将为大家讲解K8S的存储原理。 基础相对薄弱的伙伴,有给大家整理视频学习教程,文末详细了解! 说到数据存储,大家首先想到的是什么? 系统日志? 应用软件? 大数据? 临时文件? 配置文件? 密码、密钥? 不管你有什么需求,Kubernetes都能帮你搞定。 对于需求1-4,我们可以采用Volume的方式; 对于需求5,可以采用Configmap;对于需求6,则要采用...

qfluohao的博客 237

如何将一个向量投影到一个平面上_线性代数19——投影矩阵和最小二乘

一维空间的投影矩阵  先来看一维空间内向量的投影:  向量p是b在a上的投影,也称为b在a上的分量,可以用b乘以a方向的单位向量来计算,现在,我们打算尝试用更“贴近”线性代数的方式表达。  因为p趴在a上,所以p实际上是a的一个子空间,可以将它看作a放缩x倍,因此向量p可以用p = xa来表示,只要找出x就可以了。因为a⊥e,所以二者的点积为0:  我们希望化简这个式子从而得出x:  x是一个实数...

weixin_39741101的博客 5227

Java实战学习教程:【原理剖析】K8S存储原理剖析与实战

今天这篇文章我将为大家讲解K8S的存储原理。 基础相对薄弱的伙伴,有给大家整理视频学习教程,文末详细了解! 说到数据存储,大家首先想到的是什么? 系统日志? 应用软件? 大数据? 临时文件? 配置文件? 密码、密钥? 不管你有什么需求,Kubernetes都能帮你搞定。 对于需求1-4,我们可以采用Volume的方式; 对于需求5,可以采用Configmap;对于需求6,则要采用...

chen801090的博客 193

【30天从零玩转AI应用开发】第16篇:智能体Agent入门——ReAct框架原理+首个会思考、会动手的AI实战

摘要: 本文介绍了AI智能体(Agent)的核心概念及其与普通大模型(LLM)的区别。通过ReAct(Reason+Act)框架,智能体实现了自主思考、调用工具和分步执行的能力。文章详细讲解了LangChain Agent的四大组件,并推荐新手使用ZERO_SHOT_REACT_DESCRIPTION类型。最后提供了一个完整的智能体实战代码示例,该智能体具备数学计算和天气查询功能,能够自主选择工具完成任务,展示了AI从”被动回答“到”主动行动“的关键进化。

在上海谋生的软件喵记录喵生 626

使用MATLAB结合EasySpin进行ESR模拟的详细步骤及示例代码

安装EasySpin:确保你已经安装了EasySpin工具箱,它可以帮助你进行ESR模拟。你可以从EasySpin的官方网站(https://easyspin.org/)下载并安装。准备实验数据:将实验得到的EPR数据整理成合适的格式,一般包含磁场(Magnetic Field)和信号强度(Intensity)两列。进行模拟:使用EasySpin的函数对单线态氧自由基和超氧自由基进行模拟。调整参数:通过调整模拟参数,使模拟得到的峰型和峰位置与实验数据尽可能匹配。导出数据。

AI的内部世界的博客 2003

Kubernetes hostPath存储卷核心解析:从原理到生产避坑

本文深入解析了Kubernetes中hostPath存储卷的使用场景与风险。hostPath直接将宿主机目录挂载到容器,虽然操作简单,但存在数据无法跨节点持久化、安全隔离被打破等严重问题。文章详细剖析了type字段的权限陷阱,列举了fsGroup无效、Socket类型异常等典型坑点,并提供了安全使用清单。核心结论:hostPath仅适用于DaemonSet类系统组件(如日志采集器)和开发测试环境,生产业务应选用LocalPV或PVC+CSI方案。文中还给出了权限问题的4种解决方案和验证方法,强调必须显式指定

kguogao的博客 250

包成功安装tiny-cuda-nn,记录安装过程中的问题解决,附带pytorch3d安装【踩坑指南】

该包可以显著提高NeRF训练速度,是和NeRFstudio等框架中,必须使用的。本文提供tiny-cuda-nn可以安装的完整包的下载链接,可以直接上传到项目中安装。附带笔者遇到的问题的解决方案。

zik的博客 7029

k8s基本介绍及核心技术简介(1)

1. k8s基本介绍 kubernetes,简称 K8s,是用 8 代替 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes 提供了应用部署,规划,更新,维护的一种机制。 传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式

chenbj123的博客 6375

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

解决K8s持久化存储痛点:Kubernetes The Hard Way存储卷实战指南

你是否还在为容器数据丢失而烦恼?部署了无状态服务却不知如何处理数据库存储需求?本文将通过Kubernetes The Hard Way项目的实战场景,带你从零掌握存储卷(Volume)配置与管理,解决容器数据持久化难题。读完本文你将获得:理解K8s存储卷核心概念、掌握PV/PVC配置方法、学会调试常见存储问题的技巧。 ## 存储卷核心概念与架构 Kubernetes存储卷(Volume)是解决

gitblog_01102的博客 1025

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

K8s设计架构与核心原理详解

Kubernetes设计架构与核心原理详解

qq_49096347的博客 1639

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

K8S工作原理

kubernetes(k8s)是docker容器用来编排和管理的工具 我们通过kubectl向k8s Master发出指令。kubernetes Master主要是提供API Server、Scheduler、Controller组件,接收kubectl的命令,从Node节点获取Node的资源信息,并发出调度任务。Node节点提供kubelet、kube-proxy,每个node节点都安装...

Super_man54188的博客 1842

Kubernetes(k8s)全面解析:从入门到实践

本文系统介绍了Kubernetes容器编排平台的核心原理与实践。主要内容包括:Kubernetes基本概念(Pod、Node、Deployment等)及其集群架构(控制平面+工作节点);实战示例展示Nginx应用的部署和服务暴露;深入解析网络模型(Pod通信、Service负载均衡)和存储管理(PV、StorageClass);详细说明监控日志体系(Prometheus+Alertmanager+Grafana架构)。文章通过理论结合实践的方式,帮助读者掌握Kubernetes的核心功能与应用部署方法,为构

qq_53742640的博客 1278

一文读懂 K8s 持久化存储流程

众所周知,K8s 的持久化存储(Persistent Storage)保证了应用数据独立于应用生命周期而存在,但其内部实现却少有人提及。K8s 内部的存储流程到底是怎样的?PV、PVC、StorageClass、Kubelet、CSI 插件等之间的调用关系又如何,这些谜底将在本文中一一揭晓。...

GitChat 629

K8s详细学习笔记 第一章:K8s入门与核心概念

Kubernetes(K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。其核心架构由Master节点(控制平面)和Worker节点组成,通过API Server、etcd、Scheduler等组件协同工作,实现声明式管理和自动修复。K8s提供Pod、Service、Volume等核心API对象,解决了微服务架构下的部署复杂性、服务发现等难题,成为云原生的"数据中心操作系统"。etcd作为集群状态存储中心,确保数据一致性和高可用性,是整个系统的关键组件。

qq_38334677的博客 1587
上一篇: kubernetes核心组件解读
下一篇: kubernetes网络核心原理
KingDragon_Baron
博客等级 码龄12年 55粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值