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