首页 > 其他分享 >k8s--数据存储、HostPath、NFS 存储

k8s--数据存储、HostPath、NFS 存储

时间:2022-11-27 10:22:57浏览次数:53  
标签:存储 215 name -- volume HostPath nfs pod root

HostPath

在使用 EmptyDir 的时候,EmptyDir 中数据不会被持久化,它会随着 pod 的结束而销毁,如果想简单的将数据持久化到主机中,可以选择 HostPath

HostPath 就是将 Node 主机中一个实际目录挂载到 pod 中,以供容器使用,这样的设计就可以保证 pod 销毁了,但是数据依然可以存在于 Node 主机上

创建一个 volume-hostpath.yaml,内容如下

apiVersion: v1
kind: Pod # 类型为 pod
metadata:
  name: volume-hostpath # pod 的名称
  namespace: zouzou
spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - containerPort: 80 # 暴露容器的端口
    volumeMounts: # 挂载
    - name: logs-volume # 要和 volumes 的name 一致
      mountPath: /var/log/nginx
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"]
    volumeMounts:
    - name: logs-volume
      mountPath: /logs
  volumes:
  - name: logs-volume  # 
    hostPath: 
      path: /tmp/logs # 挂载到 node 主机上的 /tmp/log 目录下
      type: DirectoryOrCreate  # 目录存在就使用,不存在就先创建后使用

关于type的值的一点说明:

  • DirectoryOrCreate:目录存在就使用,不存在就先创建后使用
  • Directory:目录必须存在
  • FileOrCreate:文件存在就使用,不存在就先创建后使用
  • File:文件必须存在
  • Socket:unix 套接字必须存在
  • CharDevice:字符设备必须存在
  • BlockDevice:块设备必须存在

创建 pod

# 创建 pod
[root@dce-10-6-215-215 pod-dir]# kubectl apply -f volume-hostpath.yaml
pod/volume-hostpath created

查看 pod

# pod 的 ip 地址为 172.29.35.63,并且在 dce-10-6-215-200 的节点上创建了
[root@dce-10-6-215-215 pod-dir]# kubectl get pod -n zouzou -o wide
NAME              READY   STATUS    RESTARTS   AGE   IP             NODE               NOMINATED NODE   READINESS GATES
volume-hostpath   2/2     Running   0          32s   172.29.35.63   dce-10-6-215-200   <none>           <none>

我们登录到 dce-10-6-215-200 的 node 节点上,看 /tmp/logs 目录存在不

可以看到,目录自动创建了,并且创建了两个日志文件,我们打印下 access.log 文件里的内容

# 实时查看日志,在 node 节点上查看
tail -f access.log

因为 pod 是我们刚创建的,还没有访问 nginx,所以还没有日志产生,接下来,我们访问下 nginx

# ip 换成你自己的 ip
curl 172.29.35.63:80

访问几次后,在 node 节点上去查看日志,这时候发现已经有日志输出了

然后我们删除 pod,查看文件里里面的内容是否还存在

# 删除 pod
kubectl delete -f volume-hostpath.yaml

删除 pod 之前在去 dce-10-6-215-200 的 node 节点上查看,发现文件和文件里面的内容还是存在的。当我们重新创建 pod 时,在访问,日志会接着往里面写入,不会删除之前的日志

NFS

HostPath 可以解决数据持久化的问题,但是一旦 Node 节点故障了,pod 如果转移到了别的节点,又会出现问题了,此时需要准备单独的网络存储系统,比较常用的是 NFS、CIFS

NFS 是一个网络文件存储系统,可以搭建一台 NFS 服务器,然后将 pod 中的存储直接连接到 NFS 系统上,这样的话,无论 pod 在节点上怎么转移,只要 Node 跟 NFS 的对接没问题,数据就可以访问成功

首先要准备 nfs 的服务器,这里为了简单,直接是 master 节点做 nfs 服务器

在 master 机器上安装 nfs 服务

# 安装 nfs 服务
yum install nfs-utils -y

在 master 上准备一个共享目录

# 创建一个共享目录,-p 递归创建,-v 显示创建信息
[root@dce-10-6-215-215 ~]# mkdir /root/data/nfs -pv
mkdir: created directory ‘/root/data’
mkdir: created directory ‘/root/data/nfs’

将共享目录以读写权限暴露给 10.6.215.0/24 网段中的所有主机(注意,网段要是你自己的网段,我这里 master 和 node 节点的 ip 都是 10.6.215.xxx)

# 在 /etc 创建个 exports 文件
vim /etc/exports

将下面内容写入到文件里

/root/data/nfs     10.6.215.0/24(rw,no_root_squash)
  • rw :表示读写模式
  • no_root_squash :登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限

启动 nfs 服务

systemctl restart nfs

接下来,要在每 个node 节点上都安装下 nfs,这样的目的是为了 node 节点可以驱动 nfs 设备。只安装就可以了,不需要启动 nfs 服务

# 在所有 node 节点上安装 nfs,不需要启动
yum install nfs-utils -y

接下来,就可以编写 pod 的配置文件了,创建 volume-nfs.yaml,内容如下

apiVersion: v1
kind: Pod # 类型为 pod
metadata:
  name: volume-nfs # pod 的名称
  namespace: zouzou
spec:
  containers:
  - name: nginx
    image: nginx:1.14
    ports:
    - containerPort: 80 # 暴露容器里面的 80 端口
    volumeMounts: # 挂载
    - name: logs-volume # 名字要和 volumes 里的一致
      mountPath: /var/log/nginx
  - name: busybox
    image: busybox:1.30
    command: ["/bin/sh","-c","tail -f /logs/access.log"] 
    volumeMounts:
    - name: logs-volume
      mountPath: /logs
  volumes:
  - name: logs-volume
    nfs: # nfs 类型
      server: 10.6.215.215  # nfs 服务器地址
      path: /root/data/nfs # 共享文件路径

创建 pod

# 创建 pod
[root@dce-10-6-215-215 nfs]# kubectl apply -f volume-nfs.yaml
pod/volume-nfs created

查看 pod

# 查看 pod,pod 的 ip 为 172.29.35.63
[root@dce-10-6-215-215 nfs]# kubectl get pods volume-nfs -n zouzou -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP             NODE               NOMINATED NODE   READINESS GATES
volume-nfs   2/2     Running   0          98s   172.29.35.63   dce-10-6-215-200   <none>           <none>

查看 nfs 服务器上的共享目录,发现已经有文件了

查看下 access.log 文件里的内容

tail -f access.log

刚开始是没有的,用 pod 的 ip 访问下 nginx

curl 172.29.35.63:80

 

标签:存储,215,name,--,volume,HostPath,nfs,pod,root
From: https://www.cnblogs.com/zouzou-busy/p/16163284.html

相关文章

  • OI 生涯回忆录
    AFOer,昨天刚退役。身处弱县,奥赛并不是一个好出路。高一开始学OI,兴趣异常浓厚。招生结束后不到半个月就是国庆假期,因为要集训,一大批人退了。显然不包括我,而且我一学就是......
  • 分布式系统系列
    个人经验总结冗余(扩展性)的作用和带来的问题分布式系统中,实现可扩展性(节点冗余)是实现系统高可用性、数据可靠性的重要手段,因为冗余使得节点挂了备用节点可顶上、数据丢了......
  • 每日算法之二叉树的下一个结点
    JZ8二叉树的下一个结点描述给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。......
  • 解决Django的【LookupError: No installed app with label ‘admin‘】
    其实这个问题比较好解决:1、首先debugmain函数,定位你的问题,我这边的问题是报这个错误;'ErrorloadingMySQLdbmodule.\n''Didyouinstallmysqlclient?'  2、针对......
  • yolov5推理模块复现
    importcv2importnumpyasnpimporttorch.nnimporttorchvisionimporttorchvision.transforms.functionalasTcheckpoint=torch.load("D:/yolov5m.pt",map_......
  • P3773 [CTSC2017]吉夫特
    发现只要式子中有一个数为奇数,整个式子就为\(0\)。把膜数代到每一乘积项中,容易发现这个东西就是一个\(\text{Lucas}\)定理。卢卡斯定理有一个性质,那就是如果膜数是\(......
  • 使用open live write发布博客园的博客
    官方教程的FAQ:http://www.cnblogs.com/zsy/p/5859928.html包含了几个工具可以都看看-------------------------------------------------------------------------------......
  • <二>派生类的构造过程
    派生类从继承可以继承来所有的成员(变量和方法)除了构造函数和析构函数派生类怎么初始化从基类继承来的成员变量的呢?通过调用基类的构造函数来初始化派生类的构造函数和......
  • shopex安装Zend Optimizer - 3.3.0后依然乱码
    修改php.ini 在最后加上一下内容[Zend]zend_optimizer.optimization_level=15;优化程度,这里定义启动多少个优化过程,默认值是15,表示同时开启10个优化过程中的1-4,我们可......
  • 完整解决方案:让你的IIS 支持PHP方法
    目前很多​​站长​​都开始使用PHP来编写网站代码,而且目前开源的PHP系统也很多,但是MSIIS(internetinformationsystem)并不支持PHP,这给我们调试和使用PHP站点带来了很多困......