add portainer
This commit is contained in:
parent
86b55d67d0
commit
3332c3ff9c
25
portainer/hassingress.yaml
Normal file
25
portainer/hassingress.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: hassingress
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
haproxy.org/whitelist: "192.168.86.0/24,10.233.71.0/24"
|
||||||
|
spec:
|
||||||
|
ingressClassName: haproxy
|
||||||
|
rules:
|
||||||
|
- host: "home.geesink.org"
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: hasssvc
|
||||||
|
port:
|
||||||
|
number: 8123
|
||||||
|
tls:
|
||||||
|
-
|
||||||
|
secretName: hass-cert-prod
|
||||||
|
hosts:
|
||||||
|
- home.geesink.org
|
45
portainer/ingress_zoals_het_werkt
Normal file
45
portainer/ingress_zoals_het_werkt
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# Please edit the object below. Lines beginning with a '#' will be ignored,
|
||||||
|
# and an empty file will abort the edit. If an error occurs while saving this file will be
|
||||||
|
# reopened with the relevant failures.
|
||||||
|
#
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
kubernetes.io/ingress.class: haproxy
|
||||||
|
meta.helm.sh/release-name: portainer
|
||||||
|
meta.helm.sh/release-namespace: portainer
|
||||||
|
creationTimestamp: "2023-05-31T18:17:22Z"
|
||||||
|
generation: 7
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/instance: portainer
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
app.kubernetes.io/name: portainer
|
||||||
|
app.kubernetes.io/version: ce-latest-ee-2.18.3
|
||||||
|
helm.sh/chart: portainer-1.0.43
|
||||||
|
name: portainer
|
||||||
|
namespace: portainer
|
||||||
|
resourceVersion: "17547843"
|
||||||
|
uid: 2471a902-9fad-49af-a56b-9d4173b562c9
|
||||||
|
spec:
|
||||||
|
ingressClassName: haproxy
|
||||||
|
rules:
|
||||||
|
- host: portainer.geesink.org
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: portainer
|
||||||
|
port:
|
||||||
|
number: 9443
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- portainer.geesink.org
|
||||||
|
secretName: portainer-cert-prod
|
||||||
|
status:
|
||||||
|
loadBalancer:
|
||||||
|
ingress:
|
||||||
|
- ip: 10.86.0.100
|
6
portainer/install
Normal file
6
portainer/install
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
helm upgrade --install --create-namespace -n portainer portainer portainer/portainer \
|
||||||
|
--set service.type=ClusterIP \
|
||||||
|
--set tls.force=true \
|
||||||
|
--set ingress.enabled=true \
|
||||||
|
--set ingress.ingressClassName=haproxy
|
||||||
|
|
BIN
portainer/portainer-1.0.43.tgz
Normal file
BIN
portainer/portainer-1.0.43.tgz
Normal file
Binary file not shown.
22
portainer/portainer/.helmignore
Normal file
22
portainer/portainer/.helmignore
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
14
portainer/portainer/Chart.yaml
Normal file
14
portainer/portainer/Chart.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
appVersion: ce-latest-ee-2.18.3
|
||||||
|
description: Helm chart used to deploy the Portainer for Kubernetes
|
||||||
|
home: https://www.portainer.io
|
||||||
|
icon: https://github.com/portainer/portainer/raw/develop/app/assets/ico/apple-touch-icon.png
|
||||||
|
maintainers:
|
||||||
|
- email: platform-team@portainer.io
|
||||||
|
name: Portainer
|
||||||
|
url: https://www.portainer.io
|
||||||
|
name: portainer
|
||||||
|
sources:
|
||||||
|
- https://github.com/portainer/k8s
|
||||||
|
type: application
|
||||||
|
version: 1.0.43
|
92
portainer/portainer/README.md
Normal file
92
portainer/portainer/README.md
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
# Deploy Portainer using Helm Chart
|
||||||
|
|
||||||
|
Before proceeding, ensure to create a namespace in advance.
|
||||||
|
For instance:
|
||||||
|
```bash
|
||||||
|
kubectl create namespace portainer
|
||||||
|
```
|
||||||
|
|
||||||
|
# Install the chart repository
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm repo add portainer https://portainer.github.io/k8s/
|
||||||
|
helm repo update
|
||||||
|
```
|
||||||
|
|
||||||
|
# Testing the Chart
|
||||||
|
Execute the following for testing the chart:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm install --dry-run --debug portainer -n portainer deploy/helm/portainer
|
||||||
|
```
|
||||||
|
|
||||||
|
# Installing the Chart
|
||||||
|
Execute the following for installing the chart:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm upgrade -i -n portainer portainer portainer/portainer
|
||||||
|
|
||||||
|
## Refer to the output NOTES on how-to access Portainer web
|
||||||
|
## An example is attached below
|
||||||
|
|
||||||
|
NOTES:
|
||||||
|
1. Get the application URL by running these commands:
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get --namespace portainer svc -w portainer'
|
||||||
|
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace portainer portainer --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}")
|
||||||
|
echo http://$SERVICE_IP:9000
|
||||||
|
http://20.40.176.8:9000
|
||||||
|
```
|
||||||
|
|
||||||
|
# Deleting the Chart
|
||||||
|
Execute the following for deleting the chart:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
## Delete the Helm Chart
|
||||||
|
helm delete -n portainer portainer
|
||||||
|
## Delete the Namespace
|
||||||
|
kubectl delete namespace portainer
|
||||||
|
```
|
||||||
|
|
||||||
|
# Chart Configuration
|
||||||
|
The following table lists the configurable parameters of the Portainer chart and their default values. The values file can be found under `deploy/helm/portainer/values.yaml`.
|
||||||
|
|
||||||
|
*The parameters will be keep updating.*
|
||||||
|
|
||||||
|
| Parameter | Description | Default |
|
||||||
|
| - | - | - |
|
||||||
|
| `replicaCount` | Number of Portainer service replicas (ALWAYS set to 1) | `1` |
|
||||||
|
| `image.repository` | Portainer Docker Hub repository | `portainer/portainer-ce` |
|
||||||
|
| `image.tag` | Tag for the Portainer image | `latest` |
|
||||||
|
| `image.pullPolicy` | Portainer image pulling policy | `IfNotPresent` |
|
||||||
|
| `imagePullSecrets` | If Portainer image requires to be in a private repository | `nil` |
|
||||||
|
| `nodeSelector` | Used to apply a nodeSelector to the deployment | `{}` |
|
||||||
|
| `serviceAccount.annotations` | Annotations to add to the service account | `null` |
|
||||||
|
| `serviceAccount.name` | The name of the service account to use | `portainer-sa-clusteradmin` |
|
||||||
|
| `service.type` | Service Type for the main Portainer Service; ClusterIP, NodePort and LoadBalancer | `LoadBalancer` |
|
||||||
|
| `service.httpPort` | HTTP port for accessing Portainer Web | `9000` |
|
||||||
|
| `service.httpNodePort` | Static NodePort for accessing Portainer Web. Specify only if the type is NodePort | `30777` |
|
||||||
|
| `service.edgePort` | TCP port for accessing Portainer Edge | `8000` |
|
||||||
|
| `service.edgeNodePort` | Static NodePort for accessing Portainer Edge. Specify only if the type is NodePort | `30776` |
|
||||||
|
| `service.annotations` | Annotations to add to the service | `{}` |
|
||||||
|
| `feature.flags` | Enable one or more features separated by spaces. For instance, `--feat=open-amt` | `nil` |
|
||||||
|
| `ingress.enabled` | Create an ingress for Portainer | `false` |
|
||||||
|
| `ingress.ingressClassName` | For Kubernetes >= 1.18 you should specify the ingress-controller via the field `ingressClassName`. For instance, `nginx` | `nil` |
|
||||||
|
| `ingress.annotations` | Annotations to add to the ingress. For instane, `kubernetes.io/ingress.class: nginx` | `{}` |
|
||||||
|
| `ingress.hosts.host` | URL for Portainer Web. For instance, `portainer.example.io` | `nil` |
|
||||||
|
| `ingress.hosts.paths.path` | Path for the Portainer Web. | `/` |
|
||||||
|
| `ingress.hosts.paths.port` | Port for the Portainer Web. | `9000` |
|
||||||
|
| `ingress.tls` | TLS support on ingress. Must create a secret with TLS certificates in advance | `[]` |
|
||||||
|
| `resources` | Portainer resource requests and limits | `{}` |
|
||||||
|
| `tls.force` | Force Portainer to be configured to use TLS only | `false` |
|
||||||
|
| `tls.existingSecret` | Mount the existing TLS secret into the pod | `""` |
|
||||||
|
| `mtls.enable` | Option to specicy mtls Certs to be used by Portainer | `false` |
|
||||||
|
| `mtls.existingSecret` | Mount the existing mtls secret into the pod | `""` |
|
||||||
|
| `persistence.enabled` | Whether to enable data persistence | `true` |
|
||||||
|
| `persistence.existingClaim` | Name of an existing PVC to use for data persistence | `nil` |
|
||||||
|
| `persistence.size` | Size of the PVC used for persistence | `10Gi` |
|
||||||
|
| `persistence.annotations` | Annotations to apply to PVC used for persistence | `{}` |
|
||||||
|
| `persistence.storageClass` | StorageClass to apply to PVC used for persistence | `default` |
|
||||||
|
| `persistence.accessMode` | AccessMode for persistence | `ReadWriteOnce` |
|
||||||
|
| `persistence.selector` | Selector for persistence | `nil` |
|
27
portainer/portainer/templates/NOTES.txt
Normal file
27
portainer/portainer/templates/NOTES.txt
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
{{- if .Values.ingress.enabled }}
|
||||||
|
{{- range $host := .Values.ingress.hosts }}
|
||||||
|
{{- range .paths }}
|
||||||
|
Use the URL below to access the application
|
||||||
|
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ if .port }}:{{ .port }}{{ else }}{{ end }}{{.path}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else if contains "NodePort" .Values.service.type }}
|
||||||
|
Get the application URL by running these commands:
|
||||||
|
{{- if .Values.tls.force }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "portainer.fullname" . }})
|
||||||
|
{{- else }}
|
||||||
|
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[1].nodePort}" services {{ include "portainer.fullname" . }})
|
||||||
|
{{- end}}
|
||||||
|
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
|
||||||
|
echo https://$NODE_IP:$NODE_PORT
|
||||||
|
{{- else if contains "LoadBalancer" .Values.service.type }}
|
||||||
|
Get the application URL by running these commands:
|
||||||
|
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
|
||||||
|
You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "portainer.fullname" . }}'
|
||||||
|
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "portainer.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
|
||||||
|
echo https://$SERVICE_IP:{{ .Values.service.httpsPort }}
|
||||||
|
{{- else if contains "ClusterIP" .Values.service.type }}
|
||||||
|
Get the application URL by running these commands:
|
||||||
|
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "portainer.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].me$ echo "Visit http://127.0.0.1:9443 to use your application"
|
||||||
|
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 9443:9443
|
||||||
|
{{- end }}
|
87
portainer/portainer/templates/_helpers.tpl
Normal file
87
portainer/portainer/templates/_helpers.tpl
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "portainer.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "portainer.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride -}}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||||
|
{{- if contains $name .Release.Name -}}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "portainer.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "portainer.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "portainer.chart" . }}
|
||||||
|
{{ include "portainer.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "portainer.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "portainer.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "portainer.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create -}}
|
||||||
|
{{ default (include "portainer.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else -}}
|
||||||
|
{{ default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Provide a pre-defined claim or a claim based on the Release
|
||||||
|
*/}}
|
||||||
|
{{- define "portainer.pvcName" -}}
|
||||||
|
{{- if .Values.persistence.existingClaim }}
|
||||||
|
{{- .Values.persistence.existingClaim }}
|
||||||
|
{{- else -}}
|
||||||
|
{{- template "portainer.fullname" . }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Generate a right Ingress apiVersion
|
||||||
|
*/}}
|
||||||
|
{{- define "ingress.apiVersion" -}}
|
||||||
|
{{- if semverCompare ">=1.20-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
networking.k8s.io/v1
|
||||||
|
{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
|
||||||
|
networking.k8s.io/v1beta1
|
||||||
|
{{- else -}}
|
||||||
|
extensions/v1
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
193
portainer/portainer/templates/deployment.yaml
Normal file
193
portainer/portainer/templates/deployment.yaml
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "portainer.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
io.portainer.kubernetes.application.stack: portainer
|
||||||
|
{{- include "portainer.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
replicas: {{ .Values.replicaCount }}
|
||||||
|
strategy:
|
||||||
|
type: "Recreate"
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "portainer.selectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
{{- include "portainer.selectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
nodeSelector: {{- toYaml .Values.nodeSelector | nindent 8 -}}
|
||||||
|
{{- with .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "portainer.serviceAccountName" . }}
|
||||||
|
volumes:
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
- name: "data"
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ template "portainer.pvcName" . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tls.existingSecret }}
|
||||||
|
- name: certs
|
||||||
|
secret:
|
||||||
|
secretName: {{ .Values.tls.existingSecret }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.mtls.existingSecret }}
|
||||||
|
- name: mtlscerts
|
||||||
|
secret:
|
||||||
|
secretName: {{ .Values.mtls.existingSecret }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
{{- if .Values.enterpriseEdition.enabled }}
|
||||||
|
image: "{{ .Values.enterpriseEdition.image.repository }}:{{ .Values.enterpriseEdition.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.enterpriseEdition.image.pullPolicy }}
|
||||||
|
{{- else }}
|
||||||
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
{{- end }}
|
||||||
|
args:
|
||||||
|
{{- if .Values.tls.force }}
|
||||||
|
- --http-disabled
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tls.existingSecret }}
|
||||||
|
- --sslcert=/certs/tls.crt
|
||||||
|
- --sslkey=/certs/tls.key
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.mtls.existingSecret }}
|
||||||
|
- --mtlscacert=/certs/mtls/mtlsca.crt
|
||||||
|
- --mtlscert=/certs/mtls/mtlscert.crt
|
||||||
|
- --mtlskey=/certs/mtls/mtlskey.key
|
||||||
|
{{- end }}
|
||||||
|
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.edgeNodePort))) }}
|
||||||
|
- '--tunnel-port={{ .Values.service.edgeNodePort }}'
|
||||||
|
{{- end }}
|
||||||
|
{{- if (not (empty .Values.feature.flags)) }}
|
||||||
|
- '{{ .Values.feature.flags }}'
|
||||||
|
{{- end }}
|
||||||
|
volumeMounts:
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
- name: data
|
||||||
|
mountPath: /data
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tls.existingSecret }}
|
||||||
|
- name: certs
|
||||||
|
mountPath: /certs
|
||||||
|
readOnly: true
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.mtls.existingSecret }}
|
||||||
|
- name: mtlscerts
|
||||||
|
mountPath: /certs/mtls
|
||||||
|
readOnly: true
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
{{- if not .Values.tls.force }}
|
||||||
|
- name: http
|
||||||
|
containerPort: 9000
|
||||||
|
protocol: TCP
|
||||||
|
{{- end }}
|
||||||
|
- name: https
|
||||||
|
containerPort: 9443
|
||||||
|
protocol: TCP
|
||||||
|
- name: tcp-edge
|
||||||
|
containerPort: 8000
|
||||||
|
protocol: TCP
|
||||||
|
livenessProbe:
|
||||||
|
failureThreshold: 3
|
||||||
|
initialDelaySeconds: 45
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
{{- if .Values.tls.force }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
{{- if .Values.enterpriseEdition.enabled }}
|
||||||
|
{{- if regexMatch "^[0-9]+\\.[0-9]+\\.[0-9]+$" .Values.enterpriseEdition.image.tag }}
|
||||||
|
{{- if eq (semver .Values.enterpriseEdition.image.tag | (semver "2.7.0").Compare) -1 }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
port: 9000
|
||||||
|
scheme: HTTP
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{- if eq .Values.enterpriseEdition.image.tag "latest" }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
port: 9000
|
||||||
|
scheme: HTTP
|
||||||
|
{{- end }}
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
{{- if regexMatch "^[0-9]+\\.[0-9]+\\.[0-9]+$" .Values.image.tag }}
|
||||||
|
{{- if eq (semver .Values.image.tag | (semver "2.6.0").Compare) -1 }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
port: 9000
|
||||||
|
scheme: HTTP
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
{{- if eq .Values.image.tag "latest" }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
port: 9000
|
||||||
|
scheme: HTTP
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
readinessProbe:
|
||||||
|
failureThreshold: 3
|
||||||
|
initialDelaySeconds: 45
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
{{- if .Values.tls.force }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
{{- if .Values.enterpriseEdition.enabled }}
|
||||||
|
{{- if regexMatch "^[0-9]+\\.[0-9]+\\.[0-9]+$" .Values.enterpriseEdition.image.tag }}
|
||||||
|
{{- if eq (semver .Values.enterpriseEdition.image.tag | (semver "2.7.0").Compare) -1 }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
port: 9000
|
||||||
|
scheme: HTTP
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
{{- if eq .Values.enterpriseEdition.image.tag "latest" }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
port: 9000
|
||||||
|
scheme: HTTP
|
||||||
|
{{- end }}
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
{{- if regexMatch "^[0-9]+\\.[0-9]+\\.[0-9]+$" .Values.image.tag }}
|
||||||
|
{{- if eq (semver .Values.image.tag | (semver "2.6.0").Compare) -1 }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
port: 9000
|
||||||
|
scheme: HTTP
|
||||||
|
{{- end}}
|
||||||
|
{{- else }}
|
||||||
|
{{- if eq .Values.image.tag "latest" }}
|
||||||
|
port: 9443
|
||||||
|
scheme: HTTPS
|
||||||
|
{{- else }}
|
||||||
|
port: 9000
|
||||||
|
scheme: HTTP
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.resources | nindent 12 }}
|
60
portainer/portainer/templates/ingress.yaml
Normal file
60
portainer/portainer/templates/ingress.yaml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
{{- if .Values.ingress.enabled -}}
|
||||||
|
{{- $fullName := include "portainer.fullname" . -}}
|
||||||
|
{{- $tlsforced := .Values.tls.force -}}
|
||||||
|
{{- $apiVersion := include "ingress.apiVersion" . -}}
|
||||||
|
apiVersion: {{ $apiVersion }}
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "portainer.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.ingress.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.ingress.ingressClassName }}
|
||||||
|
ingressClassName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.ingress.tls }}
|
||||||
|
tls:
|
||||||
|
{{- range .Values.ingress.tls }}
|
||||||
|
- hosts:
|
||||||
|
{{- range .hosts }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
secretName: {{ .secretName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
{{- range .Values.ingress.hosts }}
|
||||||
|
- host: {{ .host | quote }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
{{- range .paths }}
|
||||||
|
- path: {{ .path | default "/" }}
|
||||||
|
{{- if eq $apiVersion "networking.k8s.io/v1" }}
|
||||||
|
pathType: Prefix
|
||||||
|
{{- end }}
|
||||||
|
backend:
|
||||||
|
{{- if eq $apiVersion "networking.k8s.io/v1" }}
|
||||||
|
service:
|
||||||
|
name: {{ $fullName }}
|
||||||
|
port:
|
||||||
|
{{- if $tlsforced }}
|
||||||
|
number: {{ .port | default 9443 }}
|
||||||
|
{{- else }}
|
||||||
|
number: {{ .port | default 9000 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
serviceName: {{ $fullName }}
|
||||||
|
{{- if $tlsforced }}
|
||||||
|
servicePort: {{ .port | default 9443 }}
|
||||||
|
{{- else }}
|
||||||
|
servicePort: {{ .port | default 9000 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
6
portainer/portainer/templates/namespace.yaml
Normal file
6
portainer/portainer/templates/namespace.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{{ if .Values.createNamespace }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: portainer
|
||||||
|
{{ end }}
|
32
portainer/portainer/templates/pvc.yaml
Normal file
32
portainer/portainer/templates/pvc.yaml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{{- if .Values.persistence.enabled -}}
|
||||||
|
{{- if not .Values.persistence.existingClaim -}}
|
||||||
|
---
|
||||||
|
kind: "PersistentVolumeClaim"
|
||||||
|
apiVersion: "v1"
|
||||||
|
metadata:
|
||||||
|
name: {{ template "portainer.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.persistence.storageClass }}
|
||||||
|
volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.storageClass | quote }}
|
||||||
|
{{- else }}
|
||||||
|
volume.alpha.kubernetes.io/storage-class: "generic"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.persistence.annotations }}
|
||||||
|
{{ toYaml .Values.persistence.annotations | indent 2 }}
|
||||||
|
{{ end }}
|
||||||
|
labels:
|
||||||
|
io.portainer.kubernetes.application.stack: portainer
|
||||||
|
{{- include "portainer.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- {{ default "ReadWriteOnce" .Values.persistence.accessMode | quote }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.persistence.size | quote }}
|
||||||
|
{{- if .Values.persistence.selector }}
|
||||||
|
selector:
|
||||||
|
{{ toYaml .Values.persistence.selector | indent 4 }}
|
||||||
|
{{ end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
14
portainer/portainer/templates/rbac.yaml
Normal file
14
portainer/portainer/templates/rbac.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ include "portainer.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "portainer.labels" . | nindent 4 }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: cluster-admin
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: {{ include "portainer.serviceAccountName" . }}
|
47
portainer/portainer/templates/service.yaml
Normal file
47
portainer/portainer/templates/service.yaml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "portainer.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
io.portainer.kubernetes.application.stack: portainer
|
||||||
|
{{- include "portainer.labels" . | nindent 4 }}
|
||||||
|
{{- if .Values.service.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- range $key, $value := .Values.service.annotations }}
|
||||||
|
{{ $key }}: {{ $value | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.service.type }}
|
||||||
|
ports:
|
||||||
|
{{- if not .Values.tls.force }}
|
||||||
|
- port: {{ .Values.service.httpPort }}
|
||||||
|
targetPort: 9000
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.httpNodePort))) }}
|
||||||
|
nodePort: {{ .Values.service.httpNodePort}}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
- port: {{ .Values.service.httpsPort }}
|
||||||
|
targetPort: 9443
|
||||||
|
protocol: TCP
|
||||||
|
name: https
|
||||||
|
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.httpsNodePort))) }}
|
||||||
|
nodePort: {{ .Values.service.httpsNodePort}}
|
||||||
|
{{- end }}
|
||||||
|
{{- if (eq .Values.service.type "NodePort") }}
|
||||||
|
- port: {{ .Values.service.edgeNodePort }}
|
||||||
|
targetPort: {{ .Values.service.edgeNodePort }}
|
||||||
|
{{- else }}
|
||||||
|
- port: {{ .Values.service.edgePort }}
|
||||||
|
targetPort: {{ .Values.service.edgePort }}
|
||||||
|
{{- end }}
|
||||||
|
protocol: TCP
|
||||||
|
name: edge
|
||||||
|
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.edgeNodePort))) }}
|
||||||
|
nodePort: {{ .Values.service.edgeNodePort }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "portainer.selectorLabels" . | nindent 4 }}
|
11
portainer/portainer/templates/serviceaccount.yaml
Normal file
11
portainer/portainer/templates/serviceaccount.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: {{ include "portainer.serviceAccountName" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "portainer.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.serviceAccount.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
18
portainer/portainer/templates/tests/test-connection.yaml
Normal file
18
portainer/portainer/templates/tests/test-connection.yaml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{{- if not .Values.disableTest -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Pod
|
||||||
|
metadata:
|
||||||
|
name: "{{ include "portainer.fullname" . }}-test-connection"
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "portainer.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
"helm.sh/hook": test
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: wget
|
||||||
|
image: busybox
|
||||||
|
command: ['wget']
|
||||||
|
args: ['{{ include "portainer.fullname" . }}:{{ .Values.service.httpPort }}']
|
||||||
|
restartPolicy: Never
|
||||||
|
{{ end }}
|
77
portainer/portainer/values.yaml
Normal file
77
portainer/portainer/values.yaml
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# Default values for portainer.
|
||||||
|
# This is a YAML-formatted file.
|
||||||
|
# Declare variables to be passed into your templates.
|
||||||
|
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
# If enterpriseEdition is enabled, then use the values below _instead_ of those in .image
|
||||||
|
enterpriseEdition:
|
||||||
|
enabled: false
|
||||||
|
image:
|
||||||
|
repository: portainer/portainer-ee
|
||||||
|
tag: 2.18.3
|
||||||
|
pullPolicy: Always
|
||||||
|
|
||||||
|
image:
|
||||||
|
repository: portainer/portainer-ce
|
||||||
|
tag: 2.18.3
|
||||||
|
pullPolicy: Always
|
||||||
|
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
annotations: {}
|
||||||
|
name: portainer-sa-clusteradmin
|
||||||
|
|
||||||
|
service:
|
||||||
|
# Set the httpNodePort and edgeNodePort only if the type is NodePort
|
||||||
|
# For Ingress, set the type to be ClusterIP and set ingress.enabled to true
|
||||||
|
# For Cloud Providers, set the type to be LoadBalancer
|
||||||
|
type: NodePort
|
||||||
|
httpPort: 9000
|
||||||
|
httpsPort: 9443
|
||||||
|
httpNodePort: 30777
|
||||||
|
httpsNodePort: 30779
|
||||||
|
edgePort: 8000
|
||||||
|
edgeNodePort: 30776
|
||||||
|
annotations: {}
|
||||||
|
|
||||||
|
tls:
|
||||||
|
# If set, Portainer will be configured to use TLS only
|
||||||
|
force: false
|
||||||
|
# If set, will mount the existing secret into the pod
|
||||||
|
existingSecret: ""
|
||||||
|
|
||||||
|
mtls:
|
||||||
|
# If set, Portainer will be configured to use mTLS only
|
||||||
|
enable: false
|
||||||
|
# If set, will mount the existing secret into the pod
|
||||||
|
existingSecret: ""
|
||||||
|
|
||||||
|
feature:
|
||||||
|
flags: ""
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
ingressClassName: ""
|
||||||
|
annotations: {}
|
||||||
|
# kubernetes.io/ingress.class: nginx
|
||||||
|
# Only use below if tls.force=true
|
||||||
|
# nginx.ingress.kubernetes.io/backend-protocol: HTTPS
|
||||||
|
# Note: Hosts and paths are of type array
|
||||||
|
hosts:
|
||||||
|
- host:
|
||||||
|
paths: []
|
||||||
|
# - path: "/"
|
||||||
|
tls: []
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
size: "10Gi"
|
||||||
|
annotations: {}
|
||||||
|
storageClass:
|
||||||
|
existingClaim:
|
81
portainer/values.yaml
Normal file
81
portainer/values.yaml
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
# Default values for portainer.
|
||||||
|
# This is a YAML-formatted file.
|
||||||
|
# Declare variables to be passed into your templates.
|
||||||
|
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
# If enterpriseEdition is enabled, then use the values below _instead_ of those in .image
|
||||||
|
enterpriseEdition:
|
||||||
|
enabled: true
|
||||||
|
image:
|
||||||
|
repository: portainer/portainer-ee
|
||||||
|
tag: 2.18.3
|
||||||
|
pullPolicy: Always
|
||||||
|
|
||||||
|
image:
|
||||||
|
repository: portainer/portainer-ce
|
||||||
|
tag: 2.18.3
|
||||||
|
pullPolicy: Always
|
||||||
|
|
||||||
|
imagePullSecrets: []
|
||||||
|
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
annotations: {}
|
||||||
|
name: portainer-sa-clusteradmin
|
||||||
|
|
||||||
|
service:
|
||||||
|
# Set the httpNodePort and edgeNodePort only if the type is NodePort
|
||||||
|
# For Ingress, set the type to be ClusterIP and set ingress.enabled to true
|
||||||
|
# For Cloud Providers, set the type to be LoadBalancer
|
||||||
|
type: ClusterIP
|
||||||
|
httpPort: 9000
|
||||||
|
httpsPort: 9443
|
||||||
|
annotations:
|
||||||
|
haproxy.org/server-ssl: "true"
|
||||||
|
|
||||||
|
|
||||||
|
tls:
|
||||||
|
# If set, Portainer will be configured to use TLS only
|
||||||
|
force: true
|
||||||
|
# If set, will mount the existing secret into the pod
|
||||||
|
existingSecret: ""
|
||||||
|
|
||||||
|
mtls:
|
||||||
|
# If set, Portainer will be configured to use mTLS only
|
||||||
|
enable: false
|
||||||
|
# If set, will mount the existing secret into the pod
|
||||||
|
existingSecret: ""
|
||||||
|
|
||||||
|
feature:
|
||||||
|
flags: ""
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: haproxy
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
kubernetes.io/ingress.class: haproxy
|
||||||
|
|
||||||
|
# kubernetes.io/ingress.class: nginx
|
||||||
|
# Only use below if tls.force=true
|
||||||
|
# nginx.ingress.kubernetes.io/backend-protocol: HTTPS
|
||||||
|
# Note: Hosts and paths are of type array
|
||||||
|
hosts:
|
||||||
|
- host: portainer.geesink.org
|
||||||
|
paths:
|
||||||
|
- path: "/"
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- portainer.geesink.org
|
||||||
|
secretName: portainer-cert-prod
|
||||||
|
|
||||||
|
resources: {}
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
size: "10Gi"
|
||||||
|
annotations: {}
|
||||||
|
storageClass:
|
||||||
|
existingClaim:
|
15
portainer/values.yaml.old
Normal file
15
portainer/values.yaml.old
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
USER-SUPPLIED VALUES:
|
||||||
|
enterpriseEdition:
|
||||||
|
enabled: true
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: haproxy
|
||||||
|
enabled: true
|
||||||
|
hosts:
|
||||||
|
- host: portainer.geesink.org
|
||||||
|
paths:
|
||||||
|
- path: '"/"'
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
tls:
|
||||||
|
force: true
|
15
portainer/values2.yaml
Normal file
15
portainer/values2.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
USER-SUPPLIED VALUES:
|
||||||
|
enterpriseEdition:
|
||||||
|
enabled: true
|
||||||
|
ingress:
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.class: haproxy
|
||||||
|
enabled: true
|
||||||
|
hosts:
|
||||||
|
- host: portainer.geesink.org
|
||||||
|
paths:
|
||||||
|
- path: '"/"'
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
tls:
|
||||||
|
force: true
|
Loading…
Reference in New Issue
Block a user