K8S Volumn

容器会被频繁地创建和销毁,销毁时保存在容器中的数据也会被清除,为了持久化容器中的数据,K8S 引入了Volume的概念,通过Volume实现同一个Pod中不同容器之间的数据共享以及持久化存储,当容器终止或者重启时Volume中的数据也不会丢失

配置存储(存储配置信息)

ConfigMap

apiVersion: v1 
kind: ConfigMap 
metadata:
  namespace: ns-configMap # 命名空间 
  name: configmap # 名称
data:
  info: # 配置信息
    username: admin
    password: 123456
  • 挂载到Pod
apiVersion: v1
kind: Pod
metadata:
  namespace: ns-volume # 要与ConfigMap的namespace一致
  name: volume-configmap
spec:
  containers:
  - name: nginx 
    image: nginx
    ports:
    - name: port-nginx
      containerPort: 80
      protocol: TCP
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  volumes:
  - name: logs-volume
    configMap: 
      name: configmap # configmap名称

Secret(类似于ConfigMap,主要用于存储敏感信息)

apiVersion: v1 
kind: Secret 
metadata:
  namespace: ns-Secret # 命名空间 
  name: secret # 名称
type: Opaque
data:
  username: YWRtaW4=
  password: MTIzNDU2
  • 挂载到Pod
apiVersion: v1
kind: Pod
metadata:
  namespace: ns-volume # 要与Secret的namespace一致
  name: volume-secret
spec:
  containers:
  - name: nginx 
    image: nginx
    ports:
    - name: port-nginx
      containerPort: 80
      protocol: TCP
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  volumes:
  - name: logs-volume
    secret: 
      secretName: secret # Secret 名称

运行时数据存储

EmptyDir

当 Pod 指定到某个节点上时,首先创建的是一个 EmptyDir 卷,只要 Pod 在该节点上运行卷就一直存在。当 Pod 因为某些原因被从节点上删除时,EmptyDir 卷中的数据也会永久删除,所以EmptyDir一般用做于临时空间使用

apiVersion: v1
kind: Pod
metadata:
  namespace: ns-volume
  name: volume-emptyDir
spec:
  containers:
  - name: nginx 
    image: nginx
    ports:
    - name: port-nginx
      containerPort: 80
      protocol: TCP
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  volumes:
  - name: logs-volume
    emptyDir: {}
kubectl apply -f /home/lixing/demo/volume-emptyDir.yaml
kubectl get deployment,pods,service,ingress -n ns-volume -o wide
kubectl describe pod volume-emptyDir -n ns-volume
kubectl delete pod volume-emptyDir -n ns-volume --force --grace-period=0

HostPath

将Node主机中的一个实际目录挂载到Pod中供容器使用,但如果Pod重新创建后转移到了其它Node上,那么数据就找不到了

apiVersion: v1
kind: Pod
metadata:
  namespace: ns-volume
  name: volume-hostPath
spec:
  containers:
  - name: nginx 
    image: nginx
    ports:
    - name: port-nginx
      containerPort: 80
      protocol: TCP
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  volumes:
  - name: logs-volume
    hostPath: 
      path: /root/logs
      type: DirectoryOrCreate
kubectl apply -f /home/lixing/demo/volume-hostPath.yaml
kubectl get deployment,pods,service,ingress -n ns-volume -o wide
kubectl describe pod volume-hostPath -n ns-volume
kubectl delete pod volume-hostPath -n ns-volume --force --grace-period=0

NFS(类似于这样的文件服务器有很多)

搭建 NFS 服务器高可用集群,将Pod上的数据存储到 NFS 系统上,无论Pod怎么漂移都可以访问数据

apiVersion: v1
kind: Pod
metadata:
  namespace: ns-volume
  name: volume-nfs
spec:
  containers:
  - name: nginx 
    image: nginx
    ports:
    - name: port-nginx
      containerPort: 80
      protocol: TCP
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  volumes:
  - name: logs-volume
    nfs: 
      server: 192.168.111.111
      path: /root/data/nfs
kubectl apply -f /home/lixing/demo/volume-nfs.yaml
kubectl get deployment,pods,service,ingress -n ns-volume -o wide
kubectl describe pod volume-nfs -n ns-volume
kubectl delete pod volume-nfs -n ns-volume --force --grace-period=0

高级存储

PV (K8S对存储资源的抽象,关联具体的存储资源)

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv2
spec:
  nfs: # 存储类型,与底层真正存储对应
  capacity: # 存储能力,目前只支持存储空间的设置
    storage: 2Gi
  accessModes: # 访问模式
  storageClassName: # 存储类别
  persistentVolumeReclaimPolicy: # 回收策略

PVC(对PV资源的申请)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  namespace: ns-volume # PVC命名空间
  name: pvc # PVC名称
spec:
  accessModes: # 访问模式
  - ReadWriteMany
  selector: #采用标签对PV选择
  storageClassName: #存储类别
  resources: #请求空间
    requests:
      storage: 1Gi

挂载Pod

apiVersion: v1
kind: Pod
metadata:
  namespace: ns-volume # 要与pvc的namespace一致
  name: volume-nfs
spec:
  containers:
  - name: nginx 
    image: nginx
    ports:
    - name: port-nginx
      containerPort: 80
      protocol: TCP
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  volumes:
  - name: logs-volume
    persistentVolumeClaim: 
      claimName: pvc # PVC名称
      readOnly: false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大能嘚吧嘚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值