diff --git a/probe/kubernetes/kubelet.go b/probe/kubernetes/kubelet.go new file mode 100644 index 000000000..768b04d8c --- /dev/null +++ b/probe/kubernetes/kubelet.go @@ -0,0 +1,38 @@ +package kubernetes + +import ( + "net/http" + + "github.com/ugorji/go/codec" +) + +// KubeletURL is just exported for testing +var KubeletURL = "http://localhost:10255" + +// Intentionally not using the full kubernetes library DS +// to make parsing faster and more tolerant to schema changes +type podList struct { + Items []struct { + Metadata struct { + UID string `json:"uid"` + } `json:"metadata"` + } `json:"items"` +} + +// GetLocalPodUIDs obtains the UID of the pods run locally (it's just exported for testing) +var GetLocalPodUIDs = func() (map[string]struct{}, error) { + resp, err := http.Get(KubeletURL + "/pods/") + if err != nil { + return nil, err + } + defer resp.Body.Close() + var localPods podList + if err := codec.NewDecoder(resp.Body, &codec.JsonHandle{}).Decode(&localPods); err != nil { + return nil, err + } + result := make(map[string]struct{}, len(localPods.Items)) + for _, pod := range localPods.Items { + result[pod.Metadata.UID] = struct{}{} + } + return result, nil +} diff --git a/probe/kubernetes/kubelet_pods.json b/probe/kubernetes/kubelet_pods.json new file mode 100644 index 000000000..925b4b592 --- /dev/null +++ b/probe/kubernetes/kubelet_pods.json @@ -0,0 +1,3627 @@ +{ + "kind": "PodList", + "apiVersion": "v1", + "metadata": {}, + "items": [ + { + "metadata": { + "name": "configs-db-289919966-phz6s", + "generateName": "configs-db-289919966-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/configs-db-289919966-phz6s", + "uid": "af1b5325-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16439", + "creationTimestamp": "2017-01-12T14:01:58Z", + "labels": { + "name": "configs-db", + "pod-template-hash": "289919966" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824003566Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"configs-db-289919966\",\"uid\":\"af1ad88a-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16139\"}}\n", + "prometheus.io.scrape": "false" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "configs-db-289919966", + "uid": "af1ad88a-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "configs-db", + "image": "quay.io/weaveworks/configs-db", + "ports": [ + { + "containerPort": 5432, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:32Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:58Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.23", + "startTime": "2017-01-12T14:01:59Z", + "containerStatuses": [ + { + "name": "configs-db", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:25Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:00Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://1e8bb78d93fbf1395d301e81bc30e3416c934e6180d0684f8576e8383c41d070" + } + }, + "ready": true, + "restartCount": 1, + "image": "quay.io/weaveworks/configs-db", + "imageID": "docker://sha256:f6d024621defbdb2e9124da2f4fef1ab02d9d329405722c5c519d96e5a17eeb7", + "containerID": "docker://9a5091295c7e6616237162ffefb89012e04f9d26d8e1b732b6a8a77b239e6052" + } + ] + } + }, + { + "metadata": { + "name": "ui-server-900193946-rtndw", + "generateName": "ui-server-900193946-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/ui-server-900193946-rtndw", + "uid": "afeb8017-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16609", + "creationTimestamp": "2017-01-12T14:02:00Z", + "labels": { + "name": "ui-server", + "pod-template-hash": "900193946" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823998479Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"ui-server-900193946\",\"uid\":\"afd05788-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16225\"}}\n", + "prometheus.io.scrape": "false" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "ui-server-900193946", + "uid": "afd05788-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "ui-server", + "image": "quay.io/weaveworks/ui-server:latest", + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {}, + "imagePullSecrets": [ + { + "name": "quay-secret" + } + ] + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:00Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:31Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:00Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.24", + "startTime": "2017-01-12T14:02:00Z", + "containerStatuses": [ + { + "name": "ui-server", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:26Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:02Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://6a135c940b99781c926dabfccb7b1e7a35acd8aab3d62e0a766a4ad54eb9f970" + } + }, + "ready": true, + "restartCount": 1, + "image": "quay.io/weaveworks/ui-server:latest", + "imageID": "docker://sha256:8e92c36003cc0a59dcb525d41d106a6cef0a934cba56bdc74a9fbe52d1cfde28", + "containerID": "docker://cdf7a1104396802d759b460aff42245fd0330d02917ec124b4a2b25b59ed7402" + } + ] + } + }, + { + "metadata": { + "name": "nats-3594332673-5wj6j", + "generateName": "nats-3594332673-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/nats-3594332673-5wj6j", + "uid": "b57a1ada-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16663", + "creationTimestamp": "2017-01-12T14:02:09Z", + "labels": { + "name": "nats", + "pod-template-hash": "3594332673" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824017989Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"nats-3594332673\",\"uid\":\"b570d97f-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16416\"}}\n", + "prometheus.io.port": "9148" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "nats-3594332673", + "uid": "b570d97f-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "nats", + "image": "nats:0.8.0", + "ports": [ + { + "name": "clients", + "containerPort": 4222, + "protocol": "TCP" + }, + { + "name": "httpmonitoring", + "containerPort": 8222, + "protocol": "TCP" + }, + { + "name": "cluster", + "containerPort": 6222, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + }, + { + "name": "exporter", + "image": "tomwilkie/nats_exporter:0.1", + "args": [ + "-nats.scrape-uri=http://localhost:8222" + ], + "ports": [ + { + "name": "http", + "containerPort": 9148, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:09Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:35Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:09Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.18", + "startTime": "2017-01-12T14:02:09Z", + "containerStatuses": [ + { + "name": "exporter", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:25Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:12Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://625f57684b963a741c99a174fdfcb442658f371458a7593896fe83564044e745" + } + }, + "ready": true, + "restartCount": 1, + "image": "tomwilkie/nats_exporter:0.1", + "imageID": "docker://sha256:ff69eb141a15ada0b2499f086e814f54b6cf1b122fab93da6389aafa168160b5", + "containerID": "docker://309ae798112b607da35966e5560eb60f702162d20e0ffc06ec74ce7bc4b8077c" + }, + { + "name": "nats", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:26Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T14:02:12Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://5abeb5e3c5ba65090c558bba84ca9b28cc27d3fb5c8f7f286bc4325af8113a79" + } + }, + "ready": true, + "restartCount": 1, + "image": "nats:0.8.0", + "imageID": "docker://sha256:0f7905e57de4a116372dedd41592ee64e72912cc5233e6933ddd294daa770909", + "containerID": "docker://ef5811c2a0961b72919dee26a94eb5368c1c3c87ae14b556f0faf39fa279561b" + } + ] + } + }, + { + "metadata": { + "name": "scope-app-2231170617-b59zc", + "generateName": "scope-app-2231170617-", + "namespace": "kube-system", + "selfLink": "/api/v1/namespaces/kube-system/pods/scope-app-2231170617-b59zc", + "uid": "00915ccb-dbd5-11e6-84fa-0800278a0c83", + "resourceVersion": "384560", + "creationTimestamp": "2017-01-16T10:17:36Z", + "labels": { + "name": "scope-app", + "pod-template-hash": "2231170617" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823994918Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"kube-system\",\"name\":\"scope-app-2231170617\",\"uid\":\"008e68c5-dbd5-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"384530\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "scope-app-2231170617", + "uid": "008e68c5-dbd5-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-lnm3t", + "secret": { + "secretName": "default-token-lnm3t", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "scope-app", + "image": "weaveworks/scope", + "command": [ + "/home/weave/scope" + ], + "args": [ + "--mode=app", + "--app.weave.addr=", + "--app.http.address=:80" + ], + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "CHECKPOINT_DISABLE", + "value": "true" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-lnm3t", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T10:17:36Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:35Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T10:17:36Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.12", + "startTime": "2017-01-16T10:17:36Z", + "containerStatuses": [ + { + "name": "scope-app", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:24Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-16T10:17:37Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://c18b318c792d9a4c6a8be25e23a7ab3ab8693db1e7295d3ed185a3b0ea393821" + } + }, + "ready": true, + "restartCount": 1, + "image": "weaveworks/scope", + "imageID": "docker://sha256:b8dc300c3e3c8fe16dbcf522199b413af6910c213ed001a7ba4732cb4acc2f7a", + "containerID": "docker://1a2ba2201c805321711e9574325127420ab46d91a131fe3d17e4b890f5dad926" + } + ] + } + }, + { + "metadata": { + "name": "scope-probe-00xt7", + "generateName": "scope-probe-", + "namespace": "kube-system", + "selfLink": "/api/v1/namespaces/kube-system/pods/scope-probe-00xt7", + "uid": "009a3d10-dbd5-11e6-84fa-0800278a0c83", + "resourceVersion": "384569", + "creationTimestamp": "2017-01-16T10:17:36Z", + "labels": { + "name": "scope-probe" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823980499Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"DaemonSet\",\"namespace\":\"kube-system\",\"name\":\"scope-probe\",\"uid\":\"00930ee8-dbd5-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"384536\"}}\n" + } + }, + "spec": { + "volumes": [ + { + "name": "docker-sock", + "hostPath": { + "path": "/var/run/docker.sock" + } + }, + { + "name": "default-token-lnm3t", + "secret": { + "secretName": "default-token-lnm3t", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "scope-probe", + "image": "weaveworks/scope", + "command": [ + "/home/weave/scope" + ], + "args": [ + "--mode=probe", + "--probe.docker=true", + "--probe.kubernetes=true", + "--probe.processes=false", + "--probe.resolver=$(KUBE_DNS_SERVICE_HOST):$(KUBE_DNS_SERVICE_PORT)", + "scope.kube-system.svc.cluster.local:80" + ], + "env": [ + { + "name": "CHECKPOINT_DISABLE", + "value": "true" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "docker-sock", + "mountPath": "/var/run/docker.sock" + }, + { + "name": "default-token-lnm3t", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent", + "securityContext": { + "privileged": true + } + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "hostNetwork": true, + "hostPID": true, + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T10:17:36Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:31Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T10:17:37Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "192.168.99.100", + "startTime": "2017-01-16T10:17:36Z", + "containerStatuses": [ + { + "name": "scope-probe", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:22Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-16T10:17:37Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://b28cee8c45cc4f31e80335b99bfbee1b29e756bd6362ae49005521d06e1e9b70" + } + }, + "ready": true, + "restartCount": 1, + "image": "weaveworks/scope", + "imageID": "docker://sha256:b8dc300c3e3c8fe16dbcf522199b413af6910c213ed001a7ba4732cb4acc2f7a", + "containerID": "docker://e9b27a59dcf0921fd45ef8d74bb3973842c54b3187716a692e0550360909bb44" + } + ] + } + }, + { + "metadata": { + "name": "kubernetes-dashboard-0lvk4", + "generateName": "kubernetes-dashboard-", + "namespace": "kube-system", + "selfLink": "/api/v1/namespaces/kube-system/pods/kubernetes-dashboard-0lvk4", + "uid": "fa8320c0-d8b0-11e6-828c-0800278a0c83", + "resourceVersion": "15572", + "creationTimestamp": "2017-01-12T10:22:11Z", + "labels": { + "app": "kubernetes-dashboard", + "kubernetes.io/cluster-service": "true", + "version": "v1.5.1" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824013139Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicationController\",\"namespace\":\"kube-system\",\"name\":\"kubernetes-dashboard\",\"uid\":\"fa829b4b-d8b0-11e6-828c-0800278a0c83\",\"apiVersion\":\"v1\",\"resourceVersion\":\"68\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "v1", + "kind": "ReplicationController", + "name": "kubernetes-dashboard", + "uid": "fa829b4b-d8b0-11e6-828c-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-lnm3t", + "secret": { + "secretName": "default-token-lnm3t", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "kubernetes-dashboard", + "image": "gcr.io/google_containers/kubernetes-dashboard-amd64:v1.5.1", + "ports": [ + { + "containerPort": 9090, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-lnm3t", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "livenessProbe": { + "httpGet": { + "path": "/", + "port": 9090, + "scheme": "HTTP" + }, + "initialDelaySeconds": 30, + "timeoutSeconds": 30, + "periodSeconds": 10, + "successThreshold": 1, + "failureThreshold": 3 + }, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T10:22:11Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:35Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T10:22:11Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.16", + "startTime": "2017-01-12T10:22:11Z", + "containerStatuses": [ + { + "name": "kubernetes-dashboard", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:25Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T13:59:22Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://a61ac2fb3c353208771a4e26ceebc66cb30048992d8d5e34344155b5e1741118" + } + }, + "ready": true, + "restartCount": 2, + "image": "gcr.io/google_containers/kubernetes-dashboard-amd64:v1.5.1", + "imageID": "docker://sha256:1180413103fdfd00a7882d3d8653a220d88c6ea4466fb860e98376c45ee1a1d0", + "containerID": "docker://fe6ef6e281fe527a2ddee7e0edff400dda2959f559e76507fdac94ec7f5d441b" + } + ] + } + }, + { + "metadata": { + "name": "kube-dns-v20-qc4q2", + "generateName": "kube-dns-v20-", + "namespace": "kube-system", + "selfLink": "/api/v1/namespaces/kube-system/pods/kube-dns-v20-qc4q2", + "uid": "fa95ebae-d8b0-11e6-828c-0800278a0c83", + "resourceVersion": "15501", + "creationTimestamp": "2017-01-12T10:22:11Z", + "labels": { + "k8s-app": "kube-dns", + "version": "v20" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824011962Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicationController\",\"namespace\":\"kube-system\",\"name\":\"kube-dns-v20\",\"uid\":\"fa93e3b1-d8b0-11e6-828c-0800278a0c83\",\"apiVersion\":\"v1\",\"resourceVersion\":\"81\"}}\n", + "scheduler.alpha.kubernetes.io/critical-pod": "", + "scheduler.alpha.kubernetes.io/tolerations": "[{\"key\":\"CriticalAddonsOnly\", \"operator\":\"Exists\"}]" + }, + "ownerReferences": [ + { + "apiVersion": "v1", + "kind": "ReplicationController", + "name": "kube-dns-v20", + "uid": "fa93e3b1-d8b0-11e6-828c-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-lnm3t", + "secret": { + "secretName": "default-token-lnm3t", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "kubedns", + "image": "gcr.io/google_containers/kubedns-amd64:1.9", + "args": [ + "--domain=cluster.local.", + "--dns-port=10053" + ], + "ports": [ + { + "name": "dns-local", + "containerPort": 10053, + "protocol": "UDP" + }, + { + "name": "dns-tcp-local", + "containerPort": 10053, + "protocol": "TCP" + } + ], + "resources": { + "limits": { + "memory": "170Mi" + }, + "requests": { + "cpu": "100m", + "memory": "70Mi" + } + }, + "volumeMounts": [ + { + "name": "default-token-lnm3t", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "livenessProbe": { + "httpGet": { + "path": "/healthz-kubedns", + "port": 8080, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "timeoutSeconds": 5, + "periodSeconds": 10, + "successThreshold": 1, + "failureThreshold": 5 + }, + "readinessProbe": { + "httpGet": { + "path": "/readiness", + "port": 8081, + "scheme": "HTTP" + }, + "initialDelaySeconds": 3, + "timeoutSeconds": 5, + "periodSeconds": 10, + "successThreshold": 1, + "failureThreshold": 3 + }, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + }, + { + "name": "dnsmasq", + "image": "gcr.io/google_containers/kube-dnsmasq-amd64:1.4", + "args": [ + "--cache-size=1000", + "--no-resolv", + "--server=127.0.0.1#10053", + "--log-facility=-" + ], + "ports": [ + { + "name": "dns", + "containerPort": 53, + "protocol": "UDP" + }, + { + "name": "dns-tcp", + "containerPort": 53, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-lnm3t", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "livenessProbe": { + "httpGet": { + "path": "/healthz-dnsmasq", + "port": 8080, + "scheme": "HTTP" + }, + "initialDelaySeconds": 60, + "timeoutSeconds": 5, + "periodSeconds": 10, + "successThreshold": 1, + "failureThreshold": 5 + }, + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + }, + { + "name": "healthz", + "image": "gcr.io/google_containers/exechealthz-amd64:1.2", + "args": [ + "--cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null", + "--url=/healthz-dnsmasq", + "--cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1:10053 >/dev/null", + "--url=/healthz-kubedns", + "--port=8080", + "--quiet" + ], + "ports": [ + { + "containerPort": 8080, + "protocol": "TCP" + } + ], + "resources": { + "limits": { + "memory": "50Mi" + }, + "requests": { + "cpu": "10m", + "memory": "50Mi" + } + }, + "volumeMounts": [ + { + "name": "default-token-lnm3t", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "Default", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T10:22:11Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:37Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T10:22:11Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.8", + "startTime": "2017-01-12T10:22:11Z", + "containerStatuses": [ + { + "name": "dnsmasq", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:22Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 137, + "reason": "Error", + "startedAt": "2017-01-12T13:59:22Z", + "finishedAt": "2017-01-16T11:54:57Z", + "containerID": "docker://d1bfed928b828b46077f09da02565f36e722bb9f64bc582990debe8311434e5f" + } + }, + "ready": true, + "restartCount": 2, + "image": "gcr.io/google_containers/kube-dnsmasq-amd64:1.4", + "imageID": "docker://sha256:3ec65756a89b70b4095e43a340a6e2d5696cac7a93a29619ff5c4b6be9af2773", + "containerID": "docker://e824bc87ae99382ffb9b6ac482532f1876c6b9fb5c83fc2eb194c0da3882e20a" + }, + { + "name": "healthz", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:22Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T13:59:22Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://21784dee53bf042bb1ecbd2cfc0a10741ddba2ce9ed78a25ed1ca91269b05d78" + } + }, + "ready": true, + "restartCount": 2, + "image": "gcr.io/google_containers/exechealthz-amd64:1.2", + "imageID": "docker://sha256:93a43bfb39bfe9795e76ccd75d7a0e6d40e2ae8563456a2a77c1b4cfc3bbd967", + "containerID": "docker://fd8cadb5c948b4741a50672b970fcb01cb7485ebe0d6c415349666013056d142" + }, + { + "name": "kubedns", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:21Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 137, + "reason": "Error", + "startedAt": "2017-01-12T13:59:21Z", + "finishedAt": "2017-01-16T11:54:57Z", + "containerID": "docker://4b86698307967222f44ed048f071a804210e1821eb282461dc5bc34b4219b838" + } + }, + "ready": true, + "restartCount": 2, + "image": "gcr.io/google_containers/kubedns-amd64:1.9", + "imageID": "docker://sha256:26cf1ed9b14486b93acd70c060a17fea13620393d3aa8e76036b773197c47a05", + "containerID": "docker://ee27a71e77d4436fca08f943f0436e13ef410660bc1313515ba31f2800d2864c" + } + ] + } + }, + { + "metadata": { + "name": "configs-db-exporter-2673872573-qblrj", + "generateName": "configs-db-exporter-2673872573-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/configs-db-exporter-2673872573-qblrj", + "uid": "af274a9e-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16339", + "creationTimestamp": "2017-01-12T14:01:58Z", + "labels": { + "name": "configs-db-exporter", + "pod-template-hash": "2673872573" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824010641Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"configs-db-exporter-2673872573\",\"uid\":\"af1fa878-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16144\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "configs-db-exporter-2673872573", + "uid": "af1fa878-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "configs-db-exporter", + "image": "weaveworks/postgres_exporter:e919299c1aab", + "ports": [ + { + "containerPort": 9113, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "DATA_SOURCE_NAME", + "value": "postgres://postgres@configs-db.default.svc.cluster.local/configs?sslmode=disable" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:19Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.4", + "startTime": "2017-01-12T14:01:59Z", + "containerStatuses": [ + { + "name": "configs-db-exporter", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:19Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T14:02:00Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://16e3745a4145d8702bf7bb774220927fcbaba8a732666b2b96b0139a0b109569" + } + }, + "ready": true, + "restartCount": 1, + "image": "weaveworks/postgres_exporter:e919299c1aab", + "imageID": "docker://sha256:e919299c1aab8ea31b1a9c6591d02e3b031ca3904e96a5f711ee9e96268836ff", + "containerID": "docker://9b6f999d1242585e8f87ac4b5b44e446531bd1bf774651144d0f5709a211e669" + } + ] + } + }, + { + "metadata": { + "name": "configs-1703278717-2h1j9", + "generateName": "configs-1703278717-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/configs-1703278717-2h1j9", + "uid": "af628fd4-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16841", + "creationTimestamp": "2017-01-12T14:01:59Z", + "labels": { + "name": "configs", + "pod-template-hash": "1703278717" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824007209Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"configs-1703278717\",\"uid\":\"af57675c-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16170\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "configs-1703278717", + "uid": "af57675c-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "configs", + "image": "quay.io/weaveworks/configs", + "args": [ + "-port=80", + "-database-uri=postgres://postgres@configs-db.default.svc.cluster.local/configs?sslmode=disable", + "-database-migrations=/migrations" + ], + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:49Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.7", + "startTime": "2017-01-12T14:01:59Z", + "containerStatuses": [ + { + "name": "configs", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:48Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 1, + "reason": "Error", + "startedAt": "2017-01-16T13:01:21Z", + "finishedAt": "2017-01-16T13:01:47Z", + "containerID": "docker://19eb356ebf072315b9ff474046cb3a7d50168366508f091e778f81fbfcace17f" + } + }, + "ready": true, + "restartCount": 3, + "image": "quay.io/weaveworks/configs", + "imageID": "docker://sha256:90831b878d8484708bc7318d1b0811f37d4814f0b46f879f7134c0128f280234", + "containerID": "docker://70875dc36a586d2aeb4fe0b5366a36c74d6b2839e20268ef43f6b4f7dae55e8c" + } + ] + } + }, + { + "metadata": { + "name": "mailcatcher-2634220484-8xg5c", + "generateName": "mailcatcher-2634220484-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/mailcatcher-2634220484-8xg5c", + "uid": "af7f1d33-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16581", + "creationTimestamp": "2017-01-12T14:01:59Z", + "labels": { + "name": "mailcatcher", + "pod-template-hash": "2634220484" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824020535Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"mailcatcher-2634220484\",\"uid\":\"af71788d-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16186\"}}\n", + "prometheus.io.scrape": "false" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "mailcatcher-2634220484", + "uid": "af71788d-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "mailcatcher", + "image": "schickling/mailcatcher", + "args": [ + "mailcatcher", + "-f", + "--ip=0.0.0.0", + "--smtp-port=587", + "--http-port=80" + ], + "ports": [ + { + "containerPort": 587, + "protocol": "TCP" + }, + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "Always" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:37Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.6", + "startTime": "2017-01-12T14:01:59Z", + "containerStatuses": [ + { + "name": "mailcatcher", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:34Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:06Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://b90c068370dd5e2f89ad7ba3a29649278079e0eb51b34c24e13c89564606a020" + } + }, + "ready": true, + "restartCount": 1, + "image": "schickling/mailcatcher", + "imageID": "docker://sha256:c8a0a04e9adec55bf71caf501688969c5c78330938498aa26f78bc2ac3be964e", + "containerID": "docker://d457c9e66f717b17fe65c73342b7182c8941e15dd8a2c6211f4c019ae42f7039" + } + ] + } + }, + { + "metadata": { + "name": "users-db-exporter-1803160545-g9nx9", + "generateName": "users-db-exporter-1803160545-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/users-db-exporter-1803160545-g9nx9", + "uid": "b0104177-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16524", + "creationTimestamp": "2017-01-12T14:02:00Z", + "labels": { + "name": "users-db-exporter", + "pod-template-hash": "1803160545" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824004869Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"users-db-exporter-1803160545\",\"uid\":\"affdee8e-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16245\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "users-db-exporter-1803160545", + "uid": "affdee8e-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "users-db-exporter", + "image": "weaveworks/postgres_exporter:e919299c1aab", + "ports": [ + { + "containerPort": 9113, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "DATA_SOURCE_NAME", + "value": "postgres://postgres@users-db.default.svc.cluster.local/users?sslmode=disable" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:00Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:19Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:00Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.3", + "startTime": "2017-01-12T14:02:00Z", + "containerStatuses": [ + { + "name": "users-db-exporter", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:19Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T14:02:02Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://f65ee29e3f1a63494d311cb14a00e5093a4efd0231f28a76d12e5d15e8326b08" + } + }, + "ready": true, + "restartCount": 1, + "image": "weaveworks/postgres_exporter:e919299c1aab", + "imageID": "docker://sha256:e919299c1aab8ea31b1a9c6591d02e3b031ca3904e96a5f711ee9e96268836ff", + "containerID": "docker://c63bec6857faf35b98e3275e6db0e706f4c8bd6313696e4f8b613bd0ad7cc54f" + } + ] + } + }, + { + "metadata": { + "name": "s3-627755048-xl3wt", + "generateName": "s3-627755048-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/s3-627755048-xl3wt", + "uid": "b64d652b-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16667", + "creationTimestamp": "2017-01-12T14:02:10Z", + "labels": { + "name": "s3", + "pod-template-hash": "627755048" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823997249Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"s3-627755048\",\"uid\":\"b62435fb-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16475\"}}\n", + "prometheus.io.scrape": "false" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "s3-627755048", + "uid": "b62435fb-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "s3", + "image": "lphoward/fake-s3", + "ports": [ + { + "containerPort": 4569, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:11Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:35Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:11Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.5", + "startTime": "2017-01-12T14:02:11Z", + "containerStatuses": [ + { + "name": "s3", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:21Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:13Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://56acac60e561691b03e86cc304aad91039a252722f168c495cf5b0bbf7d4874d" + } + }, + "ready": true, + "restartCount": 1, + "image": "lphoward/fake-s3", + "imageID": "docker://sha256:4e02458e1040040b5a65dfe6d54ab1acd37f95fc569e888c5f84a25f90701ffc", + "containerID": "docker://3580cbd9dfd3932c18f352fe591fb61103225e52846b7b1d48b66eb10efedb66" + } + ] + } + }, + { + "metadata": { + "name": "sqs-1929955934-hxm15", + "generateName": "sqs-1929955934-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/sqs-1929955934-hxm15", + "uid": "b687c058-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16630", + "creationTimestamp": "2017-01-12T14:02:11Z", + "labels": { + "name": "sqs", + "pod-template-hash": "1929955934" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824024399Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"sqs-1929955934\",\"uid\":\"b679ffa5-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16500\"}}\n", + "prometheus.io.scrape": "false" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "sqs-1929955934", + "uid": "b679ffa5-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "sqs", + "image": "pakohan/elasticmq", + "ports": [ + { + "containerPort": 9324, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:11Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:35Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:11Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.14", + "startTime": "2017-01-12T14:02:11Z", + "containerStatuses": [ + { + "name": "sqs", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:24Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 137, + "reason": "Error", + "startedAt": "2017-01-12T14:02:13Z", + "finishedAt": "2017-01-16T11:54:57Z", + "containerID": "docker://eecf02e9e765152fce715db862a43b036e3e2b4a8770a558c0edcaa4c04f8962" + } + }, + "ready": true, + "restartCount": 1, + "image": "pakohan/elasticmq", + "imageID": "docker://sha256:b1c109b8a4c6bcd16499db7293653f9f500412d979fe999ee8c1852a325df840", + "containerID": "docker://e9412db40a7414029e9b2330bb4d5f487b8023a03577a21db015bd95268dd27c" + } + ] + } + }, + { + "metadata": { + "name": "users-db-4057515837-2w169", + "generateName": "users-db-4057515837-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/users-db-4057515837-2w169", + "uid": "b0037e94-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16617", + "creationTimestamp": "2017-01-12T14:02:00Z", + "labels": { + "name": "users-db", + "pod-template-hash": "4057515837" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824015625Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"users-db-4057515837\",\"uid\":\"aff90f26-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16241\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "users-db-4057515837", + "uid": "aff90f26-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "users-db", + "image": "quay.io/weaveworks/users-db", + "ports": [ + { + "containerPort": 5432, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:00Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:35Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:00Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.19", + "startTime": "2017-01-12T14:02:00Z", + "containerStatuses": [ + { + "name": "users-db", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:26Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:02Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://16f2dff0a62fd41e49c1406b38fb791d5ef4aa8c59fc967b95e3d6844fedb46b" + } + }, + "ready": true, + "restartCount": 1, + "image": "quay.io/weaveworks/users-db", + "imageID": "docker://sha256:f36384d64973997087a056f9bcbdff5e2462313c627c255633ff95829981a43c", + "containerID": "docker://6c60732049392f1e2d405564e83c5d2597ef5a38e2a5e1037ebbbba68ca76120" + } + ] + } + }, + { + "metadata": { + "name": "memcached-1123217401-0t238", + "generateName": "memcached-1123217401-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/memcached-1123217401-0t238", + "uid": "b56298ba-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16640", + "creationTimestamp": "2017-01-12T14:02:09Z", + "labels": { + "name": "memcached", + "pod-template-hash": "1123217401" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824006046Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"memcached-1123217401\",\"uid\":\"b550d136-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16408\"}}\n", + "prometheus.io.scrape": "false" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "memcached-1123217401", + "uid": "b550d136-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "memcached", + "image": "memcached:1.4.25", + "args": [ + "-m 64", + "-p 11211", + "-vv" + ], + "ports": [ + { + "name": "clients", + "containerPort": 11211, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + }, + { + "name": "exporter", + "image": "prom/memcached-exporter:master", + "args": [ + "-memcached.address=localhost:11211", + "-web.listen-address=0.0.0.0:9150" + ], + "ports": [ + { + "name": "prom", + "containerPort": 9150, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:09Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:35Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:09Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.22", + "startTime": "2017-01-12T14:02:09Z", + "containerStatuses": [ + { + "name": "exporter", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:31Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T14:02:13Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://2623b1ab44b7333c28dd3e9b966f14628de4f86d4b9d4d168e44a7ddab0c620a" + } + }, + "ready": true, + "restartCount": 1, + "image": "prom/memcached-exporter:master", + "imageID": "docker://sha256:b0d528ada136e52d1a334a376d2fdfb6c8961ef7b66fdd9d0c6daa9e8108e8ce", + "containerID": "docker://2e1dd803ab5fbe5556cd3a8f68ff2d0f2f2afa45c5b2d7260e5b0ed7dbfe7e45" + }, + { + "name": "memcached", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:26Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:12Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://cee3d2618adc5448d07da2416cabfe3a7e39b9bc00b31312e31ad0334f5d3b10" + } + }, + "ready": true, + "restartCount": 1, + "image": "memcached:1.4.25", + "imageID": "docker://sha256:d97bb0f05e8995100f19068b895443a3ba3298e36c312c0a613530a8eb21c7f4", + "containerID": "docker://89b24b2df7f264567c4ff4f58122ce0d7d5236156ecc523ec75d5305d2b2be07" + } + ] + } + }, + { + "metadata": { + "name": "query-3639911744-ffpkh", + "generateName": "query-3639911744-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/query-3639911744-ffpkh", + "uid": "b613f0e9-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16699", + "creationTimestamp": "2017-01-12T14:02:10Z", + "labels": { + "name": "query", + "pod-template-hash": "3639911744" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823986729Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"query-3639911744\",\"uid\":\"b6038984-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16463\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "query-3639911744", + "uid": "b6038984-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "query", + "image": "weaveworks/scope", + "command": [ + "/home/weave/scope" + ], + "args": [ + "--mode=app", + "--weave=false", + "--app.log.http=true", + "--app.http.address=:80", + "--app.userid.header=X-Scope-OrgID", + "--app.collector=dynamodb://abc:123@dynamodb.scope.svc.cluster.local:8000/reports", + "--app.collector.s3=s3://abc:123@s3.scope.svc.cluster.local:4569/s3", + "--app.nats=nats://nats.scope.svc.cluster.local:4222", + "--app.memcached.hostname=memcached.scope.svc.cluster.local", + "--app.memcached.timeout=100ms", + "--app.memcached.service=memcached", + "--app.log.level=debug", + "--app.log.httpHeaders=true" + ], + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "CHECKPOINT_DISABLE", + "value": "1" + }, + { + "name": "SCOPE_HOSTNAME", + "value": "service" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:11Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:37Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:10Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.21", + "startTime": "2017-01-12T14:02:11Z", + "containerStatuses": [ + { + "name": "query", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:35Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 1, + "reason": "Error", + "startedAt": "2017-01-16T13:01:25Z", + "finishedAt": "2017-01-16T13:01:33Z", + "containerID": "docker://ce8e777e6bc4c4788c26f08c8fdae74585892d21f8af9c06d4da2e9986fdcb66" + } + }, + "ready": true, + "restartCount": 4, + "image": "weaveworks/scope", + "imageID": "docker://sha256:b8dc300c3e3c8fe16dbcf522199b413af6910c213ed001a7ba4732cb4acc2f7a", + "containerID": "docker://626143ce2911890d9da351413517f0483ffee26e0dcade4749271deb4471fb2c" + } + ] + } + }, + { + "metadata": { + "name": "authfe-4078525612-xzxkm", + "generateName": "authfe-4078525612-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/authfe-4078525612-xzxkm", + "uid": "fa2eadd4-d8d1-11e6-84fa-0800278a0c83", + "resourceVersion": "17905", + "creationTimestamp": "2017-01-12T14:18:23Z", + "labels": { + "name": "authfe", + "pod-template-hash": "4078525612" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824019318Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"authfe-4078525612\",\"uid\":\"fa2d628c-d8d1-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"17880\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "authfe-4078525612", + "uid": "fa2d628c-d8d1-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "bigquery-secret", + "secret": { + "secretName": "bigquery-secret", + "defaultMode": 420 + } + }, + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "authfe", + "image": "quay.io/weaveworks/authfe", + "args": [ + "-log.level=debug", + "-auth.cache.size=200", + "-auth.cache.expiration=30s", + "-api.info=scopeservice-local:0.1", + "-fluent=localhost:24224", + "-hostname=cloud.weave.works", + "-alertmanager=alertmanager.monitoring.svc.cluster.local", + "-compare-images=compare-images.monitoring.svc.cluster.local", + "-grafana=grafana.monitoring.svc.cluster.local:80", + "-kubedash=kubernetes-dashboard.kube-system.svc.cluster.local", + "-kubediff=kubediff.monitoring.svc.cluster.local", + "-prometheus=prometheus.monitoring.svc.cluster.local", + "-scope=scope.kube-system.svc.cluster.local:80", + "-terradiff=terradiff.monitoring.svc.cluster.local", + "-billing-api=billing-api.billing.svc.cluster.local", + "-billing-ui=billing-ui.billing.svc.cluster.local", + "-billing-usage=billing-usage.billing.svc.cluster.local", + "-collection=collection.scope.svc.cluster.local:80", + "-control=control.scope.svc.cluster.local:80", + "-flux=fluxsvc.fluxy.svc.cluster.local:80", + "-pipe=pipe.scope.svc.cluster.local:80", + "-prom=distributor.cortex.svc.cluster.local:80", + "-query=query.scope.svc.cluster.local:80", + "-ui-server=ui-server.default.svc.cluster.local", + "-users=users.default.svc.cluster.local", + "-demo=demo.extra.svc.cluster.local", + "-launch-generator=launch-generator.extra.svc.cluster.local", + "-ui-metrics=ui-metrics.monitoring.svc.cluster.local" + ], + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + }, + { + "name": "logging", + "image": "quay.io/weaveworks/logging", + "env": [ + { + "name": "FLUENTD_CONF", + "value": "fluent-dev.conf" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "bigquery-secret", + "readOnly": true, + "mountPath": "/bigquery/secret/" + }, + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:18:23Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:32Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:18:23Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.13", + "startTime": "2017-01-12T14:18:23Z", + "containerStatuses": [ + { + "name": "authfe", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:24Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:18:24Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://fa8c5f0ba6cb94039d029eeca6630644229f2b497d1e1b0a4d619b2502adaa33" + } + }, + "ready": true, + "restartCount": 1, + "image": "quay.io/weaveworks/authfe", + "imageID": "docker://sha256:61d0af0e19008858ca8c111228acf6628ade0d3e6f68043cc6e20fd37bb887d5", + "containerID": "docker://1671ff54f39d3e2dcc73b5cf9d87f44b3c6c2197df18fa296297c5762777006e" + }, + { + "name": "logging", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:25Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:18:24Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://73632407f397ab0626f6a808c2d8571be2c719438b84bb768e7d311cfa5b6e4d" + } + }, + "ready": true, + "restartCount": 1, + "image": "quay.io/weaveworks/logging", + "imageID": "docker://sha256:71ddb93a0e945cb5eb840f7609ff102849ae779a456231e8bd674486353f5b8f", + "containerID": "docker://0f93fc27ba530667fa6940ed6c7abb4f1b38463f1bd6d65613cf0161e554a16d" + } + ] + } + }, + { + "metadata": { + "name": "proxy-3308382079-nb5sl", + "generateName": "proxy-3308382079-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/proxy-3308382079-nb5sl", + "uid": "af973584-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16496", + "creationTimestamp": "2017-01-12T14:01:59Z", + "labels": { + "name": "proxy", + "pod-template-hash": "3308382079" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823988454Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"proxy-3308382079\",\"uid\":\"af8b0a40-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16198\"}}\n", + "prometheus.io.scrape": "false" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "proxy-3308382079", + "uid": "af8b0a40-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "socksproxy", + "image": "weaveworks/socksproxy", + "command": [ + "/proxy" + ], + "args": [ + "--host-match='*.*.svc.cluster.local'", + "--alias=scope.weave.works:authfe.default.svc.cluster.local", + "--alias=cloud.weave.works:authfe.default.svc.cluster.local" + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:32Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:01:59Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.10", + "startTime": "2017-01-12T14:01:59Z", + "containerStatuses": [ + { + "name": "socksproxy", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:22Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T14:02:01Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://fa1b7e1717491153281b8a9518ca157215bf5be73c925b32b8c314956242e233" + } + }, + "ready": true, + "restartCount": 1, + "image": "weaveworks/socksproxy", + "imageID": "docker://sha256:67cbfd9eb7a99a711a6bfc41eea7bfc332e5d49a88e0ac48568c37fdf1046bfc", + "containerID": "docker://81636ad27922a43b7df23dca8faee96680fda55616860845d893a05cf65abd7d" + } + ] + } + }, + { + "metadata": { + "name": "users-1089059664-587wh", + "generateName": "users-1089059664-", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/pods/users-1089059664-587wh", + "uid": "b079da0b-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16858", + "creationTimestamp": "2017-01-12T14:02:01Z", + "labels": { + "name": "users", + "pod-template-hash": "1089059664" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.82400152Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"users-1089059664\",\"uid\":\"b05c7812-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16281\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "users-1089059664", + "uid": "b05c7812-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-bzbt2", + "secret": { + "secretName": "default-token-bzbt2", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "users", + "image": "quay.io/weaveworks/users", + "args": [ + "-session-secret=9334f0f44a271d686714c475b093a133fab81f90536b0de6a231af7dc78cb56e", + "-email-uri=smtp://mailcatcher:587", + "-database-uri=postgres://postgres@users-db.default.svc.cluster.local/users?sslmode=disable&max_open_conns=60", + "-database-migrations=/migrations", + "-direct-login=true", + "-github-client-id=361dfaca09eb0be8c9fc", + "-github-client-secret=7559ecdcbff17f2886dd66c7e9ca4b878b893377", + "-github-redirect-url=https://cloud.weave.works/login-via/github", + "-google-client-id=75701914109-rpmffah8g4d563fndlo80rvmce2b193r.apps.googleusercontent.com", + "-google-client-secret=S2b0pyVojKXR1ffAw9RjVJK_", + "-google-redirect-url=https://cloud.weave.works/login-via/google", + "-marketo-munchkin-key=TYkM1zgXewc9sevw/qnnat3hrVeUp5HqEKX9YlSzcYQ=" + ], + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-bzbt2", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:01Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:38Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:01Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.9", + "startTime": "2017-01-12T14:02:01Z", + "containerStatuses": [ + { + "name": "users", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:37Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 1, + "reason": "Error", + "startedAt": "2017-01-16T13:01:21Z", + "finishedAt": "2017-01-16T13:01:36Z", + "containerID": "docker://0d5e35994374eb2410c831d05766dc0fc9dd83aa7c0054796146e8a9be132963" + } + }, + "ready": true, + "restartCount": 3, + "image": "quay.io/weaveworks/users", + "imageID": "docker://sha256:7a9457c78c2a8ceed250e06f8c5eb0e5a5be60c4e73915f837f76eb2903af533", + "containerID": "docker://6a974959facba57cdbf97b3d5a1bd031cb0124b1dd88ac514842dea5fa22c439" + } + ] + } + }, + { + "metadata": { + "name": "collection-3905397281-00vsd", + "generateName": "collection-3905397281-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/collection-3905397281-00vsd", + "uid": "b4e30a10-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16685", + "creationTimestamp": "2017-01-12T14:02:08Z", + "labels": { + "name": "collection", + "pod-template-hash": "3905397281" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824014487Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"collection-3905397281\",\"uid\":\"b4de9f93-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16345\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "collection-3905397281", + "uid": "b4de9f93-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "collection", + "image": "weaveworks/scope", + "command": [ + "/home/weave/scope" + ], + "args": [ + "--mode=app", + "--weave=false", + "--app.log.http=true", + "--app.http.address=:80", + "--app.userid.header=X-Scope-OrgID", + "--app.collector=dynamodb://abc:123@dynamodb.scope.svc.cluster.local:8000/reports", + "--app.collector.s3=s3://abc:123@s3.scope.svc.cluster.local:4569/s3", + "--app.nats=nats://nats.scope.svc.cluster.local:4222", + "--app.aws.create.tables=true", + "--app.memcached.hostname=memcached.scope.svc.cluster.local", + "--app.memcached.timeout=100ms", + "--app.memcached.service=memcached" + ], + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "CHECKPOINT_DISABLE", + "value": "1" + }, + { + "name": "SCOPE_HOSTNAME", + "value": "service" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:08Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:37Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:08Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.11", + "startTime": "2017-01-12T14:02:08Z", + "containerStatuses": [ + { + "name": "collection", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:36Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 1, + "reason": "Error", + "startedAt": "2017-01-16T13:01:22Z", + "finishedAt": "2017-01-16T13:01:31Z", + "containerID": "docker://7feaa90ed4a0e147234417855c95024a8feb60a4eed36e38a9e52b5f9b060472" + } + }, + "ready": true, + "restartCount": 4, + "image": "weaveworks/scope", + "imageID": "docker://sha256:b8dc300c3e3c8fe16dbcf522199b413af6910c213ed001a7ba4732cb4acc2f7a", + "containerID": "docker://980ce8fceae0bd4077991b51ed96466077cd903e13281451607fe97956af6448" + } + ] + } + }, + { + "metadata": { + "name": "consul-3507324042-nfbz4", + "generateName": "consul-3507324042-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/consul-3507324042-nfbz4", + "uid": "b5025f49-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16635", + "creationTimestamp": "2017-01-12T14:02:08Z", + "labels": { + "name": "consul", + "pod-template-hash": "3507324042" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823996113Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"consul-3507324042\",\"uid\":\"b4fc8f90-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16363\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "consul-3507324042", + "uid": "b4fc8f90-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "config-volume", + "configMap": { + "name": "consul-config", + "defaultMode": 420 + } + }, + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "consul", + "image": "consul:v0.6.4", + "command": [ + "/bin/consul", + "agent", + "-ui", + "-data-dir=/data", + "-server", + "-client=0.0.0.0", + "-bootstrap", + "-config-file=/etc/config/consul.config" + ], + "ports": [ + { + "name": "server-noscrape", + "containerPort": 8300, + "protocol": "TCP" + }, + { + "name": "serf-noscrape", + "containerPort": 8301, + "protocol": "TCP" + }, + { + "name": "client-noscrape", + "containerPort": 8400, + "protocol": "TCP" + }, + { + "name": "http-noscrape", + "containerPort": 8500, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "CHECKPOINT_DISABLE", + "value": "1" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "config-volume", + "mountPath": "/etc/config" + }, + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + }, + { + "name": "statsd-exporter", + "image": "prom/statsd-exporter", + "args": [ + "-web.listen-address=:8000" + ], + "ports": [ + { + "name": "prom", + "containerPort": 8000, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + }, + { + "name": "consul-exporter", + "image": "prom/consul-exporter:master", + "args": [ + "-consul.server=localhost:8500", + "-web.listen-address=:9107" + ], + "ports": [ + { + "name": "prom", + "containerPort": 9107, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:08Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:34Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:08Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.17", + "startTime": "2017-01-12T14:02:08Z", + "containerStatuses": [ + { + "name": "consul", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:25Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:11Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://ef2ea6835f996249acbdc3b824f02a5c2e6d71e33637a11bb00e58e00437d723" + } + }, + "ready": true, + "restartCount": 1, + "image": "consul:v0.6.4", + "imageID": "docker://sha256:b0971c9ec4265ced4864d02053df9f2addf972e3ad5fffc144bba68654cc1119", + "containerID": "docker://d324af23e595a15f983ea5b4c0e81d36dc3afa0415dd3c7939898a892371c856" + }, + { + "name": "consul-exporter", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:33Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T14:02:12Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://031ab71ee3f7fd509e780f41a5a8366db59dd07e8a43e81bc30a18a3ab32055f" + } + }, + "ready": true, + "restartCount": 1, + "image": "prom/consul-exporter:master", + "imageID": "docker://sha256:9ced4ffa0e853f9ed5027c7b325f385e59bf8f2458958f2e1de040740987c00d", + "containerID": "docker://d15cf29104c2d346b91a9b1b59911870427d150b3770d814e8e507fb744f241a" + }, + { + "name": "statsd-exporter", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:31Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 2, + "reason": "Error", + "startedAt": "2017-01-12T14:02:11Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://883af7e1e18a090e65a9963dd9655d324a55786a36dc9a17b0dc9460ee7c3446" + } + }, + "ready": true, + "restartCount": 1, + "image": "prom/statsd-exporter", + "imageID": "docker://sha256:a7d10e807ed827762d4cd49f0c384b2a3aeef0b9f39e9f93cb0a3a870995db7f", + "containerID": "docker://a8d8c7fb28ff300dd212be28eda8392e09bc29b2e7dc617afbc86afc4aef4a7e" + } + ] + } + }, + { + "metadata": { + "name": "control-3104127832-lg797", + "generateName": "control-3104127832-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/control-3104127832-lg797", + "uid": "b52170e8-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16624", + "creationTimestamp": "2017-01-12T14:02:09Z", + "labels": { + "name": "control", + "pod-template-hash": "3104127832" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.824023095Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"control-3104127832\",\"uid\":\"b5172a3f-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16378\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "control-3104127832", + "uid": "b5172a3f-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "control", + "image": "weaveworks/scope", + "command": [ + "/home/weave/scope" + ], + "args": [ + "--mode=app", + "--weave=false", + "--app.log.http=true", + "--app.http.address=:80", + "--app.userid.header=X-Scope-OrgID", + "--app.control.router=sqs://abc:123@sqs.scope.svc.cluster.local:9324" + ], + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "CHECKPOINT_DISABLE", + "value": "1" + }, + { + "name": "SCOPE_HOSTNAME", + "value": "service" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:09Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:35Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:09Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.20", + "startTime": "2017-01-12T14:02:09Z", + "containerStatuses": [ + { + "name": "control", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:25Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:11Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://fce4f11a6dffbc4136b0c239cc39c51a8fd42f50eeb3427779d70aca0c696606" + } + }, + "ready": true, + "restartCount": 1, + "image": "weaveworks/scope", + "imageID": "docker://sha256:b8dc300c3e3c8fe16dbcf522199b413af6910c213ed001a7ba4732cb4acc2f7a", + "containerID": "docker://e02c8b6c838be552bdd7b38983579d7660aec72cfadd3702e44f41015c69bd54" + } + ] + } + }, + { + "metadata": { + "name": "dynamodb-2803225484-15nhx", + "generateName": "dynamodb-2803225484-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/dynamodb-2803225484-15nhx", + "uid": "b53e9d66-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16644", + "creationTimestamp": "2017-01-12T14:02:09Z", + "labels": { + "name": "dynamodb", + "pod-template-hash": "2803225484" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823993488Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"dynamodb-2803225484\",\"uid\":\"b52f180f-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16389\"}}\n", + "prometheus.io.scrape": "false" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "dynamodb-2803225484", + "uid": "b52f180f-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "dynamodb", + "image": "deangiberson/aws-dynamodb-local", + "ports": [ + { + "containerPort": 8000, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:09Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:19Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:09Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.2", + "startTime": "2017-01-12T14:02:09Z", + "containerStatuses": [ + { + "name": "dynamodb", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:19Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 143, + "reason": "Error", + "startedAt": "2017-01-12T14:02:12Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://925b580399d7786807483e9e3a361510e422fc0e6983732dce631154fded6701" + } + }, + "ready": true, + "restartCount": 1, + "image": "deangiberson/aws-dynamodb-local", + "imageID": "docker://sha256:78b80a1863a732ee6376627b10841480fc7b2d1ca193b2f72dd95c0e74ac3731", + "containerID": "docker://96299a876a76f37880ccc6cd5a58e47a290d17418675af6c5dcbe5bd5f907e76" + } + ] + } + }, + { + "metadata": { + "name": "pipe-3860611507-863np", + "generateName": "pipe-3860611507-", + "namespace": "scope", + "selfLink": "/api/v1/namespaces/scope/pods/pipe-3860611507-863np", + "uid": "b5c4c8c3-d8cf-11e6-84fa-0800278a0c83", + "resourceVersion": "16648", + "creationTimestamp": "2017-01-12T14:02:10Z", + "labels": { + "name": "pipe", + "pod-template-hash": "3860611507" + }, + "annotations": { + "kubernetes.io/config.seen": "2017-01-16T13:01:12.823992229Z", + "kubernetes.io/config.source": "api", + "kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"scope\",\"name\":\"pipe-3860611507\",\"uid\":\"b5abc51b-d8cf-11e6-84fa-0800278a0c83\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"16440\"}}\n" + }, + "ownerReferences": [ + { + "apiVersion": "extensions/v1beta1", + "kind": "ReplicaSet", + "name": "pipe-3860611507", + "uid": "b5abc51b-d8cf-11e6-84fa-0800278a0c83", + "controller": true + } + ] + }, + "spec": { + "volumes": [ + { + "name": "default-token-v7m9v", + "secret": { + "secretName": "default-token-v7m9v", + "defaultMode": 420 + } + } + ], + "containers": [ + { + "name": "pipe", + "image": "weaveworks/scope", + "command": [ + "/home/weave/scope" + ], + "args": [ + "--mode=app", + "--weave=false", + "--app.log.http=true", + "--app.http.address=:80", + "--app.userid.header=X-Scope-OrgID", + "--app.pipe.router=consul://consul.scope.svc.cluster.local:8500/pipes/", + "--app.consul.inf=eth0" + ], + "ports": [ + { + "containerPort": 80, + "protocol": "TCP" + } + ], + "env": [ + { + "name": "CHECKPOINT_DISABLE", + "value": "1" + }, + { + "name": "SCOPE_HOSTNAME", + "value": "service" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "default-token-v7m9v", + "readOnly": true, + "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "serviceAccountName": "default", + "serviceAccount": "default", + "nodeName": "minikube", + "securityContext": {} + }, + "status": { + "phase": "Running", + "conditions": [ + { + "type": "Initialized", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:10Z" + }, + { + "type": "Ready", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:33Z" + }, + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-12T14:02:10Z" + } + ], + "hostIP": "192.168.99.100", + "podIP": "172.17.0.15", + "startTime": "2017-01-12T14:02:10Z", + "containerStatuses": [ + { + "name": "pipe", + "state": { + "running": { + "startedAt": "2017-01-16T13:01:24Z" + } + }, + "lastState": { + "terminated": { + "exitCode": 0, + "reason": "Completed", + "startedAt": "2017-01-12T14:02:12Z", + "finishedAt": "2017-01-16T11:54:52Z", + "containerID": "docker://0172732debe8a25cba06a15ae0c85d3250ce6dcfb012d2602097b17ac4de5a76" + } + }, + "ready": true, + "restartCount": 1, + "image": "weaveworks/scope", + "imageID": "docker://sha256:b8dc300c3e3c8fe16dbcf522199b413af6910c213ed001a7ba4732cb4acc2f7a", + "containerID": "docker://54e05b4e38de6c26cd3954c8db52ee16f3dfc54417c94b6323ddcd16830ea306" + } + ] + } + }, + { + "metadata": { + "name": "kube-addon-manager-minikube", + "namespace": "kube-system", + "selfLink": "/api/v1/pods/namespaces/kube-addon-manager-minikube/kube-system", + "uid": "014fb8f91f3d52450a942179a984bc15", + "creationTimestamp": null, + "labels": { + "component": "kube-addon-manager", + "kubernetes.io/minikube-addons": "addon-manager", + "version": "v6.1" + }, + "annotations": { + "kubernetes.io/config.hash": "014fb8f91f3d52450a942179a984bc15", + "kubernetes.io/config.seen": "2017-01-16T13:01:12.82612516Z", + "kubernetes.io/config.source": "file" + } + }, + "spec": { + "volumes": [ + { + "name": "addons", + "hostPath": { + "path": "/etc/kubernetes/" + } + } + ], + "containers": [ + { + "name": "kube-addon-manager", + "image": "gcr.io/google-containers/kube-addon-manager:v6.1", + "resources": { + "requests": { + "cpu": "5m", + "memory": "50Mi" + } + }, + "volumeMounts": [ + { + "name": "addons", + "readOnly": true, + "mountPath": "/etc/kubernetes/" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent" + } + ], + "restartPolicy": "Always", + "terminationGracePeriodSeconds": 30, + "dnsPolicy": "ClusterFirst", + "nodeName": "minikube", + "hostNetwork": true, + "securityContext": {} + }, + "status": { + "phase": "Pending", + "conditions": [ + { + "type": "PodScheduled", + "status": "True", + "lastProbeTime": null, + "lastTransitionTime": "2017-01-16T13:01:17Z" + } + ] + } + } + ] +} diff --git a/probe/kubernetes/kubelet_test.go b/probe/kubernetes/kubelet_test.go new file mode 100644 index 000000000..5a1d645a3 --- /dev/null +++ b/probe/kubernetes/kubelet_test.go @@ -0,0 +1,73 @@ +package kubernetes_test + +import ( + "io/ioutil" + "net/http" + "net/http/httptest" + "testing" + + "github.com/weaveworks/scope/probe/kubernetes" +) + +const kubeletPodsJSONFile = "kubelet_pods.json" + +// obtained with jq .items[].metadata.uid < kubelet_pods.json +var expectedPodUIDs = []string{ + "af1b5325-d8cf-11e6-84fa-0800278a0c83", + "afeb8017-d8cf-11e6-84fa-0800278a0c83", + "b57a1ada-d8cf-11e6-84fa-0800278a0c83", + "00915ccb-dbd5-11e6-84fa-0800278a0c83", + "009a3d10-dbd5-11e6-84fa-0800278a0c83", + "fa8320c0-d8b0-11e6-828c-0800278a0c83", + "fa95ebae-d8b0-11e6-828c-0800278a0c83", + "af274a9e-d8cf-11e6-84fa-0800278a0c83", + "af628fd4-d8cf-11e6-84fa-0800278a0c83", + "af7f1d33-d8cf-11e6-84fa-0800278a0c83", + "b0104177-d8cf-11e6-84fa-0800278a0c83", + "b64d652b-d8cf-11e6-84fa-0800278a0c83", + "b687c058-d8cf-11e6-84fa-0800278a0c83", + "b0037e94-d8cf-11e6-84fa-0800278a0c83", + "b56298ba-d8cf-11e6-84fa-0800278a0c83", + "b613f0e9-d8cf-11e6-84fa-0800278a0c83", + "fa2eadd4-d8d1-11e6-84fa-0800278a0c83", + "af973584-d8cf-11e6-84fa-0800278a0c83", + "b079da0b-d8cf-11e6-84fa-0800278a0c83", + "b4e30a10-d8cf-11e6-84fa-0800278a0c83", + "b5025f49-d8cf-11e6-84fa-0800278a0c83", + "b52170e8-d8cf-11e6-84fa-0800278a0c83", + "b53e9d66-d8cf-11e6-84fa-0800278a0c83", + "b5c4c8c3-d8cf-11e6-84fa-0800278a0c83", + "014fb8f91f3d52450a942179a984bc15", +} + +func TestGetLocalPodUIDs(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/pods/" { + t.Fatalf("unexpected path: %s", r.URL.Path) + } + b, err := ioutil.ReadFile(kubeletPodsJSONFile) + if err != nil { + t.Fatalf("unexpected error reading json file: %v", err) + } + w.Write(b) + }, + )) + defer server.Close() + var savedKubeletURL string + savedKubeletURL, kubernetes.KubeletURL = kubernetes.KubeletURL, server.URL + defer func() { kubernetes.KubeletURL = savedKubeletURL }() + + uids, err := kubernetes.GetLocalPodUIDs() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if len(expectedPodUIDs) != len(uids) { + t.Errorf("nnexpected length in pod UIDs (%d): expected %d", len(uids), len(expectedPodUIDs)) + } + for _, expectedUID := range expectedPodUIDs { + if _, ok := uids[expectedUID]; !ok { + t.Errorf("uid not found: %s", expectedUID) + } + } +} diff --git a/probe/kubernetes/reporter.go b/probe/kubernetes/reporter.go index 44c7c564a..5891e6616 100644 --- a/probe/kubernetes/reporter.go +++ b/probe/kubernetes/reporter.go @@ -1,13 +1,11 @@ package kubernetes import ( - "io/ioutil" - "os" "strings" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/labels" + log "github.com/Sirupsen/logrus" "github.com/weaveworks/common/mtime" "github.com/weaveworks/scope/probe" "github.com/weaveworks/scope/probe/controls" @@ -314,27 +312,6 @@ func (r *Reporter) replicaSetTopology(probeID string, deployments []Deployment) return result, replicaSets, err } -// GetNodeName return the k8s node name for the current machine. -// It is exported for testing. -var GetNodeName = func(r *Reporter) (string, error) { - uuidBytes, err := ioutil.ReadFile("/sys/class/dmi/id/product_uuid") - if os.IsNotExist(err) { - uuidBytes, err = ioutil.ReadFile("/sys/hypervisor/uuid") - } - if err != nil { - return "", err - } - uuid := strings.Trim(string(uuidBytes), "\n") - nodeName := "" - err = r.client.WalkNodes(func(node *api.Node) error { - if node.Status.NodeInfo.SystemUUID == string(uuid) { - nodeName = node.ObjectMeta.Name - } - return nil - }) - return nodeName, err -} - type labelledChild interface { Labels() map[string]string AddParent(string, string) @@ -387,13 +364,24 @@ func (r *Reporter) podTopology(services []Service, replicaSets []ReplicaSet) (re )) } - thisNodeName, err := GetNodeName(r) - if err != nil { - return pods, err + // Obtain the local pods from kubelet since we only want to report those + // for performance reasons. + // + // In theory a simpler approach would be to obtain the current NodeName + // and filter local pods based on that. However that's hard since + // 1. reconstructing the NodeName requires cloud provider credentials + // 2. inferring the NodeName out of the hostname or system uuid is unreliable + // (uuids and hostnames can be duplicated across the cluster). + localPodUIDs, errUIDs := GetLocalPodUIDs() + if errUIDs != nil { + log.Warnf("Cannot obtain local pods, reporting all (which may impact performance): %v", errUIDs) } - err = r.client.WalkPods(func(p Pod) error { - if p.NodeName() != thisNodeName { - return nil + err := r.client.WalkPods(func(p Pod) error { + // filter out non-local pods + if errUIDs != nil { + if _, ok := localPodUIDs[p.UID()]; !ok { + return nil + } } for _, selector := range selectors { selector(p) diff --git a/probe/kubernetes/reporter_test.go b/probe/kubernetes/reporter_test.go index 5cd6180ff..7bf1e2852 100644 --- a/probe/kubernetes/reporter_test.go +++ b/probe/kubernetes/reporter_test.go @@ -180,10 +180,14 @@ func (c mockPipeClient) PipeClose(appID, id string) error { } func TestReporter(t *testing.T) { - oldGetNodeName := kubernetes.GetNodeName - defer func() { kubernetes.GetNodeName = oldGetNodeName }() - kubernetes.GetNodeName = func(*kubernetes.Reporter) (string, error) { - return nodeName, nil + oldGetNodeName := kubernetes.GetLocalPodUIDs + defer func() { kubernetes.GetLocalPodUIDs = oldGetNodeName }() + kubernetes.GetLocalPodUIDs = func() (map[string]struct{}, error) { + uids := map[string]struct{}{ + pod1UID: {}, + pod2UID: {}, + } + return uids, nil } pod1ID := report.MakePodNodeID(pod1UID) @@ -271,10 +275,10 @@ type callbackReadCloser struct { func (c *callbackReadCloser) Close() error { return c.close() } func TestReporterGetLogs(t *testing.T) { - oldGetNodeName := kubernetes.GetNodeName - defer func() { kubernetes.GetNodeName = oldGetNodeName }() - kubernetes.GetNodeName = func(*kubernetes.Reporter) (string, error) { - return nodeName, nil + oldGetNodeName := kubernetes.GetLocalPodUIDs + defer func() { kubernetes.GetLocalPodUIDs = oldGetNodeName }() + kubernetes.GetLocalPodUIDs = func() (map[string]struct{}, error) { + return map[string]struct{}{}, nil } client := newMockClient()