为什么可以在持久卷上设置多个访问模式?

2023-11-26

例如在下面的例子中:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: exmaple-pvc
spec:
  accessModes:
    - ReadOnlyMany
    - ReadWriteMany
  storageClassName: standard
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1Gi

为什么这是允许的?在这种情况下,卷的实际行为是什么?只读?读和写?


能够充分理解为什么在特定领域使用某种结构yaml定义,首先我们需要了解这个特定字段的用途。我们需要问它的用途是什么,它在这个特定的环境中的功能是什么?kubernetes api 资源.

我很难找到正确的解释accessModes in PersistentVolumeClaim我必须承认我发现了什么 in Kubernetes 官方文档没有让我满意:

A PersistentVolume可以以任何支持的方式安装在主机上 资源提供者。如下表所示,提供商将 具有不同的功能,每个PV的访问模式设置为 该特定卷支持的特定模式。例如,NFS 可以支持多个读/写客户端,但特定的 NFS PV 可能 以只读方式导出到服务器上。每个 PV 都有自己的一组 描述特定 PV 功能的访问模式。

幸运的是,这次我设法找到了关于这个主题的非常好的解释OpenShift 文档。我们可以在那里读到:

声明与具有相似访问模式的卷相匹配。仅有的两个 匹配标准是访问模式和大小。索赔的访问模式 代表一个请求。因此,你可能会获得更多,但永远不会 较少的。例如,如果索赔请求 RWO,但唯一的卷 可用的是 NFS PV (RWO+ROX+RWX),则声明将与 NFS 匹配 因为它支持RWO。

总是首先尝试直接匹配。音量模式必须 匹配或包含比您要求的更多的模式。尺寸必须是 大于或等于预期值。如果有两种类型的卷, 例如 NFS 和 iSCSI,具有相同的访问模式集,其中之一 他们可以将声明与这些模式相匹配。之间没有顺序 卷的类型,并且无法选择一种类型而不是另一种类型。

将所有具有相同模式的卷分组,然后按大小排序, 最小到最大。活页夹获取具有匹配模式的组并 按大小顺序迭代每个,直到一个大小匹配。

现在可能是最重要的部分:

一卷的AccessModes是卷的描述符 能力。它们不是强制的约束。存储提供商 负责因无效使用而导致的运行时错误 资源。

我强调这部分为AccessModes很容易被误解。让我们看一下例子:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: exmaple-pvc-2
spec:
  accessModes:
  - ReadOnlyMany
  storageClassName: standard
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1Gi

事实上,我们在我们的PersistentVolumeClaim仅定义ReadOnlyMany访问模式并不意味着它不能用于其他accessModes由我们的存储提供商支持。重要的是要理解,我们不能在这里对我们如何使用所请求的存储设置任何限制Pods。如果我们的存储提供商,隐藏在我们的背后standard存储类,还支持ReadWriteOnce,它也将可供使用。

回答你的具体问题...

为什么这是允许的?此卷的实际行为是什么 案件?只读?读和写?

它根本不定义卷的行为。音量将根据其表现能力(我们没有定义它们,它们是预先强加的,作为存储规范的一部分)。换句话说,我们将能够在我们的Pods以所有可能的方式,允许使用它。

就说我们的standard存储供应商,在这种情况下GKE恰好是Google 计算引擎永久磁盘:

$ kubectl get storageclass
NAME                 PROVISIONER            AGE
standard (default)   kubernetes.io/gce-pd   10d

目前支持两个AccessModes:

  • ReadWriteOnce
  • ReadOnlyMany

因此,无论我们在声明中指定什么,我们都可以使用它们,例如这边走:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: debian
  template:
    metadata:
      labels:
        app: debian
    spec:
      containers:
      - name: debian
        image: debian
        command: ['sh', '-c', 'sleep 3600']
        volumeMounts:
         - mountPath: "/mnt"
           name: my-volume
           readOnly: true
      volumes:
      - name: my-volume
        persistentVolumeClaim:
          claimName: example-pvc-2
      initContainers:
      - name: init-myservice
        image: busybox
        command: ['sh', '-c', 'echo "Content of my file" > /mnt/my_file']
        volumeMounts:
         - mountPath: "/mnt"
           name: my-volume

在上面的例子中两种功能都被使用。首先我们的卷安装在rw模式由init container它会保存一些文件,然后将其安装到main container作为只读文件系统。即使我们在我们的中指定,我们仍然能够做到这一点PersistentVolumeClaim只有一种访问模式:

spec:
  accessModes:
  - ReadOnlyMany

回到你在标题中提出的问题:

为什么可以在持久卷上设置多个访问模式?

答案是:您根本无法设置它们,因为它们已经由存储提供商设置,您只能通过这种方式请求您想要什么存储,它必须满足什么要求,以及这些要求之一是它支持的访问模式。

基本上通过输入:

spec:
  accessModes:
    - ReadOnlyMany
    - ReadWriteOnce

in our PersistentVolulmeClaim我们说的定义:

“嘿!存储提供商!给我一个支持这套的卷accessModes。我不在乎它是否支持其他任何人,比如ReadWriteMany,因为我不需要它们。给我一个符合我要求的东西吧!”

我相信进一步解释为什么an array这里使用的是不需要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么可以在持久卷上设置多个访问模式? 的相关文章

  • Grafana/prometheus 中没有 kafka 指标

    我成功部署了 Helm Chart普罗米修斯操作员 https github com coreos prometheus operator tree master helm prometheus operator kube 普罗米修斯 ht
  • 使大型静态数据文件可供 kubernetes pod 使用

    我有一些相当大的 UTF 8 数据文件 pod 需要在启动时加载到内存中 从几百 KB 到大约 50 MB 该项目 包括 helm 图表 是开源的 但其中一些文件不是开源的 否则我可能只会将它们包含在图像中 我最初的想法是创建配置映射 但我
  • 在容器中运行多个相似的进程有意义吗?

    提供有关该问题的背景的简要背景 目前 我和我的团队正在将微服务迁移到 k8s 以减少维护多个部署工具和管道的工作量 我们计划迁移的微服务之一是 ETL Worker 它监听 SQS 上的消息并执行多阶段处理 它是使用 PHP Laravel
  • 如何从 Kubernetes 服务背后的 HTTP 请求读取客户端 IP 地址?

    我的 Web 应用程序作为 Kubernetes pod 在 SSL 的 nginx 反向代理后面运行 代理和我的应用程序都使用 Kubernetes 服务进行负载平衡 如所述here http blog kubernetes io 201
  • Podman:如何解析使用 Kubernetes YAML 部署的 pod 的主机名

    我正在使用 podman 4 5 dev 我使用以下方式部署了两个 Pod podman kube 播放 foo yaml podman kube play bar yaml 我在文件中指定了 pod 的主机名 但它们不会在容器内得到解析
  • 2 个具有共享 Redis 依赖的 Helm Chart

    目前 我有 2 个 Helm Charts Chart A 和 Chart B Chart A 和 Chart B 对 Redis 实例具有相同的依赖关系 如Chart yaml file dependencies name redis v
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 允许 Kubernetes 用户列表/获取命名空间

    我有以下用户清单 我希望允许 myapp user 获取集群内所有命名空间的列表 根据我的查找 我应该创建一个 ClusterRole 但我无法真正找到足够的详细信息 是否有所有 apiGroup 以及相应资源和动词的列表 apiVersi
  • 入口和 SSL 直通

    我最近一直在使用 nginxdemo nginx ingress 控制器 据我了解 该控制器无法执行 SSL 直通 我的意思是 将客户端证书一直传递到后端服务进行身份验证 因此我一直通过标头传递客户端主题 DN 最终 我更喜欢 SSL 直通
  • Kubernetes Web UI(仪表板)缺少图表

    我已经使用 Kubeadm v1 6 安装了 Docker v1 13 和 Kubernetes 然后我安装了 Web UI 仪表板 我可以访问它 但缺少 CPU 内存使用图 为什么会发生这种情况 对我来说 安装后使用图就起作用了heaps
  • Kubernetes Ingress 在 nginx 反向代理后面运行

    我已经在可以从互联网访问的服务器上安装了 minikube 我创建了一个可用的 kubernetes 服务 gt kubectl get service myservice NAME CLUSTER IP EXTERNAL IP PORT
  • 指定命名空间时,无法使用 nginx-stable 中的 helm 安装 nginx ingress

    我有个问题 我正在尝试使用 helm 3 安装 nginx 但当我指定命名空间时它不起作用 知道为什么吗 它无需任何操作即可工作 helm install nginx release nginx stable nginx ingres n
  • 如何在 kubernetes 中将秘密标记为可选?

    来自文档 除非将秘密标记为可选 否则必须先创建秘密 然后再将其作为环境变量在 pod 中使用 引用不存在的 Secret 将阻止 pod 启动 如何将秘密标记为可选 您正在寻找的是 name ENV NAME valueFrom secre
  • 如何通过 kubectl 代理访问此 Kubernetes 服务?

    我想通过以下方式访问我的 Grafana Kubernetes 服务kubectl 代理服务器 https kubernetes io docs user guide kubectl v1 7 proxy 但由于某种原因 即使我可以使其适用
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • Kubernetes 中可以连接两个集群 IP 服务吗?

    情况是我想连接一个租户内的两个集群IP服务 该租户已经将Traefik作为NodePort 以便这两个服务中的任何一个都可以成为LoadBalancer 因为NodePort由Traefik使用 我尝试连接的两个服务的工作方式如下 第一个服
  • 如何限制对 Kubernetes 服务的访问?

    我正在尝试使用以下 yaml 创建服务 正如您所看到的 我正在尝试限制 10 0 0 0 8 范围内对该服务的访问 apiVersion v1 kind Service metadata name nginx service spec po
  • FluentD 日志不可读。已排除,下次检查

    面临 fluidd 日志无法读取 已排除 下次检查 我有一个在 kubernetes 设置中运行的 fluidD 守护进程集的简单配置 流利版本 fluidd 0 12 43 以下是我的配置
  • 服务器找不到 pod 的 nginx_vts_server_requests_per_second 指标

    我安装了kube prometheus 0 9 0 https github com prometheus operator kube prometheus 并且想要部署一个示例应用程序来测试 Prometheus 指标自动缩放 并使用以下
  • 什么是 Kubernetes 清单?

    我在网上搜索过 大多数链接似乎都提到了清单 但没有实际解释它们是什么 什么是清单 它基本上是 Kubernetes API 对象描述 配置文件可以包含其中的一个或多个 即 Deployment ConfigMap Secret Daemon

随机推荐

  • sigma.js 不读取 JSON

    我有这个页面 div div
  • magento 显示类别中的产品数量错误

    我有一个奇怪的问题 似乎很多人在互联网上都有同样的问题 下图将定义我的问题 而且我的 magento 版本是 1 7 正如我所强调的 LEFT 表示该类别有 16 个产品 但实际上 类别产品 选项卡显示 15 个产品 我所有的分类都乱了 请
  • EWS 获取所有文件夹中未读电子邮件的计数

    我正在尝试从 Exchange 获取特定用户的未读电子邮件数量 我可以从收件箱获取电子邮件数量 如下所示 SearchFilter sf new SearchFilter SearchFilterCollection LogicalOper
  • sp_send_dbmail不会发送查询结果

    我已经尝试了每个该死的论坛建议的所有途径 但无济于事 需要发送已存储在表中的 SQLPERF logspace 结果 通过sp send dbmail给收件人 作业的第 2 步是发生故障的地方 请帮忙 EXEC msdb dbo sp se
  • Firebase 身份验证 iOS 12 无效令牌

    我有一个使用 Firebase 身份验证的应用程序 该身份验证使用电话短信验证和验证码 无 APNS 如果您使用的是 iOS 11 4 1 该应用程序可以在身份验证过程中正常运行 但是 如果您使用的是 iOS 12 则身份验证过程会导致无效
  • Iframe 中的会话在 Firefox 中工作,但在 Internet Explorer 中不工作

    我正在尝试让表单在 Internet Explorer 中工作 我发现当我在 Firefox 中提交此表单时 我可以启动一个会话并根据该会话将我的网络浏览器发送到正确的页面 然而 在 Internet Explorer 中 当我调试 SES
  • Android中如何设置按钮点击效果?

    在Android中 当我为按钮设置背景图像时 单击它时看不到任何效果 我需要在按钮上设置一些效果 以便用户可以识别出该按钮被单击 单击该按钮后 该按钮应变暗几秒钟 这个怎么做 这可以通过创建一个包含按钮状态列表的可绘制 xml 文件来实现
  • 箭头函数内的 async/await (Array#map/filter)

    我在此代码中遇到编译时错误 const someFunction async myArray gt return myArray map myValue gt return id my id myValue await service ge
  • 角度路由 - 重定向到外部站点?

    在 AngularJS 路由文件中 有一个选项otherwise路由 替换 404 routeProvider when otherwise redirectTo my path 有没有办法做到这一点 以便重定向到不在应用程序中的页面 我试
  • 保持终端焦点

    我有一个 python 脚本 它使用 selenium 来自动化网页 将焦点从需要用户输入的终端上移开 python 中是否有以编程方式将焦点切换回终端的方法 如果重要的话 我将在 Windows 7 上的 Windows 命令提示符中运行
  • 长周期区块应用

    我的应用程序中有以下循环 var maxIterations Int 0 func calculatePoint cn Complex gt Int let threshold Double 2 var z Complex init re
  • const 的用处 (C++)

    我是一个 const 恶魔 我努力让一切尽可能 const 我尝试查看 const 和非 const 版本函数的各种反汇编输出 但尚未看到明显的改进 我假设现在的编译器能够使用非 const 函数来完成聪明的事情 而这些函数在技术上可能是
  • 从长到宽,重复两次测量

    我知道这个问题已经在 从长到宽 的标题下被问过很多次了 但我遇到了一种情况 我有两个重复测量的值变量 id sex time score1 score2 1 subject 1 m Time1 0 20926263 0 2499310 2
  • winutils.exe chmod 命令未设置权限

    gt D gt echo HADOOP HOME gt D Apps winutils hadoop 2 7 1 在与 HADOOP HOME 相同的磁盘上创建 tmp hive 文件夹 D gt dir tmp hive Director
  • 为什么 Jetpack Compose Preview 不显示任何内容?

    我正在使用 Jetpack Compose 预览仅显示标题 但如果我使用 dev13 版本 它工作正常 IDE Android Studio 4 2 Canary 7撰写 0 1 0 dev17 这是一个已知问题 它应该在 Android
  • Django 管理,自定义错误消息?

    我想知道如何在 Django 管理中显示错误消息 我的网站上有一个私人用户部分 用户可以在其中使用 点 创建请求 一个请求从用户的帐户中获取 1 或 2 个积分 取决于请求的两种类型 因此如果帐户有 0 个积分 则用户无法发出任何请求 在私
  • 无法加载文件或程序集“xxxx”或其依赖项之一。该系统找不到指定的文件

    在 VS2005 中 我们整个编程人员都收到此错误消息零星地它总是在贝尼控制项目 此错误消息每天会发生多次 并且在进入控件的设计模式时会发生 通常重建贝尼控制解决了问题 但有时必须重建整个解决方案 还有其他人解决了这个问题吗 有哪些建议或网
  • 在 ncurses 中捕获 control+key 的正确方法

    在 ncurses 中捕获 control key 的正确方法是什么 当前我正在这样做定义控制 如下所示 define ctl x x 0x1f 它工作正常 但问题是我无法同时捕获 C j 和 ENTER 这是因为 j 106 110101
  • java中可以连续分配对象吗?

    假设我有一大堆相对较小的对象 我需要经常迭代它们 我想通过提高缓存性能来优化我的迭代 所以我想分配物体 而不是引用 在内存上连续 所以我会得到更少的缓存未命中 并且整体性能可能会明显更好 在 C 中 我可以只分配一个对象数组 它会根据我的需
  • 为什么可以在持久卷上设置多个访问模式?

    例如在下面的例子中 apiVersion v1 kind PersistentVolumeClaim metadata name exmaple pvc spec accessModes ReadOnlyMany ReadWriteMany