anaconda-storage
and anaconda-persistence
, then you should consolidate to a single PersistentVolume, as discussed in the general storage requirements.async
export option.root_squash
option. While a seemingly sensible option for security reasons, in practice we find that it too often leads to unexpected permissions issues. That said, a similar and more reliable option is to use the all_squash
option along with anonuid
and anonguid
. This effectively forces all remote access to be translated to the same UID and GID on the server. In summary, in order of preference, Anaconda recommends:
no_root_squash
for maximum administration flexibility, and to allow the containers to utilize GID 0, the Kubernetes default.all_squash
/ anon_uid
/ anon_gid
for a reliable option that avoids UID 0 & GID 0;root_squash
only if there is no other alternative.rsize=65536
, wsize=65536
. The reason smaller block sizes are preferred is because the creation of conda environments frequently involves the manipulation of thousands of smaller files. Large block sizes result in significant inefficiency.noatime
option. This eliminates the updating of file access times over NFS, further reducing network overhead. Note that file modification times are still preserved.PersistentVolume
and PersistentVolumeClaim
specifications is relatively simple.
Begin with the following template, called (for instance) pv.yaml
:
<NAME>
: you can give this any name you wish, or adhere to our conventions of anaconda-storage
and/or anaconda-persistence
. This name will ultimately be supplied to the Helm chart values. Note that <NAME>
appears in three places; use the same value for all.<GID>
: this is the group ID which has write access to the volume. As discussed above, the recommended value is 0
; but if you are forced to use root_squash
or all_squash
, make sure this has the value of the selected GID. The quotes must be preserved.<ADDRESS>
: the FQDN or numeric IP address of the NFS server.<PATH>
: the exported path from the NFS server.size
entry in both resources does not need to be changed, even if your volume is (as is likely) significantly larger. All that matters in this case is that the values are the same.
Once this template is properly populated, you can create the resources with the command:
anaconda-storage
and anaconda-persistence
, repeat this template for each.
mountOptions
to avoid performance issues within your Kubernetes platform. For example: