爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      k8s学习笔记-数据存储

      首页 知识中心 云计算 文章详情页

      k8s学习笔记-数据存储

      2023-04-25 10:20:57 阅读次数:138

      k8s

      容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes引入了Volume的概念。

      k8s学习笔记-数据存储

      Volume是pod中能够被多个容器访问的共享目录,它被定要到pod上,然后被一个pod里面的多个容器挂载到具体的文件目录下,k8s通过volume实现同一个pod中不同的容器之间的数据共享以及数据的持久化存储。 Volume的生命周期不与pod中单个容器生命周期相关。当容器终止或者重启的时候,Volumne中的数据也不会丢失。

      k8s学习笔记-数据存储

      k8s的Volume支持多种类型,比较常见的有下面几个:

      • 简单存储:EmptyDir、HostPath、NFS
      • 高级存储:PV、PVC
      • 配置存储:ConfigMap、Secret

      基本存储

      EmptyDir

      ​ EmptyDir是最基础的Volume类型,一个EmptyDir就是Host上的一个空目录。

      EmptyDir是pod被分配到Node时候创建的,它的初始内容为空,并且无需指定宿主机上对应的目录文件,因此k8s会自动分配一个目录,当pod销毁的时候,EmptyDir中的数据也会被永久的删除。它的用途:

      • 临时空间,例如用作某些应用程序运行的时候需要的临时目录,并且无需永久保存。
      • 一个容器需要从零位一个容器中获取数据的目录(多容器共享目录)

      示例

      在一个POD中准备两个容器nginx和busybox,然后申明一个Volume分别挂再两个容器的目录中,然后nginx容器负责向Volume中写日志,busybox中通过命令将日志内容读到控制台。

      k8s学习笔记-数据存储

      创建一个volume-emptydir.yaml,如下所示:

      k8s学习笔记-数据存储

      apiVersion: v1
      kind: Pod
      metadata:
      name: volume-emptydir
      namespace: dev
      spec:
      containers:
      - name: nginx
      image: nginx:1.14-alpine
      ports:
      - containerPort: 80
      volumeMounts: # 将logs-volume挂在到nginx容器中,对应的目录为 /var/log/nginx
      - name: logs-volume
      mountPath: /var/log/nginx
      - name: busybox
      image: busybox:1.30
      command: ["/bin/sh","-c","tail -f /logs/access.log"] # 初始命令,动态读取指定文件中内容
      volumeMounts: # 将logs-volume 挂在到busybox容器中,对应的目录为 /logs
      - name: logs-volume
      mountPath: /logs
      volumes: # 声明volume, name为logs-volume,类型为emptyDir
      - name: logs-volume
      emptyDir: {}
      # 创建Pod
      [root@master ~]# kubectl create -f volume-emptydir.yaml
      pod/volume-emptydir created

      # 查看pod
      [root@master ~]# kubectl get pods volume-emptydir -n dev -o wide
      NAME READY STATUS RESTARTS AGE IP NODE ......
      volume-emptydir 2/2 Running 0 97s 10.244.1.100 node1 ......

      # 通过podIp访问nginx
      [root@master ~]# curl 10.244.1.100
      ......

      # 通过kubectl logs命令查看指定容器的标准输出
      [root@master ~]# kubectl logs -f volume-emptydir -n dev -c busybox
      10.244.0.0 - - [13/Apr/2020:10:58:47 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

      k8s学习笔记-数据存储

      k8s学习笔记-数据存储

      HostPath

      如果向简单的将数据持久化到主机中,可以选择hostpath

      HostPath就是将Node中主机的一个实际目录挂载到Pod中,以供容器使用,这样的设计就可以保证Pod销毁了,但是数据依旧可以存在Node主机上。

      k8s学习笔记-数据存储

      创建一个volume-hostpath.yaml:

      k8s学习笔记-数据存储

      apiVersion: v1
      kind: Pod
      metadata:
      name: volume-hostpath
      namespace: dev
      spec:
      containers:
      - name: nginx
      image: nginx:1.17.1
      ports:
      - containerPort: 80
      volumeMounts:
      - name: logs-volume
      mountPath: /var/log/nginx
      - name: busybox
      image: busybox:1.30
      command: ["/bin/sh","-c","tail -f /logs/access.log"]
      volumeMounts:
      - name: logs-volume
      mountPath: /logs
      volumes:
      - name: logs-volume
      hostPath:
      path: /root/logs
      type: DirectoryOrCreate # 目录存在就使用,不存在就先创建后使用

      ​关于type的值的一点说明:

      DirectoryOrCreate 目录存在就使用,不存在就先创建后使用

      Directory 目录必须存在

      FileOrCreate 文件存在就使用,不存在就先创建后使用

      File 文件必须存在

      Socket unix套接字必须存在

      CharDevice 字符设备必须存在

      BlockDevice 块设备必须存在

      # 创建Pod
      [root@master ~]# kubectl create -f volume-hostpath.yaml
      pod/volume-hostpath created

      # 查看Pod
      [root@master ~]# kubectl get pods volume-hostpath -n dev -o wide
      NAME READY STATUS RESTARTS AGE IP NODE ......
      pod-volume-hostpath 2/2 Running 0 16s 10.244.1.104 node1 ......

      #访问nginx
      [root@master ~]# curl 10.244.1.104

      # 接下来就可以去host的/root/logs目录下查看存储的文件了
      ### 注意: 下面的操作需要到Pod所在的节点运行(案例中是node1)
      [root@node1 ~]# ls /root/logs/
      access.log error.log

      # 同样的道理,如果在此目录下创建一个文件,到容器中也是可以看到的

      NFS

       HostPath可以解决数据持久化的问题,但是一旦Node节点故障了,Pod如果转移到了别的节点,又会出现问题了,此时需要准备单独的网络存储系统,比较常用的用NFS、CIFS。

      ​ NFS是一个网络文件存储系统,可以搭建一台NFS服务器,然后将Pod中的存储直接连接到NFS系统上,这样的话,无论Pod在节点上怎么转移,只要Node跟NFS的对接没问题,数据就可以成功访问

      k8s学习笔记-数据存储

      准备NFS服务器

      # 在master上安装nfs服务
      [root@master ~]# yum install nfs-utils -y

      # 准备一个共享目录
      [root@master ~]# mkdir /root/data/nfs -pv

      # 将共享目录以读写权限暴露给192.168.109.0/24网段中的所有主机
      [root@master ~]# vim /etc/exports
      [root@master ~]# more /etc/exports
      /root/data/nfs *(rw,no_root_squash,no_all_squash,sync)

      # 启动nfs服务
      [root@master ~]# systemctl start nfs

      每个节点都安装nfs,目的是为了node可以驱动nfs设备

      # 在node上安装nfs服务,注意不需要启动
      [root@master ~]# yum install nfs-utils -y

      编写yaml文件

      apiVersion: v1
      kind: Pod
      metadata:
      name: volume-nfs
      namespace: dev
      spec:
      containers:
      - name: nginx
      image: nginx:1.17.1
      ports:
      - containerPort: 80
      volumeMounts:
      - name: logs-volume
      mountPath: /var/log/nginx
      - name: busybox
      image: busybox:1.30
      command: ["/bin/sh","-c","tail -f /logs/access.log"]
      volumeMounts:
      - name: logs-volume
      mountPath: /logs
      volumes:
      - name: logs-volume
      nfs:
      server: 172.16.50.149 #nfs服务器地址
      path: /root/data/nfs #共享文件路径

      运行pod

      # 创建pod
      [root@master ~]# kubectl create -f volume-nfs.yaml
      pod/volume-nfs created

      # 查看pod
      [root@master ~]# kubectl get pods volume-nfs -n dev
      NAME READY STATUS RESTARTS AGE
      volume-nfs 2/2 Running 0 2m9s

      # 查看nfs服务器上的共享目录,发现已经有文件了
      [root@master ~]# ls /root/data/
      access.log error.log

      k8s学习笔记-数据存储

      PV和PVC

      由于k8s支持的存储系统有很多,为了屏蔽底层存储实现细节,方便用户使用,引用了PV和PVC两种资源对象。

      PV(Persistent Volume)是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下PV由kubernetes管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。

      PVC(Persistent Volume Claim)是持久卷声明的意思,是用户对于存储需求的一种声明。换句话说,PVC其实就是用户向kubernetes系统发出的一种资源需求申请。

      k8s学习笔记-数据存储

      k8s学习笔记-数据存储

      使用了PV和PVC之后,工作可以得到进一步细分:

      • 存储:存储工程师维护
      • PV:K8S管理员维护
      • PVC:k8s用户维护

      PV

      PV是存储的资源的抽象,以下是清单文件

      apiVersion: v1  
      kind: PersistentVolume
      metadata:
      name: pv2
      spec:
      nfs: # 存储类型,与底层真正存储对应
      capacity: # 存储能力,目前只支持存储空间的设置
      storage: 2Gi
      accessModes: # 访问模式
      storageClassName: # 存储类别
      persistentVolumeReclaimPolicy: # 回收策略


      相关配置说明

      • 存储类型

      底层实现存储的类型,k8s支持多种存储类型,每种存储类型的配置都有所差异

      • 存储能力(capactiy)

      目前只自持存储空间的设置(storage=1Gi),以后支持IOPS,吞吐量等指标的配置

      • 访问模式(accessModes)

      用于描述用户用用对存储资源的访问权限,访问权限包括以下集中方式:

      • ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载
      • ReadOnlyMany(ROX): 只读权限,可以被多个节点挂载
      • ReadWriteMany(RWX):读写权限,可以被多个节点挂载

      需要注意的是,底层不同的存储而理性可能支持的访问模式不同

      • 回收策略(persistentVolumeReclaimPolicy)

      当PV不在被使用了之后,对其的处理方式。目前支持三种策略:

      • Retain (保留) 保留数据,需要管理员手工清理数据
      • Recycle(回收) 清除 PV 中的数据,效果相当于执行 rm -rf /thevolume/*
      • Delete (删除) 与 PV 相连的后端存储完成 volume 的删除操作,当然这常见于云服务商的存储服务

      需要注意的是,磁层不同的存储类型可能支持的回收策略不同。

      • 存储类别

      PV可以通过 storageClassName参数来指定一个存储类别

      • 具有特定类别的PV只能与请求了该类别的PVC进行绑定
      • 未设定类别的PV只能与不请求任何类别的PVC进行绑定


      • 状态(status)

      一个PV的生命周期中,可能会处于4种不同的阶段:

      • Available(可用): 表示可用状态,还未被任何 PVC 绑定
      • Bound(已绑定): 表示 PV 已经被 PVC 绑定
      • Released(已释放): 表示 PVC 被删除,但是资源还未被集群重新声明
      • Failed(失败): 表示该 PV 的自动回收失败

      实验

      使用NFS作为存储,来演示PV的使用,创建3个PV,对应NFS种的3个暴露路径。

      1-准备NFS

      # 创建目录
      [root@master ~]# mkdir /root/data/{pv1,pv2,pv3} -pv

      # 暴露服务
      [root@master ~]# more /etc/exports
      /root/data/pv1 *(rw,no_root_squash,no_all_squash,sync)
      /root/data/pv2 *(rw,no_root_squash,no_all_squash,sync)
      /root/data/pv3 *(rw,no_root_squash,no_all_squash,sync)

      # 重启服务
      [root@master ~]# systemctl restart nfs

      2-创建pv.yaml

      apiVersion: v1
      kind: PersistentVolume
      metadata:
      name: pv1
      spec:
      capacity:
      storage: 1Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
      path: /root/data/pv1
      server: 172.16.50.149

      ---

      apiVersion: v1
      kind: PersistentVolume
      metadata:
      name: pv2
      spec:
      capacity:
      storage: 2Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
      path: /root/data/pv2
      server: 172.16.50.149

      ---

      apiVersion: v1
      kind: PersistentVolume
      metadata:
      name: pv3
      spec:
      capacity:
      storage: 3Gi
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
      path: /root/data/pv3
      server: 172.16.50.149


      # 创建 pv
      [root@master ~]# kubectl create -f pv.yaml
      persistentvolume/pv1 created
      persistentvolume/pv2 created
      persistentvolume/pv3 created

      # 查看pv
      [root@master ~]# kubectl get pv -o wide
      NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS AGE VOLUMEMODE
      pv1 1Gi RWX Retain Available 10s Filesystem
      pv2 2Gi RWX Retain Available 10s Filesystem
      pv3 3Gi RWX Retain Available 9s Filesystem

      k8s学习笔记-数据存储

      PVC

      pvc是资源的申请,用来申明对存储空间,访问模式,存储类别需求信息

      清单文件

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: pvc
      namespace: dev
      spec:
      accessModes: # 访问模式
      selector: # 采用标签对PV选择
      storageClassName: # 存储类别
      resources: # 请求空间
      requests:
      storage: 5Gi

      参数说明:

      • 访问模式(accessModes)

      用于描述用户对应存储资源的访问权限

      • 选择条件(selector)

      通过Lable Selector的设置,可使用PVC对于系统种已存在的PV进行筛选

      • 存储类别(storageClassName)

      PVC在定义的时候可以设定需要的后端存储类别,只有设置了该class的pv擦能被系统选出

      • 资源请求(Resources)

      描述对存储资源的请求

      实验

      1-创建pvc.yaml,申请pv

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: pvc1
      namespace: dev
      spec:
      accessModes:
      - ReadWriteMany
      resources:
      requests:
      storage: 1Gi

      ---

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: pvc2
      namespace: dev
      spec:
      accessModes:
      - ReadWriteMany
      resources:
      requests:
      storage: 1Gi

      ---

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
      name: pvc3
      namespace: dev
      spec:
      accessModes:
      - ReadWriteMany
      resources:
      requests:
      storage: 5Gi
      # 创建pvc
      [root@master ~]# kubectl create -f pvc.yaml
      persistentvolumeclaim/pvc1 created
      persistentvolumeclaim/pvc2 created
      persistentvolumeclaim/pvc3 created

      # 查看pvc
      [root@master ~]# kubectl get pvc -n dev -o wide
      NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE
      pvc1 Bound pv1 1Gi RWX 15s Filesystem
      pvc2 Bound pv2 2Gi RWX 15s Filesystem
      pvc3 Bound pv3 3Gi RWX 15s Filesystem

      # 查看pv
      [root@master ~]# kubectl get pv -o wide
      NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM AGE VOLUMEMODE
      pv1 1Gi RWx Retain Bound dev/pvc1 3h37m Filesystem
      pv2 2Gi RWX Retain Bound dev/pvc2 3h37m Filesystem
      pv3 3Gi RWX Retain Bound dev/pvc3 3h37m Filesystem

      k8s学习笔记-数据存储

      2- 创建pods.yaml,使用pv

      apiVersion: v1
      kind: Pod
      metadata:
      name: pod1
      namespace: dev
      spec:
      containers:
      - name: busybox
      image: busybox:1.30
      command: ["/bin/sh","-c","while true;do echo pod1 >> /root/out.txt; sleep 10; done;"]
      volumeMounts:
      - name: volume
      mountPath: /root/
      volumes:
      - name: volume
      persistentVolumeClaim:
      claimName: pvc1
      readOnly: false
      ---
      apiVersion: v1
      kind: Pod
      metadata:
      name: pod2
      namespace: dev
      spec:
      containers:
      - name: busybox
      image: busybox:1.30
      command: ["/bin/sh","-c","while true;do echo pod2 >> /root/out.txt; sleep 10; done;"]
      volumeMounts:
      - name: volume
      mountPath: /root/
      volumes:
      - name: volume
      persistentVolumeClaim:
      claimName: pvc2
      readOnly: false


      # 创建pod
      [root@master ~]# kubectl create -f pods.yaml
      pod/pod1 created
      pod/pod2 created

      # 查看pod
      [root@master ~]# kubectl get pods -n dev -o wide
      NAME READY STATUS RESTARTS AGE IP NODE
      pod1 1/1 Running 0 14s 10.244.1.69 node1
      pod2 1/1 Running 0 14s 10.244.1.70 node1

      # 查看pvc
      [root@master ~]# kubectl get pvc -n dev -o wide
      NAME STATUS VOLUME CAPACITY ACCESS MODES AGE VOLUMEMODE
      pvc1 Bound pv1 1Gi RWX 94m Filesystem
      pvc2 Bound pv2 2Gi RWX 94m Filesystem
      pvc3 Bound pv3 3Gi RWX 94m Filesystem

      # 查看pv
      [root@master ~]# kubectl get pv -n dev -o wide
      NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM AGE VOLUMEMODE
      pv1 1Gi RWX Retain Bound dev/pvc1 5h11m Filesystem
      pv2 2Gi RWX Retain Bound dev/pvc2 5h11m Filesystem
      pv3 3Gi RWX Retain Bound dev/pvc3 5h11m Filesystem

      # 查看nfs中的文件存储
      [root@master ~]# more /root/data/pv1/out.txt
      node1
      node1
      [root@master ~]# more /root/data/pv2/out.txt
      node2
      node2

      生命周期

      PVC和PV是一一对应的,PV和PVC之间的相互作用遵循以下生命周期

      • 资源供应:管理员手动创建底层存储和pv
      • 资源绑定:用户创建PVC,k8s负责根据PVC的申明去寻找PV,并绑定

      在用户定义好PVC之后,系统将根据PVC对存储资源的请求在已存在的PV种选择一个满足条件的。

      1)一旦找到,就将PV与用户定义的PVC进行绑定的,用户的应用就可以使用这个PVC了

      2)如果找不到,PVC则会无限期处于Pending状态,直到系统管理员创建了一个符合其要求的PV

      PV一旦绑定到某个PVC上,就会被这个PVC独占,不会再与其他PVC进行绑定了

      • 资源使用:用户可以再pod种像 volume一样使用pvc

      Pod使用Volume的定义,将PVC挂载到容器内的某个路径进行使用

      • 资源释放:用户删除pvc来释放pv

      存储资源使用完毕后,用户可以山粗PVC,与该pvc绑定的pv将会被标记为“已释放”,但是还不能立刻与其他PVC进行绑定,通过之前PVC写入的数据还可能保留再存储设备i上,只有再清除之后该PV才能被再次使用。

      • 资源回收:k8s根据pv设置的回收策略进行资源的回收

      对于PV,管理员可以设定回收策略,用于设置阈值绑定的PVC,释放资源之后如何处理遗留数据问题,只有PV的存储空间完成回收,才能供新的PVC绑定和使用

      k8s学习笔记-数据存储


      恢复重新绑定

      kubectl edit pv pv1

      k8s学习笔记-数据存储

      kubectl edit pv pv2

      k8s学习笔记-数据存储

      配置存储

      ConfigMap

      ConfigMap是一种比较特殊的存储卷,它的主要作用是用来存储配置信息的。

      创建configmap.yaml

      apiVersion: v1
      kind: ConfigMap
      metadata:
      name: configmap
      namespace: dev
      data:
      info: |
      username:admin
      password:123456

      使用配置文件创建configmap

      # 创建configmap
      [root@master ~]# kubectl create -f configmap.yaml
      configmap/configmap created

      # 查看configmap详情
      [root@master ~]# kubectl describe cm configmap -n dev
      Name: configmap
      Namespace: dev
      Labels: <none>
      Annotations: <none>

      Data
      ====
      info:
      ----
      username:admin
      password:123456

      Events: <none>

       创建pod-configmap.yaml,将上面创建的configmap的挂载进去

      apiVersion: v1
      kind: Pod
      metadata:
      name: pod-configmap
      namespace: dev
      spec:
      containers:
      - name: nginx
      image: nginx:1.17.1
      volumeMounts: # 将configmap挂载到目录
      - name: config
      mountPath: /configmap/config
      volumes: # 引用configmap
      - name: config
      configMap:
      name: configmap
      # 创建pod
      [root@master ~]# kubectl create -f pod-configmap.yaml
      pod/pod-configmap created

      # 查看pod
      [root@master ~]# kubectl get pod pod-configmap -n dev
      NAME READY STATUS RESTARTS AGE
      pod-configmap 1/1 Running 0 6s

      #进入容器
      [root@master ~]# kubectl exec -it pod-configmap -n dev /bin/sh
      # cd /configmap/config/
      # ls
      info
      # more info
      username:admin
      password:123456

      # 可以看到映射已经成功,每个configmap都映射成了一个目录
      # key--->文件 value---->文件中的内容
      # 此时如果更新configmap的内容, 容器中的值也会动态更新
      [root@master demo]# echo 1234 > index.html
      [root@master demo]# kubectl create configmap web-config --from-file=index.html
      configmap/web-config created
      [root@master demo]# kubectl describe cm web-config
      Name: web-config
      Namespace: default
      Labels: <none>
      Annotations: <none>

      Data
      ====
      index.html:
      ----
      1234

      Events: <none>
      apiVersion: v1
      kind: Pod
      metadata:
      name: pod-configmap
      namespace: dev
      spec:
      containers:
      - name: nginx
      image: nginx:1.17.1
      volumeMounts: # 将configmap挂载到目录
      - name: config
      mountPath: /usr/share/nginx/html
      volumes: # 引用configmap
      - name: config
      configMap:
      name: web-config

      Secret

      在kubernetes中,还存在一种和ConfigMap非常类似的对象,称为Secret对象。它主要用于存储敏感信息,例如密码、秘钥、证书等等。

      1- 使用base64对数据进行编码

      [root@master ~]# echo -n 'admin' | base64 #准备username
      YWRtaW4=
      [root@master ~]# echo -n '123456' | base64 #准备password
      MTIzNDU2

      2- 接下来编写secret.yaml,并创建serect

      apiVersion: v1
      kind: Secret
      metadata:
      name: secret
      namespace: dev
      type: Opaque
      data:
      username: YWRtaW4=
      password: MTIzNDU2
      # 创建secret
      [root@master ~]# kubectl create -f secret.yaml
      secret/secret created

      # 查看secret详情
      [root@master ~]# kubectl describe secret secret -n dev
      Name: secret
      Namespace: dev
      Labels: <none>
      Annotations: <none>
      Type: Opaque
      Data
      ====
      password: 6 bytes
      username: 5 bytes

      创建pod-secret.yaml,将secret挂载进去:

      apiVersion: v1
      kind: Pod
      metadata:
      name: pod-secret
      namespace: dev
      spec:
      containers:
      - name: nginx
      image: nginx:1.17.1
      volumeMounts: # 将secret挂载到目录
      - name: config
      mountPath: /secret/config
      volumes:
      - name: config
      secret:
      secretName: secret
      # 创建pod
      [root@master ~]# kubectl create -f pod-secret.yaml
      pod/pod-secret created

      # 查看pod
      [root@master ~]# kubectl get pod pod-secret -n dev
      NAME READY STATUS RESTARTS AGE
      pod-secret 1/1 Running 0 2m28s

      # 进入容器,查看secret信息,发现已经自动解码了
      [root@master ~]# kubectl exec -it pod-secret /bin/sh -n dev
      / # ls /secret/config/
      password username
      / # more /secret/config/username
      admin
      / # more /secret/config/password
      123456
      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/u_11555417/5427181,作者:羊草,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:虚拟化云计算-centos7上使用virt-manager安装虚拟机

      下一篇:云计算术语(中英文对照)

      相关文章

      2025-04-18 07:11:19

      k8s不同role级别的服务发现

      k8s不同role级别的服务发现

      2025-04-18 07:11:19
      k8s , pod , prometheus , role
      2025-04-18 07:11:11

      使用k8s的sdk编写一个项目获取pod和node信息

      使用k8s的sdk编写一个项目获取pod和node信息

      2025-04-18 07:11:11
      client , k8s , node , pod
      2025-04-18 07:11:11

      k8s-apiserver监控源码解读

      本节重点介绍 :k8s代码库和模块地址下载 apiserver源码apiserver中监控源码阅读k8s源码地址分布k8s代码库访问github上k8s仓库,readme中给出了k8s 模块的代码地址举例图片组件仓库列表 地址Reposit

      2025-04-18 07:11:11
      io , k8s , 源码
      2025-04-16 09:26:39

      为什么说k8s中监控更复杂了

      为什么说k8s中监控更复杂了

      2025-04-16 09:26:39
      k8s , 对象 , 监控
      2025-04-16 09:26:39

      prometheus为k8s做的4大适配工作

      prometheus为k8s做的4大适配工作

      2025-04-16 09:26:39
      k8s , pod , 指标 , 组件 , 适配
      2025-04-16 09:26:27

      创建监控控制平面的service

      Kubernetes Service定义了这样一种抽象: Service是一种可以访问 Pod逻辑分组的策略, Service通常是通过 Label Selector访问 Pod组。

      2025-04-16 09:26:27
      k8s , Pod , service , Service , 类型
      2025-04-16 09:26:27

      k8s中我们都需要监控哪些组件

      k8s中我们都需要监控哪些组件

      2025-04-16 09:26:27
      k8s , pod , 指标
      2024-11-21 09:56:12

      【云原生】Kubernetes介绍

      【云原生】Kubernetes介绍

      2024-11-21 09:56:12
      k8s , Kubernetes , 容器 , 组件 , 集群
      2024-11-08 08:55:16

      k8s基础篇 pod(一)简介

      k8s基础篇 pod(一)简介

      2024-11-08 08:55:16
      k8s , Pod
      2024-11-07 08:15:30

      如何在k8s集群里更换harbor-registry的镜像源

      如何在k8s集群里更换harbor-registry的镜像源

      2024-11-07 08:15:30
      k8s
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5225546

      查看更多

      最新文章

      分布式系统是如何实现数据的存储和共享的?

      2024-06-07 07:41:34

      OpenMetadata 开放标准的元数据服务

      2024-05-21 07:53:51

      nsq是go语言写的消息队列。请问k3s部署nsq,yaml如何写?

      2024-05-08 08:07:13

      分片规则节点取余

      2024-04-18 09:28:41

      uifd/ui-for-docker是docker的web可视化工具。请问部署在k3s中,yaml文件如何写?

      2023-06-15 06:09:37

      k8s学习-部署应用实例2

      2023-04-27 06:31:12

      查看更多

      热门文章

      k8s学习-部署应用实例2

      2023-04-27 06:31:12

      uifd/ui-for-docker是docker的web可视化工具。请问部署在k3s中,yaml文件如何写?

      2023-06-15 06:09:37

      二进制部署K8s集群第16节kubectl-声明式资源管理

      2022-11-08 07:56:23

      二进制部署K8s集群第8节Master节点之kube-scheduler集群部署

      2022-11-08 07:33:08

      二进制部署K8s集群第17节控制器使用

      2022-11-08 07:56:23

      二进制部署K8s集群第1节前置准备工作之服务器初始化

      2022-11-08 07:33:08

      查看更多

      热门标签

      系统 测试 用户 分布式 Java java 计算机 docker 代码 数据 服务器 数据库 源码 管理 python
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      uifd/ui-for-docker是docker的web可视化工具。请问部署在k3s中,yaml文件如何写?

      OpenMetadata 开放标准的元数据服务

      nsq是go语言写的消息队列。请问k3s部署nsq,yaml如何写?

      k8s学习-部署应用实例2

      二进制部署K8s集群第17节控制器使用

      二进制部署K8s集群第16节kubectl-声明式资源管理

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号