• PV-PVC存储卷-01


    目录

    1、简介

    2、emptyDir存储卷

    3、hostPath存储卷

    4、nfs共享存储卷


    1、简介

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


    2、emptyDir存储卷


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

    mkdir /opt/volumes
    cd /opt/volumes

    vim pod-emptydir.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-emptydir
      namespace: default
      labels:
        app: myapp
        tier: frontend
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
        #定义容器挂载内容
        volumeMounts:
        #使用的存储卷名称,如果跟下面volume字段name值相同,则表示使用volume的这个存储卷
        - 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: {}
        
        
    kubectl apply -f pod-emptydir.yaml

    kubectl get pods -o wide
    NAME           READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
    pod-emptydir   2/2     Running   0          36s   10.244.2.19   node02            

    //在上面定义了2个容器,其中一个容器是输入日期到index.html中,然后验证访问nginx的html是否可以获取日期。以验证两个容器之间挂载的emptyDir实现共享。
    curl 10.244.2.19
    Thu May 27 18:17:11 UTC 2021
    Thu May 27 18:17:13 UTC 2021
    Thu May 27 18:17:15 UTC 2021
    Thu May 27 18:17:17 UTC 2021
    Thu May 27 18:17:19 UTC 2021
    Thu May 27 18:17:21 UTC 2021
    Thu May 27 18:17:23 UTC 2021


    3、hostPath存储卷


    hostPath卷将 node 节点的文件系统中的文件或目录挂载到集群中。
    hostPath可以实现持久存储,但是在node节点故障时,也会导致数据的丢失。

    //在 node01 节点上创建挂载目录
    mkdir -p /data/pod/volume1
    echo 'node01.kgc.com' > /data/pod/volume1/index.html

    //在 node02 节点上创建挂载目录
    mkdir -p /data/pod/volume1
    echo 'node02.kgc.com' > /data/pod/volume1/index.html

    //创建 Pod 资源
    vim pod-hostpath.yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-hostpath
      namespace: default
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        #定义容器挂载内容
        volumeMounts:
        #使用的存储卷名称,如果跟下面volume字段name值相同,则表示使用volume的这个存储卷
        - name: html
          #挂载至容器中哪个目录
          mountPath: /usr/share/nginx/html
          #读写挂载方式,默认为读写模式false
          readOnly: false
      #volumes字段定义了paues容器关联的宿主机或分布式文件系统存储卷
      volumes:
        #存储卷名称
        - name: html
          #路径,为宿主机存储路径
          hostPath:
            #在宿主机上目录的路径
            path: /data/pod/volume1
            #定义类型,这表示如果宿主机没有此目录则会自动创建
            type: DirectoryOrCreate


    kubectl apply -f pod-hostpath.yaml

    //访问测试
    kubectl get pods -o wide
    NAME           READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
    pod-hostpath   2/2     Running   0          37s   10.244.2.35   node02            

    curl 10.244.2.35
    node02.kgc.com

    //删除pod,再重建,验证是否依旧可以访问原来的内容
    kubectl delete -f pod-hostpath.yaml  
    kubectl apply -f pod-hostpath.yaml 

    kubectl get pods -o wide
    NAME           READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
    pod-hostpath   2/2     Running   0          36s   10.244.2.37   node02            

    curl  10.244.2.37 
    node02.kgc.com


    4、nfs共享存储卷


    //在stor01节点上安装nfs,并配置nfs服务
    mkdir /data/volumes -p
    chmod 777 /data/volumes

    vim /etc/exports
    /data/volumes 192.168.10.0/24(rw,no_root_squash)

    systemctl start rpcbind
    systemctl start nfs

    showmount -e
    Export list for stor01:
    /data/volumes 192.168.10.0/24


    //master节点操作
    vim pod-nfs-vol.yaml
    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: /data/volumes
            server: stor01


    kubectl apply -f pod-nfs-vol.yaml

    kubectl get pods -o wide
    NAME                     READY     STATUS    RESTARTS   AGE       IP            NODE
    pod-vol-nfs              1/1       Running   0          21s       10.244.2.38   node02


    //在nfs服务器上创建index.html
    cd /data/volumes
    vim index.html

    nfs stor01

    //master节点操作
    curl 10.244.2.38

    nfs stor01

    kubectl delete -f pod-nfs-vol.yaml   #删除nfs相关pod,再重新创建,可以得到数据的持久化存储

    kubectl apply -f pod-nfs-vol.yaml


    nas gfs  ceph san

  • 相关阅读:
    C/C++内存管理
    Conmi的正确答案——linux硬盘管理命令(持续更新中)
    3D 沙盒游戏之人物的点击行走移动
    亚马逊卖家自己掌握测评养号技术的重要性
    关于springboot的优雅停机和健康检查配置(用于k8s服务重启)
    C语言---汉诺塔与青蛙跳台阶。
    springboot搭建微服务
    【[USACO12MAR]Cows in a Skyscraper G】【状压DP && DFS】
    pdf转图片(利用pdf2image包)
    Python编程从入门到实践 第五章:if语句 练习答案记录
  • 原文地址:https://blog.csdn.net/m0_70893463/article/details/134273615