k8s从入门到放弃之数据存储

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
相关推荐
阿里云云原生10 小时前
不改代码也能监控 AI Agent?揭秘 OBI 如何在内核层精准解析 GenAI 语义流量
云原生·agent
众人皆醒我独醉11 小时前
Pod 一直 Terminating,死活删不掉?三个凶手,每一个你都意想不到
面试·kubernetes
飞翔沫沫情12 小时前
K8s Alloy 采集 Pod 控制台日志
云原生·容器·kubernetes
潮起鲸落入海18 小时前
Kubernetes Metric Server, Quota and Limits
容器·kubernetes
梦想的颜色18 小时前
Docker 容器化本地部署 Claude Code 完整硬核教程|隔离沙盒 + 国产模型直连 + 持久化 Skill
运维·容器·ai 工程化·沙盒隔离·docker 本地部署·claude code硬核实战·国内国产模型接入
摇滚侠18 小时前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 19-25
java·云原生·kubernetes
渣渣盟18 小时前
Docker 运维常用命令手册(含扩容与实战)
运维·docker·容器
我叫张小白。20 小时前
一个微服务电商+社区项目(瓷韵app)的技术深度复盘
docker·微服务·云原生·架构
咕噜咕噜的猪大侠20 小时前
《K8s 核心知识梳理:Deployment 滚动更新、JobCronJob、DaemonSet 和 Service》
云原生·容器·kubernetes
虚心的百褶裙20 小时前
远程调用服务架构设计及zookeeper技术详解(下篇)
分布式·zookeeper·云原生