Examples and Automations
This document provides practical examples of using the Kubernetes integration in Home Assistant automations and dashboards.
Automation Examples
Time-Based Scaling
Stop Multiple Deployments at Night
automation:
- alias: "Stop multiple deployments at night"
trigger:
platform: time
at: "22:00:00"
action:
- service: kubernetes.stop_deployment
data:
deployment_names:
- "development-api"
- "staging-api"
- "monitoring"
namespace: "production"
Start Multiple Deployments in the Morning
automation:
- alias: "Start multiple deployments in the morning"
trigger:
platform: time
at: "07:00:00"
action:
- service: kubernetes.start_deployment
data:
deployment_names:
- "web-app"
- "api-server"
- "cache-service"
replicas: 3
namespace: "production"
Scale Down During Off-Hours
automation:
- alias: "Scale down for off-hours"
trigger:
platform: time
at: "18:00:00"
condition:
condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
action:
- service: kubernetes.scale_deployment
data:
deployment_names:
- "web-frontend"
- "api-backend"
replicas: 1
namespace: "production"
Resource-Based Automations
Scale Up on High Load
automation:
- alias: "Scale up on high CPU usage"
trigger:
platform: numeric_state
entity_id: sensor.server_cpu_usage
above: 80
for:
minutes: 5
action:
- service: kubernetes.scale_deployment
data:
deployment_name: "web-app"
namespace: "production"
replicas: 5
Emergency Cluster Shutdown
automation:
- alias: "Emergency cluster shutdown"
trigger:
platform: state
entity_id: binary_sensor.ups_power_failure
to: "on"
action:
- service: kubernetes.stop_deployment
data:
deployment_names:
- "non-critical-app"
- "development-services"
namespace: "default"
- delay: "00:02:00"
- service: kubernetes.scale_deployment
data:
deployment_names:
- "critical-app"
replicas: 1
namespace: "production"
StatefulSet Examples
Scale Database StatefulSets
automation:
- alias: "Scale database StatefulSets for maintenance"
trigger:
platform: time
at: "02:00:00"
condition:
condition: time
weekday:
- sun
action:
- service: kubernetes.scale_statefulset
data:
statefulset_names:
- "database-primary"
- "database-replica"
replicas: 1
namespace: "database"
Stop Development Databases
automation:
- alias: "Stop development databases over weekend"
trigger:
platform: time
at: "19:00:00"
condition:
condition: time
weekday:
- fri
action:
- service: kubernetes.stop_statefulset
data:
statefulset_names:
- "dev-postgres"
- "dev-redis"
namespace: "development"
Node Monitoring Automations
Alert on Node Not Ready
automation:
- alias: "Alert on node not ready"
trigger:
- platform: state
entity_id:
- sensor.kubernetes_node_master_1
- sensor.kubernetes_node_worker_1
- sensor.kubernetes_node_worker_2
to: "NotReady"
for:
minutes: 2
action:
- service: notify.mobile_app_your_phone
data:
title: "Kubernetes Node Alert"
message: >
Node {{ trigger.entity_id.split('.')[-1].replace('kubernetes_node_', '').replace('_', '-') }}
is not ready. Status: {{ trigger.to_state.state }}
data:
priority: high
Monitor Node Resource Usage
automation:
- alias: "High memory usage alert"
trigger:
- platform: template
value_template: >
{% set nodes = states.sensor | selectattr('entity_id', 'match', 'sensor.kubernetes_node_.*') | list %}
{% for node in nodes %}
{% set memory_used = state_attr(node.entity_id, 'memory_capacity_gb') | float - state_attr(node.entity_id, 'memory_allocatable_gb') | float %}
{% set memory_total = state_attr(node.entity_id, 'memory_capacity_gb') | float %}
{% if memory_used / memory_total > 0.9 %}
true
{% endif %}
{% endfor %}
action:
- service: notify.persistent_notification
data:
title: "High Memory Usage"
message: >
One or more nodes are running low on memory.
Check the node monitoring dashboard for details.
Log Node Status Changes
automation:
- alias: "Log node status changes"
trigger:
- platform: state
entity_id:
- sensor.kubernetes_node_master_1
- sensor.kubernetes_node_worker_1
- sensor.kubernetes_node_worker_2
condition:
- condition: template
value_template: "{{ trigger.from_state.state != trigger.to_state.state }}"
action:
- service: logbook.log
data:
name: "Kubernetes Node Status"
message: >
Node {{ trigger.entity_id.split('.')[-1].replace('kubernetes_node_', '').replace('_', '-') }}
changed from {{ trigger.from_state.state }} to {{ trigger.to_state.state }}
entity_id: "{{ trigger.entity_id }}"
Dashboard Examples
Basic Cluster Overview
views:
- title: "Kubernetes Cluster"
path: kubernetes
cards:
- type: entities
title: "Cluster Status"
entities:
- entity: sensor.kubernetes_pods_count
name: "Running Pods"
- entity: sensor.kubernetes_nodes_count
name: "Cluster Nodes"
- entity: sensor.kubernetes_deployments_count
name: "Active Deployments"
- entity: sensor.kubernetes_statefulsets_count
name: "StatefulSets"
- entity: sensor.kubernetes_cronjobs_count
name: "CronJobs"
- entity: binary_sensor.kubernetes_cluster_health
name: "Cluster Health"
Deployment Control Dashboard
views:
- title: "Deployment Control"
path: kubernetes-deployments
cards:
- type: entities
title: "Production Deployments"
entities:
- switch.kubernetes_deployment_web_app
- switch.kubernetes_deployment_api_server
- switch.kubernetes_deployment_cache_service
- type: entities
title: "Development Services"
entities:
- switch.kubernetes_deployment_dev_api
- switch.kubernetes_deployment_test_runner
Resource Monitoring
views:
- title: "Resource Monitoring"
path: kubernetes-resources
cards:
- type: gauge
entity: sensor.kubernetes_pods_count
min: 0
max: 50
name: "Pod Count"
severity:
green: 0
yellow: 30
red: 45
- type: history-graph
entities:
- sensor.kubernetes_pods_count
- sensor.kubernetes_deployments_count
hours_to_show: 24
### Node Monitoring Dashboard
```yaml
views:
- title: "Node Status"
path: kubernetes-nodes
cards:
- type: entities
title: "Node Overview"
entities:
- entity: sensor.kubernetes_node_master_1
name: "Master Node"
- entity: sensor.kubernetes_node_worker_1
name: "Worker Node 1"
- entity: sensor.kubernetes_node_worker_2
name: "Worker Node 2"
show_header_toggle: false
- type: custom:auto-entities
card:
type: entities
title: "All Cluster Nodes"
filter:
include:
- entity_id: "sensor.kubernetes_node_*"
sort:
method: name
- type: markdown
content: >
## Node Resources
**{{ states('sensor.kubernetes_node_worker_1') }}** Worker 1:
- Memory: {{ state_attr('sensor.kubernetes_node_worker_1', 'memory_allocatable_gb') }}GB / {{ state_attr('sensor.kubernetes_node_worker_1', 'memory_capacity_gb') }}GB
- CPU Cores: {{ state_attr('sensor.kubernetes_node_worker_1', 'cpu_cores') }}
- Internal IP: {{ state_attr('sensor.kubernetes_node_worker_1', 'internal_ip') }}
- OS: {{ state_attr('sensor.kubernetes_node_worker_1', 'os_image') }}
Script Examples
Deployment Management Scripts
Scale Environment
script:
scale_production_environment:
alias: "Scale Production Environment"
sequence:
- service: kubernetes.scale_deployment
data:
deployment_names:
- "web-frontend"
- "api-backend"
- "worker-queue"
replicas: "{{ replicas | default(3) }}"
namespace: "production"
Rolling Restart
script:
rolling_restart_deployment:
alias: "Rolling Restart Deployment"
sequence:
- service: kubernetes.scale_deployment
data:
deployment_name: "{{ deployment_name }}"
namespace: "{{ namespace }}"
replicas: 0
- delay: "00:00:30"
- service: kubernetes.scale_deployment
data:
deployment_name: "{{ deployment_name }}"
namespace: "{{ namespace }}"
replicas: "{{ original_replicas | default(1) }}"
Notification Examples
Deployment Failure Alerts
automation:
- alias: "Alert on deployment failure"
trigger:
platform: state
entity_id: switch.kubernetes_deployment_critical_app
to: "off"
for:
minutes: 2
action:
- service: notify.mobile_app
data:
title: "Deployment Alert"
message: "Critical app deployment is down!"
data:
priority: high
Cluster Health Monitoring
automation:
- alias: "Cluster health alert"
trigger:
platform: state
entity_id: binary_sensor.kubernetes_cluster_health
to: "off"
action:
- service: notify.slack
data:
message: "🚨 Kubernetes cluster is unhealthy!"
target: "#devops"
Advanced Examples
Conditional Scaling Based on Day
automation:
- alias: "Smart scaling based on day"
trigger:
platform: time
at: "08:00:00"
action:
- choose:
- conditions:
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
sequence:
- service: kubernetes.scale_deployment
data:
deployment_name: "business-app"
namespace: "production"
replicas: 5
- conditions:
- condition: time
weekday:
- sat
- sun
sequence:
- service: kubernetes.scale_deployment
data:
deployment_name: "business-app"
namespace: "production"
replicas: 2
Multi-Environment Management
script:
promote_to_production:
alias: "Promote to Production"
sequence:
- service: kubernetes.stop_deployment
data:
deployment_name: "{{ app_name }}"
namespace: "staging"
- delay: "00:01:00"
- service: kubernetes.start_deployment
data:
deployment_name: "{{ app_name }}"
namespace: "production"
replicas: 3
These examples demonstrate the flexibility of the Kubernetes integration for automating cluster management tasks directly from Home Assistant.