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
相关推荐
广州服务器托管3 小时前
NVIDIA最新591.74显卡驱动精简版:支持DLSS 4.5、所有RTX显卡都可使用,最新N卡驱动下载
计算机网络·网络安全·云原生·个人开发·可信计算技术
运维栈记5 小时前
虚拟化网络的根基-网络命名空间
网络·docker·容器
lbb 小魔仙6 小时前
【Linux】云原生运维效率提升:Linux 终端工具链(kubectl + tmux + fzf)组合拳教程
linux·运维·云原生
Joren的学习记录6 小时前
【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)
linux·运维·kubernetes
Hellc0076 小时前
Docker网络冲突排查与解决方案:完整指南
网络·docker·容器
hanyi_qwe7 小时前
发布策略 【K8S (三)】
docker·容器·kubernetes
眠りたいです7 小时前
Docker核心技术和实现原理第二部分:docker镜像与网络原理
运维·网络·docker·容器
Mr. Cao code8 小时前
Docker数据管理:持久化存储最佳实践
java·docker·容器
Cyber4K10 小时前
【Kubernetes专项】DockerFile、数据持计划、网络模式及资源配额
运维·网络·云原生·容器·kubernetes
Joren的学习记录10 小时前
【Linux运维疑难杂症】k8s集群创建calico网络失败
linux·运维·kubernetes