bookingcom / shipper

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

Release states and strategy conditions not updated when the Cluster Client Store can't provide a client #325

Open parhamdoustdar opened 4 years ago

parhamdoustdar commented 4 years ago

When Shipper can't connect to an app cluster, the strategy field of the release doesn't get updated at all. To reproduce, create a release, wait for it to reach step 0, change the apiMaster of the Cluster object so that it's invalid, and patch the targetStep to 1. Then, you should see something like this:

$ kubectl get rel -o json | jq '.items[0].status.conditions'
[
  {
    "lastTransitionTime": "2020-06-04T09:44:39Z",
    "status": "False",
    "type": "Blocked"
  },
  {
    "lastTransitionTime": "2020-06-04T09:44:39Z",
    "message": "kind-app",
    "reason": "ClustersChosen",
    "status": "True",
    "type": "ClustersChosen"
  },
  {
    "lastTransitionTime": "2020-06-04T12:08:05Z",
    "message": "cluster \"kind-app\" not ready for use yet; cluster client is being initialized",
    "reason": "StrategyExecutionFailed",
    "status": "False",
    "type": "StrategyExecuted"
  }
]

Now, if you look at the strategy field, you will see no trace of this error:

$ kubectl get rel -o json | jq '.items[0].status.strategy'
{
  "clusters": [
    {
      "conditions": [
        {
          "lastTransitionTime": "2020-06-04T11:47:33Z",
          "message": "",
          "reason": "",
          "status": "True",
          "step": 0,
          "type": "ContenderAchievedCapacity"
        },
        {
          "lastTransitionTime": "2020-06-04T11:47:33Z",
          "message": "",
          "reason": "",
          "status": "True",
          "step": 0,
          "type": "ContenderAchievedInstallation"
        },
        {
          "lastTransitionTime": "2020-06-04T11:47:33Z",
          "message": "",
          "reason": "",
          "status": "True",
          "step": 0,
          "type": "ContenderAchievedTraffic"
        }
      ],
      "name": "kind-app"
    }
  ],
  "state": {
    "waitingForCapacity": "False",
    "waitingForCommand": "True",
    "waitingForInstallation": "False",
    "waitingForTraffic": "False"
  }
}

Note that: