k8s--动态pvc和pv

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

目录

前情回顾

动态pv

实验模拟

步骤一:在stor01节点上安装nfs,并配置nfs服务

接下来在matser01上配置

步骤二:创建 Service Account,用来管理 NFS Provisioner 在 k8s 集群中运行的权限和动态规则

步骤三:使用 Deployment 来创建 NFS Provisioner 

部署nfs-provisioners插件:

步骤四:创建 StorageClass,负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联

步骤五: 创建 PVC 和 Pod 测试

下面进行读写测试


前情回顾

存储卷:

emptyDir 容器内部,随着pod销毁,emptyDir也会消失 不能做数据持久化

hostPath:持久化存储数据 可以和节点上目录做挂载。pod被销毁了数据还在

NFS:一台机器,提供pod内容器所有的挂载点

pv和pvc:

pvc就是pod发起的挂载请求

pv:持久化存储目录

静态pv和pvc: 运维负责:创建好持久化存储卷,声明好读写和挂载类型 以及可以提供的存储空间

pvc开发做,要和开发沟通好,你期望的读写和挂载类型,以及存储空间。

当我发布pvc之后可以自动生成pv,还可以在共享服务器上直接生成挂载目录。

pvc直接绑定和使用pv

动态pv

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

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

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

用nfs来实现动态PV,NFS支持的方式NFS-client,Provisioner

实验模拟

步骤一:在stor01节点上安装nfs,并配置nfs服务


1、在stor01节点上安装nfs,并配置nfs服务
node02
cd /opt
mkdir k8s
chmod 777 k8s
vim /etc/exports
/opt/k8s 20.0.0.0/24(rw,no_root_squash,sync)
wq
systemctl restart rpcbind
systemctl restart nfs
showmount -e

master01
showmount -e 20.0.0.63
查看

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

接下来在matser01上配置

步骤二:创建 Service Account,用来管理 NFS Provisioner 在 k8s 集群中运行的权限和动态规则

vim nfs-client-rbac.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
---
#定义权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: nfs-client-provisioner-clusterrole
rules:
  - apiGroups: [""]
#apigroup定义了规则使用了哪个api的组,空字符“”,直接使用api的核心组的资源
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
#表示权限的动作。
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]

#获取pv属性
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
    
#获取api活动的时间信息
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
---
#集群角色绑定
apiVersion: rbac.authorization.k8s.io
kind: ClusterRoleBinding
metadata:
  name: nfs-client-provisioner-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: nfs-client-provisioner
  namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-clusterrole
  apiGroup: rbac.authorization.k8s.io

wq

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

步骤三:使用 Deployment 来创建 NFS Provisioner 

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

...
spec:
  containers:
  - command:
    - --feature-gares=RemoveSelfLink=false
    - --advertise-address=20.0.0.61
    feature-gates:在不破坏现有规则以及功能基础上引入新功能或者修改现有功能的机制。
    禁用不影响之前的规则
    
    wq

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

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

部署nfs-provisioners插件:

nfs的provisioner的客户端以pod的方式运行在集群当中,监听k8s集群当中的pv的请求。动态的创建于NFS服务器相关的pv。

容器里使用配置,在provisioner当中定义好环境变量,穿给容器。storageclass的名称,nfs服务器的地址,nfs的目录

vim nfs-client-provisioner.yaml
#创建 NFS Provisioner
vim nfs-client-provisioner.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs1
    spec:
      serviceAccountName: nfs-client-provisioner 
#指定Service Account账户来调用
      containers:
        - name: nfs1
          image: quay.io/external_storage/nfs-client-provisioner:latest
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs1
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: nfs-storage   
#配置provisioner的Name,确保该名称与StorageClass资源中的provisioner名称保持一致
            - name: NFS_SERVER
              value: stor01                     
#配置绑定的nfs服务器
            - name: NFS_PATH
              value: /opt/k8s                   
#配置绑定的nfs服务器目录
      volumes:                                  
#申明nfs数据卷
        - name: nfs-client-root
          nfs:
            server:20.0.0.63
            path: /opt/k8s
	
	
kubectl apply -f nfs-client-provisioner.yaml 

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

步骤四:创建 StorageClass,负责建立 PVC 并调用 NFS provisioner 进行预定的工作,并让 PV 与 PVC 建立关联

vim nfs-client-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client-storageclass
provisioner: nfs-storage     #这里的名称要和provisioner配置文件中的环境变量PROVISIONER_NAME保持一致
parameters:
  archiveOnDelete: "false"   
#false表示在删除PVC时不会对数据目录进行打包存档,即删除数据;为ture时就会自动对数据目录进行打包存档,存档文件以archived开头

reclaimPolicy: Retain
#定义pv的回收策略,retain,另一个是delete,不支持回收
allowVolumeExpansion: true
#pv的存储空间可以动态的扩缩容
  
kubectl apply -f nfs-client-storageclass.yaml

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

步骤五: 创建 PVC 和 Pod 测试

先创建pvc

vim test-pvc-pod.yaml


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client-storageclass    #关联StorageClass对象
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
  labels:
    app: nginx1
spec:
  replicas:1
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx1
        image: nginx:1.22

        volumeMounts:
        - name: nginx1
          mountPath: /usr/share/nginx/html
      volumes:
      - name: nginx1
        persistentVolumeClaim:
          claimName: nfs-pvc      
#与PVC名称保持一致
	  
	  
kubectl apply -f test-pvc-pod.yaml

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

nfs主机中: 

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

下面进行读写测试

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

k8s--动态pvc和pv,K8s,kubernetes,容器,云原生

总结
动态pv的两个组件:

provisioner插件:支持nfs。创建pv目录

strogeclass:定义pv的属性。

动态pv的默认策略是删除

动态pv删除pvc的状态。最好设置为releassed

1.给卷插件创建账号,确保集群可以在集群内部通信,获取资源,监听事件。创建和删除以及更新pv

2.创建卷插件的pod。由卷插件的pod创建pv

3。定义storageclass给pv赋予属性。属性包括:pvc被删除之后pv的状态,以及回收策略。

4.创建pvc

5.实验完成
 文章来源地址https://www.toymoban.com/news/detail-819520.html

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

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

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

相关文章

  • k8s pv pvc的介绍|动态存储|静态存储

    当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时,em

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

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

    2024年02月05日
    浏览(41)
  • [Kubernetes]5. k8s集群StatefulSet详解,以及数据持久化(SC PV PVC)

    前面通过 deployment 结合 service 来部署 无状态的应用 ,下面来讲解通过 satefulSet 结合 service 来部署 有状态的应用 无状态: 无状态 (stateless) 、牲畜 (cattle) 、无名 (nameless) 、可丢弃 (disposable) 有状态: 有状态 (stateful) 、宠物 (pet) 、具有名 (haviing name) 、不可丢弃 (non-disposable) St

    2024年02月01日
    浏览(44)
  • K8S临时存储-本地存储-PV和PVC的使用-动态存储(StorageClass)

    容器中的文件在磁盘上是临时存放的,当容器崩溃或停止时容器上面的数据未保存, 因此在容器生命周期内创建或修改的所有文件都将丢失。 在崩溃期间,kubelet 会以干净的状态重新启动容器。 当多个容器在一个 Pod 中运行并且需要共享文件时,会出现另一个问题,跨所有容

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

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

    2024年02月05日
    浏览(100)
  • 【K8S 存储卷】K8S的存储卷+PV/PVC

    目录 一、K8S的存储卷 1、概念: 2、挂载的方式: 2.1、emptyDir: 2.2、hostPath: 2.3、NFS共享存储: 二、PV和PVC: 1、概念 2、请求方式 3、静态请求流程图: 4、PV和PVC的生命周期 5、PV的状态: 6、PV的读写挂载方式: 7、回收策略: 三、PV和PVC静态请求实验: 1、默认的Retain保留策

    2024年02月02日
    浏览(57)
  • 【K8S系列】深入解析K8S中PV 和PVC

    在 Kubernetes 中,PV(持久卷)和 PVC(持久卷声明)之间的关系是一种动态匹配和绑定关系,用于实现 Pod 与存储资源的解耦。 PV 是集群中的一块网络存储,它独立于 Pod 存在。PV 可以是各种存储系统,如云提供商的存储、NFS、iSCSI、本地存储等。 管理员负责创建 PV,并配置其

    2024年04月23日
    浏览(46)
  • k8s pv与pvc

    1.前言 PV 是 Kubernetes 集群中的一种资源对象,它代表着一块物理存储设备,例如磁盘、网络存储或云存储等。PV 可以被多个 Pod 共享,并且可以独立于 Pod 存在。PV 可以配置不同的访问模式 (Access Modes),例如 ReadWriteOnce 、 ReadOnlyMany 或 ReadWriteMany ,以确定 PV 可以被多少个 Pod 同

    2024年01月21日
    浏览(55)
  • k8s ------存储卷(PV、PVC)

    目录 一:为什么需要存储卷? 二:emptyDir存储卷  ​三:hostPath存储卷  四:nfs共享存储卷   五:PVC 和 PV 1、PVC 和 PV介绍 2、PV和PVC之间的相互作用遵循的生命周期 3、PV 的4 种状态 4、一个PV从创建到销毁的具体流程 六:静态创建pv和pvc资源由pod运用过程 ​1、配置nfs存储 ​

    2024年02月13日
    浏览(46)
  • PV & PVC in K8s

    在Kubernetes中,PV(Persistent Volume)和PVC(Persistent Volume Claim)是用于管理持久化存储的重要资源对象。PV表示存储的实际资源,而PVC表示对PV的声明性要求。当应用程序需要使用持久化存储时,它可以通过创建PVC来请求和使用PV。以下是使用PV和PVC时的一些注意事项: 定义存储类

    2024年02月09日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包