K8s---存储卷(动态pv和pvc)

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

当我要发布pvc可以生成pv,还可以共享服务器上直接生成挂载目录。pvc直接绑定pv。

动态pv需要两个组件

1、卷插件:k8s本生支持的动态pv创建不包括nfs,需要声明和安装一个外部插件

Provisioner: 存储分配器。动态创建pv,然后根据pvc的请求自动绑定和使用。

2、StorageClass:来定义pv的属性,存储类型、大小。回收策略。

还是用nfs支持动态pv,Nfs支持的方式NFS-client,Provisioner来适配NFS-client

nfs-client-Provisioner卷插件。

框架

实验:

master:192.168.10.10

node01:192.168.10.20

node02:192.168.10.30

K8s---存储卷(动态pv和pvc),linux,运维,服务器

  1. 创建账号,给卷插件能够在集群内部通信,获取资源,监听事件,创建、删除、更新pv
  2. 创建卷插件pod:卷插件的pod插件pv
  3. storageclass:给pv赋予属性 (pvc被删除之后pv的状态,以及回收策略)
  4. 创建pvc-------完成。

node04:192.168.10.40

mkdir /opt/k8s

vim /etc/exports
/opt/k8s 192.168.10.0/24(rw,no_root_squash,sync)

#注意按先后顺序
systemctl restart rpcbind
systemctl restart nfs

#查看暴露的nfs共享文件
showmount -e

master:192.168.10.1

vim nfs-client-rbac.yaml

#创建 Service Account 账户,用来管理 NFS Provisioner 在 k8s 集群中运行的权限
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
#创建集群角色
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: nfs-client-provisioner-role
rules:
  - apiGroups: [""]
#apigroup定义了规则可以使用哪个api组的权限,空字符""表示直接使用api的核心组的资源。
    resources: ["persistentvolumes"]
    verbs: ["get","list","watch","create","delete"]
#表示权限的当中
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["watch","get","list","update"]
#定义pv属性
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get","watch","list"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list","create","watch","update","patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["delete","create","get","watch","update","patch","list"]
---
#集群角色绑定 kubectl explain ClusterRoleBinding 查看字段详情
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: nfs-client-provisioner-bind
subjects:
- kind: ServiceAccount
  name: nfs-client-provisioner
  namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-role
  apiGroup: rbac.authorization.k8s.io

serviceAccount

NFS Provisioner 是一个插件,没有权限是无法再集群当中获取k8s的信息。插件要有权限能够监听apiserver,获取get,list(获取集群的列表资源)create delete。

rbac:Role-bases-access-control   定义角色在集群当中使用的权限

vim nfs-client-provisioner.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-provisioner
  labels:
    app: nfs1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs1
  template:
    metadata:
      labels:
        app: nfs1
    spec:
      serviceAccountName: nfs-client-provisioner
#指定Service Account账户
      containers:
        - name: nfs1
          image: quay.io/external_storage/nfs-client-provisioner:latest
          volumeMounts:
          - name: nfs
            mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: nfs-storage
#配置provisioner的账户名称,确保该名称与StorageClass资源中的provisioner名称保持一致
            - name: NFS_SERVER
              value: 192.168.10.40
#指定的是nfs共享服务器的地址
            - name: NFS_PATH
              value: /opt/k8s
#配置绑定的nfs服务器目录

#声明nfs数据卷
      volumes:
        - name: nfs
          nfs:
            server: 192.168.10.40 
            path: /opt/k8s    
    

1.20之后有一个新的机制

selfLink: AP的资源对象之一,表示资源对象在集群当中自身的一个连接,selflink是一个唯一的表示符号,可以用于标识每一个资源对象

self link的值是一个URL,指向该资源对象的k8sapi的路径,更好的实现资源对象的查找和引用。

kubectl apply -f nfs-client-provisioner.yaml 

kubectl get pod
NAME                                   READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-cd6ff67-sp8qd   1/1     Running   0          14s

K8s---存储卷(动态pv和pvc),linux,运维,服务器

vim /etc/kubernetes/manifests/kube-apiserver.yaml

......
spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=RemoveSelfLink=false       #添加这一行
    - --advertise-address=192.168.10.10
......
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
kubectl delete pods kube-apiserver -n kube-system 
kubectl get pods -n kube-system | grep apiserver

vim nfs-client-storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client-storageclass
#匹配provisioner
provisioner: nfs-storage
parameters:
  archiveOnDelete: "false"
#pvc被删除之后,pv的状态,定义的是false,pvc被删除,pv的状态将是released,可以人工调用,继续使用
#如果是true,pv的将是Archived,表示pv不再可用
reclaimPolicy: Delete
#定义pv的回收策略,retain,另一个是delete,不支持回收
allowVolumeExpansion: true
#pv的存储空间可以动态扩缩容(仅云平台)。
kubectl apply -f nfs-client-storageclass.yaml 

[root@master01 auto-volumn]# kubectl get storageclasses.storage.k8s.io 
NAME                      PROVISIONER   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client-storageclass   nfs-storage   Delete          Immediate           true                   114m

K8s---存储卷(动态pv和pvc),linux,运维,服务器

vim pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client-storageclass
  resources:
   requests:
     storage: 2Gi
#创建一个pvc,名称为nfs-pvc,使用的pv属性是nfs-client-storageclass
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx1
  name: nginx1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - image: nginx:1.22
        name: nginx1
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: nfs-pvc
kubectl apply -f test-pvc-pod.yaml

//PVC 通过 StorageClass 自动申请到空间
kubectl get pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS              AGE
nfs-pvc   Bound    pvc-7dcb826f-dbd8-4abb-8a3f-e4f669a741fd   2Gi        RWX            nfs-client-storageclass   55m

K8s---存储卷(动态pv和pvc),linux,运维,服务器

删除

kubectl delete deployments.apps nginx1
kubectl delete pvc nfs-pvc

删除后,如果是Retain,pv可以保留复用

              如果是Delete,pv将会被直接删除

动态pv的默认策略Delete。

总结:

provisioner插件-----支持nfs

stroageclass: 定义pv的属性

动态pv的默认策略是删除。没有回收

动态pv删除pvc后的状态,released文章来源地址https://www.toymoban.com/news/detail-812199.html

  1. 创建账号,给卷插件能够在集群内部通信,获取资源,监听事件,创建、删除、更新pv
  2. 创建卷插件pod:卷插件的pod插件pv
  3. storageclass:给pv赋予属性 (pvc被删除之后pv的状态,以及回收策略)
  4. 创建pvc-------完成。

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

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

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

相关文章

  • k8s 存储卷和pvc,pv

    存储卷---数据卷 容器内的目录和宿主机的目录进行挂载。 容器在系统上的生命周期是短暂的,deletek8s用控制器创建的pod,delete相当于重启,容器的状态也会回复到初始状态。 一旦回到初始状态,所有的后天编辑的文件的都会消失。 容器容器和节点之间创建一个可以持久化保

    2024年01月16日
    浏览(39)
  • k8s中的PV和PVC存储介绍

    目录 一.PV介绍 1.含义 2.关键配置参数 二.PVC介绍 1.含义 2.关键参数配置 三.PV和PVC的生命周期问题 1.PV的生命周期会有4个阶段 2.用户申请空间PV的周期流程 3.PV和PVC的使用/释放/回收 四.案例演示 1.NFS配置 2.新建PV 3.新建PVC 4.新建Pod测试 5.模拟删除Pod后后端目录内数据不会受影响

    2024年03月15日
    浏览(40)
  • k8s--动态pvc和pv

    目录 前情回顾 动态pv 实验模拟 步骤一:在stor01节点上安装nfs,并配置nfs服务 接下来在matser01上配置 步骤二:创建 Service Account,用来管理 NFS Provisioner 在 k8s 集群中运行的权限和动态规则 步骤三:使用 Deployment 来创建 NFS Provisioner  部署nfs-provisioners插件: 步骤四:创建 St

    2024年01月24日
    浏览(41)
  • K8S持久化存储--- PVC和PV的存储

    PersistentVolume ( PV )是群集中的一块存储,由管理员配置或使用存储类动态配置。 它是集群中的资源,就像 pod 是 k8s 集群资源一样。 PV是容量插件,如 Volumes ,其生命周期独立于使用 PV 的任何单个 pod 。 PersistentVolumeClaim ( PVC )是一个持久化存储卷,我们在创建 pod 时可以

    2023年04月10日
    浏览(38)
  • 【云原生】K8S存储卷:PV、PVC详解

    容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共

    2024年02月12日
    浏览(29)
  • k8s~动态生成pvc和pv

    有时,我们不想手动建立pv和pvc,这时,我们可以通过strongClass存储类来帮我们实现,动态建立pvc,并动态为它分配pv存储空间,我们以nfs为例,说一下动态分配在nfs存储截至上建立pv的方式。 StorageClass和PVC及PV 集群权限与绑定rbac.yaml 建立动态pvc的provisioner.yaml 建立strongClass的

    2024年02月03日
    浏览(36)
  • k8s篇-应用持久化存储(PV和PVC)

    一般来说,容器一旦被删除后,容器运行时内部产生的所有文件数据也会被清理掉,因此,Docker提供了 Volume 这种方式来将数据持久化存储。 可以说,Volume 是Pod与外部存储设备进行数据传递的通道,也是Pod内部容器间、Pod与Pod间、Pod与外部环境进行数据共享的方式。 实际上

    2023年04月08日
    浏览(32)
  • Kubernetes(K8S)使用PV和PVC做存储安装mysql

    首先你需要一个k8s环境,可以参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122 我们可以简单看一下官网的描述:https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/#introduction 持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用

    2024年02月03日
    浏览(29)
  • 【云原生-Kubernetes篇】K8s的存储卷/数据卷+PV与PVC

    容器部署过程中一般有以下三种数据: • 启动时需要的 初始数据 :例如配置文件 (init container) • 启动过程中产生的 临时数据 :该临时数据需要多个容器间共享 • 启动过程中产生的 持久化数据 :例如MySQL的data目录 (业务数据–很重要) 而容器中的文件在磁盘上是 临时

    2024年02月05日
    浏览(29)
  • K8s基础10——数据卷、PV和PVC、StorageClass动态补给、StatefulSet控制器

    为什么需要数据卷? 容器中的文件在磁盘上是临时存放的,这给容器中运行比较重要的应用程序带来一些问题。 当容器升级或者崩溃时,kubelet会重建容器,容器内文件会丢失。 一个Pod中运行多个容器时,需要共享文件。 而K8s 数据卷就可以解决这两个问题。 Volume概念: V

    2024年02月05日
    浏览(89)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包