我有一个容器在容器中运行,我希望每周都能监视其内容。我想为此写一个Kube cronjob。有最好的方法吗?
此刻,我正在本地计算机上运行一个脚本,该脚本执行kubectl exec my-container
并监视该容器中目录的内容。
答案 0 :(得分:1)
kubectl exec my-container
对我来说听起来很不错。如果要在Pod(Kubernetes CronJob)中运行kubectl
,则可能要看this。
还有其他方法,但是根据您的长远努力,这可能是一个过大的杀伤力。例如:
您可以设置Fluentd或tail/grep sidecar(如果使用的是二进制文件,则可以设置ls
)来发送内容或该内容的一部分文件到Elasticsearch集群。
您可以在Prometheus中设置Kubernetes以便在Pod安装的文件系统上刮取度量标准。您可能必须在Pod中使用自定义导出器,或使用其他导出器在Pod中的安装点中导出文件。 This is a similar example。
答案 1 :(得分:0)
您可以在Pod的另一个小车中运行脚本。
volume
volume
安装为您的内容目录示例:
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
emptyDir
中装载了/usr/share/nginx/html
卷。在此目录中,主应用程序将生成数据。 emptyDir
卷(名为 shared-data )由/usr/share/nginx/html
目录中/pod-data
目录中的主应用程序创建。 /pod-data
包含主应用程序在/usr/share/nginx/html
目录中生成的全部数据。然后,您可以在此目录上运行脚本。