K8S之存储卷

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

K8S之存储卷

一、emptyDir

emptyDir:可实现Pod中的容器之间共享目录数据,但emptyDir存储卷没有持久化数据的能力,存储卷会随着Pod生命周期结束而一起删除

K8S之存储卷,kubernetes,java,容器

二、hostPath

hostPath:将Node节点上的目录/文件挂载到Pod容器的指定目录中,有持久化数据的能力,但只能在单个Node节点上持久化数据,不能实现跨Node节点的Pod共享数据

K8S之存储卷,kubernetes,java,容器

三、nfs

nfs:使用NFS服务将存储卷挂载到Pod容器的指定目录中,有持久化数据的能力,且也能实现跨Node节点的Pod共享数据

K8S之存储卷,kubernetes,java,容器

四、PV PVC

K8S之存储卷,kubernetes,java,容器

1.PV

PV:K8S在指定存储设备空间中逻辑划分创建的可持久化的存储资源对象
1.1创建PV的方式
手动根据配置文件创建的静态PV
通过StorageClass调用存储卷插件创建的动态PV
1.2PV的四种状态
PV状态 说明
Available(可用) 表示可用状态,PV 被创建出来了,还未被 PVC 绑定
Bound(已绑定) 表示 PV 已经被 PVC 绑定,PV 与 PVC 是一对一的绑定关系
Released(已释放) 表示 PVC 被删除,但是 PV 资源还未被回收
Failed(失败) 表示 PV 自动回收失败

2.PVC

PVC:是对PV资源对象的请求和绑定,也是Pod能挂载使用的一种存储卷类型

3.创建静态的PV PVC

3.1创建步骤
创建使用 静态PV
1)准备好存储设备和共享目录
2)手动创建PV资源,配置 存储卷类型 访问模式(RWO RWX ROX RWOP) 存储空间大小  回收策略(Retain Recycle Delete)等
3)创建PVC资源,配置请求PV资源的访问模式(必要条件,必须是PV能支持的访问模式) 存储空间大小(默认就近选择大于等于指定大小的PV)来绑定PV
4)创建Pod和Pod控制器资源挂载PVC存储卷,配置存储卷类型为 persistentVolumeClaim ,并在容器配置中定义存储卷挂载点目录
3.2创建过程
1.部署nfs服务器
通过vim /etc/exports  
/opt/data/ 192.168.111.0/24(rw,no_root_squash,sync)
通过exportfs -arv 在线发布

2.准备pv的yaml文件
apiVersion: v1
kind: PersistentVolume            ##类型为pv
metadata:
  name: pv01                      ##pv名称
spec:
  capacity:
    storage: 1Gi                  ##pv存储卷大小
  volumeMode: Filesystem
  accessModes:                    ##访问模式
    - ReadWriteOnce
    - ReadWriteMany
  #persistentVolumeReclaimPolicy: Recycle
  #storageClassName: slow
  nfs:                             ##pv持久卷的类型
    path: /opt/pv/v1               ##   挂载路径
    server: 192.168.111.40         ##    nfs服务器类型

3.准备pvc的yaml文件
apiVersion: v1
kind: PersistentVolumeClaim       ##类型为pvc
metadata:
  name: mypvc-1                   ##pvc名称
spec:
  accessModes:                    ##访问模式
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:                     ##请求资源量
      storage: 2Gi
  #storageClassName: slow

4.准备pod的yaml文件,挂载pvc存储卷
apiVersion: v1
kind: Pod
metadata:
  name: mypod-1
spec:
  containers:
    - name: mypod-1
      image: nginx
      volumeMounts:                    ##pod的容器内存储卷挂载路径
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: mypvc-1              ##指定pvc的存储卷名称

4.创建动态PV PVC

4.1创建步骤
创建使用 动态PV
1)准备好存储设备和共享目录
2)如果是外置存储卷插件,需要先创建serviceaccount账户(Pod使用的账户)和做RBAC授权(创建角色授予相关资源对象的操作权限,再将账户和角色进行绑定),使serviceaccount账户具有对PV PVC StorageClass等资源的操作权限
3)创建外置存储卷插件provisioner的Pod,配置中使用serviceaccount账户作为Pod的用户,并设置相关环境变量参数
4)创建StorageClass(SC)资源,配置中引用存储卷插件的插件名称(PROVISIONER_NAME)
---------------- 以上操作是一劳永逸的,以后只需要创建PVC时设置StorageClass就可以自动调用存储卷插件动态生成PV资源 ----------------
5)创建PVC资源,配置中设置 StorageClass资源名称 访问模式 存储空间大小。创建PVC资源会自动创建相关的PV资源。
6)创建Pod资源挂载PVC存储卷,配置存储卷类型为 persistentVolumeClaim ,并在容器配置中定义存储卷挂载点目录

4.2创建过程
1.部署nfs服务器
通过vim /etc/exports  
/opt/data/ 192.168.111.0/24(rw,no_root_squash,sync)
通过exportfs -arv 在线发布

2.准备serviceaccount账户(Pod使用的账户)和做RBAC授权
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-clusterrole
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - 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/v1
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


kubectl apply -f nfs-client-rbac.yaml


3.使用 Deployment 来创建 NFS Provisioner
NFS Provisioner(即 nfs-client),有两个功能:一个是在 NFS 共享目录下创建挂载点(volume),另一个则是将 PV 与 NFS 的挂载点建立关联。

#由于 1.20 版本启用了 selfLink,所以 k8s 1.20+ 版本通过 nfs provisioner 动态生成pv会报错,解决方法如下:
vim /etc/kubernetes/manifests/kube-apiserver.yaml
spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=RemoveSelfLink=false       #添加这一行
    - --advertise-address=192.168.80.20
......

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

#创建 NFS Provisioner
vim nfs-client-provisioner.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nfs-client-provisioner
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner   	  #指定Service Account账户
      containers:
        - name: nfs-client-provisioner
          image: quay.io/external_storage/nfs-client-provisioner:latest
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - name: nfs-client-root
              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: stor01
            path: /opt/k8s
	
	
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

4.创建 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开头
  
  
kubectl apply -f nfs-client-storageclass.yaml

kubectl get storageclass
NAME                      PROVISIONER   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client-storageclass   nfs-storage   Delete          Immediate           false                  43s

5.创建pvc资源
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client-storageclass
  resources:
    requests:
      storage: 1Gi
      
6.创建pod挂载pvc存储卷
apiVersion: v1
kind: Pod
metadata:
  name: test-storageclass-pod
spec:
  containers:
  - name: dongtaipvc
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: nfs-pvc
      mountPath: /mnt
  restartPolicy: Never
  volumes:
  - name: nfs-pvc
    persistentVolumeClaim:
      claimName: test-nfs-pvc
piVersion: v1
kind: Pod
metadata:
  name: test-storageclass-pod
spec:
  containers:
  - name: dongtaipvc
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: nfs-pvc
      mountPath: /mnt
  restartPolicy: Never
  volumes:
  - name: nfs-pvc

im:
claimName: test-nfs-pvc
piVersion: v1
kind: Pod
metadata:
name: test-storageclass-pod
spec:
containers:

  • name: dongtaipvc
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    volumeMounts:
    • name: nfs-pvc
      mountPath: /mnt
      restartPolicy: Never
      volumes:
  • name: nfs-pvc

K8S之存储卷,kubernetes,java,容器
K8S之存储卷,kubernetes,java,容器文章来源地址https://www.toymoban.com/news/detail-649089.html

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

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

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

相关文章

  • 容器技术,1. Docker,2. Kubernetes(K8s):

    目录 容器技术 1. Docker: 2. Kubernetes(K8s): Docker和Kubernetes 容器的主要应用场景有哪些? 有效的将单个操作系统的资源划分到孤立的组中,以便更好的在孤立的组之间平衡有冲突的资源使用需求,这种技术就是容器技术。 容器技术指通过在物理主机操作系统上创建一个一个

    2024年02月11日
    浏览(45)
  • 【Kubernetes】k8s使用minio作为对象存储

    k8s version:v1.20.15 minio version :v4.4.16 (1)安装kubectl-minio插件 自选minio-operaterd的版本下载包 minio-operater plugin 访问地址:http://ip:9090 1、sc-minio.yaml 创建 2、 创建所需的永久卷 序号 路径 容量 (G) 说明 所在节点 1 /data/1 5 租户使用 3个节点各1个 2 /data/log1 5 租户使用 3个节点各1个

    2024年04月09日
    浏览(39)
  • Kubernetes(K8s):容器化应用的航空母舰

    Kubernetes(K8s)是一个开源的容器编排系统,它的出现就像是为容器化应用提供了一艘强大的航空母舰。在这艘母舰上,你的应用容器就像是一架架战斗机,Kubernetes负责指挥它们起飞、飞行、降落,确保它们能在正确的时间、正确的地点执行任务。 Pod: Kubernetes的基本飞行编队

    2024年04月08日
    浏览(50)
  • Kubernetes(k8s)容器编排Pod介绍和使用

    Pod是kubernetes中你可以创建和部署的最小也是最简的单位,一个Pod代表着集群中运行的一个进程。 Pod有两个必须知道的特点 通过yaml文件或者json描述Pod和其内容器的运行环境和期望状态,例如一个最简单的运行nginx应用的pod,定义如下 3.1.1 参数描述 下面简要分析一下上面的

    2024年02月08日
    浏览(55)
  • kubernetes(k8s)为容器和 Pod 分配内存资源

    展示如何将内存请求(request)和内存限制(limit)分配给一个容器。 我们保障容器拥有它请求数量的内存,但不允许使用超过限制数量的内存。 创建新的命名空间 编辑yaml文件 配置文件的 args 部分提供了容器启动时的参数。 “–vm-bytes”, “150M” 参数告知容器尝试分配 15

    2024年02月15日
    浏览(37)
  • Kubernetes (K8s) 解读:微服务与容器编排的未来

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack : 📚 MERN/MEAN/MEVN Stack | 🌐 Jamstack | 🌍 GraphQL | 🔁 RESTful API | ⚡ WebSockets | 🔄 CI/CD | 🌐 Git Version Control | 🔧 DevOps 🌐 前端技术 Frontend : 🖋️ HTML CSS |

    2024年02月09日
    浏览(32)
  • Kubernetes基础(二十)-k8s存储对象Storage Classes

    在Kubernetes中,Storage Classes是用于定义不同存储配置的资源。它们允许开发者抽象存储的物理细节,使其更易于管理和使用。通过Storage Classes,可以定义存储的类型、性能、卷大小等参数,使得应用程序能够根据需求选择合适的存储。 Storage Classes工作的基本原理是通过定义标

    2024年02月19日
    浏览(33)
  • Kubernetes基础(二十三)-k8s持久化存储详解

    1.1 介绍 在容器中的磁盘文件是短暂的,当容器崩溃时,Kubelet会重新启动容器,但容器运行时产生的数据文件都将会丢失,之后容器会以最干净的状态启动。另外,当一个Pod运行多个容器时,各个容器可能需要共享一些文件,诸如此类的需求都可以使用Volume解决。Pod只需要通

    2024年03月17日
    浏览(37)
  • Kubernetes基础(十八)-k8s存储对象Persistent Volume

    在容器化应用中,Pod的生命周期是短暂的,当Pod终止时,其中的数据通常也会被销毁。为了解决这个问题,Kubernetes引入了Persistent Volume(PV)的概念。PV是集群中的一块持久化存储,它独立于Pod存在,可以被多个Pod共享,并且在Pod终止后仍然保留数据。 PV允许开发者将数据存储

    2024年02月20日
    浏览(25)
  • K8S系列文章 之 容器存储基础 Volume

    Volume是容器数据卷。我们经常创建删除一些容器,但有时候需要保留容器中的一些数据,这时候就用到了Volume。它也是容器之间数据共享的技术,可以将容器中产生的数据同步到本地。实际就是把容器中的目录挂载到运行着容器的服务器或个人电脑上。 第一种挂载volume的方式

    2024年02月13日
    浏览(24)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包