remove official IXchart
This commit is contained in:
parent
d86885bc24
commit
bc75dcaef9
|
@ -1,23 +0,0 @@
|
|||
# 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
|
||||
*.orig
|
||||
*~
|
||||
# Various IDEs
|
||||
.project
|
||||
.idea/
|
||||
*.tmproj
|
||||
.vscode/
|
|
@ -1,23 +0,0 @@
|
|||
apiVersion: v2
|
||||
name: ix-chart
|
||||
description: A Helm chart for deploying simple workloads Kubernetes
|
||||
|
||||
# A chart can be either an 'application' or a 'library' chart.
|
||||
#
|
||||
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||
# to be deployed.
|
||||
#
|
||||
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||
type: application
|
||||
|
||||
# This is the chart version. This version number should be incremented each time you make changes
|
||||
# to the chart and its templates, including the app version.
|
||||
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||
version: 2012.0.0
|
||||
|
||||
# This is the version number of the application being deployed. This version number should be
|
||||
# incremented each time you make changes to the application. Versions are not expected to
|
||||
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||
appVersion: v1
|
|
@ -1,118 +0,0 @@
|
|||
# iX Chart
|
||||
|
||||
iX-chart is a chart designed to let user deploy a docker image in a TrueNAS SCALE kubernetes cluster.
|
||||
It provides a mechanism to specify workload type, add external host interfaces in the pods, configure volumes and allocate host resources to the workload.
|
||||
|
||||
This chart will deploy a docker image as a kubernetes workload allowing user to configure the workload deployment / management.
|
||||
|
||||
## Introduction
|
||||
|
||||
iX-chart is designed for simple single docker image deployments.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following table lists the configurable parameters of the iX chart and
|
||||
their default values.
|
||||
|
||||
| Parameter | Description | Default |
|
||||
|:-------------------------------|:----------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------|
|
||||
| `workloadType` | Specify type of workload to deploy | `Deployment` |
|
||||
| `cronSchedule` | Specify schedule for cronjob if `workloadType` is `CronJob`. | `{"minute": "5", "hour": "*", "dom": "*", "month": "*", "dow": "*"}` |
|
||||
| `image.repository` | The image repository to pull from | `debian` |
|
||||
| `image.tag` | The image tag to pull from | `latest` |
|
||||
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |
|
||||
| `updateStrategy` | Upgrade Policy | `RollingUpdate` |
|
||||
| `restartPolicy` | Restart Policy for containers in workload | `Always` |
|
||||
| `jobRestartPolicy` | Restart Policy for job type workload ( only applicable if `workloadType` is `Job`/`CronJob` | `OnFailure` |
|
||||
| `containerCommand` | Commands to execute inside container overriding image CMD default | `null` |
|
||||
| `containerArgs` | Specify arguments for container command | `null` |
|
||||
| `containerEnvironmentVariables`| Container Environment Variables | `null` |
|
||||
| `externalInterfaces` | Add external interfaces in the pod | `null` |
|
||||
| `dnsPolicy` | Specify DNS Policy for pod | `Default` |
|
||||
| `dnsConfig` | Specify custom DNS configuration which will be applied to the pod | `{"nameservers": [], "searches": []}` |
|
||||
| `hostNetwork` | Use host network for workload ( similar to docker host networking ) | `false` |
|
||||
| `hostPortsList` | Specify ports of host and workload to forward traffic from host port to workload port. | `null` |
|
||||
| `portForwardingList` | Specify ports of node and workload to forward traffic from node port to workload port | `null` |
|
||||
| `hostPathVolumes` | Specify host paths to be used as hostpath volumes for the workload | `null` |
|
||||
| `volumes` | Specify `ix_volumes` | `null` |
|
||||
| `livenessProbe` | Configure Liveness Probe for workload | `null` |
|
||||
| `gpuConfiguration` | Allocate GPU to workload ( if available ) | `{}` |
|
||||
|
||||
|
||||
## Persistence
|
||||
|
||||
Chart release iX chart offers 2 ways to have persistent storage:
|
||||
|
||||
1) `hostPathVolumes`
|
||||
2) `volumes`
|
||||
|
||||
For (1), they are kubernetes host path volumes which the user can assign to the workload with RO/RW permissions.
|
||||
|
||||
(2) is a host path volume as well but it operates differently then (1) in terms of where it lives and how it's lifecycle is tied to the chart release.
|
||||
For (2), users specify where they would like persistent storage in the workload and a dataset name ( it should be unique per each chart release ), based on this input,
|
||||
system will create a dataset and then use it as a host path volume for the workload. During upgrades, snapshot will be taken for these volumes and on rollback users can subsequently
|
||||
restore the snapshots hence the data.
|
||||
When a chart release will be deleted, all (2) volumes data will be deleted unlike (1) ( until of course they are not in the chart release's dataset path ).
|
||||
|
||||
## Recommended Persistence Configuration Examples
|
||||
|
||||
The following is a recommended configuration example for creating ix volumes
|
||||
|
||||
```
|
||||
"volumes": [
|
||||
{
|
||||
"datasetName": "ix_volume1",
|
||||
"mountPath": "/mount_test1"
|
||||
},
|
||||
{
|
||||
"datasetName": "ix_volume2",
|
||||
"mountPath": "/mount_test2"
|
||||
}
|
||||
]
|
||||
|
||||
```
|
||||
|
||||
`mountPath` refers to the path inside the pod.
|
||||
|
||||
---
|
||||
|
||||
The following is a recommended configuration example for `hostPathVolumes`
|
||||
|
||||
```
|
||||
"hostPathVolumes": [
|
||||
{
|
||||
"hostPath": "/mnt/pool/test_dir",
|
||||
"mountPath": "/test_dir",
|
||||
"readOnly": true
|
||||
},
|
||||
{
|
||||
"hostPath": "/mnt/pool/test_file",
|
||||
"mountPath": "/test_file",
|
||||
"readOnly": true
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## External Interfaces Configuration Examples
|
||||
|
||||
```
|
||||
"externalInterfaces": [
|
||||
{
|
||||
"hostInterface": "ens3",
|
||||
"ipam": {"type": "dhcp"}
|
||||
},
|
||||
{
|
||||
"hostInterface": "br0",
|
||||
"ipam": {
|
||||
"type": "static",
|
||||
"staticIPConfigurations": ["192.168.0.120/24"],
|
||||
"staticRoutes": [
|
||||
{"destination": "0.0.0.0/0", "gateway": "192.168.0.1"}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
The first entry in the above configuration example will add an external interface in the pod using macvlan with `ipam` being set to `dhcp`.
|
||||
Second entry will add an external interface in the pod using `bridge` and using static IP configuration for the external interface.
|
|
@ -1,4 +0,0 @@
|
|||
# iX-Chart
|
||||
|
||||
iX-chart is a chart designed to let user deploy a docker image in a TrueNAS SCALE kubernetes cluster.
|
||||
It provides a mechanism to specify workload type, add external host interfaces in the pods, configure volumes and allocate host resources to the workload.
|
|
@ -1,463 +0,0 @@
|
|||
groups:
|
||||
- name: "Container Images"
|
||||
description: "Image to be used for container"
|
||||
- name: "Container Entrypoint"
|
||||
description: "Configuration of the executable that will be run when the container is started"
|
||||
- name: "Container Environment Variables"
|
||||
description: "Set the environment that will be visible to the container"
|
||||
- name: "Networking"
|
||||
description: "Configure networking for container"
|
||||
- name: "Storage"
|
||||
description: "Persist and share data that is separate from the lifecycle of the container"
|
||||
- name: "Health Check"
|
||||
description: "Define mechanism to periodically probe the container to ensure it's functioning as desired"
|
||||
- name: "Workload Details"
|
||||
description: "Configure how workload should be deployed"
|
||||
- name: "Scaling/Upgrade Policy"
|
||||
description: "Configure how pods are replaced when configuration is upgraded"
|
||||
- name: "Restart Policy"
|
||||
description: "Configure when pod should be restarted in case of failure"
|
||||
- name: "Resource Reservation"
|
||||
description: "Specify resources to be allocated to workload"
|
||||
|
||||
questions:
|
||||
# Workload type
|
||||
- variable: workloadType
|
||||
description: "Please specify type of workload to deploy"
|
||||
label: "Workload Type"
|
||||
group: "Workload Details"
|
||||
schema:
|
||||
type: string
|
||||
default: "Deployment"
|
||||
required: true
|
||||
enum:
|
||||
- value: "Deployment"
|
||||
description: "Deploy a Deployment workload"
|
||||
- value: "Job"
|
||||
description: "Deploy job workload"
|
||||
- value: "CronJob"
|
||||
description: "Deploy cronjob workload"
|
||||
|
||||
# Cronjob schedule
|
||||
- variable: cronSchedule
|
||||
label: "Cron Schedule"
|
||||
group: "Workload Details"
|
||||
schema:
|
||||
type: cron
|
||||
show_if: [["workloadType", "=", "CronJob"]]
|
||||
default:
|
||||
minute: "5"
|
||||
|
||||
# Image related
|
||||
- variable: image
|
||||
description: "Docker Image Details"
|
||||
label: "Docker Image"
|
||||
group: "Container Images"
|
||||
schema:
|
||||
type: dict
|
||||
required: true
|
||||
attrs:
|
||||
- variable: repository
|
||||
description: "Docker image repository"
|
||||
label: "Image repository"
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
- variable: tag
|
||||
description: "Tag to use for specified image"
|
||||
label: "Image Tag"
|
||||
schema:
|
||||
type: string
|
||||
default: "latest"
|
||||
- variable: pullPolicy
|
||||
description: "Docker Image Pull Policy"
|
||||
label: "Image Pull Policy"
|
||||
schema:
|
||||
type: string
|
||||
default: "IfNotPresent"
|
||||
enum:
|
||||
- value: "IfNotPresent"
|
||||
description: "Only pull image if not present on host"
|
||||
- value: "Always"
|
||||
description: "Always pull image even if present on host"
|
||||
- value: "Never"
|
||||
description: "Never pull image even if it's not present on host"
|
||||
|
||||
# Update strategy
|
||||
- variable: updateStrategy
|
||||
description: "Upgrade Policy"
|
||||
label: "Update Strategy"
|
||||
group: "Scaling/Upgrade Policy"
|
||||
schema:
|
||||
type: string
|
||||
show_if: [["workloadType", "=", "Deployment"]]
|
||||
default: "RollingUpdate"
|
||||
enum:
|
||||
- value: "RollingUpdate"
|
||||
description: "Create new pods and then kill old ones"
|
||||
- value: "Recreate"
|
||||
description: "Kill existing pods before creating new ones"
|
||||
|
||||
# Restart Policy
|
||||
- variable: restartPolicy
|
||||
description: "Restart Policy for workload"
|
||||
label: "Restart Policy"
|
||||
group: "Restart Policy"
|
||||
schema:
|
||||
type: string
|
||||
show_if: [["workloadType", "=", "Deployment"]]
|
||||
default: "Always"
|
||||
enum:
|
||||
- value: "Always"
|
||||
description: "Always restart containers in a pod if they exit"
|
||||
- value: "OnFailure"
|
||||
description: "Only restart containers if they exit with a failure"
|
||||
- value: "Never"
|
||||
description: "Never restart containers if they exit"
|
||||
- variable: jobRestartPolicy
|
||||
description: "Restart Policy for workload"
|
||||
label: "Restart Policy"
|
||||
group: "Restart Policy"
|
||||
schema:
|
||||
type: string
|
||||
default: "OnFailure"
|
||||
show_if: [["workloadType", "!=", "Deployment"]]
|
||||
enum:
|
||||
- value: "OnFailure"
|
||||
description: "Only restart job if it fails"
|
||||
- value: "Never"
|
||||
description: "Never restart job even if it fails"
|
||||
|
||||
# Configurable CMD / Entrypoint / Environment Variables
|
||||
- variable: containerCommand
|
||||
description: "Commands to execute inside container overriding image CMD default"
|
||||
label: "Container CMD"
|
||||
group: "Container Entrypoint"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: command
|
||||
description: "Container Command"
|
||||
label: "Command"
|
||||
schema:
|
||||
type: string
|
||||
- variable: containerArgs
|
||||
description: "Specify arguments for container command"
|
||||
label: "Container Args"
|
||||
group: "Container Entrypoint"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: arg
|
||||
description: "Container Arg"
|
||||
label: "Arg"
|
||||
schema:
|
||||
type: string
|
||||
- variable: containerEnvironmentVariables
|
||||
description: "Container Environment Variables"
|
||||
label: "Container Environment Variables"
|
||||
group: "Container Environment Variables"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: environmentVariable
|
||||
description: "Container Environment Variable"
|
||||
label: "Container Environment Variable"
|
||||
schema:
|
||||
type: dict
|
||||
attrs:
|
||||
- variable: name
|
||||
description: "Environment Variable Name"
|
||||
label: "Environment Variable Name"
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
- variable: value
|
||||
description: "Environment Variable Value"
|
||||
label: "Environment Variable Value"
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
|
||||
# Networking options
|
||||
- variable: externalInterfaces
|
||||
description: "Add External Interfaces"
|
||||
label: "Add external Interfaces"
|
||||
group: "Networking"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: interfaceConfiguration
|
||||
description: "Interface Configuration"
|
||||
label: "Interface Configuration"
|
||||
schema:
|
||||
type: dict
|
||||
$ref:
|
||||
- "normalize/interfaceConfiguration"
|
||||
attrs:
|
||||
- variable: hostInterface
|
||||
description: "Please specify host interface"
|
||||
label: "Host Interface"
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
$ref:
|
||||
- "definitions/interface"
|
||||
- variable: ipam
|
||||
description: "Define how IP Address will be managed"
|
||||
label: "IP Address Management"
|
||||
schema:
|
||||
type: dict
|
||||
required: true
|
||||
attrs:
|
||||
- variable: type
|
||||
description: "Specify type for IPAM"
|
||||
label: "IPAM Type"
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
enum:
|
||||
- value: "dhcp"
|
||||
description: "Use DHCP"
|
||||
- value: "static"
|
||||
description: "Use static IP"
|
||||
show_subquestions_if: "static"
|
||||
subquestions:
|
||||
- variable: staticIPConfigurations
|
||||
label: "Static IP Addresses"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: staticIP
|
||||
label: "Static IP"
|
||||
schema:
|
||||
type: ipaddr
|
||||
cidr: true
|
||||
- variable: staticRoutes
|
||||
label: "Static Routes"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: staticRouteConfiguration
|
||||
label: "Static Route Configuration"
|
||||
schema:
|
||||
type: dict
|
||||
attrs:
|
||||
- variable: destination
|
||||
label: "Destination"
|
||||
schema:
|
||||
type: ipaddr
|
||||
cidr: true
|
||||
required: true
|
||||
- variable: gateway
|
||||
label: "Gateway"
|
||||
schema:
|
||||
type: ipaddr
|
||||
cidr: false
|
||||
required: true
|
||||
|
||||
- variable: dnsPolicy
|
||||
label: "DNS Policy"
|
||||
description: "Default behaviour is where Pod inherits the name resolution configuration from the node that the pods run on, if None is specified, It allows a Pod to ignore DNS settings from the Kubernetes environment."
|
||||
group: "Networking"
|
||||
schema:
|
||||
type: string
|
||||
default: "Default"
|
||||
enum:
|
||||
- value: "Default"
|
||||
description: "Use Default DNS Policy"
|
||||
- value: "None"
|
||||
description: "Ignore DNS settings from the Kuberentes cluster"
|
||||
- variable: dnsConfig
|
||||
label: "DNS Configuration"
|
||||
group: "Networking"
|
||||
description: "Specify custom DNS configuration which will be applied to the pod"
|
||||
schema:
|
||||
type: dict
|
||||
attrs:
|
||||
- variable: nameservers
|
||||
label: "Nameservers"
|
||||
schema:
|
||||
default: []
|
||||
type: list
|
||||
items:
|
||||
- variable: nameserver
|
||||
label: "Nameserver"
|
||||
schema:
|
||||
type: string
|
||||
- variable: searches
|
||||
label: "Searches"
|
||||
schema:
|
||||
default: []
|
||||
type: list
|
||||
items:
|
||||
- variable: search
|
||||
label: "Search Entry"
|
||||
schema:
|
||||
type: string
|
||||
|
||||
- variable: hostNetwork
|
||||
label: "Provide access to node network namespace for the workload"
|
||||
group: "Networking"
|
||||
schema:
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
- variable: hostPortsList
|
||||
label: "Specify host ports for the workload"
|
||||
description: "Only use host ports if scaling of a workload is not required"
|
||||
group: "Networking"
|
||||
schema:
|
||||
show_if: [["updateStrategy", "=", "Recreate"]]
|
||||
type: list
|
||||
items:
|
||||
- variable: hostPortConfiguration
|
||||
label: "Host Port Configuration"
|
||||
schema:
|
||||
type: dict
|
||||
attrs:
|
||||
- variable: containerPort
|
||||
label: "Container Port"
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
- variable: hostPort
|
||||
label: "Host Port"
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
|
||||
- variable: portForwardingList
|
||||
label: "Specify Node ports to forward to workload"
|
||||
group: "Networking"
|
||||
description: "Specify ports of node and workload to forward traffic from node port to workload port"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: portForwarding
|
||||
label: "Port Forwarding Configuration"
|
||||
schema:
|
||||
type: dict
|
||||
attrs:
|
||||
- variable: containerPort
|
||||
label: "Container Port"
|
||||
schema:
|
||||
type: int
|
||||
required: true
|
||||
- variable: nodePort
|
||||
label: "Node Port"
|
||||
schema:
|
||||
type: int
|
||||
required: true
|
||||
min: 9000
|
||||
max: 65535
|
||||
- variable: protocol
|
||||
label: "Protocol"
|
||||
schema:
|
||||
type: string
|
||||
default: "TCP"
|
||||
enum:
|
||||
- value: "TCP"
|
||||
description: "TCP Protocol"
|
||||
- value: "UDP"
|
||||
description: "UDP Protocol"
|
||||
|
||||
# Storage Options
|
||||
# Host path based volumes
|
||||
- variable: hostPathVolumes
|
||||
label: "Host Path Volumes"
|
||||
group: "Storage"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: hostPathConfiguration
|
||||
label: "Host Path Configuration"
|
||||
schema:
|
||||
type: dict
|
||||
attrs:
|
||||
- variable: hostPath
|
||||
label: "Host Path"
|
||||
schema:
|
||||
type: hostpath
|
||||
required: true
|
||||
- variable: mountPath
|
||||
label: "Mount Path"
|
||||
description: "Path where host path will be mounted inside the pod"
|
||||
schema:
|
||||
type: path
|
||||
required: true
|
||||
- variable: readOnly
|
||||
label: "Read Only"
|
||||
schema:
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
# Volumes
|
||||
- variable: volumes
|
||||
label: "Volumes"
|
||||
group: "Storage"
|
||||
schema:
|
||||
type: list
|
||||
items:
|
||||
- variable: volume
|
||||
label: "Volume"
|
||||
schema:
|
||||
type: dict
|
||||
$ref:
|
||||
- "normalize/ixVolume"
|
||||
attrs:
|
||||
- variable: mountPath
|
||||
label: "Mount Path"
|
||||
description: "Path where the volume will be mounted inside the pod"
|
||||
schema:
|
||||
type: path
|
||||
required: true
|
||||
- variable: datasetName
|
||||
label: "Dataset Name"
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
|
||||
# Pod Probes
|
||||
# Liveness Probe
|
||||
- variable: livenessProbe
|
||||
label: "Liveness Probe"
|
||||
description: "Configure Liveness Probe"
|
||||
group: "Health Check"
|
||||
schema:
|
||||
type: dict
|
||||
default: null
|
||||
"null": true
|
||||
attrs:
|
||||
- variable: command
|
||||
label: "Liveness command"
|
||||
description: "Specify a command to determine liveness of pod"
|
||||
schema:
|
||||
type: list
|
||||
required: true
|
||||
items:
|
||||
- variable: commandArg
|
||||
label: "Command Arg"
|
||||
schema:
|
||||
type: string
|
||||
- variable: initialDelaySeconds
|
||||
label: "Seconds Delay"
|
||||
description: "Seconds to delay the first liveness probe"
|
||||
schema:
|
||||
type: int
|
||||
default: 5
|
||||
- variable: periodSeconds
|
||||
label: "Period Seconds"
|
||||
description: "Specify number of seconds to run liveness probe"
|
||||
schema:
|
||||
type: int
|
||||
default: 10
|
||||
|
||||
# Specify GPU configuration
|
||||
- variable: gpuConfiguration
|
||||
label: "GPU Configuration"
|
||||
group: "Resource Reservation"
|
||||
schema:
|
||||
type: dict
|
||||
$ref:
|
||||
- "definitions/gpuConfiguration"
|
|
@ -1,2 +0,0 @@
|
|||
1. Get the application URL by running these commands:
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
{{/*
|
||||
Container Command
|
||||
*/}}
|
||||
{{- define "containerCommand" }}
|
||||
{{- if .Values.containerCommand }}
|
||||
command:
|
||||
{{- range .Values.containerCommand }}
|
||||
- {{ . | quote}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Container Args
|
||||
*/}}
|
||||
{{- define "containerArgs" }}
|
||||
{{- if .Values.containerArgs }}
|
||||
args:
|
||||
{{- range .Values.containerArgs }}
|
||||
- {{ . | quote}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Container Environment Variables
|
||||
*/}}
|
||||
{{- define "containerEnvVariables" }}
|
||||
{{- if .Values.containerEnvironmentVariables }}
|
||||
env:
|
||||
{{- range .Values.containerEnvironmentVariables }}
|
||||
- name: {{ .name | quote }}
|
||||
value: {{ .value | quote }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Container Liveness Probe
|
||||
*/}}
|
||||
{{- define "containerLivenssProbe" }}
|
||||
{{- if .Values.livenessProbe }}
|
||||
livenessProbe:
|
||||
exec:
|
||||
command:
|
||||
{{ toYaml .Values.livenessProbe.command | indent 16 }}
|
||||
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
|
||||
periodSeconds: {{ .Values.periodSeconds }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Container Ports
|
||||
*/}}
|
||||
{{- define "containerPorts" }}
|
||||
{{- if or .Values.portForwardingList .Values.hostPortsList }}
|
||||
ports:
|
||||
{{- range $index, $config := .Values.portForwardingList }}
|
||||
- containerPort: {{ $config.containerPort }}
|
||||
{{- end }}
|
||||
{{- range $index, $config := .Values.hostPortsList }}
|
||||
- containerPort: {{ $config.containerPort }}
|
||||
hostPort: {{ $config.hostPort }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Container Resource Configuration
|
||||
*/}}
|
||||
{{- define "containerResourceConfiguration" }}
|
||||
{{- if .Values.gpuConfiguration }}
|
||||
resources:
|
||||
limits:
|
||||
{{- toYaml .Values.gpuConfiguration | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
|
@ -1,71 +0,0 @@
|
|||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "ix-chart.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 "ix-chart.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 "ix-chart.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "ix-chart.labels" -}}
|
||||
helm.sh/chart: {{ include "ix-chart.chart" . }}
|
||||
{{ include "ix-chart.selectorLabels" . }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "ix-chart.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "ix-chart.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "ix-chart.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create }}
|
||||
{{- default (include "ix-chart.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else }}
|
||||
{{- default "default" .Values.serviceAccount.name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Convert cron schema object to cron format
|
||||
*/}}
|
||||
{{- define "cronExpression" }}
|
||||
{{- printf "%s %s %s %s %s " .minute .hour .dom .month .dow }}
|
||||
{{- end }}
|
|
@ -1,10 +0,0 @@
|
|||
{{/*
|
||||
DNS Configuration
|
||||
*/}}
|
||||
{{- define "dnsConfiguration" }}
|
||||
dnsPolicy: {{ .Values.dnsPolicy }}
|
||||
{{- if .Values.dnsConfig }}
|
||||
dnsConfig:
|
||||
{{- toYaml .Values.dnsConfig | nindent 2 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
|
@ -1,36 +0,0 @@
|
|||
{{/*
|
||||
Volumes Configuration
|
||||
*/}}
|
||||
{{- define "volumeConfiguration" }}
|
||||
{{- if or .Values.ixVolumes .Values.hostPathVolumes }}
|
||||
volumes:
|
||||
{{- range $index, $hostPathConfiguration := .Values.hostPathVolumes }}
|
||||
- name: ix-host-path-{{ $.Release.Name }}-{{ $index }}
|
||||
hostPath:
|
||||
path: {{ $hostPathConfiguration.hostPath }}
|
||||
{{- end }}
|
||||
{{- range $index, $hostPathConfiguration := .Values.ixVolumes }}
|
||||
- name: ix-host-volume-{{ $.Release.Name }}-{{ $index }}
|
||||
hostPath:
|
||||
path: {{ $hostPathConfiguration.hostPath }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Volume Mounts Configuration
|
||||
*/}}
|
||||
{{- define "volumeMountsConfiguration" }}
|
||||
{{- if or .Values.hostPathVolumes .Values.ixVolumes }}
|
||||
volumeMounts:
|
||||
{{- range $index, $hostPathConfiguration := .Values.hostPathVolumes }}
|
||||
- mountPath: {{ $hostPathConfiguration.mountPath }}
|
||||
name: ix-host-path-{{ $.Release.Name }}-{{ $index }}
|
||||
readOnly: {{ $hostPathConfiguration.readOnly }}
|
||||
{{- end }}
|
||||
{{- range $index, $hostPathConfiguration := .Values.ixVolumes }}
|
||||
- mountPath: {{ $hostPathConfiguration.mountPath }}
|
||||
name: ix-host-volume-{{ $.Release.Name }}-{{ $index }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
|
@ -1,141 +0,0 @@
|
|||
{{/*
|
||||
Check if workload type is a deployment
|
||||
*/}}
|
||||
{{- define "workloadIsDeployment" }}
|
||||
{{- if eq .Values.workloadType "Deployment" }}
|
||||
{{- true -}}
|
||||
{{- else }}
|
||||
{{- false -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Check if workload type is a cronjob
|
||||
*/}}
|
||||
{{- define "workloadIsCronJob" }}
|
||||
{{- if eq .Values.workloadType "CronJob" }}
|
||||
{{- true -}}
|
||||
{{- else }}
|
||||
{{- false -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Get API Version based on workload type
|
||||
*/}}
|
||||
{{- define "apiVersion" -}}
|
||||
{{- if eq (include "workloadIsDeployment" .) "true" }}
|
||||
{{- printf "apps/v1" }}
|
||||
{{- else if eq (include "workloadIsCronJob" .) "true" }}
|
||||
{{- printf "batch/v1beta1" }}
|
||||
{{- else }}
|
||||
{{- printf "batch/v1" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Get Restart policy based on workload type
|
||||
*/}}
|
||||
{{- define "restartPolicy" -}}
|
||||
{{- if eq (include "workloadIsDeployment" .) "true" }}
|
||||
{{- printf "%s" .Values.restartPolicy }}
|
||||
{{- else }}
|
||||
{{- printf "%s" .Values.jobRestartPolicy }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Pod specification
|
||||
*/}}
|
||||
{{- define "podSepc" }}
|
||||
restartPolicy: {{ template "restartPolicy" . }}
|
||||
hostNetwork: {{ .Values.hostNetwork }}
|
||||
containers:
|
||||
- name: {{ .Chart.Name }}
|
||||
{{- include "volumeMountsConfiguration" . | indent 2}}
|
||||
securityContext:
|
||||
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default "latest" }}"
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
{{- include "containerCommand" . | indent 2 }}
|
||||
{{- include "containerArgs" . | indent 2 }}
|
||||
{{- include "containerEnvVariables" . | indent 2 }}
|
||||
{{- include "containerLivenssProbe" . | indent 2 }}
|
||||
{{- include "containerPorts" . | indent 2 }}
|
||||
{{- include "containerResourceConfiguration" . | indent 2 }}
|
||||
{{- include "volumeConfiguration" . }}
|
||||
{{- include "dnsConfiguration" . }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Annotations for workload
|
||||
*/}}
|
||||
{{- define "workloadAnnotations" }}
|
||||
rollme: {{ randAlphaNum 5 | quote }}
|
||||
{{- if .Values.ixExternalInterfacesConfigurationNames }}
|
||||
k8s.v1.cni.cncf.io/networks: {{ join ", " .Values.ixExternalInterfacesConfigurationNames }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Metadata for workload
|
||||
*/}}
|
||||
{{- define "commonMetadataWorkload" }}
|
||||
labels:
|
||||
{{- include "ix-chart.selectorLabels" . | nindent 2 }}
|
||||
annotations:
|
||||
{{- include "workloadAnnotations" . | nindent 2 }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Deployment Spec
|
||||
*/}}
|
||||
{{- define "deploymentSpec" }}
|
||||
strategy:
|
||||
{{- if and (eq .Values.updateStrategy "RollingUpdate") .Values.hostPortsList }}
|
||||
{{- fail "RollingUpdate is not allowed when host ports are specified" }}
|
||||
{{- end }}
|
||||
type: {{ .Values.updateStrategy }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "ix-chart.selectorLabels" . | nindent 4 }}
|
||||
template:
|
||||
metadata:
|
||||
{{ include "commonMetadataWorkload" . | nindent 4 }}
|
||||
spec:
|
||||
{{- include "podSepc" . | indent 4 }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Job Spec Common
|
||||
*/}}
|
||||
{{- define "jobSpecCommon" }}
|
||||
metadata:
|
||||
{{ include "commonMetadataWorkload" . | nindent 4 }}
|
||||
spec:
|
||||
{{- include "podSepc" . | indent 2 }}
|
||||
{{- end }}
|
||||
|
||||
|
||||
{{/*
|
||||
Job Spec
|
||||
*/}}
|
||||
{{- define "jobSpec" }}
|
||||
template:
|
||||
{{ include "jobSpecCommon" . | nindent 2 }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
CronJob Spec
|
||||
*/}}
|
||||
{{- define "cronJobSpec" }}
|
||||
schedule: {{ include "cronExpression" .Values.cronSchedule | quote }}
|
||||
jobTemplate:
|
||||
spec:
|
||||
{{ include "jobSpec" . | nindent 4 }}
|
||||
{{- end }}
|
|
@ -1,9 +0,0 @@
|
|||
{{- range $index, $iface := .Values.ixExternalInterfacesConfiguration }}
|
||||
---
|
||||
apiVersion: "k8s.cni.cncf.io/v1"
|
||||
kind: NetworkAttachmentDefinition
|
||||
metadata:
|
||||
name: ix-{{ $.Release.Name }}-{{ $index }}
|
||||
spec:
|
||||
config: '{{ $iface }}'
|
||||
{{- end }}
|
|
@ -1,20 +0,0 @@
|
|||
{{- if .Values.portForwardingList }}
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "ix-chart.fullname" . }}
|
||||
labels:
|
||||
{{- include "ix-chart.labels" . | nindent 4 }}
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
{{- range $index, $config := .Values.portForwardingList }}
|
||||
- port: {{ $config.containerPort }}
|
||||
targetPort: {{ $config.containerPort }}
|
||||
protocol: {{ $config.protocol }}
|
||||
nodePort: {{ $config.nodePort }}
|
||||
name: ix-{{ $.Release.Name }}-{{ $config.nodePort }}-{{ $index }}
|
||||
{{- end }}
|
||||
selector:
|
||||
{{- include "ix-chart.selectorLabels" . | nindent 4 }}
|
||||
{{- end }}
|
|
@ -1,17 +0,0 @@
|
|||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: "{{ .Release.Name }}-deployment-test"
|
||||
annotations:
|
||||
"helm.sh/hook": test
|
||||
spec:
|
||||
containers:
|
||||
- name: {{ .Release.Name }}-deployment-test
|
||||
image: "busybox"
|
||||
command:
|
||||
- nc
|
||||
args:
|
||||
- "-vz"
|
||||
- "{{ include "ix-chart.fullname" . }}"
|
||||
- "80"
|
||||
restartPolicy: Never
|
|
@ -1,14 +0,0 @@
|
|||
apiVersion: {{ template "apiVersion" . }}
|
||||
kind: {{ .Values.workloadType }}
|
||||
metadata:
|
||||
name: {{ include "ix-chart.fullname" . }}
|
||||
labels:
|
||||
{{- include "ix-chart.labels" . | nindent 4 }}
|
||||
spec:
|
||||
{{- if eq (include "workloadIsDeployment" .) "true" }}
|
||||
{{ include "deploymentSpec" . | nindent 2 }}
|
||||
{{- else if eq (include "workloadIsCronJob" .) "true" }}
|
||||
{{ include "cronJobSpec" . | nindent 2 }}
|
||||
{{- else }}
|
||||
{{ include "jobSpec" . | nindent 2 }}
|
||||
{{- end }}
|
|
@ -1,39 +0,0 @@
|
|||
# Default values for ix-chart.
|
||||
|
||||
image:
|
||||
repository: nginx
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: latest
|
||||
|
||||
# Restart / Update policy
|
||||
restartPolicy: Always
|
||||
updateStrategy: RollingUpdate
|
||||
|
||||
# Container CMD / entrypoint
|
||||
containerCommand: []
|
||||
containerArgs: []
|
||||
containerEnvironmentVariables: []
|
||||
|
||||
# Network related configuration
|
||||
externalInterfaces: []
|
||||
portForwardingList: [{"containerPort": 80, "nodePort": 32000}]
|
||||
hostPortsList: []
|
||||
hostNetwork: false
|
||||
dnsPolicy: Default
|
||||
dnsConfig:
|
||||
nameservers: []
|
||||
searches: []
|
||||
|
||||
# Storage related configuration
|
||||
hostPathVolumes: []
|
||||
volumes: []
|
||||
|
||||
# Probes
|
||||
# Liveness Probe
|
||||
livenessProbe: null
|
||||
|
||||
# Workload type
|
||||
workloadType: "Deployment"
|
||||
|
||||
gpuConfiguration: {}
|
|
@ -1,38 +0,0 @@
|
|||
# Default values for ix-chart.
|
||||
|
||||
image:
|
||||
repository: debian
|
||||
pullPolicy: IfNotPresent
|
||||
# Overrides the image tag whose default is the chart appVersion.
|
||||
tag: "latest"
|
||||
|
||||
# Restart / Update policy
|
||||
restartPolicy: Always
|
||||
updateStrategy: RollingUpdate
|
||||
|
||||
# Container CMD / entrypoint
|
||||
containerCommand: []
|
||||
containerArgs: []
|
||||
containerEnvironmentVariables: []
|
||||
|
||||
# Network related configuration
|
||||
externalInterfaces: []
|
||||
portForwardingList: []
|
||||
hostNetwork: false
|
||||
dnsPolicy: Default
|
||||
dnsConfig:
|
||||
nameservers: []
|
||||
searches: []
|
||||
|
||||
# Storage related configuration
|
||||
hostPathVolumes: []
|
||||
volumes: []
|
||||
|
||||
# Probes
|
||||
# Liveness Probe
|
||||
livenessProbe: null
|
||||
|
||||
# Workload type
|
||||
workloadType: "Deployment"
|
||||
|
||||
gpuConfiguration: {}
|
|
@ -1,2 +0,0 @@
|
|||
categories:
|
||||
- generic
|
Loading…
Reference in New Issue