YAML Runbooks
Creating a Plural runbook from YAML.
yaml
apiVersion: platform.plural.sh/v1alpha1 kind: Runbook metadata: name: scaling-manual labels: platform.plural.sh/pinned: 'true' {{ include "ghost.labels" . | indent 4 }} spec: name: Ghost Scaling description: overview of how to accurately scale ghost deployment display: |- {{ .Files.Get "runbooks/scaling.xml" | indent 4 }} datasources: - name: cpu type: prometheus prometheus: format: cpu legend: $pod query: sum(rate(container_cpu_usage_seconds_total{namespace="{{ .Release.Namespace }}",pod=~"ghost-[0-9]+"}[5m])) by (pod) - name: memory type: prometheus prometheus: format: memory legend: $pod query: sum(container_memory_working_set_bytes{namespace="{{ .Release.Namespace }}",pod=~"ghost-[0-9]+",image!="",container!=""}) by (pod) - name: statefulset type: kubernetes kubernetes: resource: statefulset name: ghost - name: nodes type: nodes actions: - name: scale action: config redirectTo: '/' configuration: updates: - path: - ghost - resources - requests - cpu valueFrom: cpu - path: - ghost - resources - requests - memory valueFrom: memory
Each datasource has a type. At the moment, the only types Plural supports are prometheus, kubernetes, and nodes. Each type has a spec that's specific to the type.
prometheus spec:
yaml
prometheus: format: legend: query:
kubernetes spec:
yaml
kubernetes: resource: # the kind of Kubernetes resource, i.e. statefulset name: # the name of the Kubernetes resource, i.e. ghost
nodes spec:
yaml
# No spec needed, this just fetches all the nodes in the Kubernetes cluster.
Additionally, in runbooks.yaml
, you can define a specific action that the runbook can take based off of context from what the user input has given it.
For example, in the file above, we've defined an action that allows the runbook to update the home values file for that installation. It's done by yaml path, which means it will recursively update ghost.resources.request.cpu
.
This will update the yaml file, save it back, issue a commit, and create a build in the console to actually apply the change.