k3s/hack
Kubernetes Submit Queue 5e546893f7
Merge pull request #66623 from deads2k/gc-01-graph
Automatic merge from submit-queue (batch tested with PRs 66623, 66718). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

expose GC graph via debug handler

Many times when debugging GC problems, it's important to understand the state of the GC graph at a given point in time.  This pull adds the ability to dump that graph in DOT format for later consumption.  It does this by exposing an additional debug handler and allowing any controller init function to produce such a handler that is included under debug.

Sample full output
```
curl http://localhost:10252/debug/controllers/garbagecollector/graph
digraph full {
  // Node definitions.
  0 [
    label="uid=8581a030-9043-11e8-ad4a-54e1ad486dd3
namespace=kube-system
Pod.v1/kube-dns-7b479ccbc6-qz468
"
    group=""
    version="v1"
    kind="Pod"
    namespace="kube-system"
    name="kube-dns-7b479ccbc6-qz468"
    uid="8581a030-9043-11e8-ad4a-54e1ad486dd3"
    missing="false"
    beingDeleted="false"
    deletingDependents="false"
    virtual="false"
  ];
  1 [
    label="uid=822052fc-9043-11e8-ad4a-54e1ad486dd3
namespace=kube-system
Deployment.v1.apps/kube-dns
"
    group="apps"
    version="v1"
    kind="Deployment"
    namespace="kube-system"
    name="kube-dns"
    uid="822052fc-9043-11e8-ad4a-54e1ad486dd3"
    missing="false"
    beingDeleted="false"
    deletingDependents="false"
    virtual="false"
  ];
  2 [
    label="uid=857bd8ac-9043-11e8-ad4a-54e1ad486dd3
namespace=kube-system
ReplicaSet.v1.apps/kube-dns-7b479ccbc6
"
    group="apps"
    version="v1"
    kind="ReplicaSet"
    namespace="kube-system"
    name="kube-dns-7b479ccbc6"
    uid="857bd8ac-9043-11e8-ad4a-54e1ad486dd3"
    missing="false"
    beingDeleted="false"
    deletingDependents="false"
    virtual="false"
  ];

  // Edge definitions.
  0 -> 2;
  2 -> 1;
}
```

You can also select via UID and have all transitive dependencies output:
```
curl http://localhost:10252/debug/controllers/garbagecollector/graph?uid=8581a030-9043-11e8-ad4a-54e1ad486dd3
digraph full {
  // Node definitions.
  0 [
    label="uid=822052fc-9043-11e8-ad4a-54e1ad486dd3
namespace=kube-system
Deployment.v1.apps/kube-dns
"
    group="apps"
    version="v1"
    kind="Deployment"
    namespace="kube-system"
    name="kube-dns"
    uid="822052fc-9043-11e8-ad4a-54e1ad486dd3"
    missing="false"
    beingDeleted="false"
    deletingDependents="false"
    virtual="false"
  ];
  1 [
    label="uid=8581a030-9043-11e8-ad4a-54e1ad486dd3
namespace=kube-system
Pod.v1/kube-dns-7b479ccbc6-qz468
"
    group=""
    version="v1"
    kind="Pod"
    namespace="kube-system"
    name="kube-dns-7b479ccbc6-qz468"
    uid="8581a030-9043-11e8-ad4a-54e1ad486dd3"
    missing="false"
    beingDeleted="false"
    deletingDependents="false"
    virtual="false"
  ];
  2 [
    label="uid=857bd8ac-9043-11e8-ad4a-54e1ad486dd3
namespace=kube-system
ReplicaSet.v1.apps/kube-dns-7b479ccbc6
"
    group="apps"
    version="v1"
    kind="ReplicaSet"
    namespace="kube-system"
    name="kube-dns-7b479ccbc6"
    uid="857bd8ac-9043-11e8-ad4a-54e1ad486dd3"
    missing="false"
    beingDeleted="false"
    deletingDependents="false"
    virtual="false"
  ];

  // Edge definitions.
  1 -> 2;
  2 -> 0;
}
```

And with some sample rendering:
```
curl http://localhost:10252/debug/controllers/garbagecollector/graph  | dot -T svg -o project.svg
```

produces

![gc](https://user-images.githubusercontent.com/8225098/43223895-8e33c126-9022-11e8-8ad9-6b2f986fd974.png)


@kubernetes/sig-api-machinery-pr-reviews 
/assign @caesarxuchao @liggitt 

```release-note
NONE
```
2018-07-31 08:05:03 -07:00
..
boilerplate Pick the first extension matched 2018-06-28 04:50:19 -03:00
e2e-internal Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
gen-swagger-doc Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
jenkins Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
lib Merge pull request #66690 from spiffxp/verify-no-libressl 2018-07-30 20:01:58 -07:00
make-rules Merge pull request #66061 from cofyc/prefer_using_process_environments 2018-07-20 18:51:09 -07:00
testdata Move api rules list under api-approvers-owned package 2018-07-20 10:16:08 -04:00
verify-flags Add multi-vc configuration for e2e tests 2018-01-18 15:29:27 -08:00
.golint_failures Fix kubeadm checks import error 2018-07-13 14:27:46 +08:00
.spelling_failures add spelling checking script 2018-02-23 09:33:14 +08:00
BUILD Merge pull request #62151 from thockin/build-cleanup-with-go-1-10 2018-04-23 22:45:24 -07:00
OWNERS Volunteer for local-up-cluster related files 2018-04-13 08:21:28 -04:00
autogenerated_placeholder.txt
benchmark-go.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
build-cross.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
build-go.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
build-ui.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
cherry_pick_pull.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
dev-build-and-push.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
dev-build-and-up.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
dev-push-hyperkube.sh
e2e-node-test.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
e2e.go translate hack/e2e.go -v to --verbose-commands 2018-03-07 11:27:56 -08:00
e2e_test.go translate hack/e2e.go -v to --verbose-commands 2018-03-07 11:27:56 -08:00
generate-bindata.sh Merge pull request #62657 from matthyx/master 2018-05-02 19:44:32 -07:00
generate-docs.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
get-build.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
ginkgo-e2e.sh Merge pull request #62328 from serathius/monitoring-default-none 2018-05-16 07:07:05 -07:00
godep-restore.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
godep-save.sh Add kube-openapi cmd to required binaries 2018-07-10 17:51:31 -07:00
grab-profiles.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
import-restrictions.yaml fix verify about import error 2018-07-28 07:54:16 +08:00
install-etcd.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
list-feature-tests.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
local-up-cluster.sh Merge pull request #66739 from islinwb/ipvs_mods_check 2018-07-30 17:10:07 -07:00
print-workspace-status.sh bazel: support using SOURCE_DATE_EPOCH to override date 2018-02-08 21:12:03 -08:00
run-in-gopath.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
test-go.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
test-integration.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
test-update-storage-objects.sh Merge pull request #62657 from matthyx/master 2018-05-02 19:44:32 -07:00
update-all.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-api-reference-docs.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-bazel.sh Fix run-in-gopath issue with symlink'd gopath 2018-06-25 14:25:55 -07:00
update-cloudprovider-gce.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-codegen.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-device-plugin-dockerized.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-device-plugin.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-docs.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-kms-dockerized.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-kms.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-kubelet-plugin-registration-dockerized.sh Add probe based mechanism for kubelet plugin discovery 2018-05-29 12:00:37 -04:00
update-generated-kubelet-plugin-registration.sh Add probe based mechanism for kubelet plugin discovery 2018-05-29 12:00:37 -04:00
update-generated-protobuf-dockerized.sh Add coordination API group with Lease type 2018-06-27 13:30:13 +02:00
update-generated-protobuf.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-runtime-dockerized.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-runtime.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-generated-swagger-docs.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-godep-licenses.sh fix godep licenses for new root 2018-07-26 11:56:04 -04:00
update-gofmt.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-openapi-spec.sh remove unused variable in openapi-spec script 2018-06-29 13:45:17 +08:00
update-staging-godeps-dockerized.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-staging-godeps.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-swagger-spec.sh Print error when APIServer fails to start 2018-06-27 09:59:41 -07:00
update-translations.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
update-workspace-mirror.sh workspace mirror: add trailing newline to urls list 2018-05-07 16:52:20 -07:00
update_owners.py remove some not used imports from python codes 2018-03-07 17:43:47 +08:00
verify-all.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-api-groups.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-api-reference-docs.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-bazel.sh Fully resolve tmpdir in verify scripts, since it might be a symlink on macOS 2018-04-06 16:37:19 -07:00
verify-boilerplate.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-cli-conventions.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-cloudprovider-gce.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-codegen.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-description.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-flags-underscore.py remove some not used imports from python codes 2018-03-07 17:43:47 +08:00
verify-generated-device-plugin.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-generated-docs.sh verify-generated-docs: Use exit code rather than comparison to empty string 2018-07-11 21:26:40 -07:00
verify-generated-files-remake.sh Use kube-openapi cmd in Make rules 2018-07-10 17:53:24 -07:00
verify-generated-files.sh verify-generated-files: ensure git tree is clean 2018-07-09 13:50:09 -07:00
verify-generated-kms.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-generated-kubelet-plugin-registration.sh Add probe based mechanism for kubelet plugin discovery 2018-05-29 12:00:37 -04:00
verify-generated-protobuf.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-generated-runtime.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-generated-swagger-docs.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-godep-licenses.sh Route verify-godep-licenses output to stderr 2018-02-07 21:45:02 -08:00
verify-godeps.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-gofmt.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-golint.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-govet.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-import-boss.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-imports.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-linkcheck.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-no-vendor-cycles.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-openapi-spec.sh remove unused variable in openapi-spec script 2018-06-29 13:45:17 +08:00
verify-pkg-names.sh hack/verify-pkg-names.sh: remove k8s.io/metrics dirs 2018-07-02 10:44:18 +02:00
verify-readonly-packages.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-spelling.sh Update vendored tool go install location to use GOPATH 2018-06-25 15:45:14 -07:00
verify-staging-godeps.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-swagger-spec.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-symbols.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-test-images.sh Update all script to use /usr/bin/env bash in shebang 2018-04-19 13:20:13 +02:00
verify-test-owners.sh
verify-typecheck.sh Merge pull request #62657 from matthyx/master 2018-05-02 19:44:32 -07:00