k8s基礎概念之六 volumes


自動創建

……
spec:
  containers:
  ……
    volumeMounts:      #掛載一個數據卷
    - name: app-logs   #掛載數據卷名字
      mountPath: /logs #掛載路徑
  ……
  volumes:          #定義一個數據卷
  - name: app-logs  #定義一個數據卷名字
    emptyDir: {}    # volume的類型,emryDir的參數設置為{}  
---
#注解:
"emptyDir: 無需指定宿主機目錄,由pod自動創建,pod移除時候數據會永久刪除,作為容器間的共享目錄
"
---
#擴展:
apiVersion: v1
kind: Pod
metadata:
  name: volume-pod
spec:
  containers:
  - name: tomcat
    image: tomcat
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: app-logs
      mountPath: /usr/local/tomcat/logs       # 容器中的日志目錄
      
  - name: logreader                           # 容器名稱,使用kubectl指定容器時需要使用此名稱,無法使用容器ID
    image: busybox
    command: ["sh","-c","tail -f /logs/catalina*.log"]
    volumeMounts:
    - name: app-logs
      mountPath: /logs
  volumes:                                    # volume設定的具體信息
  - name: app-logs
    emptyDir: {}                              # volume的類型,emryDir的參數設置為{}  

#這里的示例是將tomcat容器的日志目錄和logreader的log目錄共享,通過在logreader執行查看日志的命令,就可以在logreader中看到tomcat的啟動日志。

 

 

手動創建掛載目錄

hostPath: Pod掛載宿主機上的文件和目錄,可用於永久保存日志,容器內部訪問宿主機數據,

……
spec:
  containers:
  ……
    volumeMounts:      #掛載一個數據卷
    - name: app-logs   #掛載數據卷名字
      mountPath: /logs #掛載路徑
  ……
  volumes:          #定義一個數據卷
  - name: app-logs  #定義一個數據卷名字
    emptyDir: {}    # volume的類型,emryDir的參數設置為{}  
------------------------------------------------
apiVersion: v1
kind: Pod
metadata:
  name: volume-pod
spec:
  containers:
  - name: tomcat
    image: tomcat
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: app-logs
      mountPath: /usr/local/tomcat/logs
  volumes:
  - name: app-logs
    hostPath:
      # 宿主機的本地目錄,需要事先創建,否則pod無法啟動
      path: /logs
      # this field is optional
      type: Directory
#當pod刪除時,數據依舊保存在宿主機目錄中。

 

 

網絡存儲

apiVersion: v1
kind: Pod
metadata:
  name: cephfs
spec:
  containers:
  - name: cephfs-rw
    image: kubernetes/pause
    volumeMounts:
    - mountPath: "/mnt/cephfs"
      name: cephfs
  volumes:
  - name: cephfs
    cephfs:
      monitors:
      - 10.16.154.78:6789
      - 10.16.154.82:6789
      - 10.16.154.83:6789
      # by default the path is /, but you can override and mount a specific path of the filesystem by using the path attribute
      # path: /some/path/in/side/cephfs   #更改掛載
      user: admin
      secretFile: "/etc/ceph/admin.secret"
      readOnly: true

 

 

什么情況下會使用到valumes

一些需要持久化數據的程序才會使用到valmes,或者一些需要數據共享的容器需要volumes

 

日志收集的需求

需要在應用程序里面加一個sidecar,這個容器是一個收集日志的容器

emptyDir

……
spec:
  containers:
  ……
  volumesMounts:
  - mountPath: /etc/timezone    #掛載到容器的目錄
    name: timezone     #需要掛載持久卷的名字
  ……
  volumes:
  - name :timezone  #定義一個持久卷,可以寫多個,多加一個name即可
    hostPath:
      path: /etc/timezone  #宿主機的目錄
      emptyDir: {}         #和以下不同的是,將type換成這個即可
"
    和volumes不同的是,如果刪除pod,emptyDir卷中的數據也將被刪除,一般emptyDir卷用於pod中的不同容器共享數據
,他可以掛在到相同或者不同的路徑上 默認情況下,emptyDir卷支持節點上的任何介質,可能是SSD、磁盤、或網絡存儲,具體取決於自身的環境,
可以將emptyDir、medium字段設置為Memory字段設置為memory,讓kubernetes使用tmpfs,碎肉tmpfs非常快,但是tmpfs在節點重啟時
,數據同樣會被清除,並且設置的大小會被記入到COntainer的內存限制當中
"

 

 

hostPath

將節點或者主機上的目錄掛載到pod上

……
spec:
  containers:
  ……
  volumesMounts:
  - mountPath: /etc/timezone    #掛載到容器的目錄
    name: timezone     #需要掛載持久卷的名字
  ……
  volumes:
  - name :timezone  #定義一個持久卷,可以寫多個,多加一個name即可
    hostPath:
      path: /etc/timezone  #宿主機的目錄
      type: File           #掛載類型
   """
   type的類型:
           type為空字符串:默認選項,以為這掛載hostPath之前不會執行任何檢查
           DirectotyOrCreate:如果給定的path不存在任何東西,name將根據需要創建一個權限為0755的空目錄,和kubelet具有相同的組合權限。
           FileOrCreate:如果給定的路徑不存儲任何內容,則會根據需要創建一個空文件,權限設置為0655,和kubelet具有相同的組合所有權
           File:文件不許存在給定的路徑中。
           Socket:Unix套接子,必須存在於給定路徑中。
           CharDevice:字符設備,必須存在於給定路徑中
           BlockDevice:塊設備,必須存在於給定路徑中
   """

 

 

nfs掛載至容器

#nfs服務器搭建跳過
……
spec:
  containers:
    ……
    volumesMounts:
    - mountPath: /mnt
      name: nfs-volumes
  volumes:
  -name: nfs-volumes
   nfs: 
     server: 192.168.159.14     #nfs服務器ip
     path: /data/nfs/test-dp     #/data/nfs是nfs共享的目錄

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM