What is the best way to exec into another container and access its directory?












1















I have a container running inside a pod and I want to be able to monitor its content every week. I want to write a Kube cronjob for it. Is there a best way to do this?



At the moment I am doing this by running a script in my local machine that does kubectl exec my-container and monitors the content of the directory in that container.










share|improve this question





























    1















    I have a container running inside a pod and I want to be able to monitor its content every week. I want to write a Kube cronjob for it. Is there a best way to do this?



    At the moment I am doing this by running a script in my local machine that does kubectl exec my-container and monitors the content of the directory in that container.










    share|improve this question



























      1












      1








      1








      I have a container running inside a pod and I want to be able to monitor its content every week. I want to write a Kube cronjob for it. Is there a best way to do this?



      At the moment I am doing this by running a script in my local machine that does kubectl exec my-container and monitors the content of the directory in that container.










      share|improve this question
















      I have a container running inside a pod and I want to be able to monitor its content every week. I want to write a Kube cronjob for it. Is there a best way to do this?



      At the moment I am doing this by running a script in my local machine that does kubectl exec my-container and monitors the content of the directory in that container.







      kubernetes kubectl






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 13 '18 at 21:19









      Rico

      27.3k94865




      27.3k94865










      asked Nov 13 '18 at 21:12









      Sudesh BanskotaSudesh Banskota

      263




      263
























          2 Answers
          2






          active

          oldest

          votes


















          1














          kubectl exec my-container sounds perfectly fine to me. You might want to look at this if you want to run kubectl in a pod (Kubernetes CronJob).



          There are other ways but depending on what you are trying to do in the long term it might be an overkill. For example:




          • You can set up a Fluentd or tail/grep sidecar (or ls, if you are using a binary file?) to send the content or part of the content of that file to an Elasticsearch cluster.


          • You can set up Prometheus in Kubernetes to scrape metrics on the pod mounted filesystems. You will probably have to use a custom exporter in the pod or something else that exports files in mount points in the pod. This is a similar example.







          share|improve this answer































            0














            You can run your script in another sidecar of your pod.




            • Define a empty directory volume

            • Mount this volume as your content directory

            • Also mount this directory to sidecar, so that it can access and able to monitor.


            Example:



            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


            Example Description




            • First container(named container-which-produce-content) is main application, which mount a emptyDir volume in /usr/share/nginx/html. In this directory main application will generate data.

            • Second container(named container-which-run-script-to-monitor) will mount same emptyDir volume (named shared-data which also mounted by main application in /usr/share/nginx/html dir) in /pod-data directory. This /pod-data contains whole data which main application generated in /usr/share/nginx/html directory. You can then run your scripts on this directory.






            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289561%2fwhat-is-the-best-way-to-exec-into-another-container-and-access-its-directory%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1














              kubectl exec my-container sounds perfectly fine to me. You might want to look at this if you want to run kubectl in a pod (Kubernetes CronJob).



              There are other ways but depending on what you are trying to do in the long term it might be an overkill. For example:




              • You can set up a Fluentd or tail/grep sidecar (or ls, if you are using a binary file?) to send the content or part of the content of that file to an Elasticsearch cluster.


              • You can set up Prometheus in Kubernetes to scrape metrics on the pod mounted filesystems. You will probably have to use a custom exporter in the pod or something else that exports files in mount points in the pod. This is a similar example.







              share|improve this answer




























                1














                kubectl exec my-container sounds perfectly fine to me. You might want to look at this if you want to run kubectl in a pod (Kubernetes CronJob).



                There are other ways but depending on what you are trying to do in the long term it might be an overkill. For example:




                • You can set up a Fluentd or tail/grep sidecar (or ls, if you are using a binary file?) to send the content or part of the content of that file to an Elasticsearch cluster.


                • You can set up Prometheus in Kubernetes to scrape metrics on the pod mounted filesystems. You will probably have to use a custom exporter in the pod or something else that exports files in mount points in the pod. This is a similar example.







                share|improve this answer


























                  1












                  1








                  1







                  kubectl exec my-container sounds perfectly fine to me. You might want to look at this if you want to run kubectl in a pod (Kubernetes CronJob).



                  There are other ways but depending on what you are trying to do in the long term it might be an overkill. For example:




                  • You can set up a Fluentd or tail/grep sidecar (or ls, if you are using a binary file?) to send the content or part of the content of that file to an Elasticsearch cluster.


                  • You can set up Prometheus in Kubernetes to scrape metrics on the pod mounted filesystems. You will probably have to use a custom exporter in the pod or something else that exports files in mount points in the pod. This is a similar example.







                  share|improve this answer













                  kubectl exec my-container sounds perfectly fine to me. You might want to look at this if you want to run kubectl in a pod (Kubernetes CronJob).



                  There are other ways but depending on what you are trying to do in the long term it might be an overkill. For example:




                  • You can set up a Fluentd or tail/grep sidecar (or ls, if you are using a binary file?) to send the content or part of the content of that file to an Elasticsearch cluster.


                  • You can set up Prometheus in Kubernetes to scrape metrics on the pod mounted filesystems. You will probably have to use a custom exporter in the pod or something else that exports files in mount points in the pod. This is a similar example.








                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 13 '18 at 21:53









                  RicoRico

                  27.3k94865




                  27.3k94865

























                      0














                      You can run your script in another sidecar of your pod.




                      • Define a empty directory volume

                      • Mount this volume as your content directory

                      • Also mount this directory to sidecar, so that it can access and able to monitor.


                      Example:



                      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


                      Example Description




                      • First container(named container-which-produce-content) is main application, which mount a emptyDir volume in /usr/share/nginx/html. In this directory main application will generate data.

                      • Second container(named container-which-run-script-to-monitor) will mount same emptyDir volume (named shared-data which also mounted by main application in /usr/share/nginx/html dir) in /pod-data directory. This /pod-data contains whole data which main application generated in /usr/share/nginx/html directory. You can then run your scripts on this directory.






                      share|improve this answer




























                        0














                        You can run your script in another sidecar of your pod.




                        • Define a empty directory volume

                        • Mount this volume as your content directory

                        • Also mount this directory to sidecar, so that it can access and able to monitor.


                        Example:



                        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


                        Example Description




                        • First container(named container-which-produce-content) is main application, which mount a emptyDir volume in /usr/share/nginx/html. In this directory main application will generate data.

                        • Second container(named container-which-run-script-to-monitor) will mount same emptyDir volume (named shared-data which also mounted by main application in /usr/share/nginx/html dir) in /pod-data directory. This /pod-data contains whole data which main application generated in /usr/share/nginx/html directory. You can then run your scripts on this directory.






                        share|improve this answer


























                          0












                          0








                          0







                          You can run your script in another sidecar of your pod.




                          • Define a empty directory volume

                          • Mount this volume as your content directory

                          • Also mount this directory to sidecar, so that it can access and able to monitor.


                          Example:



                          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


                          Example Description




                          • First container(named container-which-produce-content) is main application, which mount a emptyDir volume in /usr/share/nginx/html. In this directory main application will generate data.

                          • Second container(named container-which-run-script-to-monitor) will mount same emptyDir volume (named shared-data which also mounted by main application in /usr/share/nginx/html dir) in /pod-data directory. This /pod-data contains whole data which main application generated in /usr/share/nginx/html directory. You can then run your scripts on this directory.






                          share|improve this answer













                          You can run your script in another sidecar of your pod.




                          • Define a empty directory volume

                          • Mount this volume as your content directory

                          • Also mount this directory to sidecar, so that it can access and able to monitor.


                          Example:



                          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


                          Example Description




                          • First container(named container-which-produce-content) is main application, which mount a emptyDir volume in /usr/share/nginx/html. In this directory main application will generate data.

                          • Second container(named container-which-run-script-to-monitor) will mount same emptyDir volume (named shared-data which also mounted by main application in /usr/share/nginx/html dir) in /pod-data directory. This /pod-data contains whole data which main application generated in /usr/share/nginx/html directory. You can then run your scripts on this directory.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 14 '18 at 20:32









                          Abu HanifaAbu Hanifa

                          771922




                          771922






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289561%2fwhat-is-the-best-way-to-exec-into-another-container-and-access-its-directory%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              Bressuire

                              Vorschmack

                              Quarantine