Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何在PersistentVolume创建上运行命令?_Kubernetes_Persistent Volumes_Kubernetes Statefulset - Fatal编程技术网

Kubernetes 如何在PersistentVolume创建上运行命令?

Kubernetes 如何在PersistentVolume创建上运行命令?,kubernetes,persistent-volumes,kubernetes-statefulset,Kubernetes,Persistent Volumes,Kubernetes Statefulset,我有一个StatefulSet,看起来像这样 apiVersion: v1 kind: StatefulSet metadata: name: web spec: ... volumeClaimTemplates: — metadata: name: www spec: resources: requests: storage: 1Gi 它将为其控制的服务的每个Pod创建一个PersistentVolumeCl

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

apiVersion: v1
kind: StatefulSet
metadata:
  name: web
spec:
  ...
  volumeClaimTemplates:
  — metadata:
      name: www
    spec:
      resources:
        requests:
          storage: 1Gi
它将为其控制的
服务的每个
Pod
创建一个
PersistentVolumeClaim
(PVC)和一个
PersistentVolumeClaim
(PV)

在创建
Pod
之前,我想在这些pv上执行一些命令

我想创建一个
作业
,它装载那些PV并运行命令,但是我怎么知道创建了多少个PV

是否有kubernetes本机解决方案可以在PV创建时触发某些pod执行?

解决方案是

您可以将其添加到您的
身材集的规格中

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容器的方式更直接、更清晰。