当前位置: 首页 > news >正文

k8sday15

今天的学习主要是针对上一组学习,也就是k8s数据存储的补充,因为现在网络上的学习各有不同,所以我在对比了几类课程后,再进行融合等等操作,当然,今天的补充知识,我之后会将其更新回k8sday12---k8sday14

补充一、PV和PVC的动态供给

​ 之前我们在PV和PVC章节所讲的是静态供给策略,用户将需要的资源要求发送给PVC来进行PV的匹配,如果有符合的就绑定,没有就不绑定,如用户要2.88GI,现在有的PV只有3GI且没有和其他的PVC绑定,这个3GI的PV就会和2.88GI的PVC绑定,但是如果这时候又有用户要0.18GI,当前没有和他匹配的PV,就不会进行绑定。

​ 现在所讲的动态供给策略就是对静态供给的一种优化,因为静态补给是我们管理员已经提前创建好了PV,但不一定是用户所需要的,所以可能导致PV和PVC不绑定,即使满足绑定要求,也不一定是最好的,如3GI的PV和2.88GI的PVC绑定。而动态供给是用户提出需求给PVC,PVC和云供应商在集群内的抽象(存储类)沟通,这时候按照请求来“定制”一个PV,使之绑定。

精简总结:静态PV是管理员提前创建好的,动态PV是等提出需求后按照需求创建的

StorageClass 是 Kubernetes 用来 “抽象并自动化持久存储供给(Provisioning)” 的一组对象。一句话:告诉集群“我需要什么类型、什么性能、多少副本的存储”,集群就按这个模板自动给你创建 PV。

存储类核心功能说明
动态供给PVC(PersistentVolumeClaim)一旦声明 StorageClass,集群会自动创建匹配的 PV,无需管理员手工建 PV。
参数模板存储类型、IOPS、副本数、加密、磁盘格式等全部写在 StorageClass 里,PVC 只需引用名字。
回收策略可指定 PV 释放后 Delete / Retain / Recycle 的行为。

提供一个简单StorageClass的示例:

  apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:name: sc-test                      # PVC 通过这个名字引用(可自定义)provisioner: kubernetes.io/aws-ebs   # 底层存储驱动parameters:type: gp3                          # AWS EBS 的 gp3 SSDiops: "3000"encrypted: "true"reclaimPolicy: Delete                # PVC 删除后自动回收 EBS

常见命令:

  # 查看集群有哪些 StorageClasskubectl get sc​# 查看详情kubectl describe sc <你的存储类名称>​# 设置默认 StorageClasskubectl patch sc fast-ssd -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
常见云厂商provisioner 示例
AWSkubernetes.io/aws-ebs
GCPkubernetes.io/gce-pd
Azurekubernetes.io/azure-disk / azurefile
阿里云diskplugin.csi.alibabacloud.com
腾讯云com.tencent.cloud.csi.cbs
本地rancher.io/local-path, openebs.io/local, rook-ceph.rbd.csi.ceph.com

想使用动态供给还需要我们完成k8s集群安全机制的学习,进行授权管理等等,所以现在就不演示

补充二、元数据投影 Volume

Downward API 是 Kubernetes 提供的一种 “自省” 机制:把 Pod / 容器自身的元数据(而不是用户配置)以“文件”或“环境变量”的形式注入到容器内部,方便应用动态获取当前运行上下文,而无需调用 Kubernetes API。

精简总结:把 Kubernetes 自己知道的 Pod 信息告诉容器—— 不是存储,只是 只读投影。

Downward API也是注入的策略

Ⅰ、使用(消费)方式

①、作为环境变量(不支持热更新)
  apiVersion: v1kind: Podmetadata:name: demo                            # 定义一个Pod,名字叫demospec:containers:- name: appimage: busybox:1.36.1               # 镜像版本command: ["sh","-c","echo Running as $MY_POD_NAME in $MY_NODE"]# command命令 指容器启动后打印环境变量 MY_POD_NAME 和 MY_NODE 的值# 将当前Pod 的元数据注入容器env:- name: MY_POD_NAME                 # 容器内已有变量valueFrom:                      # 值来源fieldRef:fieldPath: metadata.name      # 将当前 Pod 的metadata.name 即demo给 MY_POD_NAME 变量- name: MY_NODE                     # 容器内已有变量valueFrom:                        # 值来源fieldRef:fieldPath: spec.nodeName      # 将当前Pod 的spec.nodeName 给 MY_POD_NAME 变量
②、作为卷挂载(支持热更新)
  apiVersion: v1kind: Podmetadata:name: demolabels:myname: downwardapitest          # 该容器的 labels 标签,将被写入下方生成的 labels 文件spec:containers:- name: appimage: busybox:1.36.1command: ["sh","-c","cat /etc/podinfo/labels && sleep 3600"]# 容器启动后,把标签文件打印出来再保持运行volumeMounts:- name: podinfo                   # 要挂载的卷的名称mountPath: /etc/podinfo         # 要挂载到的路径readOnly: true                  # 只读volumes:- name: podinfo                     # 定义一个叫 podinfo 卷downwardAPI:                      # 卷的类型是 DownwardAPIitems:- path: "labels"                # 在mountPath路径下生成一个labels文件fieldRef:                     # 文件内容来源fieldPath: metadata.labels  # 将该容器的 labels 标签全部写入刚刚生成的 labels 文件- path: "cpu_limit"             # 在 mountPath 路径下生成一个 cpu_limit 文件resourceFieldRef:             # 文件内容来源containerName: app          # 指定 containerName 叫 app 的容器resource: limits.cpu        # 将 CPU 的 limit 指写入刚刚生成的 cpu_limit 文件# 当你对文件进行更新修改后,其对应的文件回进行热更新,同步你的更新

完成了今天的补充工作,下周将继续我们调度器,安全机制等等的学习,学了安全机制后,我们会将现在的downward API和动态PV供给进行授权管理以完成完整学习

http://www.dtcms.com/a/347035.html

相关文章:

  • 【typenum】 24 去除尾部零的特性(private.rs片段)
  • [激光原理与应用-320]:结构设计 - Solidworks - 软件工具UI组织的核心概念
  • 【软件设计模式】策略模式
  • 【MongoDB与MySQL对比】
  • 【React ✨】从零搭建 React 项目:脚手架与工程化实战(2025 版)
  • SpringBoot applicationContext.getBeansOfType获取某一接口所有实现类,应用于策略模式
  • Claude Code快捷键介绍(Claude Code命令、Claude Code指令、Claude Code /命令、Claude命令、Claude指令)
  • GEO优化供应商:AI搜索时代的“答案”构建与移山科技的引领,2025高性价比实战指南
  • LeetCode Hot 100 第二天
  • GaussDB 数据库架构师修炼(十八) SQL引擎-计划管理-SQL PATCH
  • MSPM0G3507环境搭建
  • 【基础-判断】设计师在设计动效时,点击响应性、运动帧率、跟手性不需要设定,根据不同机型的性能能力系统设定即可
  • 以太坊智能合约地址派生方式:EOA、CREATE 和 CREATE2
  • 水泉村信息化服务小程序的设计与实验
  • kettle从入门到精通 第105课 ETL之kettle 解决api接口无返回页数和记录数的分页问题
  • 1.10 本地模型调用编码实战(一)
  • Flink框架:算子链的介绍
  • 梯度下降(线性回归为例)
  • 深度学习入门:神经网络
  • 【KO】前端面试题六
  • Idea中 lombok 在“测试类中-单元测试”运行失败及解决方法
  • 怎样避免游戏检测到云手机?
  • C++矩阵类设计与实现:高效、健壮的线性代数工具
  • 文字学的多维透视:从符号系统到文化实践
  • 解密 Kubernetes 权限管理:supplementalGroups 的魔力与 fsGroup 的选择
  • Linux服务器systemd服务配置详细指南
  • 【线程池】ThreadPoolTaskExecutor和redis的配置案例
  • 《UE教程》第一章第十一回——UE5.6打包安卓
  • Python 字符串查找,计数,判断,修改
  • Linux服务器利用Systemd配置定时任务