引言
在Kubernetes(K8s)中,容器作為安排利用的基本單位,其生命周期是長久的。當容器重啟或被刪除時,其中的數據會隨之喪掉。為懂得決這個成績,K8s引入了存儲卷(Volume)的不雅點,使得容器中的數據可能長久化存儲。本文將具體介紹K8s中的存儲卷範例、利用方法以及長久化戰略。
存儲卷範例
1. emptyDir
emptyDir是K8s中的一種常設存儲卷,它會在Pod被分配到節點時主動創建,當Pod被刪除時,emptyDir中的數據也會被刪除。emptyDir重要用於常設存儲,比方利用順序的緩存或旁邊數據。
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx
volumeMounts:
- name: tmp
mountPath: /tmp
volumes:
- name: tmp
emptyDir: {}
2. hostPath
hostPath容許容器拜訪宿主機的文件體系。這種方法簡單易用,但數據不會在宿主機毛病時掉掉落保護。
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: nginx
volumeMounts:
- name: host-path
mountPath: /data
volumes:
- name: host-path
hostPath:
path: /path/on/host
3. nfs
nfs是K8s中常用的網路文件體系,容許容器拜訪遠程nfs共享目錄。
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
nfs:
path: /path/on/nfs
server: nfs-server-ip
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 1
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: nginx
volumeMounts:
- name: nfs
mountPath: /data
volumes:
- name: nfs
persistentVolumeClaim:
claimName: nfs-pvc
4. persistentVolume (PV) 跟 persistentVolumeClaim (PVC)
PV跟PVC是K8s中更為高等的存儲卷範例,它們容許靜態分配存儲資本。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-example
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /path/on/nfs
server: nfs-server-ip
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
長久化戰略
1. StatefulSet
StatefulSet是K8s頂用於管理有狀況利用的一種把持器。StatefulSet中的每個Pod都有牢固的網路標識符跟存儲卷,從而保證數據的長久化。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: example-statefulset
spec:
serviceName: "example-service"
replicas: 1
selector:
matchLabels:
app: example
template:
metadata:
labels:
app: example
spec:
containers:
- name: example-container
image: nginx
volumeMounts:
- name: example-pv
mountPath: /data
volumeClaimTemplates:
- metadata:
name: example-pv
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
2. StorageClass
StorageClass是K8s頂用於靜態創建PV的資本。經由過程定義StorageClass,可能簡化PV的創建跟管理。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
volumeBindingMode: Immediate
總結
K8s存儲卷為容器數據長久化供給了多種處理打算。經由過程公道抉擇存儲卷範例跟長久化戰略,可能輕鬆實現容器數據的長久化,進步利用的堅固性跟牢固性。