Skip to content

Commit 10e159e

Browse files
kfox1111unguiculus
authored andcommitted
Kubernetes Dashboard Chart (helm#808)
* Kubernetes Dashboard Chart Adds support for managing the Kubernetes Dashboard lifecycle via Helm. * Add notes. * Fix namespaceing issues and remove extra defaults. * Fix namespaceing issue in svc. * Fix ws issues. * Change default resource limits to match GKE. * Fix min length of name. * Fix ImagePullPolicy typo * Remove namespace and remove extra release info. * Use name instead of fullname in labels. * Fix misaligned label selector. * Fix misspecified target port. * Use deployment release name in the svc selector as well as named port. * Fix dashboard notes. * Add ingress, bump version, fix notes label selector. * Fix bad port number in notes. * Fix ingress template scope issue. * [stable/kubernetes-dashboard] use github username in maintainers
1 parent a4075e0 commit 10e159e

File tree

7 files changed

+200
-0
lines changed

7 files changed

+200
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
name: kubernetes-dashboard
2+
version: 0.1.0
3+
appVersion: 1.6.1
4+
description: General-purpose web UI for Kubernetes clusters
5+
keywords:
6+
- kubernetes
7+
- dashboard
8+
maintainers:
9+
- name: kfox1111
10+
email: Kevin.Fox@pnnl.gov
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
*********************************************************************************
2+
*** PLEASE BE PATIENT: kubernetes-dashboard may take a few minutes to install ***
3+
*********************************************************************************
4+
5+
Get the Kubernetes Dashboard URL by running:
6+
7+
{{- if contains "NodePort" .Values.serviceType }}
8+
9+
export NODE_PORT=$(kubectl get -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "fullname" . }})
10+
export NODE_IP=$(kubectl get nodes -o jsonpath="{.items[0].status.addresses[0].address}")
11+
echo http://$NODE_IP:$NODE_PORT/
12+
13+
{{- else if contains "LoadBalancer" .Values.serviceType }}
14+
15+
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
16+
Watch the status with: 'kubectl get svc -w {{ template "fullname" . }}'
17+
18+
export SERVICE_IP=$(kubectl get svc {{ template "fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
19+
echo http://$SERVICE_IP/
20+
{{- else if contains "ClusterIP" .Values.serviceType }}
21+
22+
export POD_NAME=$(kubectl get pods -n {{ .Release.Namespace }} -l "app={{ template "name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
23+
echo http://127.0.0.1:9090/
24+
kubectl -n {{ .Release.Namespace }} port-forward $POD_NAME 9090:9090
25+
{{- end }}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{{/* vim: set filetype=mustache: */}}
2+
{{/*
3+
Expand the name of the chart.
4+
*/}}
5+
{{ define "name" }}{{ default "kubernetes-dashboard" .Values.nameOverride | trunc 63 }}{{ end }}
6+
7+
{{/*
8+
Create a default fully qualified app name.
9+
10+
We truncate at 63 chars because some Kubernetes name fields are limited to this
11+
(by the DNS naming spec).
12+
*/}}
13+
{{ define "fullname" }}
14+
{{- $name := default "kubernetes-dashboard" .Values.nameOverride -}}
15+
{{ printf "%s-%s" .Release.Name $name | trunc 63 -}}
16+
{{ end }}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
apiVersion: extensions/v1beta1
2+
kind: Deployment
3+
metadata:
4+
name: {{ template "fullname" . }}
5+
labels:
6+
app: {{ template "name" . }}
7+
heritage: "{{ .Release.Service }}"
8+
release: "{{ .Release.Name }}"
9+
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
10+
kubernetes.io/cluster-service: "true"
11+
spec:
12+
replicas: 1
13+
strategy:
14+
rollingUpdate:
15+
maxSurge: 0
16+
maxUnavailable: 1
17+
type: RollingUpdate
18+
template:
19+
metadata:
20+
labels:
21+
app: {{ template "name" . }}
22+
heritage: "{{ .Release.Service }}"
23+
release: "{{ .Release.Name }}"
24+
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
25+
kubernetes.io/cluster-service: "true"
26+
spec:
27+
nodeSelector:
28+
{{ toYaml .Values.nodeSelector | indent 10 }}
29+
containers:
30+
- name: main
31+
image: "{{ .Values.image }}:{{ .Values.imageTag }}"
32+
imagePullPolicy: {{ .Values.imagePullPolicy }}
33+
resources:
34+
{{ toYaml .Values.resources | indent 10 }}
35+
livenessProbe:
36+
failureThreshold: 3
37+
httpGet:
38+
path: /
39+
port: 9090
40+
scheme: HTTP
41+
initialDelaySeconds: 30
42+
periodSeconds: 10
43+
successThreshold: 1
44+
timeoutSeconds: 30
45+
ports:
46+
- name: http
47+
containerPort: 9090
48+
protocol: TCP
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{{- if .Values.ingress.enabled -}}
2+
{{- $fullName := include "fullname" . }}
3+
{{- $httpPort := .Values.httpPort }}
4+
apiVersion: extensions/v1beta1
5+
kind: Ingress
6+
metadata:
7+
annotations:
8+
{{- range $key, $value := .Values.ingress.annotations }}
9+
{{ $key }}: {{ $value | quote }}
10+
{{- end }}
11+
labels:
12+
app: {{ template "name" . }}
13+
heritage: "{{ .Release.Service }}"
14+
release: "{{ .Release.Name }}"
15+
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
16+
name: {{ template "fullname" . }}
17+
spec:
18+
rules:
19+
{{- range .Values.ingress.hosts }}
20+
- host: {{ . }}
21+
http:
22+
paths:
23+
- path: /
24+
backend:
25+
serviceName: {{ $fullName }}
26+
servicePort: {{ $httpPort }}
27+
{{- end -}}
28+
{{- if .Values.ingress.tls }}
29+
tls:
30+
{{ toYaml .Values.ingress.tls | indent 4 }}
31+
{{- end -}}
32+
{{- end -}}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: {{ template "fullname" . }}
5+
labels:
6+
app: {{ template "name" . }}
7+
heritage: "{{ .Release.Service }}"
8+
release: "{{ .Release.Name }}"
9+
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
10+
kubernetes.io/cluster-service: "true"
11+
spec:
12+
type: {{ .Values.serviceType }}
13+
ports:
14+
- name: http
15+
port: {{ .Values.httpPort }}
16+
targetPort: http
17+
{{- if hasKey .Values "nodePort" }}
18+
nodePort: {{ .Values.nodePort }}
19+
{{- end }}
20+
selector:
21+
app: {{ template "name" . }}
22+
release: {{ .Release.Name | quote }}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Default values for kubernetes-dashboard
2+
# This is a YAML-formatted file.
3+
# Declare name/value pairs to be passed into your templates.
4+
# name: value
5+
6+
image: gcr.io/google_containers/kubernetes-dashboard-amd64
7+
imageTag: "v1.6.1"
8+
imagePullPolicy: "IfNotPresent"
9+
10+
nodeSelector: {}
11+
12+
httpPort: 80
13+
14+
serviceType: ClusterIP
15+
16+
resources:
17+
limits:
18+
cpu: 100m
19+
memory: 50Mi
20+
requests:
21+
cpu: 100m
22+
memory: 50Mi
23+
24+
ingress:
25+
## If true, Kubernetes Dashboard Ingress will be created.
26+
##
27+
enabled: false
28+
29+
## Kubernetes Dashboard Ingress annotations
30+
##
31+
# annotations:
32+
# kubernetes.io/ingress.class: nginx
33+
# kubernetes.io/tls-acme: 'true'
34+
35+
## Kubernetes Dashboard Ingress hostnames
36+
## Must be provided if Ingress is enabled
37+
##
38+
# hosts:
39+
# - kubernetes-dashboard.domain.com
40+
41+
## Kubernetes Dashboard Ingress TLS configuration
42+
## Secrets must be manually created in the namespace
43+
##
44+
# tls:
45+
# - secretName: kubernetes-dashboard-tls
46+
# hosts:
47+
# - kubernetes-dashboard.domain.com

0 commit comments

Comments
 (0)