kube-slack is a monitoring service for Kubernetes. When a pod has failed,
it will publish a message in Slack channel.
- Create an incoming webhook:
- In the Slack interface, click on the gears button (Channel Settings) near the search box.
- Select "Add an app or integration"
- Search for "Incoming WebHooks"
- Click on "Add configuration"
- Select the channel you want the bot to post to and submit.
- You can customize the icon and name if you want.
- Take note of the "Webhook URL". This will be something like https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
- Load this ReplicationController into your Kubernetes. Make sure you set
SLACK_URLto the Webhook URL.
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: kube-slack namespace: kube-system spec: replicas: 1 revisionHistoryLimit: 3 template: metadata: annotations: scheduler.alpha.kubernetes.io/critical-pod: "" name: kube-slack labels: app: kube-slack spec: containers: - name: kube-slack image: willwill/kube-slack:v3.2.2 env: - name: SLACK_URL value: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX resources: requests: memory: 30M cpu: 5m tolerations: - effect: NoSchedule key: node-role.kubernetes.io/master - key: CriticalAddonsOnly operator: Exists
- To test, try creating a failing pod. The bot should announce in the channel after 15s with the status
ErrImagePull. Example of failing image:
apiVersion: v1 kind: Pod metadata: name: kube-slack-test spec: containers: - image: willwill/inexisting name: kube-slack-test
Additionally, the following environment variables can be used:
TICK_RATE: How often to update in milliseconds. (Default to 15000 or 15s)
FLOOD_EXPIRE: Repeat notification after this many milliseconds has passed after status returned to normal. (Default to 60000 or 60s)
NOT_READY_MIN_TIME: Time to wait after pod become not ready before notifying. (Default to 60000 or 60s)
KUBE_USE_KUBECONFIG: Read Kubernetes credentials from active context in ~/.kube/config (default off)
KUBE_USE_CLUSTER: Read Kubernetes credentials from pod (default on)
KUBE_NAMESPACE_ONLY: Monitor current namespace only instead of whole cluster (default false)
In the case you want to ignore some specific deployments, you can mark the deployment with the following annotation:
annotations: kube-slack/ignore-pod: "true"
This annotation will make
kube-slack ignore any error on this particular pod.