From af12226b04ea2e23ce82f46a3d7a0e8873bb4514 Mon Sep 17 00:00:00 2001 From: Evan Anderson Date: Mon, 7 May 2018 10:59:23 -0700 Subject: [PATCH] Service docs (#685) * Initial checkin of Service docs (aka "Steve") * Partial checkpoint on updating spec * Add service to images Adds Service to images * Update the rest of examples * Reorder errors to group logically into deployment and routing errors. Introduce Service error documentation, and structure error blocks to show how Service aggregates errors from Route and Configuration. * Address small comments from @vaikas-google and @mattmoor. Did not refactor service.pinned behavior. --- docs/overview/elafros-api-objects.md | 3 + docs/overview/elafros-api-service.md | 12 + .../elafros-code-layout-controller.md | 6 +- docs/overview/elafros-code-layout-webhook.md | 6 +- docs/overview/images/api-objects.png | Bin 82443 -> 15439 bytes docs/overview/index.md | 1 + docs/spec/errors.md | 367 ++++++----- docs/spec/images/auto_rollout.png | Bin 13330 -> 17432 bytes docs/spec/images/build_example.png | Bin 13941 -> 19186 bytes docs/spec/images/build_function.png | Bin 14738 -> 22171 bytes docs/spec/images/initial_creation.png | Bin 10811 -> 15417 bytes docs/spec/images/manual_rollout.png | Bin 17399 -> 25459 bytes docs/spec/images/object_model.png | Bin 11425 -> 16672 bytes docs/spec/normative_examples.md | 579 +++++++++++------- docs/spec/overview.md | 40 +- docs/spec/spec.md | 97 ++- 16 files changed, 722 insertions(+), 389 deletions(-) create mode 100644 docs/overview/elafros-api-service.md diff --git a/docs/overview/elafros-api-objects.md b/docs/overview/elafros-api-objects.md index 498b40fc4add..71cd71430266 100644 --- a/docs/overview/elafros-api-objects.md +++ b/docs/overview/elafros-api-objects.md @@ -10,6 +10,9 @@ * Route * Assigns traffic to Revisions (fractional scaling or by name). * Built using [Istio](https://istio.io/docs/). +* Service + * Acts as a top-level controller to orchestrate Route and Configuration. + * Provides a simple entry point for UI and CLI tooling to achieve common behavior. * Build * Executes builds. diff --git a/docs/overview/elafros-api-service.md b/docs/overview/elafros-api-service.md new file mode 100644 index 000000000000..87d2519e0ad5 --- /dev/null +++ b/docs/overview/elafros-api-service.md @@ -0,0 +1,12 @@ +# API Objects - Service + +* Orchestrates Routes and Configurations to support higher-level tooling. + * Configuration of code + inbound routing in a single API call. + * Definition of specific common rollout policies + * Automatic (latest) rollout + * Manual rollout + * Extensible for other rollout strategies which might be requested + * Provides a top-level resource for graphical UI to key off of. +* Recommended starting point for Elafros use, as it provides "guide rails" to avoid unusual and non-idiomatic usage. + * Mirrors labels and annotations to the created objects. + * Advanced scenarios may require disconnecting the Service ownership of the created Route and Configuration. diff --git a/docs/overview/elafros-code-layout-controller.md b/docs/overview/elafros-code-layout-controller.md index 937991efc51b..7e5c0ebca4f7 100644 --- a/docs/overview/elafros-code-layout-controller.md +++ b/docs/overview/elafros-code-layout-controller.md @@ -1,6 +1,6 @@ # Code layout - Controller -* ./pkg/controller/{route,configuration,revision}/controller.go -* sync_handler the main method for reconcile +* `./pkg/controller/{configuration,revision,route,service}/controller.go` +* `sync_handler` is the main method for reconcile * Other resource creation broken into their own files in those directories -* Communicates information via [resource].status field +* Communicates information via `[resource].status` field diff --git a/docs/overview/elafros-code-layout-webhook.md b/docs/overview/elafros-code-layout-webhook.md index 7913c1242916..5183a4c8a2a6 100644 --- a/docs/overview/elafros-code-layout-webhook.md +++ b/docs/overview/elafros-code-layout-webhook.md @@ -1,11 +1,11 @@ # Code layout - Webhook -* ./pkg/webhook/webhook.go +* `./pkg/webhook/webhook.go` * All the generic mutations / validations * Serialization / deserialization * Calls into resource specific validation / mutation - * ./pkg/webhook/{route,revision,configuration} + * `./pkg/webhook/{configuration,revision,route,service}` * Mutations specified with an array of jsonpatch objects -* ./pkg/webhook/certs.go +* `./pkg/webhook/certs.go` * CA / Server cert diff --git a/docs/overview/images/api-objects.png b/docs/overview/images/api-objects.png index 205ce8a56aaca58599b23b09981be6d38f7cc051..3cef80846cfab796686cff29b2116b35127e5348 100644 GIT binary patch literal 15439 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 F{0|_Il`jAQ literal 82443 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

R`@FkbPoe?;41XLy6(! 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 Q7Bc{Wr>mdKI;Vst05WLZfdBvi diff --git a/docs/overview/index.md b/docs/overview/index.md index 362d6e53ba50..47cbfba85cbb 100644 --- a/docs/overview/index.md +++ b/docs/overview/index.md @@ -7,6 +7,7 @@ * [Configuration](./elafros-api-configuration.md) * [Revision](./elafros-api-revision.md) * [Route](./elafros-api-route.md) + * [Service](./elafros-api-service.md) * [Components](./elafros-components.md) * Code layout * [Resources](./elafros-code-layout-resources.md) diff --git a/docs/spec/errors.md b/docs/spec/errors.md index 6e657575d90b..89e074388ad0 100644 --- a/docs/spec/errors.md +++ b/docs/spec/errors.md @@ -60,25 +60,38 @@ should follow these patterns: Example user and system error scenarios are included below along with how the status is presented to CLI and UI tools via the API. -* [Revision failed to become Ready](#revision-failed-to-become-ready) -* [Build failed](#build-failed) -* [Revision not found by Route](#revision-not-found-by-route) -* [Configuration not found by Route](#configuration-not-found-by-route) -* [Latest Revision of a Configuration deleted](#latest-revision-of-a-configuration-deleted) -* [Resource exhausted while creating a revision](#resource-exhausted-while-creating-a-revision) -* [Deployment progressing slowly/stuck](#deployment-progressing-slowly-stuck) -* [Traffic shift progressing slowly/stuck](#traffic-shift-progressing-slowly-stuck) -* [Container image not present in repository](#container-image-not-present-in-repository) -* [Container image fails at startup on Revision](#container-image-fails-at-startup-on-revision) +* [Deployment-Related Failures](#deployment-related-failures) + * [Revision failed to become Ready](#revision-failed-to-become-ready) + * [Build failed](#build-failed) + * [Resource exhausted while creating a revision](#resource-exhausted-while-creating-a-revision) + * [Container image not present in repository](#container-image-not-present-in-repository) + * [Container image fails at startup on Revision](#container-image-fails-at-startup-on-revision) + * [Deployment progressing slowly/stuck](#deployment-progressing-slowly-stuck) +* [Routing-Related Failures](#routing-related-failures) + * [Traffic not assigned](#traffic-not-assigned) + * [Revision not found by Route](#revision-not-found-by-route) + * [Configuration not found by Route](#configuration-not-found-by-route) + * [Latest Revision of a Configuration deleted](#latest-revision-of-a-configuration-deleted) + * [Traffic shift progressing slowly/stuck](#traffic-shift-progressing-slowly-stuck) + + +# Deployment-Related Failures + +The following scenarios will generally occur when attempting to deploy +changes to the software stack by updating the Service or Configuration +resources to cause a new Revision to be created. ## Revision failed to become Ready -If the latest Revision fails to become `Ready` for any reason within some reasonable -timeframe, the Configuration should signal this -with the `LatestRevisionReady` status, copying the reason and the message -from the `Ready` condition on the Revision. +If the latest Revision fails to become `Ready` for any reason within +some reasonable timeframe, the Configuration and Service should signal +this with the `LatestRevisionReady` status, copying the reason and the +message from the `Ready` condition on the Revision. +```http +GET /api/elafros.dev/v1alpha1/namespaces/default/configurations/my-service +``` ```yaml ... status: @@ -87,8 +100,25 @@ status: conditions: - type: LatestRevisionReady status: False - reason: ContainerHealthy - message: "Unable to start because container is missing and build failed." + reason: BuildFailed + meassage: "Build Step XYZ failed with error message: $LASTLOGLINE" +``` + +```http +GET /api/elafros.dev/v1alpha1/namespaces/default/services/my-service +``` +```yaml +... +status: + latestReadyRevisionName: abc + latestCreatedRevisionName: bcd # Hasn't become "Ready" + conditions: + - type: Ready + status: True # If an earlier version is serving + - type: LatestRevisionReady + status: False + reason: BuildFailed + meassage: "Build Step XYZ failed with error message: $LASTLOGLINE" ``` @@ -116,7 +146,6 @@ status: message: "Step XYZ failed with error message: $LASTLOGLINE" ``` - ```http GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc ``` @@ -135,6 +164,182 @@ status: ``` +## Resource exhausted while creating a revision + +Since a Revision is only metadata, the Revision will be created, but +will have a condition indicating the underlying failure, possibly +indicating the failed underlying resource. In a multitenant +environment, the customer might not have have access or visibility +into the underlying resources in the hosting environment. + +```http +GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc +``` +```yaml +... +status: + conditions: + - type: Ready + status: False + reason: NoDeployment + message: "The controller could not create a deployment named ela-abc-e13ac." + - type: ResourcesProvisioned + status: False + reason: NoDeployment + message: "The controller could not create a deployment named ela-abc-e13ac." +``` + + +## Container image not present in repository + +Revisions might be created while a Build is still creating the +container image or uploading it to the repository. If the build is +being performed by a CRD in the cluster, the `spec.buildName` +attribute will be set (and see the [Build failed](#build-failed) +example). In other cases when the build is not supplied, the container +image referenced might not be present in the registry (either because +of a typo or because it was deleted). In this case, the `Ready` +condition will be set to `False` with a reason of +`ContainerMissing`. This condition could be corrected if the image +becomes available at a later time. Elafros could also make a defensive +copy of the container image to avoid having to surface this error if +the original docker image is deleted. + +```http +GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc +``` +```yaml +... +status: + conditions: + - type: Ready + status: False + reason: ContainerMissing + message: "Unable to fetch image 'gcr.io/...': " + - type: ContainerHealthy + status: False + reason: ContainerMissing + message: "Unable to fetch image 'gcr.io/...': " +``` + + +## Container image fails at startup on Revision + +Particularly for development cases with interpreted languages like +Node or Python, syntax errors might only be caught at container +startup time. For this reason, implementations should start a copy of +the container on deployment, before marking the container `Ready`. If +this container fails to start, the `Ready` condition will be set to +`False`, the reason will be set to `ExitCode%d` with the exit code of +the application, and the termination message from the container will +be provided. (Containers will be run with the default +`terminationMessagePath` and a `terminationMessagePolicy` of +`FallbackToLogsOnError`.) Additionally, the Revision `status.logsUrl` +should be present, which provides the address of an endpoint which can +be used to fetch the logs for the failed process. + +```http +GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc +``` +```yaml +... +status: + logUrl: "http://logging.infra.mycompany.com/...?filter=revision=abc&..." + conditions: + - type: Ready + status: False + reason: ExitCode127 + message: "Container failed with: SyntaxError: Unexpected identifier" + - type: ContainerHealthy + status: False + reason: ExitCode127 + message: "Container failed with: SyntaxError: Unexpected identifier" +``` + + +## Deployment progressing slowly/stuck + +See [the kubernetes documentation for how this is handled for +Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#failed-deployment). For +Revisions, we will start by assuming a single timeout for deployment +(rather than configurable), and report that the Revision was not Ready, +with a reason `ProgressDeadlineExceeded`. Note that we will only report +`ProgressDeadlineExceeded` if we could not determine another reason (such +as quota failures, missing build, or container execution failures). + +Since container setup time also affects the ability of 0 to 1 +autoscaling, the `Ready` failure with `ProgressDeadlineExceeded` +reason should be considered a terminal condition, even if Kubernetes +might attempt to make progress even after the deadline. + +```http +GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc +``` +```yaml +... +status: + conditions: + - type: Ready + status: False + reason: ProgressDeadlineExceeded + message: "Did not pass readiness checks in 120 seconds." +``` + + +# Routing-Related Failures + +The following scenarios are most likely to occur when attempting to +roll out a change by shifting traffic to a new Revision. Some of these +conditions can also occur under normal operations due to (for example) +operator error causing live resources to be deleted. + + +## Traffic not assigned + +If some percentage of traffic cannot be assigned to a live +(materialized or scaled-to-zero) Revision, the Route will report the +`Ready` condition as `False`. The Service will mirror this status in +its' `Ready` condition. For example, for a newly-created Service where +the first Revision is unable to serve: + +```http +GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service +``` +```yaml +... +status: + domain: my-service.default.mydomain.com + traffic: + - revisionName: "Not found" + percent: 100 + conditions: + - type: Ready + status: False + reason: RevisionMissing + message: "The configuration 'abc' does not have a LatestReadyRevision." +``` + +```http +GET /apis/elafros.dev/v1alpha1/namespaces/default/services/my-service +``` +```yaml +... +status: + latestCreatedRevisionname: abc + # no latestReadyRevisionName, because abc failed + domain: my-service.default.mydomain.com + conditions: + - type: Ready + status: False + reason: RevisionMissing + message: "The configuration 'abc' does not have a LatestReadyRevision." + - type: LatestRevisionReady + status: False + reason: ExitCode127 + message: "Container failed with: SyntaxError: Unexpected identifier" +``` + + ## Revision not found by Route If a Revision is referenced in the Route's `spec.traffic`, the @@ -143,7 +348,7 @@ found", and the `AllTrafficAssigned` condition will be marked as False with a reason of `RevisionMissing`. ```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/abc +GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service ``` ```yaml ... @@ -176,7 +381,7 @@ and the Configuration cannot be found, the corresponding entry in of `ConfigurationMissing`. ```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/abc +GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service ``` ```yaml ... @@ -228,61 +433,6 @@ status: ``` -## Resource exhausted while creating a revision - -Since a Revision is only metadata, the Revision will be created, but -will have a condition indicating the underlying failure, possibly -indicating the failed underlying resource. In a multitenant -environment, the customer might not have have access or visibility -into the underlying resources in the hosting environment. - -```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc -``` -```yaml -... -status: - conditions: - - type: Ready - status: False - reason: NoDeployment - message: "The controller could not create a deployment named ela-abc-e13ac." - - type: ResourcesProvisioned - status: False - reason: NoDeployment - message: "The controller could not create a deployment named ela-abc-e13ac." -``` - - -## Deployment progressing slowly/stuck - -See -[the kubernetes documentation for how this is handled for Deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#failed-deployment). For -Revisions, we will start by assuming a single timeout for deployment -(rather than configurable), and report that the Revision was not Ready, -with a reason `ProgressDeadlineExceeded`. Note that we will only report -`ProgressDeadlineExceeded` if we could not determine another reason (such -as quota failures, missing build, or container execution failures). - -Since container setup time also affects the ability of 0 to 1 -autoscaling, the `Ready` failure with `ProgressDeadlineExceeded` -reason should be considered a terminal condition, even if Kubernetes -might attempt to make progress even after the deadline. - -```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc -``` -```yaml -... -status: - conditions: - - type: Ready - status: False - reason: ProgressDeadlineExceeded - message: "Did not pass readiness checks in 120 seconds." -``` - - ## Traffic shift progressing slowly/stuck Similar to deployment slowness, if the transfer of traffic (either via @@ -291,7 +441,7 @@ complete/update, the `RolloutInProgress` condition will remain at True, but the reason will be set to `ProgressDeadlineExceeded`. ```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/abc +GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service ``` ```yaml ... @@ -308,70 +458,3 @@ status: # reason is a short status, message provides error details message: "Unable to update traffic split for more than 120 seconds." ``` - - -## Container image not present in repository - -Revisions might be created while a Build is still creating the -container image or uploading it to the repository. If the build is -being performed by a CRD in the cluster, the `spec.buildName` -attribute will be set (and see the [Build failed](#build-failed) -example). In other cases when the build is not supplied, the container -image referenced might not be present in the registry (either because -of a typo or because it was deleted). In this case, the `Ready` -condition will be set to `False` with a reason of -`ContainerMissing`. This condition could be corrected if the image -becomes available at a later time. Elafros could also make a defensive -copy of the container image to avoid having to surface this error if -the original docker image is deleted. - -```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc -``` -```yaml -... -status: - conditions: - - type: Ready - status: False - reason: ContainerMissing - message: "Unable to fetch image 'gcr.io/...': " - - type: ContainerHealthy - status: False - reason: ContainerMissing - message: "Unable to fetch image 'gcr.io/...': " -``` - - -## Container image fails at startup on Revision - -Particularly for development cases with interpreted languages like -Node or Python, syntax errors might only be caught at container -startup time. For this reason, implementations should start a copy of -the container on deployment, before marking the container `Ready`. If -this container fails to start, the `Ready` condition will be set to -`False`, the reason will be set to `ExitCode%d` with the exit code of -the application, and the termination message from the container will -be provided. (Containers will be run with the default -`terminationMessagePath` and a `terminationMessagePolicy` of -`FallbackToLogsOnError`.) Additionally, the Revision `status.logsUrl` -should be present, which provides the address of an endpoint which can -be used to fetch the logs for the failed process. - -```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc -``` -```yaml -... -status: - logUrl: "http://logging.infra.mycompany.com/...?filter=revision=abc&..." - conditions: - - type: Ready - status: False - reason: ExitCode127 - message: "Container failed with: SyntaxError: Unexpected identifier" - - type: ContainerHealthy - status: False - reason: ExitCode127 - message: "Container failed with: SyntaxError: Unexpected identifier" -``` diff --git a/docs/spec/images/auto_rollout.png b/docs/spec/images/auto_rollout.png index 04dfb62c4fd8f70d99775f5bb8a206fcd17928fa..9bf5b63bb143d3fd7bd2291c0e332852621f454c 100644 GIT binary patch literal 17432 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 XB-X055d#15gFsVNSEWM9D&qeE?XGfw literal 13330 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 YlAO`y7}5aXe|@fLsOTtHDcXenFD*|-^#A|> diff --git a/docs/spec/images/build_example.png b/docs/spec/images/build_example.png index 28fb83e2e3bbdcf569d2df8fd49e9ada4f3b71e6..e3c7ff332a500069179f44e56cc5bd40e5b7ac67 100644 GIT binary patch literal 19186 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 z�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 literal 17399 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±*GTSm;-ArDQOdcwEH>*sX6 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 T_1(xoi~^>it6r-5F!=ufD|H8N diff --git a/docs/spec/images/object_model.png b/docs/spec/images/object_model.png index c48a4df5329c6d183e873ed86715714672c4b762..0c58f1504f18c402ef333dad06fdfdcf7660e680 100644 GIT binary patch literal 16672 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 literal 11425 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

Ax*)Dc@8FCtG11Py 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 QfwmwWEkn%`^_xNe4Os&?&j0`b diff --git a/docs/spec/normative_examples.md b/docs/spec/normative_examples.md index a74681f2310d..7f57e7e931f6 100644 --- a/docs/spec/normative_examples.md +++ b/docs/spec/normative_examples.md @@ -8,8 +8,7 @@ Examples in this section illustrate: * [Automatic rollout of a new Revision to an existing Service with a pre-built container](#1-automatic-rollout-of-a-new-revision-to-existing-service---pre-built-container) -* [Creating a first route to deploy a first revision from a pre-built - container](#2-creating-route-and-deploying-first-revision---pre-built-container) +* [Creating a new Service with a pre-built container](#2-creating-a-new-service-with-a-pre-built-container) * [Configuration changes and manual rollout options](#3-manual-rollout-of-a-new-revision---config-change-only) * [Creating a revision from source](#4-deploy-a-revision-from-source) @@ -38,22 +37,23 @@ $ elafros deploy --service my-service **Steps**: -* Update the Configuration with the config change +* Update the Service with the config change **Results:** -* A new Revision is created, and automatically rolled out to 100% once - ready +* The Configuration associated with the Service is updated, and a new + Revision is created, and automatically rolled out to 100% once ready. ![Automatic Rollout](images/auto_rollout.png) -After the initial Route and Configuration have been created (which is -shown in the [second example](TODO)), the typical -interaction is to update the revision configuration, resulting in the -creation of a new revision, which will be automatically rolled out by -the route. Revision configuration updates can be handled as either a -PUT or PATCH operation: +After the initial Route and Configuration have been created (which is shown +in the +[second example](#2-creating-a-new-service-with-a-pre-built-container)), +the typical interaction is to update the revision configuration, resulting +in the creation of a new revision, which will be automatically rolled out by +the route. Revision configuration updates can be handled as either a PUT or +PATCH operation: * Optimistic concurrency controls for PUT operations in a read/modify/write routine work as expected in kubernetes. @@ -69,9 +69,28 @@ followed by several GET calls to illustrate each step in the reconciliation process as the system materializes the new revision, and begins shifting traffic from the old revision to the new revision. -The client PATCHes the configuration's template revision with just the -new container image, inheriting previous configuration from the -configuration: +The client PATCHes the service's configuration with new container image, +inheriting previous environment values from the configuration spec: + +```http +PATCH /apis/elafros.dev/v1alpha1/namespaces/default/services/my-service +``` +```yaml +apiVersion: elafros.dev/v1alpha1 +kind: Service +metadata: + name: my-service +spec: + runLatest: + configuration: + revisionTemplate: # template for building Revision + spec: + container: + image: gcr.io/... # new image +``` + +This causes the controller to PATCH the configuration's template revision +with the new container image: ```http PATCH /apis/elafros.dev/v1alpha1/namespaces/default/configurations/my-service @@ -80,7 +99,7 @@ PATCH /apis/elafros.dev/v1alpha1/namespaces/default/configurations/my-service apiVersion: elafros.dev/v1alpha1 kind: Configuration metadata: - name: my-service # by convention, same name as the service + name: my-service # Named the same as the Service spec: revisionTemplate: # template for building Revision spec: @@ -88,8 +107,8 @@ spec: image: gcr.io/... # new image ``` -The update to the Configuration triggers a new revision being created, -and the Configuration is updated to reflect the new Revision: +The update to the Configuration triggers a new Revision being created, and +the Configuration and Service are updated to reflect the new Revision: ```http GET /apis/elafros.dev/v1alpha1/namespaces/default/configurations/my-service @@ -110,6 +129,25 @@ status: observedGeneration: 1235 ``` +```http +GET /apis/elafros.dev/v1alpha1/namespaces/default/service/my-service +``` +```yaml +apiVersion: elafros.dev/v1alpha1 +kind: Service +metadata: + name: my-service + generation: 1452 + ... + +spec: + ... # same as before, except new container.image +status: + latestReadyRevisionName: abc + latestCreatedRevisionName: def # new revision created, but not ready yet + observedGeneration: 1452 +``` + The newly created revision has the same config as the previous revision, but different code. Note the generation label reflects the new generation of the configuration (1235), indicating the provenance @@ -145,13 +183,13 @@ status: ``` When the new revision is Ready, i.e. underlying resources are -materialized and ready to serve, the configuration updates its -`status.latestReadyRevisionName` status to reflect the new +materialized and ready to serve, the configuration (and service) +updates their `status.latestReadyRevisionName` to reflect the new revision. The route, which is configured to automatically rollout new revisions from the configuration, watches the configuration and is -notified of the `latestReadyRevisionName`, and begins migrating traffic -to it. During reconciliation, traffic may be routed to both existing -revision `abc` and new revision `def`: +notified of the `latestReadyRevisionName`, and begins migrating +traffic to it. During reconciliation, traffic may be routed to both +existing revision `abc` and new revision `def`: ```http GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service @@ -211,9 +249,9 @@ status: ``` -## 2) Creating Route and deploying first Revision - pre-built container +## 2) Creating a new Service with a pre-built container -**Scenario**: User creates a new Route and deploys their first +**Scenario**: User creates a new Service and deploys their first Revision based on a pre-built container ``` @@ -229,8 +267,8 @@ $ elafros deploy --service my-service --region us-central1 **Steps**: -* Create a new Configuration and a Route that references a that - configuration. +* Create a new Service. That Service will trigger creation of a new + Configuration and a Route that references that configuration. **Results**: @@ -239,38 +277,66 @@ $ elafros deploy --service my-service --region us-central1 * A new Route is created, referencing the configuration -* The route begins serving traffic to the revision that was created by +* The route begins serving traffic to the Revision that was created by the configuration ![Initial Creation](images/initial_creation.png) -The previous example assumed an existing Route and Configuration to -illustrate the common scenario of updating the configuration to deploy -a new revision to the service. +The previous example assumed an existing Service with a Route and +Configuration to illustrate the common scenario of updating the +configuration to deploy a new revision to the service. In this getting started example, deploying a first Revision is -accomplished by creating a new Configuration (which will generate a -new Revision) and creating a new Route referring to that -configuration. Note that these two steps can occur in either order, or -in parallel. - -A Route can either refer directly to a Revision, or to the latest -ready revision of a Configuration, as this example illustrates. This -is the most straightforward scenario that many Elafros customers are -expected to use, and is consistent with the experience of deploying -code that is rolled out immediately. +accomplished by creating a new Service, which will create both a +Configuration and a new Route referring to that configuration. In +turn, the Configuration will generate a new Revision. Note that these +steps may occur in in parallel. + +In the `runLatest` style of Service, the Route always references the +latest ready revision of a Configuration, as this example +illustrates. This is the most straightforward scenario that many +Elafros customers are expected to use, and is consistent with the +experience of deploying code that is rolled out immediately. A Route +may also directly reference a Revision, which is shown in +[example 3](#3-manual-rollout-of-a-new-revision---config-change-only). The example shows the POST calls issued by the client, followed by several GET calls to illustrate each step in the reconciliation process as the system materializes and begins routing traffic to the revision. -The client creates the route and configuration, which by convention -share the same name: +The client creates the service in `runLatest` mode: + +```http +POST /apis/elafros.dev/v1alpha1/namespaces/default/services +``` +```yaml +apiVersion: elafros.dev/v1alpha1 +kind: Service +metadata: + name: my-service +spec: + runLatest: + configuration: + revisionTemplate: # template for building Revision + metadata: ... + spec: + container: # k8s core.v1.Container + image: gcr.io/... + env: + - name: FOO + value: bar + - name: HELLO + value: world + ... +``` + +This causes the service controller to create route and configuration +objects with the same name as the Service: ```http -POST /apis/elafros.dev/v1alpha1/namespaces/default/routes +GET /apis/elafros.dev/v1alpha1/namespaces/default/routes ``` ```yaml apiVersion: elafros.dev/v1alpha1 @@ -285,7 +351,7 @@ spec: ``` ```http -POST /apis/elafros.dev/v1alpha1/namespaces/default/configurations +GET /apis/elafros.dev/v1alpha1/namespaces/default/configurations ``` ```yaml apiVersion: elafros.dev/v1alpha1 @@ -294,8 +360,8 @@ metadata: name: my-service # By convention (not req'd), same name as the service. # This will also be set as the "elafros.dev/configuration" # label on the created Revision. -spec: - revisionTemplate: # template for building Revision +spec: # Contents from service's spec.runLatest.configuration + revisionTemplate: metadata: ... spec: container: # k8s core.v1.Container @@ -308,9 +374,9 @@ spec: ... ``` -Upon the creation of the configuration, the system will create a new -Revision, generating its name, and applying the spec and metadata from -the configuration, as well as new metadata labels: +Upon the creation of the configuration, the configuration controller +will create a new Revision, generating its name, and applying the spec +and metadata from the configuration, as well as new metadata labels: ```http GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc @@ -373,7 +439,7 @@ metadata: spec: ... # same as before status: - # the latest created and ready to serve. Watched by service + # the latest created and ready to serve. Watched by route latestReadyRevisionName: abc # latest created revision latestCreatedRevisionName: abc @@ -415,24 +481,46 @@ status: observedGeneration: 2145 ``` +The Service also watches the Configuration (and Route) and mirrors their status for convenience: + +```http +GET /apis/elafros.dev/v1alpha1/namespaces/default/services/my-service +``` +```yaml +apiVersion: elafros.dev/v1alpha1 +kind: Service +metadata: + name: my-service + generation: 1 + ... +spec: + ... # same as before +status: + # the latest created and ready to serve. + latestReadyRevisionName: abc + # latest created revision + latestCreatedRevisionName: abc + observedGeneration: 1 +``` + ## 3) Manual rollout of a new Revision - config change only -**_Scenario_**: User updates configuration with new configuration (env - var change) to an existing service, tests the revision, then +**_Scenario_**: User updates configuration with new runtime arguments + (env var change) to an existing service, tests the revision, then proceeds with a manually controlled rollout to 100% ``` -$ elafros rollout strategy manual +$ elafros rollout --service my-service strategy manual $ elafros deploy --service my-service --env HELLO="blurg" [...] $ elafros revisions list --service my-service -Name Traffic Id Date Deployer Git SHA -next 0% v3 2018-01-19 12:16 user1 a6f92d1 -current 100% v2 2018-01-18 20:34 user1 a6f92d1 - v1 2018-01-17 10:32 user1 33643fc +Name Traffic Id Date Deployer Git SHA +next 0% v3 2018-01-19 12:16 user1 a6f92d1 +current 100% v2 2018-01-18 20:34 user1 a6f92d1 + v1 2018-01-17 10:32 user1 33643fc $ elafros rollout next percent 5 [...] @@ -450,14 +538,11 @@ current,next 100% v3 2018-01-19 12:16 user1 a6f92d1 **Steps**: -* Update the Route to pin the current revision +* Update the Service to switch from `runLatest` to `pinned` strategy. -* Update the Configuration with the new configuration (env var) +* Update the Service with the new configuration (env var). -* Update the Route to address the new Revision - -* After testing the new revision through the named subdomain, proceed - with the rollout, incrementally increasing traffic to 100% +* Update the Service to address the new Revision. **Results:** @@ -465,21 +550,44 @@ current,next 100% v3 2018-01-19 12:16 user1 a6f92d1 addressable at next.my-service... (by convention), but traffic is not routed to it until the percentage is manually ramped up. Upon completing the rollout, the next revision is now the current - revision + revision. ![Manual rollout](images/manual_rollout.png) -In the previous examples, the route referenced a Configuration for -automatic rollouts of new Revisions. While this pattern is useful for -many scenarios such as functions-as-a-service and simple development -flows, the Route can also reference Revisions directly to "pin" -traffic to specific revisions, which is suitable for manually -controlling rollouts, i.e. testing a new revision prior to serving -traffic. (Note: see [Appendix B](complex_examples.md) for a -semi-automatic variation of manual rollouts). +In the previous examples, the Service automatically made changes to +the configuration (newly created Revision) routable when they became +ready. While this pattern is useful for many scenarios such as +functions-as-a-service and simple development flows, the Service can +also reference Revisions directly in `pinned` mode to route traffic to +a specific Revision, which is suitable for rolling back a service to a known-good state. manually controlling +rollouts, i.e. testing a new revision prior to serving traffic. (Note: +see [Appendix B](complex_examples.md) for a semi-automatic variation +of manual rollouts). -The client updates the route to pin the current revision: +The client updates the service to pin the current revision: + +```http +PUT /apis/elafros.dev/v1alpha1/namespaces/default/services/my-service +``` +```yaml +apiVersion: elafros.dev/v1alpha1 +kind: Service +metadata: + name: my-service +spec: + pinned: + revisionName: def + configuration: # Copied from spec.runLatest.configuration + revisionTemplate: # template for building Revision + spec: + container: + image: gcr.io/... # new image +``` + +This causes the Route to be updated to pin traffic the specified +revision (note that the Configuration between the two is equivalent, +and therefore unchanged). ```http PATCH /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service @@ -492,13 +600,39 @@ metadata: spec: rollout: traffic: - - revisionName: def # pin a specific revision, i.e. the current one + - revisionName: def + name: current # addressable as current.my-service.default.mydomain.com percent: 100 + - configurationName: my-service # LatestReadyRevision of my-service + name: next # addressable as next.my-service.default.mydomain.com + percent: 0 # no traffic yet +``` + +Next, the service is updated with the new variables, which causes the +service controller to update the Configuration, in this case updating +the environment but keeping the same container image: + +```http +PATCH /apis/elafros.dev/v1alpha1/namespaces/default/services/my-service +``` +```yaml +apiVersion: elafros.dev/v1alpha1 +kind: Service +metadata: + name: my-service +spec: + pinned: + configuration: # Copied from spec.runLatest.configuration + revisionTemplate: # template for building Revision + spec: + container: + env: # k8s-style strategic merge patch, updating a single list value + - name: HELLO + value: blurg # changed value ``` As in the previous example, the configuration is updated to trigger -the creation of a new revision, in this case updating the container -image but keeping the same config: +the creation of a new revision: ```http PATCH /apis/elafros.dev/v1alpha1/namespaces/default/configurations/my-service @@ -547,13 +681,13 @@ status: Even when ready, the new revision does not automatically start serving traffic, as the route was pinned to revision `def`. -Update the route to make the existing revision serving traffic -addressable through subdomain `current`, and referencing the new -revision at 0% traffic but making it addressable through subdomain -`next`: +Once the new revision is ready, the route will update the `next` name +to point to the revision `ghi`. The new revision will still not +receive any traffic by default, but can be accessed for testing, +verification, etc. ```http -PATCH /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service +GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service ``` ```yaml apiVersion: elafros.dev/v1alpha1 @@ -566,28 +700,9 @@ spec: - revisionName: def name: current # addressable as current.my-service.default.mydomain.com percent: 100 - - revisionName: ghi + - configurationName: my-service # LatestReadyRevision of my-service name: next # addressable as next.my-service.default.mydomain.com percent: 0 # no traffic yet -``` - -In this state, the route makes both revisions addressable with -subdomains `current` and `next` (once the revision `ghi` has a status of -Ready), but traffic has not shifted to next yet. Also note that while -the names current/next have semantic meaning, they are convention -only; blue/green, or any other subdomain names could be configured. - -```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service -``` -```yaml -apiVersion: elafros.dev/v1alpha1 -kind: Route -metadata: - name: my-service - ... -spec: - ... # unchanged status: domain: my-service.default.mydomain.com traffic: @@ -600,68 +715,53 @@ status: conditions: - type: RolloutComplete status: True - ... ``` After testing the new revision at -`next.my-service.default.mydomain.com`, it can be rolled out to 100% -(either directly, or through several increments, with the split -totaling 100%): +`next.my-service.default.mydomain.com`, it can be promoted to live by +updating the service to pin `ghi` as the new revision. ```http -PATCH /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service +PATCH /apis/elafros.dev/v1alpha1/namespaces/default/services/my-service ``` ```yaml apiVersion: elafros.dev/v1alpha1 -kind: Route +kind: Service metadata: name: my-service spec: - rollout: - Traffic: # percentages must total 100% - - revisionName: def - name: current - percent: 0 - - revisionName: ghi - name: next - percent: 100 # migrate traffic fully to the next revision + pinned: + revisionname: ghi ``` -After reconciliation, all traffic has been shifted to the new version: +This causes the service to update the route to assign ```http -GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service +PATCH /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service ``` ```yaml apiVersion: elafros.dev/v1alpha1 -kind: Route +kind: route metadata: name: my-service - ... spec: - ... # unchanged -status: - domain: my-service.default.mydomain.com - traffic: - - revisionName: def - name: current - percent: 0 - - revisionName: ghi - name: next - percent: 100 - conditions: - - type: RolloutComplete - status: True - ... + rollout: + traffic: + - revisionName: ghi + name: current + percent: 100 + - configurationName: my-service # LatestReadyRevision of my-service + name: next + percent: 0 ``` -By convention, the final step when completing the rollout is to update -`current` to reflect the new revision. `next` can either be removed, or -left addressing the same revision as current so that +Once the update has been completed, if the latest ready revision is +the same as the pinned revision, the names `current` and `next` will +point to the same revision. Both names are left in place so that `next.my-service.default.mydomain.com` is always addressable. ```http -PATCH /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service +GET /apis/elafros.dev/v1alpha1/namespaces/default/routes/my-service ``` ```yaml apiVersion: elafros.dev/v1alpha1 @@ -677,6 +777,18 @@ spec: - revisionName: ghi # optional: leave next as also referring to ghi name: next percent: 0 +status: + domain: my-service.default.mydomain.com + traffic: + - revisionName: ghi + name: current # addressable as current.my-service.default.mydomain.com + percent: 100 + - revisionName: ghi + name: next # addressable as next.my-service.default.mydomain.com + percent: 0 + conditions: + - type: RolloutComplete + status: True ``` @@ -699,21 +811,22 @@ $ elafros deploy --service my-service **Steps**: -* Create/Update a Configuration, inlining build details. +* Create/Update the service, updating build source information and + using a new container label. **Results**: * The Configuration is created/updated, which generates a container - build and a new revision based on the template, and can be rolled + build and a new Revision based on the template, and can be rolled out per earlier examples ![Build Example](images/build_example.png) -Previous examples demonstrated configurations created with pre-built +Previous examples demonstrated services created with pre-built containers. Revisions can also be created by providing build -information to the configuration, which results in a container image -built by the system. The build information is supplied by inlining the +information to the service, which results in a container image built +by the system. The build information is supplied by inlining the BuildSpec of a Build resource in the Configuration. This describes: * **What** to build (`build.source`): Source can be provided as an @@ -727,47 +840,50 @@ BuildSpec of a Build resource in the Configuration. This describes: * **Where** to publish (`build.template.arguments`): Image registry url and other information specific to this build invocation. -The client creates the configuration inlining a build spec for an -archive based source build, and referencing a nodejs build template: +The client updates the configuration in the service inlining a build +spec for an git based source build, and referencing a nodejs build +template: ```http -POST /apis/elafros.dev/v1alpha1/namespaces/default/configurations +PATCH /apis/elafros.dev/v1alpha1/namespaces/default/service ``` ```yaml apiVersion: elafros.dev/v1alpha1 -kind: Configuration +kind: Service metadata: name: my-service spec: - build: # build.dev/v1alpha1.BuildTemplateSpec - source: - # oneof git|gcs|custom: - git: - url: https://... - commit: ... - template: # defines build template - name: nodejs_8_9_4 # builder name - namespace: build-templates - arguments: - - name: _IMAGE - value: gcr.io/... # destination for image - - revisionTemplate: # template for building Revision - metadata: ... - spec: - container: # k8s core.v1.Container - image: gcr.io/... # Promise of a future build. Same as supplied in - # build.template.arguments[_IMAGE] - env: # Updated environment variables to go live with new source. - - name: FOO - value: bar - - name: HELLO - value: world + runLatest: + configuration: + build: # elafros.dev/v1alpha1.BuildTemplateSpec + source: + # oneof git|gcs|custom: + git: + url: https://... + commit: ... + template: # defines build template + name: nodejs_8_9_4 # builder name + namespace: build-templates + arguments: + - name: _IMAGE + value: gcr.io/... # destination for image + + revisionTemplate: # template for building Revision + metadata: ... + spec: + container: # k8s core.v1.Container + image: gcr.io/... # Promise of a future build. Same as supplied in + # build.template.arguments[_IMAGE] + env: # Updated environment variables to go live with new source. + - name: FOO + value: bar + - name: HELLO + value: world ``` Note the `revisionTemplate.spec.container.image` above is supplied with the destination of the build. This enables one-step changes to -both config and source code. If the build step were responsible for +both environment and source code. If the build step were responsible for updating the `revisionTemplate.spec.container.image` at the completion of the build, an update to both source and config could result in the creation of two Revisions, one with the config change, and the other @@ -776,12 +892,14 @@ for the `buildName` to be complete and the `revisionTemplate.spec.container.image` to be live before marking the Revision as "ready". -Upon creating/updating the configuration's build field, the system -creates a new revision. The configuration controller will initiate a -build, populating the revision’s buildName with a reference to the -underlying Build resource. Via status updates which the revision -controller observes through the build reference, the high-level state -of the build is mirrored into conditions in the Revision’s status: +Upon creating/updating the service's configuration, the contents are +copied into the corresponding Configuration object. Once updated, the +configuration controller creates a new revision. The configuration +controller will also create a build, populating the revision’s +buildName with a reference to the underlying Build resource. The +revision controller watches status updates on the build reference, and +the high-level state of the build is mirrored into conditions in the +Revision’s status for convenience: ```http GET /apis/elafros.dev/v1alpha1/namespaces/default/revisions/abc @@ -797,7 +915,7 @@ metadata: elafros.dev/configurationGeneration: 1234 ... spec: - # name of the build.dev/v1alpha1.Build, if built from source. + # name of the elafros.dev/v1alpha1.Build, if built from source. # Set by Configuration. buildName: ... @@ -827,10 +945,12 @@ status: Rollout operations in the route are identical to the pre-built container examples. -Also analogous is updating the configuration to create a new -revision - in this case, updated source would be provided to the +Also analogous is creating the service from scratch with source +files - in this case, the source would be provided to the configuration's inlined build spec, which would initiate a new -container build, and the creation of a new revision. +container build, and the creation of a new revision. If the first +build fails `LatestReadyRevisionName` will be entirely unset until a +Revision is created which can become ready. ## 5) Deploy a Function @@ -851,7 +971,8 @@ $ elafros deploy --function index --service my-function **Steps**: -* Create/Update a Configuration, additionally specifying function details. +* Create/Update a service, specifying source code and function + details. **Results**: @@ -863,11 +984,12 @@ $ elafros deploy --function index --service my-function Previous examples illustrated creating and deploying revisions in the -context of apps. Functions are created and deployed in the same -manner (in particular, as containers which respond to HTTP). In the -build phase of the deployment, additional function metadata may be -taken into account in order to wrap the supplied code in a functions -framework. +context of application containers. Functions are created and deployed +in the same manner (in particular, as containers which respond to +HTTP). In the build phase of the deployment, additional function +metadata may be taken into account in order to wrap the supplied code +in a language-specific functions framework which translates from HTTP +to language-native constructs. Functions are configured with a language-specific entryPoint. The entryPoint may be provided as an argument to the build template, if @@ -880,53 +1002,56 @@ Note that a function may be connected to one or more event sources via Bindings in the Eventing API; the binding of events to functions is not a core function of the compute API. -Creating the configuration with build and function metadata: +Creating the service with build and function metadata: ```http -POST /apis/elafros.dev/v1alpha1/namespaces/default/configurations +POST /apis/elafros.dev/v1alpha1/namespaces/default/services ``` ```yaml apiVersion: elafros.dev/v1alpha1 -kind: Configuration +kind: Service metadata: name: my-function spec: - build: # build.dev/v1alpha1.BuildTemplateSpec - source: - # oneof git|gcs|custom - git: - url: https://... - commit: ... - template: # defines build template - name: go_1_9_fn # function builder - namespace: build-templates - arguments: - - name: _IMAGE - value: gcr.io/... # destination for image - - name: _ENTRY_POINT - value: index # language dependent, function-only entrypoint - - revisionTemplate: # template for building Revision - metadata: - labels: - # One-of "function" or "app", convention for CLI/UI clients to list/select - elafros.dev/type: "function" - spec: - container: # k8s core.v1.Container - image: gcr.io/... # Promise of a future build. Same as supplied in - # build.template.arguments[_IMAGE] - env: - - name: FOO - value: bar - - name: HELLO - value: world - - # serializes requests for function. Default value for functions - concurrencyModel: SingleThreaded - # max time allowed to respond to request - timeoutSeconds: 20 + runLatest: + configuration: + build: # elafros.dev/v1alpha1.BuildTemplateSpec + source: + # oneof git|gcs|custom + git: + url: https://... + commit: ... + template: # defines build template + name: go_1_9_fn # function builder + namespace: build-templates + arguments: + - name: _IMAGE + value: gcr.io/... # destination for image + - name: _ENTRY_POINT + value: index # language dependent, function-only entrypoint + + revisionTemplate: # template for building Revision + metadata: + labels: + # One-of "function" or "app", convention for CLI/UI clients to list/select + elafros.dev/type: "function" + spec: + container: # k8s core.v1.Container + image: gcr.io/... # Promise of a future build. Same as supplied in + # build.template.arguments[_IMAGE] + env: + - name: FOO + value: bar + - name: HELLO + value: world + + # serializes requests for function. Default value for functions + concurrencyModel: SingleThreaded + # max time allowed to respond to request + timeoutSeconds: 20 ``` -Upon creating or updating the configuration, a new Revision is created -per the previous examples. Rollout operations are also identical to -the previous examples. +Upon creating or updating the service, values are copied to the +configuration, which causes a new Revision to be created per the +previous examples. Rollout operations are also identical to the +previous examples. diff --git a/docs/spec/overview.md b/docs/spec/overview.md index edc05cd9ea9f..1fd68351378f 100644 --- a/docs/spec/overview.md +++ b/docs/spec/overview.md @@ -1,6 +1,7 @@ # Resource Types -The primary resources in the Elafros API are Routes, Revisions, and Configurations: +The primary resources in the Elafros API are Routes, Revisions, +Configurations, and Services: * A **Route** provides a named endpoint and a mechanism for routing traffic to @@ -8,6 +9,9 @@ The primary resources in the Elafros API are Routes, Revisions, and Configuratio * **Configuration**, which acts as a stream of environments for Revisions. +* **Service** acts as a top-level container for managing the set of + Routes and Configurations which implement a network service. + ![Object model](images/object_model.png) ## Route @@ -56,6 +60,17 @@ Configuration's controller will track the status of created Revisions and makes both the most recently created and most recently *ready* (i.e. healthy) Revision available in the status section. +## Service + +A **Service** encapsulates a set of **Routes** and **Configurations** +which together provide a software component. Service exists to provide +a singular abstraction which can be access controlled, reasoned about, +and which encapsulates software lifecycle decisions such as rollout +policy and team resource ownership. Service acts only as an +orchestrator of the underlying Routes and Configurations (much as a +kubernetes Deployment orchestrates ReplicaSets), and its usage is +optional but recommended. + # Orchestration @@ -73,9 +88,10 @@ is created or updated. This provides: in optimistic concurrency errors * the ability to rollback to a known good configuration -In the conventional single live revision scenario, a route has a -single configuration with the same name as the route. Update -operations on the configuration enable scenarios such as: +In the conventional single live revision scenario, a service creates +both a route and a configuration with the same name as the +service. Update operations on the service enable scenarios such +as: * *"Push code, keep config":* Specifying a new revision with updated source, inheriting configuration such as env vars from the @@ -83,10 +99,12 @@ operations on the configuration enable scenarios such as: * *"Update config, keep code"*: Specifying a new revision as just a change to configuration, such as updating an env variable, inheriting all other configuration and source/image. - -When creating an initial route and performing the first deployment, -the two operations of creating a Route and an associated Configuration -can be done in parallel, which streamlines the use case of deploying -code initially from a button. The -[sample API usage](normative_examples.md) section illustrates -conventional usage of the API. +* *"Execute a manual rollout"*: Updating the service when in pinned + rollout mode allows manual testing of a revision before making it + live. + +Using a Service object to orchestrate the creation a both route and +configuration allows deployment of code (e.g. from a github button) to +avoid needing to reason about sequencing and failure modes of parallel +resource creation. The [sample API usage](normative_examples.md) +section illustrates conventional usage of the API. diff --git a/docs/spec/spec.md b/docs/spec/spec.md index 0373b527ed4c..fe2e2cdc5600 100644 --- a/docs/spec/spec.md +++ b/docs/spec/spec.md @@ -119,7 +119,7 @@ metadata: ... spec: # +optional. composable Build spec, if omitted provide image directly - build: # This is a build.dev/v1alpha1.BuildTemplateSpec + build: # This is a elafros.dev/v1alpha1.BuildTemplateSpec source: # oneof git|gcs|custom: @@ -188,7 +188,7 @@ spec: serviceAccountName: ... # Name of the service account the code should run as. status: - # the latest created and ready to serve. Watched by route + # the latest created and ready to serve. Watched by Route latestReadyRevisionName: abc # latest created revision, may still be in the process of being materialized latestCreatedRevisionName: def @@ -227,7 +227,7 @@ metadata: # spec populated by Configuration spec: - # +optional. name of the build.dev/v1alpha1.Build if built from source + # +optional. name of the elafros.dev/v1alpha1.Build if built from source buildName: ... container: # corev1.Container @@ -286,3 +286,94 @@ status: ``` +## Service + +For a high-level description of Services, +[see the overview](overview.md#service). + + +```yaml +apiVersion: elafros.dev/v1alpha1 +kind: : +metadata: + name: myservice + namespace: default + labels: + elafros.dev/type: "function" # convention, one of "function" or "app" + # system generated meta + uid: ... +  resourceVersion: ... # used for optimistic concurrency control +  creationTimestamp: ... +  generation: ... +  selfLink: ... + ... + +# spec contains one of several possible rollout styles +spec: # One of "runLatest" or "pinned" + # Example, only one of runLatest or pinned can be set in practice. + runLatest: + configuration: # elafros.dev/v1alpha1.Configuration + # +optional. name of the elafros.dev/v1alpha1.Build if built from source + buildName: ... + + container: # core.v1.Container + image: gcr.io/... + command: ['run'] + args: [] + env: # list of environment vars + - name: FOO + value: bar + - name: HELLO + value: world + - ... + livenessProbe: ... # Optional + readinessProbe: ... # Optional + concurrencyModel: ... + timeoutSeconds: ... + serviceAccountName: ... # Name of the service account the code should run as + # Example, only one of runLatest or pinned can be set in practice. + pinned: + revisionName: myservice-00013 # Auto-generated revision name + configuration: # elafros.dev/v1alpha1.Configuration + # +optional. name of the elafros.dev/v1alpha1.Build if built from source + buildName: ... + + container: # core.v1.Container + image: gcr.io/... + command: ['run'] + args: [] + env: # list of environment vars + - name: FOO + value: bar + - name: HELLO + value: world + - ... + livenessProbe: ... # Optional + readinessProbe: ... # Optional + concurrencyModel: ... + timeoutSeconds: ... + serviceAccountName: ... # Name of the service account the code should run as +status: + # This information is copied from the owned Configuration and Route. + + # The latest created and ready to serve Revision. + latestReadyRevisionName: abc + # Latest created Revision, may still be in the process of being materialized. + latestCreatedRevisionName: def + + # domain: The hostname used to access the default (traffic-split) + # route. Typically, this will be composed of the name and namespace + # along with a cluster-specific prefix (here, mydomain.com). + domain: my-service.default.mydomain.com + + conditions: # See also the documentation in errors.md + - type: Ready + status: True + message: "Revision starting" + - type: LatestRevisionReady + status: False + reason: ContainerMissing + message: "Unable to start because container is missing and build failed." + + observedGeneration: ... # last generation being reconciled +```