feat(cronjobs): cronjob add suspend parameter

This commit is contained in:
weian
2022-09-27 20:55:27 +08:00
parent 2e064e65da
commit 4383dfb7a5
3 changed files with 157 additions and 199 deletions

View File

@ -14,4 +14,4 @@ type: library
# 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.
version: 1.0.0
version: 1.1.0

351
README.md
View File

@ -4,38 +4,34 @@ This chart was originally forked from [`incubator/common`](https://github.com/he
It provides utilities that reflect best practices of Kubernetes chart development, making it faster for you to write charts.
## Contents
- [Getting Started](#getting-started)
* [Adding Repository](#adding-repository)
* [Adding Dependency](#adding-dependency)
* [Using Starter](#using-starter)
- [Adding Repository](#adding-repository)
- [Adding Dependency](#adding-dependency)
- [Using Starter](#using-starter)
- [Resource Kinds](#resource-kinds)
* [`common.configMap`](#commonconfigmap)
* [`common.cronJob`](#commoncronjob)
* [`common.deployment`](#commondeployment)
* [`common.hpa`](#commonhpa)
* [`common.ingress`](#commoningress)
* [`common.pdb`](#commonpdb)
* [`common.secret`](#commonsecret)
* [`common.service`](#commonservice)
* [`common.serviceAccount`](#commonserviceaccount)
* [`common.serviceMonitor`](#commonservicemonitor)
* [`common.serviceMonitor.secret`](#commonservicemonitorsecret)
- [`common.configMap`](#commonconfigmap)
- [`common.cronJob`](#commoncronjob)
- [`common.deployment`](#commondeployment)
- [`common.hpa`](#commonhpa)
- [`common.ingress`](#commoningress)
- [`common.pdb`](#commonpdb)
- [`common.secret`](#commonsecret)
- [`common.service`](#commonservice)
- [`common.serviceAccount`](#commonserviceaccount)
- [`common.serviceMonitor`](#commonservicemonitor)
- [`common.serviceMonitor.secret`](#commonservicemonitorsecret)
- [Partial Objects](#partial-objects)
* [`common.chart`](#commonchart)
* [`common.container`](#commoncontainer)
* [`common.fullname`](#commonfullname)
* [`common.labels`](#commonlabels)
* [`common.metadata`](#commonmetadata)
* [`common.name`](#commonname)
* [`common.pod.template`](#commonpodtemplate)
* [`common.selectorLabels`](#commonselectorlabels)
* [`common.serviceAccountName`](#commonserviceaccountname)
- [`common.chart`](#commonchart)
- [`common.container`](#commoncontainer)
- [`common.fullname`](#commonfullname)
- [`common.labels`](#commonlabels)
- [`common.metadata`](#commonmetadata)
- [`common.name`](#commonname)
- [`common.pod.template`](#commonpodtemplate)
- [`common.selectorLabels`](#commonselectorlabels)
- [`common.serviceAccountName`](#commonserviceaccountname)
## Getting Started
@ -84,8 +80,6 @@ $ curl https://raw.githubusercontent.com/hahow/common-chart/master/create.sh | b
Now, there is a chart in `./mychart`. You can edit it and create your own templates.
## Resource Kinds
Kubernetes defines a variety of resource kinds, from `Secret` to `StatefulSet`. We define some of the most common kinds in a way that lets you easily work with them.
@ -122,8 +116,6 @@ The [`common.service`](#commonservice) template is responsible for rendering the
Each implemented base resource is described in greater detail below.
### `common.configMap`
The `common.configMap` template accepts a list of two values:
@ -167,8 +159,6 @@ metadata:
name: release-name-mychart
```
### `common.cronJob`
The `common.cronJob` template accepts a list of five values:
@ -186,29 +176,30 @@ It defines a basic `CronJob` with the following defaults:
In addition, it uses the following configuration from the `$cronJob`:
| Value | Description |
| ----- | ----------- |
| `$cronJob.schedule` | Schedule for the cronjob |
| `$cronJob.concurrencyPolicy` | [optional] `Allow\|Forbid\|Replace` concurrent jobs |
| `$cronJob.failedJobsHistoryLimit` | [optional] Specify the number of failed jobs to keep |
| Value | Description |
| ------------------------------------- | ------------------------------------------------------- |
| `$cronJob.schedule` | Schedule for the cronjob |
| `$cronJob.concurrencyPolicy` | [optional] `Allow\|Forbid\|Replace` concurrent jobs |
| `$cronJob.failedJobsHistoryLimit` | [optional] Specify the number of failed jobs to keep |
| `$cronJob.successfulJobsHistoryLimit` | [optional] Specify the number of completed jobs to keep |
| `$cronJob.suspend` | [optional] Specify cronjob is suspend, default false |
Underneath the hood, it invokes [`common.pod.template`](#commonpodtemplate) template with `$pod` to populate the `PodTemplate`.
Example use:
```yaml
{{- include "common.cronJob" (list . .Values.cronJob .Values .Values.serviceAccount) }}
{
{
- include "common.cronJob" (list . .Values.cronJob .Values .Values.serviceAccount),
},
}
## The following is the same as above:
# {{- include "common.cronJob" (list . .Values.cronJob .Values .Values.serviceAccount "mychart.cronJob") }}
# {{- define "mychart.cronJob" -}}
# {{- end }}
```
### `common.deployment`
The `common.deployment` template accepts a list of five values:
@ -221,31 +212,32 @@ The `common.deployment` template accepts a list of five values:
It defines a basic `Deployment` with the following settings:
| Value | Description |
| ----- | ----------- |
| `$deployment.replicaCount` | Number of replica. If autoscaling enabled, this field will be ignored |
| `$deployment.imagePullSecrets` | [optional] Name of Secret resource containing private registry credentials |
| `$deployment.podSecurityContext` | [optional] Security options for pod |
| `$deployment.nodeSelector` | [optional] Node labels for pod assignment |
| `$deployment.affinity` | [optional] Expressions for affinity |
| `$deployment.tolerations` | [optional] Toleration labels for pod assignment |
| `$autoscaling.enabled` | [optional] Set this to `true` to enable autoscaling |
| Value | Description |
| -------------------------------- | -------------------------------------------------------------------------- |
| `$deployment.replicaCount` | Number of replica. If autoscaling enabled, this field will be ignored |
| `$deployment.imagePullSecrets` | [optional] Name of Secret resource containing private registry credentials |
| `$deployment.podSecurityContext` | [optional] Security options for pod |
| `$deployment.nodeSelector` | [optional] Node labels for pod assignment |
| `$deployment.affinity` | [optional] Expressions for affinity |
| `$deployment.tolerations` | [optional] Toleration labels for pod assignment |
| `$autoscaling.enabled` | [optional] Set this to `true` to enable autoscaling |
Underneath the hood, it invokes [`common.pod.template`](#commonpodtemplate) template with `$deployment` to populate the `PodTemplate`.
Example use:
```yaml
{{- include "common.deployment" (list . .Values .Values.autoscaling .Values.serviceAccount) }}
{
{
- include "common.deployment" (list . .Values .Values.autoscaling .Values.serviceAccount),
},
}
## The following is the same as above:
# {{- include "common.deployment" (list . .Values .Values.autoscaling .Values.serviceAccount "mychart.deployment") }}
# {{- define "mychart.deployment" -}}
# {{- end }}
```
### `common.hpa`
The `common.hpa` template accepts a list of three values:
@ -272,8 +264,7 @@ autoscaling:
Example use:
```yaml
{{- include "common.hpa" (list . .Values.autoscaling) }}
{ { - include "common.hpa" (list . .Values.autoscaling) } }
## The following is the same as above:
# {{- include "common.hpa" (list . .Values.autoscaling "mychart.hpa") }}
# {{- define "mychart.hpa" -}}
@ -296,18 +287,18 @@ metadata:
spec:
maxReplicas: 5
metrics:
- resource:
name: cpu
target:
averageUtilization: 50
type: Utilization
type: Resource
- resource:
name: memory
target:
averageUtilization: 90
type: Utilization
type: Resource
- resource:
name: cpu
target:
averageUtilization: 50
type: Utilization
type: Resource
- resource:
name: memory
target:
averageUtilization: 90
type: Utilization
type: Resource
minReplicas: 3
scaleTargetRef:
apiVersion: apps/v1
@ -315,8 +306,6 @@ spec:
name: release-name-mychart
```
### `common.ingress`
The `common.ingress` template accepts a list of four values:
@ -335,14 +324,14 @@ ingress:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
hosts:
- host: chart-example.local
paths:
- path: /path/to/somewhere
pathType: ImplementationSpecific
- host: chart-example.local
paths:
- path: /path/to/somewhere
pathType: ImplementationSpecific
tls:
- secretName: chart-example-tls
hosts:
- chart-example.local
- secretName: chart-example-tls
hosts:
- chart-example.local
service:
type: ClusterIP
port: 80
@ -351,8 +340,7 @@ service:
Example use:
```yaml
{{- include "common.ingress" (list . .Values.ingress .Values.service) }}
{ { - include "common.ingress" (list . .Values.ingress .Values.service) } }
## The following is the same as above:
# {{- include "common.ingress" (list . .Values.ingress .Values.service "mychart.ingress") }}
# {{- define "mychart.ingress" -}}
@ -377,24 +365,22 @@ metadata:
name: release-name-mychart
spec:
rules:
- host: "chart-example.local"
http:
paths:
- backend:
service:
name: release-name-mychart
port:
number: 80
path: /path/to/somewhere
pathType: ImplementationSpecific
- host: "chart-example.local"
http:
paths:
- backend:
service:
name: release-name-mychart
port:
number: 80
path: /path/to/somewhere
pathType: ImplementationSpecific
tls:
- hosts:
- "chart-example.local"
secretName: chart-example-tls
- hosts:
- "chart-example.local"
secretName: chart-example-tls
```
### `common.pdb`
The `common.pdb` template accepts a list of five values:
@ -421,8 +407,11 @@ podDisruptionBudget:
Example use:
```yaml
{{- include "common.pdb" (list . .Values.podDisruptionBudget .Values .Values.autoscaling) }}
{
{
- include "common.pdb" (list . .Values.podDisruptionBudget .Values .Values.autoscaling),
},
}
## The following is the same as above:
# {{- include "common.pdb" (list . .Values.podDisruptionBudget .Values .Values.autoscaling "mychart.pdb") }}
# {{- define "mychart.pdb" -}}
@ -450,8 +439,6 @@ spec:
app.kubernetes.io/name: mychart
```
### `common.secret`
The `common.secret` template accepts a list of two values:
@ -496,8 +483,6 @@ metadata:
type: Opaque
```
### `common.service`
The `common.service` template accepts a list of three values:
@ -569,9 +554,9 @@ metadata:
name: release-name-mychart-www
spec:
ports:
- name: www
port: 80
targetPort: 8080
- name: www
port: 80
targetPort: 8080
selector:
app.kubernetes.io/instance: release-name
app.kubernetes.io/name: mychart
@ -590,12 +575,12 @@ metadata:
name: release-name-mychart-mail
spec:
ports:
- name: smtp
port: 25
targetPort: 25
- name: imaps
port: 993
targetPort: 993
- name: smtp
port: 25
targetPort: 25
- name: imaps
port: 993
targetPort: 993
selector:
app.kubernetes.io/instance: release-name
app.kubernetes.io/name: mychart
@ -603,8 +588,6 @@ spec:
type: ClusterIP
```
### `common.serviceAccount`
The `common.serviceAccount` template accepts a list of three values:
@ -630,8 +613,7 @@ serviceAccount:
Example use:
```yaml
{{- include "common.serviceAccount" (list . .Values.serviceAccount) }}
{ { - include "common.serviceAccount" (list . .Values.serviceAccount) } }
## The following is the same as above:
# {{- include "common.serviceAccount" (list . .Values.serviceAccount "mychart.serviceAccount") }}
# {{- define "mychart.serviceAccount" -}}
@ -653,8 +635,6 @@ metadata:
name: release-name-mychart
```
### `common.serviceMonitor`
The `common.serviceMonitor` template accepts a list of three values:
@ -687,8 +667,7 @@ serviceMonitor:
Example use:
```yaml
{{- include "common.serviceMonitor" (list . .Values.serviceMonitor) }}
{ { - include "common.serviceMonitor" (list . .Values.serviceMonitor) } }
## The following is the same as above:
# {{- include "common.serviceMonitor" (list . .Values.serviceMonitor "mychart.serviceMonitor") }}
# {{- define "mychart.serviceMonitor" -}}
@ -711,28 +690,26 @@ metadata:
namespace: monitoring
spec:
endpoints:
- basicAuth:
password:
key: password
name: release-name-mychart
username:
key: username
name: release-name-mychart
interval: 30s
path: /path/to/metrics
port: 80
scrapeTimeout: 30s
- basicAuth:
password:
key: password
name: release-name-mychart
username:
key: username
name: release-name-mychart
interval: 30s
path: /path/to/metrics
port: 80
scrapeTimeout: 30s
namespaceSelector:
matchNames:
- default
- default
selector:
matchLabels:
app.kubernetes.io/instance: release-name
app.kubernetes.io/name: mychart
```
### `common.serviceMonitor.secret`
The `common.serviceMonitor.secret` template accepts a list of three values:
@ -756,8 +733,7 @@ serviceMonitor:
Example use:
```yaml
{{- include "common.serviceMonitor.secret" (list . .Values.serviceMonitor) }}
{ { - include "common.serviceMonitor.secret" (list . .Values.serviceMonitor) } }
## The following is the same as above:
# {{- include "common.serviceMonitor.secret" (list . .Values.serviceMonitor "mychart.serviceMonitor.secret") }}
# {{- define "mychart.serviceMonitor.secret" -}}
@ -784,14 +760,10 @@ metadata:
type: Opaque
```
## Partial Objects
When writing Kubernetes resources, you may find the following helpers useful to construct parts of the spec.
### `common.chart`
The `common.chart` helper prints the chart name and version, escaped to be legal in a Kubernetes label field.
@ -799,7 +771,7 @@ The `common.chart` helper prints the chart name and version, escaped to be legal
Example template:
```yaml
helm.sh/chart: {{ include "common.chart" . }}
helm.sh/chart: { { include "common.chart" . } }
```
For the chart `foo` with version `1.2.3-beta.55+1234`, this will render:
@ -810,8 +782,6 @@ helm.sh/chart: foo-1.2.3-beta.55_1234
(Note that `+` is an illegal character in label values)
### `common.container`
The `common.container` template accepts a list of three values:
@ -877,7 +847,7 @@ image:
securityContext:
capabilities:
drop:
- ALL
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
@ -916,46 +886,44 @@ spec:
app.kubernetes.io/name: mychart
spec:
containers:
- image: nginx:stable
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /
port: http
name: mychart
ports:
- containerPort: 80
name: http
protocol: TCP
readinessProbe:
httpGet:
path: /
port: http
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
securityContext:
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
- image: nginx:stable
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /
port: http
name: mychart
ports:
- containerPort: 80
name: http
protocol: TCP
readinessProbe:
httpGet:
path: /
port: http
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
securityContext:
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
serviceAccountName: release-name-mychart
```
### `common.fullname`
The `common.fullname` template generates a name suitable for the `name:` field in Kubernetes metadata. It is used like this:
```yaml
name: {{ include "common.fullname" . }}
name: { { include "common.fullname" . } }
```
This prints the value of `{{ .Release.Name }}-{{ .Chart.Name }}` by default, but can be overridden with `.Values. fullnameOverride`:
@ -978,8 +946,6 @@ name: release-name-mychart
Output of this function is truncated at 63 characters, which is the maximum length of name.
### `common.labels`
`common.selectorLabels` prints the standard set of labels.
@ -1000,8 +966,6 @@ app.kubernetes.io/version: 1.16.0
helm.sh/chart: mychart-0.1.0
```
### `common.metadata`
The `common.metadata` helper generates value for the `metadata:` section of a Kubernetes resource.
@ -1016,9 +980,7 @@ It generates standard labels and a name field.
Example template:
```yaml
metadata:
{{- include "common.metadata" (list .) | nindent 2 }}
metadata: { { - include "common.metadata" (list .) | nindent 2 } }
## The following is the same as above:
# metadata:
# {{- include "common.metadata" (list . "mychart.metadata") | nindent 2 }}
@ -1041,14 +1003,12 @@ metadata:
Most of the common templates that define a resource type (e.g. `common.configMap` or `common.cronJob`) use this to generate the metadata, which means they inherit the same `labels` and `name` fields.
### `common.name`
The `common.name` template generates a name suitable for the `app.kubernetes.io/name` label. It is used like this:
```yaml
app.kubernetes.io/name: {{ include "common.name" . }}
app.kubernetes.io/name: { { include "common.name" . } }
```
This prints the value of `{{ .Chart.Name }}` by default, but can be overridden with `.Values.nameOverride`:
@ -1071,7 +1031,6 @@ app.kubernetes.io/name: mychart
Output of this function is truncated at 63 characters, which is the maximum length of name.
### `common.pod.template`
The `common.pod.template` template accepts a list of four values:
@ -1088,19 +1047,17 @@ It creates a basic `PodTemplate` spec to be used within a `Deployment` or `CronJ
It also uses the following configuration from the `$pod`:
| Value | Description |
| ----- | ----------- |
| `$pod.imagePullSecrets` | Names of secrets containing private registry credentials |
| `$pod.podAnnotations` | Pod annotations |
| `$pod.podSecurityContext` | Security options |
| `$pod.nodeSelector ` | Node labels for pod assignment |
| `$pod.affinity ` | Expressions for affinity |
| `$pod.tolerations ` | Toleration labels for pod assignment |
| Value | Description |
| ------------------------- | -------------------------------------------------------- |
| `$pod.imagePullSecrets` | Names of secrets containing private registry credentials |
| `$pod.podAnnotations` | Pod annotations |
| `$pod.podSecurityContext` | Security options |
| `$pod.nodeSelector ` | Node labels for pod assignment |
| `$pod.affinity ` | Expressions for affinity |
| `$pod.tolerations ` | Toleration labels for pod assignment |
Underneath the hood, it invokes [`common.container`](#commoncontainer) template with `$pod` to populate the `PodSpec`'s container list.
### `common.selectorLabels`
`common.selectorLabels` prints the standard set of selector labels.
@ -1118,8 +1075,6 @@ app.kubernetes.io/instance: release-name
app.kubernetes.io/name: mychart
```
### `common.serviceAccountName`
The `common.serviceAccountName` template accepts a list of two values:

View File

@ -29,6 +29,9 @@ spec:
{{- with $cronJob.successfulJobsHistoryLimit }}
successfulJobsHistoryLimit: {{ . }}
{{- end }}
{{- with $cronJob.suspend }}
suspend: {{ . }}
{{- end }}
jobTemplate:
metadata:
labels: