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



我有一个容器在pod中运行,我希望能够每周监控它的内容。我想为它写一个Kube cronjob。有最好的方法吗?

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

kubectl exec my-container对我来说非常好。如果你想在pod(Kubernetes CronJob(中运行kubectl,你可能需要看看这个。

还有其他方法,但从长远来看,这可能有些过头了。例如:

  • 您可以设置Fluentd或tail/grep sidecar(或者ls,如果您使用的是二进制文件?(,将该文件的内容或部分内容发送到Elasticsearch集群。

  • 您可以在Kubernetes中设置Prometheus,以获取pod安装的文件系统的指标。您可能需要在pod中使用自定义导出器,或者使用其他方法来导出pod中装入点中的文件。这是一个类似的例子。

您可以在pod的另一个sidecar中运行脚本。

  • 定义一个空目录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

示例说明

  • 第一个容器(名为容器,用于生成内容(是主要应用程序,它在/usr/share/nginx/html中装载emptyDir卷。在此目录中,主应用程序将生成数据
  • 第二个容器(名为的容器,运行脚本来监视(将在/pod-data目录中装载相同的emptyDir卷(名为共享数据,也由/usr/share/nginx/html目录中的主应用程序装载(。该/pod-data包含主应用程序在/usr/share/nginx/html目录中生成的全部数据。然后,您可以在此目录上运行脚本

相关内容

  • 没有找到相关文章

最新更新