写点什么

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

  • 2024-01-15
    广东
  • 本文字数:1780 字

    阅读完需:约 6 分钟

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

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

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


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

安装 kubernetes 集群


略,可参考官方文档

创建 WaitForFirstConsumer 绑定模式的 StorageClass


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


kind: StorageClassapiVersion: storage.k8s.io/v1metadata:  name: local-storageprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumer
复制代码

在对应的主机上准备卷

kubernetes003 主机


mkdir -p /data/volumes/pv0chmod 777 /data/volumes/pv0
复制代码

kubernetes002 主机


mkdir -p /data/volumes/pv1chmod 777 /data/volumes/pv1
复制代码

创建两个 LocalPersistentVolume


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


apiVersion: v1kind: PersistentVolumemetadata:  name: test-local-pv-0spec:  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: v1kind: PersistentVolumemetadata:  name: test-local-pv-1spec:  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: PersistentVolumeClaimapiVersion: v1metadata:  name: test-pvc-busybox-0spec:  accessModes:  - ReadWriteOnce  storageClassName: local-storage  volumeName: test-local-pv-0  resources:    requests:      storage: 10Gi
复制代码


kind: PersistentVolumeClaimapiVersion: v1metadata:  name: test-pvc-busybox-1spec:  accessModes:  - ReadWriteOnce  storageClassName: local-storage  volumeName: test-local-pv-1  resources:    requests:      storage: 10Gi
复制代码

创建 ZooKeeper StatefulSet


apiVersion: apps/v1kind: StatefulSetmetadata:  name: busybox  labels:    app: busyboxspec:  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/


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

发布于: 19 分钟前阅读数: 6
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
使用Local Persistent Volume 部署有状态工作负载_Kubernetes_华为云开发者联盟_InfoQ写作社区