Skip to content
Snippets Groups Projects
Verified Commit 24d5dbc5 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

feat: create initial helm chart for rtorrent and flood

parent 393733bb
Branches
No related tags found
No related merge requests found
apiVersion: v2
name: flood
description: Helm Chart for flood
type: application
version: 0.1.0
appVersion: "4.7.0"
lint-flood:
stage: lint
script:
- helm lint flood
release-flood:
stage: release
needs:
- lint-flood
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
script:
- apk add --no-cache git
- helm plugin install https://github.com/chartmuseum/helm-push.git
- helm repo add --username gitlab-ci-token --password $CI_JOB_TOKEN repo ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/helm/stable
- helm cm-push flood repo
{{/*
Expand the name of the chart.
*/}}
{{- define "flood-helm.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "flood-helm.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "flood-helm.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "flood-helm.labels" -}}
helm.sh/chart: {{ include "flood-helm.chart" . }}
{{ include "flood-helm.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "flood-helm.selectorLabels" -}}
app.kubernetes.io/name: {{ include "flood-helm.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{- define "flood-helm.sslPath" -}}
/certs
{{- end }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "flood-helm.fullname" . }}
labels:
{{- include "flood-helm.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "flood-helm.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "flood-helm.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
volumes:
- name: data
{{- .Values.volume | nindent 10 }}
containers:
- name: flood
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
args:
- "--rthost={{ .Values.rtorrent.host }}"
- "--rtport={{ .Values.rtorrent.port }}"
- "--auth={{ .Values.auth }}"
ports:
- name: http
containerPort: 3000
protocol: TCP
startupProbe:
httpGet:
path: /
port: http
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumeMounts:
- mountPath: "/data"
name: data
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "flood-helm.fullname" . }}
labels:
{{- include "flood-helm.labels" . | nindent 4 }}
annotations:
{{- .Values.ingress.annotations | toYaml | nindent 4 }}
spec:
rules:
- host: "{{ .Values.ingress.host }}"
http:
paths:
- path: "{{ .Values.ingress.path }}"
backend:
service:
name: {{ include "flood-helm.fullname" . }}
port:
name: http
pathType: Prefix
apiVersion: v1
kind: Service
metadata:
name: {{ include "flood-helm.fullname" . }}
labels:
{{- include "flood-helm.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: 80
targetPort: http
protocol: TCP
name: http
selector:
{{- include "flood-helm.selectorLabels" . | nindent 4 }}
replicaCount: 1
image:
repository: jesec/flood
pullPolicy: IfNotPresent
tag: ""
imagePullSecrets: [ ]
nameOverride: ""
fullnameOverride: ""
rtorrent:
host: "example.tld"
port: 5000
auth: "default"
volume: |-
emptyDir: {}
service:
type: ClusterIP
ingress:
host: "example.com"
path: "/"
annotations: { }
securityContext:
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
resources:
limits:
cpu: 500m
memory: 2Gi
requests:
cpu: 200m
memory: 500Mi
podAnnotations: { }
podSecurityContext:
fsGroup: 2000
nodeSelector: { }
tolerations: [ ]
affinity: { }
apiVersion: v2
name: rtorrent
description: Helm Chart for rtorrent
type: application
version: 0.1.0
appVersion: "4b75e358"
lint-rtorrent:
stage: lint
script:
- helm lint rtorrent
release-rtorrent:
stage: release
needs:
- lint-rtorrent
rules:
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
script:
- apk add --no-cache git
- helm plugin install https://github.com/chartmuseum/helm-push.git
- helm repo add --username gitlab-ci-token --password $CI_JOB_TOKEN repo ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/helm/stable
- helm cm-push rtorrent repo
{{/*
Expand the name of the chart.
*/}}
{{- define "rtorrent-helm.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "rtorrent-helm.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "rtorrent-helm.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "rtorrent-helm.labels" -}}
helm.sh/chart: {{ include "rtorrent-helm.chart" . }}
{{ include "rtorrent-helm.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "rtorrent-helm.selectorLabels" -}}
app.kubernetes.io/name: {{ include "rtorrent-helm.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{- define "rtorrent-helm.sslPath" -}}
/certs
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "rtorrent-helm.fullname" . }}
labels:
{{- include "rtorrent-helm.labels" . | nindent 4 }}
data:
{{ .Values.rtorrent.config | toYaml | nindent 2 }}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "rtorrent-helm.fullname" . }}
labels:
{{- include "rtorrent-helm.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "rtorrent-helm.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "rtorrent-helm.selectorLabels" . | nindent 8 }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
securityContext:
{{- toYaml .Values.podSecurityContext | nindent 8 }}
volumes:
- name: tmp
emptyDir: {}
- name: data
{{- .Values.volumes.data | nindent 10 }}
- name: session
{{- .Values.volumes.session | nindent 10 }}
{{ if .Values.wireguard.enabled }}
- name: wireguard
secret:
secretName: {{ include "rtorrent-helm.fullname" . }}
defaultMode: 0640
initContainers:
- name: wireguard
securityContext:
{{- toYaml .Values.wireguard.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:wireguard-{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{ if ne .Values.wireguard.localNetworks "" }}
env:
- name: LOCAL_NETWORKS
value: {{ .Values.wireguard.localNetworks }}
{{ end }}
resources:
{{- toYaml .Values.wireguard.resources | nindent 12 }}
volumeMounts:
- mountPath: "/wireguard.conf"
name: wireguard
subPath: "wireguard.conf"
{{ end }}
containers:
- name: rtorrent
securityContext:
{{- toYaml .Values.rtorrent.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{ if ne .Values.rtorrent.externalIpCommand "" }}
env:
- name: EXTERNAL_IP_CMD
value: "{{ .Values.rtorrent.externalIpCommand }}"
{{ else if ne .Values.rtorrent.externalIp "" }}
- name: EXTERNAL_IP
value: "{{ .Values.rtorrent.externalIp }}"
{{ end }}
envFrom:
- configMapRef:
name: {{ include "rtorrent-helm.fullname" . }}
ports:
- name: xmlrpc
containerPort: 5000
protocol: TCP
startupProbe:
tcpSocket:
port: xmlrpc
livenessProbe:
tcpSocket:
port: xmlrpc
readinessProbe:
tcpSocket:
port: xmlrpc
resources:
{{- toYaml .Values.rtorrent.resources | nindent 12 }}
volumeMounts:
- mountPath: "/data"
name: data
- mountPath: "/session"
name: session
- mountPath: "/tmp"
name: tmp
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
apiVersion: v1
kind: Secret
metadata:
name: {{ include "rtorrent-helm.fullname" . }}
labels:
{{- include "rtorrent-helm.labels" . | nindent 4 }}
stringData:
"wireguard.conf": "{{ .Values.wireguard.config }}"
apiVersion: v1
kind: Service
metadata:
name: {{ include "rtorrent-helm.fullname" . }}
labels:
{{- include "rtorrent-helm.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: 5000
targetPort: xmlrpc
protocol: TCP
name: xmlrpc
selector:
{{- include "rtorrent-helm.selectorLabels" . | nindent 4 }}
replicaCount: 1
image:
repository: k8r.eu/justjanne/rtorrent-docker
pullPolicy: IfNotPresent
tag: ""
imagePullSecrets: [ ]
nameOverride: ""
fullnameOverride: ""
wireguard:
enabled: false
localNetworks: ""
config: |-
[Interface]
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Address = XXX.XXX.XXX.XXX/32,XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/128
DNS = XXX.XXX.XXX.XXX
[Peer]
PublicKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AllowedIPs = XXX.XXX.XXX.XXX/32,XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/128
Endpoint = XXX.XXX.XXX.XXX:XXXXX
securityContext:
capabilities:
add:
- NET_ADMIN
resources:
limits:
cpu: 200m
memory: 100Mi
requests:
cpu: 50m
memory: 10Mi
rtorrent:
externalIpCommand: ""
externalIp: ""
config:
RT_TRACKER_UDP: "yes"
RT_MAX_UP: "100"
RT_MAX_UP_GLOBAL: "250"
RT_MIN_PEERS: "20"
RT_MAX_PEERS: "60"
RT_MIN_PEERS_SEED: "30"
RT_MAX_PEERS_SEED: "80"
RT_TRACKERS_WANT: "80"
RT_MEMORY_MAX: "1800M"
RT_LOGLEVEL: "info"
securityContext:
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
resources:
limits:
cpu: 500m
memory: 2Gi
requests:
cpu: 200m
memory: 500Mi
volumes:
data: |-
emptyDir: {}
session: |-
emptyDir: {}
service:
type: ClusterIP
podAnnotations: { }
podSecurityContext:
fsGroup: 2000
nodeSelector: { }
tolerations: [ ]
affinity: { }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment