k8s-存储卷介绍

存储卷

Why:数据与镜像解耦,以及容器间的数据共享;
What:k8s抽象出的一个对象,用来保存数据,做存储用。

常用的几种存储卷
emptyDir:本地临时卷(容器内部)–当容器删除,数据永久删除。
hostPath:本地卷(宿主机)–将宿主机节点的文件或目录挂载到集群中,pod删除,卷不会删除,需要注意调度问题,除非是共享存储或者指定调度。
nfs:共享卷
configmap/secret:配置中心
PV/PVC

挂载基础容器的TCP/IP协议栈,文件目录等。
k8s.gcr.io/pause 基础容器

示例

empryDir 

emptyDir多使用为pod内多个容器之间共享存储目录,实现某种资源共享目的。
emptyDir实际是将Volume的内容写在Pod所在节点的磁盘上,另外emptyDir也可以设置存储介质为内存,如下所示,medium设置为Memory。
volumes:
  - name: html
    emptyDir:
      medium: Memory 
复制代码
    spec:
      restartPolicy: Always
      serviceAccountName: default
      initContainers:
      - name: init-config
        image: xxx:10006/k8s/busybox:1.28
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "ln -sf /mnt/nginx/test.conf /etc/nginx/conf.d/default.conf"]
        volumeMounts:
        - name: nginx-default-config
          mountPath: /mnt/nginx
        - name: nginx-conf-d
          mountPath: /etc/nginx/conf.d
      containers:
      - name: nginx-configmap-container
        image: xxx:10006/k8s/nginx:latest
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: nginx-default-config
          mountPath: /mnt/nginx
        - name: nginx-conf-d
          mountPath: /etc/nginx/conf.d
      volumes:
      - name: nginx-default-config
        configMap:
          name: nginx-default-config- name: nginx-conf-d
        emptyDir: {}
      #nodeSelector:
      #  onne: north
复制代码

hostPath

HostPath是一种持久化存储,emptyDir里面的内容会随着Pod的删除而消失,但HostPath不会,如果对应的Pod删除,HostPath Volume里面的内容依然存在于节点的目录中,如果后续重新创建Pod并调度到同一个节点,挂载后依然可以读取到之前Pod写的内容。

HostPath存储的内容与节点相关,所以它不适合像数据库这类的应用,想象下如果数据库的Pod被调度到别的节点了,那读取的内容就完全不一样了。

记住永远不要使用HostPath存储跨Pod的数据,一定要把HostPath的使用范围限制在读取节点文件上,这是因为Pod被重建后不确定会调度哪个节点上,写文件可能会导致前后不一致。

复制代码
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: linux40
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ng-deploy-80
  template:
    metadata:
      labels:
        app: ng-deploy-80
    spec:
      containers:
      - name: ng-deploy-80
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /data/mysql    //挂载容器的目录路径
          name: data-volume    //选择挂载哪个名称
      volumes:
      - name: data-volume
        hostPath:    //卷类型
          path: /data/mysql   //可以预先创建,也可以不用创建
复制代码

查看容器运行的节点,去对应节点查看

]# kubectl   get pods -A -o wide 
]# echo "hello world" > /data/mysql/index.html

在容器查看数据是否已经同步

]# kubectl exec -it nginx-deployment-758f46d4fb-vzkn7 -n linux40 /bin/sh
# cat    /data/mysql/index.html
hello world

网络共享存储NFS

复制代码
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: linux40
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ng-deploy-80
  template:
    metadata:
      labels:
        app: ng-deploy-80
    spec:
      containers:
      - name: ng-deploy-80
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /usr/share/nginx/html   
          name: linux40-nfs1-volume
        - mountPath: /usr/share/nginx/html/data  
          name: linux40-nfs2-volume
      volumes:
      - name: linux40-nfs1-volume
        nfs:
          server: 192.168.64.110   //NFS权限确保允许pod和node节点的网段挂载
          path: /root/data/nfs1
      - name: linux40-nfs2-volume
        nfs:
          server: 192.168.64.110
          path: /root/data/nfs2
复制代码

查看pod挂载

复制代码
]# kubectl  exec -it nginx-deployment-6bc6445496-vh8qh  -n linux40 /bin/bash
root@nginx-deployment-6bc6445496-vh8qh:/# df -hT
Filesystem                     Type     Size  Used Avail Use% Mounted on
overlay                        overlay   46G  2.7G   43G   6% /
tmpfs                          tmpfs     64M     0   64M   0% /dev
tmpfs                          tmpfs    1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mapper/centos-root        xfs       46G  2.7G   43G   6% /etc/hosts
shm                            tmpfs     64M     0   64M   0% /dev/shm
192.168.64.110:/root/data/nfs1 nfs4      50G  3.4G   47G   7% /usr/share/nginx/html
tmpfs                          tmpfs    1.9G   12K  1.9G   1% /run/secrets/kubernetes.io/serviceaccount
192.168.64.110:/root/data/nfs2 nfs4      50G  3.4G   47G   7% /usr/share/nginx/html/data
tmpfs                          tmpfs    1.9G     0  1.9G   0% /proc/acpi
tmpfs                          tmpfs    1.9G     0  1.9G   0% /proc/scsi
tmpfs                          tmpfs    1.9G     0  1.9G   0% /sys/firmware
复制代码

可以实现同一个NFS挂载多个pod,也可以一个pod挂载多个NFS

 

PV和PVC

https://www.cnblogs.com/rtnb/p/15664690.html

 

posted @   不会跳舞的胖子  阅读(373)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示