在Kubernetes pod中的卷内创建一个空文件

在Kubernetes pod中的卷内创建一个空文件,kubernetes,kubernetes-pod,Kubernetes,Kubernetes Pod,我有一个遗留应用程序,它不断检查目录中的一个空文件,并在文件时间戳更改时执行某些操作 我正在将此应用程序迁移到Kubernetes,因此我想在pod中创建一个空文件。我尝试了下面这样的子路径,但它没有创建任何文件 apiVersion: v1 kind: Pod metadata: name: demo-pod spec: containers: - name: demo image: alpine command: ["sleep",

我有一个遗留应用程序,它不断检查目录中的一个空文件,并在文件时间戳更改时执行某些操作

我正在将此应用程序迁移到Kubernetes,因此我想在pod中创建一个空文件。我尝试了下面这样的子路径,但它没有创建任何文件

apiVersion: v1
kind: Pod
metadata:
  name: demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      command: ["sleep", "3600"]
      volumeMounts:
      - name: volume-name
        mountPath: '/volume-name-path'
        subPath: emptyFile
  volumes:
    - name: volume-name
      emptyDir: {} 
描述播客节目

Containers:
  demo:
    Container ID:  containerd://0b824265e96d75c5f77918326195d6029e22d17478ac54329deb47866bf8192d
    Image:         alpine
    Image ID:      docker.io/library/alpine@sha256:08d6ca16c60fe7490c03d10dc339d9fd8ea67c6466dea8d558526b1330a85930
    Port:          <none>
    Host Port:     <none>
    Command:
      sleep
      3600
    State:          Running
      Started:      Wed, 10 Feb 2021 12:23:43 -0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-4gp4x (ro)
      /volume-name-path from volume-name (rw,path="emptyFile")
容器:
演示:
容器ID:containerd://0b824265e96d75c5f77918326195d6029e22d17478ac54329deb47866bf8192d
图片:阿尔卑斯山
图像ID:docker.io/library/alpine@sha256:08d6ca16c60fe7490c03d10dc339d9fd8ea67c6466dea8d558526b1330a85930
端口:
主机端口:
命令:
睡觉
3600
状态:正在运行
开始时间:2021年2月10日星期三12:23:43-0800
准备好了吗
重新启动计数:0
环境:
挂载:
/来自default-token-4gp4x(ro)的var/run/secrets/kubernetes.io/serviceCount
/卷名中的卷名路径(rw,path=“emptyFile”)
卷上的ls也没有显示任何内容。
k8 exec-it demo pod-c demo ls/卷名路径

有什么建议吗


PS:我不想使用ConfigMap,只想创建一个空文件。

如果目标是在Pod启动时创建一个空文件,那么最简单的方法就是使用docker映像的入口点或init容器

使用initContainer,您可以执行以下操作(或者使用更复杂的init映像,您可以构建并执行整个bash脚本或类似的操作):

基本上,首先执行init容器,运行其命令,如果成功,则终止,主容器开始运行。它们共享相同的卷(也可以在不同的路径上装载它们),因此在本例中,init容器装载emptyDir卷,创建一个空文件,然后完成。当主容器启动时,文件已经存在

关于正在Kubernetes上移植的遗留应用程序:

如果您可以控制Dockerfile,您可以简单地更改它,在您期望的路径上创建一个空文件,这样当应用程序启动时,该文件从一开始就已经在那里创建,空的,就像您将应用程序添加到容器中一样,您还可以添加其他文件


有关init容器的更多信息,请查看文档()

如果目标是在Pod启动时创建一个空文件,那么最简单的方法是使用docker映像的入口点或init容器

使用initContainer,您可以执行以下操作(或者使用更复杂的init映像,您可以构建并执行整个bash脚本或类似的操作):

基本上,首先执行init容器,运行其命令,如果成功,则终止,主容器开始运行。它们共享相同的卷(也可以在不同的路径上装载它们),因此在本例中,init容器装载emptyDir卷,创建一个空文件,然后完成。当主容器启动时,文件已经存在

关于正在Kubernetes上移植的遗留应用程序:

如果您可以控制Dockerfile,您可以简单地更改它,在您期望的路径上创建一个空文件,这样当应用程序启动时,该文件从一开始就已经在那里创建,空的,就像您将应用程序添加到容器中一样,您还可以添加其他文件


有关init容器的更多信息,请查看文档()

我想您可能会感兴趣。
在这种情况下,一旦容器启动,钩子可能会帮助创建一个空文件:

该钩子在创建容器后立即执行


在下面的示例中,我将向您展示如何使用
PostStart
钩子创建一个空的
文件test
文件

首先,我创建了一个简单的清单文件:

# demo-pod.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo-pod
  name: demo-pod
spec:
  containers:
  - image: alpine
    name: demo-pod
    command: ["sleep", "3600"]
    lifecycle:
      postStart:
        exec:
          command: ["touch", "/mnt/file-test"]
创建
Pod
后,我们可以检查
demo Pod
容器是否有空的
文件测试
文件:

$ kubectl apply -f demo-pod.yml
pod/demo-pod created
$ kubectl exec -it demo-pod -- sh
/ # ls -l /mnt/file-test
-rw-r--r--    1 root     root             0 Feb 11 09:08 /mnt/file-test
/ # cat /mnt/file-test
/ #

我想你可能对……感兴趣。
在这种情况下,一旦容器启动,钩子可能会帮助创建一个空文件:

该钩子在创建容器后立即执行


在下面的示例中,我将向您展示如何使用
PostStart
钩子创建一个空的
文件test
文件

首先,我创建了一个简单的清单文件:

# demo-pod.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: demo-pod
  name: demo-pod
spec:
  containers:
  - image: alpine
    name: demo-pod
    command: ["sleep", "3600"]
    lifecycle:
      postStart:
        exec:
          command: ["touch", "/mnt/file-test"]
创建
Pod
后,我们可以检查
demo Pod
容器是否有空的
文件测试
文件:

$ kubectl apply -f demo-pod.yml
pod/demo-pod created
$ kubectl exec -it demo-pod -- sh
/ # ls -l /mnt/file-test
-rw-r--r--    1 root     root             0 Feb 11 09:08 /mnt/file-test
/ # cat /mnt/file-test
/ #

如果您只想在Pod启动时创建此文件,那么您可以在启动应用程序之前,使用一个bash入口点在启动时创建此文件。我希望此文件存在,即使它在Pod启动几秒钟后仍然存在,这也很好。如果您希望仅在Pod启动时创建此文件,那么您只需在启动应用程序之前使用bash入口点,即可在启动时创建此文件?@抱歉,我不明白。我希望这个文件能够存在,即使它在POD启动几秒钟后仍然存在,这也很好。