Compare commits
16 Commits
sonarr-7.4
...
plex-media
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
459110633a | ||
|
|
5c130e5cbc | ||
|
|
e46d898ee4 | ||
|
|
e67b0cc17b | ||
|
|
b80f372c82 | ||
|
|
eb14f4a479 | ||
|
|
2f9c96082f | ||
|
|
aaec338715 | ||
|
|
f3b9ae9ade | ||
|
|
82d8c5d83f | ||
|
|
a21912cc84 | ||
|
|
ae45a4f962 | ||
|
|
bf1772a44e | ||
|
|
b91e6c69d7 | ||
|
|
846337f619 | ||
|
|
4cfc8fc0db |
@@ -2,7 +2,7 @@ apiVersion: v2
|
||||
name: common
|
||||
description: Function library for k8s-at-home charts
|
||||
type: library
|
||||
version: 1.5.0
|
||||
version: 1.5.1
|
||||
keywords:
|
||||
- k8s-at-home
|
||||
- common
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
{{/*
|
||||
service class: all services should adhere to this
|
||||
*/}}
|
||||
{{- define "common.classes.service" -}}
|
||||
{{- $values := .Values.service -}}
|
||||
{{- if hasKey . "ObjectValues" -}}
|
||||
@@ -9,7 +12,7 @@
|
||||
{{- if hasKey $values "nameSuffix" -}}
|
||||
{{- $serviceName = printf "%v-%v" $serviceName $values.nameSuffix -}}
|
||||
{{ end -}}
|
||||
{{- $svcType := $values.type -}}
|
||||
{{- $svcType := $values.type | default "" -}}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
@@ -58,17 +61,7 @@ spec:
|
||||
{{- if $values.publishNotReadyAddresses }}
|
||||
publishNotReadyAddresses: {{ $values.publishNotReadyAddresses }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- port: {{ $values.port.port }}
|
||||
targetPort: {{ $values.port.targetPort }}
|
||||
protocol: {{ $values.port.protocol }}
|
||||
name: {{ $values.port.name }}
|
||||
{{- if (and (eq $svcType "NodePort") (not (empty $values.port.nodePort))) }}
|
||||
nodePort: {{ $values.port.nodePort }}
|
||||
{{ end }}
|
||||
{{- with $values.additionalPorts }}
|
||||
{{ toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- include "common.classes.service.ports" (dict "svcType" $svcType "values" $values ) | trim | nindent 2 }}
|
||||
selector:
|
||||
{{- include "common.labels.selectorLabels" . | nindent 4 }}
|
||||
{{- end }}
|
||||
|
||||
23
charts/common/templates/classes/_service_ports.tpl
Normal file
23
charts/common/templates/classes/_service_ports.tpl
Normal file
@@ -0,0 +1,23 @@
|
||||
{{/*
|
||||
logic that lists the ports and additionalPorts for a service
|
||||
*/}}
|
||||
{{- define "common.classes.service.ports" -}}
|
||||
{{- $ports := list -}}
|
||||
{{- $values := .values -}}
|
||||
{{- $ports = mustAppend $ports $values.port -}}
|
||||
{{- range $_ := $values.additionalPorts -}}
|
||||
{{- $ports = mustAppend $ports . -}}
|
||||
{{- end }}
|
||||
{{- if $ports -}}
|
||||
ports:
|
||||
{{- range $_ := $ports }}
|
||||
- port: {{ .port }}
|
||||
targetPort: {{ .targetPort | default .name }}
|
||||
protocol: {{ .protocol | default "TCP" }}
|
||||
name: {{ .name }}
|
||||
{{- if (and (eq $.svcType "NodePort") (not (empty .nodePort))) }}
|
||||
nodePort: {{ .nodePort }}
|
||||
{{ end }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
@@ -1,4 +1,6 @@
|
||||
{{- /* The main containter that will be included in the controller */ -}}
|
||||
{{- /*
|
||||
The main containter that will be included in the controller
|
||||
*/ -}}
|
||||
{{- define "common.controller.mainContainer" -}}
|
||||
- name: {{ template "common.names.fullname" . }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||
@@ -14,15 +16,7 @@
|
||||
value: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: {{ .Values.service.port.name }}
|
||||
containerPort: {{ .Values.service.port.port }}
|
||||
protocol: {{ .Values.service.port.protocol }}
|
||||
{{- range $port := .Values.service.additionalPorts }}
|
||||
- name: {{ $port.name }}
|
||||
containerPort: {{ $port.port }}
|
||||
protocol: {{ $port.protocol }}
|
||||
{{- end }}
|
||||
{{- include "common.controller.ports" . | trim | nindent 2 }}
|
||||
volumeMounts:
|
||||
{{- range $index, $PVC := .Values.persistence }}
|
||||
{{- if $PVC.enabled }}
|
||||
|
||||
36
charts/common/templates/lib/controller/_ports.tpl
Normal file
36
charts/common/templates/lib/controller/_ports.tpl
Normal file
@@ -0,0 +1,36 @@
|
||||
{{/*
|
||||
ports included by the controller
|
||||
*/}}
|
||||
{{- define "common.controller.ports" -}}
|
||||
{{- $ports := list -}}
|
||||
{{- with .Values.service -}}
|
||||
{{- $serviceValues := deepCopy . -}}
|
||||
{{/* append the ports for the main service */}}
|
||||
{{- if .enabled -}}
|
||||
{{- $ports = mustAppend $ports .port -}}
|
||||
{{- range $_ := .additionalPorts -}}
|
||||
{{/* append the additonalPorts for the main service */}}
|
||||
{{- $ports = mustAppend $ports . -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{/* append the ports for each additional service */}}
|
||||
{{- range $_ := .additionalServices }}
|
||||
{{- if .enabled -}}
|
||||
{{- $ports = mustAppend $ports .port -}}
|
||||
{{- range $_ := .additionalPorts -}}
|
||||
{{/* append the additonalPorts for each additional service */}}
|
||||
{{- $ports = mustAppend $ports . -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{/* export/render the list of ports */}}
|
||||
{{- if $ports -}}
|
||||
ports:
|
||||
{{- range $_ := $ports }}
|
||||
- name: {{ required "Missing port.name" .name }}
|
||||
containerPort: {{ required "Missing port.port" .port }}
|
||||
protocol: {{ .protocol | default "TCP" }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
@@ -19,5 +19,6 @@
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode
|
||||
# OWNERS file for Kubernetes
|
||||
OWNERS
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
apiVersion: v2
|
||||
appVersion: v3.0.1
|
||||
description: couchpotato is a movie downloading client
|
||||
appVersion: latest
|
||||
description: CouchPotato (CP) is an automatic NZB and torrent downloader.
|
||||
name: couchpotato
|
||||
version: 2.0.1
|
||||
version: 3.0.0
|
||||
keywords:
|
||||
- couchpotato
|
||||
- usenet
|
||||
@@ -13,5 +13,9 @@ sources:
|
||||
- https://hub.docker.com/r/linuxserver/couchpotato/
|
||||
- https://github.com/CouchPotato/CouchPotatoServer/
|
||||
maintainers:
|
||||
- name: skaro13
|
||||
email: simon.caron@protonmail.com
|
||||
- name: billimek
|
||||
email: jeff@billimek.com
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: ^1.5.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# couchpotato movie download client
|
||||
# Couchpotato
|
||||
|
||||
This is a helm chart for [couchpotato](https://github.com/couchpotato/couchpotato/) leveraging the [Linuxserver.io image](https://hub.docker.com/r/linuxserver/couchpotato/)
|
||||
This is a helm chart for [couchpotato](https://github.com/CouchPotato/CouchPotatoServer).
|
||||
|
||||
## TL;DR;
|
||||
|
||||
@@ -28,81 +28,49 @@ helm delete my-release --purge
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following tables lists the configurable parameters of the Sentry chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|----------------------------|-------------------------------------|---------------------------------------------------------|
|
||||
| `image.repository` | Image repository | `linuxserver/couchpotato` |
|
||||
| `image.tag` | Image tag. Possible values listed [here](https://hub.docker.com/r/linuxserver/couchpotato/tags/).| `7260c12f-ls33`|
|
||||
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
|
||||
| `strategyType` | Specifies the strategy used to replace old Pods by new ones | `Recreate` |
|
||||
| `timezone` | Timezone the couchpotato instance should run as, e.g. 'America/New_York' | `UTC` |
|
||||
| `puid` | process userID the couchpotato instance should run as | `1001` |
|
||||
| `pgid` | process groupID the couchpotato instance should run as | `1001` |
|
||||
| `probes.liveness.initialDelaySeconds` | Specify liveness `initialDelaySeconds` parameter for the deployment | `60` |
|
||||
| `probes.liveness.failureThreshold` | Specify liveness `failureThreshold` parameter for the deployment | `5` |
|
||||
| `probes.liveness.timeoutSeconds` | Specify liveness `timeoutSeconds` parameter for the deployment | `10` |
|
||||
| `probes.readiness.initialDelaySeconds` | Specify readiness `initialDelaySeconds` parameter for the deployment | `60` |
|
||||
| `probes.readiness.failureThreshold` | Specify readiness `failureThreshold` parameter for the deployment | `5` |
|
||||
| `probes.readiness.timeoutSeconds` | Specify readiness `timeoutSeconds` parameter for the deployment | `10` |
|
||||
| `Service.type` | Kubernetes service type for the couchpotato GUI | `ClusterIP` |
|
||||
| `Service.port` | Kubernetes port where the couchpotato GUI is exposed| `5050` |
|
||||
| `Service.annotations` | Service annotations for the couchpotato GUI | `{}` |
|
||||
| `Service.labels` | Custom labels | `{}` |
|
||||
| `Service.loadBalancerIP` | Loadbalance IP for the couchpotato GUI | `{}` |
|
||||
| `Service.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | None
|
||||
| `ingress.enabled` | Enables Ingress | `false` |
|
||||
| `ingress.annotations` | Ingress annotations | `{}` |
|
||||
| `ingress.labels` | Custom labels | `{}`
|
||||
| `ingress.path` | Ingress path | `/` |
|
||||
| `ingress.hosts` | Ingress accepted hostnames | `chart-example.local` |
|
||||
| `ingress.tls` | Ingress TLS configuration | `[]` |
|
||||
| `persistence.config.enabled` | Use persistent volume to store configuration data | `true` |
|
||||
| `persistence.config.size` | Size of persistent volume claim | `1Gi` |
|
||||
| `persistence.config.existingClaim`| Use an existing PVC to persist data | `nil` |
|
||||
| `persistence.config.storageClass` | Type of persistent volume claim | `-` |
|
||||
| `persistence.config.accessMode` | Persistence access mode | `ReadWriteOnce` |
|
||||
| `persistence.config.skipuninstall` | Do not delete the pvc upon helm uninstall | `false` |
|
||||
| `persistence.downloads.enabled` | Use persistent volume to store configuration data | `true` |
|
||||
| `persistence.downloads.size` | Size of persistent volume claim | `10Gi` |
|
||||
| `persistence.downloads.existingClaim`| Use an existing PVC to persist data | `nil` |
|
||||
| `persistence.downloads.storageClass` | Type of persistent volume claim | `-` |
|
||||
| `persistence.downloads.accessMode` | Persistence access mode | `ReadWriteOnce` |
|
||||
| `persistence.downloads.skipuninstall` | Do not delete the pvc upon helm uninstall | `false` |
|
||||
| `persistence.movies.enabled` | Use persistent volume to store configuration data | `true` |
|
||||
| `persistence.movies.size` | Size of persistent volume claim | `10Gi` |
|
||||
| `persistence.movies.existingClaim`| Use an existing PVC to persist data | `nil` |
|
||||
| `persistence.movies.storageClass` | Type of persistent volume claim | `-` |
|
||||
| `persistence.movies.accessMode` | Persistence access mode | `ReadWriteOnce` |
|
||||
| `persistence.movies.skipuninstall` | Do not delete the pvc upon helm uninstall | `false` |
|
||||
| `persistence.extraExistingClaimMounts` | Optionally add multiple existing claims | `[]` |
|
||||
| `resources` | CPU/Memory resource requests/limits | `{}` |
|
||||
| `nodeSelector` | Node labels for pod assignment | `{}` |
|
||||
| `tolerations` | Toleration labels for pod assignment | `[]` |
|
||||
| `affinity` | Affinity settings for pod assignment | `{}` |
|
||||
| `podAnnotations` | Key-value pairs to add as pod annotations | `{}` |
|
||||
| `deploymentAnnotations` | Key-value pairs to add as deployment annotations | `{}` |
|
||||
Read through the charts [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/couchpotato/values.yaml)
|
||||
file. It has several commented out suggested values.
|
||||
Additionally you can take a look at the common library [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/common/values.yaml) for more (advanced) configuration options.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
helm install --name my-release \
|
||||
--set timezone="America/New York" \
|
||||
helm install couchpotato \
|
||||
--set env.TZ="America/New_York" \
|
||||
k8s-at-home/couchpotato
|
||||
```
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the
|
||||
chart. For example,
|
||||
```console
|
||||
helm install --name my-release -f values.yaml stable/couchpotato
|
||||
helm install couchpotato k8s-at-home/couchpotato --values values.yaml
|
||||
```
|
||||
|
||||
```yaml
|
||||
image:
|
||||
tag: ...
|
||||
```
|
||||
|
||||
---
|
||||
**NOTE**
|
||||
|
||||
If you get `Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...` it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
If you get
|
||||
```console
|
||||
Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...`
|
||||
```
|
||||
it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
|
||||
---
|
||||
|
||||
Read through the [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/couchpotato/values.yaml) file. It has several commented out suggested values.
|
||||
## Upgrading an existing Release to a new major version
|
||||
|
||||
A major chart version change (like 4.0.1 -> 5.0.0) indicates that there is an incompatible breaking change potentially needing manual actions.
|
||||
|
||||
### Upgrading from 2.x.x to 3.x.x
|
||||
|
||||
Due to migrating to a centralized common library some values in `values.yaml` have changed.
|
||||
|
||||
Examples:
|
||||
|
||||
* `service.port` has been moved to `service.port.port`.
|
||||
* `persistence.type` has been moved to `controllerType`.
|
||||
|
||||
Refer to the library values.yaml for more configuration options.
|
||||
|
||||
2
charts/couchpotato/ci/ct-values.yaml
Normal file
2
charts/couchpotato/ci/ct-values.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
ingress:
|
||||
enabled: true
|
||||
@@ -1,19 +1 @@
|
||||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range .Values.ingress.hosts }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "couchpotato.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get svc -w {{ include "couchpotato.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "couchpotato.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "couchpotato.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||
kubectl port-forward $POD_NAME 8080:5050
|
||||
{{- end }}
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "couchpotato.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 "couchpotato.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 "couchpotato.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
1
charts/couchpotato/templates/common.yaml
Normal file
1
charts/couchpotato/templates/common.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.all" . }}
|
||||
@@ -1,29 +0,0 @@
|
||||
|
||||
{{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "couchpotato.fullname" . }}-config
|
||||
{{- if .Values.persistence.config.skipuninstall }}
|
||||
annotations:
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
helm.sh/chart: {{ include "couchpotato.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.config.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.config.size | quote }}
|
||||
{{- if .Values.persistence.config.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.config.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.config.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -1,122 +0,0 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "couchpotato.fullname" . }}
|
||||
{{- if .Values.deploymentAnnotations }}
|
||||
annotations:
|
||||
{{- range $key, $value := .Values.deploymentAnnotations }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
helm.sh/chart: {{ include "couchpotato.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 3
|
||||
strategy:
|
||||
type: {{ .Values.strategyType }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- if .Values.podAnnotations }}
|
||||
annotations:
|
||||
{{- range $key, $value := .Values.podAnnotations }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 5050
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: http
|
||||
initialDelaySeconds: {{ .Values.probes.liveness.initialDelaySeconds }}
|
||||
failureThreshold: {{ .Values.probes.liveness.failureThreshold }}
|
||||
timeoutSeconds: {{ .Values.probes.liveness.timeoutSeconds }}
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: http
|
||||
initialDelaySeconds: {{ .Values.probes.readiness.initialDelaySeconds }}
|
||||
failureThreshold: {{ .Values.probes.readiness.failureThreshold }}
|
||||
timeoutSeconds: {{ .Values.probes.readiness.timeoutSeconds }}
|
||||
env:
|
||||
- name: TZ
|
||||
value: "{{ .Values.timezone }}"
|
||||
- name: PUID
|
||||
value: "{{ .Values.puid }}"
|
||||
- name: PGID
|
||||
value: "{{ .Values.pgid }}"
|
||||
volumeMounts:
|
||||
- mountPath: /config
|
||||
name: config
|
||||
- mountPath: /downloads
|
||||
name: downloads
|
||||
{{- if .Values.persistence.downloads.subPath }}
|
||||
subPath: {{ .Values.persistence.downloads.subPath }}
|
||||
{{- end }}
|
||||
- mountPath: /movies
|
||||
name: movies
|
||||
{{- if .Values.persistence.movies.subPath }}
|
||||
subPath: {{ .Values.persistence.movies.subPath }}
|
||||
{{- end }}
|
||||
{{- range .Values.persistence.extraExistingClaimMounts }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .mountPath }}
|
||||
readOnly: {{ .readOnly }}
|
||||
{{- end }}
|
||||
resources:
|
||||
{{ toYaml .Values.resources | indent 12 }}
|
||||
volumes:
|
||||
- name: config
|
||||
{{- if .Values.persistence.config.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.persistence.config.existingClaim }}{{ .Values.persistence.config.existingClaim }}{{- else }}{{ template "couchpotato.fullname" . }}-config{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
- name: downloads
|
||||
{{- if .Values.persistence.downloads.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.persistence.downloads.existingClaim }}{{ .Values.persistence.downloads.existingClaim }}{{- else }}{{ template "couchpotato.fullname" . }}-downloads{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
- name: movies
|
||||
{{- if .Values.persistence.movies.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.persistence.movies.existingClaim }}{{ .Values.persistence.movies.existingClaim }}{{- else }}{{ template "couchpotato.fullname" . }}-movies{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
{{- range .Values.persistence.extraExistingClaimMounts }}
|
||||
- name: {{ .name }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .existingClaim }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
@@ -1,29 +0,0 @@
|
||||
|
||||
{{- if and .Values.persistence.downloads.enabled (not .Values.persistence.downloads.existingClaim) }}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "couchpotato.fullname" . }}-downloads
|
||||
{{- if .Values.persistence.downloads.skipuninstall }}
|
||||
annotations:
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
helm.sh/chart: {{ include "couchpotato.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.downloads.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.downloads.size | quote }}
|
||||
{{- if .Values.persistence.downloads.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.downloads.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.downloads.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -1,41 +0,0 @@
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
{{- $fullName := include "couchpotato.fullname" . -}}
|
||||
{{- $ingressPath := .Values.ingress.path -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
helm.sh/chart: {{ include "couchpotato.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- with .Values.ingress.labels -}}
|
||||
{{ toYaml . | nindent 4 }}
|
||||
{{- end -}}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{ toYaml . | indent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- range .Values.ingress.tls }}
|
||||
- hosts:
|
||||
{{- range .hosts }}
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
secretName: {{ .secretName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ . | quote }}
|
||||
http:
|
||||
paths:
|
||||
- path: {{ $ingressPath }}
|
||||
backend:
|
||||
serviceName: {{ $fullName }}
|
||||
servicePort: http
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -1,29 +0,0 @@
|
||||
|
||||
{{- if and .Values.persistence.movies.enabled (not .Values.persistence.movies.existingClaim) }}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "couchpotato.fullname" . }}-movies
|
||||
{{- if .Values.persistence.movies.skipuninstall }}
|
||||
annotations:
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
helm.sh/chart: {{ include "couchpotato.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.movies.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.movies.size | quote }}
|
||||
{{- if .Values.persistence.movies.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.movies.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.movies.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -1,52 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "couchpotato.fullname" . }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
helm.sh/chart: {{ include "couchpotato.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- if .Values.service.labels }}
|
||||
{{ toYaml .Values.service.labels | indent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.service.annotations }}
|
||||
annotations:
|
||||
{{ toYaml . | indent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }}
|
||||
type: ClusterIP
|
||||
{{- if .Values.service.clusterIP }}
|
||||
clusterIP: {{ .Values.service.clusterIP }}
|
||||
{{end}}
|
||||
{{- else if eq .Values.service.type "LoadBalancer" }}
|
||||
type: {{ .Values.service.type }}
|
||||
{{- if .Values.service.loadBalancerIP }}
|
||||
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.loadBalancerSourceRanges }}
|
||||
loadBalancerSourceRanges:
|
||||
{{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }}
|
||||
{{- end -}}
|
||||
{{- else }}
|
||||
type: {{ .Values.service.type }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.externalIPs }}
|
||||
externalIPs:
|
||||
{{ toYaml .Values.service.externalIPs | indent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.externalTrafficPolicy }}
|
||||
externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
targetPort: http
|
||||
{{ if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }}
|
||||
nodePort: {{.Values.service.nodePort}}
|
||||
{{ end }}
|
||||
selector:
|
||||
app.kubernetes.io/name: {{ include "couchpotato.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
@@ -1,151 +1,40 @@
|
||||
# Default values for couchpotato.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
# Default values for Couchpotato.
|
||||
|
||||
image:
|
||||
repository: linuxserver/couchpotato
|
||||
tag: 7260c12f-ls42
|
||||
pullPolicy: IfNotPresent
|
||||
pullPolicy: Always
|
||||
tag: latest
|
||||
|
||||
# upgrade strategy type (e.g. Recreate or RollingUpdate)
|
||||
strategyType: Recreate
|
||||
|
||||
# Probes configuration
|
||||
probes:
|
||||
liveness:
|
||||
initialDelaySeconds: 60
|
||||
failureThreshold: 5
|
||||
timeoutSeconds: 10
|
||||
readiness:
|
||||
initialDelaySeconds: 60
|
||||
failureThreshold: 5
|
||||
timeoutSeconds: 10
|
||||
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
||||
timezone: UTC
|
||||
puid: 1001
|
||||
pgid: 1001
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port:
|
||||
port: 5050
|
||||
## Specify the nodePort value for the LoadBalancer and NodePort service types.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
|
||||
##
|
||||
# nodePort:
|
||||
## Provide any additional annotations which may be required. This can be used to
|
||||
## set the LoadBalancer service type to internal only.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer
|
||||
##
|
||||
annotations: {}
|
||||
labels: {}
|
||||
## Use loadBalancerIP to request a specific static IP,
|
||||
## otherwise leave blank
|
||||
##
|
||||
loadBalancerIP:
|
||||
# loadBalancerSourceRanges: []
|
||||
## Set the externalTrafficPolicy in the Service to either Cluster or Local
|
||||
# externalTrafficPolicy: Cluster
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
labels: {}
|
||||
path: /
|
||||
hosts:
|
||||
- chart-example.local
|
||||
tls: []
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - chart-example.local
|
||||
env: {}
|
||||
# TZ: UTC
|
||||
# PUID: 1001
|
||||
# PGID: 1001
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
## couchpotato configuration data Persistent Volume Storage Class
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
|
||||
media:
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
mountPath: /media
|
||||
## Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
##
|
||||
## If you want to reuse an existing claim, you can pass the name of the PVC using
|
||||
## the existingClaim variable
|
||||
# existingClaim: your-claim
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
# accessMode: ReadWriteOnce
|
||||
# size: 1Gi
|
||||
## Do not delete the pvc upon helm uninstall
|
||||
skipuninstall: false
|
||||
downloads:
|
||||
enabled: true
|
||||
## couchpotato downloads volume configuration
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
##
|
||||
## If you want to reuse an existing claim, you can pass the name of the PVC using
|
||||
## the existingClaim variable
|
||||
# existingClaim: your-claim
|
||||
# subPath: some-subpath
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Gi
|
||||
## Do not delete the pvc upon helm uninstall
|
||||
skipuninstall: false
|
||||
movies:
|
||||
enabled: true
|
||||
## Directory where movies are persisted
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
##
|
||||
## If you want to reuse an existing claim, you can pass the name of the PVC using
|
||||
## the existingClaim variable
|
||||
# existingClaim: your-claim
|
||||
# subPath: some-subpath
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Gi
|
||||
## Do not delete the pvc upon helm uninstall
|
||||
skipuninstall: false
|
||||
extraExistingClaimMounts: []
|
||||
# - name: external-mount
|
||||
# mountPath: /srv/external-mount
|
||||
## A manually managed Persistent Volume and Claim
|
||||
## If defined, PVC must be created manually before volume will be bound
|
||||
# existingClaim:
|
||||
# readOnly: true
|
||||
|
||||
resources: {}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
||||
podAnnotations: {}
|
||||
|
||||
deploymentAnnotations: {}
|
||||
# skipuninstall: false
|
||||
# existingClaim: ""
|
||||
|
||||
24
charts/ddclient/.helmignore
Normal file
24
charts/ddclient/.helmignore
Normal file
@@ -0,0 +1,24 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
# OWNERS file for Kubernetes
|
||||
OWNERS
|
||||
20
charts/ddclient/Chart.yaml
Normal file
20
charts/ddclient/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
apiVersion: v2
|
||||
appVersion: 3.9.1
|
||||
description: Perl client used to update dynamic DNS entries for accounts on Dynamic DNS Network Service Providers
|
||||
name: ddclient
|
||||
version: 1.0.0
|
||||
keywords:
|
||||
- ddclient
|
||||
- dns
|
||||
home: https://github.com/ddclient/ddclient
|
||||
icon: https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/ddclient-logo.png
|
||||
sources:
|
||||
- https://github.com/ddclient/ddclient
|
||||
- https://hub.docker.com/r/linuxserver/ddclient
|
||||
maintainers:
|
||||
- name: billimek
|
||||
email: jeff@billimek.com
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: ^1.5.1
|
||||
4
charts/ddclient/OWNERS
Normal file
4
charts/ddclient/OWNERS
Normal file
@@ -0,0 +1,4 @@
|
||||
approvers:
|
||||
- billimek
|
||||
reviewers:
|
||||
- billimek
|
||||
59
charts/ddclient/README.md
Normal file
59
charts/ddclient/README.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# ddclient
|
||||
|
||||
This is a helm chart for [ddclient](https://github.com/ddclient/ddclient).
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```shell
|
||||
$ helm repo add k8s-at-home https://k8s-at-home.com/charts/
|
||||
$ helm install k8s-at-home/ddclient
|
||||
```
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
helm install --name my-release k8s-at-home/ddclient
|
||||
```
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
helm delete my-release --purge
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
Read through the charts [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/ddclient/values.yaml)
|
||||
file. It has several commented out suggested values.
|
||||
Additionally you can take a look at the common library [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/common/values.yaml) for more (advanced) configuration options.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
```console
|
||||
helm install ddclient \
|
||||
--set env.TZ="America/New_York" \
|
||||
k8s-at-home/ddclient
|
||||
```
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the
|
||||
chart. For example,
|
||||
```console
|
||||
helm install ddclient k8s-at-home/ddclient --values values.yaml
|
||||
```
|
||||
|
||||
```yaml
|
||||
image:
|
||||
tag: ...
|
||||
```
|
||||
|
||||
---
|
||||
**NOTE**
|
||||
|
||||
If you get
|
||||
```console
|
||||
Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...`
|
||||
```
|
||||
it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
7
charts/ddclient/ci/ct-values.yaml
Normal file
7
charts/ddclient/ci/ct-values.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
service:
|
||||
enabled: false
|
||||
probes:
|
||||
liveness:
|
||||
enabled: false
|
||||
readiness:
|
||||
enabled: false
|
||||
1
charts/ddclient/templates/NOTES.txt
Normal file
1
charts/ddclient/templates/NOTES.txt
Normal file
@@ -0,0 +1 @@
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
31
charts/ddclient/templates/common.yaml
Normal file
31
charts/ddclient/templates/common.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
{{/* Make sure all variables are set properly */}}
|
||||
{{- include "common.values.setup" . }}
|
||||
|
||||
{{/* Append the configMap to the additionalVolumes */}}
|
||||
{{- define "ddclient.configmap.volume" -}}
|
||||
name: ddclient-settings
|
||||
configMap:
|
||||
name: {{ template "common.names.fullname" . }}-settings
|
||||
{{- end -}}
|
||||
|
||||
{{- $volume := include "ddclient.configmap.volume" . | fromYaml -}}
|
||||
{{- if $volume -}}
|
||||
{{- $additionalVolumes := append .Values.additionalVolumes $volume }}
|
||||
{{- $_ := set .Values "additionalVolumes" (deepCopy $additionalVolumes) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Append the configMap volume to the additionalVolumeMounts */}}
|
||||
{{- define "ddclient.configmap.volumeMount" -}}
|
||||
name: ddclient-settings
|
||||
mountPath: /defaults/ddclient.conf
|
||||
subPath: ddclient.conf
|
||||
{{- end -}}
|
||||
|
||||
{{- $volumeMount := include "ddclient.configmap.volumeMount" . | fromYaml -}}
|
||||
{{- if $volumeMount -}}
|
||||
{{- $additionalVolumeMounts := append .Values.additionalVolumeMounts $volumeMount }}
|
||||
{{- $_ := set .Values "additionalVolumeMounts" (deepCopy $additionalVolumeMounts) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Render the templates */}}
|
||||
{{ include "common.all" . }}
|
||||
9
charts/ddclient/templates/configmap.yaml
Normal file
9
charts/ddclient/templates/configmap.yaml
Normal file
@@ -0,0 +1,9 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ template "common.names.fullname" . }}-settings
|
||||
labels:
|
||||
{{- include "common.labels" . | nindent 4 }}
|
||||
data:
|
||||
ddclient.conf: |
|
||||
{{ .Values.config | indent 4 }}
|
||||
37
charts/ddclient/values.yaml
Normal file
37
charts/ddclient/values.yaml
Normal file
@@ -0,0 +1,37 @@
|
||||
# Default values for ddclient.
|
||||
|
||||
image:
|
||||
repository: linuxserver/ddclient
|
||||
pullPolicy: IfNotPresent
|
||||
tag: version-v3.9.1
|
||||
|
||||
env: {}
|
||||
# TZ:
|
||||
# PUID:
|
||||
# PGID:
|
||||
|
||||
service:
|
||||
enabled: false
|
||||
|
||||
probes:
|
||||
liveness:
|
||||
enabled: false
|
||||
readiness:
|
||||
enabled: false
|
||||
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
config: |
|
||||
# This is the configuration for ddclient
|
||||
# Inorder for it to function you need to set it up
|
||||
# e.g. this is the config for Cloudflare
|
||||
use=web
|
||||
web=dynamicdns.park-your-domain.com/getip
|
||||
protocol=cloudflare
|
||||
ssl=yes
|
||||
ttl=1
|
||||
login=${CF_EMAIL}
|
||||
password=${CF_GLOBAL_APIKEY}
|
||||
zone=${DOMAIN}.${TLD}
|
||||
${DOMAIN}.${TLD}
|
||||
@@ -1,7 +1,7 @@
|
||||
apiVersion: v2
|
||||
name: deconz
|
||||
description: A Helm chart for deploying deCONZ
|
||||
version: 2.0.0
|
||||
version: 2.0.1
|
||||
appVersion: 2.05.80
|
||||
keywords:
|
||||
- deconz
|
||||
|
||||
@@ -79,6 +79,7 @@ Read through the [values.yaml](https://github.com/k8s-at-home/charts/blob/master
|
||||
| `persistence.existingClaim` | Use an existing PVC to persist data | `nil` |
|
||||
| `persistence.accessMode` | Persistence access mode | `ReadWriteOnce` |
|
||||
| `persistence.size` | Size of persistent volume claim | `1Gi` |
|
||||
| `persistence.subPath` | Mount a sub dir of the persistent volume | `nil` |
|
||||
| `extraVolumes` | Optionally add additional Volumes | `[]` |
|
||||
| `resources` | CPU/Memory resource requests/limits | `{}` |
|
||||
| `nodeSelector` | Node labels for pod assignment | `{}` |
|
||||
|
||||
@@ -77,6 +77,9 @@ spec:
|
||||
{{- end }}
|
||||
- name: config
|
||||
mountPath: /root/.local/share/dresden-elektronik/deCONZ
|
||||
{{- if .Values.persistence.subPath }}
|
||||
subPath: {{ .Values.persistence.subPath }}
|
||||
{{- end }}
|
||||
{{- include "deconz.extraVolumeMounts" . | nindent 12 }}
|
||||
{{- if .Values.probes.liveness.enabled }}
|
||||
livenessProbe:
|
||||
|
||||
@@ -79,6 +79,8 @@ persistence:
|
||||
# existingClaim: deconz-data
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
## When mounting the data volume you may specify a subPath
|
||||
# subPath: /configs/deconz
|
||||
|
||||
# Any extra volumes to define for the pod
|
||||
# Volumes will be mounted to the folder specified under mountPath
|
||||
|
||||
@@ -2,7 +2,7 @@ apiVersion: v2
|
||||
appVersion: 0.116.1
|
||||
description: Home Assistant
|
||||
name: home-assistant
|
||||
version: 2.6.0
|
||||
version: 2.7.0
|
||||
keywords:
|
||||
- home-assistant
|
||||
- hass
|
||||
|
||||
@@ -68,6 +68,7 @@ The following tables lists the configurable parameters of the Home Assistant cha
|
||||
| `service.publishNotReadyAddresses` | Set to true if the editors (vscode or configurator) should be reachable when home assistant does not run | `false` |
|
||||
| `service.externalTrafficPolicy` | Loadbalancer externalTrafficPolicy | `` |
|
||||
| `hostNetwork` | Enable hostNetwork - might be needed for discovery to work | `false` |
|
||||
| `hostAliases` | Define custom entries in /etc/hosts | `[]` |
|
||||
| `service.nodePort` | nodePort to listen on for the home-assistant GUI | `` |
|
||||
| `ingress.enabled` | Enables Ingress | `false` |
|
||||
| `ingress.annotations` | Ingress annotations | `{}` |
|
||||
|
||||
@@ -37,6 +37,10 @@ spec:
|
||||
{{- if .Values.hostNetwork }}
|
||||
hostNetwork: {{ .Values.hostNetwork }}
|
||||
dnsPolicy: ClusterFirstWithHostNet
|
||||
{{- end }}
|
||||
{{- if .Values.hostAliases }}
|
||||
hostAliases:
|
||||
{{ toYaml .Values.hostAliases | indent 8 }}
|
||||
{{- end }}
|
||||
initContainers:
|
||||
{{- if .Values.git.enabled }}
|
||||
|
||||
@@ -65,6 +65,14 @@ ingress:
|
||||
|
||||
hostNetwork: false
|
||||
|
||||
hostAliases: []
|
||||
# Use hostAliases to add custom entries to /etc/hosts - mapping IP addresses to hostnames.
|
||||
# ref: https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
|
||||
# - ip: "192.168.1.100"
|
||||
# hostnames:
|
||||
# - "example.com"
|
||||
# - "www.example.com"
|
||||
|
||||
persistence:
|
||||
enabled: true
|
||||
## home-assistant data Persistent Volume Storage Class
|
||||
|
||||
24
charts/jellyfin/.helmignore
Normal file
24
charts/jellyfin/.helmignore
Normal file
@@ -0,0 +1,24 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
# OWNERS file for Kubernetes
|
||||
OWNERS
|
||||
@@ -1,16 +1,21 @@
|
||||
apiVersion: v2
|
||||
appVersion: 10.6.3
|
||||
appVersion: 10.6.4
|
||||
description: Jellyfin is a Free Software Media System
|
||||
name: jellyfin
|
||||
version: 2.0.1
|
||||
version: 3.0.0
|
||||
keywords:
|
||||
- Jellyfin
|
||||
- mediaplayer
|
||||
- jellyfin
|
||||
- plex
|
||||
- emby
|
||||
home: https://github.com/k8s-at-home/charts/tree/master/charts/Jellyfin
|
||||
icon: https://github.com/jellyfin/jellyfin-ux/blob/master/branding/SVG/icon-solid-black.svg
|
||||
sources:
|
||||
- https://hub.docker.com/r/linuxserver/Jellyfin/
|
||||
- https://github.com/Jellyfin/Jellyfin
|
||||
- https://github.com/jellyfin/jellyfin
|
||||
maintainers:
|
||||
- name: skaro13
|
||||
email: simon.caron@protonmail.com
|
||||
- name: billimek
|
||||
email: jeff@billimek.com
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: ^1.5.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Jellyfin Media Player
|
||||
# Jellyfin
|
||||
|
||||
This is a helm chart for [Jellyfin](https://github.com/jellyfin/jellyfin) leveraging the [Linuxserver.io image](https://hub.docker.com/r/linuxserver/jellyfin/)
|
||||
This is a helm chart for [Jellyfin](https://github.com/jellyfin/jellyfin).
|
||||
|
||||
## TL;DR;
|
||||
|
||||
@@ -28,82 +28,50 @@ helm delete my-release --purge
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following tables lists the configurable parameters of the Sentry chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|----------------------------|-------------------------------------|---------------------------------------------------------|
|
||||
| `image.repository` | Image repository | `linuxserver/jellyfin` |
|
||||
| `image.tag` | Image tag. Possible values listed [here](https://hub.docker.com/r/linuxserver/jellyfin/tags/).| `v10.5.3-ls45`|
|
||||
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
|
||||
| `strategyType` | Specifies the strategy used to replace old Pods by new ones | `Recreate` |
|
||||
| `timezone` | Timezone the jellyfin instance should run as, e.g. 'America/New_York' | `UTC` |
|
||||
| `puid` | process userID the jellyfin instance should run as | `1001` |
|
||||
| `pgid` | process groupID the jellyfin instance should run as | `1001` |
|
||||
| `umaskSet` | for umask setting of Jellyfin | `022` |
|
||||
| `probes.liveness.initialDelaySeconds` | Specify liveness `initialDelaySeconds` parameter for the deployment | `60` |
|
||||
| `probes.liveness.failureThreshold` | Specify liveness `failureThreshold` parameter for the deployment | `5` |
|
||||
| `probes.liveness.timeoutSeconds` | Specify liveness `timeoutSeconds` parameter for the deployment | `10` |
|
||||
| `probes.readiness.initialDelaySeconds` | Specify readiness `initialDelaySeconds` parameter for the deployment | `60` |
|
||||
| `probes.readiness.failureThreshold` | Specify readiness `failureThreshold` parameter for the deployment | `5` |
|
||||
| `probes.readiness.timeoutSeconds` | Specify readiness `timeoutSeconds` parameter for the deployment | `10` |
|
||||
| `Service.type` | Kubernetes service type for the jellyfin GUI | `ClusterIP` |
|
||||
| `Service.port` | Kubernetes port where the jellyfin GUI is exposed| `8096` |
|
||||
| `Service.annotations` | Service annotations for the jellyfin GUI | `{}` |
|
||||
| `Service.labels` | Custom labels | `{}` |
|
||||
| `Service.loadBalancerIP` | Loadbalance IP for the jellyfin GUI | `{}` |
|
||||
| `Service.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | None
|
||||
| `ingress.enabled` | Enables Ingress | `false` |
|
||||
| `ingress.annotations` | Ingress annotations | `{}` |
|
||||
| `ingress.labels` | Custom labels | `{}`
|
||||
| `ingress.path` | Ingress path | `/` |
|
||||
| `ingress.hosts` | Ingress accepted hostnames | `chart-example.local` |
|
||||
| `ingress.tls` | Ingress TLS configuration | `[]` |
|
||||
| `persistence.config.enabled` | Use persistent volume to store configuration data | `true` |
|
||||
| `persistence.config.size` | Size of persistent volume claim | `1Gi` |
|
||||
| `persistence.config.existingClaim`| Use an existing PVC to persist data | `nil` |
|
||||
| `persistence.config.storageClass` | Type of persistent volume claim | `-` |
|
||||
| `persistence.config.accessMode` | Persistence access mode | `ReadWriteOnce` |
|
||||
| `persistence.config.skipuninstall` | Do not delete the pvc upon helm uninstall | `false` |
|
||||
| `persistence.tvshows.enabled` | Use persistent volume to store tvshows data | `true` |
|
||||
| `persistence.tvshows.size` | Size of persistent volume claim | `10Gi` |
|
||||
| `persistence.tvshows.existingClaim`| Use an existing PVC to persist data | `nil` |
|
||||
| `persistence.tvshows.storageClass` | Type of persistent volume claim | `-` |
|
||||
| `persistence.tvshows.accessMode` | Persistence access mode | `ReadWriteOnce` |
|
||||
| `persistence.tvshows.skipuninstall` | Do not delete the pvc upon helm uninstall | `false` |
|
||||
| `persistence.movies.enabled` | Use persistent volume to store movies data | `true` |
|
||||
| `persistence.movies.size` | Size of persistent volume claim | `10Gi` |
|
||||
| `persistence.movies.existingClaim`| Use an existing PVC to persist data | `nil` |
|
||||
| `persistence.movies.storageClass` | Type of persistent volume claim | `-` |
|
||||
| `persistence.movies.accessMode` | Persistence access mode | `ReadWriteOnce` |
|
||||
| `persistence.movies.skipuninstall` | Do not delete the pvc upon helm uninstall | `false` |
|
||||
| `persistence.extraExistingClaimMounts` | Optionally add multiple existing claims | `[]` |
|
||||
| `resources` | CPU/Memory resource requests/limits | `{}` |
|
||||
| `nodeSelector` | Node labels for pod assignment | `{}` |
|
||||
| `tolerations` | Toleration labels for pod assignment | `[]` |
|
||||
| `affinity` | Affinity settings for pod assignment | `{}` |
|
||||
| `podAnnotations` | Key-value pairs to add as pod annotations | `{}` |
|
||||
| `deploymentAnnotations` | Key-value pairs to add as deployment annotations | `{}` |
|
||||
Read through the charts [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/jellyfin/values.yaml)
|
||||
file. It has several commented out suggested values.
|
||||
Additionally you can take a look at the common library [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/common/values.yaml) for more (advanced) configuration options.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
helm install --name my-release \
|
||||
--set timezone="America/New York" \
|
||||
helm install jellyfin \
|
||||
--set env.TZ="America/New_York" \
|
||||
k8s-at-home/jellyfin
|
||||
```
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the
|
||||
chart. For example,
|
||||
```console
|
||||
helm install --name my-release -f values.yaml stable/jellyfin
|
||||
helm install jellyfin k8s-at-home/jellyfin --values values.yaml
|
||||
```
|
||||
|
||||
These values will be nested as it is a dependency, for example
|
||||
```yaml
|
||||
image:
|
||||
tag: ...
|
||||
```
|
||||
|
||||
---
|
||||
**NOTE**
|
||||
|
||||
If you get `Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...` it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
If you get
|
||||
```console
|
||||
Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...`
|
||||
```
|
||||
it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
|
||||
---
|
||||
|
||||
Read through the [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/jellyfin/values.yaml) file. It has several commented out suggested values.
|
||||
## Upgrading an existing Release to a new major version
|
||||
|
||||
A major chart version change (like 4.0.1 -> 5.0.0) indicates that there is an incompatible breaking change potentially needing manual actions.
|
||||
|
||||
### Upgrading from 2.x.x to 3.x.x
|
||||
|
||||
Due to migrating to a centralized common library some values in `values.yaml` have changed.
|
||||
|
||||
Examples:
|
||||
|
||||
* `service.port` has been moved to `service.port.port`.
|
||||
* `persistence.type` has been moved to `controllerType`.
|
||||
|
||||
Refer to the library values.yaml for more configuration options.
|
||||
|
||||
2
charts/jellyfin/ci/ct-values.yaml
Normal file
2
charts/jellyfin/ci/ct-values.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
ingress:
|
||||
enabled: true
|
||||
@@ -1,19 +1 @@
|
||||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range .Values.ingress.hosts }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "jellyfin.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get svc -w {{ include "jellyfin.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "jellyfin.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "jellyfin.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:8080 to use your application"
|
||||
kubectl port-forward $POD_NAME 8080:8096
|
||||
{{- end }}
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "jellyfin.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 "jellyfin.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 "jellyfin.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
1
charts/jellyfin/templates/common.yaml
Normal file
1
charts/jellyfin/templates/common.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.all" . }}
|
||||
@@ -1,29 +0,0 @@
|
||||
|
||||
{{- if and .Values.persistence.config.enabled (not .Values.persistence.config.existingClaim) }}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "jellyfin.fullname" . }}-config
|
||||
{{- if .Values.persistence.config.skipuninstall }}
|
||||
annotations:
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
helm.sh/chart: {{ include "jellyfin.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.config.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.config.size | quote }}
|
||||
{{- if .Values.persistence.config.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.config.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.config.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -1,124 +0,0 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "jellyfin.fullname" . }}
|
||||
{{- if .Values.deploymentAnnotations }}
|
||||
annotations:
|
||||
{{- range $key, $value := .Values.deploymentAnnotations }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
helm.sh/chart: {{ include "jellyfin.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 3
|
||||
strategy:
|
||||
type: {{ .Values.strategyType }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- if .Values.podAnnotations }}
|
||||
annotations:
|
||||
{{- range $key, $value := .Values.podAnnotations }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8096
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: http
|
||||
initialDelaySeconds: {{ .Values.probes.liveness.initialDelaySeconds }}
|
||||
failureThreshold: {{ .Values.probes.liveness.failureThreshold }}
|
||||
timeoutSeconds: {{ .Values.probes.liveness.timeoutSeconds }}
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: http
|
||||
initialDelaySeconds: {{ .Values.probes.readiness.initialDelaySeconds }}
|
||||
failureThreshold: {{ .Values.probes.readiness.failureThreshold }}
|
||||
timeoutSeconds: {{ .Values.probes.readiness.timeoutSeconds }}
|
||||
env:
|
||||
- name: TZ
|
||||
value: "{{ .Values.timezone }}"
|
||||
- name: PUID
|
||||
value: "{{ .Values.puid }}"
|
||||
- name: PGID
|
||||
value: "{{ .Values.pgid }}"
|
||||
- name: UMASK_SET
|
||||
value: "{{ .Values.umaskSet }}"
|
||||
volumeMounts:
|
||||
- mountPath: /config
|
||||
name: config
|
||||
- mountPath: /data/tvshows
|
||||
name: tvshows
|
||||
{{- if .Values.persistence.tvshows.subPath }}
|
||||
subPath: {{ .Values.persistence.tvshows.subPath }}
|
||||
{{- end }}
|
||||
- mountPath: /data/movies
|
||||
name: movies
|
||||
{{- if .Values.persistence.movies.subPath }}
|
||||
subPath: {{ .Values.persistence.movies.subPath }}
|
||||
{{- end }}
|
||||
{{- range .Values.persistence.extraExistingClaimMounts }}
|
||||
- name: {{ .name }}
|
||||
mountPath: {{ .mountPath }}
|
||||
readOnly: {{ .readOnly }}
|
||||
{{- end }}
|
||||
resources:
|
||||
{{ toYaml .Values.resources | indent 12 }}
|
||||
volumes:
|
||||
- name: config
|
||||
{{- if .Values.persistence.config.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.persistence.config.existingClaim }}{{ .Values.persistence.config.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-config{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
- name: tvshows
|
||||
{{- if .Values.persistence.tvshows.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.persistence.tvshows.existingClaim }}{{ .Values.persistence.tvshows.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-tvshows{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
- name: movies
|
||||
{{- if .Values.persistence.movies.enabled }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ if .Values.persistence.movies.existingClaim }}{{ .Values.persistence.movies.existingClaim }}{{- else }}{{ template "jellyfin.fullname" . }}-movies{{- end }}
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{- end }}
|
||||
{{- range .Values.persistence.extraExistingClaimMounts }}
|
||||
- name: {{ .name }}
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .existingClaim }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{ toYaml . | indent 8 }}
|
||||
{{- end }}
|
||||
@@ -1,41 +0,0 @@
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
{{- $fullName := include "jellyfin.fullname" . -}}
|
||||
{{- $ingressPath := .Values.ingress.path -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
helm.sh/chart: {{ include "jellyfin.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- with .Values.ingress.labels -}}
|
||||
{{ toYaml . | nindent 4 }}
|
||||
{{- end -}}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{ toYaml . | indent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- range .Values.ingress.tls }}
|
||||
- hosts:
|
||||
{{- range .hosts }}
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
secretName: {{ .secretName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ . | quote }}
|
||||
http:
|
||||
paths:
|
||||
- path: {{ $ingressPath }}
|
||||
backend:
|
||||
serviceName: {{ $fullName }}
|
||||
servicePort: http
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -1,29 +0,0 @@
|
||||
|
||||
{{- if and .Values.persistence.movies.enabled (not .Values.persistence.movies.existingClaim) }}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "jellyfin.fullname" . }}-movies
|
||||
{{- if .Values.persistence.movies.skipuninstall }}
|
||||
annotations:
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
helm.sh/chart: {{ include "jellyfin.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.movies.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.movies.size | quote }}
|
||||
{{- if .Values.persistence.movies.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.movies.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.movies.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -1,52 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "jellyfin.fullname" . }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
helm.sh/chart: {{ include "jellyfin.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- if .Values.service.labels }}
|
||||
{{ toYaml .Values.service.labels | indent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.service.annotations }}
|
||||
annotations:
|
||||
{{ toYaml . | indent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }}
|
||||
type: ClusterIP
|
||||
{{- if .Values.service.clusterIP }}
|
||||
clusterIP: {{ .Values.service.clusterIP }}
|
||||
{{end}}
|
||||
{{- else if eq .Values.service.type "LoadBalancer" }}
|
||||
type: {{ .Values.service.type }}
|
||||
{{- if .Values.service.loadBalancerIP }}
|
||||
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.loadBalancerSourceRanges }}
|
||||
loadBalancerSourceRanges:
|
||||
{{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }}
|
||||
{{- end -}}
|
||||
{{- else }}
|
||||
type: {{ .Values.service.type }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.externalIPs }}
|
||||
externalIPs:
|
||||
{{ toYaml .Values.service.externalIPs | indent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.externalTrafficPolicy }}
|
||||
externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
targetPort: http
|
||||
{{ if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }}
|
||||
nodePort: {{.Values.service.nodePort}}
|
||||
{{ end }}
|
||||
selector:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
@@ -1,29 +0,0 @@
|
||||
|
||||
{{- if and .Values.persistence.tvshows.enabled (not .Values.persistence.tvshows.existingClaim) }}
|
||||
kind: PersistentVolumeClaim
|
||||
apiVersion: v1
|
||||
metadata:
|
||||
name: {{ template "jellyfin.fullname" . }}-tvshows
|
||||
{{- if .Values.persistence.tvshows.skipuninstall }}
|
||||
annotations:
|
||||
"helm.sh/resource-policy": keep
|
||||
{{- end }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "jellyfin.name" . }}
|
||||
helm.sh/chart: {{ include "jellyfin.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
spec:
|
||||
accessModes:
|
||||
- {{ .Values.persistence.tvshows.accessMode | quote }}
|
||||
resources:
|
||||
requests:
|
||||
storage: {{ .Values.persistence.tvshows.size | quote }}
|
||||
{{- if .Values.persistence.tvshows.storageClass }}
|
||||
{{- if (eq "-" .Values.persistence.tvshows.storageClass) }}
|
||||
storageClassName: ""
|
||||
{{- else }}
|
||||
storageClassName: "{{ .Values.persistence.tvshows.storageClass }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
@@ -1,152 +1,35 @@
|
||||
# Default values for jellyfin.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
|
||||
image:
|
||||
repository: linuxserver/jellyfin
|
||||
tag: 10.6.3-1-ls70
|
||||
pullPolicy: IfNotPresent
|
||||
tag: version-10.6.4-1
|
||||
|
||||
# upgrade strategy type (e.g. Recreate or RollingUpdate)
|
||||
strategyType: Recreate
|
||||
|
||||
# Probes configuration
|
||||
probes:
|
||||
liveness:
|
||||
initialDelaySeconds: 60
|
||||
failureThreshold: 5
|
||||
timeoutSeconds: 10
|
||||
readiness:
|
||||
initialDelaySeconds: 60
|
||||
failureThreshold: 5
|
||||
timeoutSeconds: 10
|
||||
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
||||
timezone: UTC
|
||||
puid: 1001
|
||||
pgid: 1001
|
||||
umaskSet: "022"
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port:
|
||||
port: 8096
|
||||
## Specify the nodePort value for the LoadBalancer and NodePort service types.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
|
||||
##
|
||||
# nodePort:
|
||||
## Provide any additional annotations which may be required. This can be used to
|
||||
## set the LoadBalancer service type to internal only.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer
|
||||
##
|
||||
annotations: {}
|
||||
labels: {}
|
||||
## Use loadBalancerIP to request a specific static IP,
|
||||
## otherwise leave blank
|
||||
##
|
||||
loadBalancerIP:
|
||||
# loadBalancerSourceRanges: []
|
||||
## Set the externalTrafficPolicy in the Service to either Cluster or Local
|
||||
# externalTrafficPolicy: Cluster
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
labels: {}
|
||||
path: /
|
||||
hosts:
|
||||
- chart-example.local
|
||||
tls: []
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - chart-example.local
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
## jellyfin configuration data Persistent Volume Storage Class
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
|
||||
media:
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
mountPath: /media
|
||||
## Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
##
|
||||
## If you want to reuse an existing claim, you can pass the name of the PVC using
|
||||
## the existingClaim variable
|
||||
# existingClaim: your-claim
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
# accessMode: ReadWriteOnce
|
||||
# size: 1Gi
|
||||
## Do not delete the pvc upon helm uninstall
|
||||
skipuninstall: false
|
||||
tvshows:
|
||||
enabled: true
|
||||
## jellyfin tv volume configuration
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
##
|
||||
## If you want to reuse an existing claim, you can pass the name of the PVC using
|
||||
## the existingClaim variable
|
||||
# existingClaim: your-claim
|
||||
# subPath: some-subpath
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Gi
|
||||
## Do not delete the pvc upon helm uninstall
|
||||
skipuninstall: false
|
||||
movies:
|
||||
enabled: true
|
||||
## jellyfin movie volume configuration
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
##
|
||||
# storageClass: "-"
|
||||
##
|
||||
## If you want to reuse an existing claim, you can pass the name of the PVC using
|
||||
## the existingClaim variable
|
||||
# existingClaim: your-claim
|
||||
# subPath: some-subpath
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Gi
|
||||
## Do not delete the pvc upon helm uninstall
|
||||
skipuninstall: false
|
||||
extraExistingClaimMounts: []
|
||||
# - name: external-mount
|
||||
# mountPath: /srv/external-mount
|
||||
## A manually managed Persistent Volume and Claim
|
||||
## If defined, PVC must be created manually before volume will be bound
|
||||
# existingClaim:
|
||||
# readOnly: true
|
||||
|
||||
resources: {}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
||||
podAnnotations: {}
|
||||
|
||||
deploymentAnnotations: {}
|
||||
# skipuninstall: false
|
||||
# existingClaim: ""
|
||||
|
||||
@@ -2,7 +2,7 @@ apiVersion: v2
|
||||
appVersion: 1.0.6-12
|
||||
description: Node-RED is low-code programming for event-driven applications
|
||||
name: node-red
|
||||
version: 3.1.0
|
||||
version: 3.3.0
|
||||
keywords:
|
||||
- nodered
|
||||
- node-red
|
||||
|
||||
@@ -37,14 +37,26 @@ The command removes all the Kubernetes components associated with the chart and
|
||||
The following tables lists the configurable parameters of the Node-RED chart and their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|:---------------------------------- |:----------------------------------------------------------------------- |:------------------------- |
|
||||
|:------------------------------------- |:----------------------------------------------------------------------- |:------------------------- |
|
||||
| `image.repository` | node-red image | `nodered/node-red` |
|
||||
| `image.tag` | node-red image tag | `1.0.6-12-minimal` |
|
||||
| `image.pullPolicy` | node-red image pull policy | `IfNotPresent` |
|
||||
| `strategyType` | Specifies the strategy used to replace old Pods by new ones | `Recreate` |
|
||||
| `serviceAccountName` | Service account to run the pod as | `` |
|
||||
| `livenessProbePath` | Default livenessProbe path | `/` |
|
||||
| `readinessProbePath` | Default readinessProbe path | `/` |
|
||||
| `probes.liveness.enabled` | Enable/ disable livenessProbe | `true` |
|
||||
| `probes.liveness.probePath` | Set livenessProbe path | `/` |
|
||||
| `probes.liveness.initialDelaySeconds` | Set livenessProbe initial delay | 60 |
|
||||
| `probes.liveness.failureThreshold` | Set livenessProbe failure threshold | 5 |
|
||||
| `probes.liveness.timeoutSeconds` | Set livenessProbe timeout | 10 |
|
||||
| `probes.readiness.enabled` | Enable/ disable readinessProbe | `true` |
|
||||
| `probes.readiness.probePath` | Set readinessProbe path | `/` |
|
||||
| `probes.readiness.initialDelaySeconds`| Set readinessProbe initial delay | 60 |
|
||||
| `probes.readiness.failureThreshold` | Set readinessProbe failure threshold | 5 |
|
||||
| `probes.readiness.timeoutSeconds` | Set readinessProbe timeout | 10 |
|
||||
| `probes.startup.enabled` | Enable/ disable readinessProbe | `false` |
|
||||
| `probes.startup.probePath` | Set startupProbe path | `/` |
|
||||
| `probes.startup.failureThreshold` | Set startupProbe failure threshold | 30 |
|
||||
| `probes.startup.periodSeconds` | Set startupProbe period | 10 |
|
||||
| `flows` | Default flows configuration | `flows.json` |
|
||||
| `safeMode` | Setting to true starts Node-RED in safe (not running) mode | `false` |
|
||||
| `enableProjects` | setting to true starts Node-RED with the projects feature enabled | `false` |
|
||||
@@ -76,6 +88,7 @@ The following tables lists the configurable parameters of the Node-RED chart and
|
||||
| `affinity` | Affinity settings for pod assignment | `{}` |
|
||||
| `podAnnotations` | Key-value pairs to add as pod annotations | `{}` |
|
||||
| `deploymentAnnotations` | Key-value pairs to add as deployment annotations | `{}` |
|
||||
| `hostAliases` | Specify /etc/hosts entries | `[]` |
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
|
||||
@@ -44,14 +44,32 @@ spec:
|
||||
- name: http
|
||||
containerPort: 1880
|
||||
protocol: TCP
|
||||
{{- if .Values.probes.liveness.enabled }}
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: {{ .Values.livenessProbePath }}
|
||||
path: {{ .Values.probes.liveness.probePath }}
|
||||
port: http
|
||||
initialDelaySeconds: {{ .Values.probes.liveness.initialDelaySeconds }}
|
||||
failureThreshold: {{ .Values.probes.liveness.failureThreshold }}
|
||||
timeoutSeconds: {{ .Values.probes.liveness.timeoutSeconds }}
|
||||
{{- end }}
|
||||
{{- if .Values.probes.readiness.enabled }}
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: {{ .Values.readinessProbePath }}
|
||||
path: {{ .Values.probes.readiness.probePath }}
|
||||
port: http
|
||||
initialDelaySeconds: {{ .Values.probes.readiness.initialDelaySeconds }}
|
||||
failureThreshold: {{ .Values.probes.readiness.failureThreshold }}
|
||||
timeoutSeconds: {{ .Values.probes.readiness.timeoutSeconds }}
|
||||
{{- end }}
|
||||
{{- if .Values.probes.startup.enabled }}
|
||||
startupProbe:
|
||||
httpGet:
|
||||
path: {{ .Values.probes.startup.probePath }}
|
||||
port: http
|
||||
failureThreshold: {{ .Values.probes.startup.failureThreshold }}
|
||||
periodSeconds: {{ .Values.probes.startup.periodSeconds }}
|
||||
{{- end }}
|
||||
env:
|
||||
- name: FLOWS
|
||||
value: "{{ .Values.flows }}"
|
||||
@@ -82,6 +100,10 @@ spec:
|
||||
{{- else }}
|
||||
emptyDir: {}
|
||||
{{ end }}
|
||||
{{- if .Values.hostAliases }}
|
||||
hostAliases:
|
||||
{{ toYaml .Values.hostAliases | indent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{ toYaml . | indent 8 }}
|
||||
|
||||
@@ -15,8 +15,31 @@ fullnameOverride: ""
|
||||
|
||||
serviceAccountName: ""
|
||||
|
||||
livenessProbePath: /
|
||||
readinessProbePath: /
|
||||
# Probes configuration
|
||||
# ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
probes:
|
||||
liveness:
|
||||
# Indicates whether the container is running. If the liveness probe fails, the kubelet kills the container
|
||||
# and the container is subjected to its restart policy.
|
||||
enabled: true
|
||||
probePath: /
|
||||
initialDelaySeconds: 60
|
||||
failureThreshold: 5
|
||||
timeoutSeconds: 10
|
||||
readiness:
|
||||
# Indicates whether the container is ready to respond to requests.
|
||||
enabled: true
|
||||
probePath: /
|
||||
initialDelaySeconds: 60
|
||||
failureThreshold: 5
|
||||
timeoutSeconds: 10
|
||||
startup:
|
||||
# Indicates whether the application within the container is started.
|
||||
# All other probes are disabled if a startup probe is provided, until it succeeds.
|
||||
enabled: false
|
||||
probePath: /
|
||||
failureThreshold: 30
|
||||
periodSeconds: 10
|
||||
|
||||
flows: "flows.json"
|
||||
safeMode: "false"
|
||||
@@ -46,6 +69,14 @@ service:
|
||||
## Set the externalTrafficPolicy in the Service to either Cluster or Local
|
||||
# externalTrafficPolicy: Cluster
|
||||
|
||||
hostAliases: []
|
||||
# Use hostAliases to add custom entries to /etc/hosts - mapping IP addresses to hostnames.
|
||||
# ref: https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
|
||||
# - ip: "192.168.1.100"
|
||||
# hostnames:
|
||||
# - "example.com"
|
||||
# - "www.example.com"
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
annotations: {}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
apiVersion: v2
|
||||
appVersion: v3.8.1
|
||||
appVersion: v4.0
|
||||
description: Program for forwarding ADS-B data to FlightAware
|
||||
name: piaware
|
||||
version: 2.1.0
|
||||
version: 3.0.0
|
||||
keywords:
|
||||
- piaware
|
||||
- flight-aware
|
||||
@@ -14,3 +14,7 @@ sources:
|
||||
maintainers:
|
||||
- name: billimek
|
||||
email: jeff@billimek.com
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: ^1.5.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# piaware: Program for forwarding ADS-B data to FlightAware
|
||||
# piaware
|
||||
|
||||
This is a helm chart for [piaware](https://github.com/flightaware/piaware)
|
||||
This is a helm chart for [piaware](https://github.com/flightaware/piaware).
|
||||
|
||||
## TL;DR;
|
||||
|
||||
@@ -17,18 +17,22 @@ To install the chart with the release name `my-release`:
|
||||
helm install --name my-release k8s-at-home/piaware
|
||||
```
|
||||
|
||||
### Configuration
|
||||
There are two main options for this chart, either use a UBB device on the node where the pod runs or use
|
||||
[readsb](https://hub.docker.com/r/mikenye/readsb) with beast
|
||||
**IMPORTANT NOTE:** a piaware device must be accessible on the node where this pod runs, in order for this chart to function properly.
|
||||
|
||||
#### USB
|
||||
Set the value
|
||||
First, you will need to mount your piaware device into the pod, you can do so by adding the following to your values:
|
||||
|
||||
device: "/dev/bus/usb/001/004"
|
||||
```yaml
|
||||
additionalVolumeMounts:
|
||||
- name: usb
|
||||
mountPath: /path/to/device
|
||||
|
||||
**IMPORTANT NOTE:** a flight-aware USB device must be accessible on the node where this pod runs, in order for this chart to function properly.
|
||||
additionalVolumes:
|
||||
- name: usb
|
||||
hostPath:
|
||||
path: /path/to/device
|
||||
```
|
||||
|
||||
A way to achieve this can be with nodeAffinity rules, for example:
|
||||
Second you will need to set a nodeAffinity rule, for example:
|
||||
|
||||
```yaml
|
||||
affinity:
|
||||
@@ -39,16 +43,10 @@ affinity:
|
||||
- key: app
|
||||
operator: In
|
||||
values:
|
||||
- flight-aware
|
||||
- piaware
|
||||
```
|
||||
|
||||
... where a node with an attached flight-aware USB device is labeled with `app: flight-aware`
|
||||
|
||||
#### Beast
|
||||
Use this together with the [readsb](https://hub.docker.com/r/mikenye/readsb)
|
||||
Set the value
|
||||
|
||||
beastHost: <host running readsb>
|
||||
... where a node with an attached piaware USB device is labeled with `app: piaware`
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
@@ -60,20 +58,49 @@ helm delete my-release --purge
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
Read through the [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/piaware/values.yaml) file. It has several commented out suggested values.
|
||||
Read through the charts [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/piaware/values.yaml)
|
||||
file. It has several commented out suggested values.
|
||||
Additionally you can take a look at the common library [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/common/values.yaml) for more (advanced) configuration options.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
helm install --name my-release \
|
||||
--set feederId="nosecrets" \
|
||||
helm install my-release \
|
||||
--set env.TZ="America/New_York" \
|
||||
k8s-at-home/piaware
|
||||
```
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the
|
||||
chart. For example,
|
||||
```console
|
||||
helm install --name my-release -f values.yaml k8s-at-home/piaware
|
||||
helm install my-release k8s-at-home/piaware --values values.yaml
|
||||
```
|
||||
|
||||
```yaml
|
||||
image:
|
||||
tag: ...
|
||||
```
|
||||
|
||||
---
|
||||
**NOTE**
|
||||
|
||||
If you get
|
||||
```console
|
||||
Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...`
|
||||
```
|
||||
it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
|
||||
---
|
||||
|
||||
## Upgrading an existing Release to a new major version
|
||||
|
||||
A major chart version change (like 4.0.1 -> 5.0.0) indicates that there is an incompatible breaking change potentially needing manual actions.
|
||||
|
||||
### Upgrading from 2.x.x to 3.x.x
|
||||
|
||||
As of 3.0.0 this chart was migrated to a centralized [common](https://github.com/k8s-at-home/charts/tree/master/charts/common) library, some values in `values.yaml` have changed.
|
||||
|
||||
Examples:
|
||||
|
||||
* `service.port` has been moved to `service.port.port`.
|
||||
* `persistence.type` has been moved to `controllerType`.
|
||||
|
||||
Refer to the [common](https://github.com/k8s-at-home/charts/tree/master/charts/common) library for more configuration options.
|
||||
|
||||
5
charts/piaware/ci/ct-values.yaml
Normal file
5
charts/piaware/ci/ct-values.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
ingress:
|
||||
enabled: true
|
||||
env:
|
||||
LAT: "29.9792"
|
||||
LONG: "31.1342"
|
||||
@@ -1,19 +1 @@
|
||||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range .Values.ingress.hosts }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "piaware.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get svc -w {{ include "piaware.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "piaware.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "piaware.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:5000 to use your application"
|
||||
kubectl port-forward $POD_NAME 5000:5000
|
||||
{{- end }}
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "piaware.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 "piaware.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 "piaware.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "piaware.labels" -}}
|
||||
app.kubernetes.io/name: {{ include "piaware.name" . }}
|
||||
helm.sh/chart: {{ include "piaware.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end -}}
|
||||
1
charts/piaware/templates/common.yaml
Normal file
1
charts/piaware/templates/common.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.all" . }}
|
||||
@@ -1,93 +0,0 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "piaware.fullname" . }}
|
||||
labels:
|
||||
{{ include "piaware.labels" . | indent 4 }}
|
||||
spec:
|
||||
replicas: 1
|
||||
revisionHistoryLimit: 3
|
||||
strategy:
|
||||
type: {{ .Values.strategyType }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: {{ include "piaware.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "piaware.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- if .Values.podAnnotations }}
|
||||
annotations:
|
||||
{{- range $key, $value := .Values.podAnnotations }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
{{- if .Values.device }}
|
||||
securityContext:
|
||||
privileged: true
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8080
|
||||
protocol: TCP
|
||||
env:
|
||||
{{- if .Values.timezone }}
|
||||
- name: TZ
|
||||
value: "{{ .Values.timezone }}"
|
||||
{{- end }}
|
||||
{{- if .Values.latitude }}
|
||||
- name: LAT
|
||||
value: "{{ .Values.latitude }}"
|
||||
{{- end }}
|
||||
{{- if .Values.longitude }}
|
||||
- name: LONG
|
||||
value: "{{ .Values.longitude }}"
|
||||
{{- end }}
|
||||
{{- if .Values.feederId }}
|
||||
- name: FEEDER_ID
|
||||
value: "{{ .Values.feederId }}"
|
||||
{{- end }}
|
||||
{{- if .Values.beastHost }}
|
||||
- name: BEASTHOST
|
||||
value: "{{ .Values.beastHost }}"
|
||||
{{- end }}
|
||||
{{- if .Values.beastPort }}
|
||||
- name: BEASTPORT
|
||||
value: "{{ .Values.beastPort }}"
|
||||
{{- end }}
|
||||
{{- if .Values.device }}
|
||||
volumeMounts:
|
||||
- mountPath: {{ .Values.device }}
|
||||
name: usb
|
||||
{{- end }}
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
{{- if .Values.device }}
|
||||
volumes:
|
||||
- name: usb
|
||||
hostPath:
|
||||
path: {{ .Values.device }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
@@ -1,35 +0,0 @@
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
{{- $fullName := include "piaware.fullname" . -}}
|
||||
{{- $ingressPath := .Values.ingress.path -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
labels:
|
||||
{{ include "piaware.labels" . | indent 4 }}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- range .Values.ingress.tls }}
|
||||
- hosts:
|
||||
{{- range .hosts }}
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
secretName: {{ .secretName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ . | quote }}
|
||||
http:
|
||||
paths:
|
||||
- path: {{ $ingressPath }}
|
||||
backend:
|
||||
serviceName: {{ $fullName }}
|
||||
servicePort: http
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -1,49 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "piaware.fullname" . }}
|
||||
labels:
|
||||
{{ include "piaware.labels" . | indent 4 }}
|
||||
{{- if .Values.service.labels }}
|
||||
{{ toYaml .Values.service.labels | indent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.service.annotations }}
|
||||
annotations:
|
||||
{{ toYaml . | indent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if (or (eq .Values.service.type "ClusterIP") (empty .Values.service.type)) }}
|
||||
type: ClusterIP
|
||||
{{- if .Values.service.clusterIP }}
|
||||
clusterIP: {{ .Values.service.clusterIP }}
|
||||
{{end}}
|
||||
{{- else if eq .Values.service.type "LoadBalancer" }}
|
||||
type: {{ .Values.service.type }}
|
||||
{{- if .Values.service.loadBalancerIP }}
|
||||
loadBalancerIP: {{ .Values.service.loadBalancerIP }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.loadBalancerSourceRanges }}
|
||||
loadBalancerSourceRanges:
|
||||
{{ toYaml .Values.service.loadBalancerSourceRanges | indent 4 }}
|
||||
{{- end -}}
|
||||
{{- else }}
|
||||
type: {{ .Values.service.type }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.externalIPs }}
|
||||
externalIPs:
|
||||
{{ toYaml .Values.service.externalIPs | indent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.externalTrafficPolicy }}
|
||||
externalTrafficPolicy: {{ .Values.service.externalTrafficPolicy }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.service.port }}
|
||||
protocol: TCP
|
||||
targetPort: http
|
||||
{{ if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }}
|
||||
nodePort: {{.Values.service.nodePort}}
|
||||
{{ end }}
|
||||
selector:
|
||||
app.kubernetes.io/name: {{ include "piaware.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
@@ -1,85 +1,45 @@
|
||||
# Default values for piaware.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
|
||||
# upgrade strategy type (e.g. Recreate or RollingUpdate)
|
||||
strategyType: Recreate
|
||||
|
||||
image:
|
||||
repository: mikenye/piaware
|
||||
tag: v3.8.1
|
||||
pullPolicy: IfNotPresent
|
||||
tag: v4.0
|
||||
|
||||
# timezone to run the service as
|
||||
# timezone: "America/New York"
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
# feeder id of device
|
||||
# feederId: "c478b1c99-23d3-4376-1f82-47352a28cg37"
|
||||
|
||||
# coordinates of device
|
||||
# latitude: "-73.14980"
|
||||
# longitude: "30.66783"
|
||||
|
||||
# device where the flight-aware device can be accessed
|
||||
# device: "/dev/bus/usb/001/004"
|
||||
|
||||
# beastHost: 10.0.1.88
|
||||
# beastPort: 30005
|
||||
|
||||
imagePullSecrets: []
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
env: {}
|
||||
# TZ:
|
||||
# LAT:
|
||||
# LONG:
|
||||
# FEEDER_ID:
|
||||
# BEASTHOST:
|
||||
# BEASTPORT:
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port:
|
||||
port: 8080
|
||||
## Specify the nodePort value for the LoadBalancer and NodePort service types.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
|
||||
##
|
||||
# nodePort:
|
||||
## Provide any additional annotations which may be required. This can be used to
|
||||
## set the LoadBalancer service type to internal only.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer
|
||||
##
|
||||
annotations: {}
|
||||
labels: {}
|
||||
## Use loadBalancerIP to request a specific static IP,
|
||||
## otherwise leave blank
|
||||
##
|
||||
loadBalancerIP:
|
||||
# loadBalancerSourceRanges: []
|
||||
## Set the externalTrafficPolicy in the Service to either Cluster or Local
|
||||
# externalTrafficPolicy: Cluster
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
path: /
|
||||
hosts:
|
||||
- chart-example.local
|
||||
tls: []
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - chart-example.local
|
||||
securityContext:
|
||||
privileged: true
|
||||
|
||||
resources: {}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# Path to your piaware device in the container
|
||||
additionalVolumeMounts:
|
||||
- name: usb
|
||||
mountPath: /dev/bus/usb/001/004
|
||||
|
||||
nodeSelector: {}
|
||||
# Path to your piaware device on the host
|
||||
additionalVolumes:
|
||||
- name: usb
|
||||
hostPath:
|
||||
path: /dev/bus/usb/001/004
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
||||
podAnnotations: {}
|
||||
# affinity:
|
||||
# nodeAffinity:
|
||||
# requiredDuringSchedulingIgnoredDuringExecution:
|
||||
# nodeSelectorTerms:
|
||||
# - matchExpressions:
|
||||
# - key: app
|
||||
# operator: In
|
||||
# values:
|
||||
# - piaware
|
||||
|
||||
24
charts/plex-media-server/.helmignore
Normal file
24
charts/plex-media-server/.helmignore
Normal file
@@ -0,0 +1,24 @@
|
||||
# Patterns to ignore when building packages.
|
||||
# This supports shell glob matching, relative path matching, and
|
||||
# negation (prefixed with !). Only one pattern per line.
|
||||
.DS_Store
|
||||
# Common VCS dirs
|
||||
.git/
|
||||
.gitignore
|
||||
.bzr/
|
||||
.bzrignore
|
||||
.hg/
|
||||
.hgignore
|
||||
.svn/
|
||||
# Common backup files
|
||||
*.swp
|
||||
*.bak
|
||||
*.tmp
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
# OWNERS file for Kubernetes
|
||||
OWNERS
|
||||
20
charts/plex-media-server/Chart.yaml
Normal file
20
charts/plex-media-server/Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
apiVersion: v2
|
||||
appVersion: 1.20.4.3517-ab5e1197c
|
||||
description: Plex Media Server
|
||||
name: plex-media-server
|
||||
version: 0.0.1
|
||||
keywords:
|
||||
- plex
|
||||
- plex-media-server
|
||||
home: https://plex.tv/
|
||||
icon: https://www.plex.tv/wp-content/uploads/2018/01/pmp-icon-1.png
|
||||
sources:
|
||||
- https://github.com/k8s-at-home/charts/tree/master/charts/plex
|
||||
- https://hub.docker.com/r/plexinc/pms-docker/
|
||||
maintainers:
|
||||
- name: billimek
|
||||
email: jeff@billimek.com
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: ^1.5.1
|
||||
4
charts/plex-media-server/OWNERS
Normal file
4
charts/plex-media-server/OWNERS
Normal file
@@ -0,0 +1,4 @@
|
||||
approvers:
|
||||
- billimek
|
||||
reviewers:
|
||||
- billimek
|
||||
5
charts/plex-media-server/README.md
Normal file
5
charts/plex-media-server/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# plex-media-server
|
||||
|
||||
**Do not use this chart, this is currently for testing bringing in the common library and using the k8s-at-home container image**
|
||||
|
||||
Be sure to use the [plex](https://github.com/k8s-at-home/charts/tree/master/charts/plex) chart instead.
|
||||
2
charts/plex-media-server/ci/ct-values.yaml
Normal file
2
charts/plex-media-server/ci/ct-values.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
ingress:
|
||||
enabled: true
|
||||
1
charts/plex-media-server/templates/NOTES.txt
Normal file
1
charts/plex-media-server/templates/NOTES.txt
Normal file
@@ -0,0 +1 @@
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
1
charts/plex-media-server/templates/common.yaml
Normal file
1
charts/plex-media-server/templates/common.yaml
Normal file
@@ -0,0 +1 @@
|
||||
{{ include "common.all" . }}
|
||||
75
charts/plex-media-server/values.yaml
Normal file
75
charts/plex-media-server/values.yaml
Normal file
@@ -0,0 +1,75 @@
|
||||
# Default values for zwave2mqtt.
|
||||
|
||||
image:
|
||||
repository: k8sathome/plex-media-server
|
||||
pullPolicy: IfNotPresent
|
||||
tag: v1.20.4.3517-ab5e1197c
|
||||
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
env: {}
|
||||
# TZ:
|
||||
|
||||
service:
|
||||
port:
|
||||
port: 32400
|
||||
|
||||
# securityContext:
|
||||
# privileged: true
|
||||
|
||||
persistence:
|
||||
config:
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
mountPath: /config
|
||||
## Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
# storageClass: "-"
|
||||
# accessMode: ReadWriteOnce
|
||||
# size: 1Gi
|
||||
## Do not delete the pvc upon helm uninstall
|
||||
# skipuninstall: false
|
||||
# existingClaim: ""
|
||||
|
||||
transcode:
|
||||
enabled: false
|
||||
emptyDir: false
|
||||
mountPath: /transcode
|
||||
## Persistent Volume Storage Class
|
||||
## If defined, storageClassName: <storageClass>
|
||||
## If set to "-", storageClassName: "", which disables dynamic provisioning
|
||||
## If undefined (the default) or set to null, no storageClassName spec is
|
||||
## set, choosing the default provisioner. (gp2 on AWS, standard on
|
||||
## GKE, AWS & OpenStack)
|
||||
# storageClass: "-"
|
||||
# accessMode: ReadWriteOnce
|
||||
# size: 1Gi
|
||||
## Do not delete the pvc upon helm uninstall
|
||||
# skipuninstall: false
|
||||
# existingClaim: ""
|
||||
|
||||
# # Path to your intel gpu device in the container
|
||||
# additionalVolumeMounts:
|
||||
# - name: intel-gpu
|
||||
# mountPath: /dev/dri
|
||||
|
||||
# # Path to yourintel gpu device on the host
|
||||
# additionalVolumes:
|
||||
# - name: intel-gpu
|
||||
# hostPath:
|
||||
# path: /dev/dri
|
||||
|
||||
# affinity:
|
||||
# nodeAffinity:
|
||||
# requiredDuringSchedulingIgnoredDuringExecution:
|
||||
# nodeSelectorTerms:
|
||||
# - matchExpressions:
|
||||
# - key: kubernetes.io/hostname
|
||||
# operator: In
|
||||
# values:
|
||||
# - k8s-worker-a
|
||||
@@ -2,7 +2,7 @@ apiVersion: v2
|
||||
appVersion: 1.20.2.3402
|
||||
description: Plex Media Server
|
||||
name: plex
|
||||
version: 2.0.4
|
||||
version: 2.0.5
|
||||
keywords:
|
||||
- plex
|
||||
home: https://plex.tv/
|
||||
|
||||
@@ -230,6 +230,9 @@ spec:
|
||||
{{ end }}
|
||||
{{- range .Values.persistence.extraData }}
|
||||
- mountPath: "/data-{{ .name }}"
|
||||
{{- if .subPath }}
|
||||
subPath: {{ .subPath }}
|
||||
{{ end }}
|
||||
name: "extradata-{{ .name }}"
|
||||
{{- end }}
|
||||
{{- range .Values.persistence.extraMounts }}
|
||||
|
||||
@@ -210,6 +210,7 @@ persistence:
|
||||
# with the additional field 'name'
|
||||
# - claimName: "special-tv"
|
||||
# name: 'foo'
|
||||
# subPath: optional/sub/path
|
||||
|
||||
extraMounts: []
|
||||
## Include additional claims that can be mounted inside the
|
||||
|
||||
2
charts/unifi-poller/.helmignore
Executable file → Normal file
2
charts/unifi-poller/.helmignore
Executable file → Normal file
@@ -20,3 +20,5 @@
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
||||
# OWNERS file for Kubernetes
|
||||
OWNERS
|
||||
|
||||
6
charts/unifi-poller/Chart.yaml
Executable file → Normal file
6
charts/unifi-poller/Chart.yaml
Executable file → Normal file
@@ -2,7 +2,7 @@ apiVersion: v2
|
||||
appVersion: 2.0.1
|
||||
description: Collect ALL UniFi Controller, Site, Device & Client Data - Export to InfluxDB or Prometheus
|
||||
name: unifi-poller
|
||||
version: 2.0.1
|
||||
version: 3.0.0
|
||||
keywords:
|
||||
- unifi
|
||||
- unifi-poller
|
||||
@@ -14,3 +14,7 @@ sources:
|
||||
maintainers:
|
||||
- name: billimek
|
||||
email: jeff@billimek.com
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: ^1.5.0
|
||||
|
||||
59
charts/unifi-poller/README.md
Executable file → Normal file
59
charts/unifi-poller/README.md
Executable file → Normal file
@@ -1,10 +1,6 @@
|
||||
# unifi-poller
|
||||
|
||||
This is an opinionated helm chart for [unifi-poller](https://github.com/unifi-poller/unifi-poller)
|
||||
|
||||
Collect ALL UniFi Controller, Site, Device & Client Data - Export to InfluxDB or Prometheus
|
||||
|
||||
The default values and container images used in this chart will allow for running in a multi-arch cluster (amd64, arm, arm64)
|
||||
This is a helm chart for [unifi-poller](https://github.com/unifi-poller/unifi-poller).
|
||||
|
||||
## TL;DR;
|
||||
|
||||
@@ -18,32 +14,63 @@ $ helm install k8s-at-home/unifi-poller
|
||||
To install the chart with the release name `my-release`:
|
||||
|
||||
```console
|
||||
helm install --name unifi-poller k8s-at-home/unifi-poller
|
||||
helm install --name my-release k8s-at-home/unifi-poller
|
||||
```
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `unifi-poller` deployment:
|
||||
To uninstall/delete the `my-release` deployment:
|
||||
|
||||
```console
|
||||
helm delete unifi-poller --purge
|
||||
helm delete my-release --purge
|
||||
```
|
||||
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
Read through the [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/unifi-poller/values.yaml) file. It has several commented out suggested values.
|
||||
Read through the charts [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/unifi-poller/values.yaml)
|
||||
file. It has several commented out suggested values.
|
||||
Additionally you can take a look at the common library [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/common/values.yaml) for more (advanced) configuration options.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
helm install --name unifi-poller \
|
||||
helm install unifi-poller \
|
||||
--set env.TZ="America/New_York" \
|
||||
k8s-at-home/unifi-poller
|
||||
```
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the
|
||||
chart. For example,
|
||||
```console
|
||||
helm install --name unifi-poller -f values.yaml stable/unifi-poller
|
||||
helm install unifi-poller k8s-at-home/unifi-poller --values values.yaml
|
||||
```
|
||||
|
||||
```yaml
|
||||
image:
|
||||
tag: ...
|
||||
```
|
||||
|
||||
---
|
||||
**NOTE**
|
||||
|
||||
If you get
|
||||
```console
|
||||
Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...`
|
||||
```
|
||||
it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
|
||||
---
|
||||
|
||||
## Upgrading an existing Release to a new major version
|
||||
|
||||
A major chart version change (like 4.0.1 -> 5.0.0) indicates that there is an incompatible breaking change potentially needing manual actions.
|
||||
|
||||
### Upgrading from 2.x.x to 3.x.x
|
||||
|
||||
Due to migrating to a centralized common library some values in `values.yaml` have changed.
|
||||
|
||||
Examples:
|
||||
|
||||
* `service.port` has been moved to `service.port.port`.
|
||||
* `persistence.type` has been moved to `controllerType`.
|
||||
|
||||
Refer to the library values.yaml for more configuration options.
|
||||
|
||||
2
charts/unifi-poller/ci/ct-values.yaml
Normal file
2
charts/unifi-poller/ci/ct-values.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
ingress:
|
||||
enabled: false
|
||||
22
charts/unifi-poller/templates/NOTES.txt
Executable file → Normal file
22
charts/unifi-poller/templates/NOTES.txt
Executable file → Normal file
@@ -1,21 +1 @@
|
||||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range $host := .Values.ingress.hosts }}
|
||||
{{- range .paths }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "unifi-poller.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "unifi-poller.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "unifi-poller.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "unifi-poller.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:9130 to use your application"
|
||||
kubectl port-forward $POD_NAME 9130:80
|
||||
{{- end }}
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "unifi-poller.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 "unifi-poller.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 "unifi-poller.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "unifi-poller.labels" -}}
|
||||
app.kubernetes.io/name: {{ include "unifi-poller.name" . }}
|
||||
helm.sh/chart: {{ include "unifi-poller.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "unifi-poller.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
{{ default (include "unifi-poller.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else -}}
|
||||
{{ default "default" .Values.serviceAccount.name }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
31
charts/unifi-poller/templates/common.yaml
Normal file
31
charts/unifi-poller/templates/common.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
{{/* Make sure all variables are set properly */}}
|
||||
{{- include "common.values.setup" . }}
|
||||
|
||||
{{/* Append the configMap to the additionalVolumes */}}
|
||||
{{- define "unifi-poller.configmap.volume" -}}
|
||||
name: unifi-poller-settings
|
||||
configMap:
|
||||
name: {{ template "common.names.fullname" . }}-settings
|
||||
{{- end -}}
|
||||
|
||||
{{- $volume := include "unifi-poller.configmap.volume" . | fromYaml -}}
|
||||
{{- if $volume -}}
|
||||
{{- $additionalVolumes := append .Values.additionalVolumes $volume }}
|
||||
{{- $_ := set .Values "additionalVolumes" (deepCopy $additionalVolumes) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Append the configMap volume to the additionalVolumeMounts */}}
|
||||
{{- define "unifi-poller.configmap.volumeMount" -}}
|
||||
name: unifi-poller-settings
|
||||
mountPath: /config/unifi-poller.yaml
|
||||
subPath: unifi-poller.yaml
|
||||
{{- end -}}
|
||||
|
||||
{{- $volumeMount := include "unifi-poller.configmap.volumeMount" . | fromYaml -}}
|
||||
{{- if $volumeMount -}}
|
||||
{{- $additionalVolumeMounts := append .Values.additionalVolumeMounts $volumeMount }}
|
||||
{{- $_ := set .Values "additionalVolumeMounts" (deepCopy $additionalVolumeMounts) -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Render the templates */}}
|
||||
{{ include "common.all" . }}
|
||||
10
charts/unifi-poller/templates/configmap.yaml
Executable file → Normal file
10
charts/unifi-poller/templates/configmap.yaml
Executable file → Normal file
@@ -1,9 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "unifi-poller.fullname" . }}
|
||||
name: {{ template "common.names.fullname" . }}-settings
|
||||
labels:
|
||||
{{ include "unifi-poller.labels" . | indent 4 }}
|
||||
{{- include "common.labels" . | nindent 4 }}
|
||||
data:
|
||||
up.yaml: {{ .Values.config | toYaml | quote }}
|
||||
|
||||
unifi-poller.yaml: |
|
||||
{{- with .Values.config }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
|
||||
@@ -1,70 +0,0 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "unifi-poller.fullname" . }}
|
||||
labels:
|
||||
{{ include "unifi-poller.labels" . | indent 4 }}
|
||||
spec:
|
||||
replicas: {{ .Values.replicaCount }}
|
||||
revisionHistoryLimit: 3
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: {{ include "unifi-poller.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
annotations:
|
||||
checksum/configmap: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "unifi-poller.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
spec:
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
serviceAccountName: {{ template "unifi-poller.serviceAccountName" . }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
args:
|
||||
- "-c"
|
||||
- "/etc/unifi-poller/up.yaml"
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 9130
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: http
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
port: http
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /etc/unifi-poller
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: {{ template "unifi-poller.fullname" . }}
|
||||
@@ -1,38 +0,0 @@
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
{{- $fullName := include "unifi-poller.fullname" . -}}
|
||||
{{- $ingressPath := .Values.ingress.path -}}
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "unifi-poller.name" . }}
|
||||
helm.sh/chart: {{ include "unifi-poller.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- range .Values.ingress.tls }}
|
||||
- hosts:
|
||||
{{- range .hosts }}
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
secretName: {{ .secretName }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ . | quote }}
|
||||
http:
|
||||
paths:
|
||||
- path: {{ $ingressPath }}
|
||||
backend:
|
||||
serviceName: {{ $fullName }}
|
||||
servicePort: http
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -1,20 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "unifi-poller.fullname" . }}
|
||||
labels:
|
||||
{{ include "unifi-poller.labels" . | indent 4 }}
|
||||
{{- if .Values.service.annotations }}
|
||||
annotations:
|
||||
{{ toYaml .Values.service.annotations | indent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
type: {{ .Values.service.type }}
|
||||
ports:
|
||||
- port: {{ .Values.service.port }}
|
||||
targetPort: http
|
||||
protocol: TCP
|
||||
name: http
|
||||
selector:
|
||||
app.kubernetes.io/name: {{ include "unifi-poller.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
@@ -1,8 +0,0 @@
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ template "unifi-poller.serviceAccountName" . }}
|
||||
labels:
|
||||
{{ include "unifi-poller.labels" . | indent 4 }}
|
||||
{{- end -}}
|
||||
@@ -2,24 +2,20 @@
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: ServiceMonitor
|
||||
metadata:
|
||||
name: {{ include "unifi-poller.fullname" . }}
|
||||
name: {{ template "common.names.fullname" . }}
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "unifi-poller.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
helm.sh/chart: {{ include "unifi-poller.chart" . }}
|
||||
{{- include "common.labels" . | nindent 4 }}
|
||||
{{- with .Values.prometheus.serviceMonitor.additionalLabels }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app.kubernetes.io/name: {{ include "unifi-poller.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- include "common.labels.selectorLabels" . | nindent 6 }}
|
||||
endpoints:
|
||||
- port: http
|
||||
{{- if .Values.prometheus.serviceMonitor.interval }}
|
||||
interval: {{ .Values.prometheus.serviceMonitor.interval }}
|
||||
{{- end }}
|
||||
{{- with .Values.prometheus.serviceMonitor.interval }}
|
||||
interval: {{ . }}
|
||||
{{- end }}
|
||||
path: /metrics
|
||||
{{- end }}
|
||||
@@ -1,18 +0,0 @@
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: "{{ include "unifi-poller.fullname" . }}-test-connection"
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "unifi-poller.name" . }}
|
||||
helm.sh/chart: {{ include "unifi-poller.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
annotations:
|
||||
"helm.sh/hook": test-success
|
||||
spec:
|
||||
containers:
|
||||
- name: wget
|
||||
image: busybox
|
||||
command: ['wget']
|
||||
args: ['{{ include "unifi-poller.fullname" . }}:{{ .Values.service.port }}']
|
||||
restartPolicy: Never
|
||||
69
charts/unifi-poller/values.yaml
Executable file → Normal file
69
charts/unifi-poller/values.yaml
Executable file → Normal file
@@ -1,81 +1,26 @@
|
||||
# Default values for unifi-poller.
|
||||
# This is a YAML-formatted file.
|
||||
# Declare variables to be passed into your templates.
|
||||
|
||||
replicaCount: 1
|
||||
|
||||
image:
|
||||
repository: golift/unifi-poller
|
||||
tag: 2.0.1
|
||||
pullPolicy: IfNotPresent
|
||||
tag: 2.0.1
|
||||
|
||||
imagePullSecrets: []
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a service account should be created
|
||||
create: true
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
name:
|
||||
|
||||
podSecurityContext: {}
|
||||
# fsGroup: 2000
|
||||
|
||||
securityContext: {}
|
||||
# capabilities:
|
||||
# drop:
|
||||
# - ALL
|
||||
# readOnlyRootFilesystem: true
|
||||
# runAsNonRoot: true
|
||||
# runAsUser: 1000
|
||||
strategy:
|
||||
type: Recreate
|
||||
|
||||
service:
|
||||
type: ClusterIP
|
||||
port:
|
||||
port: 9130
|
||||
annotations: {}
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
annotations: {}
|
||||
# kubernetes.io/ingress.class: nginx
|
||||
# kubernetes.io/tls-acme: "true"
|
||||
hosts:
|
||||
- host: chart-example.local
|
||||
paths: []
|
||||
|
||||
tls: []
|
||||
# - secretName: chart-example-tls
|
||||
# hosts:
|
||||
# - chart-example.local
|
||||
|
||||
resources: {}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
affinity: {}
|
||||
|
||||
# if using prometheus in the options below
|
||||
# wire up a servicemonitor for prometheus-operator
|
||||
# enable a prometheus-operator servicemonitor
|
||||
prometheus:
|
||||
serviceMonitor:
|
||||
enabled: false
|
||||
interval: 1m
|
||||
additionalLabels: {}
|
||||
|
||||
# unifi-poller configuration settings
|
||||
# https://github.com/unifi-poller/unifi-poller/wiki/Configuration
|
||||
config:
|
||||
poller:
|
||||
# config.poller.debug -- Turns on line numbers, microsecond logging, and a per-device log.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
apiVersion: v2
|
||||
appVersion: 5.12.35
|
||||
appVersion: 5.14.23
|
||||
description: Ubiquiti Network's Unifi Controller
|
||||
name: unifi
|
||||
version: 1.1.0
|
||||
version: 1.2.0
|
||||
keywords:
|
||||
- ubiquiti
|
||||
- unifi
|
||||
|
||||
@@ -34,7 +34,7 @@ The following tables lists the configurable parameters of the Unifi chart and th
|
||||
| Parameter | Default | Description |
|
||||
|-------------------------------------------------|------------------------------|------------------------------------------------------------------------------------------------------------------------|
|
||||
| `image.repository` | `jacobalberty/unifi` | Image repository |
|
||||
| `image.tag` | `5.12.35` | Image tag. Possible values listed [here][docker]. |
|
||||
| `image.tag` | `5.14.23` | Image tag. Possible values listed [here][docker]. |
|
||||
| `image.pullPolicy` | `IfNotPresent` | Image pull policy |
|
||||
| `strategyType` | `Recreate` | Specifies the strategy used to replace old Pods by new ones |
|
||||
| `guiService.type` | `ClusterIP` | Kubernetes service type for the Unifi GUI |
|
||||
@@ -93,7 +93,14 @@ The following tables lists the configurable parameters of the Unifi chart and th
|
||||
| `syslogService.loadBalancerIP` | `{}` | Loadbalancer IP for remote syslog capture |
|
||||
| `syslogService.loadBalancerSourceRanges` | None | List of IP CIDRs allowed access to load balancer (if supported) |
|
||||
| `syslogService.externalTrafficPolicy` | `Cluster` | Set the externalTrafficPolicy in the Service to either Cluster or Local |
|
||||
| `unifiedService.enabled` | `false` | Use a single service for GUI, controller, STUN, discovery and syslog |
|
||||
| `speedtestService.type` | `ClusterIP` | Kubernetes service type for mobile speedtest |
|
||||
| `speedtestService.port` | `6789` | Kubernetes UDP port for mobile speedtest |
|
||||
| `speedtestService.annotations` | `{}` | Service annotations for mobile speedtest |
|
||||
| `speedtestService.labels` | `{}` | Custom labels |
|
||||
| `speedtestService.loadBalancerIP` | `{}` | Loadbalancer IP for mobile speedtest |
|
||||
| `speedtestService.loadBalancerSourceRanges` | None | List of IP CIDRs allowed access to load balancer (if supported) |
|
||||
| `speedtestService.externalTrafficPolicy` | `Cluster` | Set the externalTrafficPolicy in the Service to either Cluster or Local |
|
||||
| `unifiedService.enabled` | `false` | Use a single service for GUI, controller, STUN, discovery, syslog and speedtest |
|
||||
| `unifiedService.type` | `ClusterIP` | Kubernetes service type for the unified service |
|
||||
| `unifiedService.annotations` | `{}` | Annotations for the unified service |
|
||||
| `unifiedService.labels` | `{}` | Custom labels for the unified service |
|
||||
@@ -135,6 +142,18 @@ The following tables lists the configurable parameters of the Unifi chart and th
|
||||
| `extraConfigFiles` | `{}` | Dictionary containing files mounted to `/configmap` inside the pod (See [values.yaml](values.yaml) for examples) |
|
||||
| `extraJvmOpts` | `[]` | List of additional JVM options, e.g. `["-Dlog4j.configurationFile=file:/configmap/log4j2.xml"]` |
|
||||
| `resources` | `{}` | CPU/Memory resource requests/limits |
|
||||
| `livenessProbe.enabled` | `true` | Turn on and off liveness probe |
|
||||
| `livenessProbe.initialDelaySeconds` | `30` | Delay before liveness probe is initiated |
|
||||
| `livenessProbe.periodSeconds` | `15` | How often to perform the probe |
|
||||
| `livenessProbe.timeoutSeconds` | `5` | When the probe times out |
|
||||
| `livenessProbe.failureThreshold` | `3` | Minimum consecutive failures for the probe |
|
||||
| `livenessProbe.successThreshold` | `1` | Minimum consecutive successes for the probe |
|
||||
| `readinessProbe.enabled` | `true` | Turn on and off readiness probe |
|
||||
| `readinessProbe.initialDelaySeconds` | `30` | Delay before readiness probe is initiated |
|
||||
| `readinessProbe.periodSeconds` | `15` | How often to perform the probe |
|
||||
| `readinessProbe.timeoutSeconds` | `5` | When the probe times out |
|
||||
| `readinessProbe.failureThreshold` | `3` | Minimum consecutive failures for the probe |
|
||||
| `readinessProbe.successThreshold` | `1` | Minimum consecutive successes for the probe |
|
||||
| `nodeSelector` | `{}` | Node labels for pod assignment |
|
||||
| `tolerations` | `[]` | Toleration labels for pod assignment |
|
||||
| `affinity` | `{}` | Affinity settings for pod assignment |
|
||||
@@ -178,6 +197,8 @@ Read through the [values.yaml](values.yaml) file. It has several commented out s
|
||||
- `syslogService`: Used to capture syslog from Unifi devices if the feature is
|
||||
enabled in the site configuration. This needs to be reachable by Unifi devices
|
||||
on port 5514/UDP.
|
||||
- `speedtestService`: Used for mobile speedtest inside the UniFi Mobile app.
|
||||
This needs to be reachable by clients connecting to port 6789/TCP.
|
||||
|
||||
## Ingress and HTTPS
|
||||
|
||||
|
||||
@@ -75,6 +75,9 @@ spec:
|
||||
- name: captive-https
|
||||
containerPort: 8843
|
||||
protocol: TCP
|
||||
- name: speedtest
|
||||
containerPort: 6789
|
||||
protocol: TCP
|
||||
{{ end }}
|
||||
{{- if not .Values.runAsRoot }}
|
||||
securityContext:
|
||||
@@ -82,18 +85,30 @@ spec:
|
||||
add:
|
||||
- SETFCAP
|
||||
{{- end }}
|
||||
{{- if .Values.livenessProbe.enabled }}
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /status
|
||||
port: https-gui
|
||||
scheme: HTTPS
|
||||
initialDelaySeconds: 30
|
||||
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
|
||||
successThreshold: {{ .Values.livenessProbe.successThreshold }}
|
||||
failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
|
||||
{{- end }}
|
||||
{{- if .Values.readinessProbe.enabled }}
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /status
|
||||
port: https-gui
|
||||
scheme: HTTPS
|
||||
initialDelaySeconds: 15
|
||||
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
|
||||
timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
|
||||
successThreshold: {{ .Values.readinessProbe.successThreshold }}
|
||||
failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
|
||||
{{- end }}
|
||||
env:
|
||||
- name: UNIFI_HTTP_PORT
|
||||
value: "{{ .Values.controllerService.port }}"
|
||||
|
||||
54
charts/unifi/templates/speedtest-svc.yaml
Normal file
54
charts/unifi/templates/speedtest-svc.yaml
Normal file
@@ -0,0 +1,54 @@
|
||||
{{ if not .Values.speedtestService.enabled }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ template "unifi.fullname" . }}-speedtest
|
||||
labels:
|
||||
app.kubernetes.io/name: {{ include "unifi.name" . }}
|
||||
helm.sh/chart: {{ include "unifi.chart" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- if .Values.speedtestService.labels }}
|
||||
{{ toYaml .Values.speedtestService.labels | indent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.speedtestService.annotations }}
|
||||
annotations:
|
||||
{{ toYaml . | indent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if (or (eq .Values.speedtestService.type "ClusterIP") (empty .Values.speedtestService.type)) }}
|
||||
type: ClusterIP
|
||||
{{- if .Values.speedtestService.clusterIP }}
|
||||
clusterIP: {{ .Values.speedtestService.clusterIP }}
|
||||
{{end}}
|
||||
{{- else if eq .Values.speedtestService.type "LoadBalancer" }}
|
||||
type: {{ .Values.speedtestService.type }}
|
||||
{{- if .Values.speedtestService.loadBalancerIP }}
|
||||
loadBalancerIP: {{ .Values.speedtestService.loadBalancerIP }}
|
||||
{{- end }}
|
||||
{{- if .Values.speedtestService.loadBalancerSourceRanges }}
|
||||
loadBalancerSourceRanges:
|
||||
{{ toYaml .Values.speedtestService.loadBalancerSourceRanges | indent 4 }}
|
||||
{{- end -}}
|
||||
{{- else }}
|
||||
type: {{ .Values.speedtestService.type }}
|
||||
{{- end }}
|
||||
{{- if .Values.speedtestService.externalIPs }}
|
||||
externalIPs:
|
||||
{{ toYaml .Values.speedtestService.externalIPs | indent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.speedtestService.externalTrafficPolicy }}
|
||||
externalTrafficPolicy: {{ .Values.speedtestService.externalTrafficPolicy }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- port: {{ .Values.speedtestService.port }}
|
||||
targetPort: speedtest
|
||||
protocol: TCP
|
||||
name: speedtest
|
||||
{{ if (and (eq .Values.speedtestService.type "NodePort") (not (empty .Values.speedtestService.nodePort))) }}
|
||||
nodePort: {{.Values.speedtestService.nodePort}}
|
||||
{{ end }}
|
||||
selector:
|
||||
app.kubernetes.io/name: {{ include "unifi.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{ end }}
|
||||
@@ -90,6 +90,13 @@ spec:
|
||||
targetPort: captive-https
|
||||
{{ if (and (eq .Values.unifiedService.type "NodePort") (not (empty .Values.captivePortalService.https))) }}
|
||||
nodePort: {{.Values.captivePortalService.https}}
|
||||
{{ end }}
|
||||
- port: {{ .Values.speedtestService.port }}
|
||||
targetPort: speedtest
|
||||
protocol: TCP
|
||||
name: speedtest
|
||||
{{ if (and (eq .Values.unifiedService.type "NodePort") (not (empty .Values.speedtestService.nodePort))) }}
|
||||
nodePort: {{.Values.speedtestService.nodePort}}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ strategyType: Recreate
|
||||
|
||||
image:
|
||||
repository: jacobalberty/unifi
|
||||
tag: 5.12.35
|
||||
tag: 5.14.23
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# If enabled, the controller, discovery, GUI, STUN and syslog services will not be
|
||||
@@ -190,6 +190,27 @@ syslogService:
|
||||
## Set the externalTrafficPolicy in the Service to either Cluster or Local
|
||||
# externalTrafficPolicy: Cluster
|
||||
|
||||
speedtestService:
|
||||
type: ClusterIP
|
||||
port: 6789
|
||||
## Specify the nodePort value for the LoadBalancer and NodePort service types.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport
|
||||
##
|
||||
# nodePort:
|
||||
## Provide any additional annotations which may be required. This can be used to
|
||||
## set the LoadBalancer service type to internal only.
|
||||
## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer
|
||||
##
|
||||
annotations: {}
|
||||
labels: {}
|
||||
## Use loadBalancerIP to request a specific static IP,
|
||||
## otherwise leave blank
|
||||
##
|
||||
loadBalancerIP:
|
||||
# loadBalancerSourceRanges: []
|
||||
## Set the externalTrafficPolicy in the Service to either Cluster or Local
|
||||
# externalTrafficPolicy: Cluster
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
annotations: {}
|
||||
@@ -320,6 +341,24 @@ resources: {}
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
## Liveness and readiness probe values
|
||||
## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes
|
||||
##
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 1
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
initialDelaySeconds: 15
|
||||
periodSeconds: 10
|
||||
timeoutSeconds: 1
|
||||
failureThreshold: 3
|
||||
successThreshold: 1
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
apiVersion: v2
|
||||
appVersion: 2.1.2
|
||||
appVersion: 2.1.2.0120
|
||||
description: M3U Proxy for Plex DVR and Emby Live TV.
|
||||
name: xteve
|
||||
version: 2.0.1
|
||||
version: 3.0.0
|
||||
keywords:
|
||||
- xteve
|
||||
- iptv
|
||||
@@ -16,3 +16,7 @@ sources:
|
||||
maintainers:
|
||||
- name: billimek
|
||||
email: jeff@billimek.com
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://k8s-at-home.com/charts/
|
||||
version: ^1.5.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# xteve: M3U Proxy for Plex DVR and Emby Live TV.
|
||||
# xteve
|
||||
|
||||
This is a helm chart for [xTeVe](https://github.com/xteve-project/xTeVe)
|
||||
This is a helm chart for [xTeVe](https://github.com/xteve-project/xTeVe).
|
||||
|
||||
## TL;DR;
|
||||
|
||||
@@ -28,19 +28,49 @@ helm delete my-release --purge
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
Read through the [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/xteve/values.yaml) file. It has several commented out suggested values.
|
||||
Read through the charts [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/xteve/values.yaml)
|
||||
file. It has several commented out suggested values.
|
||||
Additionally you can take a look at the common library [values.yaml](https://github.com/k8s-at-home/charts/blob/master/charts/common/values.yaml) for more (advanced) configuration options.
|
||||
|
||||
Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
|
||||
|
||||
```console
|
||||
helm install --name my-release \
|
||||
--set timezone="America/New_York" \
|
||||
helm install xteve \
|
||||
--set env.TZ="America/New York" \
|
||||
k8s-at-home/xteve
|
||||
```
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
|
||||
|
||||
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the
|
||||
chart. For example,
|
||||
```console
|
||||
helm install --name my-release -f values.yaml stable/xteve
|
||||
helm install xteve k8s-at-home/xteve --values values.yaml
|
||||
```
|
||||
|
||||
```yaml
|
||||
image:
|
||||
tag: ...
|
||||
```
|
||||
|
||||
---
|
||||
**NOTE**
|
||||
|
||||
If you get
|
||||
```console
|
||||
Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: ...`
|
||||
```
|
||||
it may be because you uninstalled the chart with `skipuninstall` enabled, you need to manually delete the pvc or use `existingClaim`.
|
||||
|
||||
---
|
||||
|
||||
## Upgrading an existing Release to a new major version
|
||||
|
||||
A major chart version change (like 4.0.1 -> 5.0.0) indicates that there is an incompatible breaking change potentially needing manual actions.
|
||||
|
||||
### Upgrading from 2.x.x to 3.x.x
|
||||
|
||||
Due to migrating to a centralized common library some values in `values.yaml` have changed.
|
||||
|
||||
Examples:
|
||||
|
||||
* `service.port` has been moved to `service.port.port`.
|
||||
* `persistence.type` has been moved to `controllerType`.
|
||||
|
||||
Refer to the library values.yaml for more configuration options.
|
||||
|
||||
2
charts/xteve/ci/ct-values.yaml
Normal file
2
charts/xteve/ci/ct-values.yaml
Normal file
@@ -0,0 +1,2 @@
|
||||
ingress:
|
||||
enabled: true
|
||||
@@ -1,19 +1 @@
|
||||
1. Get the application URL by running these commands:
|
||||
{{- if .Values.ingress.enabled }}
|
||||
{{- range .Values.ingress.hosts }}
|
||||
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
|
||||
{{- end }}
|
||||
{{- else if contains "NodePort" .Values.service.type }}
|
||||
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "xteve.fullname" . }})
|
||||
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||
echo http://$NODE_IP:$NODE_PORT
|
||||
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||
You can watch the status of by running 'kubectl get svc -w {{ include "xteve.fullname" . }}'
|
||||
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "xteve.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
|
||||
echo http://$SERVICE_IP:{{ .Values.service.port }}
|
||||
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "xteve.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
echo "Visit http://127.0.0.1:34400 to use your application"
|
||||
kubectl port-forward $POD_NAME 34400:34400
|
||||
{{- end }}
|
||||
{{- include "common.notes.defaultNotes" . -}}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user