This tool sends an alert to slack whenever there is a Kubernetes cronJob/Job failure/success.
No extra setup required to deploy this tool on to your cluster, just apply below K8s deploy manifest 🎉
This uses InClusterConfig
for accessing Kubernetes API.
- Namespace scoped i.e., each namespace should have this deploy separately
- All the jobs in the namespace are fetched and verified for failures
- Will add support for selectors in future 📋
If you wish to run this locally, clone this repository, set webhook
and namespace
env variables.
This expects kube config to be in ~/.kube/config
(default)
$ export webhook="slack_webhook_url" && export namespace="<namespace_name>" && go build && ./k8s-job-notify
You can also adjust the notification level to failed
instead of all
so that it only sends failed notificatinos.
$ export webhook="slack_webhook_url" && export namespace="<namespace_name>" && export notification_level="failed" && go build && ./k8s-job-notify
Docker 🐳
Docker images are hosted at hub.docker/k8s-job-notify
- If you want to use stable releases, please use github release tags. For example,
image: sukeesh/k8s-job-notify:1.2
- If you wish to use unstable, use
image: sukeesh/k8s-job-notify:beta
(triggered whenever push tomaster
is made)
Create and apply below kubernetes deployment in your cluster
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: kjn
name: k8s-job-notify
namespace: <namespace_name>
spec:
replicas: 1
selector:
matchLabels:
app: kjn
template:
metadata:
annotations:
sidecar.istio.io/inject: 'false'
labels:
app: kjn
spec:
#serviceAccountName: k8s-job-notify (optional, see RBAC)
containers:
- env:
- name: webhook
value: <slack_webhook_url> # creating a secret for this var is recommended
- name: namespace
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: incluster
value: '1'
- name: "notification_level"
value: 'all' # or 'failed'
image: sukeesh/k8s-job-notify:<tag>
name: k8s-job-notify
resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 500m
memory: 128Mi
If your kubernetes uses RBAC, you should apply the following manifest as well:
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: k8s-job-notify
namespace: <namespace_name>
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: <namespace_name>
name: job-reader
rules:
- apiGroups: ['batch'] # "" indicates the core API group
resources:
- jobs
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: k8s-job-notify
namespace: <namespace_name>
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: job-reader
subjects:
- kind: ServiceAccount
name: k8s-job-notify
namespace: <namespace_name>
If you want to show cluster name in message:
containers:
image: sukeesh/k8s-job-notify:<tag>
name: k8s-job-notify
args: ['--cluster-name=<your-cluster-name>']
Contributions, issues and feature requests are welcome.
👤 Sukeesh
- Twitter: @sukeeshbabu
Please feel free to ⭐️ this repository if this project helped you! 😉
Copyright © 2019 Sukeesh.
This project is MIT licensed.