That's so meta

Using Kubernetes and Metacontroller to manage everything else

Kubernetes

Metacontroller

Declarative Configuration

Instead of telling the computer what to do,
you tell it what you want

What does this system look like?
Kubernetes API Server
  ^
  | Watches
  |
Metacontroller
  |
  | POSTs
  v
Your Controller
The Flow
+---------+                                   +-----------+                               +-----------------+                         +-------------------+    +-----------+
| kubectl |                                   | APIServer |                               | Metacontroller  |                         | UpDownController  |    | UpDown.io  |
+---------+                                   +-----------+                               +-----------------+                         +-------------------+    +-----------+
     |                                              |                                              |                                            |                    |
     | kubectl apply -f updowncheck.yaml            |                                              |                                            |                    |
     |--------------------------------------------->|                                              |                                            |                    |
     |                                              |                                              |                                            |                    |
     | kubectl apply -f updowncontroller.yaml       |                                              |                                            |                    |
     |--------------------------------------------->|                                              |                                            |                    |
     |                                              |                                              |                                            |                    |
     |                                              |               Begin polling for updownchecks |                                            |                    |
     |                                              |<---------------------------------------------|                                            |                    |
     |                                              |                                              |                                            |                    |
     | kubectl apply -f udc-google.com.yaml         |                                              |                                            |                    |
     |--------------------------------------------->|                                              |                                            |                    |
     |                                              |                                              |                                            |                    |
     |                                              |                          gets udc-google.com |                                            |                    |
     |                                              |<---------------------------------------------|                                            |                    |
     |                                              |                                              |                                            |                    |
     |                                              |                                              | curl updowncontroller.local/sync           |                    |
     |                                              |                                              |------------------------------------------->|                    |
     |                                              |                                              |                                            |                    |
     |                                              |                                              |                                            | create check       |
     |                                              |                                              |                                            |------------------->|
     |                                              |                                              |                                            |                    |
     |                                              |                                              |                                            |             200 OK |
     |                                              |                                              |                                            |<-------------------|
     |                                              |                                              |                                            |                    |
     |                                              |                                              |                   200 OK, with status JSON |                    |
     |                                              |                                              |<-------------------------------------------|                    |
     |                                              |                                              |                                            |                    |
     |                                              |          Updates status body on CRD instance |                                            |                    |
     |                                              |<---------------------------------------------|                                            |                    |
     |                                              |                                              |                                            |                    |

Demo