pause容器為基礎架構容器,每一個節點都有一個pause鏡像, 為每一個pod提供底層基礎支撐設備,所有pod中容器會共享此容器的網絡空間,存儲卷也是
還可使用csi,存儲插件。
使用存儲卷步驟1.在pod中配置使用存儲卷,2.在pod中的容器定義掛載存儲卷則可使用
配置volume示例
apiVersion: v1
kind: Pod
metadata:
name: myapp
mamespace: vol
labels
app: myapp
spec
#nodeName: node3 #此方式可以固定pod調度的節點
containers:
- name: myapp
image: ikubernetes/ myapp:v1#鏡像
volumeMounts :#定義掛載內容
- name: webstor #使用的存儲卷名稱,這跟下面volume字段相同表示使用webstor這個存儲卷
mountPath: /usr/share ng inx/html#掛載至容器中哪個目錄
readOnly: true #自讀方式掛載
volumes : #volumes字段定義了paues容器關聯的宿主機或分布式文件系統存儲卷
- name: webstor #存儲卷名稱
hostPath : #路徑,為宿主機或其他存儲路徑
path: /data/volumes/myapp
type:DirectoryOrCreate #定義類型,這表示如果宿主機沒有此目錄則會自動創建
kubectl describe pod myapp -n vol #查看pod內部狀態。
此pod被調度至node3節點。傳遞一個頁面至node3中由我們在yml配置文件中定義的路徑。即可訪問
這個方式只能在單獨節點創建,如果pod調度至別的節點則關聯存儲卷會失敗
存儲卷類型:
local方式掛載:可掛載至本地磁盤,硬盤。
emptyDir:可使用節點中的多哥容器使用宿主機部分內存當作緩存來共享文件。當pod被刪除之后empdir即消失
使用外部存儲nfs作為存儲卷
1。構建nfs文件系統
yum install nfs-utils -y #在集群每個節點都要安裝
mkdir -p /vols/v{1,2,3,4,5}創建目錄
vim /etc/exports
/vols/v1 192.168.1.0/24(rw,no_root_squash)#將目錄導出給k8s集群所在網段
systemctl start nfs #啟動nfs服務
##配置文件
apiversion: u1
kind: Pod
metadata
name: wol -nfs -pod
namespace: vol
labels
app: redis
spec
containers
- name: redis
image: redis :alpine
ports : #定義容器內端口
- containerPort: 6379
name : redis
volumeMounts
- mountPath: /data#關聯至容器內目錄
name: data#存儲卷名稱
volumes :
- name: data
nfs: #定義存儲卷格式使用nfs
server: 192.168.1.199 #指定nfs主機
path: /vols/v1#指定nfs掛着卷
kubectl apply -f vol-nfs.yaml#應用文件
此時可以跨節點保存數據,也不怕pod被調度至其他節點了
使用pv。pvc
pv:是指將外部存儲系統的某目錄,磁盤,雲盤等抽象為k8s集群可用存儲單元。pv為集群級別資源。且一個名稱空間只能使用一個pv,需要將pv注冊至名稱空間
需要創建一個pvc將請求占用pv,即可一一對應(binding)一旦占用一個pv之后空間中的pod就可使用pvc了。
pv回收策略(reclaim):
delete
Recycle(廢棄)
Retain
pv生命周期。
供給存儲單元
綁定
使用
回收
配置過程。
配置好外部存儲系統
apiVersion: v1
kind: Persistentvolume #類型為PV
metadata #元數據。注意此處沒有名稱空間,因為pv屬於集群資源
name: pu-nfs-v2
labels:
storage: nfs
spec:
#定義訪問模式。單路讀寫,多路讀寫,多路只讀
accessModes [ "ReadwriteOnce ","ReadwriteMany" ,"ReadOnlyMany"]
capacity: #定義了存儲空間大小限制
storage: 5Gi#限制為5G
volumeMode: Filesystem#存儲卷類型。有文件系統,和塊設備等
persistentvolumeReclaimPolicy: Retain #回收策略。刪除了pvc之后pv怎么處理retain表示刪除pvc時保存pv中數據
nfs : #nfs定義
server: 192 .168.1.199
path: /vols/v2
而后在名稱空間中定義pvc來請求這個pv資源
kind: PersistenVolumeClaim
apiVersion: v1
metadata:
name: redis-data
mamespcae: vol#pvc屬於名稱空間級別
spec :
accessModes :#訪問模式。需要少於pv的三種類型才可被匹配
- ReadWhriteOnce
volumeMode: Filesystem
resources:#資源配置
request : #請求資源,與Pod中資源限制不同
storage: 3Gi #磁盤大小為3G
而后此pvc會自動關聯至pv,因為此pv多路讀寫,多路只讀,單路讀寫,而且空間為5G高於pvc的條件。
創建Pod使用pvc資源
apiVersion: v1
kind: Pod
metadata
name: redis -demo
namespace: vo1
labels
app: redis -demo
spec
containers:
name: redis -demo
image: redis:alpine #容器鏡像
volumeMounts :#定義容器存儲卷
name:data
mountPath: /data#掛載目錄
volumes : #定義存儲卷
name: data#名稱
persistentvollumeClaim : #使用存儲卷類型。這里為pvc
claimName: redis-data #綁定同一名稱空間中的pvc。當作自己的存儲卷
pod創建成功之后可在redis存入數據,將會保存至存儲節點中
pv回收順序先刪除pod>pvc>pv。