This is part three of a three-part series. In this post, we’ll cover copying files into a new persistent volume. Part one covered manually copying files into and out of a container. Part two went into live synchronization.

Part Three: Copying Files to a New Persistent Volume

If you are mounting a persistent volume into the container for your application and you need to copy files into it, then oc rsync can be used in the same way as described previously to upload files. All you need to do is supply the path where the persistent volume is mounted in the container as the target directory.

If you haven't yet deployed your application, but you're wanting to prepare a persistent volume with all the data it needs to contain in advance, you can still claim a persistent volume and upload the data to it. In order to do this, you'll need to deploy a dummy application to mount the persistent volume against.

To create a dummy application for this purpose, run this command:

oc run dummy --image centos/httpd-24-centos7

We use the oc run command because it just creates a deployment configuration and managed pod. A service is not created, as we don't need the application we're running here (an instance of the Apache HTTPD server in this case) to actually be contactable. We're using the Apache HTTPD server purely as a means of keeping the pod running.

To monitor the startup of the pod and ensure it's deployed, run:

oc rollout status dc/dummy

Once it's running, you can see that a more limited set of resources is created, compared to what would be created when using oc new-app. View this by running:

oc get all --selector run=dummy -o name

Now that we have a running application, we next need to claim a persistent volume and mount it against our dummy application. When doing this, we assign it a claim name of data so that we can refer to the claim by a set name later on. We mount the persistent volume at /mnt inside of the container, which is the traditional directory used in Linux systems for temporarily mounting a volume.

oc set volume dc/dummy --add --name=tmp-mount --claim-name=data --type pvc --claim-size=1G --mount-path /mnt

This will cause a new deployment of our dummy application, this time with the persistent volume mounted. Again, monitor the progress of the deployment so we know when it's complete, by running:

oc rollout status dc/dummy

To confirm that the persistent volume claim was successful, you can run:

oc get pvc

With the dummy application now running, and with the persistent volume mounted, find the name of the pod for the running application with the following command:

oc get pods --selector run=dummy

This will return something like this, with your unique pod name that you’ll need to use in the following commands:

NAME            READY       STATUS      RESTARTS        AGE
dummy-1-9j3p3 1/1 Running 0 1m

We can now copy any files into the persistent volume, using the /mnt directory (where we mounted the persistent volume) as the target. In this case, since we're doing a one off copy, we can use the tar strategy instead of the rsync strategy.

oc rsync ./ dummy-1-9j3p3:/mnt --strategy=tar

When complete, you can validate that the files were transferred by listing the contents of the target directory inside of the container.

oc rsh dummy-1-9j3p3 ls -las /mnt

If you're done with this persistent volume and perhaps needed to repeat the process with another persistent volume but with different data, you can unmount the persistent volume but retain the dummy application.

oc set volume dc/dummy --remove --name=tmp-mount

Monitor the process once again to confirm that the re-deployment has completed.

oc rollout status dc/dummy

Look up the name of the current pod again:

oc get pods --selector run=dummy

Look again at what is in the target directory. It should be empty at this point. This is because the persistent volume is no longer mounted, and you're looking at the directory within the local container file system.

oc rsh dummy-1-9j3p3 ls -las /mnt

If you already have an existing persistent volume claim, as we now do, you could mount the existing claimed volume against the dummy application instead. This is different than above, where we both claimed a new persistent volume and mounted it to the application at the same time.

oc set volume dc/dummy --add --name=tmp-mount --claim-name=data --mount-path /mnt

Look for completion of the re-deployment:

oc rollout status dc/dummy

Again, get the name of the current pod:

oc get pods --selector run=dummy

Check the contents of the target directory. The files we copied to the persistent volume should again be visible.

oc rsh dummy-1-9j3p3 ls -las /mnt

When you're done and want to delete the dummy application, use oc delete to delete it, using a label selector of run=dummy to ensure we only delete the resource objects related to the dummy application.

oc delete all --selector run=dummy

Check that all the resource objects have been deleted:

oc get all --selector run=dummy -o name

Although we've deleted the dummy application, the persistent volume claim still exists, and can later be mounted against the actual application to which the data belongs.

oc get pvc

Congratulations! That’s it for this series on transferring files!

In this post, you've learned about oc commands that you can use to copy files into a persistent volume.

You can find a summary of the key commands covered below. To see more information on each oc command, run it with the --help option.

  • oc run dummy --image centos/httpd-24-centos7: Run a dummy application pod that can be used to mount persistent volumes to facilitate copying files to a persistent volume.
  • oc set volume dc/dummy --add --name=tmp-mount --claim-name=<claim-name> --type pvc --claim-size=1G --mount-path /mnt: Claim a persistent volume and mount it against the dummy application pod at the directory /mnt so that files can be copied into the persistent volume using oc rsync.

  • oc set volume dc/dummy --add --name=tmp-mount --claim-name=<claim-name> --mount-path /mnt: Mount an existing persistent volume against a dummy application pod at the directory /mnt so that files can be copied into the persistent volume using oc rsync.

  • oc rsync ./local/dir <pod-name>:/remote/dir --strategy=tar: Copy the directory to the remote directory in the pod. The --strategy=tar option indicates to use tar to copy the files rather than rsync.

Would You Like to Learn More?

This post is based on one of OpenShift’s interactive learning scenarios. To try it and our other tutorials without needing to install OpenShift, visit https://learn.openshift.com

Do you have an OpenShift Online account? There's no reason to wait. Get your applications running in minutes with no installation needed. Sign up for the free trial of OpenShift Online.

What other topics would you like to see in the future on this blog? We're happy to make tutorials about anything that helps you with your OpenShift experience. Comment and let us know!


关于作者

UI_Icon-Red_Hat-Close-A-Black-RGB

按频道浏览

automation icon

自动化

有关技术、团队和环境 IT 自动化的最新信息

AI icon

人工智能

平台更新使客户可以在任何地方运行人工智能工作负载

open hybrid cloud icon

开放混合云

了解我们如何利用混合云构建更灵活的未来

security icon

安全防护

有关我们如何跨环境和技术减少风险的最新信息

edge icon

边缘计算

简化边缘运维的平台更新

Infrastructure icon

基础架构

全球领先企业 Linux 平台的最新动态

application development icon

应用领域

我们针对最严峻的应用挑战的解决方案

Virtualization icon

虚拟化

适用于您的本地或跨云工作负载的企业虚拟化的未来