[piaware] move to common library (#163)

This commit is contained in:
ᗪєνιη ᗷυнʟ 2020-11-15 14:41:38 -05:00 committed by GitHub
parent aaec338715
commit 2f9c96082f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 100 additions and 343 deletions

View File

@ -1,8 +1,8 @@
apiVersion: v2 apiVersion: v2
appVersion: v3.8.1 appVersion: v4.0
description: Program for forwarding ADS-B data to FlightAware description: Program for forwarding ADS-B data to FlightAware
name: piaware name: piaware
version: 2.1.0 version: 3.0.0
keywords: keywords:
- piaware - piaware
- flight-aware - flight-aware
@ -14,3 +14,7 @@ sources:
maintainers: maintainers:
- name: billimek - name: billimek
email: jeff@billimek.com email: jeff@billimek.com
dependencies:
- name: common
repository: https://k8s-at-home.com/charts/
version: ^1.5.0

View File

@ -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; ## 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 helm install --name my-release k8s-at-home/piaware
``` ```
### Configuration **IMPORTANT NOTE:** a piaware device must be accessible on the node where this pod runs, in order for this chart to function properly.
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
#### USB First, you will need to mount your piaware device into the pod, you can do so by adding the following to your values:
Set the value
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 ```yaml
affinity: affinity:
@ -39,16 +43,10 @@ affinity:
- key: app - key: app
operator: In operator: In
values: values:
- flight-aware - piaware
``` ```
... where a node with an attached flight-aware USB device is labeled with `app: flight-aware` ... where a node with an attached piaware USB device is labeled with `app: piaware`
#### Beast
Use this together with the [readsb](https://hub.docker.com/r/mikenye/readsb)
Set the value
beastHost: <host running readsb>
## Uninstalling the Chart ## 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. 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/piaware/values.yaml)
file. It has several commented out suggested values.
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. 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, Specify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,
```console ```console
helm install --name my-release \ helm install my-release \
--set feederId="nosecrets" \ --set env.TZ="America/New_York" \
k8s-at-home/piaware k8s-at-home/piaware
``` ```
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the
Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example, chart. For example,
```console ```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.

View File

@ -0,0 +1,5 @@
ingress:
enabled: true
env:
LAT: "29.9792"
LONG: "31.1342"

View File

@ -1,19 +1 @@
1. Get the application URL by running these commands: {{- include "common.notes.defaultNotes" . -}}
{{- 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 }}

View File

@ -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 -}}

View File

@ -0,0 +1 @@
{{ include "common.all" . }}

View File

@ -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 }}

View File

@ -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 }}

View File

@ -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 }}

View File

@ -1,85 +1,45 @@
# Default values for piaware. # 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: image:
repository: mikenye/piaware repository: mikenye/piaware
tag: v3.8.1
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
tag: v4.0
# timezone to run the service as strategy:
# timezone: "America/New York" type: Recreate
# feeder id of device env: {}
# feederId: "c478b1c99-23d3-4376-1f82-47352a28cg37" # TZ:
# LAT:
# coordinates of device # LONG:
# latitude: "-73.14980" # FEEDER_ID:
# longitude: "30.66783" # BEASTHOST:
# BEASTPORT:
# 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: ""
service: service:
type: ClusterIP port:
port: 8080 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: securityContext:
enabled: false privileged: true
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
resources: {} # Path to your piaware device in the container
# We usually recommend not to specify default resources and to leave this as a conscious additionalVolumeMounts:
# choice for the user. This also increases chances charts run on environments with little - name: usb
# resources, such as Minikube. If you do want to specify resources, uncomment the following mountPath: /dev/bus/usb/001/004
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
nodeSelector: {} # Path to your piaware device on the host
additionalVolumes:
- name: usb
hostPath:
path: /dev/bus/usb/001/004
tolerations: [] # affinity:
# nodeAffinity:
affinity: {} # requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
podAnnotations: {} # - matchExpressions:
# - key: app
# operator: In
# values:
# - piaware