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: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
volumes:
- name: nginx-volume
PersistentVolume:
claimName: ngx-html
containers:
- name: nginx
image: nginx:1.20.0
ports:
- containerPort: 80
volumeMounts:
- name: nginx-volume
mountPath: /usr/share/nginx/html
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx
spec:
rules:
- http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: nginx-service
port:
number: 80
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-nginx
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-deploy-nginx
minReplicas: 1
maxReplicas: 3
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50