├── Dockerfile ├── Jenkinsfile ├── README.md ├── charts ├── coffee │ ├── Chart.yaml │ ├── templates │ │ ├── coffee-deployment.yaml │ │ ├── coffee-svc.yaml │ │ ├── tea-deployment.yaml │ │ └── tea-svc.yaml │ └── values.yaml ├── configmap-sample │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ ├── configmap-sample.yaml │ │ └── volumeMount-pod.yaml │ └── values.yaml ├── daemonset-sample │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── nginx-daemonset.yaml │ └── values.yaml ├── deploy-multi-container │ ├── .helmignore │ ├── Chart.yaml │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── deployment.yaml │ │ ├── ingress.yaml │ │ ├── service.yaml │ │ └── tests │ │ │ └── test-connection.yaml │ └── values.yaml ├── deployment-nginx │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── nginx-deployment.yaml │ └── values.yaml ├── ghost │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ ├── ghost-deployment.yaml │ │ ├── ghost-pvc.yaml │ │ └── ghost-svc.yaml │ └── values.yaml ├── ingress-coffee │ ├── Chart.yaml │ ├── templates │ │ ├── coffee-ingress.yaml │ │ └── coffee-secret.yaml │ └── values.yaml ├── job-sample │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── job-sample.yaml │ └── values.yaml ├── limitrange-sample │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── limitrange-sample.yaml │ └── values.yaml ├── loki │ ├── .helmignore │ ├── Chart.yaml │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── networkpolicy.yaml │ │ ├── pdb.yaml │ │ ├── podsecuritypolicy.yaml │ │ ├── role.yaml │ │ ├── rolebinding.yaml │ │ ├── secret.yaml │ │ ├── service-headless.yaml │ │ ├── service.yaml │ │ ├── serviceaccount.yaml │ │ └── statefulset.yaml │ └── values.yaml ├── nginx-ingress │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ ├── nginx-ingress-deployment.yaml │ │ └── nginx-ingress-svc.yaml │ └── values.yaml ├── nginx │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ ├── nginx-deployment.yaml │ │ └── nginx-svc.yaml │ └── values.yaml ├── persistentvolume-sample │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── pv-local01.yaml │ └── values.yaml ├── persistentvolumeclaim-sample │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── pvc-01.yaml │ └── values.yaml ├── pod-hello-world │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── hello-world.yaml │ └── values.yaml ├── pod-multi-container │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── multi-container-pod.yaml │ └── values.yaml ├── pod-nginx │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── nginx-pod.yaml │ └── values.yaml ├── promtail │ ├── .helmignore │ ├── Chart.yaml │ ├── templates │ │ ├── NOTES.txt │ │ ├── _helpers.tpl │ │ ├── clusterrole.yaml │ │ ├── clusterrolebinding.yaml │ │ ├── configmap.yaml │ │ ├── daemonset.yaml │ │ ├── podsecuritypolicy.yaml │ │ ├── role.yaml │ │ ├── rolebinding.yaml │ │ └── serviceaccount.yaml │ └── values.yaml ├── replicaset-nginx │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── nginx-replicaset.yaml │ └── values.yaml ├── resourcequota-sample │ ├── Chart.yaml │ ├── README.md │ ├── templates │ │ └── quotas-sample.yaml │ └── values.yaml └── secret-sample │ ├── Chart.yaml │ ├── README.md │ ├── templates │ ├── env-pod.yaml │ ├── secret-sample.yaml │ └── volumeMount-pod.yaml │ └── values.yaml └── docs ├── coffee-0.1.0.tgz ├── configmap-sample-0.1.0.tgz ├── daemonset-sample-0.1.0.tgz ├── deployment-nginx-0.1.0.tgz ├── ghost-0.1.0.tgz ├── index.yaml ├── ingress-coffee-0.1.0.tgz ├── job-sample-0.1.0.tgz ├── limitrange-sample-0.1.0.tgz ├── nginx-0.1.0.tgz ├── nginx-ingress-0.1.0.tgz ├── persistentvolume-sample-0.1.0.tgz ├── persistentvolumeclaim-sample-0.1.0.tgz ├── pod-hello-world-0.1.0.tgz ├── pod-multi-container-0.1.0.tgz ├── pod-nginx-0.1.0.tgz ├── replicaset-nginx-0.1.0.tgz ├── resourcequota-sample-0.1.0.tgz └── secret-sample-0.1.0.tgz /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.5 2 | 3 | # Install curl git helm & aws 4 | RUN apk -v --update add curl git python py-pip groff less mailcap \ 5 | && curl -sL https://storage.googleapis.com/kubernetes-helm/helm-v2.3.1-linux-amd64.tar.gz -o /tmp/helm.tgz \ 6 | && tar xvf /tmp/helm.tgz -C /tmp/ \ 7 | && cp /tmp/linux-amd64/helm /usr/local/bin/ \ 8 | && rm -rf /tmp/linux-amd64/ /tmp/helm.tgz \ 9 | && pip install --upgrade awscli s3cmd python-magic \ 10 | && apk -v --purge del py-pip \ 11 | && rm /var/cache/apk/* 12 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | node { 2 | stage('checkout') { 3 | deleteDir() 4 | checkout scm 5 | if ("${env.BRANCH_NAME}" != 'null') { 6 | sh "git checkout -b ${env.BRANCH_NAME}" 7 | } 8 | gitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim() 9 | } 10 | stage('build') { 11 | build_env = docker.build("local/build_env") 12 | } 13 | build_env.inside { 14 | stage('test') { 15 | sh ''' 16 | helm init --client-only 17 | helm lint charts/* 18 | ''' 19 | charts = sh(returnStdout: true, script: "git diff-tree --no-commit-id --name-only -a -r ${gitCommit} | cut -d\'/\' -f1,2 | uniq | grep \"^charts\" | xargs -n1 -r").trim() 20 | } 21 | if (charts) { 22 | stage('package') { 23 | // Package Charts 24 | sh """ 25 | helm init --client-only 26 | helm package --destination docs ${charts} 27 | helm repo index --url https://harbur.github.io/kubernetic-charts/ docs 28 | """ 29 | 30 | // Push to Git repository 31 | withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: 'github', passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME']]) { 32 | sh """ 33 | # Configure Git CLI 34 | git config --global user.email jenkins@cloud 35 | git config --global user.name jenkins 36 | 37 | # Push Packages to Git 38 | git commit -am "packaging charts" 39 | git push -u https://${env.USERNAME}:${env.PASSWORD}@github.com/harbur/kubernetic-charts.git ${env.BRANCH_NAME} 40 | """ 41 | } 42 | } 43 | } 44 | } 45 | } 46 | 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kubernetic Charts 2 | 3 | This repository contains chart examples that are used for running the tutorial process of Kubernetic - The Desktop Client for Kubernetes 4 | 5 | ## Installation 6 | 7 | Through CLI: 8 | 9 | ```shell 10 | $ brew install kubernetes-helm 11 | $ helm repo add kubernetic https://harbur.github.io/kubernetic-charts/ 12 | ``` 13 | 14 | Through Kubernetic: 15 | 16 | `Settings` > `Repositories` > `Add Repository`: [https://github.com/harbur/kubernetic-charts.git](https://github.com/harbur/kubernetic-charts.git) 17 | -------------------------------------------------------------------------------- /charts/coffee/Chart.yaml: -------------------------------------------------------------------------------- 1 | description: Two example deployments, coffee and tea. 2 | name: coffee 3 | version: 0.2.0 4 | keywords: 5 | - nginx 6 | home: https://github.com/nginxinc/NGINX-Demos/tree/master/kubernetes-demo/third 7 | -------------------------------------------------------------------------------- /charts/coffee/templates/coffee-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: coffee 5 | spec: 6 | replicas: 2 7 | template: 8 | metadata: 9 | labels: 10 | app: coffee 11 | spec: 12 | containers: 13 | - name: coffee 14 | image: nginxdemos/hello 15 | ports: 16 | - containerPort: 80 17 | -------------------------------------------------------------------------------- /charts/coffee/templates/coffee-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: coffee 5 | labels: 6 | app: coffee 7 | spec: 8 | ports: 9 | - port: 80 10 | targetPort: 80 11 | protocol: TCP 12 | name: http 13 | selector: 14 | app: coffee 15 | -------------------------------------------------------------------------------- /charts/coffee/templates/tea-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: tea 5 | spec: 6 | replicas: 3 7 | template: 8 | metadata: 9 | labels: 10 | app: tea 11 | spec: 12 | containers: 13 | - name: tea 14 | image: nginxdemos/hello 15 | ports: 16 | - containerPort: 80 17 | -------------------------------------------------------------------------------- /charts/coffee/templates/tea-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: tea 5 | labels: 6 | app: tea 7 | spec: 8 | ports: 9 | - port: 80 10 | targetPort: 80 11 | protocol: TCP 12 | name: http 13 | selector: 14 | app: tea 15 | -------------------------------------------------------------------------------- /charts/coffee/values.yaml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /charts/configmap-sample/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: configmap-sample 2 | description: Config Map Sample Chart 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/configmap-sample/README.md: -------------------------------------------------------------------------------- 1 | # Sample Config Map 2 | 3 | This chart installs a `configmap-sample` Config Map. 4 | 5 | The newly created Config Map contains sample data that can be later consumed by Pods. 6 | -------------------------------------------------------------------------------- /charts/configmap-sample/templates/configmap-sample.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ .Release.Name }} 5 | data: 6 | key-a: bob 7 | key-b: alice 8 | key-c: | 9 | This is a multiline 10 | data value 11 | -------------------------------------------------------------------------------- /charts/configmap-sample/templates/volumeMount-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: {{ .Release.Name }}-volume-mount 5 | spec: 6 | restartPolicy: Never 7 | containers: 8 | - name: app 9 | image: "alpine:3.5" 10 | command: ["cat", "/config/app.conf"] 11 | volumeMounts: 12 | - mountPath: /config 13 | name: config 14 | volumes: 15 | - name: config 16 | configMap: 17 | name: {{ .Release.Name }} 18 | items: 19 | - key: key-c 20 | path: app.conf 21 | -------------------------------------------------------------------------------- /charts/configmap-sample/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/configmap-sample/values.yaml -------------------------------------------------------------------------------- /charts/daemonset-sample/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: daemonset-sample 2 | description: Runs one Nginx instance in each Node. 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/daemonset-sample/README.md: -------------------------------------------------------------------------------- 1 | # Nginx Daemon Set 2 | 3 | This chart installs a `daemonset-nginx` Daemon Set. 4 | 5 | Once installed it will deploy one Nginx Pod on each Node of the Cluster. 6 | -------------------------------------------------------------------------------- /charts/daemonset-sample/templates/nginx-daemonset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: DaemonSet 3 | metadata: 4 | name: daemonset-nginx 5 | labels: 6 | app: daemonset-nginx 7 | spec: 8 | template: 9 | metadata: 10 | labels: 11 | name: daemonset-nginx 12 | spec: 13 | hostPID: true 14 | hostIPC: true 15 | hostNetwork: true 16 | containers: 17 | - image: nginx:1.10-alpine 18 | name: daemonset-nginx 19 | -------------------------------------------------------------------------------- /charts/daemonset-sample/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/daemonset-sample/values.yaml -------------------------------------------------------------------------------- /charts/deploy-multi-container/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /charts/deploy-multi-container/Chart.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | appVersion: "1.0" 3 | description: A Helm chart for Kubernetes 4 | name: deploy-multi-container 5 | version: 0.1.0 6 | -------------------------------------------------------------------------------- /charts/deploy-multi-container/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "deploy-multi-container.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "deploy-multi-container.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "deploy-multi-container.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}') 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "deploy-multi-container.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl port-forward $POD_NAME 8080:80 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /charts/deploy-multi-container/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "deploy-multi-container.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "deploy-multi-container.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "deploy-multi-container.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Common labels 36 | */}} 37 | {{- define "deploy-multi-container.labels" -}} 38 | app.kubernetes.io/name: {{ include "deploy-multi-container.name" . }} 39 | helm.sh/chart: {{ include "deploy-multi-container.chart" . }} 40 | app.kubernetes.io/instance: {{ .Release.Name }} 41 | {{- if .Chart.AppVersion }} 42 | app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} 43 | {{- end }} 44 | app.kubernetes.io/managed-by: {{ .Release.Service }} 45 | {{- end -}} 46 | -------------------------------------------------------------------------------- /charts/deploy-multi-container/templates/deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: Deployment 3 | metadata: 4 | name: {{ include "deploy-multi-container.fullname" . }} 5 | labels: 6 | {{ include "deploy-multi-container.labels" . | indent 4 }} 7 | spec: 8 | replicas: {{ .Values.replicaCount }} 9 | selector: 10 | matchLabels: 11 | app.kubernetes.io/name: {{ include "deploy-multi-container.name" . }} 12 | app.kubernetes.io/instance: {{ .Release.Name }} 13 | template: 14 | metadata: 15 | labels: 16 | app.kubernetes.io/name: {{ include "deploy-multi-container.name" . }} 17 | app.kubernetes.io/instance: {{ .Release.Name }} 18 | spec: 19 | {{- with .Values.imagePullSecrets }} 20 | imagePullSecrets: 21 | {{- toYaml . | nindent 8 }} 22 | {{- end }} 23 | containers: 24 | - name: alpine 25 | image: alpine:3.5 26 | command: ["watch", "wget", "-qO-", "localhost"] 27 | - name: nginx 28 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 29 | imagePullPolicy: {{ .Values.image.pullPolicy }} 30 | ports: 31 | - name: http 32 | containerPort: 80 33 | protocol: TCP 34 | livenessProbe: 35 | httpGet: 36 | path: / 37 | port: http 38 | readinessProbe: 39 | httpGet: 40 | path: / 41 | port: http 42 | resources: 43 | {{- toYaml .Values.resources | nindent 12 }} 44 | {{- with .Values.nodeSelector }} 45 | nodeSelector: 46 | {{- toYaml . | nindent 8 }} 47 | {{- end }} 48 | {{- with .Values.affinity }} 49 | affinity: 50 | {{- toYaml . | nindent 8 }} 51 | {{- end }} 52 | {{- with .Values.tolerations }} 53 | tolerations: 54 | {{- toYaml . | nindent 8 }} 55 | {{- end }} 56 | -------------------------------------------------------------------------------- /charts/deploy-multi-container/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "deploy-multi-container.fullname" . -}} 3 | apiVersion: extensions/v1beta1 4 | kind: Ingress 5 | metadata: 6 | name: {{ $fullName }} 7 | labels: 8 | {{ include "deploy-multi-container.labels" . | indent 4 }} 9 | {{- with .Values.ingress.annotations }} 10 | annotations: 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | spec: 14 | {{- if .Values.ingress.tls }} 15 | tls: 16 | {{- range .Values.ingress.tls }} 17 | - hosts: 18 | {{- range .hosts }} 19 | - {{ . | quote }} 20 | {{- end }} 21 | secretName: {{ .secretName }} 22 | {{- end }} 23 | {{- end }} 24 | rules: 25 | {{- range .Values.ingress.hosts }} 26 | - host: {{ .host | quote }} 27 | http: 28 | paths: 29 | {{- range .paths }} 30 | - path: {{ . }} 31 | backend: 32 | serviceName: {{ $fullName }} 33 | servicePort: http 34 | {{- end }} 35 | {{- end }} 36 | {{- end }} 37 | -------------------------------------------------------------------------------- /charts/deploy-multi-container/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "deploy-multi-container.fullname" . }} 5 | labels: 6 | {{ include "deploy-multi-container.labels" . | indent 4 }} 7 | spec: 8 | type: {{ .Values.service.type }} 9 | ports: 10 | - port: {{ .Values.service.port }} 11 | targetPort: http 12 | protocol: TCP 13 | name: http 14 | selector: 15 | app.kubernetes.io/name: {{ include "deploy-multi-container.name" . }} 16 | app.kubernetes.io/instance: {{ .Release.Name }} 17 | -------------------------------------------------------------------------------- /charts/deploy-multi-container/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "deploy-multi-container.fullname" . }}-test-connection" 5 | labels: 6 | {{ include "deploy-multi-container.labels" . | indent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "deploy-multi-container.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /charts/deploy-multi-container/values.yaml: -------------------------------------------------------------------------------- 1 | # Default values for deploy-multi-container. 2 | # This is a YAML-formatted file. 3 | # Declare variables to be passed into your templates. 4 | 5 | replicaCount: 1 6 | 7 | image: 8 | repository: nginx 9 | tag: 1.10-alpine 10 | pullPolicy: IfNotPresent 11 | 12 | imagePullSecrets: [] 13 | nameOverride: "" 14 | fullnameOverride: "" 15 | 16 | service: 17 | type: ClusterIP 18 | port: 80 19 | 20 | ingress: 21 | enabled: false 22 | annotations: {} 23 | # kubernetes.io/ingress.class: nginx 24 | # kubernetes.io/tls-acme: "true" 25 | hosts: 26 | - host: chart-example.local 27 | paths: [] 28 | 29 | tls: [] 30 | # - secretName: chart-example-tls 31 | # hosts: 32 | # - chart-example.local 33 | 34 | resources: {} 35 | # We usually recommend not to specify default resources and to leave this as a conscious 36 | # choice for the user. This also increases chances charts run on environments with little 37 | # resources, such as Minikube. If you do want to specify resources, uncomment the following 38 | # lines, adjust them as necessary, and remove the curly braces after 'resources:'. 39 | # limits: 40 | # cpu: 100m 41 | # memory: 128Mi 42 | # requests: 43 | # cpu: 100m 44 | # memory: 128Mi 45 | 46 | nodeSelector: {} 47 | 48 | tolerations: [] 49 | 50 | affinity: {} 51 | -------------------------------------------------------------------------------- /charts/deployment-nginx/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: deployment-nginx 2 | description: Runs 2 Nginx instances using Deployment 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/deployment-nginx/README.md: -------------------------------------------------------------------------------- 1 | # Nginx Deployment 2 | 3 | This chart installs two Nginx Pods on the Cluster. 4 | 5 | -------------------------------------------------------------------------------- /charts/deployment-nginx/templates/nginx-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: nginx 5 | spec: 6 | replicas: 2 7 | selector: 8 | matchLabels: 9 | app: nginx 10 | template: 11 | metadata: 12 | labels: 13 | app: nginx 14 | spec: 15 | containers: 16 | - name: nginx 17 | image: nginx:1.10-alpine 18 | ports: 19 | - containerPort: 80 20 | resources: 21 | requests: 22 | cpu: 100m 23 | memory: 100Mi -------------------------------------------------------------------------------- /charts/deployment-nginx/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/deployment-nginx/values.yaml -------------------------------------------------------------------------------- /charts/ghost/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: ghost 2 | description: Blog powered by Ghost engine 3 | version: 0.1.0 4 | home: https://ghost.org/ -------------------------------------------------------------------------------- /charts/ghost/README.md: -------------------------------------------------------------------------------- 1 | # Ghost 2 | 3 | This Chart installs Ghost on the cluster. 4 | 5 | ## Requirements 6 | 7 | It needs an available Persistent Volume, so before installing this make sure to have one on the Cluster with at least `1Gb` of space. 8 | 9 | Once installed the `ghost-claim` Persistent Volume Claim will attach to the PV and the `ghost` Deployment will use the PVC as storage unit. 10 | 11 | -------------------------------------------------------------------------------- /charts/ghost/templates/ghost-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | labels: 5 | name: ghost 6 | name: ghost 7 | spec: 8 | replicas: 1 9 | template: 10 | metadata: 11 | labels: 12 | name: ghost 13 | spec: 14 | containers: 15 | - image: ghost:0.10 16 | name: ghost 17 | env: 18 | - name: NODE_ENV 19 | value: "development" 20 | ports: 21 | - containerPort: 2368 22 | name: http-server 23 | volumeMounts: 24 | - name: ghost 25 | mountPath: /var/lib/ghost 26 | subPath: "ghost" 27 | volumes: 28 | - name: ghost 29 | persistentVolumeClaim: 30 | claimName: ghost-claim -------------------------------------------------------------------------------- /charts/ghost/templates/ghost-pvc.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: ghost-claim 5 | spec: 6 | accessModes: 7 | - ReadWriteOnce 8 | resources: 9 | requests: 10 | storage: 1Gi 11 | -------------------------------------------------------------------------------- /charts/ghost/templates/ghost-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: ghost 5 | labels: 6 | name: ghost 7 | spec: 8 | type: LoadBalancer 9 | ports: 10 | - port: 80 11 | targetPort: 2368 12 | protocol: TCP 13 | nodePort: 30100 14 | selector: 15 | name: ghost 16 | -------------------------------------------------------------------------------- /charts/ghost/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/ghost/values.yaml -------------------------------------------------------------------------------- /charts/ingress-coffee/Chart.yaml: -------------------------------------------------------------------------------- 1 | description: A Helm chart for Kubernetes 2 | name: ingress-coffee 3 | version: 0.1.0 4 | -------------------------------------------------------------------------------- /charts/ingress-coffee/templates/coffee-ingress.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Ingress 3 | metadata: 4 | name: cafe-ingress 5 | spec: 6 | tls: 7 | - hosts: 8 | - cafe.example.com 9 | secretName: cafe-secret 10 | rules: 11 | - host: cafe.example.com 12 | http: 13 | paths: 14 | - path: /tea 15 | backend: 16 | serviceName: tea 17 | servicePort: 80 18 | - path: /coffee 19 | backend: 20 | serviceName: coffee 21 | servicePort: 80 22 | -------------------------------------------------------------------------------- /charts/ingress-coffee/templates/coffee-secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: cafe-secret 5 | type: Opaque 6 | data: 7 | tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURqVENDQW5XZ0F3SUJBZ0lKQUlkSFdJaXhLK0Y2TUEwR0NTcUdTSWIzRFFFQkN3VUFNRjB4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlEQXBUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLREJoSmJuUmxjbTVsZENCWAphV1JuYVhSeklGQjBlU0JNZEdReEZqQVVCZ05WQkFNTURURTVNaTR4TmpndU16TXVORE13SGhjTk1UWXdNekF4Ck1Ua3hOelU0V2hjTk1UY3dNekF4TVRreE56VTRXakJkTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0sKVTI5dFpTMVRkR0YwWlRFaE1COEdBMVVFQ2d3WVNXNTBaWEp1WlhRZ1YybGtaMmwwY3lCUWRIa2dUSFJrTVJZdwpGQVlEVlFRRERBMHhPVEl1TVRZNExqTXpMalF6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCCkNnS0NBUUVBekNINSsrRGUyZ0VEbWE4YmpQS1ZuZ2o5ZEpFdk5wa1Q0WXBMUlV0WHJYTjZHandjZ2lPQWJITnMKMlMyWGw1RXpXYm9Pd3Axejd6M0xpYUlJdDdBT3lkc3R6TmhmckhqMU1FRi9TNGdKOG5jOVJQT01qcTQrV2cwNwpOOWNyMzJEM3l3ak9GSTdieXdXZ3daSG5NTDhHUDNrUDRpcktEcm0vMDczdjhWbVBFUzRwd01nM3drQytZL1J2ClZNd0QrMENsbU41d0dSenZNcEFKalNiaUJXZ0l3NFRCTGZUREZTSTlzUE5abk5hNWVkRFVyeFI3SmJwLzZ0Yy8KSEZOZXVwYjNyQlY3dkxTZVZydFZjSm85WXB6MmRIMlZmQS9uck5uVXd2K2NXS0RDWjVhbm5qcHZsbVYzMlo4TgpXVjJkR2JKVzJneHJ4TjB1QWNrditsQlJrMkZnSHdJREFRQUJvMUF3VGpBZEJnTlZIUTRFRmdRVWtFd3JTNTNsCms3L3NCS2JncWphdWZ6cWZhMTR3SHdZRFZSMGpCQmd3Rm9BVWtFd3JTNTNsazcvc0JLYmdxamF1ZnpxZmExNHcKREFZRFZSMFRCQVV3QXdFQi96QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFrSnRFSW02YktIQm4vK245QWkzegpyUEJ5OHpYdUV6eStYR2pmV050QUlGNUllVHNUUkRJeXEyWkwvTU92MFBvSGl3My9LTENrbENkWDd3OU91Sm10CnRRVWtmZnlYMVdwTkF6MjJvVlFTWHJkeUdLY3ZCbk84WkhpUHhPeFNoWjNqLzhjRWw4b1RpYTd6dTdodVRBOEwKL2V3NmZieFFhZlkxaERXQXF5NGJGUnFmQk1qNVpua3d6Ti9USmtDSXRvbVFJVHdDK2tPcE1KdmJDb2Zkc2JzVwo4dW1PQkVYWi9tbzU4SGtwVUtIQTRyWk9EL0JGNGlUSXl3TjFxOE5xQTJobGdLMHRsWHk1UGVITmJxUFVTejRxCkNreU91dXlWZnpITTk5ZWJ3dTVxd3RpNlRxUUM4b0ltQkdJeVM3NEh0a2l6dHc0dy9uQU9LTzhhSEM2ZXRsQVUKSUE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== 8 | tls.key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRRE1JZm43NE43YUFRT1oKcnh1TThwV2VDUDEwa1M4Mm1SUGhpa3RGUzFldGMzb2FQQnlDSTRCc2MyelpMWmVYa1ROWnVnN0NuWFB2UGN1SgpvZ2kzc0E3SjJ5M00yRitzZVBVd1FYOUxpQW55ZHoxRTg0eU9yajVhRFRzMzF5dmZZUGZMQ000VWp0dkxCYURCCmtlY3d2d1kvZVEvaUtzb091Yi9UdmUveFdZOFJMaW5BeURmQ1FMNWo5RzlVekFQN1FLV1kzbkFaSE84eWtBbU4KSnVJRmFBakRoTUV0OU1NVklqMnc4MW1jMXJsNTBOU3ZGSHNsdW4vcTF6OGNVMTY2bHZlc0ZYdTh0SjVXdTFWdwptajFpblBaMGZaVjhEK2VzMmRUQy81eFlvTUpubHFlZU9tK1daWGZabncxWlhaMFpzbGJhREd2RTNTNEJ5Uy82ClVGR1RZV0FmQWdNQkFBRUNnZ0VBT2pmYWR1YWNTQ3FQMzAzY21xYzQycGlQeUtYN2hDUEdVc1hCVCtMNy80RDIKcXZMSDRxbkRYNnJQdVdUU1hpelFLMS93QTdzcUxHcEFXV0Y0QVFOYVJHR1pQMW5hZDNNTDRwWmJlcXd5d2c4Vgp6MHR5bytLMzc3RGtXYm1wVG96MlB0YWxCNkh5dDRWRVl0QjgwaDg0NWZOZC8wL2F6clpWS2t0NldpZ0RzSThxCmUvdEFyT0lwNFhGM3JlOStaUHNmMFdOT084QTluVlByMVljbnUweFJhM1RCNGRjaDZLMmsyYVdlWEtOOHl4UXYKUjA0aUJ1UHNGdGo0Vk14SHRzcVVvQytNQmV0R3dnek1GTmxEanpSSnBUcHRvdXZaNUFVa21PTDM1bjQrdU5wMAp6Y0lPOGs3clRXWG9ydTd3OTlXcUFsa2pJQUhPQ0x2dHZrRHNyQUllMlFLQmdRRG5WR3hsUGhKL0J0K1RLQ01LCjkyK0FrTWhQUEt4UjdVV2h2RGpWeFNESFR5bFpzTkVVVEpkK2VxaEZ6TmJGVUtjSlhmUUU3ZC91NHlKNXUva2gKREUva05TRmNEdnJGZURuaXBDWDI2WUhteFZpR2x6Uit0MFRKN0cyVzcvOHhVR0JXWXVPL2w1R3I0bjd4NE4reAoxQ0dGWnlSNDVkdDNrUGQzeFVzWnd3RW5Vd0tCZ1FEaDV3cU5hbjBFMkJrYXNYSFFDdG1PbUw4WHZRNE13SGdSCk5Sc1FnU1RhcHZhQy95eFFuM3gzendDSEVIK1Z1dGE3OFZzUWRCQmhUUnJxb2tQYW5RNmtHaWh0ZEVyd0dBWG4Kb2xHNk1CUVVBVktFdTdoU2d6cndVa3ZVY0FuMVFGY1I5d3pUb09ZbndTVVhlVFdQNStvZSsvTldjVFFQWjhReAoxRFJ4d0RRR2hRS0JnRTRKTUxmR2hMN05Oc2FSbDZDdmI3SFRKWDkxWER3VzZwSnd5RXQwd0dYNzBsc3JScHl1CmFieUU3QmIvenNPcFBXL3ZmYzNiNE5yWlRGdjhpVUlZd1NxZXNhNDRiMmdGOHFEOTlzQ2diTzNJVE9DNlNUOGwKMjlLeUt4WHJ5QTUrcXNENWd4S3lzclZsSnFXNTBqeE83eS90WjJSUlJnUERwM2VEMnAzS0pxMTVBb0dCQUpKdQo0OFk3aXdMQzJiTVY1d0xHcGJQcmk2TmxwMS9ZdTN2Y0FzazJEWisycndESFRBQ1BBVzNnUHlWT0tvWHljUk92CkppcUtNYndBOFR1N0oyVGtmZ01kK2FySndYSFZBSzdmNXo1YndBZ2Z1MC9USjI1RkpzVjFjelluMGl5cUlrYkEKOEEyV3ROcDhOd0Q2VHlBVFl3M21vQndla1hLUy92aVY1OUQ4bUR6SkFvR0FOQS9KeHVQRU5RQkhZZXkwSnYzQwo4R2hoR1g4WGpNeTAzTXMwNUpWZjJtNndDOFNDUVgwOFRoS2xwcVJBT2FwRzZYeHhMdTEvUDg4OE1EZkNZL0NtCmVJaWJiMm91azNhL2ZJc0ZyL3NvcjBybEhnOHRlVk1sRzUvbVdoV29ZWFhHbWVhVEk4dVlkeDR5c2ttZDY5eW0KNUlEQ2F3RUlsajBsaVVRcDB2L00vR289Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K 9 | -------------------------------------------------------------------------------- /charts/ingress-coffee/values.yaml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /charts/job-sample/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: job-sample 2 | description: Runs a batch job of 10 instances, with a max of 3 in parallel. 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/job-sample/README.md: -------------------------------------------------------------------------------- 1 | # Sample Job 2 | 3 | This chart installs a `pi` Job that runs up to 3 Pods in parallel up to 10 succesful executions. 4 | 5 | Each Job Pod waits for 5 seconds before finishing. -------------------------------------------------------------------------------- /charts/job-sample/templates/job-sample.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: batch/v1 2 | kind: Job 3 | metadata: 4 | name: pi 5 | spec: 6 | completions: 10 7 | parallelism: 3 8 | template: 9 | metadata: 10 | name: pi 11 | spec: 12 | containers: 13 | - name: pi 14 | image: alpine:3.5 15 | command: ["sleep", "5"] 16 | restartPolicy: Never 17 | -------------------------------------------------------------------------------- /charts/job-sample/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/job-sample/values.yaml -------------------------------------------------------------------------------- /charts/limitrange-sample/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: limitrange-sample 2 | description: Limit Range Sample Chart 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/limitrange-sample/README.md: -------------------------------------------------------------------------------- 1 | # Sample Limit Range 2 | 3 | This chart installs a `mylimits` Limit Range to the Cluster. 4 | 5 | This Limit Range instructs the Min/Max/Default values for the Memory and CPU limits of the Containers and Pods. 6 | -------------------------------------------------------------------------------- /charts/limitrange-sample/templates/limitrange-sample.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: LimitRange 3 | metadata: 4 | name: mylimits 5 | spec: 6 | limits: 7 | - type: Pod 8 | min: 9 | cpu: 200m 10 | memory: 6Mi 11 | max: 12 | cpu: "2" 13 | memory: 1Gi 14 | - type: Container 15 | min: 16 | cpu: 100m 17 | memory: 3Mi 18 | max: 19 | cpu: "2" 20 | memory: 1Gi 21 | defaultRequest: 22 | cpu: 200m 23 | memory: 100Mi 24 | default: 25 | cpu: 300m 26 | memory: 200Mi -------------------------------------------------------------------------------- /charts/limitrange-sample/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/limitrange-sample/values.yaml -------------------------------------------------------------------------------- /charts/loki/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /charts/loki/Chart.yaml: -------------------------------------------------------------------------------- 1 | appVersion: 0.0.1 2 | description: 'Loki: like Prometheus, but for logs.' 3 | engine: gotpl 4 | home: https://grafana.com/loki 5 | icon: https://github.com/grafana/loki/raw/master/docs/logo.png 6 | kubeVersion: ^1.10.0-0 7 | maintainers: 8 | - email: lokiproject@googlegroups.com 9 | name: Loki Maintainers 10 | name: loki 11 | sources: 12 | - https://github.com/grafana/loki 13 | version: 0.9.1 14 | -------------------------------------------------------------------------------- /charts/loki/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | Verify the application is working by running these commands: 2 | kubectl --namespace {{ .Release.Namespace }} port-forward service/{{ include "loki.fullname" . }} {{ .Values.service.port }} 3 | curl http://127.0.0.1:{{ .Values.service.port }}/api/prom/label 4 | -------------------------------------------------------------------------------- /charts/loki/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "loki.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "loki.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "loki.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Create the name of the service account 36 | */}} 37 | {{- define "loki.serviceAccountName" -}} 38 | {{- if .Values.serviceAccount.create -}} 39 | {{ default (include "loki.fullname" .) .Values.serviceAccount.name }} 40 | {{- else -}} 41 | {{ default "default" .Values.serviceAccount.name }} 42 | {{- end -}} 43 | {{- end -}} 44 | -------------------------------------------------------------------------------- /charts/loki/templates/networkpolicy.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.networkPolicy.enabled }} 2 | apiVersion: networking.k8s.io/v1 3 | kind: NetworkPolicy 4 | metadata: 5 | name: {{ template "loki.fullname" . }} 6 | labels: 7 | app: {{ template "loki.name" . }} 8 | chart: {{ template "loki.chart" . }} 9 | release: {{ .Release.Name }} 10 | heritage: {{ .Release.Service }} 11 | spec: 12 | podSelector: 13 | matchLabels: 14 | name: {{ template "loki.fullname" . }} 15 | app: {{ template "loki.name" . }} 16 | release: {{ .Release.Name }} 17 | ingress: 18 | - from: 19 | - podSelector: 20 | matchLabels: 21 | app: {{ template "promtail.name" . }} 22 | release: {{ .Release.Name }} 23 | - ports: 24 | - port: {{ .Values.service.port }} 25 | {{- end -}} 26 | -------------------------------------------------------------------------------- /charts/loki/templates/pdb.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.podDisruptionBudget -}} 2 | apiVersion: policy/v1beta1 3 | kind: PodDisruptionBudget 4 | metadata: 5 | name: {{ template "loki.fullname" . }} 6 | app: {{ template "loki.name" . }} 7 | heritage: {{ .Release.Service }} 8 | release: {{ .Release.Name }} 9 | chart: {{ template "loki.chart" . }} 10 | spec: 11 | selector: 12 | matchLabels: 13 | app: {{ template "loki.name" . }} 14 | {{ toYaml .Values.podDisruptionBudget | indent 2 }} 15 | {{- end -}} -------------------------------------------------------------------------------- /charts/loki/templates/podsecuritypolicy.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.pspEnabled }} 2 | apiVersion: policy/v1beta1 3 | kind: PodSecurityPolicy 4 | metadata: 5 | name: {{ template "loki.fullname" . }} 6 | labels: 7 | app: {{ template "loki.name" . }} 8 | chart: {{ template "loki.chart" . }} 9 | heritage: {{ .Release.Service }} 10 | release: {{ .Release.Name }} 11 | spec: 12 | privileged: false 13 | allowPrivilegeEscalation: false 14 | volumes: 15 | - 'configMap' 16 | - 'emptyDir' 17 | - 'persistentVolumeClaim' 18 | - 'secret' 19 | hostNetwork: false 20 | hostIPC: false 21 | hostPID: false 22 | runAsUser: 23 | rule: 'MustRunAsNonRoot' 24 | seLinux: 25 | rule: 'RunAsAny' 26 | supplementalGroups: 27 | rule: 'MustRunAs' 28 | ranges: 29 | - min: 1 30 | max: 65535 31 | fsGroup: 32 | rule: 'MustRunAs' 33 | ranges: 34 | - min: 1 35 | max: 65535 36 | readOnlyRootFilesystem: true 37 | requiredDropCapabilities: 38 | - ALL 39 | {{- end }} 40 | 41 | -------------------------------------------------------------------------------- /charts/loki/templates/role.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.create }} 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: Role 4 | metadata: 5 | name: {{ template "loki.fullname" . }} 6 | labels: 7 | app: {{ template "loki.name" . }} 8 | chart: {{ template "loki.chart" . }} 9 | heritage: {{ .Release.Service }} 10 | release: {{ .Release.Name }} 11 | {{- if .Values.rbac.pspEnabled }} 12 | rules: 13 | - apiGroups: ['extensions'] 14 | resources: ['podsecuritypolicies'] 15 | verbs: ['use'] 16 | resourceNames: [{{ template "loki.fullname" . }}] 17 | {{- end }} 18 | {{- end }} 19 | 20 | -------------------------------------------------------------------------------- /charts/loki/templates/rolebinding.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.create }} 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: RoleBinding 4 | metadata: 5 | name: {{ template "loki.fullname" . }} 6 | labels: 7 | app: {{ template "loki.name" . }} 8 | chart: {{ template "loki.chart" . }} 9 | heritage: {{ .Release.Service }} 10 | release: {{ .Release.Name }} 11 | roleRef: 12 | apiGroup: rbac.authorization.k8s.io 13 | kind: Role 14 | name: {{ template "loki.fullname" . }} 15 | subjects: 16 | - kind: ServiceAccount 17 | name: {{ template "loki.serviceAccountName" . }} 18 | {{- end }} 19 | 20 | -------------------------------------------------------------------------------- /charts/loki/templates/secret.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{ template "loki.fullname" . }} 5 | labels: 6 | app: {{ template "loki.name" . }} 7 | chart: {{ template "loki.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | data: 11 | loki.yaml: {{ tpl (toYaml .Values.config) . | b64enc}} 12 | -------------------------------------------------------------------------------- /charts/loki/templates/service-headless.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ template "loki.fullname" . }}-headless 5 | labels: 6 | app: {{ template "loki.name" . }} 7 | chart: {{ template "loki.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | spec: 11 | clusterIP: None 12 | ports: 13 | - port: {{ .Values.service.port }} 14 | protocol: TCP 15 | name: http-metrics 16 | targetPort: http-metrics 17 | selector: 18 | app: {{ template "loki.name" . }} 19 | release: {{ .Release.Name }} 20 | -------------------------------------------------------------------------------- /charts/loki/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ template "loki.fullname" . }} 5 | labels: 6 | app: {{ template "loki.name" . }} 7 | chart: {{ template "loki.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | {{- with .Values.service.labels }} 11 | {{- toYaml . | nindent 4 }} 12 | {{- end }} 13 | annotations: 14 | {{- toYaml .Values.service.annotations | nindent 4 }} 15 | spec: 16 | type: {{ .Values.service.type }} 17 | {{- if (and (eq .Values.service.type "ClusterIP") (not (empty .Values.service.clusterIP))) }} 18 | clusterIP: {{ .Values.service.clusterIP }} 19 | {{- end }} 20 | ports: 21 | - port: {{ .Values.service.port }} 22 | protocol: TCP 23 | name: http-metrics 24 | targetPort: http-metrics 25 | {{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort))) }} 26 | nodePort: {{ .Values.service.nodePort }} 27 | {{- end }} 28 | selector: 29 | app: {{ template "loki.name" . }} 30 | release: {{ .Release.Name }} 31 | -------------------------------------------------------------------------------- /charts/loki/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create }} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | labels: 6 | app: {{ template "loki.name" . }} 7 | chart: {{ template "loki.chart" . }} 8 | heritage: {{ .Release.Service }} 9 | release: {{ .Release.Name }} 10 | name: {{ template "loki.serviceAccountName" . }} 11 | {{- end }} 12 | 13 | -------------------------------------------------------------------------------- /charts/loki/templates/statefulset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: StatefulSet 3 | metadata: 4 | name: {{ template "loki.fullname" . }} 5 | labels: 6 | app: {{ template "loki.name" . }} 7 | chart: {{ template "loki.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | annotations: 11 | {{- toYaml .Values.annotations | nindent 4 }} 12 | spec: 13 | podManagementPolicy: {{ .Values.podManagementPolicy }} 14 | replicas: {{ .Values.replicas }} 15 | selector: 16 | matchLabels: 17 | app: {{ template "loki.name" . }} 18 | release: {{ .Release.Name }} 19 | serviceName: {{ template "loki.fullname" . }}-headless 20 | updateStrategy: 21 | {{- toYaml .Values.updateStrategy | nindent 4 }} 22 | template: 23 | metadata: 24 | labels: 25 | app: {{ template "loki.name" . }} 26 | name: {{ template "loki.name" . }} 27 | release: {{ .Release.Name }} 28 | {{- with .Values.podLabels }} 29 | {{- toYaml . | nindent 8 }} 30 | {{- end }} 31 | annotations: 32 | checksum/config: {{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }} 33 | {{- with .Values.podAnnotations }} 34 | {{- toYaml . | nindent 8 }} 35 | {{- end }} 36 | spec: 37 | serviceAccountName: {{ template "loki.serviceAccountName" . }} 38 | {{- if .Values.priorityClassName }} 39 | priorityClassName: {{ .Values.priorityClassName }} 40 | {{- end }} 41 | securityContext: 42 | {{- toYaml .Values.securityContext | nindent 8 }} 43 | containers: 44 | - name: {{ .Chart.Name }} 45 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 46 | imagePullPolicy: {{ .Values.image.pullPolicy }} 47 | args: 48 | - "-config.file=/etc/loki/loki.yaml" 49 | {{- range $key, $value := .Values.extraArgs }} 50 | - "-{{ $key }}={{ $value }}" 51 | {{- end }} 52 | volumeMounts: 53 | - name: config 54 | mountPath: /etc/loki 55 | - name: storage 56 | mountPath: "/data" 57 | subPath: {{ .Values.persistence.subPath }} 58 | ports: 59 | - name: http-metrics 60 | containerPort: {{ .Values.config.server.http_listen_port }} 61 | protocol: TCP 62 | livenessProbe: 63 | {{- toYaml .Values.livenessProbe | nindent 12 }} 64 | readinessProbe: 65 | {{- toYaml .Values.readinessProbe | nindent 12 }} 66 | resources: 67 | {{- toYaml .Values.resources | nindent 12 }} 68 | securityContext: 69 | readOnlyRootFilesystem: true 70 | env: 71 | {{- if .Values.tracing.jaegerAgentHost }} 72 | - name: JAEGER_AGENT_HOST 73 | value: "{{ .Values.tracing.jaegerAgentHost }}" 74 | {{- end }} 75 | nodeSelector: 76 | {{- toYaml .Values.nodeSelector | nindent 8 }} 77 | affinity: 78 | {{- toYaml .Values.affinity | nindent 8 }} 79 | tolerations: 80 | {{- toYaml .Values.tolerations | nindent 8 }} 81 | terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }} 82 | volumes: 83 | - name: config 84 | secret: 85 | secretName: {{ template "loki.fullname" . }} 86 | {{- if not .Values.persistence.enabled }} 87 | - name: storage 88 | emptyDir: {} 89 | {{- else if .Values.persistence.existingClaim }} 90 | - name: storage 91 | persistentVolumeClaim: 92 | claimName: {{ .Values.persistence.existingClaim }} 93 | {{- else }} 94 | volumeClaimTemplates: 95 | - metadata: 96 | name: storage 97 | annotations: 98 | {{- toYaml .Values.persistence.annotations | nindent 8 }} 99 | spec: 100 | accessModes: 101 | {{- toYaml .Values.persistence.accessModes | nindent 8 }} 102 | resources: 103 | requests: 104 | storage: {{ .Values.persistence.size | quote }} 105 | storageClassName: {{ .Values.persistence.storageClassName }} 106 | {{- end }} 107 | 108 | -------------------------------------------------------------------------------- /charts/loki/values.yaml: -------------------------------------------------------------------------------- 1 | ## Affinity for pod assignment 2 | ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity 3 | affinity: {} 4 | # podAntiAffinity: 5 | # requiredDuringSchedulingIgnoredDuringExecution: 6 | # - labelSelector: 7 | # matchExpressions: 8 | # - key: app 9 | # operator: In 10 | # values: 11 | # - loki 12 | # topologyKey: "kubernetes.io/hostname" 13 | 14 | ## StatefulSet annotations 15 | annotations: {} 16 | 17 | # enable tracing for debug, need install jaeger and specify right jaeger_agent_host 18 | tracing: 19 | jaegerAgentHost: 20 | 21 | config: 22 | auth_enabled: false 23 | ingester: 24 | chunk_idle_period: 15m 25 | chunk_block_size: 262144 26 | lifecycler: 27 | ring: 28 | kvstore: 29 | store: inmemory 30 | replication_factor: 1 31 | 32 | ## Different ring configs can be used. E.g. Consul 33 | # ring: 34 | # store: consul 35 | # replication_factor: 1 36 | # consul: 37 | # host: "consul:8500" 38 | # prefix: "" 39 | # httpclienttimeout: "20s" 40 | # consistentreads: true 41 | limits_config: 42 | enforce_metric_name: false 43 | reject_old_samples: true 44 | reject_old_samples_max_age: 168h 45 | schema_config: 46 | configs: 47 | - from: 2018-04-15 48 | store: boltdb 49 | object_store: filesystem 50 | schema: v9 51 | index: 52 | prefix: index_ 53 | period: 168h 54 | server: 55 | http_listen_port: 3100 56 | storage_config: 57 | boltdb: 58 | directory: /data/loki/index 59 | filesystem: 60 | directory: /data/loki/chunks 61 | chunk_store_config: 62 | max_look_back_period: 0 63 | table_manager: 64 | retention_deletes_enabled: false 65 | retention_period: 0 66 | 67 | image: 68 | repository: grafana/loki 69 | tag: latest 70 | pullPolicy: Always # Always pull while in BETA 71 | 72 | ## Additional Loki container arguments, e.g. log level (debug, info, warn, error) 73 | extraArgs: {} 74 | # log.level: debug 75 | 76 | livenessProbe: 77 | httpGet: 78 | path: /ready 79 | port: http-metrics 80 | initialDelaySeconds: 45 81 | 82 | ## Enable persistence using Persistent Volume Claims 83 | networkPolicy: 84 | enabled: false 85 | 86 | ## ref: https://kubernetes.io/docs/user-guide/node-selection/ 87 | nodeSelector: {} 88 | 89 | ## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ 90 | ## If you set enabled as "True", you need : 91 | ## - create a pv which above 10Gi and has same namespace with loki 92 | ## - keep storageClassName same with below setting 93 | persistence: 94 | enabled: false 95 | accessModes: 96 | - ReadWriteOnce 97 | size: 10Gi 98 | storageClassName: default 99 | annotations: {} 100 | # subPath: "" 101 | # existingClaim: 102 | 103 | ## Pod Labels 104 | podLabels: {} 105 | 106 | ## Pod Annotations 107 | podAnnotations: 108 | prometheus.io/scrape: "true" 109 | prometheus.io/port: "http-metrics" 110 | 111 | podManagementPolicy: OrderedReady 112 | 113 | ## Assign a PriorityClassName to pods if set 114 | # priorityClassName: 115 | 116 | rbac: 117 | create: true 118 | pspEnabled: true 119 | 120 | readinessProbe: 121 | httpGet: 122 | path: /ready 123 | port: http-metrics 124 | initialDelaySeconds: 45 125 | 126 | replicas: 1 127 | 128 | resources: {} 129 | # limits: 130 | # cpu: 200m 131 | # memory: 256Mi 132 | # requests: 133 | # cpu: 100m 134 | # memory: 128Mi 135 | 136 | securityContext: 137 | fsGroup: 10001 138 | runAsGroup: 10001 139 | runAsNonRoot: true 140 | runAsUser: 10001 141 | 142 | service: 143 | type: ClusterIP 144 | nodePort: 145 | port: 3100 146 | annotations: {} 147 | labels: {} 148 | 149 | serviceAccount: 150 | create: true 151 | name: 152 | 153 | terminationGracePeriodSeconds: 30 154 | 155 | ## Tolerations for pod assignment 156 | ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ 157 | tolerations: [] 158 | 159 | # The values to set in the PodDisruptionBudget spec 160 | # If not set then a PodDisruptionBudget will not be created 161 | podDisruptionBudget: {} 162 | # minAvailable: 1 163 | # maxUnavailable: 1 164 | 165 | updateStrategy: 166 | type: RollingUpdate 167 | -------------------------------------------------------------------------------- /charts/nginx-ingress/Chart.yaml: -------------------------------------------------------------------------------- 1 | description: A Helm chart for Kubernetes 2 | name: nginx-ingress 3 | version: 0.1.0 4 | -------------------------------------------------------------------------------- /charts/nginx-ingress/README.md: -------------------------------------------------------------------------------- 1 | # Nginx Ingress 2 | 3 | This chart deploys an Nginx Ingress Controller Daemon Set at `kube-system` namespace. 4 | 5 | The Daemon Set makes sure that Nginx instance is run on all nodes. It is configured to listen to host ports `80` and `443`. 6 | 7 | One Ingress Controller is handling traffic for all namespaces. 8 | 9 | For more information about the Nginx Ingress Controller see documentation [here](https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/complete-example). 10 | 11 | # Usage Example 12 | 13 | In order to test the Ingress controller, do the following steps: 14 | 15 | * **Install `nginx-ingress` Chart**. This will create the Ingress Controller on `kube-system` namespace. 16 | * **Install `coffee` Chart**. This will install the `coffee` and `tea` deployments on the current namespace. 17 | * **Install `ingress-coffee` Chart**. This will install the `coffee` Ingress and the Secret used for HTTPS connection on the current namespace. 18 | * **Configure your `/etc/hosts`**: Add `cafe.example.com` with the IP of one of your cluster nodes (With minikube do `minikube ip` to get the IP) 19 | * Open https://cafe.example.com/coffee with your favorite browser. 20 | * Open https://cafe.example.com/tea with your favorite browser. 21 | 22 | The first URL redirects to the `coffee` Service and the second URL redirects to the `tea` Service. -------------------------------------------------------------------------------- /charts/nginx-ingress/templates/nginx-ingress-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: DaemonSet 3 | metadata: 4 | name: nginx-ingress-controller 5 | namespace: kube-system 6 | spec: 7 | template: 8 | metadata: 9 | labels: 10 | name: nginx-ingress-controller 11 | spec: 12 | # nodeSelector: 13 | # role: nginx-ingress 14 | containers: 15 | - image: nginxdemos/nginx-ingress:0.3 16 | imagePullPolicy: Always 17 | name: nginx-ingress 18 | ports: 19 | - containerPort: 80 20 | hostPort: 80 21 | - containerPort: 443 22 | hostPort: 443 23 | # Uncomment the lines below to enable extensive logging and/or customization of 24 | # NGINX configuration with configmaps 25 | #args: 26 | #- -v=3 27 | #- -nginx-configmaps=default/nginx-config 28 | -------------------------------------------------------------------------------- /charts/nginx-ingress/templates/nginx-ingress-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: nginx 5 | labels: 6 | name: nginx-ingress-controller 7 | spec: 8 | type: LoadBalancer 9 | ports: 10 | - name: http 11 | port: 80 12 | - name: https 13 | port: 443 14 | selector: 15 | name: nginx-ingress-controller 16 | -------------------------------------------------------------------------------- /charts/nginx-ingress/values.yaml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /charts/nginx/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: nginx 2 | description: 3 Nginx instances under a Service 3 | version: 0.1.0 4 | home: http://nginx.org/ 5 | -------------------------------------------------------------------------------- /charts/nginx/README.md: -------------------------------------------------------------------------------- 1 | # Nginx 2 | 3 | This chart installs three Pods of Nginx and a Service that connects all the Pods. 4 | -------------------------------------------------------------------------------- /charts/nginx/templates/nginx-deployment.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: Deployment 3 | metadata: 4 | name: nginx 5 | spec: 6 | replicas: 3 7 | selector: 8 | matchLabels: 9 | app: nginx 10 | template: 11 | metadata: 12 | labels: 13 | app: nginx 14 | spec: 15 | containers: 16 | - name: nginx 17 | image: nginx:1.10-alpine 18 | ports: 19 | - containerPort: 80 20 | resources: 21 | requests: 22 | cpu: 100m 23 | memory: 100Mi -------------------------------------------------------------------------------- /charts/nginx/templates/nginx-svc.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: nginx 5 | labels: 6 | app: nginx 7 | spec: 8 | type: LoadBalancer 9 | ports: 10 | - name: web 11 | port: 80 12 | selector: 13 | app: nginx 14 | -------------------------------------------------------------------------------- /charts/nginx/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/nginx/values.yaml -------------------------------------------------------------------------------- /charts/persistentvolume-sample/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: persistentvolume-sample 2 | description: Persistent Volume Sample Chart 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/persistentvolume-sample/README.md: -------------------------------------------------------------------------------- 1 | # Sample Persistent Volume 2 | 3 | This chart installs a `pv0001` Persistent Volume in the Cluster. 4 | 5 | This PV is hosted locally inside the Node where the Pod runs at the directory: `/data/tutorial/pv0001/`. 6 | 7 | This means that if the Pod migrates to another Node it will loose the hosted data and start fresh, thus this PV is only recommended for development environments. 8 | 9 | The PV is configured for storage capacity up to `2Gi`. 10 | -------------------------------------------------------------------------------- /charts/persistentvolume-sample/templates/pv-local01.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolume 2 | apiVersion: v1 3 | metadata: 4 | name: pv0001 5 | labels: 6 | type: local 7 | spec: 8 | capacity: 9 | storage: 2Gi 10 | accessModes: 11 | - ReadWriteOnce 12 | hostPath: 13 | path: "/data/tutorial/pv0001/" 14 | persistentVolumeReclaimPolicy: "Recycle" 15 | -------------------------------------------------------------------------------- /charts/persistentvolume-sample/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/persistentvolume-sample/values.yaml -------------------------------------------------------------------------------- /charts/persistentvolumeclaim-sample/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: persistentvolumeclaim-sample 2 | description: Persistent Volume Claim Sample Chart 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/persistentvolumeclaim-sample/README.md: -------------------------------------------------------------------------------- 1 | # Sample Persistent Volume Claim 2 | 3 | This chart installs a `myclaim-1` Persistent Volume Claim. 4 | 5 | The PVC is configured with `ReadWriteOnce` access mode and storage of `2Gi`. -------------------------------------------------------------------------------- /charts/persistentvolumeclaim-sample/templates/pvc-01.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | name: myclaim-1 5 | labels: 6 | temporal: "true" 7 | spec: 8 | accessModes: 9 | - ReadWriteOnce 10 | resources: 11 | requests: 12 | storage: 2Gi 13 | 14 | -------------------------------------------------------------------------------- /charts/persistentvolumeclaim-sample/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/persistentvolumeclaim-sample/values.yaml -------------------------------------------------------------------------------- /charts/pod-hello-world/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: pod-hello-world 2 | description: Outputs "Hello World" and exits. 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/pod-hello-world/README.md: -------------------------------------------------------------------------------- 1 | # Hello World Pod 2 | 3 | This chart installs a `hello-world` Pod. 4 | 5 | Once installed it will run an Alpine OS image, execute an `echo hello world`, output `hello world` on the logs, exit with 0 status code, and will not be restarted. 6 | -------------------------------------------------------------------------------- /charts/pod-hello-world/templates/hello-world.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: hello-world 5 | spec: 6 | restartPolicy: Never 7 | containers: 8 | - name: hello 9 | image: "alpine:3.5" 10 | command: ["echo", "{{.Values.message}}"] 11 | -------------------------------------------------------------------------------- /charts/pod-hello-world/values.yaml: -------------------------------------------------------------------------------- 1 | message: hello world -------------------------------------------------------------------------------- /charts/pod-multi-container/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: pod-multi-container 2 | description: Runs a Pod with two containers, an Nginx instance and an Alpine OS that does curl requests every 2 seconds on the Nginx. 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/pod-multi-container/README.md: -------------------------------------------------------------------------------- 1 | # Multi Container Pod 2 | 3 | This chart will install a `multi-container` Pod. 4 | 5 | The Pod contains two containers: `nginx` and `alpine`. 6 | 7 | - The `nginx` container runs a simple Nginx instance on port `80`. 8 | - The `alpine` container executes a GET request on the Nginx every 2 secs using `wget`. 9 | 10 | Because the two containers run under the same Pod, they run on the same node and also share the same Pod IP, thus the `alpine` instance simply executes requests against `localhost` and since they use the same IP, nginx responds properly. 11 | -------------------------------------------------------------------------------- /charts/pod-multi-container/templates/multi-container-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: multi-container 5 | spec: 6 | terminationGracePeriodSeconds: 0 7 | containers: 8 | - name: nginx 9 | image: nginx:1.10-alpine 10 | ports: 11 | - containerPort: 80 12 | - name: alpine 13 | image: alpine:3.5 14 | command: ["watch", "wget", "-qO-", "localhost"] 15 | -------------------------------------------------------------------------------- /charts/pod-multi-container/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/pod-multi-container/values.yaml -------------------------------------------------------------------------------- /charts/pod-nginx/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: pod-nginx 2 | description: Runs Nginx 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/pod-nginx/README.md: -------------------------------------------------------------------------------- 1 | # Nginx Pod 2 | 3 | This chart installs `nginx` Pod. 4 | 5 | Once installed an Nginx instance is run inside a Pod in the Cluster. 6 | -------------------------------------------------------------------------------- /charts/pod-nginx/templates/nginx-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: nginx 5 | spec: 6 | containers: 7 | - name: nginx 8 | image: nginx:1.10-alpine 9 | ports: 10 | - containerPort: 80 11 | -------------------------------------------------------------------------------- /charts/pod-nginx/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/pod-nginx/values.yaml -------------------------------------------------------------------------------- /charts/promtail/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *~ 18 | # Various IDEs 19 | .project 20 | .idea/ 21 | *.tmproj 22 | .vscode/ 23 | -------------------------------------------------------------------------------- /charts/promtail/Chart.yaml: -------------------------------------------------------------------------------- 1 | appVersion: 0.0.1 2 | description: Responsible for gathering logs and sending them to Loki 3 | engine: gotpl 4 | home: https://grafana.com/loki 5 | icon: https://github.com/grafana/loki/raw/master/docs/logo.png 6 | kubeVersion: ^1.10.0-0 7 | maintainers: 8 | - email: lokiproject@googlegroups.com 9 | name: Loki Maintainers 10 | name: promtail 11 | sources: 12 | - https://github.com/grafana/loki 13 | version: 0.7.3 14 | -------------------------------------------------------------------------------- /charts/promtail/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | Verify the application is working by running these commands: 2 | kubectl --namespace {{ .Release.Namespace }} port-forward daemonset/{{ include "promtail.fullname" . }} {{ .Values.port }} 3 | curl http://127.0.0.1:{{ .Values.port }}/metrics 4 | -------------------------------------------------------------------------------- /charts/promtail/templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "promtail.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | 9 | {{/* 10 | Create a default fully qualified app name. 11 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 12 | If release name contains chart name it will be used as a full name. 13 | */}} 14 | {{- define "promtail.fullname" -}} 15 | {{- if .Values.fullnameOverride -}} 16 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 17 | {{- else -}} 18 | {{- $name := default .Chart.Name .Values.nameOverride -}} 19 | {{- if contains $name .Release.Name -}} 20 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 21 | {{- else -}} 22 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 23 | {{- end -}} 24 | {{- end -}} 25 | {{- end -}} 26 | 27 | {{/* 28 | Create chart name and version as used by the chart label. 29 | */}} 30 | {{- define "promtail.chart" -}} 31 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | 34 | {{/* 35 | Create the name of the service account 36 | */}} 37 | {{- define "promtail.serviceAccountName" -}} 38 | {{- if .Values.serviceAccount.create -}} 39 | {{ default (include "promtail.fullname" .) .Values.serviceAccount.name }} 40 | {{- else -}} 41 | {{ default "default" .Values.serviceAccount.name }} 42 | {{- end -}} 43 | {{- end -}} 44 | 45 | {{/* 46 | The service name to connect to Loki. Defaults to the same logic as "loki.fullname" 47 | */}} 48 | {{- define "loki.serviceName" -}} 49 | {{- if .Values.loki.serviceName -}} 50 | {{- .Values.loki.serviceName -}} 51 | {{- else if .Values.loki.fullnameOverride -}} 52 | {{- .Values.loki.fullnameOverride | trunc 63 | trimSuffix "-" -}} 53 | {{- else -}} 54 | {{- $name := default "loki" .Values.loki.nameOverride -}} 55 | {{- if contains $name .Release.Name -}} 56 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 57 | {{- else -}} 58 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 59 | {{- end -}} 60 | {{- end -}} 61 | {{- end -}} 62 | 63 | -------------------------------------------------------------------------------- /charts/promtail/templates/clusterrole.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.create }} 2 | kind: ClusterRole 3 | apiVersion: rbac.authorization.k8s.io/v1 4 | metadata: 5 | labels: 6 | app: {{ template "promtail.name" . }} 7 | chart: {{ template "promtail.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | name: {{ template "promtail.fullname" . }}-clusterrole 11 | rules: 12 | - apiGroups: [""] # "" indicates the core API group 13 | resources: 14 | - nodes 15 | - nodes/proxy 16 | - services 17 | - endpoints 18 | - pods 19 | verbs: ["get", "watch", "list"] 20 | {{- end }} 21 | -------------------------------------------------------------------------------- /charts/promtail/templates/clusterrolebinding.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.create }} 2 | kind: ClusterRoleBinding 3 | apiVersion: rbac.authorization.k8s.io/v1 4 | metadata: 5 | name: {{ template "promtail.fullname" . }}-clusterrolebinding 6 | labels: 7 | app: {{ template "promtail.name" . }} 8 | chart: {{ template "promtail.chart" . }} 9 | release: {{ .Release.Name }} 10 | heritage: {{ .Release.Service }} 11 | subjects: 12 | - kind: ServiceAccount 13 | name: {{ template "promtail.serviceAccountName" . }} 14 | namespace: {{ .Release.Namespace }} 15 | roleRef: 16 | kind: ClusterRole 17 | name: {{ template "promtail.fullname" . }}-clusterrole 18 | apiGroup: rbac.authorization.k8s.io 19 | {{- end }} 20 | -------------------------------------------------------------------------------- /charts/promtail/templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | name: {{ template "promtail.fullname" . }} 5 | labels: 6 | app: {{ template "promtail.name" . }} 7 | chart: {{ template "promtail.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | data: 11 | promtail.yaml: | 12 | {{- toYaml .Values.config | nindent 4 }} 13 | scrape_configs: 14 | {{- if .Values.scrapeConfigs }} 15 | {{- toYaml .Values.scrapeConfigs | nindent 4 }} 16 | {{- else }} 17 | - job_name: kubernetes-pods-name 18 | pipeline_stages: 19 | {{- toYaml .Values.pipelineStages | nindent 8 }} 20 | kubernetes_sd_configs: 21 | - role: pod 22 | relabel_configs: 23 | - source_labels: 24 | - __meta_kubernetes_pod_label_name 25 | target_label: __service__ 26 | - source_labels: 27 | - __meta_kubernetes_pod_node_name 28 | target_label: __host__ 29 | - action: drop 30 | regex: ^$ 31 | source_labels: 32 | - __service__ 33 | - action: replace 34 | replacement: $1 35 | separator: / 36 | source_labels: 37 | - __meta_kubernetes_namespace 38 | - __service__ 39 | target_label: job 40 | - action: replace 41 | source_labels: 42 | - __meta_kubernetes_namespace 43 | target_label: namespace 44 | - action: replace 45 | source_labels: 46 | - __meta_kubernetes_pod_name 47 | target_label: instance 48 | - action: replace 49 | source_labels: 50 | - __meta_kubernetes_pod_container_name 51 | target_label: container_name 52 | - action: labelmap 53 | regex: __meta_kubernetes_pod_label_(.+) 54 | - replacement: /var/log/pods/*$1/*.log 55 | separator: / 56 | source_labels: 57 | - __meta_kubernetes_pod_uid 58 | - __meta_kubernetes_pod_container_name 59 | target_label: __path__ 60 | - job_name: kubernetes-pods-app 61 | pipeline_stages: 62 | {{- toYaml .Values.pipelineStages | nindent 8 }} 63 | kubernetes_sd_configs: 64 | - role: pod 65 | relabel_configs: 66 | - action: drop 67 | regex: .+ 68 | source_labels: 69 | - __meta_kubernetes_pod_label_name 70 | - source_labels: 71 | - __meta_kubernetes_pod_label_app 72 | target_label: __service__ 73 | - source_labels: 74 | - __meta_kubernetes_pod_node_name 75 | target_label: __host__ 76 | - action: drop 77 | regex: ^$ 78 | source_labels: 79 | - __service__ 80 | - action: replace 81 | replacement: $1 82 | separator: / 83 | source_labels: 84 | - __meta_kubernetes_namespace 85 | - __service__ 86 | target_label: job 87 | - action: replace 88 | source_labels: 89 | - __meta_kubernetes_namespace 90 | target_label: namespace 91 | - action: replace 92 | source_labels: 93 | - __meta_kubernetes_pod_name 94 | target_label: instance 95 | - action: replace 96 | source_labels: 97 | - __meta_kubernetes_pod_container_name 98 | target_label: container_name 99 | - action: labelmap 100 | regex: __meta_kubernetes_pod_label_(.+) 101 | - replacement: /var/log/pods/*$1/*.log 102 | separator: / 103 | source_labels: 104 | - __meta_kubernetes_pod_uid 105 | - __meta_kubernetes_pod_container_name 106 | target_label: __path__ 107 | - job_name: kubernetes-pods-direct-controllers 108 | pipeline_stages: 109 | {{- toYaml .Values.pipelineStages | nindent 8 }} 110 | kubernetes_sd_configs: 111 | - role: pod 112 | relabel_configs: 113 | - action: drop 114 | regex: .+ 115 | separator: '' 116 | source_labels: 117 | - __meta_kubernetes_pod_label_name 118 | - __meta_kubernetes_pod_label_app 119 | - action: drop 120 | regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ 121 | source_labels: 122 | - __meta_kubernetes_pod_controller_name 123 | - source_labels: 124 | - __meta_kubernetes_pod_controller_name 125 | target_label: __service__ 126 | - source_labels: 127 | - __meta_kubernetes_pod_node_name 128 | target_label: __host__ 129 | - action: drop 130 | regex: ^$ 131 | source_labels: 132 | - __service__ 133 | - action: replace 134 | replacement: $1 135 | separator: / 136 | source_labels: 137 | - __meta_kubernetes_namespace 138 | - __service__ 139 | target_label: job 140 | - action: replace 141 | source_labels: 142 | - __meta_kubernetes_namespace 143 | target_label: namespace 144 | - action: replace 145 | source_labels: 146 | - __meta_kubernetes_pod_name 147 | target_label: instance 148 | - action: replace 149 | source_labels: 150 | - __meta_kubernetes_pod_container_name 151 | target_label: container_name 152 | - action: labelmap 153 | regex: __meta_kubernetes_pod_label_(.+) 154 | - replacement: /var/log/pods/*$1/*.log 155 | separator: / 156 | source_labels: 157 | - __meta_kubernetes_pod_uid 158 | - __meta_kubernetes_pod_container_name 159 | target_label: __path__ 160 | - job_name: kubernetes-pods-indirect-controller 161 | pipeline_stages: 162 | {{- toYaml .Values.pipelineStages | nindent 8 }} 163 | kubernetes_sd_configs: 164 | - role: pod 165 | relabel_configs: 166 | - action: drop 167 | regex: .+ 168 | separator: '' 169 | source_labels: 170 | - __meta_kubernetes_pod_label_name 171 | - __meta_kubernetes_pod_label_app 172 | - action: keep 173 | regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ 174 | source_labels: 175 | - __meta_kubernetes_pod_controller_name 176 | - action: replace 177 | regex: ^([0-9a-z-.]+)(-[0-9a-f]{8,10})$ 178 | source_labels: 179 | - __meta_kubernetes_pod_controller_name 180 | target_label: __service__ 181 | - source_labels: 182 | - __meta_kubernetes_pod_node_name 183 | target_label: __host__ 184 | - action: drop 185 | regex: ^$ 186 | source_labels: 187 | - __service__ 188 | - action: replace 189 | replacement: $1 190 | separator: / 191 | source_labels: 192 | - __meta_kubernetes_namespace 193 | - __service__ 194 | target_label: job 195 | - action: replace 196 | source_labels: 197 | - __meta_kubernetes_namespace 198 | target_label: namespace 199 | - action: replace 200 | source_labels: 201 | - __meta_kubernetes_pod_name 202 | target_label: instance 203 | - action: replace 204 | source_labels: 205 | - __meta_kubernetes_pod_container_name 206 | target_label: container_name 207 | - action: labelmap 208 | regex: __meta_kubernetes_pod_label_(.+) 209 | - replacement: /var/log/pods/*$1/*.log 210 | separator: / 211 | source_labels: 212 | - __meta_kubernetes_pod_uid 213 | - __meta_kubernetes_pod_container_name 214 | target_label: __path__ 215 | - job_name: kubernetes-pods-static 216 | pipeline_stages: 217 | {{- toYaml .Values.pipelineStages | nindent 8 }} 218 | kubernetes_sd_configs: 219 | - role: pod 220 | relabel_configs: 221 | - action: drop 222 | regex: ^$ 223 | source_labels: 224 | - __meta_kubernetes_pod_annotation_kubernetes_io_config_mirror 225 | - action: replace 226 | source_labels: 227 | - __meta_kubernetes_pod_label_component 228 | target_label: __service__ 229 | - source_labels: 230 | - __meta_kubernetes_pod_node_name 231 | target_label: __host__ 232 | - action: drop 233 | regex: ^$ 234 | source_labels: 235 | - __service__ 236 | - action: replace 237 | replacement: $1 238 | separator: / 239 | source_labels: 240 | - __meta_kubernetes_namespace 241 | - __service__ 242 | target_label: job 243 | - action: replace 244 | source_labels: 245 | - __meta_kubernetes_namespace 246 | target_label: namespace 247 | - action: replace 248 | source_labels: 249 | - __meta_kubernetes_pod_name 250 | target_label: instance 251 | - action: replace 252 | source_labels: 253 | - __meta_kubernetes_pod_container_name 254 | target_label: container_name 255 | - action: labelmap 256 | regex: __meta_kubernetes_pod_label_(.+) 257 | - replacement: /var/log/pods/*$1/*.log 258 | separator: / 259 | source_labels: 260 | - __meta_kubernetes_pod_annotation_kubernetes_io_config_mirror 261 | - __meta_kubernetes_pod_container_name 262 | target_label: __path__ 263 | {{- end }} 264 | -------------------------------------------------------------------------------- /charts/promtail/templates/daemonset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: apps/v1 2 | kind: DaemonSet 3 | metadata: 4 | name: {{ template "promtail.fullname" . }} 5 | labels: 6 | app: {{ template "promtail.name" . }} 7 | chart: {{ template "promtail.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | annotations: 11 | {{- toYaml .Values.annotations | nindent 4 }} 12 | spec: 13 | selector: 14 | matchLabels: 15 | app: {{ template "promtail.name" . }} 16 | release: {{ .Release.Name }} 17 | updateStrategy: 18 | type: {{ .Values.deploymentStrategy }} 19 | {{- if ne .Values.deploymentStrategy "RollingUpdate" }} 20 | rollingUpdate: null 21 | {{- end }} 22 | template: 23 | metadata: 24 | labels: 25 | app: {{ template "promtail.name" . }} 26 | release: {{ .Release.Name }} 27 | {{- with .Values.podLabels }} 28 | {{- toYaml . | nindent 8 }} 29 | {{- end }} 30 | annotations: 31 | checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} 32 | {{- with .Values.podAnnotations }} 33 | {{- toYaml . | nindent 8 }} 34 | {{- end }} 35 | spec: 36 | serviceAccountName: {{ template "promtail.serviceAccountName" . }} 37 | {{- if .Values.priorityClassName }} 38 | priorityClassName: {{ .Values.priorityClassName }} 39 | {{- end }} 40 | containers: 41 | - name: promtail 42 | image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" 43 | imagePullPolicy: {{ .Values.image.pullPolicy }} 44 | args: 45 | - "-config.file=/etc/promtail/promtail.yaml" 46 | {{- if and .Values.loki.user .Values.loki.password }} 47 | - "-client.url={{ .Values.loki.serviceScheme }}://{{ .Values.loki.user }}:{{ .Values.loki.password }}@{{ include "loki.serviceName" . }}:{{ .Values.loki.servicePort }}/api/prom/push" 48 | {{- else }} 49 | - "-client.url={{ .Values.loki.serviceScheme }}://{{ include "loki.serviceName" . }}:{{ .Values.loki.servicePort }}/api/prom/push" 50 | {{- end }} 51 | volumeMounts: 52 | - name: config 53 | mountPath: /etc/promtail 54 | - name: run 55 | mountPath: /run/promtail 56 | {{- with .Values.volumeMounts }} 57 | {{- toYaml . | nindent 12 }} 58 | {{- end }} 59 | env: 60 | - name: HOSTNAME 61 | valueFrom: 62 | fieldRef: 63 | fieldPath: spec.nodeName 64 | ports: 65 | - containerPort: {{ .Values.port }} 66 | name: http-metrics 67 | securityContext: 68 | {{- toYaml .Values.securityContext | nindent 12 }} 69 | {{- if .Values.livenessProbe }} 70 | livenessProbe: 71 | {{- toYaml .Values.livenessProbe | nindent 12 }} 72 | {{- end }} 73 | {{- if .Values.readinessProbe }} 74 | readinessProbe: 75 | {{- toYaml .Values.readinessProbe | nindent 12 }} 76 | {{- end }} 77 | resources: 78 | {{- toYaml .Values.resources | nindent 12 }} 79 | nodeSelector: 80 | {{- toYaml .Values.nodeSelector | nindent 8 }} 81 | affinity: 82 | {{- toYaml .Values.affinity | nindent 8 }} 83 | tolerations: 84 | {{- toYaml .Values.tolerations | nindent 8 }} 85 | volumes: 86 | - name: config 87 | configMap: 88 | name: {{ template "promtail.fullname" . }} 89 | - name: run 90 | hostPath: 91 | path: /run/promtail 92 | {{- with .Values.volumes }} 93 | {{- toYaml . | nindent 8 }} 94 | {{- end }} 95 | 96 | -------------------------------------------------------------------------------- /charts/promtail/templates/podsecuritypolicy.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.pspEnabled }} 2 | apiVersion: policy/v1beta1 3 | kind: PodSecurityPolicy 4 | metadata: 5 | name: {{ template "promtail.fullname" . }} 6 | labels: 7 | app: {{ template "promtail.name" . }} 8 | chart: {{ template "promtail.chart" . }} 9 | heritage: {{ .Release.Service }} 10 | release: {{ .Release.Name }} 11 | spec: 12 | privileged: false 13 | allowPrivilegeEscalation: false 14 | volumes: 15 | - 'secret' 16 | - 'configMap' 17 | - 'hostPath' 18 | hostNetwork: false 19 | hostIPC: false 20 | hostPID: false 21 | runAsUser: 22 | rule: 'RunAsAny' 23 | seLinux: 24 | rule: 'RunAsAny' 25 | supplementalGroups: 26 | rule: 'RunAsAny' 27 | fsGroup: 28 | rule: 'RunAsAny' 29 | readOnlyRootFilesystem: true 30 | requiredDropCapabilities: 31 | - ALL 32 | {{- end }} 33 | -------------------------------------------------------------------------------- /charts/promtail/templates/role.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.create }} 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: Role 4 | metadata: 5 | name: {{ template "promtail.fullname" . }} 6 | labels: 7 | app: {{ template "promtail.name" . }} 8 | chart: {{ template "promtail.chart" . }} 9 | heritage: {{ .Release.Service }} 10 | release: {{ .Release.Name }} 11 | {{- if .Values.rbac.pspEnabled }} 12 | rules: 13 | - apiGroups: ['extensions'] 14 | resources: ['podsecuritypolicies'] 15 | verbs: ['use'] 16 | resourceNames: [{{ template "promtail.fullname" . }}] 17 | {{- end }} 18 | {{- end }} 19 | -------------------------------------------------------------------------------- /charts/promtail/templates/rolebinding.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.rbac.create }} 2 | apiVersion: rbac.authorization.k8s.io/v1 3 | kind: RoleBinding 4 | metadata: 5 | name: {{ template "promtail.fullname" . }} 6 | labels: 7 | app: {{ template "promtail.name" . }} 8 | chart: {{ template "promtail.chart" . }} 9 | heritage: {{ .Release.Service }} 10 | release: {{ .Release.Name }} 11 | roleRef: 12 | apiGroup: rbac.authorization.k8s.io 13 | kind: Role 14 | name: {{ template "promtail.fullname" . }} 15 | subjects: 16 | - kind: ServiceAccount 17 | name: {{ template "promtail.serviceAccountName" . }} 18 | {{- end }} 19 | 20 | -------------------------------------------------------------------------------- /charts/promtail/templates/serviceaccount.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.serviceAccount.create }} 2 | apiVersion: v1 3 | kind: ServiceAccount 4 | metadata: 5 | labels: 6 | app: {{ template "promtail.name" . }} 7 | chart: {{ template "promtail.chart" . }} 8 | heritage: {{ .Release.Service }} 9 | release: {{ .Release.Name }} 10 | name: {{ template "promtail.serviceAccountName" . }} 11 | {{- end }} 12 | 13 | -------------------------------------------------------------------------------- /charts/promtail/values.yaml: -------------------------------------------------------------------------------- 1 | ## Affinity for pod assignment 2 | ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity 3 | affinity: {} 4 | 5 | annotations: {} 6 | 7 | deploymentStrategy: RollingUpdate 8 | 9 | image: 10 | repository: grafana/promtail 11 | tag: latest 12 | pullPolicy: Always # Always pull while in BETA 13 | 14 | livenessProbe: {} 15 | 16 | loki: 17 | serviceName: "" # Defaults to "${RELEASE}-loki" if not set 18 | servicePort: 3100 19 | serviceScheme: http 20 | # user: user 21 | # password: pass 22 | 23 | nameOverride: promtail 24 | 25 | ## Node labels for pod assignment 26 | ## ref: https://kubernetes.io/docs/user-guide/node-selection/ 27 | nodeSelector: {} 28 | 29 | pipelineStages: 30 | - docker: {} 31 | 32 | ## Pod Labels 33 | podLabels: {} 34 | 35 | podAnnotations: 36 | prometheus.io/scrape: "true" 37 | prometheus.io/port: "http-metrics" 38 | 39 | # This should match config.server.http_listen_port 40 | port: 3101 41 | 42 | ## Assign a PriorityClassName to pods if set 43 | # priorityClassName: 44 | 45 | rbac: 46 | create: true 47 | pspEnabled: true 48 | 49 | readinessProbe: 50 | failureThreshold: 5 51 | httpGet: 52 | path: /ready 53 | port: http-metrics 54 | initialDelaySeconds: 10 55 | periodSeconds: 10 56 | successThreshold: 1 57 | timeoutSeconds: 1 58 | 59 | resources: {} 60 | # limits: 61 | # cpu: 200m 62 | # memory: 128Mi 63 | # requests: 64 | # cpu: 100m 65 | # memory: 128Mi 66 | 67 | # Custom scrape_configs to override the default ones in the configmap 68 | scrapeConfigs: [] 69 | 70 | securityContext: 71 | readOnlyRootFilesystem: true 72 | runAsGroup: 0 73 | runAsUser: 0 74 | 75 | serviceAccount: 76 | create: true 77 | name: 78 | 79 | ## Tolerations for pod assignment 80 | ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ 81 | tolerations: 82 | - key: node-role.kubernetes.io/master 83 | effect: NoSchedule 84 | 85 | # Extra volumes to scrape logs from 86 | volumes: 87 | - name: docker 88 | hostPath: 89 | path: /var/lib/docker/containers 90 | - name: pods 91 | hostPath: 92 | path: /var/log/pods 93 | 94 | volumeMounts: 95 | - name: docker 96 | mountPath: /var/lib/docker/containers 97 | readOnly: true 98 | - name: pods 99 | mountPath: /var/log/pods 100 | readOnly: true 101 | 102 | config: 103 | client: 104 | # Maximum wait period before sending batch 105 | batchwait: 1s 106 | # Maximum batch size to accrue before sending, unit is byte 107 | batchsize: 102400 108 | 109 | # Maximum time to wait for server to respond to a request 110 | timeout: 10s 111 | 112 | backoff_config: 113 | # Initial backoff time between retries 114 | minbackoff: 100ms 115 | # Maximum backoff time between retries 116 | maxbackoff: 5s 117 | # Maximum number of retires when sending batches, 0 means infinite retries 118 | maxretries: 5 119 | 120 | # The labels to add to any time series or alerts when communicating with loki 121 | external_labels: {} 122 | 123 | server: 124 | http_listen_port: 3101 125 | positions: 126 | filename: /run/promtail/positions.yaml 127 | target_config: 128 | # Period to resync directories being watched and files being tailed 129 | sync_period: 10s 130 | 131 | -------------------------------------------------------------------------------- /charts/replicaset-nginx/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: replicaset-nginx 2 | description: Runs 2 Nginx instances using Replica Set 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/replicaset-nginx/README.md: -------------------------------------------------------------------------------- 1 | # Nginx Replica Set 2 | 3 | This chart installs a `nginx` Replica Set with two replicas. 4 | 5 | The Replica Set is responsible for creating two Pods with an Nginx instance each. 6 | -------------------------------------------------------------------------------- /charts/replicaset-nginx/templates/nginx-replicaset.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: extensions/v1beta1 2 | kind: ReplicaSet 3 | metadata: 4 | name: nginx 5 | spec: 6 | replicas: 2 7 | selector: 8 | matchLabels: 9 | app: nginx 10 | template: replicaset 11 | matchExpressions: 12 | - {key: app, operator: In, values: [nginx]} 13 | template: 14 | metadata: 15 | labels: 16 | app: nginx 17 | template: replicaset 18 | spec: 19 | containers: 20 | - name: nginx 21 | image: nginx:1.10-alpine 22 | ports: 23 | - containerPort: 80 24 | resources: 25 | requests: 26 | cpu: 100m 27 | memory: 100Mi -------------------------------------------------------------------------------- /charts/replicaset-nginx/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/replicaset-nginx/values.yaml -------------------------------------------------------------------------------- /charts/resourcequota-sample/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: resourcequota-sample 2 | description: Resource Quotas Sample chart 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/resourcequota-sample/README.md: -------------------------------------------------------------------------------- 1 | # Sample Resource Quota 2 | 3 | This chart installs `object-counts` Resource Quota. 4 | 5 | Once installed the Cluster's Namespace will have hard limits how many objects can exist on that Namespace. 6 | 7 | For example there can only exist 4 Pods on the Namespace. If the number of existing Pods exceeds the hard limit, no actions will be taken to existing Pods, but no more Pods will be able to be created. If the number of existing Pods is less than the hard limit, Pods will be able to be created up to the number of hard limit. 8 | -------------------------------------------------------------------------------- /charts/resourcequota-sample/templates/quotas-sample.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ResourceQuota 3 | metadata: 4 | name: object-counts 5 | spec: 6 | hard: 7 | pods: "4" 8 | configmaps: "10" 9 | persistentvolumeclaims: "4" 10 | replicationcontrollers: "20" 11 | secrets: "10" 12 | services: "10" 13 | services.loadbalancers: "2" 14 | 15 | -------------------------------------------------------------------------------- /charts/resourcequota-sample/values.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/charts/resourcequota-sample/values.yaml -------------------------------------------------------------------------------- /charts/secret-sample/Chart.yaml: -------------------------------------------------------------------------------- 1 | name: secret-sample 2 | description: Secret Sample 3 | version: 0.1.0 4 | home: https://github.com/harbur/kubernetic-charts 5 | -------------------------------------------------------------------------------- /charts/secret-sample/README.md: -------------------------------------------------------------------------------- 1 | # Sample Secret 2 | 3 | This Chart installs a dynamically created Secret and a Pod that consumes the secret. 4 | 5 | We don't want to store sensitive information under version control, and since Charts are stored under version control we want to avoid exposing them. So instead of creating a password and storing it inside the Chart, we'll generate it on-the-fly during deployment. 6 | 7 | Here is the Secret definition: 8 | 9 | ``` 10 | apiVersion: v1 11 | kind: Secret 12 | metadata: 13 | name: "{{.Release.Name}}-secret" 14 | annotations: 15 | "helm.sh/hook": pre-install 16 | type: Opaque 17 | data: 18 | password: {{ b64enc (randAlphaNum 32) }} 19 | username: {{ b64enc "user1" }} 20 | ``` 21 | 22 | Charts are written in [Helm](https://github.com/kubernetes/helm/) format, and they support various [template functions](https://github.com/kubernetes/helm/blob/master/docs/charts.md#templates-and-values). Here is a [list](https://github.com/Masterminds/sprig) of some functions. 23 | 24 | * The `.Release.Name` is resolved during the deployment of the release. This enables to have multiple Chart releases on the same namespace. 25 | * In our scenario we'll use `randAlphaNum 32` to generate a random alpha-numeric string of 32 characters. 26 | * Secret values are stored in base64 inside Kubernetes, so we wrap the command with `b64enc` function. 27 | * We want the secret to be deployed before deploying the accompanying Pod, so we add a special Helm annotation `"helm.sh/hook": pre-install` to activate a [Hook](https://github.com/kubernetes/helm/blob/master/docs/charts.md#hooks). Note that the secret will not be deleted automatically when the release is deleted and it needs to be handled separately. 28 | 29 | Here is the Pod definition inside the same Chart: 30 | 31 | ``` 32 | apiVersion: v1 33 | kind: Pod 34 | metadata: 35 | name: "{{.Release.Name}}-pod" 36 | spec: 37 | terminationGracePeriodSeconds: 0 38 | restartPolicy: Never 39 | containers: 40 | - name: alpine 41 | image: alpine:3.5 42 | command: ["echo", "hello $(password)"] 43 | env: 44 | - name: password 45 | valueFrom: 46 | secretKeyRef: 47 | name: {{.Release.Name}}-secret 48 | key: password 49 | ``` 50 | 51 | The Pod runs with environment `password` variable filled by the dynamically generated secret's `password` key value. 52 | -------------------------------------------------------------------------------- /charts/secret-sample/templates/env-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: {{.Release.Name}}-env 5 | spec: 6 | terminationGracePeriodSeconds: 0 7 | restartPolicy: Never 8 | containers: 9 | - name: alpine 10 | image: alpine:3.5 11 | command: ["echo", "hello $(password)"] 12 | env: 13 | - name: password 14 | valueFrom: 15 | secretKeyRef: 16 | name: {{.Release.Name}} 17 | key: password 18 | -------------------------------------------------------------------------------- /charts/secret-sample/templates/secret-sample.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Secret 3 | metadata: 4 | name: {{.Release.Name}} 5 | type: Opaque 6 | data: 7 | password: {{ b64enc (randAlphaNum 32) }} 8 | username: {{ b64enc "user1" }} 9 | secret-file: {{ .Values.SecretFileContent }} -------------------------------------------------------------------------------- /charts/secret-sample/templates/volumeMount-pod.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: {{.Release.Name}}-volume-mount 5 | spec: 6 | terminationGracePeriodSeconds: 0 7 | restartPolicy: Never 8 | containers: 9 | - name: alpine 10 | image: alpine:3.5 11 | command: ["cat", "/secret/secret-file"] 12 | volumeMounts: 13 | - mountPath: /secret 14 | name: secret 15 | volumes: 16 | - name: secret 17 | secret: 18 | secretName: {{ .Release.Name }} 19 | -------------------------------------------------------------------------------- /charts/secret-sample/values.yaml: -------------------------------------------------------------------------------- 1 | # To add a binary-format secret file do `cat filename|base64` and copy the content on the variable below 2 | SecretFileContent: aGVsbG8gd29ybGQK -------------------------------------------------------------------------------- /docs/coffee-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/coffee-0.1.0.tgz -------------------------------------------------------------------------------- /docs/configmap-sample-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/configmap-sample-0.1.0.tgz -------------------------------------------------------------------------------- /docs/daemonset-sample-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/daemonset-sample-0.1.0.tgz -------------------------------------------------------------------------------- /docs/deployment-nginx-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/deployment-nginx-0.1.0.tgz -------------------------------------------------------------------------------- /docs/ghost-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/ghost-0.1.0.tgz -------------------------------------------------------------------------------- /docs/index.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | entries: 3 | coffee: 4 | - created: 2017-04-24T14:20:21.612100527+02:00 5 | description: Two example deployments, coffee and tea. 6 | digest: c59265221948bf6f5b0cf6bbb57a7b33b03bfdbbfba28817ddff2af1431b7f6d 7 | name: coffee 8 | urls: 9 | - https://harbur.github.io/kubernetic-charts/coffee-0.1.0.tgz 10 | version: 0.1.0 11 | configmap-sample: 12 | - created: 2017-04-24T14:20:21.6128511+02:00 13 | description: Config Map Sample Chart 14 | digest: c4c4b4e72daab2eab0c02e614e9c50d6b5f946ee9bbd4be16772443a93dea0ad 15 | home: https://github.com/harbur/kubernetic-charts 16 | name: configmap-sample 17 | urls: 18 | - https://harbur.github.io/kubernetic-charts/configmap-sample-0.1.0.tgz 19 | version: 0.1.0 20 | daemonset-sample: 21 | - created: 2017-04-24T14:20:21.613246679+02:00 22 | description: Runs one Nginx instance in each Node. 23 | digest: 15b371f3d2e2a0a79764430c8496e9c8a2628b0dc3290a8a8018ea32c922c1e5 24 | home: https://github.com/harbur/kubernetic-charts 25 | name: daemonset-sample 26 | urls: 27 | - https://harbur.github.io/kubernetic-charts/daemonset-sample-0.1.0.tgz 28 | version: 0.1.0 29 | deployment-nginx: 30 | - created: 2017-04-24T14:20:21.613657629+02:00 31 | description: Runs 2 Nginx instances using Deployment 32 | digest: 88f56b08fadab70a5dd26461246b1df4c30f1831a74c1af7e7191a7d5e2ddc55 33 | home: https://github.com/harbur/kubernetic-charts 34 | name: deployment-nginx 35 | urls: 36 | - https://harbur.github.io/kubernetic-charts/deployment-nginx-0.1.0.tgz 37 | version: 0.1.0 38 | ghost: 39 | - created: 2017-04-24T14:20:21.61404539+02:00 40 | description: Blog powered by Ghost engine 41 | digest: 94d5479c7066159bd97e35c74fa9559e4299131660b6b06eb2c9747423c8f08c 42 | home: https://ghost.org/ 43 | name: ghost 44 | urls: 45 | - https://harbur.github.io/kubernetic-charts/ghost-0.1.0.tgz 46 | version: 0.1.0 47 | ingress-coffee: 48 | - created: 2017-04-24T14:20:21.614689719+02:00 49 | description: A Helm chart for Kubernetes 50 | digest: 9df1dabc5ad0c94dd066ce2f8172e1401676f9c5343d6249ec70aa1b3e69ec85 51 | name: ingress-coffee 52 | urls: 53 | - https://harbur.github.io/kubernetic-charts/ingress-coffee-0.1.0.tgz 54 | version: 0.1.0 55 | job-sample: 56 | - created: 2017-04-24T14:20:21.61517875+02:00 57 | description: Runs a batch job of 10 instances, with a max of 3 in parallel. 58 | digest: 46c3501fd200743f662a89c87d82401f1485583996da61fc17ee9d75046a478f 59 | home: https://github.com/harbur/kubernetic-charts 60 | name: job-sample 61 | urls: 62 | - https://harbur.github.io/kubernetic-charts/job-sample-0.1.0.tgz 63 | version: 0.1.0 64 | limitrange-sample: 65 | - created: 2017-04-24T14:20:21.61557532+02:00 66 | description: Limit Range Sample Chart 67 | digest: 76ead391ab61b3cb526cff692182eaf65815a07f180978ddab26e27b4e9f77ee 68 | home: https://github.com/harbur/kubernetic-charts 69 | name: limitrange-sample 70 | urls: 71 | - https://harbur.github.io/kubernetic-charts/limitrange-sample-0.1.0.tgz 72 | version: 0.1.0 73 | nginx: 74 | - created: 2017-04-24T14:20:21.616020862+02:00 75 | description: 3 Nginx instances under a Service 76 | digest: 0fc7e244c36ea74949c1bc2ec4c9f234a8c0c83d8af2d82edc79a6688e089dc5 77 | home: http://nginx.org/ 78 | name: nginx 79 | urls: 80 | - https://harbur.github.io/kubernetic-charts/nginx-0.1.0.tgz 81 | version: 0.1.0 82 | nginx-ingress: 83 | - created: 2017-04-24T14:20:21.616427481+02:00 84 | description: A Helm chart for Kubernetes 85 | digest: 591fa4d62903c5ac60d06cdd35c7da24d93faeb7573fc1a348d10dce8ba2990c 86 | name: nginx-ingress 87 | urls: 88 | - https://harbur.github.io/kubernetic-charts/nginx-ingress-0.1.0.tgz 89 | version: 0.1.0 90 | persistentvolume-sample: 91 | - created: 2017-04-24T14:20:21.61679801+02:00 92 | description: Persistent Volume Sample Chart 93 | digest: 8b8d14e8debfc7529c5214b3074e133eb9f862795bd3d929cc16bc2566ef400d 94 | home: https://github.com/harbur/kubernetic-charts 95 | name: persistentvolume-sample 96 | urls: 97 | - https://harbur.github.io/kubernetic-charts/persistentvolume-sample-0.1.0.tgz 98 | version: 0.1.0 99 | persistentvolumeclaim-sample: 100 | - created: 2017-04-24T14:20:21.617131751+02:00 101 | description: Persistent Volume Claim Sample Chart 102 | digest: 53dd6a88a454400bf20f3e69d64d27900eed635ae99bdc12c294f90f4c3fff00 103 | home: https://github.com/harbur/kubernetic-charts 104 | name: persistentvolumeclaim-sample 105 | urls: 106 | - https://harbur.github.io/kubernetic-charts/persistentvolumeclaim-sample-0.1.0.tgz 107 | version: 0.1.0 108 | pod-hello-world: 109 | - created: 2017-04-24T14:20:21.617724513+02:00 110 | description: Outputs "Hello World" and exits. 111 | digest: 632e2bce6299993ee0c06525f352ae0539d35a9b72efa3df412ee2b69444a041 112 | home: https://github.com/harbur/kubernetic-charts 113 | name: pod-hello-world 114 | urls: 115 | - https://harbur.github.io/kubernetic-charts/pod-hello-world-0.1.0.tgz 116 | version: 0.1.0 117 | pod-multi-container: 118 | - created: 2017-04-24T14:20:21.619003099+02:00 119 | description: Runs a Pod with two containers, an Nginx instance and an Alpine OS 120 | that does curl requests every 2 seconds on the Nginx. 121 | digest: 6248b2ccc33fb852225fd183e087613fe29e61890ed6cc6074ee133cd43bf873 122 | home: https://github.com/harbur/kubernetic-charts 123 | name: pod-multi-container 124 | urls: 125 | - https://harbur.github.io/kubernetic-charts/pod-multi-container-0.1.0.tgz 126 | version: 0.1.0 127 | pod-nginx: 128 | - created: 2017-04-24T14:20:21.619425057+02:00 129 | description: Runs Nginx 130 | digest: 35ee2903c2f9d0476b843324fe5a38d3696592ceea5a1047aa3008342e29fff5 131 | home: https://github.com/harbur/kubernetic-charts 132 | name: pod-nginx 133 | urls: 134 | - https://harbur.github.io/kubernetic-charts/pod-nginx-0.1.0.tgz 135 | version: 0.1.0 136 | replicaset-nginx: 137 | - created: 2017-04-24T14:20:21.619780966+02:00 138 | description: Runs 2 Nginx instances using Replica Set 139 | digest: a02d2e42971b38706de679d3a94b63637f4f64ea6e14fb2e78a60b5561d7a747 140 | home: https://github.com/harbur/kubernetic-charts 141 | name: replicaset-nginx 142 | urls: 143 | - https://harbur.github.io/kubernetic-charts/replicaset-nginx-0.1.0.tgz 144 | version: 0.1.0 145 | resourcequota-sample: 146 | - created: 2017-04-24T14:20:21.620152014+02:00 147 | description: Resource Quotas Sample chart 148 | digest: 9e94a3cdb9a20c341393d4593aca7ca94bee58957ff328815292033def38fd54 149 | home: https://github.com/harbur/kubernetic-charts 150 | name: resourcequota-sample 151 | urls: 152 | - https://harbur.github.io/kubernetic-charts/resourcequota-sample-0.1.0.tgz 153 | version: 0.1.0 154 | secret-sample: 155 | - created: 2017-04-24T14:20:21.620535948+02:00 156 | description: Secret Sample 157 | digest: fd22338ea91e695bf5536b93c6bd6b9143911256081704cef81a51d3a3c41840 158 | home: https://github.com/harbur/kubernetic-charts 159 | name: secret-sample 160 | urls: 161 | - https://harbur.github.io/kubernetic-charts/secret-sample-0.1.0.tgz 162 | version: 0.1.0 163 | generated: 2017-04-24T14:20:21.609829282+02:00 164 | -------------------------------------------------------------------------------- /docs/ingress-coffee-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/ingress-coffee-0.1.0.tgz -------------------------------------------------------------------------------- /docs/job-sample-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/job-sample-0.1.0.tgz -------------------------------------------------------------------------------- /docs/limitrange-sample-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/limitrange-sample-0.1.0.tgz -------------------------------------------------------------------------------- /docs/nginx-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/nginx-0.1.0.tgz -------------------------------------------------------------------------------- /docs/nginx-ingress-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/nginx-ingress-0.1.0.tgz -------------------------------------------------------------------------------- /docs/persistentvolume-sample-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/persistentvolume-sample-0.1.0.tgz -------------------------------------------------------------------------------- /docs/persistentvolumeclaim-sample-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/persistentvolumeclaim-sample-0.1.0.tgz -------------------------------------------------------------------------------- /docs/pod-hello-world-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/pod-hello-world-0.1.0.tgz -------------------------------------------------------------------------------- /docs/pod-multi-container-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/pod-multi-container-0.1.0.tgz -------------------------------------------------------------------------------- /docs/pod-nginx-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/pod-nginx-0.1.0.tgz -------------------------------------------------------------------------------- /docs/replicaset-nginx-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/replicaset-nginx-0.1.0.tgz -------------------------------------------------------------------------------- /docs/resourcequota-sample-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/resourcequota-sample-0.1.0.tgz -------------------------------------------------------------------------------- /docs/secret-sample-0.1.0.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/harbur/kubernetic-charts-legacy/86c26b82ef5cbcb8d0c6370965dcdf09e77eec1f/docs/secret-sample-0.1.0.tgz --------------------------------------------------------------------------------