bookingcom / shipper

Kubernetes native multi-cluster canary or blue-green rollouts using Helm
Apache License 2.0
734 stars 38 forks source link

Shipperctl commands to cleanup decommiossioned clusters from releases #368

Closed hihilla closed 3 years ago

hihilla commented 3 years ago

344 #353

Different output of this command:

$ kubectl  get rel --sort-by {.metadata.creationTimestamp}  --all-namespaces
NAMESPACE   NAME                       AGE     ACHIEVED STEP   CLUSTERS              WAITING   REASON
default     super-server-bacf2183-0    4h30m   full on         kind-app
default2    super-server2-bacf2183-0   4h30m   full on         kind-app
default3    super-server3-bacf2183-0   4h30m   full on         kind-app
default     super-server-dc5bfc5a-0    4h10m   full on         kind-app-d
default2    super-server2-dc5bfc5a-0   4h9m    full on         kind-app-d
default3    super-server3-dc5bfc5a-0   4h9m    full on         kind-app
default     super-server-bacf2183-1    3h50m   full on         kind-app,kind-app-d
default2    super-server2-bacf2183-1   3h50m   full on         kind-app,kind-app-d
default3    super-server3-bacf2183-1   3h50m   full on         kind-app,kind-app-d
default     super-server-a24bf7f2-0    152m    full on         kind-app,kind-app-d
default3    super-server3-a24bf7f2-0   152m    full on         kind-app,kind-app-d
default2    super-server2-a24bf7f2-0   152m    full on         kind-app,kind-app-d
default     super-server-8de83afb-0    149m    full on         kind-app-d
default2    super-server2-8de83afb-0   149m    full on         kind-app-d
default3    super-server3-8de83afb-0   149m    full on         kind-app
default     super-server-dc5bfc5a-1    133m    full on         kind-app-d
default2    super-server2-dc5bfc5a-1   133m    full on         kind-app-d
default3    super-server3-dc5bfc5a-1   133m    full on         kind-app

$ shipperctl clean decommissioned-clusters -h
removing decommissioned clusters from annotations of releases that are scheduled on decommissioned clusters and are not contenders or incumbents.

Usage:
  shipperctl clean decommissioned-clusters [flags]

Flags:
  -h, --help   help for decommissioned-clusters

Global Flags:
      --decommissionedClusters strings      List of decommissioned clusters. (Required)
      --dryrun                              If true, only prints the objects that will be modified/deleted
      --kubeconfig string                   The path to the Kubernetes configuration file (default "~/.kube/config")
      --management-cluster-context string   The name of the context to use to communicate with the management cluster. defaults to the current one

$ shipperctl clean decommissioned-clusters --decommissionedClusters="kind-app-d"
About to edit 8 releases
Would you like to see the releases? (This will not edit anything) [y/n]: y
NAMESPACE  NAME                      OLD CLUSTER ANNOTATIONS  NEW CLUSTER ANNOTATIONS
default    super-server-a24bf7f2-0   kind-app,kind-app-d      kind-app
default    super-server-bacf2183-1   kind-app,kind-app-d      kind-app
default    super-server-dc5bfc5a-0   kind-app-d
default2   super-server2-a24bf7f2-0  kind-app,kind-app-d      kind-app
default2   super-server2-bacf2183-1  kind-app,kind-app-d      kind-app
default2   super-server2-dc5bfc5a-0  kind-app-d
default3   super-server3-a24bf7f2-0  kind-app,kind-app-d      kind-app
default3   super-server3-bacf2183-1  kind-app,kind-app-d      kind-app
This will update 8 releases. Are you sure? [y/n]: n

$ shipperctl list release -h
list Shipper *releases* that are scheduled *only* on given clusters

Usage:
  shipperctl list release [flags]

Flags:
  -h, --help   help for release

Global Flags:
      --clusters strings                    List of comma separated clusters to list releases that are scheduled *only* on those clusters. If empty, will list without filtering
      --kubeconfig string                   The path to the Kubernetes configuration file (default "~/.kube/config")
      --management-cluster-context string   The name of the context to use to communicate with the management cluster. defaults to the current one
  -o, --output string                       Output format. One of: json|yaml. (Optional) defaults to verbose

$ shipperctl list release
NAMESPACE  NAME  CLUSTERS ANNOTATION

$ list release --clusters kind-app-d
NAMESPACE  NAME                      CLUSTERS ANNOTATION
default    super-server-8de83afb-0   kind-app-d
default    super-server-dc5bfc5a-0   kind-app-d
default    super-server-dc5bfc5a-1   kind-app-d
default2   super-server2-8de83afb-0  kind-app-d
default2   super-server2-dc5bfc5a-0  kind-app-d
default2   super-server2-dc5bfc5a-1  kind-app-d

$ shipperctl list contender -h
list Shipper *contenders* that are scheduled *only* on given clusters

Usage:
  shipperctl list contender [flags]

Flags:
  -h, --help   help for contender

Global Flags:
      --clusters strings                    List of comma separated clusters to list releases that are scheduled *only* on those clusters. If empty, will list without filtering
      --kubeconfig string                   The path to the Kubernetes configuration file (default "~/.kube/config")
      --management-cluster-context string   The name of the context to use to communicate with the management cluster. defaults to the current one
  -o, --output string                       Output format. One of: json|yaml. (Optional) defaults to verbose

$ shipperctl list contender --clusters kind-app-d
NAMESPACE  NAME                      CLUSTERS ANNOTATION
default    super-server-dc5bfc5a-1   kind-app-d
default2   super-server2-dc5bfc5a-1  kind-app-d

$ shipperctl list contender --clusters kind-app-d -o json
[
    {
        "namespace": "default",
        "name": "super-server-dc5bfc5a-1",
        "clusters": "kind-app-d"
    },
    {
        "namespace": "default2",
        "name": "super-server2-dc5bfc5a-1",
        "clusters": "kind-app-d"
    }
]

$ shipperctl list contender --clusters kind-app-d -o yaml
- clusters: kind-app-d
  name: super-server-dc5bfc5a-1
  namespace: default
- clusters: kind-app-d
  name: super-server2-dc5bfc5a-1
  namespace: default2