关注分享主机优惠活动
国内外VPS云服务器

为K8S集群下的应用程序配置本地卷

摘要:手动配置本地卷 本节介绍如何在不使用本地卷的情况下手动配置本地卷。 主机挂载本地卷。 如果本例中主机上配置了本地卷,则必须手动将目录挂载到该目录下。 例如,部署配置权限是可选的。

本地卷描述

HadoopES节点等系统的数据需要大量存储并且本身提供冗余功能。 在这种情况下,您不需要从存储系统分配卷,而是让它们使用本地节点上的存储,就像在裸机部署中一样。 在本地卷出现之前,您可以使用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-c01okd-c02 主机配置为 /mnt/test 本地我是。 而对于OKD集群,需要设置SeLinux权限:

chcon -R unconfined_u:object_r:svirt_sandbox_file_t:s0 / mnt/test

手动创建两个PVexample-local-pv-1example-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>调度后,PVCPV关联。

如果删除PVC,您将看到: PV 处于 Released 状态,因此 PV 无法重用。 管理员必须手动删除PV并重建PV >要重用:

如果本地卷像这样手动创建时,唯一支持的perpetitiveVolumeReclaimPolicy是“保留”。   当持久卷从持久卷声明中释放时,管理员必须手动清理本地卷并将其设置为重用。  

自动配置本地卷

手动配置本地凭证 PV 是您必须手动创建的, PVC删除后,PV将无法重复使用。 这意味着必须重建PV。 当系统使用大量本地卷时,管理负担就会增加。 考虑到这一点,您可以使用外部静态配置程序来简化本地卷。我的设置。

当前版本(<=K8S 1.12OKD 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-1StorageClass的名称。 与/mnt 相同。 /local-storage /对应;

hostDir:本地目录;

moutDir外部配置程序hostDir挂载到pod内的目录,并与>hostDir保持一致。 嗯>。

Provisionerroot 权限运行,并需要对 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

未经允许不得转载:主机频道 » 为K8S集群下的应用程序配置本地卷

评论 抢沙发

评论前必须登录!