【问题标题】:How to run a command on PersistentVolume creation?如何在创建 PersistentVolume 时运行命令?
【发布时间】:2020-05-25 18:09:12
【问题描述】:

我有一个StatefulSet,看起来像这样

apiVersion: v1
kind: StatefulSet
metadata:
  name: web
spec:
  ...
  volumeClaimTemplates:
  — metadata:
      name: www
    spec:
      resources:
        requests:
          storage: 1Gi

它将为它控制的Service 中的每个Pod 创建一个PersistentVolumeClaim (PVC) 和一个PersistentVolume (PV)。

我想在创建 Pod 之前对这些 PV 执行一些命令。

我正在考虑创建一个 Job 来挂载这些 PV 并运行命令,但我怎么知道创建了多少 PV?

是否有 kubernetes-native 解决方案可以在 PV 创建时触发一些 pod 执行?

【问题讨论】:

    标签: kubernetes persistent-volumes kubernetes-statefulset


    【解决方案1】:

    解决方案是InitContianer

    您可以将其添加到您的 StatufulSet 的规范中:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name:  web
    spec:
    ...
      spec:
        initContainers:
        - name: init-myapp
          image: ubuntu:latest
          command:
          - bash
          - "-c"
          - "your command"
          volumeMounts:
          - name: yourvolume
            mountPath: /mnt/myvolume
    

    【讨论】:

    • InitContainer 不会在每次部署时执行吗?我只想在创建 PV 时执行。
    • 它将在每个容器启动时执行,但您可以通过卷上的标志文件将其标记为“已处理”来管理这种情况,只需在卷的根目录中创建一个“已处理”文件.不幸的是,您无法在 PVC 创建卷和 Pod 启动之间运行任何操作,因为这是一个完全异步的过程,而且某些卷甚至在第一次挂载之前都不会创建卷。此外,您可以创建自定义脚本/控制器等内容,但使用 Init Container 的方式更加直接和清晰。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2020-03-31
    • 2019-08-27
    相关资源
    最近更新 更多