Capacity Target

A CapacityTarget is the interface used by the Strategy Controller to change the target number of replicas for an application in a set of clusters. It is acted upon by the Capacity Controller.

The status resource includes status per-cluster so that the Strategy Controller can determine when the Capacity Controller is complete and it can move to the traffic step.

Example

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
apiVersion: shipper.booking.com/v1alpha1
kind: CapacityTarget
metadata:
  name: reviewsapi-deadbeef-0
  namespace: reviewsapi
  annotations:
    "shipper.booking.com/v1/finalReplicaCount": 10
  labels:
    release: reviewsapi-4
spec:
  clusters:
  - name: kube-us-east1-a
    percent: 10
  - name: kube-eu-west2-b
    percent: 10
status:
  clusters:
  - name: kube-us-east1-a
    availableReplicas: 1
    achievedPercent: 10
  - name: kube-eu-west2-b
    availableReplicas: 1
    achievedPercent: 10
    sadPods:
    - name: reviewsapi-deadbeef-0-cafebabe
      phase: Terminated
      containers:
      - name: app
        status: CrashLoopBackOff
      condition:
        type: Ready
        status: False
        reason: ContainersNotReady
        message: "unready containers [app]"

Spec

.spec.clusters

clusters is a list of clusters the associated Release object is present in. Each item in the list has a name, which should map to a Cluster object, and a percent. percent declares how much capacity the Release should have in this cluster relative to the final replica count. For example, if the final replica count is 10 and the percent is 50, the Deployment object for this Release will be patched to have 5 pods.

1
2
3
4
5
6
    release: reviewsapi-4
spec:
  clusters:
  - name: kube-us-east1-a
    percent: 10
  - name: kube-eu-west2-b

Status

.status.clusters

.status.clusters is a list of objects representing the capacity status of all clusters where the associated Release objects must be installed.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
    percent: 10
status:
  clusters:
  - name: kube-us-east1-a
    availableReplicas: 1
    achievedPercent: 10
  - name: kube-eu-west2-b
    availableReplicas: 1
    achievedPercent: 10
    sadPods:
    - name: reviewsapi-deadbeef-0-cafebabe
      phase: Terminated
      containers:
      - name: app
        status: CrashLoopBackOff
      condition:
        type: Ready
        status: False
        reason: ContainersNotReady
        message: "unready containers [app]"

The following table displays the keys a cluster status entry should have:

Key Description
name The Application Cluster name. For example, kube-us-east1-a.
availableReplicas The number of pods that have successfully started up
achievedPercent What percentage of the final replica count does availableReplicas represent.
sadPods Pod Statuses for up to 5 Pods which are not yet Ready.
conditions A list of all conditions observed for this particular Application Cluster.

.status.clusters.conditions

The following table displays the different conditions statuses and reasons reported in the CapacityTarget object for the Operational condition type:

Type Status Reason Description
Operational True N/A Cluster is reachable, and seems to be operational.
Operational False ServerError Some error has happened Shipper couldn’t classify. Details can be found in the .message field.

The following table displays the different conditions statuses and reasons reported in the CapacityTarget object for the Ready condition type:

Type Status Reason Description
Ready True N/A The correct number of pods are running and all of them are Ready.
Ready False WrongPodCount This cluster has not yet achieved the desired number of pods.
Ready False PodsNotReady The cluster has the desired number of pods, but not all of them are Ready.
Ready False MissingDeployment Shipper could not find the Deployment object that it expects to be able to adjust capacity on. See message for more details.