Simple Kubernetes Resources installer
Dependencies
- Python >= 3.12
pip install kubeler
kubeler install --installer=./examples/installer.yaml
You can use your existing K8s manifest files. For a simple setup, just add cmd: [kubectl/helm command] to your manifest file. For example, you can take a look at some examples in the examples directory.
#cmd: kubectl apply -f namespace.yaml
---
kind: Namespace
apiVersion: v1
metadata:
name: staging
labels:
name: staging
---
Then, create an installer YAML file to define your K8s resources. For example:
init:
cmd:
- apt update -y
- apt upgrade
group:
name: k8s
steps:
- name: cluster
dir: ./cluster
- name: cert-manager
dir: ./cert
Please note that when you create installer.yml, Kubeler will execute commands in order. So, make sure to place dependent resources before any resources that rely on them.
If you have multiple files inside a directory and want to define the execution order, you can list your files in the desired sequence.
...
- name: argocd
dir: ./tools/argocd
files:
- manifest.yaml
- ingress.yaml
You can also use variables to dynamically insert values into your manifest file.
...
spec:
ingressClassName: {{ ingress_class }}
rules:
- host: {{ host_url }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
name: https
Then, define the variables in installer.yaml.
- name: argocd
dir: ./tools/argocd
files:
- manifest.yaml
- ingress.yaml
vars:
- name: ingress_class
value: nginx
- name: host_url
value: argocd.example.com
You can also reference variables from a previous step using ref..
- name: redis
dir: ./tools/redis
vars:
- name: password
value: Password01
- name: harbor
dir: ./tools/harbor
vars:
- name: redis_password
value: ref.redis.vars.password
You can also reference variables from environment variables using env.. In addition, using .env file defined in the same directory with installer.yaml also works for this case.
- name: harbor
dir: ./tools/harbor
vars:
- name: redis_password
value: env.REDIS_PASSWORD
name: Name of the step.dir: Directory where the manifest files reside.files: List of files in the directory that will be executed in order.vars: Variables for dynamic values inside the manifest file.
There are some options available with installing Kubernetes Resources using Kubeler.
Use attributes exclude=yes or argument --excludes if you want to skip some steps from execution
steps:
- name: cluster
dir: ./cluster
exclude: yes
or
--installer=./../examples/installer.yaml --excludes=argocd,redis
Use argument --start-from if you want to execute steps from a certain point
--installer=./../examples/installer.yaml --start-from=argocd
Use argument --steps if you want to only execute some steps and exclude the other
--installer=./../examples/installer.yaml --steps=argocd,redis
Use the --watch argument to monitor a directory and automatically apply changes when they occur.
Update installer.yaml to set watch attribute
group:
name: k8s
watch:
enabled: true
dir:
- ./applications
- ./cluster
and then, run
kubeler install --installer=./examples/installer.yaml --watch=true