使用Local Persistent Volume 部署有状态工作负载

举报
张俭 发表于 2023/12/31 23:17:15 2023/12/31
【摘要】 使用Local Persistent Volume 部署有状态工作负载本教程以部署Demo StatefulSet为例,指导您利用 LocalPersistentVolume (即本地持久卷)技术使用标准 PVC 对象访问本地磁盘。 安装kubernetes集群略,可参考官方文档 创建WaitForFirstConsumer 绑定模式的StorageClass此模式指示 Kubernete...

使用Local Persistent Volume 部署有状态工作负载

本教程以部署Demo StatefulSet为例,指导您利用 LocalPersistentVolume (即本地持久卷)技术使用标准 PVC 对象访问本地磁盘。

安装kubernetes集群

略,可参考官方文档

创建WaitForFirstConsumer 绑定模式的StorageClass

此模式指示 Kubernetes 延迟PVC的绑定,直到有Pod使用为止。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

在对应的主机上准备卷

kubernetes003主机

mkdir -p /data/volumes/pv0
chmod 777 /data/volumes/pv0

kubernetes002主机

mkdir -p /data/volumes/pv1
chmod 777 /data/volumes/pv1

创建两个LocalPersistentVolume

注意,pv和host节点进行亲和处理,这是为了让k8s把对应的pod调度到对应的卷

apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-local-pv-0
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /data/volumes/pv0
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - kubernetes003
apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-local-pv-1
spec:
  capacity:
    storage: 10Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: /data/volumes/pv1
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - kubernetes002

创建两个pvc

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-pvc-busybox-0
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  volumeName: test-local-pv-0
  resources:
    requests:
      storage: 10Gi
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-pvc-busybox-1
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage
  volumeName: test-local-pv-1
  resources:
    requests:
      storage: 10Gi

创建ZooKeeper StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  serviceName: "busybox"
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: busybox
        command: ['sh', '-c', 'echo "The local volume is mounted!" > /mnt/test.txt && sleep 3600']
        imagePullPolicy: Always
        volumeMounts:
        - name: test-pvc
          mountPath: /mnt
  volumeClaimTemplates:
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: test-pvc
    spec:
      storageClassName: local-storage

总结

本地持久卷相对于远程持久存储的主要优势在于性能:与远程存储系统相比,本地磁盘通常提供更高的 IOPS 和吞吐量以及更低的延迟。 Kubernetes 本地卷具有以下特性:

  • PersistentVolumeClaim 将在绑定本地持久卷之前等待 POD 出现
  • 一旦本地持久卷绑定到声明,即使请求的 POD 已死亡或已被删除,它也会保持绑定状态
  • 新的 POD 可以通过引用相同的 PersistentVolumeClaim 附加到本地卷中的现有数据
  • 与 NFS 共享类似,Kubernetes 持久化本地卷允许多个 POD 具有读/写访问权限
  • 良好工作负载的示例包括软件定义的存储系统和复制数据库。 其他类型的应用程序应继续使用高可用性、可远程访问的持久存储。

参考

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。