This Helm chart installs Transmission, a bittorrent download client, in a Kubernetes cluster.
This README covers the basics of customising and installation
![]()
Install this helm chart using the following command:
helm repo add media-servarr https://media-servarr.shw.al/charts
helm install transmission media-servarr/transmission
Pointing the host media-servarr.local to your kubernetes cluster will then allow you to access the application at the default location of http://media-servarr.local/transmission/
Here are some examples of configuration you may want to override (and include in installation with -f myvalues.yaml).
You can either define secret values directly in your chart values, or reference keys from an existing Secret.
secrets:
# inline value
- name: 'rpcPassword'
value: 'password'
# reference pre-existing Secret
# - name: 'rpcPassword'
# ref: 'my-existing-secret'
When ref is set, the chart reads key name from the Secret named by ref in the same namespace.
By default, base configuration is defined using a ConfigMap - defined by default in ./values.yaml in application.config. You can change values in the contents, such as the url base in your custom values.yaml
application:
port: 9091 # default UI port
urlBase: 'transmission' # default web base path
config:
filename: 'settings.json'
contents: |
{
...
"rpcAuthentication": true,
"rpcUsername": "username",
...
}
secrets: [ 'rpcPassword' ]
mountPath: '/config/settings.json'
You can prevent a ConfigMap being created and the configuration being managed as a kubernetes resource by defining the config as null. For example:
application:
...
config: null
Two volumes are used by default:
deployment:
...
volumes:
config: # The key will be the volume name
persistentVolumeClaim:
claimName: 'transmission-config'
downloads:
nfs:
server: 'fileserver.local'
path: '/srv/downloads/'
By default, a PersistentVolumeClaim will be provisioned for the config, but emptyDir: {} will be used for downloads, unless otherwise specified in your values.yaml
persistentVolumeClaims:
transmission-config:
accessMode: 'ReadWriteOnce'
requestStorage: '1Gi'
storageClassName: 'manual'
# volumeName: 'existing-pv-name' # optional: bind this PVC to a specific pre-existing PV
selector:
matchLabels:
type: 'local'
This chart defaults service.type to LoadBalancer (unlike the other charts, which default to ClusterIP). This is so the BitTorrent peer port can be reached externally, not just the RPC UI. If your cluster doesn’t have a LoadBalancer provider (e.g. MetalLB, a cloud LB), change it to NodePort or ClusterIP:
service:
type: 'NodePort'
# externalTrafficPolicy: 'Local' # optional; preserves client source IP for NodePort/LoadBalancer
Ingress is disabled by default and typically not needed since the RPC UI is exposed through the LoadBalancer Service. If you want ingress for the UI, enable it and set host/TLS:
ingress:
enabled: true
host: 'example.com'
tls:
# Your TLS settings...
Thanks to qdm12/gluetun, it is fairly trivial to route traffic through a VPN.
To see how, view the VPN docs.
Other supported deployment configuration include deployment.nodeSelector, deployment.tolerations, and deployment.affinity
You can also adjust container ports, environment variables (such as adding PGID and PUID) and define a serviceAccount.
Have a look at the parent charts default values.yaml for a comprehensive list of available config.
To upgrade the deployment:
helm upgrade transmission media-servarr/transmission -f myvalues.yaml
To uninstall/delete the transmission deployment:
helm uninstall transmission
For support, issues, or feature requests, please file an issue on the chart’s repository issue tracker.