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

本文分享自华为云社区《使用Local Persistent Volume 部署有状态工作负载》,作者: 张俭。

使用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 具有读/写访问权限
  • 良好工作负载的示例包括软件定义的存储系统和复制数据库。 其他类型的应用程序应继续使用高可用性、可远程访问的持久存储。

参考

https://lapee79.github.io/en/article/use-a-local-disk-by-local-volume-static-provisioner-in-kubernetes/

点击关注,第一时间了解华为云新鲜技术~

盘点 2023 “很刑”的 IT 民生事件:视频软件白嫖带宽、程序员改 ETC 余额…… SpringBoot 2.x 正式停更了。Java 8 由 Solon 接收! 罗永浩称“荣耀任意门”抄袭锤子开源软件 One Step 2024 年,Linux 内核的开发语言是否要从 C 转换为 C++ Linus 在 Linux 6.8 内核发现性能倒退问题 Git 开发人员讨论引入 Rust 的可能性 Linus“温馨提示”:Intel Xe 驱动代码严重缺乏测试 Linux 内核被冬季风暴“封印” LG 洗衣机每日使用的数据流量高达 3.6GB? 2024 技术招聘状况:AI 工具被视为作弊,Python 需求最大
{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/4526289/blog/10823581