K8s存储之简单存储

K8s存储之简单存储

1.K8s存储

        Volume是Pod中能够被多个container访问的共享目录。

        K8s基于Volume实现:

        (1)同一个Pod中不同容器之间的数据共享;

        (2)数据的持久化存储。Volume生命周期与容器的生命周期相互独立,Volume不受容器的启停影响,数据不丢失。

        Volumn支持的类型:

                简单存储:EmptyDir、HostPath、NFS

                高级存储:PV、PVC

                配置存储:ConfigMap、Secret

2 简单存储

        简单存储包括EmptyDir、HostPath、NFS。

2.1 EmptyDir

        EmptyDir是在Pod分配到Node时创建的,初始内容为空,由 k8s自动分配一个目录。当Pod销毁时,EmptyDir中的数据也会被永久删除。仅适用于单节点。

EmptyDir应用场景:

        (1)临时空间,应用程序运行时所需的临时目录,且无需永久保留。
        (2)容器间共享数据(多容器共享目录)
        (3)缓存空间,例如基于磁盘的归并排序。
        (4)为耗时较长的计算任务提供检查点,以便任务能方便地从崩溃前状态恢复执行。
        (5)在 Web 服务器容器服务数据时,保存内容管理器容器获取的文件。

配置示例

test-demo-web的日志目录/var/log/ test-demo-web和test-demo-service的日志目录/var/log/ test-demo-service设置为EmptyDir,容器配置如下,关键配置见红色字体:

apiVersion: v1

kind: Pod

metadata:

   name: volume-emptydir

   namespace: default

spec:

   containers:

   - name: test-demo-web

     image: test-demo-web:1.0.0

     ports:

     - containerPort: 80

     volumeMounts:

     - name: logs-volume

       mountPath: /var/log/test-demo-web

   - name: test-demo-service

     image: test-demo-service1.0.0

     ports:

     - containerPort: 8888

     volumeMounts:

     - name: logs-volume

       mountPath: /var/log/test-demo-service

   volumes:

   - name: logs-volume ## 与volumeMounts.name必需保持一致,否则配置无效

     emptyDir: {}

2.2 HostPath

        HostPath将节点的实际目录挂载到Pod中,供容器使用,即使Pod销毁,数据依然存在于节点目录上。仅适用于单节点;多节点场景,需使用网络存储系统实现目录共享,如NFS,CIFS。

配置示例

        test-demo-web的日志目录/var/log/ test-demo-web和test-demo-service的日志目录/var/log/ test-demo-service设置为HostPath,容器配置如下,关键配置见红色字体:

apiVersion: v1

kind: Pod

metadata:

   name: volume-emptydir

   namespace: default

spec:

   containers:

   - name: test-demo-web

     image: test-demo-web:1.0.0

     ports:

     - containerPort: 80

     volumeMounts:

     - name: logs-volume

       mountPath: /var/log/test-demo-web

   - name: test-demo-service

     image: test-demo-service1.0.0

     ports:

     - containerPort: 8888

     volumeMounts:

     - name: logs-volume

       mountPath: /var/log/test-demo-service

   volumes:

   - name: logs-volume ## 与volumeMounts.name必需保持一致,否则配置无效

     hostPath:

        path: /data/logs/test-demo-app

        type: DirectoryOrCreate ##目录不存在则创建目

hostPath.type值说明如下:

类型

说明

DirectoryOrCreate

目录存在就使用,不存在就先创建

Directory

目录必须存在

FileOrCreate

文件存在就使用,不存在就先创建

File

文件必须存在

Socket

unix套接字必须存在

CharDevice

字符设备必须存在

BlockDevice

块设备必须存在

2.3 NFS

         在多节点场景下,如果Pod漂移到其他节点, Pod容器运行存储的数据在其他服务器没有,数据丢失,引入NFS网络文件系统可解决该问题。

        在主节点和备份节点均需安装nfs服务,主节点安装nfs-kernel-server和rpcbind服务,从节点安装nfs-common服务,具体操作如下:

step 1:主节点配置并创建共享目录

------主节点A在线下载依赖包-----------

sudo apt-get install nfs-kernel-server

sudo apt-get install rpcbind

----查看是否已安装

sudo dpkg -l | grep nfs-kernel-server

sudo dpkg -l | grep rpcbind

----- master节点-------

      mkdir /share_dir

----共享目录配置------------

      vim /etc/exports

      /share_dir *(rw,sync,no_root_squash,no_subtree_check)

      exportfs -a

-------启动nfs服务-------------------------

systemctl restart nfs-kernel-server

systemctl restart rpcbind

----------查看共享目录

showmount -e

step 2:挂在从节点B配置

   sudo apt-get install nfs-common

   sudo showmount -e   主节点A的IP

   mkdir share_dir

   mount -t nfs 主节点A的ip:/share_dir  /root/share_dir

    ----------开机自启动-----------------------

      vim  /etc/fstab

      主节点A的ip:/share_dir /root/share_dir nfs defaults 0 0

Pod的Yaml配置如下:

test-demo-web的日志目录/var/log/ test-demo-web和test-demo-service的日志目录/var/log/ test-demo-service设置为HostPath,容器配置如下,关键配置见红色字体:

apiVersion: v1

kind: Pod

metadata:

   name: volume-emptydir

   namespace: default

spec:

   containers:

   - name: test-demo-web

     image: test-demo-web:1.0.0

     ports:

     - containerPort: 80

     volumeMounts:

     - name: logs-volume

       mountPath: /var/log/test-demo-web

   - name: test-demo-service

     image: test-demo-service1.0.0

     ports:

     - containerPort: 8888

     volumeMounts:

     - name: logs-volume

       mountPath: /var/log/test-demo-service

        volumes:

             - name: logs-volume

            nfs:

             server: 192.168.16.100  #nfs服务器地址

             path: /mnt/share/nfs #共享文件路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Herry_644280825

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值