摘要:手动配置本地卷 本节介绍如何在不使用本地卷的情况下手动配置本地卷。 主机挂载本地卷。 如果本例中主机上配置了本地卷,则必须手动将目录挂载到该目录下。 例如,部署配置权限是可选的。
本地卷描述
Hadoop和ES节点等系统的数据需要大量存储并且本身提供冗余功能。 在这种情况下,您不需要从存储系统分配卷,而是让它们使用本地节点上的存储,就像在裸机部署中一样。 在本地卷出现之前,您可以使用HostPath将卷挂载到容器中,但此解决方案有很多限制。
以前访问本地存储、hostPath 卷的机制提出了许多挑战。 hostPath 卷很难在大型生产环境中使用。 当使用hostPath卷时,操作员必须关心本地磁盘管理、拓扑和各个pod的调度,并且许多Kubernetes功能(例如StatefulSets)不可用。 使用远程卷的现有 Helm 图表无法轻松移植以使用 hostPath 卷。 本地持久卷功能旨在解决主机路径卷的问题。es 可移植性、磁盘统计和调度挑战。
注意:本地卷,如主机路径和本地卷,仅适用于少数应用程序。 Pod 绑定到特定主机。 如果主机不健康,pod将无法调度到其他节点。 适用场景:
缓存数据集,利用数据引力加快处理速度
跨多个节点分片或复制数据的分布式存储系统。 示例包括 Cassandra 等分布式数据存储以及 Gluster 和 Ceph 等分布式文件系统。
本地卷与主机路径类似,但有一些额外的区别。 灵活统一。 如果您的应用程序使用hostpath,则只能在yaml中使用。 硬编码在文件中,localvolume 很灵活。 它是普通的PVC。 详情请参阅下文。
手动配置本地卷
本节介绍如何在不使用本地配置器的情况下手动配置本地卷。我会这样做。
管理员必须为本地卷创建存储类别,如下所示。 创建一个名为 local-storage 的存储类。
% kubectl create -f - <<EOFkind: StorageClassapiVersion: storage.k8s.io/v1metadata: name: local-storageprovisioner: kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumerEOF
注意:
该存储类无法动态提供存储功能,因此所有PV必须手动创建。
volumeBindingMode:WaitForFirstConsumer:不绑定PVC。 在调度 pod 之前,PV 会等待 pod 被调度。 这允许根据 Pod 资源请求(例如选择器、亲和性和反-亲和性)简化调度。 策略; p>
主机准备目录。 即配置本地硬盘。 例如,在实验环境中,okd-c01 和 okd-c02 主机配置为 /mnt/test 本地我是。 而对于OKD集群,需要设置SeLinux权限:
chcon -R unconfined_u:object_r:svirt_sandbox_file_t:s0 / mnt/test
手动创建两个PV:example-local-pv-1、example-local[k4 ]pv -2分别绑定两台主机的存储。 例如,绑定 okd-c01.zyl.io 主机的本地卷,如下所示:
% kubectl create -f - <<EOFapiVersion: v1kind:持久卷元数据:名称:示例-local-pv-1spec:容量:存储:1Gi accessModes:- ReadWriteOncepersistentVolumeReclaimPolicy:保留 storageClassName:local-storage local:路径:/mnt/test nodeAffinity : 必需:nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname 操作符: In value: - okd-c01.zyl.ioEOF
创建PVC :
% kubectl create -f - <<EOFkind: Persistent VolumeClaimapiVersion: v1metadata: name: example-local-claimspec: accessModes: - ReadWriteOnce 资源 :请求 : storage: 1Gi storageClassName: local-storageEOF
注意:目前,PVC 绑定到 PV,它将等到Pod被调度后再绑定到PV。 目前PVC 状态为待处理:
% oc 描述 pvc 示例-本地-声明...事件:类型 原因 消息年龄 [k4 ]----------------[ k4] ------- 正常 WaitForFirstConsumer 5 秒(10 秒内 x2)persistentvolume- 在控制器绑定之前创建的第一个消费者
配置应用程序使用的存储:
% kubectl create -f - <> /mnt/test/test.log; ] volumeMounts: - 名称: local-data mountPath: /mnt/ test 卷: [ k4] 名称:local-datapersistentVolumeClaim:claimName: example-local-claimEOF
Pod绑定:
% oc get pvc example-local-claim 名称 状态 卷容量 访问模式 存储类 AGEexample-local-claim 绑定示例-local-pv[ k4]2 1Gi RWO local[k4 ] 存储7m
注意:
此时删除pod就可以发送了它仍然被调度到本地存储 example-local-pv-2 所在的主机,即 okd-c02.zyl.io 。 ;
删除部署后,PVC就是PV,即第一个 pod 未与 < 解除绑定。 /em> em>调度后,PVC与PV关联。
如果删除PVC,您将看到: PV 处于 Released 状态,因此 PV 无法重用。 管理员必须手动删除PV并重建PV >要重用:
如果本地卷像这样手动创建时,唯一支持的perpetitiveVolumeReclaimPolicy是“保留”。 当持久卷从持久卷声明中释放时,管理员必须手动清理本地卷并将其设置为重用。
自动配置本地卷
手动配置本地凭证 PV 是您必须手动创建的, PVC删除后,PV将无法重复使用。 这意味着必须重建PV。 当系统使用大量本地卷时,管理负担就会增加。 考虑到这一点,您可以使用外部静态配置程序来简化本地卷。我的设置。
当前版本(<=K8S 1.12 和 OKD 1.11)的管理员可以手动挂载卷 必须。 当您将主机连接到特定目录时,外部静态配置程序会扫描该目录并自动创建PV并创建PVC > 释放时,清理目录内容并重建PV。 这是半自动的,但不是动态提供的。 后续版本将提供对动态配置的支持。 如果管理员只需要提供LVM VG,这个Provisioner会自动完成格式化、挂载等步骤。
使用 LVM 动态配置本地卷正在设计中,并且将在未来版本中实现 alpha 实现。 只要工作负载的性能要求允许磁盘共享,管理员就无需预先分区、格式化和安装本地卷。
请参阅:
Kubernetes 本地持久卷现已处于测试阶段;
[kubernetes-sigs/sig-storage-local[ k4] static-provisioner: K8S官方提供外部静态provisoioner;
配置本地卷:OKD如何配置本地配置器;
接下来,我们'我会告诉你如何做。 使用 OKD 提供的本地配置器。
主机挂载本地卷
例如,在本例中,okd-c0[1-3]主机挂载本地卷,必须手动将目录挂载到 /mnt/local-storage// 目录中如下: 有。 /p>
cat >> /etc/fstab <<EOF/dev/datavg/d1 /mnt/local-storage/local-storage-1/d1 xfs 默认为 0 0/dev / datavg /d2 /mnt/local-storage /local-storage-1/d2 xfs 默认 0 0/dev/datavg/d3 /mnt/local-storage/local-storage[ k4] 2 /d3 xfs 默认 0 0/dev/datavg /d4 /mnt/local-storage/local-storage-2/d4 xfs 默认 0 0EOFmkdir -p /mnt/local-storage/本地 -存储-1/{ d1,d2}mkdir -p /mnt/local-存储/本地-存储-2/{d3,d4}挂载 [ k4]a
OKD/Openshift环境SeLinux 设置权限:
chcon -R unconfined_u:object_r:svirt_sandbox_file_t:s0 /mnt/local-storage/
部署本地配置器
可选。 在多频段项目下部署Local Provisioner并创建项目。
oc new-project local-storage
>ConfigMap:使用外部配置器来描述存储类
em>使用者:
% kubectl create -f - <<"EOF"apiVersion: v1kind : ConfigMapmetadata: Name: local-volume-configdata: storageClassMap: | local[ k4]存储-1:主机目录:/mnt/local-存储/本地-存储-1挂载目录:/mnt/local-存储/本地-存储-1本地[ k4]存储-2:主机目录:/mnt/local-存储/本地-存储-2挂载目录:/mnt/local-存储/本地-存储-2EOF注意
strong>:
local-storage-1:StorageClass的名称。 与/mnt 相同。 /local-storage /对应;
hostDir:本地目录;
moutDir:外部配置程序将hostDir挂载到pod内的目录,并与>hostDir保持一致。 嗯>。
Provisioner 以 root 权限运行,并需要对 OKD 集群进行身份验证:
oc创建服务帐户本地 - 存储 - adminoc adm 策略将 - scc - 添加到 - 用户权限 - z 本地 - 存储 - admin
OKD集群安装模板:
oc create -f https://raw.githubusercontent.com/openshift/origin/release-3.11/examples/storage -examples /local [ k4]examples/local-storage-provisioner-template.yaml
从上述模板安装应用程序(附加说明:以 ) DS 模式在所有计算节点上运行):
oc new-app -p CONFIGMAP=local-volume-config -p SERVICE_ACCOUNT=local-storage-admin -p NAMESPACE=local -storage -p PROVISIONER_IMAGE=quay.io/external_storage/local-volume-provisioner:latest local-storage-provisioner
设置所需的StorageClass创造。 :
% kubectl create -f - <<"EOF"apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: name: local-storage- 1provisioner : kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumerEOF% kubectl create -f - <<"EOF" apiVersion: storage.k8s.io/v1kind: StorageClassmetadata: 名称: local-storage- 2provisioner : kubernetes.io/no-provisionervolumeBindingMode: WaitForFirstConsumerEOF
注意:创建StorageClass后,会自动PV已创建建立。
然后,手动创建PVC或将此存储卷与有状态集一起使用。
--[ k4 ]kind: PersistentVolumeClaimapiVersion: v1metadata: name: example-local-claimspec: accessModes: - ReadWriteOnce storageClassName: local-storage- 1 资源:请求:存储:5Gi-- -kind:StatefulSet...volumeClaimTemplates:- 元数据:名称:example-local-声明规范:accessModes:- ReadWriteOnce storageClassName :本地-存储-1资源:请求:存储:5Gi
评论前必须登录!
注册