Kubernetes - 实战:存储之Volumes配置管理emptyDir卷、hostPath卷、PersistentVolume持久卷、StatefulSet控制器

在Kubernetes中,存储卷(Volumes)是用于持久化或临时存储Pod数据的关键组件。下面详细说明如何在实战中配置和管理不同类型的存储卷:

1. emptyDir卷

实战配置
emptyDir卷在Pod创建时自动创建,在Pod销毁时自动清除。它位于Pod所在的节点上,可供Pod内的所有容器共享。

apiVersion: v1
kind: Pod
metadata:
  name: test-emptydir-pod
spec:
  containers:
  - name: container-a
    image: busybox
    command: ["/bin/sh", "-c", "while true; do sleep 3600; done"]
    volumeMounts:
    - name: shared-data
      mountPath: /data
  - name: container-b
    image: busybox
    command: ["/bin/sh", "-c", "while true; do echo $(date) >> /data/datefile; sleep 10; done"]
    volumeMounts:
    - name: shared-data
      mountPath: /data
  volumes:
  - name: shared-data
    emptyDir: {}

2. hostPath卷

实战配置
hostPath卷允许将主机节点上的文件系统路径挂载到Pod内。这种类型主要用于调试和特殊场景,因为在多节点环境下可能导致Pod迁移时数据丢失或节点间数据不一致。

apiVersion: v1
kind: Pod
metadata:
  name: test-hostpath-pod
spec:
  containers:
  - name: test-container
    image: busybox
    command: ["/bin/sh", "-c", "echo Hello from the test-container > /mnt/data/hostpath-example.txt; while true; do sleep 3600; done"]
    volumeMounts:
    - name: hostpath-storage
      mountPath: /mnt/data
  volumes:
  - name: hostpath-storage
    hostPath:
      path: /data/my/path/on/host
      type: DirectoryOrCreate  # 表示如果路径不存在,则创建目录

3. PersistentVolume(PV)持久卷

实战配置
PersistentVolume是一种集群级别的存储资源,它可以由管理员预先配置,也可以动态供应。配合PersistentVolumeClaim(PVC),应用可以根据需要申请存储。

# 创建一个PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-example
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain # 或 Recycle, Delete
  storageClassName: standard # 若存在多个存储类别,需指定
  nfs:
    path: /exports/example
    server: nfs-server.example.com

---

# 创建一个PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: standard # 与PersistentVolume匹配

---

# 将PVC挂载到Pod
apiVersion: v1
kind: Pod
metadata:
  name: test-pv-pod
spec:
  containers:
  - name: test-container
    image: busybox
    command: ["/bin/sh", "-c", "echo 'Hello from PV' > /mnt/data/file.txt && tail -f /dev/null"]
    volumeMounts:
    - mountPath: /mnt/data
      name: example-volume
  volumes:
  - name: example-volume
    persistentVolumeClaim:
      claimName: pvc-example

4. StatefulSet控制器与持久卷

实战配置
StatefulSet特别适合需要持久化标识符、有序部署以及稳定的网络标识符(如固定不变的域名)的应用场景。每个StatefulSet的Pod都会自动绑定一个PersistentVolumeClaim。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
      volumes:
      - name: www
        persistentVolumeClaim:
          claimName: nginx-pvc # 假设已经创建了名为nginx-pvc的PVC

---

# 创建PVC供StatefulSet使用
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: standard

以上实战示例展示了如何在Kubernetes中配置和使用emptyDir、hostPath、PersistentVolume/PersistentVolumeClaim以及如何在StatefulSet中使用持久卷。请注意,实际环境中应根据存储系统的实际情况调整配置参数。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值