zoukankan      html  css  js  c++  java
  • kubernetes 的数据的存储 存储卷

    根据应用本身是否 需要持久存储数据,以及某一此请求和此前的请求是否有关联性,可以分为四类应用:

      1.有状态要存储 2.有状态无持久存储 3.无状态无持久存储4.无状态有持久存储

    在k8s上的数据持久性:1.emptyDir:只在节点本地使用,一旦pod删除存储卷也删除。只是用来做临时目录,可是做缓存用 没有任何持久性

                 2.hostPath:主机路径,直接在宿主机上找一个目录与容器建立关联关系,也不具有真正意义上的持久性

                 3.网络连接性存储 1)传统意义上的存储设备,本地的san(iscsi),nas(nfs,cifs)

                       2) 分布式存储 文件系统级别的(glusterfs,cephfs) 块存储级别的(ceph) 

                       3)云存储  EBS、Azure Disk、

     可以通过命令  kubectl explain pod.spec.volumes

    一、emptyDir:同一个pod内的多个容器可以共享同一个存储卷,pod删除存储卷也删除。不能实现数据存储化

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-volume
      namespace: default
      labels:
        app: myapp
        tier: frontend
      annotations:
        create_by: yiruiduan
    spec:
      containers:
      - name: nginx
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html/
      - name: busybox
        image: busybox:latest
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: html
          mountPath: /data
        command: ['/bin/sh','-c',"while true;do echo $(date) >>/data/index.html;sleep 2;done"]
      volumes:
      - name: html
        emptyDir: {}

    访问nginx就可以看到动态生成的index.html

    二、hostPathsu宿主机路径,把pod所在的宿主机之上的文件 系统的某一目录,与pod建立关系,在pod被删除的时候,这个存储卷是不会被删除的。所以只要同一个pod能够调度到同一个节点上,对应的数据依然是存在的。这只是节点及的持久,节点down了数据也就没有了。存在数据丢失

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-vol-hostpath
      namespace: default
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
    
      volumes:
      - name: html
        hostPath:
          path: /data/pod/volume1
          type: DirectoryOrCreate     #如果目录不存在就创建

    三、nfs共享存储,节点挂在共享存储。无论调度在那个节点上所有数据能共享访问。

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-vol-nfs
      namespace: default
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
    
      volumes:
      - name: html
        nfs:
          path: /k8s              #nfs所共享的目录
          server: 192.168.1.120   #nfs服务器地址

    四、pvc(persistentVolumeClaim)

            

    首先要制作pv,它是不包含名称空间中的。通过nfs共享目录的形式

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv001
      labels:
        name: pv001
    spec:
      nfs:
        path: /k8s/v1
        server: 192.168.1.120
      accessModes: ["ReadWriteMany","ReadWriteOnce"]   #访问模式
    capacity: #设置pv的大小 storage: 2Gi

    制作pvc

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mypvc
      namespace: default
    spec:
      accessModes: ["ReadWriteMany"]    #是pv的访问模式的子集
      resources:                        #所需pv的大小 
        requests:
          storage: 6Gi

    pod 使用pvc

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-vol-pvc
      namespace: default
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
    
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: mypvc

    pv的动态供给

  • 相关阅读:
    python发送丁丁消息
    python实现发送微信消息
    Linux将一个文件夹或文件夹下的所有内容复制到另一个文件夹
    Jenkins服务器磁盘空间爆满问题解决
    如何在Linux中自动删除或清理/tmp文件夹内容?
    Linux系统挂载NFS文件系统
    mongodb创建用户创建库分配权限
    docker部署node.js
    【leetcode】1588. Sum of All Odd Length Subarrays
    【leetcode】1559. Detect Cycles in 2D Grid
  • 原文地址:https://www.cnblogs.com/both/p/9662825.html
Copyright © 2011-2022 走看看