k8s從入門到放棄之數據存儲
在Kubernetes中,數據存儲主要通過持久卷(Persistent Volumes, PVs)和持久卷聲明(Persistent Volume Claims, PVCs)機制來實現。這種設計允許存儲與計算分離,使得容器可以根據需要請求存儲資源,而無需關心底層存儲的具體實現細節。
持久卷 (Persistent Volumes, PVs)
- 定義:持久卷是集群中的一段存儲,它像節點一樣是一種資源。PVs與具體的存儲技術相關聯,比如NFS、iSCSI、或者云提供商的存儲系統如AWS EBS、GCE Persistent Disks等。
- 生命周期:獨立于Pod的生命周期,即使使用它的Pod被刪除,PV仍然存在,除非明確地釋放或刪除。
持久卷聲明 (Persistent Volume Claims, PVCs)
- 定義:PVCs是用戶對存儲的請求。它類似于Pod。Pod消耗節點資源,PVC消耗PV資源。Pod可以請求特定級別的資源(cpu和內存),類似的PVC可以請求大小和訪問模式(例如,可讀寫一次、只讀多次)。
- 靈活性:允許用戶無需了解底層存儲實現細節即可請求存儲資源。
存儲類 (Storage Classes)
- 定義:提供了一種方式,讓管理員可以描述他們提供的存儲“類”。不同的類可能映射到不同的服務質量等級、備份策略等。
- 動態供給:如果啟用了存儲類的動態供給功能,則當PVC提出請求時,Kubernetes會自動創建所需的PV,并將其綁定到該PVC上。
存儲卷 (Volumes)
- 定義:雖然PVs和PVCs提供了持久化存儲的方法,但Kubernetes中的Volumes為Pod提供了可掛載的存儲。一個Volume可以與一個或多個容器關聯,支持多種類型的后端存儲。
項目準備
主機名 | ip | 配置 |
---|---|---|
nfs | 192.168.0.5 | 2核4G50G |
master | 192.168.0.2 | 2核4G50G |
node1 | 192.168.0.3 | 2核4G50G |
node2 | 192.168.0.4 | 2核4G50G |
安裝nfs服務
yum -y insrall nfs
設置共享目錄
[root@nfs ~]# cat /etc/exports
/volume-k8s/data/ 192.168.0.0/24(rw,no_root_squash)
啟動nfs服務
systemctl start nfs
pvc案例
[root@master ~]# cat nginx-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: ngx-html
spec:storageClassName: "nfs-client" #指定使用的動態存儲名稱accessModes: - ReadWriteMany resources: requests: storage: 6Gi
deploy-nginx.yaml
apiVersion: v1
kind: deployment
metadata:name: my-deploy-nginx
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:volumes:- name: nginx-volumePersistentVolume:claimName: ngx-htmlcontainers:- name: nginximage: nginx:1.20.0ports:- containerPort: 80volumeMounts:- name: nginx-volumemountPath: /usr/share/nginx/html---apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginxports:- port: 80targetPort: 80apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx
spec:rules:- http:paths:- pathType: Prefixpath: "/"backend:service:name: nginx-serviceport: number: 80apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: hpa-nginx
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: my-deploy-nginxminReplicas: 1maxReplicas: 3metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50