小橘子大叔

  • 主要区别
  • 首页
  • nginx
  • Linux
  • docker
  • Kubernetes
  • Prometheus
  • 生活
  • 文章归档
  • 友情链接
  • Instagram
  • TikTok
  • X
欢迎随时联系本人
  • Mail

Project Volume与单一volume区别

  • luxy
  • 2024-04-06
  • 4

最近重读了张磊老师的书,发现了一处小细节,于是上网搜一搜。

在Kubernetes中有一种特殊的卷,叫Projected Volume,可以把它翻译为“投射数据卷”。到目前为止,Kubernetes 支持的 Projected Volume 一共有四种:Secret;ConfigMap;Downward API;ServiceAccountToken(一种特殊的Secret)。它们存在的意义不是为了存放容器里的数据,也不是用来进行容器和宿主机之间的数据交换。这些特殊 Volume 的作用,是为容器提供预先定义好的数据。所以,从容器的角度来看,这些 Volume 里的信息就是仿佛是被 Kubernetes“投射”(Project)进入容器当中的。这正是 Projected Volume 的含义。

在书中给出了这样一个例子

apiVersion: v1
kind: Pod
metadata:
  name: test-projected-volume 
spec:
  containers:
  - name: test-secret-volume
    image: busybox
    args:
    - sleep
    - "86400"
    volumeMounts:
    - name: mysql-cred
      mountPath: "/projected-volume"
      readOnly: true
  volumes:
  - name: mysql-cred
    projected:
      sources:
      - secret:
          name: user
      - secret:
          name: pass

这与传统的写法不是很一样:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: nginx
    volumeMounts:
    - name: secret-volume
      mountPath: "/etc/secret"
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-secret

经过搜索发现,projected 卷允许您将多种类型的数据源(如 Secrets, ConfigMaps, 和 Downward API)合并到一个卷中,可以把两个 Secret(分别名为 user 和 pass)的内容合并到同一路径下。在上述例子中即合并到/projected-volume下,该目录下会有一个user文件和一个pass文件。如果需要在同一个文件系统位置使用来自不同源的数据,这将非常有用。

主要区别

  1. 数据源的多样性:使用 projected 卷可以在同一挂载点合并来自多个 Secrets, ConfigMaps, 和 Downward API 的数据。使用简单的 secret 卷只能挂载单一的 Secret 数据源。
  2. 管理复杂性:如果只需要访问一个 Secret,那么使用简单的 secret 卷是更直接和简单的方法。如果需要合并多个数据源,则 projected 卷提供了更大的灵活性和管理方便性。
  3. 使用场景:根据具体需求选择使用方法。如果Pod需要从多个Secrets或者需要与ConfigMaps数据混合时,projected是更好的选择。对于简单场景,直接使用secret卷就足够了。
© 2025 小橘子大叔
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}