执行到另一个容器并访问其目录的最佳方法是什么?

时间:2018-11-13 21:12:41

标签: kubernetes kubectl

我有一个容器在容器中运行,我希望每周都能监视其内容。我想为此写一个Kube cronjob。有最好的方法吗?

此刻,我正在本地计算机上运行一个脚本,该脚本执行kubectl exec my-container并监视该容器中目录的内容。

2 个答案:

答案 0 :(得分:1)

kubectl exec my-container对我来说听起来很不错。如果要在Pod(Kubernetes CronJob)中运行kubectl,则可能要看this

还有其他方法,但是根据您的长远努力,这可能是一个过大的杀伤力。例如:

  • 您可以设置Fluentdtail/grep sidecar(如果使用的是二进制文件,则可以设置ls)来发送内容或该内容的一部分文件到Elasticsearch集群。

  • 您可以在Prometheus中设置Kubernetes以便在Pod安装的文件系统上刮取度量标准。您可能必须在Pod中使用自定义导出器,或使用其他导出器在Pod中的安装点中导出文件。 This is a similar example

答案 1 :(得分:0)

您可以在Pod的另一个小车中运行脚本。

  • 定义一个空目录volume
  • 将此volume安装为您的内容目录
  • 也将此目录安装到sidecar,以便它可以访问并能够监视。

示例:

apiVersion: v1
kind: Pod
metadata:
  name: monitor-by-sidecar
spec:

  restartPolicy: Never

  volumes: # empty directory volume
  - name: shared-data
    emptyDir: {}

  containers:

  - name: container-which-produce-content # This container is main application which generate contect. Suppose in /usr/share/nginx/html directory
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html
    command: ["/bin/bash", "-c"]
    args:
      - while true;
        do 
        echo "hello world";
        echo "----------------" > /usr/share/nginx/html/index.html;
        cat /usr/share/nginx/html/index.html;
        done

  - name: container-which-run-script-to-monitor # this container will run your monitor scripts. this container mount main application's volume in /pod-data directory and run required scripts.
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh", "-c"]
    args:
    - while true; 
      do 
      echo "hello"; 
      sleep 10;
      ls -la /pod-data/;
      cat /pod-data/index.html;
      done

示例说明

  • 第一个容器(名为 container-which-produce-content )是主要应用程序,它在emptyDir中装载了/usr/share/nginx/html卷。在此目录中,主应用程序将生成数据。
  • 第二个容器(名为 container-which-run-script-monitor )将装入相同的emptyDir卷(名为 shared-data )由/usr/share/nginx/html目录中/pod-data目录中的主应用程序创建。 /pod-data包含主应用程序在/usr/share/nginx/html目录中生成的全部数据。然后,您可以在此目录上运行脚本。