k8s基礎概念之六 volumes
阿新 • • 發佈:2021-12-16
…… 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
需要在應用程式裡面加一個sidecar,這個容器是一個收集日誌的容器
…… 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的記憶體限制當中 "
…… 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伺服器搭建跳過 …… 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共享的目錄