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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: k8s--数据存储、HostPath、NFS 存储

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


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3月前
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
220 1
|
24天前
|
存储 应用服务中间件 nginx
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
|
27天前
|
Kubernetes 容器
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
基于Ubuntu-22.04安装K8s-v1.28.2实验(三)数据卷挂载NFS(网络文件系统)
106 0
|
3月前
|
存储 Kubernetes 容器
k8s创建NFS动态存储
k8s创建NFS动态存储
|
3月前
|
存储 运维 Kubernetes
k8s学习笔记之StorageClass+NFS
k8s学习笔记之StorageClass+NFS
|
3月前
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。
124 0
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(三)
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(三)
183 0
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(三)
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(二)
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(二)
221 0
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(二)
|
Kubernetes Docker Perl
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(一)
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(一)
296 0
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(一)
|
安全 网络安全 数据安全/隐私保护
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(四)
KUBERNETES05_NFS坏境搭建、PV、PVC挂载目录、ConfigMap挂载文件、Secret挂载敏感信息(四)
172 0