allocator: add suspend and resume; and reset

Suspend suspends the instance, whereas resume resumes it (by scaling the
deployment to 0 and back to 1).

Reset suspends the instance (if not already suspended), and
destroys/recreates the persistent disk.

Only expose this via the UI for now out of laziness.

Change-Id: I76dbad297a77b302a37e897831dd9e8eafd7c7e8
diff --git a/services/allocator/allocator.vdl.go b/services/allocator/allocator.vdl.go
index 2e37a22..1f1851b 100644
--- a/services/allocator/allocator.vdl.go
+++ b/services/allocator/allocator.vdl.go
@@ -27,6 +27,7 @@
 	MountName     string
 	BlessingNames []string
 	CreationTime  time.Time
+	Replicas      int32
 }
 
 func (Instance) __VDLReflect(struct {
@@ -47,6 +48,9 @@
 	if !x.CreationTime.IsZero() {
 		return false
 	}
+	if x.Replicas != 0 {
+		return false
+	}
 	return true
 }
 
@@ -84,6 +88,11 @@
 			return err
 		}
 	}
+	if x.Replicas != 0 {
+		if err := enc.NextFieldValueInt("Replicas", vdl.Int32Type, int64(x.Replicas)); err != nil {
+			return err
+		}
+	}
 	if err := enc.NextField(""); err != nil {
 		return err
 	}
@@ -147,6 +156,13 @@
 			if err := vdltime.TimeToNative(wire, &x.CreationTime); err != nil {
 				return err
 			}
+		case "Replicas":
+			switch value, err := dec.ReadValueInt(32); {
+			case err != nil:
+				return err
+			default:
+				x.Replicas = int32(value)
+			}
 		default:
 			if err := dec.SkipValue(); err != nil {
 				return err
diff --git a/services/allocator/allocator/main.go b/services/allocator/allocator/main.go
index 8686172..9026695 100644
--- a/services/allocator/allocator/main.go
+++ b/services/allocator/allocator/main.go
@@ -40,6 +40,7 @@
 Created: {{.CreationTime}}
 MountName: {{.MountName}}
 BlessingPatterns: {{.BlessingNames}}
+Replicas: {{.Replicas}}
 `
 
 var listTmpl *template.Template
diff --git a/services/allocator/allocatord/assets/assets.go b/services/allocator/allocatord/assets/assets.go
index c444a50..5d5bb39 100644
--- a/services/allocator/allocatord/assets/assets.go
+++ b/services/allocator/allocatord/assets/assets.go
@@ -204,7 +204,7 @@
 	return a, nil
 }
 
-var _homeTmplHtml = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xac\x57\xdf\x6f\xdb\x36\x10\x7e\xf7\x5f\x71\xd5\x02\x58\x5e\x2c\x29\x41\xdf\x12\xd9\x40\xb3\x14\x68\x81\x3a\x2b\xd6\x74\x40\x9f\x06\x5a\xa2\x2d\x36\x12\xe9\x91\x94\x1d\xc1\xd0\xff\xbe\x23\xa9\x1f\x96\xe3\x64\x0d\xda\x02\xb5\x2d\xf1\xe3\xdd\xf7\xdd\x1d\x8f\x97\xf8\x4d\x2a\x12\x5d\x6d\x28\x64\xba\xc8\xe7\xa3\xb8\xfd\xa2\x24\x9d\x8f\x00\x62\xcd\x74\x4e\xe7\x7f\x13\x4e\x52\x56\x16\xb0\xdf\xdb\x17\x10\x7e\xa1\x72\x4b\xe5\x1d\x29\x68\x5d\xc3\xbb\x3c\x17\x09\xd1\x42\xc6\x91\xc3\xe3\x4e\x44\xd2\x62\x93\x13\x4d\xc1\x33\xd6\x3c\x08\xeb\x7a\x14\x47\xce\x72\xfc\x26\x08\xe0\xee\xcf\xfb\xf7\x57\xb0\xa3\x30\x5e\x0a\x29\xc5\x6e\x0c\x04\x72\xa1\x41\xac\x40\x67\x14\x94\xae\x72\xc6\xd7\xe6\x91\xa5\x94\xa3\xe5\x2a\x9d\x42\x46\x79\x42\xcd\xfa\x48\xd1\xa4\x94\xf8\x32\x90\xd4\xb8\x49\x41\x53\x59\x30\x2e\x72\xb1\xae\x80\xf1\xce\x06\x05\x9a\xd3\x02\x0d\xa8\x29\xe4\xec\x81\x76\xd6\x80\xf0\x74\xb4\xcc\xa9\x52\xe8\x26\x84\x20\x40\x5e\x4b\x91\x56\x90\xe4\x44\xa9\x99\xd7\xe2\x36\x52\x6c\xf1\xb7\x0c\x72\x52\x89\x52\x03\x69\xe5\xa6\xde\x29\xa5\x54\x3a\xad\x18\x3d\x95\x48\xb6\xd1\x06\x04\xb0\x2a\x79\xa2\x99\xe0\x90\x64\x84\xaf\xe9\x8d\xe6\x3e\x43\x3d\x9c\xee\x3e\xdc\x2f\x3e\x4d\x60\x6f\x51\x00\x98\x90\xd2\xb0\x0d\xd7\x54\xbf\x77\xc4\x6f\xaa\x8f\x29\x82\x27\x21\xe3\x9c\x4a\x03\x87\x19\x78\xf1\x4a\x70\x0d\x09\xea\x95\xb3\xf1\x5a\x92\x6a\x3c\xf7\xce\x1b\x73\xe7\x5e\x1c\x99\xe5\xb9\x77\x6d\xcd\x5a\x36\x51\x4f\x27\x4e\xd9\xb6\x95\x59\x10\xc6\x3d\xc7\x31\xce\x2e\xdb\xb7\x1b\xb2\xa6\x81\x4d\xdc\xfc\x0f\x49\x8d\x38\x8c\x16\x2c\xb0\x10\xd6\x14\x3e\x72\xa5\x09\xe6\x41\x99\xe4\x9c\xac\x09\x4c\xf4\x65\x63\xf3\xc0\x55\x1b\x6c\x15\xe4\x4c\xe9\xc6\xe9\x73\x90\x26\x96\x2d\xc8\xb2\x9b\x7f\x13\xa5\xc4\xe4\x36\xee\x7b\x2f\x46\x1e\x5a\x71\x0f\xfb\xbd\x34\x21\x86\x33\xc6\x53\xfa\x38\x85\xb3\xa6\x00\xe0\x6a\x06\x61\xc7\xdd\xa6\xe8\x79\xf7\x0c\xb3\x7a\xe8\xfc\x04\x28\x48\xa9\x26\x2c\x57\x07\x30\xe3\x7c\xc7\x74\xd6\xfb\xe9\xdc\x38\x09\x6f\xe7\xfb\x7d\xf8\x01\x63\x99\xbb\x28\xbd\x3d\xdc\x1b\x6f\x9e\xb8\x48\xc8\x16\xa3\x3f\x74\x61\x2a\x6b\x43\xb8\x4b\x8c\x29\xa9\x7b\x56\x50\x4c\xaf\x79\x17\x2f\x65\x74\x02\xdb\xda\x2d\x39\x7b\xd4\x88\xf6\x20\x25\x9a\x04\xed\xe3\x0c\x49\xb5\xd6\x8c\xb1\xf0\x2b\x2e\xd4\xf5\xfc\xf8\xf5\x17\x2d\x91\x94\x21\x6e\x9d\x1d\x52\x8f\x36\x3f\xa1\x64\x21\x4a\x4c\x8f\x29\x9d\x67\x65\x20\x15\x8b\x72\xf5\xf5\xcb\x3c\xdf\x34\x20\xf8\x4c\x34\x36\x10\xae\x5e\x20\xe0\xaa\x2a\x6c\xb7\x18\x26\x6a\x40\xa5\xe1\x89\xf1\x39\xb1\x9b\xf2\xf4\x25\xde\xc7\x80\x83\x7a\xb6\x8f\x87\xf5\xa7\xb9\x0a\xf0\xe0\x0f\x04\x1d\x01\x8e\xc5\x12\xc8\x24\x5d\xcd\x3c\xa4\x77\x4b\x54\xb6\x14\x44\xa6\x5f\xff\xfa\x54\xd7\x5e\xb7\xa9\xd4\x5a\xf0\x60\x83\x0f\x6c\x8b\x05\xa2\x89\xc4\x16\x34\xf3\xfe\x59\xe6\x84\x3f\x78\xf3\x6e\x5b\x1c\x91\x61\xe6\x07\x44\x5f\xc5\x84\x2e\xcb\xf5\x2b\x59\x98\x2d\xaf\x64\x00\xf8\x1f\xcf\xaa\xd2\x52\x54\x1e\xb6\xff\x99\xd7\x3c\x60\x13\xde\xef\x5d\x97\x40\x0a\x2f\xf1\xb4\xf0\x97\x99\x0a\x9e\xe4\x2c\x79\x98\x79\x7d\x83\x1f\x9f\xf2\x33\x9e\xc2\xb8\x31\x68\xea\xce\xd7\xe4\x01\x1b\x29\x81\x15\xdd\x01\xde\x69\x82\xa7\x6a\x02\x61\x18\x8e\x27\x46\xad\xc5\xbd\xac\x77\xf0\x38\x68\x83\x34\x57\xfd\x59\xb9\x13\x9c\xc2\x0a\x8f\x50\x1a\x8e\x8e\x0b\xce\x06\xcc\x04\x26\xb1\xbd\xfe\xc6\x64\xed\x30\x00\xee\x0a\x78\xbd\xfe\xce\x9c\x11\xed\x3a\xc9\xff\x49\x6e\x6e\x9b\x3b\xba\x33\xaa\x07\x72\x5c\x63\x5d\xe0\xe9\x33\x97\x50\x70\xcc\xbd\x70\x0b\x5d\x1e\xed\x49\x1c\x3d\x0d\x4a\xaf\xda\xdd\x91\xa3\x03\x40\x73\x65\x83\x92\x89\x15\xfe\x4e\x29\xaa\xd5\x67\x8c\x83\xe9\x87\x51\x3b\x12\x44\x85\xb0\x77\xf4\x77\x6c\x2a\x83\x7b\xf5\x07\xb7\x7f\xff\xb7\xa4\xb2\x7a\x6e\xbb\xf9\xd9\x8d\x0b\x68\xc0\xb4\xde\x7b\xfa\xa8\x7d\x73\x8f\xb5\x93\xc2\x96\x48\x30\xad\x1b\x6f\x99\x62\x83\xf3\x80\x59\x0b\x4d\x53\xf7\xfb\x26\x3f\xb9\xee\xa0\x05\x42\x1c\x69\xbf\xdb\xf5\xfb\xe5\xc5\xc5\x45\x78\x71\x80\x72\xf3\xd2\xc0\x98\x7d\xd5\x5a\x62\x2b\xf0\x1b\xcc\x0c\x47\x10\xb2\x54\x22\x2f\x35\x2e\x77\xe3\x8b\xdd\x69\xa6\x48\xdf\x6b\x0b\x68\xfc\xdb\xb8\x2b\x8e\xb1\xa4\xba\x94\x1c\x56\x04\x4b\xf3\x1a\x27\x16\x38\x87\x22\x5c\x09\x59\x10\xed\x7b\x8b\xc5\x02\x6e\x6f\xa7\xf0\x0d\xff\x41\x76\x55\x14\x57\x0a\xcb\x04\xad\x9f\xe3\xb8\x83\xd5\xd0\xd2\x80\xa7\x04\xa7\xe0\xad\xa4\x28\xee\xc4\xae\x05\xd5\x60\xca\xff\x27\x89\x39\x93\xfe\x0f\x32\xe8\xe3\xd1\x8f\x5d\xf5\x08\x3f\xce\xfc\x76\xac\x9b\x84\x58\xdf\x69\xe5\xb7\xf9\xf5\xdb\xd0\x9d\xf9\x5e\xd8\x27\x2e\xa4\x24\xc9\x9e\x82\x00\xa2\x08\x2c\x61\x73\x8e\xcc\x84\xdb\x97\x80\xca\x44\x99\xe3\x14\x2c\xd6\xeb\xdc\x4e\xc8\x90\x32\x85\x73\x69\x05\x2e\xbc\x61\x63\xe1\xcc\xd7\x19\x53\x93\xd0\x9a\x19\xb8\x18\xd4\x5a\x03\x9b\x5c\x43\xdd\x69\x3e\xb9\xee\x94\xda\x6f\xf7\xd9\x57\x74\x1c\x99\x79\xda\x7c\xbb\xbf\x2b\xfe\x0b\x00\x00\xff\xff\x98\x33\x7b\xbe\x6f\x0c\x00\x00")
+var _homeTmplHtml = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xac\x57\x61\x6f\xdb\x38\x0f\xfe\x9e\x5f\xc1\xf9\x2d\x10\xe7\x6d\xed\x74\xd8\xb7\xd6\x09\xb0\x5e\x07\x6c\xc0\xd2\x1b\xb6\xee\x80\xe1\x70\x38\x28\x36\x93\x78\xb5\xa5\x4c\x92\x9b\x05\x86\xff\xfb\x51\x92\xed\xc4\x49\x9a\x36\xd8\x06\xac\x8e\x2d\x8a\x7c\x1e\xf2\x91\x44\x45\xaf\x12\x11\xeb\xf5\x12\x61\xa1\xf3\x6c\xdc\x8b\x9a\x07\xb2\x64\xdc\x03\x88\x74\xaa\x33\x1c\xff\xc5\x38\x4b\xd2\x22\x87\xb2\xb4\x1f\x20\xfc\x82\xf2\x11\xe5\x1d\xcb\xb1\xaa\xe0\x6d\x96\x89\x98\x69\x21\xa3\xa1\xb3\xa7\x99\x64\x89\xf9\x32\x63\x1a\xc1\x33\xde\x3c\x08\xab\xaa\x17\x0d\x9d\xe7\xe8\x55\x10\xc0\xdd\x9f\xf7\xef\xae\x60\x85\xd0\x9f\x0a\x29\xc5\xaa\x0f\x0c\x32\xa1\x41\xcc\x40\x2f\x10\x94\x5e\x67\x29\x9f\x9b\xd7\x34\x41\x4e\x9e\xd7\xc9\x05\x2c\x90\xc7\x68\xc6\x7b\x0a\xe3\x42\xd2\xc7\x40\xa2\x09\x93\x80\x46\x99\xa7\x5c\x64\x62\xbe\x86\x94\xb7\x3e\x10\x30\xc3\x9c\x1c\xa8\x0b\xc8\xd2\x07\x6c\xbd\x01\xe3\x49\x6f\x9a\xa1\x52\x14\x26\x84\x20\x20\x5c\x53\x91\xac\x21\xce\x98\x52\x23\xaf\xb1\x5b\x4a\xf1\x48\xbf\x65\x90\xb1\xb5\x28\x34\xb0\x86\x6e\xe2\x1d\x62\x8a\xd2\x71\xa5\xec\xa9\x58\xa6\x4b\x6d\x8c\x00\x66\x05\x8f\x75\x2a\x38\xc4\x0b\xc6\xe7\x78\xa3\xb9\x9f\x12\x1f\x8e\xab\xf7\xf7\x93\x8f\x03\x28\xad\x15\x00\x15\xa4\x30\x68\xc3\x39\xea\x77\x0e\xf8\xcd\xfa\x43\x42\xc6\x83\x30\xe5\x1c\xa5\x31\x87\x11\x78\xd1\x4c\x70\x0d\x31\xf1\x95\xa3\xfe\x5c\xb2\x75\x7f\xec\x9d\xd7\xee\xce\xbd\x68\x68\x86\xc7\xde\xb5\x75\x6b\xd1\x0c\x37\x70\xa2\x24\x7d\x6c\x68\xe6\x2c\xe5\x9e\xc3\x18\x2d\x5e\x37\x5f\x97\x6c\x8e\x81\x2d\xdc\xf8\x0f\x89\x86\x1c\x65\x0b\x26\x24\x84\x39\xc2\x07\xae\x34\xa3\x3a\x28\x53\x9c\x83\x9a\xa0\x42\xbf\xae\x7d\x6e\x85\x6a\x92\xad\x82\x2c\x55\xba\x0e\xfa\x94\x49\x9d\xcb\xc6\xc8\xa2\x1b\x7f\x13\x85\xa4\xe2\xd6\xe1\x37\x51\x0c\x3d\xf2\xe2\x5e\xca\x52\x9a\x14\xc3\x59\xca\x13\xfc\x79\x01\x67\xb5\x00\xe0\x6a\x04\x61\x8b\xdd\x96\xe8\xe9\xf0\x29\x55\x75\x3b\xf8\x01\xa3\x20\x41\xcd\xd2\x4c\x6d\x99\x99\xe0\xab\x54\x2f\x36\x71\xda\x30\x8e\xc2\x9b\x71\x59\x86\xef\x29\x97\x99\x59\x39\x65\x99\xce\x00\x7f\x40\xf8\x19\x97\x59\x1a\x33\x05\x97\x55\xf5\xf7\x97\x42\x2d\x91\xa0\x27\xff\x94\x25\x3d\x6d\x36\xdf\x6c\xc7\x88\x96\x7b\x50\x62\xf6\x48\x55\xea\x42\x31\x0a\x5c\x32\xee\x0a\x68\xa4\x77\x9f\xe6\x48\x32\x30\xdf\xa2\xa9\x1c\x1e\xb0\x6d\xfc\x16\x3c\xfd\xa9\xc9\xda\x83\x84\x69\x16\x34\xaf\x23\x02\xdf\x78\x33\xce\xc2\xaf\x34\x50\x55\xe3\xdd\xcf\x5f\xb4\x24\x50\x06\xb8\x0d\xb6\x0d\x7d\xb8\xfc\x05\x26\x13\x51\x50\x19\x8d\xc4\x9e\xa4\x41\x50\xac\x95\xd3\xe1\x6f\x8b\x7c\x53\x1b\xc1\x27\xa6\x69\xa3\xe1\xea\x08\x00\xa7\xbe\xb0\x99\x62\x90\xa8\x0e\x94\x1a\x27\xe5\xe7\xc0\x6c\x5b\xf1\xa7\x71\xef\x1a\x6c\xe9\xde\xbe\x6e\xeb\x54\x73\x15\xd0\x06\xd1\x21\xb4\x63\xb0\x4b\x96\xc1\x42\xe2\x6c\xe4\x11\xbc\x5b\xa6\x16\x53\xc1\x64\xf2\xf5\xf3\xc7\xaa\xf2\xda\x49\x85\xd6\x82\x07\x4b\x7a\x49\x1f\x49\x20\x9a\x49\xda\xaa\x46\xde\xbf\xd3\x8c\xf1\x07\x6f\xdc\x4e\x8b\x86\xac\x5b\xf9\x0e\xd0\x93\x90\xe0\xb4\x98\x9f\x88\xc2\x4c\x39\x15\x01\x1d\x0d\x23\x4f\xb9\xd5\xf7\x19\x15\xed\xc3\xb4\x4d\x97\xa5\xdb\x47\x28\xf8\x6e\xa9\xea\xc5\xdb\x2c\xf5\xad\x55\x0c\x3b\xf5\xde\x66\xe3\x3c\x1f\xa7\x23\x78\x4c\x9e\x1e\x46\xde\xe6\xb4\xe8\x3f\x0d\xac\x7f\x01\x7d\xfb\xd9\x08\xd4\xd7\xec\x81\x76\x66\x06\x33\x5c\x01\x1d\x92\x82\x27\x6a\x00\x61\x18\xf6\x07\xde\xd8\x4d\xde\xc9\x8b\x15\x55\xa6\xf0\x08\xe6\x7a\x4b\xfa\xdd\xa0\x6b\xb7\xcf\xc2\xae\xed\x0e\xe1\xde\x5b\x2d\xc7\x6b\x0c\xf4\x9f\xf6\x6d\xa5\xa5\x58\xbb\x7a\x4b\x54\xa8\x8f\xd5\x79\xa7\x76\xa8\x4f\xcf\xc2\x7e\x8c\xba\x64\xa8\xf5\x4b\x6a\x86\xfa\x44\x29\xef\xd3\xac\x5f\x5e\x4a\xf4\xd6\x99\x9f\x4e\xf5\x50\x1c\x43\xb6\x76\xf8\x2c\xdb\xda\xee\x38\xdf\xce\x6b\xe7\xe4\xef\xe8\xf8\x4e\x70\x84\x19\x9d\x06\x49\xd8\xdb\x95\x8b\x4d\x98\x49\x4c\x6c\xdb\x9b\x1b\xb3\x01\x6d\x27\xc0\x75\x3d\xa7\xf3\x6f\xdd\x19\xd2\xee\x50\x7c\x8e\x72\xdd\x60\xdd\xe1\xca\xb0\xee\xd0\x71\xbd\xc4\x84\x0e\x12\xd3\x77\x05\xbb\xd8\x73\x37\xd0\xd6\xd1\x1e\x2a\xbd\xfd\xa4\x6c\x58\xbb\xb6\xb0\xb7\x65\x50\x77\xa9\xa0\x64\x6c\x89\xbf\x55\x24\x37\xf5\x89\xf2\x60\x8e\xf6\x61\xd3\x05\x0f\x73\x61\xdb\xd2\xef\x74\x3e\x76\x5a\xc9\x17\x4e\xff\xfe\xa3\x40\xb9\x7e\x6a\xba\xf9\xd9\x76\xc8\xe4\xc0\x74\x11\xf7\xf8\x53\xfb\xa6\x75\x6b\x9a\xe3\x47\x26\xc1\x74\x21\xb4\xdb\xe6\x4b\x6a\x81\xcd\x58\x68\xfa\x13\x7f\xd3\xaf\x0c\xae\x5b\xd3\x9c\x4c\x1c\x68\xbf\x9d\xf5\xff\xd7\x97\x97\x97\xe1\xe5\x96\x95\xbb\x22\x74\x9c\xd9\x4f\x8d\x27\xda\xe3\xfd\xda\x66\x44\x5d\x37\x9b\x2a\x91\x15\x9a\x86\xdb\x8e\xdd\xce\x34\x17\x27\xdf\x6b\x04\xd4\xff\x5f\xbf\x15\x07\x2d\x7e\x5d\x48\x0e\x33\x46\xd2\xbc\xa6\x26\x1d\xce\x21\x0f\x67\x42\xe6\x4c\xfb\xde\x64\x32\x81\xdb\xdb\x0b\xf8\x46\xff\x60\x71\x95\xe7\x57\x8a\x64\x42\xde\xcf\xa9\xc3\x27\x35\x34\x30\x60\x1f\xe0\x05\x78\x33\x29\xf2\x3b\xb1\x6a\x8c\x2a\x30\xf2\xff\x45\x60\xce\xa5\xff\x42\x04\x9b\x7c\x6c\x6e\x1a\x55\x8f\xfe\x9c\xf9\xcd\x4d\x66\x10\x92\xbe\x93\xb5\xdf\xd4\xd7\x6f\x52\x77\xe6\x7b\xe1\xa6\x70\x21\xb2\x78\xb1\x6f\x04\x30\x1c\x82\x05\x6c\xd6\x91\xb9\xd4\x6d\x24\xa0\x16\xa2\xc8\xe8\xe2\x27\xe6\xf3\xcc\x5e\x0a\x21\x49\x15\x5d\xc5\xd6\xe0\xd2\x1b\xd6\x1e\xce\x7c\xbd\x48\xd5\x20\xb4\x6e\x3a\x21\x3a\x5a\xab\xcd\x06\xd7\x50\xb5\x9c\x0f\x8e\x3b\xa6\xf6\xe9\xfe\x6e\x14\x1d\x0d\xcd\x15\xd2\x3c\xdd\x55\xfa\xbf\x00\x00\x00\xff\xff\x07\xf2\xe1\xd6\x62\x0f\x00\x00")
 
 func homeTmplHtmlBytes() ([]byte, error) {
 	return bindataRead(
@@ -244,7 +244,7 @@
 	return a, nil
 }
 
-var _styleCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xa4\x56\x4d\x6f\xe3\x36\x13\xbe\xfb\x57\x10\x08\x5e\x20\x59\x44\x5e\xc9\x71\x62\xaf\x73\xca\xe6\xdd\x00\x05\x8a\x1e\xba\x6d\xef\x94\x38\xb6\xd8\xa5\x48\x83\xa4\x62\x3b\x41\xff\x7b\x87\x1f\xfa\xb4\x9c\x3d\xd4\x08\x1c\x6b\x34\xdf\xf3\xcc\x43\x7e\xfe\x44\x9e\xd5\xfe\xa4\xf9\xae\xb4\x64\x91\x66\x0f\xe4\x8f\x12\xc8\x5f\x54\x52\xc6\xeb\x8a\x3c\xd5\xb6\x54\xda\xcc\xc9\x93\x10\xc4\x2b\x19\xa2\xc1\x80\x7e\x05\x36\x27\x9f\x3e\xcf\xd0\xfe\x4f\x03\x44\x6d\x89\x2d\xb9\x21\x46\xd5\xba\x00\x52\x28\x06\x04\x1f\x77\xea\x15\xb4\x04\x46\xf2\x13\xa1\xe4\xeb\xf7\xff\x27\xc6\x9e\x04\x44\x43\xc1\x0b\x90\x68\x6c\x4b\x6a\x49\x41\x25\xc9\x81\x6c\x55\x2d\x19\xe1\x12\x85\x40\x7e\xfd\xe5\xf9\xdb\x6f\xdf\xbf\x91\x2d\x17\xe0\xa3\xcd\x72\xc5\x4e\xe4\x7d\x46\x50\x4f\xda\x64\x4b\x2b\x2e\x4e\x1b\xf2\xbb\xca\x95\x55\x8f\x8d\xf8\x00\x2e\xd1\x0d\x59\xa6\x69\x2b\xf3\x71\x37\x44\x2a\x5d\x51\xd1\x4a\x0b\x25\x94\xde\x90\xab\xbb\xd5\x72\xb5\x7c\x71\x62\x34\xce\x7f\x70\x74\xed\x8d\x2a\xa5\xb0\x2c\xb9\xdb\x10\x2a\x2d\xa7\x82\x53\x03\xac\xf3\xc9\xdf\xd0\x65\xb6\xd8\x1f\x9d\x48\x70\x09\x49\x19\x43\x2f\xd2\x20\xdc\x53\xc6\xbc\x7d\x7c\xae\xa8\xde\x71\xd9\x3e\xba\xf6\x6c\x85\x3a\x6c\x48\xc9\x19\x03\xf9\x38\xfb\x67\x36\x9b\x53\x21\x54\x41\xad\xd2\xcc\x97\xda\x29\xd1\xda\x55\x39\x52\x99\x57\x14\xdb\xf5\xde\x73\xbe\x5e\xee\x8f\x64\xb1\x84\x8a\x2c\xd6\xee\xd7\x7a\x94\x8b\x97\xde\x3f\x34\x19\x1d\x93\x03\x67\xb6\xdc\x90\x2f\xe9\x20\xcb\x44\x87\x5a\x32\x2f\x1d\x47\xcd\xad\x34\xae\x7f\x3e\x72\x74\x9d\x58\xb5\x47\xfd\x87\x41\xbc\xd6\x4d\x14\xc7\x60\xd9\x5d\x0c\xb6\x15\x70\xc4\x86\x78\x0b\x65\xb8\xe5\x0a\x4b\xd0\x20\xa8\xe5\xaf\xf0\x41\xdc\x79\x5e\x5b\xab\x64\xb2\xa7\xc6\xa0\xa6\xcf\xa3\xf1\x9d\x45\xdf\x16\x8e\x36\xc1\xb1\xed\xd0\x25\x62\xcd\x82\xee\x95\xe7\x93\x5d\x5e\xa8\x2d\x61\x60\xac\x56\x0e\xb6\xef\x83\xcc\x68\x6e\x94\xa8\x2d\x38\x47\x88\x3a\xab\xaa\x6e\xda\x0d\x9c\x5e\x5e\x96\x2f\xd9\x53\xd0\xd0\x0c\x50\x94\x61\xc7\xd1\x8e\xb3\xfe\xcb\x06\x6b\x56\x53\xd9\xb8\xcf\x69\xf1\x63\xa7\xdd\x12\x04\x70\x92\x74\xbe\x58\x1b\x52\xd4\x39\x2f\x92\x1c\xde\x38\xe8\xeb\x74\xbe\xbc\x45\x79\xea\xbe\x16\xb7\x24\xbb\xf1\xa5\xfe\x77\x27\x1f\xb6\x61\x53\x3a\x1c\xde\x92\x0f\x34\x68\x61\x9b\x41\x74\x9d\x70\x1f\xdf\x89\x51\x4e\xbd\x36\x9d\xc5\x15\x80\x23\x95\x3b\x93\x70\x8b\x20\x6e\x9f\x31\x94\xa5\x5c\x98\x3e\xe4\x02\xae\x3c\x46\xbb\x5f\x1d\xac\xb2\xcb\xde\x93\x82\xbe\x02\xb5\xa6\xa3\x93\xb8\xcf\x77\x13\xfb\x9c\xdd\x0f\x31\xed\xb1\xb3\x9e\xc4\xce\xd8\xbd\xd9\x53\xd9\xc5\x68\xb8\xe9\xde\x71\xd3\xc8\xf6\xaa\xd0\x68\x01\x5f\x6d\x7f\x9d\x43\xa8\xc5\x70\x33\x87\xc0\x1b\xbb\xa9\x30\x03\xba\x83\xf3\xcd\x8c\x4c\xd5\x2f\x36\x0b\xa2\x80\xd3\xb8\xbf\x1d\x56\x9f\x9f\x9f\xbd\xfb\xab\x02\x4d\x90\x66\x40\x8f\xb6\x61\xcb\x8f\x81\x10\x19\x37\x7b\x41\x91\x8b\x5d\xdf\x9b\xfe\x27\x8c\x6b\x28\x82\x26\x0e\xbd\xae\xa4\x7b\xd3\xf6\x34\x4d\xff\xd7\x27\x04\xff\xe8\x82\x95\x40\x59\x8c\x74\xe6\xf6\xef\xda\x58\xbe\x3d\x25\x2e\x21\x5c\xe8\x8d\x6b\x6f\x01\x08\x6a\x7b\x00\x90\x17\x80\x96\xa6\xeb\xbb\x75\x40\xa1\x3a\x26\xa6\xa4\xcc\xb1\xa9\xde\xe5\xf4\xda\xe1\x3f\xfc\xcd\x17\xe9\x8d\xe3\x65\xd7\x25\x47\x0b\x0d\x47\x0f\xd2\xeb\xb2\x5f\xae\x27\x60\xd2\x08\x63\xe0\x43\xc9\x03\x51\xf4\x3b\xfe\xd0\x1b\xc2\xe8\xa4\x7a\x4b\xb8\x64\x0e\xb6\x5f\xf0\xf3\x78\x91\x76\xfc\x94\x62\x76\x02\xb6\x36\x3e\xf4\x5a\xc7\xf8\x6b\x1f\x42\x41\x29\xfb\x98\xdd\x1b\xdb\x2b\xcb\xad\x18\xd0\xe9\x5d\x7a\xa6\x03\x78\xe8\x88\x09\x9d\x21\xe5\xfa\x10\x01\x9f\xd5\x2e\x39\x25\xf4\x88\x77\x02\xa7\x80\x34\x82\x82\x63\x27\x38\x5b\xc2\xac\x01\x36\xea\xf5\xf0\x70\xd6\xc8\xa8\x12\xa8\x27\x61\xd4\xd2\xbd\xe2\xf2\xdc\xdf\xa2\xa9\xa0\x28\xa9\x8e\x4b\x3f\x8d\xd9\x83\xa6\xd8\x5e\xf7\xdd\x3f\xa1\x93\x53\x73\xfc\x12\xe2\xab\xeb\x10\xe8\xad\x8c\x45\xb7\x3f\x19\x59\x83\x8e\x66\x7b\x63\xc7\xce\x20\xdd\x9c\x54\xae\x36\x9f\xee\x05\x3a\x68\xdf\xcf\xf1\x82\x24\x62\x87\xe2\x3c\x56\xdd\xcc\x58\xad\xa9\xcb\xc8\x24\x97\xb6\xb8\x9f\x69\x0f\x50\x67\x99\x9e\xaf\x56\x8b\x70\x85\x6b\xc8\x2d\x36\x29\x9d\xaf\x43\x58\xa1\xa8\x67\x1e\x41\x73\x18\xde\x12\x42\x88\x87\xe9\x33\x73\x90\xf1\xf4\x98\xc6\x97\xac\x0b\xe4\x15\x77\x28\xbe\x6d\xe0\x3e\x7a\xef\x7a\xd8\x84\x0b\xc7\xcd\x24\x72\xda\xbe\x2e\x96\xfb\xc9\x1c\x26\x6f\x7f\xd3\xd7\x8f\xa2\xd6\xc6\x95\xec\x81\x1a\x45\xb1\x09\xab\xd5\x6a\x22\xa5\xb9\x01\x81\x34\x0a\xe1\x3a\xd8\x98\x33\xd8\xd2\x5a\xd8\x9f\x52\xde\x70\x52\x67\xce\x37\x52\xd9\xeb\x36\xc2\x4d\x38\xe6\x7d\xa0\x09\xaf\xed\x79\x00\x5a\x2b\x9d\x54\x66\x77\xe9\x3c\x88\xed\x9e\xc6\x51\x77\x13\x8d\x54\x1b\xff\x5f\xa8\xe5\xe9\x29\x4d\x03\x41\x8e\x51\xd7\x42\x43\x2a\xe9\x8b\xfb\x37\x00\x00\xff\xff\x6b\xe4\x4a\xcf\xcf\x0c\x00\x00")
+var _styleCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xa4\x56\xdd\x6e\xdb\x38\x13\xbd\xcf\x53\x10\x08\x3e\x20\x29\x4a\x57\x72\xdc\xd8\x55\xaf\xd2\xb4\x01\x3e\x60\xb1\x5d\x6c\xbb\x7b\x4f\x89\x63\x8b\x2d\x45\x1a\x24\x15\xdb\x2d\xf6\xdd\x77\x48\x51\x7f\x96\x9c\x5e\xac\xd1\x3a\xd6\x68\x38\x3f\x87\x67\x0e\xf9\xe6\x15\x79\xd4\xfb\x93\x11\xbb\xd2\x91\x65\x92\xde\x93\xaf\x25\x90\xbf\x99\x62\x5c\xd4\x15\x79\xa8\x5d\xa9\x8d\x5d\x90\x07\x29\x49\x70\xb2\xc4\x80\x05\xf3\x0c\x7c\x41\x5e\xbd\xb9\xc2\xf5\x7f\x59\x20\x7a\x4b\x5c\x29\x2c\xb1\xba\x36\x05\x90\x42\x73\x20\xf8\xb8\xd3\xcf\x60\x14\x70\x92\x9f\x08\x23\x1f\xbe\x7c\xa4\xd6\x9d\x24\xc4\x85\x52\x14\xa0\x70\xb1\x2b\x99\x23\x05\x53\x24\x07\xb2\xd5\xb5\xe2\x44\x28\x34\x02\xf9\xed\xff\x8f\x9f\x7e\xff\xf2\x89\x6c\x85\x84\x90\xed\x2a\xd7\xfc\x44\x7e\x5e\x11\xf4\x53\x8e\x6e\x59\x25\xe4\x29\x23\x7f\xea\x5c\x3b\xfd\xbe\x35\x1f\xc0\x17\x9a\x91\x55\x92\x74\xb6\x90\x37\x23\x4a\x9b\x8a\xc9\xce\x5a\x68\xa9\x4d\x46\xae\xef\xd6\xab\xf5\xea\xc9\x9b\x71\x71\xfe\x5d\x60\xe8\xb0\xa8\xd2\x1a\xdb\x52\xbb\x8c\x30\xe5\x04\x93\x82\x59\xe0\x7d\x4c\xf1\x03\x43\xa6\xcb\xfd\xd1\x9b\xa4\x50\x40\xcb\x98\x7a\x99\x34\xc6\x3d\xe3\x3c\xac\x8f\xcf\x15\x33\x3b\xa1\xba\x47\x0f\xcf\x56\xea\x43\x46\x4a\xc1\x39\xa8\xf7\x57\xff\x5c\x5d\x2d\x98\x94\xba\x60\x4e\x1b\x1e\x5a\xed\x9d\x58\xed\xbb\x3c\x73\x59\x54\x0c\xe1\xfa\x39\x08\xbe\x59\xed\x8f\x64\xb9\x82\x8a\x2c\x37\xfe\xd7\xe6\xac\x96\x60\x7d\x7b\xdf\x56\x74\xa4\x07\xc1\x5d\x99\x91\x77\xc9\xa8\x4a\x6a\x9a\x5e\xd2\x60\x3d\xcf\x9a\x3b\x65\x3d\x7e\x21\x73\x0c\x4d\x9d\xde\xa3\xff\xfd\x28\x5f\x17\x26\x9a\x63\xb2\xf4\x2e\x26\xdb\x4a\x38\x22\x20\x61\x85\xb6\xc2\x09\x8d\x2d\x18\x90\xcc\x89\x67\x78\x21\xef\x22\xaf\x9d\xd3\x8a\xee\x99\xb5\xe8\x19\xea\x68\x63\xa7\x31\xb6\x83\xa3\xa3\xb8\x6d\x3b\x0c\x89\x5c\x73\x60\x06\xed\x85\x62\x57\x17\x7a\xa3\x1c\xac\x33\xda\xd3\xd6\x07\x46\xb6\x7e\xfd\xfc\xf1\xf3\xcd\x37\x6c\x08\xff\xdf\x66\xe4\x0f\x03\xce\x89\xed\x89\x64\xf4\xd6\x53\x33\xf8\xf4\x0d\xb0\xdc\x6a\x59\x3b\x78\xdf\xbd\x43\x8a\x3a\x5d\x45\x6a\x34\xd6\x96\x7e\x4f\x4f\xab\xa7\xf4\xc1\x97\x96\x63\x7e\x40\x53\x8a\x3b\x84\x01\x04\x1f\xbe\x6c\xb9\xe9\x0c\x53\x6d\x9e\x9c\x15\xdf\x77\xc6\x0f\x4d\x43\x66\x92\x2c\x96\x1b\x4b\x8a\x3a\x17\x05\xcd\xe1\x87\x00\x73\x93\x2c\x56\xaf\xd1\x9e\xf8\xaf\xe5\x6b\x92\xde\x06\x68\xfe\x7b\x90\x17\x61\xcb\x4a\xcf\xdb\xd7\xe4\x05\x0f\x56\xb8\x76\xe3\x7a\x24\xfc\x27\x20\x71\x56\xd3\x00\xa6\x49\x5e\x09\x48\x01\xb5\xb3\x54\x38\x24\x7d\xf7\x8c\xa9\x1c\x13\xd2\x0e\x29\xda\xf0\x30\x70\xba\xff\xd5\xd3\x30\xbd\x1c\x9d\x16\xec\x19\x98\xb3\xbd\xfc\xc4\xf9\xbf\x9b\x99\xff\xf4\xed\x78\x06\x02\xd7\x36\xb3\x5c\x3b\x0f\x6f\xf7\x4c\xf5\x39\x5a\x2d\x7b\xeb\xb5\xec\x6c\xed\x75\x61\x70\x05\x7c\x70\xc3\xf1\x6f\x52\x2d\xc7\x93\x3c\xe2\xde\x24\x4c\x85\x15\xb0\x1d\x4c\x27\x39\x2a\xdb\xb0\xd9\xb4\x31\x35\x3c\x8d\xf3\xde\x73\xf5\xf1\xf1\x31\x84\xbf\x2e\x70\x09\xca\x12\x98\x26\x68\x37\x16\x5b\x71\x6c\x04\x94\x0b\xbb\x97\x0c\xb5\xdb\xe3\xde\xe2\x4f\xb9\x30\x50\x34\x9e\xb8\xe9\x75\xa5\xfc\x9b\x0e\xd3\x24\xf9\xdf\x50\x40\xc2\xa3\x4f\x56\x02\xe3\x31\xd3\x24\xec\xb7\xda\xfa\x29\xa5\xbe\x20\x14\x80\xcc\xc3\x5b\x00\x92\xda\x1d\x00\xd4\x05\xa2\x25\xc9\xe6\x6e\xd3\xb0\x50\x1f\xa9\x2d\x19\xf7\xea\x6b\x76\x39\xbb\xf1\xfc\x6f\xfe\x2d\x96\xc9\xad\xd7\x71\x8f\x92\x97\x91\x56\xd3\x47\xe5\xf5\xd5\xaf\x36\x33\x34\x69\x8d\x31\xf1\xa1\x44\x02\x9f\x23\x7e\x3f\xd8\x84\xb3\x93\xed\x07\x15\x8a\x7b\xda\xbe\xc3\xcf\x58\x40\x3b\xfd\xf1\xa3\xee\x77\x29\x56\x27\x61\xeb\xe2\xc3\x00\x3a\x2e\x9e\x87\x14\x6a\x9c\xd2\x97\x4f\x83\x76\xed\xb5\x13\x4e\x8e\xe4\xf7\x2e\x99\xf8\x00\x1e\x52\x72\xc6\x67\x2c\xd1\x21\x45\xc3\xcf\x6a\x47\x4f\x94\x1d\xf1\x0e\xe1\x1d\x50\x46\xd0\x70\xec\x0d\x93\x21\x4c\x5b\x62\xa3\xdf\x80\x0f\x13\x20\xa3\x4b\x23\x3d\x94\x33\xc7\xf6\x5a\xa8\x69\xbc\x65\xdb\x41\x51\x32\x13\x87\x7e\x9e\xb3\x07\xc3\x10\x5e\xff\x3d\x3c\xd1\xe9\xa9\x3d\xae\x09\x09\xdd\xf5\x0c\x0c\xab\xac\xc3\xb0\xbf\xd8\xb2\x96\x1d\xed\xf4\x46\xc4\x26\x94\x6e\x4f\x36\xdf\x5b\x28\xf7\x82\x1c\x74\xef\x17\x78\xa1\x92\x11\xa1\xb8\x1f\xeb\x7e\xcf\x78\x6d\x98\xaf\xc8\xd2\x4b\x53\x3c\xac\x74\x40\xa8\x49\xa5\xd3\xd1\xea\x18\xae\x71\x0c\x85\x43\x90\x92\xc5\xa6\x49\x2b\x35\x0b\xca\x23\x59\x0e\xe3\x5b\x45\x93\xe2\x7e\x34\x2a\xc3\xc3\xa0\xaf\x78\x7e\x9b\xce\x2f\x65\x17\xc4\x2b\xce\x50\x7c\xdb\xd2\xfd\xec\xbd\xc7\xb0\x4d\xd7\x1c\x37\xb3\xcc\xe9\x70\x5d\xae\xf6\xb3\x35\xcc\xde\x16\xe7\xaf\x2b\x45\x6d\xac\x6f\x39\x10\x35\x9a\x22\x08\xeb\xf5\x7a\xa6\xa4\x85\x05\x89\x32\x0a\xcd\xf5\xb1\x5d\xce\x61\xcb\x6a\xe9\x7e\x29\x79\xe3\x9d\x9a\x04\xcf\x94\x76\x37\x5d\x86\xdb\xe6\x98\x0f\x89\x66\xa2\x76\xe7\x01\x18\xa3\x0d\xad\xec\xee\xd2\x79\x10\xe1\x9e\xe7\x51\x7f\x73\x8d\x52\x1b\xff\x5e\xe8\xe5\xe1\x21\x49\x1a\x81\x3c\x67\x5d\x47\x0d\xa5\x55\x68\xee\xdf\x00\x00\x00\xff\xff\xdb\x21\x9a\xa3\xff\x0c\x00\x00")
 
 func styleCssBytes() ([]byte, error) {
 	return bindataRead(
diff --git a/services/allocator/allocatord/assets/home.tmpl.html b/services/allocator/allocatord/assets/home.tmpl.html
index fd12675..a81a469 100644
--- a/services/allocator/allocatord/assets/home.tmpl.html
+++ b/services/allocator/allocatord/assets/home.tmpl.html
@@ -24,7 +24,7 @@
       <div class="blessings-item">
         <div class="blessing-details">
           {{with .Instance}}
-          <h3>{{.Handle}}</h3>
+          <h3>{{.Handle}} {{if eq .Replicas 0}}[Suspended]{{end}}</h3>
           <p class="blessing-caveats">
             <span>Creation Time</span><br/>
             <span class="unixtime" data-unixtime={{.CreationTime.Unix}}>{{.CreationTime.String}}</span>
@@ -48,6 +48,16 @@
           <div class="btn">
             <a href="{{.DebugURL}}" class="button-passive" target="_blank">Debug</a>
           </div>
+          <div class="btn" id="suspendResumeBtn{{$index}}">
+            {{if eq .Instance.Replicas 0 }}
+            <a href="{{.ResumeURL}}" class="button-passive" onclick="changeBtn('suspendResumeBtn{{$index}}', 'Resuming (takes a few seconds) ...')">Resume</a>
+            {{else}}
+            <a href="{{.SuspendURL}}" class="button-passive" onclick="changeBtn('suspendResumeBtn{{$index}}', 'Suspending (takes a few seconds) ...')">Suspend</a>
+            {{end}}
+          </div>
+          <div class="btn btn-destroy" id="resetBtn{{$index}}">
+            <a href="{{.ResetURL}}" class="button-passive" onclick="changeBtn('resetBtn{{$index}}', 'Resetting (takes a few seconds) ...')">Reset</a>
+          </div>
           <div class="btn btn-destroy" id="destroyBtn{{$index}}">
             <a href="{{.DestroyURL}}" class="button-passive" onclick="changeBtn('destroyBtn{{$index}}', 'Destroying (takes a few seconds) ...')">Destroy</a>
           </div>
diff --git a/services/allocator/allocatord/assets/style.css b/services/allocator/allocatord/assets/style.css
index cc52167..e788a15 100644
--- a/services/allocator/allocatord/assets/style.css
+++ b/services/allocator/allocatord/assets/style.css
@@ -41,8 +41,9 @@
 }
 
 .allocatord .btn-destroy a {
-  position: absolute;
-  bottom: 20px;
+  /* TODO(jingjin): Prettify :-) */
+  /* position: absolute; */
+  /* bottom: 20px; */
   color: #FF4F1A;
   border: 1px solid #FF4F1A;
   -webkit-transition: background-color 0.28s cubic-bezier(0.4, 0.0, 0.2, 1);
diff --git a/services/allocator/allocatord/handlers.go b/services/allocator/allocatord/handlers.go
index e844b1b..5bbbb24 100644
--- a/services/allocator/allocatord/handlers.go
+++ b/services/allocator/allocatord/handlers.go
@@ -23,8 +23,11 @@
 	type instanceArg struct {
 		Instance allocator.Instance
 		DestroyURL,
+		ResetURL,
 		DebugURL,
-		DashboardURL string
+		DashboardURL,
+		SuspendURL,
+		ResumeURL string
 	}
 	tmplArgs := struct {
 		AssetsPrefix,
@@ -44,6 +47,9 @@
 		tmplArgs.Instances = append(tmplArgs.Instances, instanceArg{
 			Instance:     instance,
 			DestroyURL:   makeURL(ctx, routeDestroy, params{paramInstance: instance.Handle, paramCSRF: rs.csrfToken}),
+			ResetURL:     makeURL(ctx, routeReset, params{paramInstance: instance.Handle, paramCSRF: rs.csrfToken}),
+			SuspendURL:   makeURL(ctx, routeSuspend, params{paramInstance: instance.Handle, paramCSRF: rs.csrfToken}),
+			ResumeURL:    makeURL(ctx, routeResume, params{paramInstance: instance.Handle, paramCSRF: rs.csrfToken}),
 			DashboardURL: makeURL(ctx, routeDashboard, params{paramInstance: instance.Handle}),
 			DebugURL: makeURL(
 				ctx,
@@ -85,6 +91,48 @@
 	return nil
 }
 
+func handleSuspend(ss *serverState, rs *requestState) error {
+	ctx := ss.ctx
+	instance := rs.r.FormValue(paramInstance)
+	if instance == "" {
+		return fmt.Errorf("parameter %q required for instance name", paramInstance)
+	}
+	if err := suspend(ctx, rs.email, instance); err != nil {
+		return fmt.Errorf("suspend failed: %v", err)
+	}
+	redirectTo := makeURL(ctx, routeHome, params{paramMessage: "suspended " + instance})
+	http.Redirect(rs.w, rs.r, redirectTo, http.StatusFound)
+	return nil
+}
+
+func handleResume(ss *serverState, rs *requestState) error {
+	ctx := ss.ctx
+	instance := rs.r.FormValue(paramInstance)
+	if instance == "" {
+		return fmt.Errorf("parameter %q required for instance name", paramInstance)
+	}
+	if err := resume(ctx, rs.email, instance); err != nil {
+		return fmt.Errorf("resume failed: %v", err)
+	}
+	redirectTo := makeURL(ctx, routeHome, params{paramMessage: "resumed " + instance})
+	http.Redirect(rs.w, rs.r, redirectTo, http.StatusFound)
+	return nil
+}
+
+func handleReset(ss *serverState, rs *requestState) error {
+	ctx := ss.ctx
+	instance := rs.r.FormValue(paramInstance)
+	if instance == "" {
+		return fmt.Errorf("parameter %q required for instance name", paramInstance)
+	}
+	if err := resetDisk(ctx, rs.email, instance); err != nil {
+		return fmt.Errorf("reset failed: %v", err)
+	}
+	redirectTo := makeURL(ctx, routeHome, params{paramMessage: "resetted " + instance})
+	http.Redirect(rs.w, rs.r, redirectTo, http.StatusFound)
+	return nil
+}
+
 func handleDebug(ss *serverState, rs *requestState, debugBrowserServeMux *http.ServeMux) error {
 	instance := rs.r.FormValue(paramInstance)
 	if instance == "" {
diff --git a/services/allocator/allocatord/http.go b/services/allocator/allocatord/http.go
index da5e1ec..502d4a4 100644
--- a/services/allocator/allocatord/http.go
+++ b/services/allocator/allocatord/http.go
@@ -24,6 +24,9 @@
 	routeDashboard = "/dashboard"
 	routeDebug     = "/debug"
 	routeDestroy   = "/destroy"
+	routeSuspend   = "/suspend"
+	routeResume    = "/resume"
+	routeReset     = "/reset"
 	routeOauth     = "/oauth2"
 	routeStatic    = "/static/"
 	routeStats     = "/stats"
@@ -163,6 +166,9 @@
 			return handleDebug(ss, rs, debugBrowserServeMux)
 		}, false, true))
 	http.Handle(routeDestroy, newHandler(handleDestroy, true, true))
+	http.Handle(routeSuspend, newHandler(handleSuspend, true, true))
+	http.Handle(routeResume, newHandler(handleResume, true, true))
+	http.Handle(routeReset, newHandler(handleReset, true, true))
 	http.HandleFunc(routeOauth, func(w http.ResponseWriter, r *http.Request) {
 		handleOauth(ctx, args, baker, w, r)
 	})
diff --git a/services/allocator/allocatord/service.go b/services/allocator/allocatord/service.go
index 9b731ec..b922a4e 100644
--- a/services/allocator/allocatord/service.go
+++ b/services/allocator/allocatord/service.go
@@ -113,40 +113,87 @@
 		return "", err
 	}
 
-	out, err := vkube(
+	if _, err := vkube(
 		"start", "-f", cfg,
 		"--base-blessings", base64.URLEncoding.EncodeToString(vomBlessings),
 		"--wait",
 		kName,
-	)
-	if err != nil {
-		ctx.Errorf("vkube start failed: %s", string(out))
+	); err != nil {
+		ctx.Errorf("Error: %v", err)
 		deletePersistentDisk(ctx, kName)
 		return "", verror.New(verror.ErrInternal, ctx, err)
 	}
 	return kName, nil
 }
 
+func scale(ctx *context.T, email, kName string, replicas int) error {
+	args := []string{"kubectl", "scale", "--timeout=1m", fmt.Sprintf("--replicas=%d", replicas), "deployment", kName}
+	if _, err := vkube(args...); err != nil {
+		ctx.Errorf("Error: %v", err)
+		return verror.New(verror.ErrInternal, ctx, err)
+	}
+	return nil
+}
+
+func suspendImpl(ctx *context.T, email, kName string) error {
+	return scale(ctx, email, kName, 0)
+}
+
+func suspend(ctx *context.T, email, kName string) error {
+	if err := isOwnerOfInstance(ctx, email, kName); err != nil {
+		return err
+	}
+	return suspendImpl(ctx, email, kName)
+}
+
+func resumeImpl(ctx *context.T, email, kName string) error {
+	return scale(ctx, email, kName, 1)
+}
+
+func resume(ctx *context.T, email, kName string) error {
+	if err := isOwnerOfInstance(ctx, email, kName); err != nil {
+		return err
+	}
+	return resumeImpl(ctx, email, kName)
+}
+
+func resetDisk(ctx *context.T, email, kName string) error {
+	instance, err := getInstance(ctx, email, kName)
+	if err != nil {
+		return err
+	}
+	if instance.Replicas > 0 {
+		if err := suspend(ctx, email, kName); err != nil {
+			return err
+		}
+	}
+	if err := deletePersistentDisk(ctx, kName); err != nil {
+		return err
+	}
+	if err := createPersistentDisk(ctx, kName); err != nil {
+		return err
+	}
+	if instance.Replicas > 0 {
+		return resume(ctx, email, kName)
+	}
+	return nil
+}
+
 func destroy(ctx *context.T, email, kName string) error {
 	if err := isOwnerOfInstance(ctx, email, kName); err != nil {
 		return err
 	}
-
 	cfg, cleanup, err := createDeploymentConfig(ctx, email, kName, "", nil)
 	defer cleanup()
 	if err != nil {
 		return err
 	}
 
-	out, err := vkube("stop", "-f", cfg)
-	if err != nil {
-		ctx.Errorf("vkube stop failed: %s", string(out))
+	if _, err := vkube("stop", "-f", cfg); err != nil {
+		ctx.Errorf("Error: %v", err)
 		return verror.New(verror.ErrInternal, ctx, err)
 	}
-	if err := deletePersistentDisk(ctx, kName); err != nil {
-		return err
-	}
-	return nil
+	return deletePersistentDisk(ctx, kName)
 }
 
 func createDeploymentConfig(ctx *context.T, email, deploymentName, mountName string, baseBlessingNames []string) (string, func(), error) {
@@ -287,6 +334,9 @@
 				CreationTime time.Time         `json:"creationTimestamp"`
 				Annotations  map[string]string `json:"annotations"`
 			} `json:"metadata"`
+			Spec struct {
+				Replicas int32 `json:"replicas"`
+			} `json:"spec"`
 		} `json:"items"`
 	}
 	if err := json.Unmarshal(out, &list); err != nil {
@@ -307,22 +357,28 @@
 			MountName:     cInfo.MountName,
 			BlessingNames: cInfo.BlessingNames,
 			CreationTime:  l.Metadata.CreationTime,
+			Replicas:      l.Spec.Replicas,
 		})
 	}
 	return instances, nil
 }
 
-func isOwnerOfInstance(ctx *context.T, email, kName string) error {
+func getInstance(ctx *context.T, email, kName string) (allocator.Instance, error) {
 	instances, err := serverInstances(ctx, email)
 	if err != nil {
-		return err
+		return allocator.Instance{}, err
 	}
 	for _, i := range instances {
 		if i.Handle == kName {
-			return nil
+			return i, nil
 		}
 	}
-	return verror.New(verror.ErrNoExistOrNoAccess, nil)
+	return allocator.Instance{}, verror.New(verror.ErrNoExistOrNoAccess, nil)
+}
+
+func isOwnerOfInstance(ctx *context.T, email, kName string) error {
+	_, err := getInstance(ctx, email, kName)
+	return err
 }
 
 func createPersistentDisk(ctx *context.T, name string) error {
diff --git a/services/allocator/service.vdl b/services/allocator/service.vdl
index c5cfe6e..a1dfdf9 100644
--- a/services/allocator/service.vdl
+++ b/services/allocator/service.vdl
@@ -12,6 +12,7 @@
      MountName string
      BlessingNames []string
      CreationTime time.Time
+     Replicas int32
 }
 
 type Allocator interface {