K8s资源第五篇(volume存储卷)

Kubernetes Volume

 Kubernetes提供的存储卷属于Pod资源级别,共享于Pod内的所有容器,可用于再容器的文件系统之外存储应用存储的相关数据,也可以独立Pod生命周期之外实现数据的持久化。

K8s的volume类型
  • emptyDir:翻译过来是空目录,相当于是临时存储卷,容器挂了,目录也就挂了,数据不能做到持久化。
  • hostPath:把Pod做运行在的宿主机的目录与该Pod建立关系,数据不会因为Pod挂了而丢失,但是如果节点宕机的话,数据就会丢失。
  • gitRepo:将git仓库挂载到容器内,但是如果git仓库的内容发生改变,容器内的数据不会跟着改变。只是挂载git仓库某一时刻的数据。
  • nfs:挂载nfs的目录到容器里,这样即使节点和容器都宕机,数据也能够得到保存。
  • configmap:用来将环境变量,配置信息注入到Pod中。
  • secret:和configmap类型,但是在secret中的数据是以base64加密过的,用来存放敏感数据(证书密钥文件,数据库密码等)。
emptyDir(临时存储卷):

 emptydir是Pod生命周期的一个临时目录,生命周期跟随Pod的生命周期,也就是说如果Pod死了,emptyDir也就死了。

#定义一个临时存储卷。
[root@k8smaster data]# vim pod-vol-demo.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-demo
  namespace: default
  labels:
    app: myapp
    tier: frontend
  annotations:
    magedu.com/created-by: "cluster admin"
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    - name: https
      containerPort: 443
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html/
  - name: busybox
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: html
      mountPath: /data/
    command: ['/bin/sh']
    args: ["-c","while true; do echo $(date) >> /data/index.html; sleep 2; done"]
  volumes:
  - name: html
    emptyDir: {}
[root@k8smaster data]# kubectl apply -f pod-vol-demo.yaml 
pod/pod-demo created
[root@k8smaster data]# kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE   IP             NODE       NOMINATED NODE   READINESS GATES
myapp-deployment-558f94fb55-plk4v   1/1     Running   2          47d   10.244.2.99    k8snode2   <none>           <none>
myapp-deployment-558f94fb55-rd8f5   1/1     Running   2          47d   10.244.2.98    k8snode2   <none>           <none>
myapp-deployment-558f94fb55-zzmpg   1/1     Running   2          47d   10.244.1.107   k8snode1   <none>           <none>
nginx-deployment-6f77f65499-8g24d   1/1     Running   2          46d   10.244.1.108   k8snode1   <none>           <none>
pod-demo                            2/2     Running   0          13s   10.244.2.102   k8snode2   <none>           <none>
[root@k8smaster data]# curl 10.244.2.102
Tue Dec 17 09:24:58 UTC 2019
Tue Dec 17 09:25:00 UTC 2019
Tue Dec 17 09:25:02 UTC 2019
Tue Dec 17 09:25:04 UTC 2019
Tue Dec 17 09:25:06 UTC 2019
Tue Dec 17 09:25:08 UTC 2019
Tue Dec 17 09:25:10 UTC 2019
Tue Dec 17 09:25:12 UTC 2019
Tue Dec 17 09:25:14 UTC 2019
Tue Dec 17 09:25:16 UTC 2019
Tue Dec 17 09:25:18 UTC 2019
Tue Dec 17 09:25:20 UTC 2019
hostPath(节点存储卷):

 hostPath类型的存储卷是指将工作节点上的某文件系统的目录或文件挂载于Pod中,它可以独立于Pod的生命周期,如果Pod要是挂了,数据会得到保留。

k8smaster:
#定义一个hostPath
[root@k8smaster data]# vim pod-hostpath-vol.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-vol-hostpath
  namespace: default
spec:
  containers:
  - name: myapp
    image: ikubernetes/myapp:v1
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  volumes:
  - name: html
    hostPath:
      path: /data/pod/volume1
      type: DirectoryOrCreate
type:
  • DirectoryOrCreate:挂载的目标是宿主机的一个目录,如果宿主机上不存在这个目录,则自动创建一个。。
  • DirectoryOrCreate:挂载的目标是宿主机的一个目录,如果宿主机上不存在这个目录,则会报错。
  • FileOrCreate:挂载的目标是宿主机的一个文件,如果宿主机上不存在这个文件,则自动创建一个。
  • File:挂载的目标是宿主机的一个文件,如果宿主机上不存在这个文件,则会报错
  • 挂载的类型是一个Socket文件。
  • CharDevice:挂载类型是一个字符设备文件。
  • BlockDevice:挂载的类型是一个块设备文件。
k8snode1:
[root@k8snode1 ~]# mkdir /data/pod/volume1 -p
[root@k8snode1 ~]# vim /data/pod/volume1/index.html
添加:
test page -- 1
k8snode2:
[root@k8snode2 ~]# mkdir /data/pod/volume1 -p
[root@k8snode2 ~]# vim /data/pod/volume1/index.html
添加࿱
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值