k8s中volumeMounts.subPath的巧妙用法

k8s中volumeMounts.subPath的巧妙用法

Kubernetes (k8s) 中,volumeMounts.subPath 是一个非常有用的功能,它允许你指定一个卷(volume)的子路径而不是其根路径来挂载到容器中。

这在多种场景下非常有用,以下是一些使用 subPath 的巧妙用法:

1、共享卷的不同用途:当一个 Pod 中有多个容器需要挂载同一个持久卷(PersistentVolume,PV),但是每个容器需要访问不同的路径时,可以使用 subPath 来实现。

2、ConfigMap 和 Secret 的特定键值挂载:当需要将 ConfigMap 或 Secret 的特定键值对挂载为文件,而不是整个 ConfigMap 或 Secret 内容时,可以使用 subPath 来指定。

3、避免覆盖现有文件:如果容器内部的挂载点已经存在文件,直接挂载卷可能会覆盖这些文件。使用 subPath 可以避免这种情况,因为它允许你指定挂载到特定子目录。

4、动态创建子目录:当使用 subPath 时,如果指定的子路径在宿主机上不存在,Kubernetes 会自动为你创建这个子目录。

5、使用环境变量构造子路径:通过 subPathExpr 属性,可以使用 Downward API 环境变量来动态构造子路径,这在需要基于环境变量动态设置挂载路径时非常有用。

6、减少存储资源的浪费:使用 subPath 可以减少创建多个持久卷声明(PersistentVolumeClaim,PVC)和持久卷(PV)的需要,从而节省存储资源。

7、存储卷的灵活使用:可以在同一个存储卷上挂载不同的子路径,为不同的容器提供所需的数据,而无需为每个容器单独配置存储卷。

8、与存储类(StorageClass)配合使用:当使用动态存储供应时,subPath 可以与存储类(StorageClass)配合使用,以便在 Pod 级别动态地请求和挂载存储。

9、安全性:使用 subPath 可以限制对卷的访问,只暴露容器所需的文件或目录,从而提高安全性。

10、易于管理:使用 subPath 可以简化 Pod 配置,使得存储卷的使用更加直观和易于管理。

这些用法展示了 volumeMounts.subPath 在 Kubernetes 中的灵活性和实用性,它为 Pod 的存储卷挂载提供了更多的控制和选择。

在实际应用中,根据具体需求选择合适的用法,可以提高效率并优化资源的使用。

demo

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ui
  namespace: ftintserv
  labels:
    app: ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ui
  strategy:
    rollingUpdate:
      maxSurge: 70%
      maxUnavailable: 30%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: ui
    spec:
      terminationGracePeriodSeconds: 60
      containers:
        - name: ui
          image: reg-hub.gzeport.com/ftintserv/ui:1.0.1.RELEASE
          imagePullPolicy: Always
          ports:
            - containerPort: 82
          env:
            - name: TZ
              value: "Asia/Shanghai"

          resources:
            requests:
              cpu: 0.1
              memory: 128Mi
            limits:
              cpu: 1
              memory: 1024Mi
          volumeMounts:
            - mountPath: /etc/localtime
              name: localtime
            - mountPath: /var/log/nginx
              subPath: ui-web
              name: ftintserv-log-data
            - mountPath: /etc/nginx/conf.d
              name: config

      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: ftintserv-log-data
          persistentVolumeClaim:
            claimName: ftintserv-log-data-pvc
        - name: config
          configMap:
            name: ui-config
            defaultMode: 420

---
apiVersion: v1
kind: Service
metadata:
  name: ftintserv-ui-svc
  namespace: ftintserv
spec:
  type: NodePort
  ports:
    - port: 82
      protocol: TCP
      targetPort: 82
      nodePort: 48082
  selector:
    app: ui

参考

1.https://kubernetes.io/zh-cn/docs/concepts/storage/volumes/#using-subpath

2.https://mp.weixin.qq.com/s/ftAcGOJ5qpdko54d8q8pTQ

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇