We were using netcat to port to check if a service is up, but actually we can do like Docker / Podman compose and check the status. For now, I'm using the endpoint status, but maybe we can just check if the object is "up".
380 lines
12 KiB
YAML
380 lines
12 KiB
YAML
# Labels documentation.
|
|
#
|
|
# To create a label documentation:
|
|
#
|
|
# "labelname":
|
|
# type: the label type (bool, string, array, object...)
|
|
# short: a short description
|
|
# long: |-
|
|
# A multiline description to explain the label behavior
|
|
# example: |-
|
|
# yamlsyntax: here
|
|
#
|
|
# This file is embed in the Katenary binary and parsed in kanetaryLabels.go init() function.
|
|
#
|
|
# Note:
|
|
# - The short and long texts are parsed with text/template, so you can use template syntax.
|
|
# That means that if you want to display double brackets, you need to enclose them to
|
|
# prevent template to try to expand the content, for example :
|
|
# This is an {{ "{{ example }}" }}.
|
|
#
|
|
# This will display "This is an {{ exemple }}" in the output.
|
|
# - Use {{ .KatenaryPrefix }} to let Katenary replace it with the label prefix (e.g. "katenary.v3")
|
|
|
|
"main-app":
|
|
short: "Mark the service as the main app."
|
|
long: |-
|
|
This makes the service to be the main application. Its image tag is
|
|
considered to be the Chart appVersion and to be the defaultvalue in Pod
|
|
container image attribute.
|
|
|
|
!!! Warning
|
|
This label cannot be repeated in others services. If this label is
|
|
set in more than one service as true, Katenary will return an error.
|
|
example: |-
|
|
ghost:
|
|
image: ghost:1.25.5
|
|
labels:
|
|
# The chart is now named ghost, and the appVersion is 1.25.5.
|
|
# In Deployment, the image attribute is set to ghost:1.25.5 if
|
|
# you don't change the "tag" attribute in values.yaml
|
|
{{ .KatenaryPrefix }}/main-app: true
|
|
type: "bool"
|
|
|
|
"values":
|
|
short: "Environment variables to be added to the values.yaml"
|
|
long: |-
|
|
By default, all environment variables in the "env" and environment
|
|
files are added to ConfigMaps with the static values set. This label
|
|
allows adding environment variables to the values.yaml file.
|
|
|
|
Note that the value inside the configmap is {{ "{{ tpl vaname . }}" }}, so
|
|
you can set the value to a template that will be rendered with the
|
|
values.yaml file.
|
|
|
|
The value can be set with a documentation. This may help to understand
|
|
the purpose of the variable.
|
|
example: |-
|
|
env:
|
|
FOO: bar
|
|
DB_NAME: mydb
|
|
TO_CONFIGURE: something that can be changed in values.yaml
|
|
A_COMPLEX_VALUE: example
|
|
labels:
|
|
{{ .KatenaryPrefix }}/values: |-
|
|
# simple values, set as is in values.yaml
|
|
- TO_CONFIGURE
|
|
# complex values, set as a template in values.yaml with a documentation
|
|
- A_COMPLEX_VALUE: |-
|
|
This is the documentation for the variable to
|
|
configure in values.yaml.
|
|
It can be, of course, a multiline text.
|
|
type: "[]string or map[string]string"
|
|
|
|
"secrets":
|
|
short: "Env vars to be set as secrets."
|
|
long: |-
|
|
This label allows setting the environment variables as secrets. The variable
|
|
is removed from the environment and added to a secret object.
|
|
|
|
The variable can be set to the {{ printf "%s/%s" .KatenaryPrefix "values"}} too,
|
|
so the secret value can be configured in values.yaml
|
|
example: |-
|
|
env:
|
|
PASSWORD: a very secret password
|
|
NOT_A_SECRET: a public value
|
|
labels:
|
|
{{ .KatenaryPrefix }}/secrets: |-
|
|
- PASSWORD
|
|
type: "[]string"
|
|
|
|
"ports":
|
|
short: "Ports to be added to the service."
|
|
long: |-
|
|
Only useful for services without exposed port. It is mandatory if the
|
|
service is a dependency of another service.
|
|
example: |-
|
|
labels:
|
|
{{ .KatenaryPrefix }}/ports: |-
|
|
- 8080
|
|
- 8081
|
|
type: "[]uint32"
|
|
|
|
"ingress":
|
|
short: "Ingress rules to be added to the service."
|
|
long: |-
|
|
Declare an ingress rule for the service. The port should be exposed or
|
|
declared with {{ printf "%s/%s" .KatenaryPrefix "ports" }}.
|
|
example: |-
|
|
labels:
|
|
{{ .KatenaryPrefix }}/ingress: |-
|
|
port: 80
|
|
hostname: mywebsite.com (optional)
|
|
type: "object"
|
|
|
|
"map-env":
|
|
short: "Map env vars from the service to the deployment."
|
|
long: |-
|
|
Because you may need to change the variable for Kubernetes, this label
|
|
forces the value to another. It is also particullary helpful to use a template
|
|
value instead. For example, you could bind the value to a service name
|
|
with Helm attributes:
|
|
{{ "{{ tpl .Release.Name . }}" }}.
|
|
|
|
If you use __APP__ in the value, it will be replaced by the Chart name.
|
|
example: |-
|
|
env:
|
|
DB_HOST: database
|
|
RUNNING: docker
|
|
OTHER: value
|
|
labels:
|
|
{{ .KatenaryPrefix }}/map-env: |-
|
|
RUNNING: kubernetes
|
|
DB_HOST: '{{ "{{ include \"__APP__.fullname\" . }}" }}-database'
|
|
type: "map[string]string"
|
|
|
|
"health-check":
|
|
short: "Health check to be added to the deployment."
|
|
long: "Health check to be added to the deployment."
|
|
example: |-
|
|
labels:
|
|
{{ .KatenaryPrefix }}/health-check: |-
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /health
|
|
port: 8080
|
|
type: "object"
|
|
|
|
"same-pod":
|
|
short: "Move the same-pod deployment to the target deployment."
|
|
long: |-
|
|
This will make the service to be included in another service pod. Some services
|
|
must work together in the same pod, like a sidecar or a proxy or nginx + php-fpm.
|
|
|
|
Note that volume and VolumeMount are copied from the source to the target
|
|
deployment.
|
|
example: |-
|
|
web:
|
|
image: nginx:1.19
|
|
|
|
php:
|
|
image: php:7.4-fpm
|
|
labels:
|
|
{{ .KatenaryPrefix }}/same-pod: web
|
|
type: "string"
|
|
|
|
"description":
|
|
short: "Description of the service"
|
|
long: |-
|
|
This replaces the default comment in values.yaml file to the given description.
|
|
It is useful to document the service and configuration.
|
|
|
|
The value can be set with a documentation in multiline format.
|
|
example: |-
|
|
labels:
|
|
{{ .KatenaryPrefix }}/description: |-
|
|
This is a description of the service.
|
|
It can be multiline.
|
|
type: "string"
|
|
|
|
"ignore":
|
|
short: "Ignore the service"
|
|
long: "Ingoring a service to not be exported in helm chart."
|
|
example: "labels:\n {{ .KatenaryPrefix }}/ignore: \"true\""
|
|
type: "bool"
|
|
|
|
"dependencies":
|
|
short: "Add Helm dependencies to the service."
|
|
long: |-
|
|
Set the service to be, actually, a Helm dependency. This means that the
|
|
service will not be exported as template. The dependencies are added to
|
|
the Chart.yaml file and the values are added to the values.yaml file.
|
|
|
|
It's a list of objects with the following attributes:
|
|
|
|
- name: the name of the dependency
|
|
- repository: the repository of the dependency
|
|
- alias: the name of the dependency in values.yaml (optional)
|
|
- values: the values to be set in values.yaml (optional)
|
|
|
|
!!! Info
|
|
Katenary doesn't update the helm depenedencies by default.
|
|
|
|
Use `--helm-update` (or `-u`) flag to update the dependencies.
|
|
|
|
example: <code>katenary convert -u</code>
|
|
|
|
By setting an alias, it is possible to change the name of the dependency
|
|
in values.yaml.
|
|
example: |-
|
|
labels:
|
|
{{ .KatenaryPrefix }}/dependencies: |-
|
|
- name: mariadb
|
|
repository: oci://registry-1.docker.io/bitnamicharts
|
|
|
|
## optional, it changes the name of the section in values.yaml
|
|
# alias: mydatabase
|
|
|
|
## optional, it adds the values to values.yaml
|
|
values:
|
|
auth:
|
|
database: mydatabasename
|
|
username: myuser
|
|
password: the secret password
|
|
type: "[]object"
|
|
|
|
"configmap-files":
|
|
short: "Inject files as Configmap."
|
|
long: |-
|
|
It makes a file or directory to be converted to one or more ConfigMaps
|
|
and mounted in the pod. The file or directory is relative to the
|
|
service directory.
|
|
|
|
If it is a directory, all files inside it are added to the ConfigMap.
|
|
|
|
If the directory as subdirectories, so one ConfigMap per sub-path are created.
|
|
|
|
!!! Warning
|
|
It is not intended to be used to store an entire project in ConfigMaps.
|
|
It is intended to be used to store configuration files that are not managed
|
|
by the application, like nginx configuration files. Keep in mind that your
|
|
project sources should be stored in an application image or in a storage.
|
|
example: |-
|
|
volumes
|
|
- ./conf.d:/etc/nginx/conf.d
|
|
labels:
|
|
{{ .KatenaryPrefix }}/configmap-files: |-
|
|
- ./conf.d
|
|
type: "[]string"
|
|
|
|
"cronjob":
|
|
short: "Create a cronjob from the service."
|
|
long: |-
|
|
This adds a cronjob to the chart.
|
|
|
|
The label value is a YAML object with the following attributes:
|
|
|
|
- command: the command to be executed
|
|
- schedule: the cron schedule (cron format or @every where "every" is a
|
|
duration like 1h30m, daily, hourly...)
|
|
- rbac: false (optionnal), if true, it will create a role, a rolebinding and
|
|
a serviceaccount to make your cronjob able to connect the Kubernetes API
|
|
example: |-
|
|
labels:
|
|
{{ .KatenaryPrefix }}/cronjob: |-
|
|
command: echo "hello world"
|
|
schedule: "* */1 * * *" # or @hourly for example
|
|
type: "object"
|
|
|
|
"env-from":
|
|
short: "Add environment variables from another service."
|
|
type: "[]string"
|
|
long: |-
|
|
It adds environment variables from another service to the current service.
|
|
example: |-
|
|
service1:
|
|
image: nginx:1.19
|
|
environment:
|
|
FOO: bar
|
|
|
|
service2:
|
|
image: php:7.4-fpm
|
|
labels:
|
|
# get the congigMap from service1 where FOO is
|
|
# defined inside this service too
|
|
{{ .KatenaryPrefix }}/env-from: |-
|
|
- myservice1
|
|
|
|
"exchange-volumes":
|
|
short: Add exchange volumes (empty directory on the node) to share data
|
|
type: "[]object"
|
|
long: |-
|
|
This label allows sharing data between containres. The volume is created in
|
|
the node and mounted in the pod. It is useful to share data between containers
|
|
in a "same pod" logic. For example to let PHP-FPM and Nginx share the same direcotory.
|
|
|
|
This will create:
|
|
|
|
- an `emptyDir` volume in the deployment
|
|
- a `voumeMount` in the pod for **each container**
|
|
- a `initContainer` for each definition
|
|
|
|
Fields:
|
|
|
|
- name: the name of the volume (manadatory)
|
|
- mountPath: the path where the volume is mounted in the pod (optional, default is `/opt`)
|
|
- init: a command to run to initialize the volume with data (optional)
|
|
|
|
!!! Warning
|
|
This is highly experimental. This is mainly useful when using the "same-pod" label.
|
|
|
|
example: |-
|
|
nginx:
|
|
# ...
|
|
labels;
|
|
{{ .KatenaryPrefix }}/exchange-volumes: |-
|
|
- name: php-fpm
|
|
mountPath: /var/www/html
|
|
php:
|
|
# ...
|
|
labels:
|
|
{{ .KatenaryPrefix }}/exchange-volumes: |-
|
|
- name: php-fpm
|
|
mountPath: /opt
|
|
init: cp -ra /var/www/html/* /opt
|
|
|
|
"values-from":
|
|
short: "Add values from another service."
|
|
long: |-
|
|
This label allows adding values from another service to the current service.
|
|
It avoid duplicating values, environment or secrets that should be the same.
|
|
|
|
The key is the value to be added, and the value is the "key" to fetch in the
|
|
form `service_name.environment_name`.
|
|
|
|
type: "map[string]string"
|
|
example: |-
|
|
database:
|
|
image: mariadb:10.5
|
|
environment:
|
|
MARIADB_USER: myuser
|
|
MARIADB_PASSWORD: mypassword
|
|
labels:
|
|
# we can declare secrets
|
|
{{ .KatenaryPrefix }}/secrets: |-
|
|
- MARIADB_PASSWORD
|
|
php:
|
|
image: php:7.4-fpm
|
|
environment:
|
|
# it's duplicated in docker / podman
|
|
DB_USER: myuser
|
|
DB_PASSWORD: mypassword
|
|
labels:
|
|
# removes the duplicated, use the configMap and secrets from "database"
|
|
{{ .KatenaryPrefix }}/values-from: |-
|
|
DB_USER: database.MARIADB_USER
|
|
DB_PASSWORD: database.MARIADB_PASSWORD
|
|
|
|
"depends-on":
|
|
short: "Method to check if a service is ready (for depends_on)."
|
|
long: |-
|
|
When a service uses `depends_on`, Katenary creates an initContainer to wait
|
|
for the dependent service to be ready.
|
|
|
|
By default, Katenary uses the Kubernetes API to check if the service endpoint
|
|
has ready addresses. This method does not require the service to expose a port.
|
|
|
|
Set this label to `legacy` to use the old netcat method that requires a port
|
|
to be defined for the dependent service.
|
|
example: |-
|
|
web:
|
|
image: nginx
|
|
depends_on:
|
|
- database
|
|
labels:
|
|
# Use legacy netcat method (requires port)
|
|
{{ .KatenaryPrefix }}/depends-on: legacy
|
|
type: "string"
|
|
|
|
# vim: ft=gotmpl.yaml
|