• Kubernetes Submit Queue's avatar
    Merge pull request #66623 from deads2k/gc-01-graph · 5e546893
    Kubernetes Submit Queue authored
    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
    ```
    5e546893
Name
Last commit
Last update
..
Godeps.json Loading commit data...
LICENSES Loading commit data...
OWNERS Loading commit data...
Readme Loading commit data...