k8s的存储卷之静态

这篇具有很好参考价值的文章主要介绍了k8s的存储卷之静态。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

存储卷----数据卷

容器内的目录和宿主机的目录进行挂载

容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态

一旦回到初始状态,所有的后天编辑的文件都会消失

容器和节点之间创建一个可以持久化保存容器内文件的存储卷,即使容器被销毁,删除,重启,节点上的存储卷的数据依然存在,后续也可以继续使用,可以继续讲容器内目录和宿主机挂载,保存的数据继续使用

存储的方式

1、emptyDir 容器内部共享存储卷,k8s系统中,是一个pod当中的多个容器共享一个存储卷目录,emptyDir卷可以是pod当中容器在这个存储卷上读取和写入

emptyDir是不能挂载到节点的,随着pod的生命周期结束,emptyDir也会结束,数据也不会保留

,容器内部共享。lnmp

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-xb
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.22
        name: xb
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
#第一个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者其他容器的共享目录
      - image: nginx:1.22
        name: xb1
        volumeMounts:
        - name: html
          mountPath: /data/
#引用上一个挂载的名称,表示我将和usr/share/nginx/html这个目录挂载,由data目录和它的目录挂载
        command: ['/bin/sh','-c','while true;do echo $(date) >> /data/index.html;sleep 2;done']
      volumes:
      - name: html
        emptyDir: {}

k8s的存储卷之静态,kubernetes,容器,云原生

2、hostPath: 将容器内的挂载,和节点上的目录进行挂载,hostPath可以实现数据的持久化,node节点被销毁,那么数据也会丢失

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      - name: nginx1
        image: nginx:1.22
        volumeMounts:
        - name: html
          mountPath: /data
        command: ["/bin/bash","-c","while ture; do echo $(date) >> /data/index.html; sleep 2; done"]
      volumes:
      - name: html
        hostPath:
          path: /opt/test
          type: DirectoryOrCreate

k8s的存储卷之静态,kubernetes,容器,云原生

k8s的存储卷之静态,kubernetes,容器,云原生

3、NFS共享存储

所有pod内的目录都和节点上的nfs共享目录形成数据卷,所有的数据文件都保存在共享目录当中,集中方便管理

在私有仓库上
vim /etc/exports
/data/volumes 20.0.0.0/24(rw,no_root_squash)


在主节点上
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
#第一个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者其他容器的共享目录
      - image: nginx:1.22
        name: nginx1
        volumeMounts:
        - name: html
          mountPath: /data
#引用上一个挂载的名称,表示我将和usr/share/nginx/html这个目录挂载,由data目录和它的目录挂载
        command: ["/bin/bash","-c","while ture; do echo $(date) >> /data/index.html; sleep 2; done"]
      volumes:
      - name: html
        nfs:
          path: /data/volumes
          server: 20.0.0.73

k8s的存储卷之静态,kubernetes,容器,云原生

k8s的存储卷之静态,kubernetes,容器,云原生

k8s的存储卷之静态,kubernetes,容器,云原生

k8s的存储卷之静态,kubernetes,容器,云原生

pvs和PV

pv:全称Persistent Volume 持久化存储卷,用来描述和定义一个存储卷,pv是由运维人员来定的

pvc:Persistent Volume Claim 持久化存储的请求,pvc实际上是用来描述或者声明我希望使用什么样的pv来进行存储

pvc-pv是一一对应的关系(描述,存储(大小))

pvc--->pv---?

pvc和pv都是虚拟化的概念,是k8s的抽象的虚拟的存储资源

k8s的存储卷之静态,kubernetes,容器,云原生

pod内的挂载点声明一个请求pvc请求,pvc会找一个最合适的pv来作为pod的存储卷,pv和共享目录在一一映射,最终由nfs来提供最终的共享存储空间

pvc和pv的请求方式

静态请求

动态请求

pvc和pv之间静态请求,一旦成百个怎么办,所有还有动态pvc

pv是集群当中的存储资源,pvc请求存储资源,也是对存储资源的一个检索(检查索引),选择一个最合适的pv来存储资源

pv和pvc之间是有生命周期管理

1、Provisioning(配置)----- pvc请求request-----检索(找一个合适的pv)---- pvc和pv(binding绑定)---- 使用 ---- pod被删除 ----- pv的relesing(释放)-----recycling(回收)

配置:动态 静态

绑定:就是把pv分配给pvc

使用:就是pod通过pvc使用存储资源

释放:pod解除和Volume的关系,删除pvc

回收:保留pv,让下一个pvc使用

pv的状态

Available:可用,而且没有被任何pvc绑定

Bound:绑定,pv已经绑定了pvc,绑定即使用

released:释放,pvc已经被删除了,但是pv的存储资源还没有被集群回收

Failed:表示pv资源回收失败,而且pv为不可用状态

pv的读写方式

ReadWriteOnce RWO ,配置文件里是全称,存储pv可读可写,但是只能被单个pod挂载

ReadOnlyMany ROX,存储的pv可以以只读的方式被多个pod挂载

ReadWriteMany RWX,存储可以支持读写的方式被多个pod共享

nfs:可以支持三种读写和挂载方式
ISCSI 不支持
hostPath:支持ReadWriteOnce方式

查看设备上所有的Iscsi

[root@master01 opt]# lsscsi 
[1:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0 
[30:0:0:0]   disk    VMware,  VMware Virtual S 1.0   /dev/sda 


iscsiadm -m session -P 3
iscsiadm   查看服务器是否有iscsi设备
-m session	指定操作的会话模块,管理iscsi的会话
-P 3	显示详细信息的级别,级别就是3,显示详细信息
集群回收pv资源的方式

1、Retain 保留,pod和挂载点的数据不会被删除

2、Recycle 回收,pv上的数据被删除,挂载点的数据也被删除

3、Delete:删除,解绑时,自动删除pv上的数据(本地硬盘不能使用,AWS,EBS,GCE)支持动态卷的可以使用,pv不再可用(云平台自己处理)

补充:当pod运行之后,通过pvc请求到了pv,除非pod被销毁,否则无法删除pvc文章来源地址https://www.toymoban.com/news/detail-819659.html

静态
mkdir v{1,2,3,4,5}
vim/etc/perports
/data/v1 20.0.0.0/24(rw,no_root_squash)
/data/v2 20.0.0.0/24(rw,no_root_squash)
/data/v3 20.0.0.0/24(rw,no_root_squash)
/data/v4 20.0.0.0/24(rw,no_root_squash)
/data/v5 20.0.0.0/24(rw,no_root_squash)

systemctl restart rpcbind
systemctl restart nfs
exportfs -arv

节点上查看
showmount -e 20.0.0.73
Export list for 20.0.0.73:
/data/v5      20.0.0.0/24
/data/v4      20.0.0.0/24
/data/v3      20.0.0.0/24
/data/v2      20.0.0.0/24
/data/v1      20.0.0.0/24
/data/volumes 20.0.0.0/24

主节点
vim pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    name: pv001
spec:
  nfs:
    path: /data/v1
    server: 20.0.0.73
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 1Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv002
  labels:
    name: pv002
spec:
  nfs:
    path: /data/v2
    server: 20.0.0.73
  accessModes: ["ReadWriteOnce"]
  capacity:
    storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv003
  labels:
    name: pv003
spec:
  nfs:
    path: /data/v3
    server: 20.0.0.73
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv004
  labels:
    name: pv004
spec:
  nfs:
    path: /data/v4
    server: 20.0.0.73
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  capacity:
    storage: 4Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv005
  labels:
    name: pv005
spec:
  nfs:
    path: /data/v5
    server: 20.0.0.73
  accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"]
  capacity:
    storage: 5Gi


查看生成的pv
[root@master01 opt]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv001   1Gi        RWO,RWX        Retain           Available                                   7s
pv002   2Gi        RWO            Retain           Available                                   7s
pv003   2Gi        RWO,RWX        Retain           Available                                   7s
pv004   4Gi        RWO,RWX        Retain           Available                                   7s
pv005   5Gi        RWO,ROX,RWX    Retain           Available                                   7s

vim pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes: ["ReadWriteMany"]
#pvc期望请求的pv的读写挂载类型是什么
  resources:
    requests:
      storage: 2Gi
#pvc 期望请求pv的存储大小是2G,期望的pv类型:ReadWritemany 大小是2G
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-xb
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.22
        name: xb
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: mypvc

查看
[root@master01 opt]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
pv001   1Gi        RWO,RWX        Retain           Available                                           144m
pv002   2Gi        RWO            Retain           Available                                           144m
pv003   2Gi        RWO,RWX        Retain           Bound       default/mypvc                           144m
pv004   4Gi        RWO,RWX        Retain           Available                                           144m
pv005   5Gi        RWO,ROX,RWX    Retain           Available                                           144m



pvc --- 请求用哪个pv的存储-----pv和物理存储做映射(挂载)----

删除pvc
[root@master01 opt]# kubectl delete pvc mypvc(会卡)
[root@master01 /]# kubectl delete deployments.apps nginx-xb 
进入kubectl edit pv pv003,删除 claimRef模块

修改pv的资源方式
pv.yaml
......
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  persistentVolumeReclaimPolicy: Recycle
  capacity:
    storage: 4Gi
.....

查看
[root@master01 opt]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv001   1Gi        RWO,RWX        Retain           Available                                   151m
pv002   2Gi        RWO            Retain           Available                                   151m
pv003   2Gi        RWO,RWX        Retain           Available                                   151m
pv004   4Gi        RWO,RWX        Recycle          Available                                   151m
pv005   5Gi        RWO,ROX,RWX    Retain           Available                                   151m

到了这里,关于k8s的存储卷之静态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行

    Kubernetes是一个开源的, 用于编排云平台中多个主机上的容器化的应用,目标是让部署容器化的应用能简单并且高效的使用, 提供了应用部署,规划,更新,维护的一种机制 。其核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着,管理员可

    2024年02月08日
    浏览(59)
  • 【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据 II 将pod数据传递给容器

    在上一篇文章中,我们学习了针对容器设置启动时要执行的命令和参数、定义相互依赖的环境变量、为容器设置环境变量,三种设置方式,本篇文章,我们将继续学习数据的传递。 有两种方式可以将 Pod 和 Container 字段传递给运行中的容器: 环境变量 卷文件 这两种呈现 Pod

    2024年01月25日
    浏览(71)
  • 云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

    目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd)  5.master2节点迁移容器运行时(docker → containerd)  6.node1节点容器运行时迁移(docker → containerd)  7.升级集群计划(v1.23.14 → v1.24.1) 8.升级master1节点版本(v1.24.1) 9.升级master2节点版本

    2024年02月03日
    浏览(48)
  • 云上攻防-云原生篇&;Kubernetes&;K8s安全&;API&;Kubelet未授权访问&;容器执行

    curl -XPOST -k “https://192.168.139.132:10250/run///” -d “cmd=id” 执行的命令是test03容器里的命令,需要进行容器逃逸。 1、攻击8080端口:API Server(Master)未授权访问 旧版本的k8s的API Server默认会开启两个端口:8080和6443。 6443是安全端口,安全端口使用TLS加密;但是8080端口无需认证,

    2024年04月22日
    浏览(54)
  • 云原生Kubernetes:K8S概述

    目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 4.K8S网络 二、总结 (1)概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念,云原生更

    2024年02月10日
    浏览(40)
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

    目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念? 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几

    2024年02月03日
    浏览(64)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(43)
  • 云原生Kubernetes:K8S安全机制

    目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜像拉取失败 四、总结 (1)概念 Kubernetes 作为一个分

    2024年02月07日
    浏览(46)
  • 【云原生K8S】Kubernetes之探针

    目录 一、探针是什么 二、探针类型  Ⅰ、livenessProbe 容器重启策略  Ⅱ、readinessProbe Ⅲ、startupProbe 执行顺序: 字段详情 三、探测机制 Ⅰ、HTTP GET探针 Ⅱ、TCP套接字探针 Ⅲ、Exec探针 探针:是由 kubelet 对容器执行的定期诊断 要执行诊断,则需kubelet 调用由容器实现的 Handler。

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包