apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.0 name: rollouts.rollouts.kruise.io spec: conversion: strategy: Webhook webhook: clientConfig: service: name: kruise-rollout-webhook-service namespace: {{ .Values.installation.namespace }} path: /convert conversionReviewVersions: - v1beta1 group: rollouts.kruise.io names: kind: Rollout listKind: RolloutList plural: rollouts singular: rollout scope: Namespaced versions: - additionalPrinterColumns: - description: The rollout status phase jsonPath: .status.phase name: STATUS type: string - description: The rollout canary status step jsonPath: .status.canaryStatus.currentStepIndex name: CANARY_STEP type: integer - description: The rollout canary status step state jsonPath: .status.canaryStatus.currentStepState name: CANARY_STATE type: string - description: The rollout canary status message jsonPath: .status.message name: MESSAGE type: string - jsonPath: .metadata.creationTimestamp name: AGE type: date name: v1alpha1 schema: openAPIV3Schema: description: Rollout is the Schema for the rollouts API properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: description: RolloutSpec defines the desired state of Rollout properties: disabled: default: false description: if a rollout disabled, then the rollout would not watch changes of workload type: boolean objectRef: description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster Important: Run "make" to regenerate code after modifying this file ObjectRef indicates workload' properties: workloadRef: description: WorkloadRef contains enough information to let you identify a workload for Rollout Batch release of the bypass properties: apiVersion: description: API Version of the referent type: string kind: description: Kind of the referent type: string name: description: Name of the referent type: string required: - apiVersion - kind - name type: object type: object rolloutID: description: DeprecatedRolloutID is the deprecated field. It is recommended that configure RolloutId in workload.annotations[rollouts.kruise.io/rollout-id]. RolloutID should be changed before each workload revision publication. It is to distinguish consecutive multiple workload publications and rollout progress. type: string strategy: description: rollout strategy properties: canary: description: CanaryStrategy defines parameters for a Replica Based Canary properties: disableGenerateCanaryService: description: canary service will not be generated if DisableGenerateCanaryService is true type: boolean failureThreshold: anyOf: - type: integer - type: string description: FailureThreshold indicates how many failed pods can be tolerated in all upgraded pods. Only when FailureThreshold are satisfied, Rollout can enter ready state. If FailureThreshold is nil, Rollout will use the MaxUnavailable of workload as its FailureThreshold. Defaults to nil. x-kubernetes-int-or-string: true patchPodTemplateMetadata: description: PatchPodTemplateMetadata indicates patch configuration(e.g. labels, annotations) to the canary deployment podTemplateSpec.metadata only support for canary deployment properties: annotations: additionalProperties: type: string description: annotations type: object labels: additionalProperties: type: string description: labels type: object type: object steps: description: Steps define the order of phases to execute release in batches(20%, 40%, 60%, 80%, 100%) items: description: CanaryStep defines a step of a canary workload. properties: matches: description: Matches define conditions used for matching the incoming HTTP requests to canary service. Each match is independent, i.e. this rule will be matched if **any** one of the matches is satisfied. If Gateway API, current only support one match. And cannot support both weight and matches, if both are configured, then matches takes precedence. items: properties: headers: description: Headers specifies HTTP request header matchers. Multiple match values are ANDed together, meaning, a request must match all the specified headers to select the route. items: description: HTTPHeaderMatch describes how to select a HTTP route by matching HTTP request headers. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, only the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent. \n When a header is repeated in an HTTP request, it is implementation-specific behavior as to how this is represented. Generally, proxies should follow the guidance from the RFC: https://www.rfc-editor.org/rfc/rfc7230.html#section-3.2.2 regarding processing a repeated header, with special handling for \"Set-Cookie\"." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string type: default: Exact description: "Type specifies how to match against the value of the header. \n Support: Core (Exact) \n Support: Implementation-specific (RegularExpression) \n Since RegularExpression HeaderMatchType has implementation-specific conformance, implementations can support POSIX, PCRE or any other dialects of regular expressions. Please read the implementation's documentation to determine the supported dialect." enum: - Exact - RegularExpression type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array type: object type: array pause: description: Pause defines a pause stage for a rollout, manual or auto properties: duration: description: Duration the amount of time to wait before moving to the next step. format: int32 type: integer type: object replicas: anyOf: - type: integer - type: string description: 'Replicas is the number of expected canary pods in this batch it can be an absolute number (ex: 5) or a percentage of total pods.' x-kubernetes-int-or-string: true requestHeaderModifier: description: "Set overwrites the request with the given header (name, value) before the action. \n Input: GET /foo HTTP/1.1 my-header: foo \n requestHeaderModifier: set: - name: \"my-header\" value: \"bar\" \n Output: GET /foo HTTP/1.1 my-header: bar" properties: add: description: "Add adds the given header(s) (name, value) to the request before the action. It appends to any existing values associated with the header name. \n Input: GET /foo HTTP/1.1 my-header: foo \n Config: add: - name: \"my-header\" value: \"bar,baz\" \n Output: GET /foo HTTP/1.1 my-header: foo,bar,baz" items: description: HTTPHeader represents an HTTP Header name and value as defined by RFC 7230. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map remove: description: "Remove the given header(s) from the HTTP request before the action. The value of Remove is a list of HTTP header names. Note that the header names are case-insensitive (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). \n Input: GET /foo HTTP/1.1 my-header1: foo my-header2: bar my-header3: baz \n Config: remove: [\"my-header1\", \"my-header3\"] \n Output: GET /foo HTTP/1.1 my-header2: bar" items: type: string maxItems: 16 type: array set: description: "Set overwrites the request with the given header (name, value) before the action. \n Input: GET /foo HTTP/1.1 my-header: foo \n Config: set: - name: \"my-header\" value: \"bar\" \n Output: GET /foo HTTP/1.1 my-header: bar" items: description: HTTPHeader represents an HTTP Header name and value as defined by RFC 7230. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map type: object weight: description: Weight indicate how many percentage of traffic the canary pods should receive format: int32 type: integer type: object type: array trafficRoutings: description: TrafficRoutings hosts all the supported service meshes supported to enable more fine-grained traffic routing and current only support one TrafficRouting items: description: TrafficRoutingRef hosts all the different configuration for supported service meshes to enable more fine-grained traffic routing properties: customNetworkRefs: description: CustomNetworkRefs hold a list of custom providers to route traffic items: properties: apiVersion: type: string kind: type: string name: type: string required: - apiVersion - kind - name type: object type: array gateway: description: Gateway holds Gateway specific configuration to route traffic Gateway configuration only supports >= v0.4.0 (v1alpha2). properties: httpRouteName: description: HTTPRouteName refers to the name of an `HTTPRoute` resource in the same namespace as the `Rollout` type: string type: object gracePeriodSeconds: default: 3 description: Optional duration in seconds the traffic provider(e.g. nginx ingress controller) consumes the service, ingress configuration changes gracefully. format: int32 type: integer ingress: description: Ingress holds Ingress specific configuration to route traffic, e.g. Nginx, Alb. properties: classType: description: ClassType refers to the type of `Ingress`. current support nginx, aliyun-alb. default is nginx. type: string name: description: Name refers to the name of an `Ingress` resource in the same namespace as the `Rollout` type: string required: - name type: object service: description: Service holds the name of a service which selects pods with stable version and don't select any pods with canary version. type: string required: - service type: object type: array type: object paused: description: Paused indicates that the Rollout is paused. Default value is false type: boolean type: object required: - objectRef - strategy type: object status: description: RolloutStatus defines the observed state of Rollout properties: canaryStatus: description: Canary describes the state of the canary rollout properties: canaryReadyReplicas: description: CanaryReadyReplicas the numbers of ready canary revision pods format: int32 type: integer canaryReplicas: description: CanaryReplicas the numbers of canary revision pods format: int32 type: integer canaryRevision: description: CanaryRevision is calculated by rollout based on podTemplateHash, and the internal logic flow uses It may be different from rs podTemplateHash in different k8s versions, so it cannot be used as service selector label type: string currentStepIndex: format: int32 type: integer currentStepState: type: string finalisingStep: type: string lastUpdateTime: format: date-time type: string message: type: string nextStepIndex: description: NextStepIndex defines the next step of the rollout is on. In normal case, NextStepIndex is equal to CurrentStepIndex + 1 If the current step is the last step, NextStepIndex is equal to -1 Before the release, NextStepIndex is also equal to -1 0 is not used and won't appear in any case It is allowed to patch NextStepIndex by design, e.g. if CurrentStepIndex is 2, user can patch NextStepIndex to 3 (if exists) to achieve batch jump, or patch NextStepIndex to 1 to implement a re-execution of step 1 Patching it with a non-positive value is meaningless, which will be corrected in the next reconciliation achieve batch jump, or patch NextStepIndex to 1 to implement a re-execution of step 1 format: int32 type: integer observedRolloutID: description: ObservedRolloutID will record the newest spec.RolloutID if status.canaryRevision equals to workload.updateRevision type: string observedWorkloadGeneration: description: observedWorkloadGeneration is the most recent generation observed for this Rollout ref workload generation. format: int64 type: integer podTemplateHash: description: pod template hash is used as service selector label type: string rolloutHash: description: RolloutHash from rollout.spec object type: string stableRevision: description: StableRevision indicates the revision of stable pods type: string required: - canaryReadyReplicas - canaryReplicas - canaryRevision - currentStepState - finalisingStep - nextStepIndex - podTemplateHash type: object conditions: description: Conditions a list of conditions a rollout can have. items: description: RolloutCondition describes the state of a rollout at a certain point. properties: lastTransitionTime: description: Last time the condition transitioned from one status to another. format: date-time type: string lastUpdateTime: description: The last time this condition was updated. format: date-time type: string message: description: A human readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. type: string status: description: Phase of the condition, one of True, False, Unknown. type: string type: description: Type of rollout condition. type: string required: - message - reason - status - type type: object type: array message: description: Message provides details on why the rollout is in its current phase type: string observedGeneration: description: observedGeneration is the most recent generation observed for this Rollout. format: int64 type: integer phase: description: Phase is the rollout phase. type: string type: object type: object served: true storage: false subresources: status: {} - additionalPrinterColumns: - description: The rollout status phase jsonPath: .status.phase name: STATUS type: string - description: The rollout canary status step jsonPath: .status.currentStepIndex name: CANARY_STEP type: integer - description: The rollout canary status step state jsonPath: .status.currentStepState name: CANARY_STATE type: string - description: The rollout canary status message jsonPath: .status.message name: MESSAGE type: string - jsonPath: .metadata.creationTimestamp name: AGE type: date name: v1beta1 schema: openAPIV3Schema: description: Rollout is the Schema for the rollouts API properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' type: string kind: description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' type: string metadata: type: object spec: description: RolloutSpec defines the desired state of Rollout properties: disabled: default: false description: if a rollout disabled, then the rollout would not watch changes of workload type: boolean strategy: description: rollout strategy properties: blueGreen: description: BlueGreenStrategy defines parameters for Blue Green Release properties: disableGenerateCanaryService: description: canary service will not be generated if DisableGenerateCanaryService is true type: boolean failureThreshold: anyOf: - type: integer - type: string description: FailureThreshold indicates how many failed pods can be tolerated in all upgraded pods. Only when FailureThreshold are satisfied, Rollout can enter ready state. If FailureThreshold is nil, Rollout will use the MaxUnavailable of workload as its FailureThreshold. Defaults to nil. x-kubernetes-int-or-string: true steps: description: Steps define the order of phases to execute release in batches(20%, 40%, 60%, 80%, 100%) items: description: CanaryStep defines a step of a canary workload. properties: matches: description: "Matches define conditions used for matching incoming HTTP requests to the canary service. Each match is independent, i.e. this rule will be matched as long as **any** one of the matches is satisfied. \n It cannot support Traffic (weight-based routing) and Matches simultaneously, if both are configured. In such cases, Matches takes precedence." items: properties: headers: description: Headers specifies HTTP request header matchers. Multiple match values are ANDed together, meaning, a request must match all the specified headers to select the route. items: description: HTTPHeaderMatch describes how to select a HTTP route by matching HTTP request headers. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, only the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent. \n When a header is repeated in an HTTP request, it is implementation-specific behavior as to how this is represented. Generally, proxies should follow the guidance from the RFC: https://www.rfc-editor.org/rfc/rfc7230.html#section-3.2.2 regarding processing a repeated header, with special handling for \"Set-Cookie\"." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string type: default: Exact description: "Type specifies how to match against the value of the header. \n Support: Core (Exact) \n Support: Implementation-specific (RegularExpression) \n Since RegularExpression HeaderMatchType has implementation-specific conformance, implementations can support POSIX, PCRE or any other dialects of regular expressions. Please read the implementation's documentation to determine the supported dialect." enum: - Exact - RegularExpression type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map path: description: 'Path specifies a HTTP request path matcher. Supported list: - Istio: https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPMatchRequest - GatewayAPI: If path is defined, the whole HttpRouteMatch will be used as a standalone matcher' properties: type: default: PathPrefix description: "Type specifies how to match against the path Value. \n Support: Core (Exact, PathPrefix) \n Support: Implementation-specific (RegularExpression)" enum: - Exact - PathPrefix - RegularExpression type: string value: default: / description: Value of the HTTP path to match against. maxLength: 1024 type: string type: object queryParams: description: 'QueryParams specifies HTTP query parameter matchers. Multiple match values are ANDed together, meaning, a request must match all the specified query parameters to select the route. Supported list: - Istio: https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPMatchRequest - MSE Ingress: https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/annotations-supported-by-mse-ingress-gateways-1 Header/Cookie > QueryParams - Gateway API' items: description: HTTPQueryParamMatch describes how to select a HTTP route by matching HTTP query parameters. properties: name: description: "Name is the name of the HTTP query param to be matched. This must be an exact string match. (See https://tools.ietf.org/html/rfc7230#section-2.7.3). \n If multiple entries specify equivalent query param names, only the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent query param name MUST be ignored. \n If a query param is repeated in an HTTP request, the behavior is purposely left undefined, since different data planes have different capabilities. However, it is *recommended* that implementations should match against the first value of the param if the data plane supports it, as this behavior is expected in other load balancing contexts outside of the Gateway API. \n Users SHOULD NOT route traffic based on repeated query params to guard themselves against potential differences in the implementations." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string type: default: Exact description: "Type specifies how to match against the value of the query parameter. \n Support: Extended (Exact) \n Support: Implementation-specific (RegularExpression) \n Since RegularExpression QueryParamMatchType has Implementation-specific conformance, implementations can support POSIX, PCRE or any other dialects of regular expressions. Please read the implementation's documentation to determine the supported dialect." enum: - Exact - RegularExpression type: string value: description: Value is the value of HTTP query param to be matched. maxLength: 1024 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map type: object type: array pause: description: Pause defines a pause stage for a rollout, manual or auto properties: duration: description: Duration the amount of time to wait before moving to the next step. format: int32 type: integer type: object replicas: anyOf: - type: integer - type: string description: 'Replicas is the number of expected canary pods in this batch it can be an absolute number (ex: 5) or a percentage of total pods.' x-kubernetes-int-or-string: true requestHeaderModifier: description: "Set overwrites the request with the given header (name, value) before the action. \n Input: GET /foo HTTP/1.1 my-header: foo \n requestHeaderModifier: set: - name: \"my-header\" value: \"bar\" \n Output: GET /foo HTTP/1.1 my-header: bar" properties: add: description: "Add adds the given header(s) (name, value) to the request before the action. It appends to any existing values associated with the header name. \n Input: GET /foo HTTP/1.1 my-header: foo \n Config: add: - name: \"my-header\" value: \"bar,baz\" \n Output: GET /foo HTTP/1.1 my-header: foo,bar,baz" items: description: HTTPHeader represents an HTTP Header name and value as defined by RFC 7230. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map remove: description: "Remove the given header(s) from the HTTP request before the action. The value of Remove is a list of HTTP header names. Note that the header names are case-insensitive (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). \n Input: GET /foo HTTP/1.1 my-header1: foo my-header2: bar my-header3: baz \n Config: remove: [\"my-header1\", \"my-header3\"] \n Output: GET /foo HTTP/1.1 my-header2: bar" items: type: string maxItems: 16 type: array set: description: "Set overwrites the request with the given header (name, value) before the action. \n Input: GET /foo HTTP/1.1 my-header: foo \n Config: set: - name: \"my-header\" value: \"bar\" \n Output: GET /foo HTTP/1.1 my-header: bar" items: description: HTTPHeader represents an HTTP Header name and value as defined by RFC 7230. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map type: object traffic: description: Traffic indicate how many percentage of traffic the canary pods should receive Value is of string type and is a percentage, e.g. 5%. type: string type: object type: array trafficRoutingRef: description: TrafficRoutingRef is TrafficRouting's Name type: string trafficRoutings: description: TrafficRoutings support ingress, gateway api and custom network resource(e.g. istio, apisix) to enable more fine-grained traffic routing and current only support one TrafficRouting items: description: TrafficRoutingRef hosts all the different configuration for supported service meshes to enable more fine-grained traffic routing properties: customNetworkRefs: description: CustomNetworkRefs hold a list of custom providers to route traffic items: description: ObjectRef holds a references to the Kubernetes object properties: apiVersion: description: API Version of the referent type: string kind: description: Kind of the referent type: string name: description: Name of the referent type: string required: - apiVersion - kind - name type: object type: array gateway: description: Gateway holds Gateway specific configuration to route traffic Gateway configuration only supports >= v0.4.0 (v1alpha2). properties: httpRouteName: description: HTTPRouteName refers to the name of an `HTTPRoute` resource in the same namespace as the `Rollout` type: string type: object gracePeriodSeconds: default: 3 description: Optional duration in seconds the traffic provider(e.g. nginx ingress controller) consumes the service, ingress configuration changes gracefully. format: int32 type: integer ingress: description: Ingress holds Ingress specific configuration to route traffic, e.g. Nginx, Alb. properties: classType: description: ClassType refers to the type of `Ingress`. current support nginx, aliyun-alb. default is nginx. type: string name: description: Name refers to the name of an `Ingress` resource in the same namespace as the `Rollout` type: string required: - name type: object service: description: Service holds the name of a service which selects pods with stable version and don't select any pods with canary version. type: string required: - service type: object type: array type: object canary: description: CanaryStrategy defines parameters for a Replica Based Canary properties: disableGenerateCanaryService: description: canary service will not be generated if DisableGenerateCanaryService is true type: boolean enableExtraWorkloadForCanary: description: 'If true, then it will create new deployment for canary, such as: workload-demo-canary. When user verifies that the canary version is ready, we will remove the canary deployment and release the deployment workload-demo in full. Current only support k8s native deployment' type: boolean failureThreshold: anyOf: - type: integer - type: string description: FailureThreshold indicates how many failed pods can be tolerated in all upgraded pods. Only when FailureThreshold are satisfied, Rollout can enter ready state. If FailureThreshold is nil, Rollout will use the MaxUnavailable of workload as its FailureThreshold. Defaults to nil. x-kubernetes-int-or-string: true patchPodTemplateMetadata: description: PatchPodTemplateMetadata indicates patch configuration(e.g. labels, annotations) to the canary deployment podTemplateSpec.metadata only support for canary deployment properties: annotations: additionalProperties: type: string description: annotations type: object labels: additionalProperties: type: string description: labels type: object type: object steps: description: Steps define the order of phases to execute release in batches(20%, 40%, 60%, 80%, 100%) items: description: CanaryStep defines a step of a canary workload. properties: matches: description: "Matches define conditions used for matching incoming HTTP requests to the canary service. Each match is independent, i.e. this rule will be matched as long as **any** one of the matches is satisfied. \n It cannot support Traffic (weight-based routing) and Matches simultaneously, if both are configured. In such cases, Matches takes precedence." items: properties: headers: description: Headers specifies HTTP request header matchers. Multiple match values are ANDed together, meaning, a request must match all the specified headers to select the route. items: description: HTTPHeaderMatch describes how to select a HTTP route by matching HTTP request headers. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, only the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent. \n When a header is repeated in an HTTP request, it is implementation-specific behavior as to how this is represented. Generally, proxies should follow the guidance from the RFC: https://www.rfc-editor.org/rfc/rfc7230.html#section-3.2.2 regarding processing a repeated header, with special handling for \"Set-Cookie\"." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string type: default: Exact description: "Type specifies how to match against the value of the header. \n Support: Core (Exact) \n Support: Implementation-specific (RegularExpression) \n Since RegularExpression HeaderMatchType has implementation-specific conformance, implementations can support POSIX, PCRE or any other dialects of regular expressions. Please read the implementation's documentation to determine the supported dialect." enum: - Exact - RegularExpression type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map path: description: 'Path specifies a HTTP request path matcher. Supported list: - Istio: https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPMatchRequest - GatewayAPI: If path is defined, the whole HttpRouteMatch will be used as a standalone matcher' properties: type: default: PathPrefix description: "Type specifies how to match against the path Value. \n Support: Core (Exact, PathPrefix) \n Support: Implementation-specific (RegularExpression)" enum: - Exact - PathPrefix - RegularExpression type: string value: default: / description: Value of the HTTP path to match against. maxLength: 1024 type: string type: object queryParams: description: 'QueryParams specifies HTTP query parameter matchers. Multiple match values are ANDed together, meaning, a request must match all the specified query parameters to select the route. Supported list: - Istio: https://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPMatchRequest - MSE Ingress: https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/annotations-supported-by-mse-ingress-gateways-1 Header/Cookie > QueryParams - Gateway API' items: description: HTTPQueryParamMatch describes how to select a HTTP route by matching HTTP query parameters. properties: name: description: "Name is the name of the HTTP query param to be matched. This must be an exact string match. (See https://tools.ietf.org/html/rfc7230#section-2.7.3). \n If multiple entries specify equivalent query param names, only the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent query param name MUST be ignored. \n If a query param is repeated in an HTTP request, the behavior is purposely left undefined, since different data planes have different capabilities. However, it is *recommended* that implementations should match against the first value of the param if the data plane supports it, as this behavior is expected in other load balancing contexts outside of the Gateway API. \n Users SHOULD NOT route traffic based on repeated query params to guard themselves against potential differences in the implementations." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string type: default: Exact description: "Type specifies how to match against the value of the query parameter. \n Support: Extended (Exact) \n Support: Implementation-specific (RegularExpression) \n Since RegularExpression QueryParamMatchType has Implementation-specific conformance, implementations can support POSIX, PCRE or any other dialects of regular expressions. Please read the implementation's documentation to determine the supported dialect." enum: - Exact - RegularExpression type: string value: description: Value is the value of HTTP query param to be matched. maxLength: 1024 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map type: object type: array pause: description: Pause defines a pause stage for a rollout, manual or auto properties: duration: description: Duration the amount of time to wait before moving to the next step. format: int32 type: integer type: object replicas: anyOf: - type: integer - type: string description: 'Replicas is the number of expected canary pods in this batch it can be an absolute number (ex: 5) or a percentage of total pods.' x-kubernetes-int-or-string: true requestHeaderModifier: description: "Set overwrites the request with the given header (name, value) before the action. \n Input: GET /foo HTTP/1.1 my-header: foo \n requestHeaderModifier: set: - name: \"my-header\" value: \"bar\" \n Output: GET /foo HTTP/1.1 my-header: bar" properties: add: description: "Add adds the given header(s) (name, value) to the request before the action. It appends to any existing values associated with the header name. \n Input: GET /foo HTTP/1.1 my-header: foo \n Config: add: - name: \"my-header\" value: \"bar,baz\" \n Output: GET /foo HTTP/1.1 my-header: foo,bar,baz" items: description: HTTPHeader represents an HTTP Header name and value as defined by RFC 7230. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map remove: description: "Remove the given header(s) from the HTTP request before the action. The value of Remove is a list of HTTP header names. Note that the header names are case-insensitive (see https://datatracker.ietf.org/doc/html/rfc2616#section-4.2). \n Input: GET /foo HTTP/1.1 my-header1: foo my-header2: bar my-header3: baz \n Config: remove: [\"my-header1\", \"my-header3\"] \n Output: GET /foo HTTP/1.1 my-header2: bar" items: type: string maxItems: 16 type: array set: description: "Set overwrites the request with the given header (name, value) before the action. \n Input: GET /foo HTTP/1.1 my-header: foo \n Config: set: - name: \"my-header\" value: \"bar\" \n Output: GET /foo HTTP/1.1 my-header: bar" items: description: HTTPHeader represents an HTTP Header name and value as defined by RFC 7230. properties: name: description: "Name is the name of the HTTP Header to be matched. Name matching MUST be case insensitive. (See https://tools.ietf.org/html/rfc7230#section-3.2). \n If multiple entries specify equivalent header names, the first entry with an equivalent name MUST be considered for a match. Subsequent entries with an equivalent header name MUST be ignored. Due to the case-insensitivity of header names, \"foo\" and \"Foo\" are considered equivalent." maxLength: 256 minLength: 1 pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string value: description: Value is the value of HTTP Header to be matched. maxLength: 4096 minLength: 1 type: string required: - name - value type: object maxItems: 16 type: array x-kubernetes-list-map-keys: - name x-kubernetes-list-type: map type: object traffic: description: Traffic indicate how many percentage of traffic the canary pods should receive Value is of string type and is a percentage, e.g. 5%. type: string type: object type: array trafficRoutingRef: description: TrafficRoutingRef is TrafficRouting's Name type: string trafficRoutings: description: TrafficRoutings support ingress, gateway api and custom network resource(e.g. istio, apisix) to enable more fine-grained traffic routing and current only support one TrafficRouting items: description: TrafficRoutingRef hosts all the different configuration for supported service meshes to enable more fine-grained traffic routing properties: customNetworkRefs: description: CustomNetworkRefs hold a list of custom providers to route traffic items: description: ObjectRef holds a references to the Kubernetes object properties: apiVersion: description: API Version of the referent type: string kind: description: Kind of the referent type: string name: description: Name of the referent type: string required: - apiVersion - kind - name type: object type: array gateway: description: Gateway holds Gateway specific configuration to route traffic Gateway configuration only supports >= v0.4.0 (v1alpha2). properties: httpRouteName: description: HTTPRouteName refers to the name of an `HTTPRoute` resource in the same namespace as the `Rollout` type: string type: object gracePeriodSeconds: default: 3 description: Optional duration in seconds the traffic provider(e.g. nginx ingress controller) consumes the service, ingress configuration changes gracefully. format: int32 type: integer ingress: description: Ingress holds Ingress specific configuration to route traffic, e.g. Nginx, Alb. properties: classType: description: ClassType refers to the type of `Ingress`. current support nginx, aliyun-alb. default is nginx. type: string name: description: Name refers to the name of an `Ingress` resource in the same namespace as the `Rollout` type: string required: - name type: object service: description: Service holds the name of a service which selects pods with stable version and don't select any pods with canary version. type: string required: - service type: object type: array type: object paused: description: Paused indicates that the Rollout is paused. Default value is false type: boolean type: object workloadRef: description: 'INSERT ADDITIONAL SPEC FIELDS - desired state of cluster Important: Run "make" to regenerate code after modifying this file WorkloadRef contains enough information to let you identify a workload for Rollout Batch release of the bypass' properties: apiVersion: description: API Version of the referent type: string kind: description: Kind of the referent type: string name: description: Name of the referent type: string required: - apiVersion - kind - name type: object required: - strategy - workloadRef type: object status: description: RolloutStatus defines the observed state of Rollout properties: blueGreenStatus: description: BlueGreen describes the state of the blueGreen rollout properties: currentStepIndex: description: CurrentStepIndex defines the current step of the rollout is on. format: int32 type: integer currentStepState: type: string finalisingStep: description: FinalisingStep the step of finalising type: string lastUpdateTime: format: date-time type: string message: type: string nextStepIndex: description: NextStepIndex defines the next step of the rollout is on. In normal case, NextStepIndex is equal to CurrentStepIndex + 1 If the current step is the last step, NextStepIndex is equal to -1 Before the release, NextStepIndex is also equal to -1 0 is not used and won't appear in any case It is allowed to patch NextStepIndex by design, e.g. if CurrentStepIndex is 2, user can patch NextStepIndex to 3 (if exists) to achieve batch jump, or patch NextStepIndex to 1 to implement a re-execution of step 1 Patching it with a non-positive value is useless and meaningless, which will be corrected in the next reconciliation format: int32 type: integer observedRolloutID: description: ObservedRolloutID will record the newest spec.RolloutID if status.canaryRevision equals to workload.updateRevision type: string observedWorkloadGeneration: description: observedWorkloadGeneration is the most recent generation observed for this Rollout ref workload generation. format: int64 type: integer podTemplateHash: description: pod template hash is used as service selector label type: string rolloutHash: description: RolloutHash from rollout.spec object type: string stableRevision: description: StableRevision indicates the revision of stable pods type: string updatedReadyReplicas: description: UpdatedReadyReplicas the numbers of updated ready pods format: int32 type: integer updatedReplicas: description: UpdatedReplicas the numbers of updated pods format: int32 type: integer updatedRevision: description: UpdatedRevision is calculated by rollout based on podTemplateHash, and the internal logic flow uses It may be different from rs podTemplateHash in different k8s versions, so it cannot be used as service selector label type: string required: - currentStepState - finalisingStep - nextStepIndex - podTemplateHash - updatedReadyReplicas - updatedReplicas - updatedRevision type: object canaryStatus: description: Canary describes the state of the canary rollout properties: canaryReadyReplicas: description: CanaryReadyReplicas the numbers of ready canary revision pods format: int32 type: integer canaryReplicas: description: CanaryReplicas the numbers of canary revision pods format: int32 type: integer canaryRevision: description: CanaryRevision is calculated by rollout based on podTemplateHash, and the internal logic flow uses It may be different from rs podTemplateHash in different k8s versions, so it cannot be used as service selector label type: string currentStepIndex: description: CurrentStepIndex defines the current step of the rollout is on. format: int32 type: integer currentStepState: type: string finalisingStep: description: FinalisingStep the step of finalising type: string lastUpdateTime: format: date-time type: string message: type: string nextStepIndex: description: NextStepIndex defines the next step of the rollout is on. In normal case, NextStepIndex is equal to CurrentStepIndex + 1 If the current step is the last step, NextStepIndex is equal to -1 Before the release, NextStepIndex is also equal to -1 0 is not used and won't appear in any case It is allowed to patch NextStepIndex by design, e.g. if CurrentStepIndex is 2, user can patch NextStepIndex to 3 (if exists) to achieve batch jump, or patch NextStepIndex to 1 to implement a re-execution of step 1 Patching it with a non-positive value is useless and meaningless, which will be corrected in the next reconciliation format: int32 type: integer observedRolloutID: description: ObservedRolloutID will record the newest spec.RolloutID if status.canaryRevision equals to workload.updateRevision type: string observedWorkloadGeneration: description: observedWorkloadGeneration is the most recent generation observed for this Rollout ref workload generation. format: int64 type: integer podTemplateHash: description: pod template hash is used as service selector label type: string rolloutHash: description: RolloutHash from rollout.spec object type: string stableRevision: description: StableRevision indicates the revision of stable pods type: string required: - canaryReadyReplicas - canaryReplicas - canaryRevision - currentStepState - finalisingStep - nextStepIndex - podTemplateHash type: object conditions: description: Conditions a list of conditions a rollout can have. items: description: RolloutCondition describes the state of a rollout at a certain point. properties: lastTransitionTime: description: Last time the condition transitioned from one status to another. format: date-time type: string lastUpdateTime: description: The last time this condition was updated. format: date-time type: string message: description: A human readable message indicating details about the transition. type: string reason: description: The reason for the condition's last transition. type: string status: description: Phase of the condition, one of True, False, Unknown. type: string type: description: Type of rollout condition. type: string required: - message - reason - status - type type: object type: array currentStepIndex: description: These two values will be synchronized with the same fileds in CanaryStatus or BlueGreeenStatus mainly used to provide info for kubectl get command format: int32 type: integer currentStepState: type: string message: description: Message provides details on why the rollout is in its current phase type: string observedGeneration: description: observedGeneration is the most recent generation observed for this Rollout. format: int64 type: integer phase: description: BlueGreenStatus *BlueGreenStatus `json:"blueGreenStatus,omitempty"` Phase is the rollout phase. type: string required: - currentStepIndex - currentStepState type: object type: object served: true storage: true subresources: status: {} status: acceptedNames: kind: "" plural: "" conditions: [] storedVersions: []