Kubernetes進階之hostpath及emptyDir數據卷

K8s進階之數據卷與數據持久卷
目錄:node

一 從外部訪問應用最佳方式 
二 配置管理 
三 數據卷與數據持久卷 
四 再談有狀態應用部署 
五 K8S 安全機制

3、數據卷與數據持久卷
數據卷產生的背景
爲何有數據卷,這裏的數據卷和docker的數據卷還不太同樣,實現的機制不是一套,數據卷說白了就是能幫助你持久化你pod重要的數據,若是你不持久化的話,pod刪除裏面臨時產生的數據也會被刪除,這無論是k8s中仍是docker中,這都是同樣的,因此k8s和docker都提供了這種volume的這種相關功能,就是爲了持久化你容器中的數據,能讓它重建或者刪除,數據依然存在。nginx

• Kubernetes中的Volume提供了在容器中掛載外部存儲的能力 ,也就是部署k8s自身的存儲了,就比如本身搭建一個分佈式存儲,比如公有云的雲盤存儲,這樣是能夠掛在集羣以外的存儲能夠掛在k8s中去使用。
pod要想使用這種存儲必須定義兩點:
• Pod須要設置捲來源(spec.volume)和掛載點(spec.containers.volumeMounts)兩個信息後纔可使用相應的Volumeweb

來看一下卷的類型最好的解釋就是官方:
來看一下官方怎麼說的:
https://kubernetes.io/docs/concepts/storage/volumes/
Kubernetes進階之hostpath及emptyDir數據卷
第一種就是本地卷
像hostPath類型與docker裏面的bind mount類型,就是直接掛載到宿主機文件的類型
像emptyDir是這樣本地卷,也就是相似於volume類型
這兩點都是綁定node節點的redis

第二種就是網絡數據卷
好比Nfs、ClusterFs、Ceph,這些都是外部的存儲均可以掛載到k8s上docker

第三種就是雲盤
好比AWS、微軟(azuredisk)vim

第四種就是k8s自身的資源
好比secret、configmap、downwardAPIcentos

先來看一下本地卷
像emptyDir相似與docker的volume,而docker刪除容器,數據卷還會存在,而emptyDir刪除容器,數據卷也會丟失,通常這個只作臨時數據捲來使用api

建立一個空卷,掛載到Pod中的容器。Pod刪除該卷也會被刪除。
應用場景:Pod中容器之間數據共享
emptyDir類型安全

[root@k8s-master demo]# vim emptydir.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: write
    image: centos
    command: ["bash","-c","for i in {1..100};do echo 
$i >> /data/hello;sleep 1;done"]
    volumeMounts:
      - name: data
        mountPath: /data
  - name: read
    image: centos
    command: ["bash","-c","tail -f /data/hello"]
    volumeMounts:
      - name: data
        mountPath: /data
  volumes:
  - name: data
    emptyDir: {}

[root@k8s-master demo]# kubectl create -f emptydir.yaml 

[root@k8s-master demo]# kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
my-pod                   2/2     Running     13         67m
mypod                    1/1     Running     0          3h30m
mypod2                   1/1     Running     0          3h24m
mypod3                   0/1     Completed   0          3h5m
mypod4                   0/1     Completed   0          3h
nginx-5ddcc6cb74-lplxl   1/1     Running     0          4h8m
[root@k8s-master demo]# kubectl logs my-pod read

Hostpath類型bash

掛載Node文件系統上文件或者目錄到Pod中的容器。
應用場景:Pod中容器須要訪問宿主機文件

[root@k8s-master demo]# vim hostpath.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: my-pod2
spec:
  containers:
  - name: busybox
    image: busybox
    args:
    - /bin/sh
    - -c - sleep 36000
    volumeMounts:
    - name: data
      mountPath: /data
  volumes:
  - name: data
    hostPath:
      path: /tmp
      type: Directory
[root@k8s-master demo]# kubectl create -f hostpath.yaml 
[root@k8s-master demo]# kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
my-pod2                  1/1     Running     0          12s
mypod                    1/1     Running     0          4h43m
mypod2                   1/1     Running     0          4h37m
mypod3                   0/1     Completed   0          4h17m
mypod4                   0/1     Completed   0          4h12m
nginx-5ddcc6cb74-lplxl   1/1     Running     0          5h20m
web-67fcf9bf8-mrlhd      1/1     Running     0          20m

[root@k8s-master demo]# kubectl exec -it my-pod2 sh
cd /data/
ls

這裏建立的數據和咱們被分配的node節點的數據都是同樣的,建立的數據都會更新上去,刪除容器,不會刪除數據卷的數據。

相關文章
相關標籤/搜索