第三章 K8s存储与网络笔记

一、K8s存储

1、存储卷基础

在docker容器中,为了实现数据的持久性存储,在宿主机和容器内做映射,可以保证在容器的生命周期结束,数据依旧可以实现持久性存储。

但是在k8s中,由于pod分布在各个不同的节点之上,并不能实现不同节点之间持久性数据的共享,并且,在节点故障时,可能会导致数据的永久性丢失。为此,k8s就引入了外部存储卷的功能。

1.1、emptyDir目录

emptyDir:Pod挂载在本地的磁盘或者内存,被称为emptyDir,称为临时空目录,随着Pod删除,也会被删除。注意:一个容器崩溃了不会导致数据的丢失,因为容器的崩溃并不移除pod.

做一个empty数据卷示例:pod-emp.yaml

命令:kubectl create -f pod-emp.yaml

进入容器:kubectl exec -it empty-pod /bin/sh

运行后查看,挂载描述如下:

使用场景,容器共享文件。在一个pod中有两类容器,一个是主容器,一个是辅助容器,两个容器使用同一个存储卷,辅助容器用来生成新的内容,主容器加载使用。

示例2运行pod-empty.yaml文件

运行:

kubectl create -f pod-empty.yaml

查看容器:

kubectl get pods -o wide

可看到页面内容不断增加

1.2、gitrepo目录

gitrepo实际上并不是一个新的存储类型,只是emptydir上补添一个git命令来拉取文件而已。当pod创建时候,会拉取git(依赖于宿主机git命令驱动)仓库中数据克隆到本地,并且作为存储卷定义在pod之上。gitrepo基于emptyDir,此存储卷是emptyDir,git仓库中拉取的代码存放在emptyDir后被定义到pod。

因为拉取git仓库的动作,仅仅是在pod创建时触发一次,并不会待续更新文件,因此在工作中基本上无用处。有兴趣的同学可以自行研究一下。

1.3、hostPath目录

hostPath类型则是映射node文件系统中的文件或者目录到pod里。可实现针对某一节点的数据持久化,如果节点宕机了,那数据就丢失了

示例:pod-hostpath.yaml

创建容器:

kubectl create -f pod-hostpath.yaml

进入pod中创建一个测试文件:

kubectl exec -it host-pod /bin/sh

在挂在目录下,创建一个文件:

[root@leader k8s-config]# kubectl exec -it host-pod /bin/sh

/data # echo 123 > 123file

/data # ls

123file

/data # cat 123file

123

/data #

回到pod运行的node机器上查看(leader192.168.30.161),是否存在了这个测试文件

[root@leader ~]#  ls /data

ls: cannot access /data: No such file or directory

查看pod信息发现该容器运行在work1上面

然后到work1机器上查看,果然有此文件

[root@work1 ~]# ls /data

123file

[root@work1 ~]#

此后,删除掉pod,此文件也依然存在,可自行去验证。

1.4、nfs共享存储卷

nfs使的我们可以挂在已经存在的共享到的我们的Pod中,nfs不会被删除,仅仅是解除挂在状态而已,这就意味着NFS能够允许我们提前对数据进行处理,而且这些数据可以在Pod之间相互传递.并且,nfs可以同时被多个pod挂在并进行读写

1.5、节点安装配置nfs

1)这里在leader机器上安装nfs

yum install -y nfs-utils

2)配置nfs:

vi /etc/exports

添加内容:/data/volumes *(rw,no_root_squash)

3)启动并查看:

[root@leader ~]# systemctl start nfs

[root@leader ~]# systemctl start rpcbind

[root@leader ~]# showmount -e localhost

Export list for localhost:

/data/volumes *

[root@leader ~]#

[root@leader ~]# showmount -e

Export list for leader:

/data/volumes *

[root@leader ~]#

1.6、node节点挂载

需要在所有节点安装`nfs-utils` 组件,否则当Pod被分配到没有组件的节点,会启动失败,因为没有`mount.nfs`。

1)安装nfs:

yum install -y nfs-utils

注意:

为了让leader与work节点能互相访问,需要在work节点的host配置里面添加leader节点的信息

 

2)挂载nfs:

mount -t nfs leader:/data/volumes /nfs

注意:没有则先在work机器新建nfs目录,leader机器新建目录: /data/volumes

解除挂载:umount /nfs

查看挂载效果:mount

在 leader节点/data/volumes目录下新建文件leader_create_file并输入内容its leader create by leader

[root@leader ~]# cd /data/volumes/

[root@leader volumes]# echo its leader create by leader >  leader_create_file

[root@leader volumes]# ls

leader_create_file

[root@leader volumes]#

然后回到work节点的nfs目录下查看:

[root@work1 ~]# cd /nfs/

[root@work1 nfs]# ls

leader_create_file

[root@work1 nfs]# cat leader_create_file

its leader create by leader

[root@work1 nfs]#

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值