【云原生 • Kubernetes】kubernetes 核心技术 - 持久化存储

举报
敬 之 发表于 2022/09/25 01:59:37 2022/09/25
【摘要】 本文导读 一、nfs 网络存储1. master 节点部署 nfs(nfs 服务端)2. node 节点部署 nfs3. 网络存储验证演示 二、PV 和 PVC1. PV、PVC 介...

在这里插入图片描述


在以往的数据卷存储形式中,存储是本地存储,也就是说当我们的节点 pod 重启过后,数据便会清空,这仅仅适合临时存储。而要让数据长久的存储下来,就需要引入持久化存储

一、nfs 网络存储

1. master 节点部署 nfs(nfs 服务端)

首先我们需要将一台虚拟机/服务器作为 nfs服务器,并安装 nfs、设置挂载路径。在这里我使用 master 节点虚拟机 【k8s_master】 作为 nfs 服务器,IP 地址为 192.168.200.132;

在这里插入图片描述
第一步:安装 nfs;

yum install -y nfs-utils

在这里插入图片描述
第二步:设置挂载路径,vi /etc/exports 进入文件,在该文件中加入以下内容;

在这里插入图片描述
我这里挂载的是 /data/nfs 目录(可自定),* 代表所有内容,rw 代表授予读写权限;

第三步:创建要挂载的目录 /data/nfs,如果不创建目录后面会报错找不到该目录;

[root@master ~]# mkdir data
[root@master ~]# cd data
[root@master data]# mkdir nfs
[root@master data]# ls
nfs
[root@master data]# 

此时,nfs 服务端部署完成。

2. node 节点部署 nfs

在 k8s 集群中代表 node 节点的虚拟机/服务器中也安装 nfs;

提示:k8s 集群的完整搭建过程均已在往期文章讲述,文章之间内容环环相扣,详情请参见专栏 云原生 - 入门到实战

在这里我使用 node 节点虚拟机【k8s_node1】和【k8s_node2】,IP 地址分别为 192.168.200.133、192.168.200.134;

k8s_node1
k8s_node2

3. 网络存储验证演示

第一步:在 nfs 服务端(master 节点)启动 nfs;

systemctl start nfs

启动之后可以使用命令 ps -ef | grep nfs 查看 nfs 进程;

在这里插入图片描述
第二步:新建一个目录 pv 和 yaml 文件 nfs-nginx.yaml;

[root@master ~]# mkdir pv
[root@master ~]# cd pv
[root@master pv]# vi nfs-nginx.yaml

yaml 文件中写入以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep1
spec:
   replicas: 1
   selector: 
     matchLabels: 
       app: nginx
   template:
      metadata:
        labels:
          app: nginx
      spec:
        containers:
        - name: nginx
          image: nginx
          volumeMounts: 
          - name: wwwroot
            mountPath: /usr/share/nginx/html
          ports:
          - containerPort: 80
        volumes: 
          - name: wwwroot
            nfs: 
              server: 192.168.200.132
              path: /data/nfs

在这里插入图片描述
第三步:在 yaml 文件创建成功后执行该文件;

[root@master pv]# kubectl apply -f nfs-nginx.yaml 
deployment.apps/nginx-dep1 created
[root@master pv]# 

如果启动文件时报错请先关闭系统的防火墙 service iptables stop

此时查看 pods 可以看到我们创建的 nginx-dep1,为 running 状态即创建成功;

在这里插入图片描述

第四步:进入 nginx-dep1

kubectl exec -it nginx-dep1-6f58f9944b-zz25r bash

接下来就可以使用我们在 yaml 文件中挂载的目录 /usr/share/nginx/html 了;开始查看该目录一定是为空的,当我们 nfs 目录下创建任何文件时,文件都会存储在此挂载目录,且是持久化存储。

二、PV 和 PVC

1. PV、PVC 介绍

在网络存储的方式中,我们必须要知道 nfs 服务器的 IP 地址,那么如若 IP 地址泄露,安全则不能被保障,所以该方法弊端明显。而 PV 和 PVC 则可以解决该弊端:

  • PV:PersistentVolume 持久化存储,对存储资源进行抽象,可以对外提供一个专门用于调用的接口(生产者)。
  • PVC:PersistentVolumeClaim 持久化存储调用,用户调用无需关系内部实现细节,直接调用即可(消费/调用者)。

2. 实现流程

第一步:在 pv 目录下创建 pv.yaml 文件,写入以下内容;

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
   capacity: 
     storage: 5Gi
   accessModes: 
     - ReadWriteMany
   nfs: 
     path: /k8s/nfs
     server: 192.168.200.132

第二步:在 pv 目录下创建 pvc.yaml 文件,写入以下内容;

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep1
spec:
  replicas: 3
  selector: 
    matchLabels: 
      app: nginx
  template:
    metadata:
      labels:
        app: nginx	
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports: 
        - containerPort: 80
        volumes: 
        - name: wwwroot
          persistentVolumeClaim:
            claimName: my-pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi

第三步:执行 yaml 文件;

kubectl apply -f pv.yaml
kubectl apply -f pvc.yaml

之后的操作则与 nfs 相同,区别在于此方法多了一层 PVC。

文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。

原文链接:majinjian.blog.csdn.net/article/details/126773289

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。