Kubernetes(K8S)学习(四):K8S之Storage

kubernetes使用NFS共享存储有两种方式:

  • (1)手动方式静态创建所需要的PV和PVC(见本文1.3.2小节)。
  • (2)通过创建PVC动态地申请PV(见本文1.4.2小节)。

一、Storage

Volume地址https://kubernetes.io/docs/concepts/storage/

在这里插入图片描述


1.1、Volume

1.1.1、Volume简介

volume(/ˈvɒljuːm/,IT词汇–百度百科): 在电脑中, volume(文件集)是一个可辨认的数据存储(storage)单元。

Volume地址https://kubernetes.io/docs/concepts/storage/volumes/

容器中的磁盘文件是临时的,这对于在容器中运行的非平凡(重大)应用程序会带来一些问题:

  • (1)容器崩溃时文件丢失。
  • (2)Kubelet重新启动容器后为clean状态。

在Pod中一起运行的容器之间共享文件时,会出现第二个问题。

Kubernetes的Volume抽象地解决了这两个问题。


1.2.1、Host类型volume实战

思路: 查看volume挂载目录是否同步。

定义一个Pod,其中包含两个Container,都使用Pod的Volume。

(1)创建volume-pod.yaml

创建volume-pod.yaml:

[root@m test]# mkdir volume
[root@m test]# cd volume
[root@m volume]# vi volume-pod.yaml

内容:

apiVersion: v1
kind: Pod
metadata:
  name: volume-pod
spec:
  containers:
  - name: nginx-container
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: volume-pod
      mountPath: /nginx-volume
  - name: busybox-container
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
    volumeMounts:
    - name: volume-pod
      mountPath: /busybox-volume
  volumes:
  - name: volume-pod
    hostPath:
      path: /tmp/volume-pod

(2)创建pod
[root@m volume]# kubectl apply -f volume-pod.yaml
pod/volume-pod created
[root@m volume]# 

[root@m volume]# kubectl get pod -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP               NODE   NOMINATED NODE   READINESS GATES
volume-pod   2/2     Running   0          82s   192.168.80.248   w2     <none>           <none>
[root@m volume]# 

(3)查看pod的容器ID

在volume-pod所在的集群节点,查看容器ID:

[root@w2 ~]# docker ps | grep volume

容器busybox-volume的ID为:a91b394009ff
容器nginx-volume的ID为:3a7201c4a656


(4)测试volume挂载目录是否同步

① 在宿主系统中/tmp/volume-pod目录创建1.txt:

[root@w2 ~]# cd /tmp/volume-pod
[root@w2 volume-pod]# vi 1.txt
[root@w2 volume-pod]# ls
1.txt
[root@w2 volume-pod]#

② 进入nginx-volume容器查看/nginx-volume目录

[root@w2 volume-pod]# docker exec -it a91b394009ff sh
/ # ls /busybox-volume
1.txt
/ # cat /busybox-volume/1.txt
1234
/ # exit
[root@w2 volume-pod]# 

③ 进入busybox-volume容器查看/busybox-volume目录

[root@w2 volume-pod]# docker exec -it 3a7201c4a656 sh
# ls /nginx-volume
1.txt
# cat /nginx-volume/1.txt
1234
# exit
[root@w2 volume-pod]# 

(5)测试结果

总结:volume挂载目录是同步的


(6)删除测试资源
[root@m volume]# kubectl delete -f volume-pod.yaml

[root@m volume]# rm volume-pod.yaml

1.2.3、查看pod中的容器里面的hosts文件

查看nginx-volume容器hosts

[root@w2 volume-pod]# docker exec -it 3a7201c4a656 cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
192.168.80.248	volume-pod
[root@w2 volume-pod]# 

查看busybox-volume容器的hosts文件

[root@w2 volume-pod]# docker exec -it a91b394009ff cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
192.168.80.248	volume-pod
[root@w2 volume-pod]# 

结论:

发现两个容器的hosts是一样的,并且都是由pod管理的。所以一般container中的存储或网络内容,不要在container层面直接修改,而是在pod中进行修改。


1.2、PersistentVolume(PV)

官网https://kubernetes.io/docs/concepts/storage/persistent-volumes/

PersistentVolume(PV)是已经由管理员提供或者动态使用供应的集群中的一块存储的存储类。它是集群中的资源,就像节点是集群资源一样。PV是类似于Volumes的卷插件,但是其生命周期独立于使用PV的任何单个Pod。

yaml示例:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi    # 存储空间大小
  volumeMode: Filesystem
  accessModes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

꯭ 瞎꯭扯꯭蛋꯭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值