使用Local Persistent Volume 部署有状态工作负载
【摘要】 使用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)