docs/archived/v0.23-docs/serving/spec/knative-api-specification-1.0/index.html

4628 lines
158 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="generator" content="Hugo 0.79.0" />
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
<link rel="shortcut icon" href="../../../../images/favicon.ico" >
<title>Knative</title><meta property="og:title" content="" />
<meta property="og:description" content="Knative Serving API Specification Authors: argent@google.com, dangerd@google.com
Status
APPROVED
Created
2019-06-24
Last Updated
2019-11-04
Version
1.0.1 Abstract The Knative serving platform provides common abstractions for managing request-driven, short-lived, stateless compute resources in the style of common FaaS and PaaS offerings. This document describes the structure, lifecycle and management of Knative resources in the context of the Kubernetes Resource Model." />
<meta property="og:type" content="article" />
<meta property="og:url" content="/docs/serving/spec/knative-api-specification-1.0/" />
<meta property="og:site_name" content="Knative" />
<meta itemprop="name" content="">
<meta itemprop="description" content="Knative Serving API Specification Authors: argent@google.com, dangerd@google.com
Status
APPROVED
Created
2019-06-24
Last Updated
2019-11-04
Version
1.0.1 Abstract The Knative serving platform provides common abstractions for managing request-driven, short-lived, stateless compute resources in the style of common FaaS and PaaS offerings. This document describes the structure, lifecycle and management of Knative resources in the context of the Kubernetes Resource Model.">
<meta itemprop="wordCount" content="5550">
<meta itemprop="keywords" content="" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content=""/>
<meta name="twitter:description" content="Knative Serving API Specification Authors: argent@google.com, dangerd@google.com
Status
APPROVED
Created
2019-06-24
Last Updated
2019-11-04
Version
1.0.1 Abstract The Knative serving platform provides common abstractions for managing request-driven, short-lived, stateless compute resources in the style of common FaaS and PaaS offerings. This document describes the structure, lifecycle and management of Knative resources in the context of the Kubernetes Resource Model."/>
<link rel="preload" href="../../../../scss/main.min.55f9aa1020e57c0c5965eed65d8bf9dea2817d71343be24052c85f2eafd24fd9.css" as="style">
<link href="../../../../scss/main.min.55f9aa1020e57c0c5965eed65d8bf9dea2817d71343be24052c85f2eafd24fd9.css" rel="stylesheet" integrity="">
<script
src="https://code.jquery.com/jquery-3.5.1.min.js"
integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
crossorigin="anonymous"></script>
<meta name="google-site-verification" content="knbzameE514X1-2MyT4a18Bzc49Jbzdd7NipLte_9A8" />
<script src="../../../../js/cookie-consent.js"></script>
<script src="../../../../js/script.js"></script>
<title>Knative</title>
</head>
<body class="td-page">
<header>
<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
<a class="navbar-brand" href="../../../../">
<span class="navbar-logo"><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="62.23mm" height="50.292mm" viewBox="0 0 62.23 50.292" id="svg8" inkscape:version="0.92.2pre0 (973e216, 2017-07-25)" sodipodi:docname="logo.svg" style="enable-background:new"><defs id="defs2"/><sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom=".35" inkscape:cx="-33.828568" inkscape:cy="-367.81715" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1920" inkscape:window-height="1141" inkscape:window-x="0" inkscape:window-y="161" inkscape:window-maximized="1"/><g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" style="display:inline;opacity:1" transform="translate(-0.63499904,-1.2230464)"><image y="1.2230464" x=".63499904" id="image18" xlink:href="data:image/png;base64,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" preserveAspectRatio="none" height="50.292" width="62.23"/></g></svg> </span>
<span class="brand-name font-weight-bold">Knative</span>
</a>
<div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
<ul class="navbar-nav mt-2 mt-lg-0">
<li class="nav-item dropdown d-none d-lg-block">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="d-none d-lg-inline d-xl-inline active">Local Preview Build: v0.19</span>
<span class="d-sm-inline d-md-inline d-lg-none d-xl-none">Local Preview Build: v0.19</span>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a
class="dropdown-item active"
style="" href="../../../../docs/">v0.19</a>
</div>
</li>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class="nav-link" href="../../../../blog/"><span>Blog</span></a>
<li class="nav-item mr-4 mb-2 mb-lg-0">
<a class="nav-link" href="../../../../community/"><span>Community</span></a>
</ul>
</div>
<div class="navbar-nav d-none d-xl-block">
</div>
</nav>
<section lang="en" id="announcement">
<h4>Black lives matter.</h4>
<p>We stand in solidarity with the Black community.<br>
<strong>Racism is unacceptable.</strong><br>
It conflicts with the <a href=https://github.com/knative/community/blob/master/VALUES.md>core values of the Knative project</a> and our community does not tolerate it.</p>
</section>
</header>
<div class="container-fluid td-outer">
<div class="td-main main-docs">
<div class="row flex-xl-nowrap">
<div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
<div id="td-sidebar-menu" class="td-sidebar__inner">
<form class="td-sidebar__search d-flex align-items-center">
<button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
</button>
</form>
<nav class="collapse td-sidebar-nav pt-2 pl-4" id="td-section-nav">
<div class="nav-item dropdown d-block d-lg-none">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="d-none d-lg-inline d-xl-inline active">Local Preview Build: v0.19</span>
<span class="d-sm-inline d-md-inline d-lg-none d-xl-none">Local Preview Build: v0.19</span>
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a
class="dropdown-item active"
style="" href="../../../../docs/">v0.19</a>
</div>
</div>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Documentation</a>
</li>
<ul>
<li class="collapse show" id="docs">
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/install/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Installing Knative</a>
</li>
<ul>
<li class="collapse " id="docsinstall">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsinstallany-kubernetes-cluster" href="../../../../docs/install/any-kubernetes-cluster/">Installing Knative</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsinstallknative-with-operators" href="../../../../docs/install/knative-with-operators/">Installing Knative components using Operator</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsinstallinstall-kn" href="../../../../docs/install/install-kn/">Installing the Knative CLI</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsinstallinstalling-istio" href="../../../../docs/install/installing-istio/">Installing Istio for Knative</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsinstallcheck-install-version" href="../../../../docs/install/check-install-version/">Checking your install version</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsinstalloperatorconfiguring-serving-cr" href="../../../../docs/install/operator/configuring-serving-cr/">Configuring the Serving Operator Custom Resource</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsinstallupgrade-installation" href="../../../../docs/install/upgrade-installation/">Upgrading your installation</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsinstalloperatorconfiguring-eventing-cr" href="../../../../docs/install/operator/configuring-eventing-cr/">Configuring the Eventing Operator Custom Resource</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsclientconnecting-kn-to-your-cluster" href="../../../../docs/client/connecting-kn-to-your-cluster/">Connecting to your cluster</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsknative-offerings" href="../../../../docs/knative-offerings/">Knative Offerings</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/serving/" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">Serving Component</a>
</li>
<ul>
<li class="collapse show" id="docsserving">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservinggetting-started-knative-app" href="../../../../docs/serving/getting-started-knative-app/">Getting started</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingknative-kubernetes-services" href="../../../../docs/serving/knative-kubernetes-services/">Knative Kubernetes Services</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingcustom-metrics-api" href="../../../../docs/serving/custom-metrics-api/">Custom-metrics API</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingdeployingprivate-registry" href="../../../../docs/serving/deploying/private-registry/">Deploying from private registries</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/serving/services/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Services</a>
</li>
<ul>
<li class="collapse " id="docsservingservices">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingservicesdeployment" href="../../../../docs/serving/services/deployment/">Deployment Configuration</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingservicescreating-services" href="../../../../docs/serving/services/creating-services/">Creating Knative services</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingaccessing-traces" href="../../../../docs/serving/accessing-traces/">Accessing request traces</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/serving/autoscaling/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Autoscaling</a>
</li>
<ul>
<li class="collapse " id="docsservingautoscaling">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingautoscaling-concepts" href="../../../../docs/serving/autoscaling/autoscaling-concepts/">Autoscaling concepts</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingautoscaling-metrics" href="../../../../docs/serving/autoscaling/autoscaling-metrics/">Metrics</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingautoscaling-targets" href="../../../../docs/serving/autoscaling/autoscaling-targets/">Targets</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingscale-to-zero" href="../../../../docs/serving/autoscaling/scale-to-zero/">Configuring scale to zero</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingconcurrency" href="../../../../docs/serving/autoscaling/concurrency/">Configuring concurrency</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingscale-bounds" href="../../../../docs/serving/autoscaling/scale-bounds/">Configuring scale bounds</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingtarget-burst-capacity" href="../../../../docs/serving/autoscaling/target-burst-capacity/">Configuring target burst capacity</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingrps-target" href="../../../../docs/serving/autoscaling/rps-target/">Configuring the requests per second (RPS) target</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingkpa-specific" href="../../../../docs/serving/autoscaling/kpa-specific/">Additional autoscaling configuration for Knative Pod Autoscaler</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingautoscalingautoscale-go" href="../../../../docs/serving/autoscaling/autoscale-go/">Autoscale Sample App - Go</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingcluster-local-route" href="../../../../docs/serving/cluster-local-route/">Configuring cluster-local services</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingusing-subroutes" href="../../../../docs/serving/using-subroutes/">Creating and using Subroutes</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingdebugging-application-issues" href="../../../../docs/serving/debugging-application-issues/">Debugging issues with your application</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingistio-authorization" href="../../../../docs/serving/istio-authorization/">Enabling requests to Knative services when additional authorization policies are enabled</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservinggke-assigning-static-ip-address" href="../../../../docs/serving/gke-assigning-static-ip-address/">Assigning static IPs - GKE</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingconfig-ha" href="../../../../docs/serving/config-ha/">Configuring high-availability components</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingfeature-flags" href="../../../../docs/serving/feature-flags/">Feature/Extension Flags</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsetting-up-custom-ingress-gateway" href="../../../../docs/serving/setting-up-custom-ingress-gateway/">Configuring the ingress gateway</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingusing-a-custom-domain" href="../../../../docs/serving/using-a-custom-domain/">Setting up a custom domain</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingusing-a-custom-domain-per-service" href="../../../../docs/serving/using-a-custom-domain-per-service/">Setting up a custom domain per Service</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingusing-a-tls-cert" href="../../../../docs/serving/using-a-tls-cert/">Configuring HTTPS connections</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservinginstalling-cert-manager" href="../../../../docs/serving/installing-cert-manager/">Installing cert-manager</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingusing-cert-manager-on-gcp" href="../../../../docs/serving/using-cert-manager-on-gcp/">Configuring HTTPS with Cloud DNS</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingcreating-domain-mappings" href="../../../../docs/serving/creating-domain-mappings/">Creating Domain Mappings (Alpha)</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingusing-auto-tls" href="../../../../docs/serving/using-auto-tls/">Enabling auto TLS certs</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingwebhook-customizations" href="../../../../docs/serving/webhook-customizations/">Exclude namespaces from the Knative webhook</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingusing-external-dns-on-gcp" href="../../../../docs/serving/using-external-dns-on-gcp/">Using ExternalDNS on Google Cloud Platform to automate DNS setup</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingtag-resolution" href="../../../../docs/serving/tag-resolution/">Tag resolution</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/serving/samples/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Code samples</a>
</li>
<ul>
<li class="collapse " id="docsservingsamples">
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/serving/samples/multi-container/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">A simple golang web app</a>
</li>
<ul>
<li class="collapse " id="docsservingsamplesmulti-container">
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/serving/samples/cloudevents/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Cloud Events apps</a>
</li>
<ul>
<li class="collapse " id="docsservingsamplescloudevents">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplescloudeventscloudevents-dotnet" href="../../../../docs/serving/samples/cloudevents/cloudevents-dotnet/">.NET</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplescloudeventscloudevents-go" href="../../../../docs/serving/samples/cloudevents/cloudevents-go/">Go</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplescloudeventscloudevents-vertx" href="../../../../docs/serving/samples/cloudevents/cloudevents-vertx/">Java and Vert.x</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplescloudeventscloudevents-nodejs" href="../../../../docs/serving/samples/cloudevents/cloudevents-nodejs/">Node.js</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplescloudeventscloudevents-rust" href="../../../../docs/serving/samples/cloudevents/cloudevents-rust/">Rust</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplesgitwebhook-go" href="../../../../docs/serving/samples/gitwebhook-go/">GitHub Webhook - Go</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplesgrpc-ping-go" href="../../../../docs/serving/samples/grpc-ping-go/">gRPC Server - Go</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/serving/samples/hello-world/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Hello world apps</a>
</li>
<ul>
<li class="collapse " id="docsservingsampleshello-world">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-csharp" href="../../../../docs/serving/samples/hello-world/helloworld-csharp/">.NET</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-go" href="../../../../docs/serving/samples/hello-world/helloworld-go/">Go</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-java-spark" href="../../../../docs/serving/samples/hello-world/helloworld-java-spark/">Java (Spark)</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-java-spring" href="../../../../docs/serving/samples/hello-world/helloworld-java-spring/">Java (Spring)</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-kotlin" href="../../../../docs/serving/samples/hello-world/helloworld-kotlin/">Kotlin</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-nodejs" href="../../../../docs/serving/samples/hello-world/helloworld-nodejs/">Node.js</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-php" href="../../../../docs/serving/samples/hello-world/helloworld-php/">PHP</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-python" href="../../../../docs/serving/samples/hello-world/helloworld-python/">Python</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-ruby" href="../../../../docs/serving/samples/hello-world/helloworld-ruby/">Ruby</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-scala" href="../../../../docs/serving/samples/hello-world/helloworld-scala/">Scala</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsampleshello-worldhelloworld-shell" href="../../../../docs/serving/samples/hello-world/helloworld-shell/">Shell</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplesrest-api-go" href="../../../../docs/serving/samples/rest-api-go/">RESTful service - Go</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplesknative-routing-go" href="../../../../docs/serving/samples/knative-routing-go/">Routing services - Go</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplessecrets-go" href="../../../../docs/serving/samples/secrets-go/">Secrets - Go</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplestag-header-based-routing" href="../../../../docs/serving/samples/tag-header-based-routing/">Tag Header Based Routing</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplestraffic-splitting" href="../../../../docs/serving/samples/traffic-splitting/">Traffic splitting</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsservingsamplesblue-green-deployment" href="../../../../docs/serving/samples/blue-green-deployment/">Routing and managing traffic</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page active" id="m-docsservingspecknative-api-specification-10" href="../../../../docs/serving/spec/knative-api-specification-1.0/"></a>
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Eventing Component</a>
</li>
<ul>
<li class="collapse " id="docseventing">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventinggetting-started" href="../../../../docs/eventing/getting-started/">Getting started</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/sources/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Event sources</a>
</li>
<ul>
<li class="collapse " id="docseventingsources">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsourcesapiserversource" href="../../../../docs/eventing/sources/apiserversource/">APIServerSource</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsourcescontainersource" href="../../../../docs/eventing/sources/containersource/">ContainerSource</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsourcespingsource" href="../../../../docs/eventing/sources/pingsource/">PingSource</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsourcessinkbinding" href="../../../../docs/eventing/sources/sinkbinding/">SinkBinding</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingevent-registry" href="../../../../docs/eventing/event-registry/">Event registry</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/flows/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Flows</a>
</li>
<ul>
<li class="collapse " id="docseventingflows">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingflowsparallel" href="../../../../docs/eventing/flows/parallel/">Parallel</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingflowssequence" href="../../../../docs/eventing/flows/sequence/">Sequence</a>
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/channels/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Channels</a>
</li>
<ul>
<li class="collapse " id="docseventingchannels">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingchannelsdefault-channels" href="../../../../docs/eventing/channels/default-channels/">Default channels</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingchannelschannels-crds" href="../../../../docs/eventing/channels/channels-crds/">Available Channels</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingevent-delivery" href="../../../../docs/eventing/event-delivery/">Event delivery</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/broker/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Broker</a>
</li>
<ul>
<li class="collapse " id="docseventingbroker">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingbrokerkafka-broker" href="../../../../docs/eventing/broker/kafka-broker/">Apache Kafka Broker</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingbrokerconfig-br-defaults" href="../../../../docs/eventing/broker/config-br-defaults/">Default Broker ConfigMap</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingbrokerkafka-configmap" href="../../../../docs/eventing/broker/kafka-configmap/">Kafka Channel ConfigMap</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/broker/alternate/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Alternate Brokers</a>
</li>
<ul>
<li class="collapse " id="docseventingbrokeralternate">
</li>
</ul>
</ul>
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/triggers/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Triggers</a>
</li>
<ul>
<li class="collapse " id="docseventingtriggers">
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingdebugging" href="../../../../docs/eventing/debugging/">Debugging</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingaccessing-traces" href="../../../../docs/eventing/accessing-traces/">Accessing CloudEvent traces</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Code samples</a>
</li>
<ul>
<li class="collapse " id="docseventingsamples">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplesapache-camel-source" href="../../../../docs/eventing/samples/apache-camel-source/">Camel source</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/kafka/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Apache Kafka</a>
</li>
<ul>
<li class="collapse " id="docseventingsampleskafka">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleskafkabinding" href="../../../../docs/eventing/samples/kafka/binding/">Binding Example</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleskafkachannel" href="../../../../docs/eventing/samples/kafka/channel/">Channel Example</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleskafkasource" href="../../../../docs/eventing/samples/kafka/source/">Source Example</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplescontainer-source" href="../../../../docs/eventing/samples/container-source/">Container source</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/writing-event-source-easy-way/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Event Source - easy way</a>
</li>
<ul>
<li class="collapse " id="docseventingsampleswriting-event-source-easy-way">
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/helloworld/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Hello World</a>
</li>
<ul>
<li class="collapse " id="docseventingsampleshelloworld">
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/helloworld/helloworld-go/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">GO</a>
</li>
<ul>
<li class="collapse " id="docseventingsampleshelloworldhelloworld-go">
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/helloworld/helloworld-python/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Python</a>
</li>
<ul>
<li class="collapse " id="docseventingsampleshelloworldhelloworld-python">
</li>
</ul>
</ul>
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/parallel/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Parallel</a>
</li>
<ul>
<li class="collapse " id="docseventingsamplesparallel">
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/parallel/multiple-branches/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Multiple Cases</a>
</li>
<ul>
<li class="collapse " id="docseventingsamplesparallelmultiple-branches">
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/parallel/mutual-exclusivity/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Mutual Exclusivity</a>
</li>
<ul>
<li class="collapse " id="docseventingsamplesparallelmutual-exclusivity">
</li>
</ul>
</ul>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplesping-source" href="../../../../docs/eventing/samples/ping-source/">PingSource</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/sequence/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Sequences</a>
</li>
<ul>
<li class="collapse " id="docseventingsamplessequence">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplessequencesequence-terminal" href="../../../../docs/eventing/samples/sequence/sequence-terminal/">Create additional events</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplessequencesequence-reply-to-event-display" href="../../../../docs/eventing/samples/sequence/sequence-reply-to-event-display/">Displaying sequence output</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplessequencesequence-reply-to-sequence" href="../../../../docs/eventing/samples/sequence/sequence-reply-to-sequence/">Using Sequences in series</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplessequencesequence-with-broker-trigger" href="../../../../docs/eventing/samples/sequence/sequence-with-broker-trigger/">Using with Broker and Trigger</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplessinkbinding" href="../../../../docs/eventing/samples/sinkbinding/">Sink Binding</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplescloud-audit-logs-source" href="../../../../docs/eventing/samples/cloud-audit-logs-source/">CloudAuditLogsSource</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplescloud-pubsub-source" href="../../../../docs/eventing/samples/cloud-pubsub-source/">CloudPubSubSource</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplescloud-scheduler-source" href="../../../../docs/eventing/samples/cloud-scheduler-source/">CloudSchedulerSource</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplescloud-storage-source" href="../../../../docs/eventing/samples/cloud-storage-source/">CloudStorageSource</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplesgithub-source" href="../../../../docs/eventing/samples/github-source/">GitHub source</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplesgitlab-source" href="../../../../docs/eventing/samples/gitlab-source/">GitLab source</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsamplesiot-core" href="../../../../docs/eventing/samples/iot-core/">IoT core</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleskubernetes-event-source" href="../../../../docs/eventing/samples/kubernetes-event-source/">Kubernetes event</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/eventing/samples/writing-event-source/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Writing an Event Source</a>
</li>
<ul>
<li class="collapse " id="docseventingsampleswriting-event-source">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleswriting-event-source01-theory" href="../../../../docs/eventing/samples/writing-event-source/01-theory/">Design of an Event Source</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleswriting-event-source07-knative-sandbox" href="../../../../docs/eventing/samples/writing-event-source/07-knative-sandbox/">Moving to knative-sandbox</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleswriting-event-source02-lifecycle-and-types" href="../../../../docs/eventing/samples/writing-event-source/02-lifecycle-and-types/">Lifecycle and Types</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleswriting-event-source03-controller" href="../../../../docs/eventing/samples/writing-event-source/03-controller/">Controller Implemetation</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleswriting-event-source04-reconciler" href="../../../../docs/eventing/samples/writing-event-source/04-reconciler/">Reconciler Implementation</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleswriting-event-source05-receive-adapter" href="../../../../docs/eventing/samples/writing-event-source/05-receive-adapter/">Receive Adapter Implementation</a>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docseventingsampleswriting-event-source06-yaml" href="../../../../docs/eventing/samples/writing-event-source/06-yaml/">Publishing to your cluster</a>
</li>
</ul>
</ul>
</li>
</ul>
</ul>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docssamples" href="../../../../docs/samples/">Code samples</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/concepts/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Concepts</a>
</li>
<ul>
<li class="collapse " id="docsconcepts">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsconceptsoverview" href="../../../../docs/concepts/overview/">Overview</a>
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/reference/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Reference</a>
</li>
<ul>
<li class="collapse " id="docsreference">
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/reference/relnotes/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Release notes</a>
</li>
<ul>
<li class="collapse " id="docsreferencerelnotes">
</li>
</ul>
</ul>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/reference/api/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">API</a>
</li>
<ul>
<li class="collapse " id="docsreferenceapi">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsreferenceapiserving-api" href="../../../../docs/reference/api/serving-api/">Serving API</a>
<ul class="td-sidebar-nav__section pr-md-3">
<li class="td-sidebar-nav__section-title">
<a href="../../../../docs/reference/api/eventing/" class="align-left pl-0 pr-2 collapsed td-sidebar-link td-sidebar-link__section">Eventing API</a>
</li>
<ul>
<li class="collapse " id="docsreferenceapieventing">
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsreferenceapieventingeventing-contrib-api" href="../../../../docs/reference/api/eventing/eventing-contrib-api/">Eventing-contrib API</a>
</li>
</ul>
</ul>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docsreferenceresources" href="../../../../docs/reference/resources/">Additional resources</a>
</li>
</ul>
</ul>
<a class="td-sidebar-link td-sidebar-link__page " id="m-docssmoketest" href="../../../../docs/smoketest/"></a>
</li>
</ul>
</ul>
</nav>
</div>
</div>
<div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
<div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
<a href="https://github.com/knative/docs/tree/master/docs/serving/spec/knative-api-specification-1.0.md" target="_blank" rel="noopener noreferrer"><i class="fa fa-edit fa-fw"></i> View/Edit this page</a>
<a href="https://github.com/knative/docs/issues/new?title=%28docs/serving/spec/knative-api-specification-1.0.md%29&amp;labels=kind%25!F%28MISSING%29bug&amp;template=bug-in-existing-docs.md" target="_blank" rel="noopener noreferrer"><i class="fab fa-github fa-fw"></i> Create documentation issue</a>
<a href="https://github.com/knative/serving/issues/new" target="_blank"><i class="fab fa-github fa-fw"></i> Create project issue</a>
</div>
<nav id="TableOfContents">
<ul>
<li><a href="#knative-serving-api-specification">Knative Serving API Specification</a></li>
<li><a href="#abstract">Abstract</a></li>
<li><a href="#background">Background</a></li>
<li><a href="#rbac-profile">RBAC Profile</a></li>
<li><a href="#resource-overview">Resource Overview</a>
<ul>
<li><a href="#service">Service</a></li>
<li><a href="#revision">Revision</a></li>
<li><a href="#route">Route</a></li>
<li><a href="#configuration">Configuration</a></li>
</ul>
</li>
<li><a href="#error-signalling">Error Signalling</a></li>
<li><a href="#resource-lifecycle">Resource Lifecycle</a>
<ul>
<li></li>
<li><a href="#service-1">Service</a></li>
<li><a href="#configuration-1">Configuration</a></li>
<li><a href="#revision-1">Revision</a></li>
<li><a href="#route-1">Route</a></li>
</ul>
</li>
<li><a href="#request-routing">Request Routing</a></li>
<li><a href="#detailed-resources--v1">Detailed Resources v1</a>
<ul>
<li><a href="#service-2">Service</a></li>
<li><a href="#configuration-2">Configuration</a></li>
<li><a href="#route-2">Route</a></li>
<li><a href="#revision-2">Revision</a></li>
</ul>
</li>
<li><a href="#detailed-resource-types---v1">Detailed Resource Types - v1</a>
<ul>
<li><a href="#containerstatuses">ContainerStatuses</a></li>
<li><a href="#traffictarget">TrafficTarget</a></li>
<li><a href="#revisiontemplatespec">RevisionTemplateSpec</a></li>
<li><a href="#container">Container</a></li>
<li><a href="#envvar">EnvVar</a></li>
<li><a href="#envvarsource">EnvVarSource</a></li>
<li><a href="#configmapkeyselector">ConfigMapKeySelector</a></li>
<li><a href="#secretkeyselector">SecretKeySelector</a></li>
<li><a href="#probe">Probe</a></li>
<li><a href="#envfromsource">EnvFromSource</a></li>
<li><a href="#execaction">ExecAction</a></li>
<li><a href="#httpgetaction">HTTPGetAction</a></li>
<li><a href="#tcpsocketaction">TCPSocketAction</a></li>
<li><a href="#httpheader">HTTPHeader</a></li>
<li><a href="#containerport">ContainerPort</a></li>
<li><a href="#configmapenvsource">ConfigMapEnvSource</a></li>
<li><a href="#secretenvsource">SecretEnvSource</a></li>
<li><a href="#resourcerequirements">ResourceRequirements</a></li>
<li><a href="#securitycontext">SecurityContext</a></li>
<li><a href="#volumemount">VolumeMount</a></li>
<li><a href="#volume">Volume</a></li>
<li><a href="#configmapvolumesource">ConfigMapVolumeSource</a></li>
<li><a href="#secretvolumesource">SecretVolumeSource</a></li>
<li><a href="#projectedvolumesource">ProjectedVolumeSource</a></li>
<li><a href="#keytopath">KeyToPath</a></li>
<li><a href="#volumeprojection">VolumeProjection</a></li>
<li><a href="#configmapprojection">ConfigMapProjection</a></li>
<li><a href="#secretprojection">SecretProjection</a></li>
<li><a href="#addressablehttpsgithubcomknativepkgblobmasterapisduckv1addressable_typesgo-interface"><a href="https://github.com/knative/pkg/blob/master/apis/duck/v1/addressable_types.go">Addressable</a> (Interface)</a></li>
<li><a href="#localobjectreference">LocalObjectReference</a></li>
</ul>
</li>
</ul>
</nav>
</div>
<main class="col-12 col-md-9 col-xl-8 pl-md-5" role="main">
<nav aria-label="breadcrumb" class="d-none d-md-block d-print-none">
<ol class="breadcrumb spb-1">
<li class="breadcrumb-item" >
<a href="../../../../docs/">Documentation</a>
</li>
<li class="breadcrumb-item" >
<a href="../../../../docs/serving/">Serving Component</a>
</li>
<li class="breadcrumb-item active" aria-current="page">
<a href="../../../../docs/serving/spec/knative-api-specification-1.0/"></a>
</li>
</ol>
</nav >
<div class="td-content">
<h1></h1>
<h1 id="knative-serving-api-specification">Knative Serving API Specification</h1>
<p>Authors: <a href="mailto:argent@google.com">argent@google.com</a>,
<a href="mailto:dangerd@google.com">dangerd@google.com</a></p>
<table>
<tr>
<td><p style="text-align: right">
<strong>Status</strong></p>
</td>
<td><p style="text-align: right">
APPROVED</p>
</td>
</tr>
<tr>
<td><p style="text-align: right">
<strong>Created</strong></p>
</td>
<td><p style="text-align: right">
2019-06-24</p>
</td>
</tr>
<tr>
<td><p style="text-align: right">
<strong>Last Updated</strong></p>
</td>
<td><p style="text-align: right">
2019-11-04</p>
</td>
</tr>
<tr>
<td><p style="text-align: right">
<strong>Version</strong></p>
</td>
<td> 1.0.1 </td>
</tr>
</table>
<h1 id="abstract">Abstract</h1>
<p>The Knative serving platform provides common abstractions for managing
request-driven, short-lived, stateless compute resources in the style of common
FaaS and PaaS offerings. This document describes the structure, lifecycle and
management of Knative resources in the context of the
<a href="https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/resource-management.md">Kubernetes Resource Model</a>.
An understanding of the Kubernetes API interface and the capabilities of
<a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/">Kubernetes Custom Resources</a>
is assumed. The Knative Serving API surface aims to support the following
additional constraints beyond the general Kubernetes model:</p>
<ul>
<li>Client-side orchestration should not be required for common operations such as
deployment, rollback, or simple imperative updates (&ldquo;change environment
variable X&rdquo;).</li>
<li>Both declarative (aka GitOps) and imperative (command-driven) management of
resources should be usable, though not on the same resources at the same time.
(I.e. one application may use a checked-in configuration which is
automatically pushed, while a different application may be pushed and updated
by hand with the authoritative state living on the server.)</li>
<li>Developers can effectively use the Knative Serving stack without needing to
engage beyond the core Knative resource model. Conversely, platform operators
may restrict developers (e.g. via RBAC) to only be able to operate on the core
Knative Serving resources, and may provide additional abstractions to manage
platform-specific settings.</li>
<li>The Knative Serving API may be deployed in a single-tenant or multi-tenant
environment; it is assumed that developers may not have access to multiple
namespaces or any cluster-level resources.</li>
</ul>
<p>This document does not define the
<a href="https://github.com/knative/serving/blob/master/docs/runtime-contract.md">runtime contract (see this document)</a>
nor prescribe specific implementations of supporting services such as access
control, observability, or resource management.</p>
<p>This document makes reference in a few places to different profiles for Knative
Serving installations. A profile in this context is a set of operations,
resources, and fields that are accessible to a developer interacting with a
Knative installation. Currently, only a single (minimal) profile for Knative
Serving is defined, but additional profiles may be defined in the future to
standardize advanced functionality. A minimal profile is one that implements all
of the &ldquo;MUST&rdquo;, &ldquo;MUST NOT&rdquo;, and &ldquo;REQUIRED&rdquo; conditions of this document.</p>
<h1 id="background">Background</h1>
<p>The key words &ldquo;MUST&rdquo;, &ldquo;MUST NOT&rdquo;, &ldquo;REQUIRED&rdquo;, &ldquo;SHALL&rdquo;, &ldquo;SHALL NOT&rdquo;, &ldquo;SHOULD&rdquo;,
&ldquo;SHOULD NOT&rdquo;, &ldquo;RECOMMENDED&rdquo;, &ldquo;NOT RECOMMENDED&rdquo;, &ldquo;MAY&rdquo;, and &ldquo;OPTIONAL&rdquo; are to be
interpreted as described in <a href="https://tools.ietf.org/html/rfc2119">RFC 2119</a>.</p>
<p>There is no formal specification of the Kubernetes API and Resource Model. This
document assumes Kubernetes 1.13 behavior; this behavior will typically be
supported by many future Kubernetes versions. Additionally, this document may
reference specific core Kubernetes resources; these references may be
illustrative (i.e. <em>an implementation on Kubernetes</em>) or descriptive (i.e. <em>this
Kubernetes resource MUST be exposed</em>). References to these core Kubernetes
resources will be annotated as either illustrative or descriptive.</p>
<p>This document considers two users of a given Knative Serving environment, and is
particularly concerned with the expectations of developers (and language and
tooling developers, by extension) deploying applications to the environment.</p>
<ul>
<li><strong>Developers</strong> write code which is packaged into a container which is run on
the Knative Serving cluster.
<ul>
<li><strong>Language and tooling developers</strong> typically write tools used by developers
to package code into containers. As such, they are concerned that tooling
which wraps developer code to produce resources which match the Knative API
contract.</li>
</ul>
</li>
<li><strong>Operators</strong> (also known as <strong>platform providers</strong>) provision the compute
resources and manage the software configuration of Knative Serving and the
underlying abstractions (for example: Linux, Kubernetes, Istio, etc).</li>
</ul>
<h1 id="rbac-profile">RBAC Profile</h1>
<p>In order to validate the controls described in
<a href="#resource-overview">Resource Overview</a>, the following Kubernetes RBAC profile
may be applied in a Kubernetes cluster. This Kubernetes RBAC is an illustrative
example of the minimal profile rather than a requirement. This Role should be
sufficient to develop, deploy, and manage a set of serving applications within a
single namespace. Knative Conformance tests against &ldquo;MUST&rdquo;, &ldquo;MUST NOT&rdquo;, and
&ldquo;REQUIRED&rdquo; conditions are expected to pass when using this profile:</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-yaml" data-lang="yaml"><span style="color:#204a87;font-weight:bold">apiVersion</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">rbac.authorization.k8s.io/v1</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">kind</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Role</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">metadata</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">knative-developer</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">rules</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">apiGroups</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#34;serving.knative.dev&#34;</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">resources</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#34;services&#34;</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">verbs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#34;get&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;list&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;create&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;update&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;delete&#34;</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">apiGroups</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#34;serving.knative.dev&#34;</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">resources</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#34;configurations&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;routes&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;revisions&#34;</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline">
</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">verbs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#34;get&#34;</span><span style="color:#000;font-weight:bold">,</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#34;list&#34;</span><span style="color:#000;font-weight:bold">]</span><span style="color:#f8f8f8;text-decoration:underline">
</span></code></pre></div><h1 id="resource-overview">Resource Overview</h1>
<p>The Knative Serving API provides a set of
<a href="https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/">Kubernetes Custom Resources</a>
to manage stateless request-triggered (i.e. on-demand) autoscaled containers.
Knative Serving assumes the use of HTTP (including HTTP/2 and layered protocols
such as <a href="https://grpc.io/">gRPC</a>) as a request transport. In addition to
low-level scaling and routing objects, Knative Serving provides a high-level
Service object to reduce the cognitive overhead for application developers the
Service object should provide sufficient controls to cover most of application
deployment scenarios (by frequency).</p>
<h2 id="service">Service</h2>
<p>The Knative Service represents an instantiation of a single serverless container
environment (e.g. a microservice) over time. As such, a Service includes both a
network address by which the Service may be reached as well as the application
code and configuration needed to run the Service. The following table details
which operations must be made available to a developer accessing a Knative
Service using a minimal profile:</p>
<table>
<tr>
<td><strong>API Operation</strong>
</td>
<td><strong>Developer Access Requirements</strong>
</td>
</tr>
<tr>
<td>Create (POST)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>Patch (<a href="https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/devel/api-conventions.md#patch-operations">PATCH</a>)^
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td>Replace (PUT)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>Delete (DELETE)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>Read (GET)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>List (GET)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>Watch (GET)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>DeleteCollection (DELETE)
</td>
<td>OPTIONAL
</td>
</tr>
</table>
<p>^ Kubernetes only allows JSON merge patch for CRD types. It is recommended that
if allowed, at least JSON Merge patch be made available.
<a href="https://tools.ietf.org/html/rfc7386">JSON Merge Patch Spec (RFC 7386)</a></p>
<h2 id="revision">Revision</h2>
<p>The Knative Revision represents a stateless, autoscaling snapshot-in-time of
application code and configuration. Revisions enable progressive rollout and
rollback of application changes by changing the HTTP routing between Service
names and Revision instances. As such, Revisions are generally immutable, except
where they may reference mutable core Kubernetes resources such as ConfigMaps
and Secrets. Revisions can also be mutated by changes in Revision defaults.
Changes to defaults that mutate Revisions are generally syntactic and not
semantic.</p>
<p>Developers MUST NOT be able to create Revisions or update Revision <code>spec</code>
directly; Revisions MUST be created in response to updates to a Configuration
<code>spec</code>. It is RECOMMENDED that developers are able to force the deletion of
Revisions to both handle the possibility of leaked resources as well as for
removal of known-bad Revisions to avoid future errors in managing the service.</p>
<p>The following table details which operations must be made available to a
developer accessing a Knative Revision using a minimal profile:</p>
<table>
<tr>
<td><strong>API Operation</strong>
</td>
<td><strong>Developer Access Requirements</strong>
</td>
</tr>
<tr>
<td>Create (POST)
</td>
<td>FORBIDDEN
</td>
</tr>
<tr>
<td>Patch (<a href="https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/devel/api-conventions.md#patch-operations">PATCH</a>)^
</td>
<td>OPTIONAL (<code>spec</code> disallowed)
</td>
</tr>
<tr>
<td>Replace (PUT)
</td>
<td>OPTIONAL (<code>spec</code> changes disallowed)
</td>
</tr>
<tr>
<td>Delete (DELETE)
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td>Read (GET)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>List (GET)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>Watch (GET)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>DeleteCollection (DELETE)
</td>
<td>OPTIONAL
</td>
</tr>
</table>
<p>^ Kubernetes only allows JSON merge patch for CRD types. It is recommended that
if allowed, at least JSON Merge patch be made available.
<a href="https://tools.ietf.org/html/rfc7386">JSON Merge Patch Spec (RFC 7386)</a></p>
<h2 id="route">Route</h2>
<p>The Knative Route represents the current HTTP request routing state against a
set of Revisions. To enable progressive rollout of serverless applications, a
Route supports percentage-based request distribution across multiple application
code and configuration states (Revisions).</p>
<p>Routes which are owned (controlled) by a Service SHOULD NOT be updated by
developers; any changes will be reset by the Service controller.</p>
<p>The table below details which operations must be made available to a developer
accessing a Knative Route using a minimal profile. For any non-minimal profile,
the POST, PUT, or DELETE operations MUST be enabled as a group. This ensures
that the developer has the ability to control the complete lifecycle of the
object from create through deletion.</p>
<table>
<tr>
<td><strong>API Operation</strong>
</td>
<td><strong>Developer Access Requirements</strong>
</td>
</tr>
<tr>
<td>Create (POST)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>Patch (<a href="https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/devel/api-conventions.md#patch-operations">PATCH</a>)^
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>Replace (PUT)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>Delete (DELETE)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>Read (GET)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>List (GET)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>Watch (GET)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>DeleteCollection (DELETE)
</td>
<td>OPTIONAL
</td>
</tr>
</table>
<p>^ Kubernetes only allows JSON merge patch for CRD types. It is recommended that
if allowed, at least JSON Merge patch be made available.
<a href="https://tools.ietf.org/html/rfc7386">JSON Merge Patch Spec (RFC 7386)</a></p>
<h2 id="configuration">Configuration</h2>
<p>The Knative Configuration represents the desired future state (after deployments
complete) of a single autoscaled container application and configuration. The
Configuration provides a template for creating Revisions as the desired state of
the application changes.</p>
<p>Configurations which are owned (controlled) by a Service SHOULD NOT be updated
by developers; any changes will be reset by the Service controller. These
changes MAY still generate side effects such as the creation of additional
Revisions.</p>
<p>The table below details which operations must be made available to a developer
accessing a Knative Configuration using a minimal profile. For any advanced
profile, the POST, PUT, or DELETE operations MUST be enabled as a group. This
ensures that the developer has the ability to control the complete lifecycle of
the object from create through deletion.</p>
<table>
<tr>
<td><strong>API Operation</strong>
</td>
<td><strong>Developer Access Requirements</strong>
</td>
</tr>
<tr>
<td>Create (POST)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>Patch (<a href="https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/devel/api-conventions.md#patch-operations">PATCH</a>)^
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>Replace (PUT)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>Delete (DELETE)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>Read (GET)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>List (GET)
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td>Watch (GET)
</td>
<td>OPTIONAL
</td>
</tr>
<tr>
<td>DeleteCollection (DELETE)
</td>
<td>OPTIONAL
</td>
</tr>
</table>
<p>^ Kubernetes only allows JSON merge patch for CRD types. It is recommended that
if allowed, at least JSON Merge patch be made available.
<a href="https://tools.ietf.org/html/rfc7386">JSON Merge Patch Spec (RFC 7386)</a></p>
<h1 id="error-signalling">Error Signalling</h1>
<p>The Knative API uses the
<a href="https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties">Kubernetes Conditions convention</a>
to communicate errors and problems to the user. Each user-visible resource
described in Resource Overview MUST have a <code>conditions</code> field in <code>status</code>, which
must be a list of <code>Condition</code> objects of the following form (note that the
actual API object types may be named <code>FooCondition</code> to allow better code
generation and disambiguation between similar fields in the same <code>apiGroup</code>):</p>
<table>
<tr>
<td><strong>Field</strong>
</td>
<td><strong>Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Default Value</strong>
</td>
</tr>
<tr>
<td><code>type</code>
</td>
<td><code>string</code>
</td>
<td>The category of the condition, as a short, CamelCase word or phrase.
<p>
This is the primary key of the Conditions list when viewed as a map.
</td>
<td>REQUIRED No default
</td>
</tr>
<tr>
<td><code>status</code>
</td>
<td>Enum:<ul>
<li>"True"
<li>"False"
<li>"Unknown"</li></ul>
</td>
<td>The last measured status of this condition.
</td>
<td>"Unknown"
</td>
</tr>
<tr>
<td><code>reason</code>
</td>
<td>string
</td>
<td>One-word CamelCase reason for the condition's last transition.
</td>
<td>""
</td>
</tr>
<tr>
<td><code>message</code>
</td>
<td>string
</td>
<td>Human-readable sentence describing the last transition.
</td>
<td>""
</td>
</tr>
<tr>
<td><code>severity</code>
</td>
<td>Enum:<ul>
<li>""
<li>"Warning"
<li>"Info"</li></ul>
</td>
<td>If present, represents the severity of the condition. An empty severity represents a severity level of "Error".
</td>
<td>""
</td>
</tr>
<tr>
<td><code>lastTransitionTime</code>
</td>
<td>Timestamp
</td>
<td>Last update time for this condition.
</td>
<td>"" may be unset
</td>
</tr>
</table>
<p>Additionally, the resource&rsquo;s <code>status.conditions</code> field MUST be managed as
follows to enable clients (particularly user interfaces) to present useful
diagnostic and error message to the user. In the following section, conditions
are referred to by their <code>type</code> (aka the string value of the <code>type</code> field on the
Condition).</p>
<ol>
<li>
<p>Each resource MUST have either a <code>Ready</code> condition (for ongoing systems) or
<code>Succeeded</code> condition (for resources that run to completion) with
<code>severity=&quot;&quot;</code>, which MUST use the <code>True</code>, <code>False</code>, and <code>Unknown</code> status
values as follows:</p>
<ol>
<li><code>False</code> MUST indicate a failure condition.</li>
<li><code>Unknown</code> SHOULD indicate that reconciliation is not yet complete and
success or failure is not yet determined.</li>
<li><code>True</code> SHOULD indicate that the application is fully reconciled and
operating correctly.</li>
</ol>
<p><code>Unknown</code> and <code>True</code> are specified as SHOULD rather than MUST requirements
because there may be errors which prevent serving which cannot be determined
by the API stack (e.g. DNS record configuration in certain environments).
Implementations are expected to treat these as &ldquo;MUST&rdquo; for factors within the
control of the implementation.</p>
</li>
<li>
<p>For non-<code>Ready</code> conditions, any conditions with <code>severity=&quot;&quot;</code> (aka &ldquo;Error
conditions&rdquo;) must be aggregated into the &ldquo;Ready&rdquo; condition as follows:</p>
<ol>
<li>If the condition is <code>False</code>, <code>Ready</code> MUST be <code>False</code>.</li>
<li>If the condition is <code>Unknown</code>, <code>Ready</code> MUST be <code>False</code> or <code>Unknown</code>.</li>
<li>If the condition is <code>True</code>, <code>Ready</code> may be any of <code>True</code>, <code>False</code>, or
<code>Unknown</code>.</li>
</ol>
<p>Implementations MAY choose to report that <code>Ready</code> is <code>False</code> or <code>Unknown</code>
even if all Error conditions report a status of <code>True</code> (i.e. there may be
additional hidden implementation conditions which feed into the <code>Ready</code>
condition which are not reported.)</p>
</li>
<li>
<p>Non-<code>Ready</code> conditions with non-error severity MAY be surfaced by the
implementation. Examples of <code>Warning</code> or <code>Info</code> conditions could include:
missing health check definitions, scale-to-zero status, or non-fatal
capacity limits.</p>
</li>
</ol>
<p>Conditions type names should be chosen to describe positive conditions where
<code>True</code> means that the condition has been satisfied. Some conditions may be
transient (for example, <code>ResourcesAllocated</code> might change between <code>True</code> and
<code>False</code> as an application scales to and from zero). It is RECOMMENDED that
transient conditions be indicated with a <code>severity=&quot;Info&quot;</code>.</p>
<h1 id="resource-lifecycle">Resource Lifecycle</h1>
<p>Revisions are created by updates to the <code>spec</code> of Configuration resources, which
own the Revision lifecycle. Similarly, Service resources create and own
(control) Routes and Configurations. In some profiles, Route and Configuration
may be directly created without creating an owning Service; this is considered
an advanced environment, as it exposes more concepts and higher-cardinality
relationships to the developer.</p>
<p>This section describes the rules by which the different resources interact. The
general Kubernetes model is that of
<a href="https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/principles.md#control-logic">continuous reconciliation across eventually-consistent resources</a>.</p>
<h3 id="ownership">Ownership</h3>
<p>In several of the following sections, resources are said to &ldquo;own&rdquo; another
resource. Ownership indicates that the owned resource is being managed by the
owning resource and MUST be recorded using an
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#ownerreference-v1-meta">OwnerReference</a>
in <code>metadata.ownerReferences</code> on the owned resource with <code>controller</code> set to
<code>True</code> and <code>uid</code> set to the UID of the owning resource.</p>
<p>If the owning resource determines an ownership conflict and does not hold an
OwnerReference, the owning resource SHOULD NOT modify the resource, and SHOULD
signal the conflict with an error Condition.</p>
<p>Deleting an owning resource MUST trigger deletion of all owned resources; this
deletion MAY be immediate or eventually consistent. This process can be
implemented using
<a href="https://kubernetes.io/docs/concepts/workloads/controllers/garbage-collection/#controlling-how-the-garbage-collector-deletes-dependents">Kubernetes cascading deletion</a>.</p>
<h2 id="service-1">Service</h2>
<p>When a Service is created, it MUST create and own a Configuration and Route with
the same name as the Service. Updates to <code>spec</code>, <code>metadata.labels</code>, and
<code>metadata.annotations</code> of the Service MUST be copied to the appropriate
Configuration or Route, as follows:</p>
<ul>
<li><code>metadata</code> changes MUST be copied to both Configuration and Route.</li>
<li>In addition, the <code>serving.knative.dev/service</code> label on the Route and
Configuration MUST be set to the name of the Service.</li>
<li>Additional <code>labels</code> and <code>annotations</code> on the Configuration and Route not
specified above MUST be removed.</li>
<li>See the documentation of <code>spec</code> in the
<a href="#detailed-resources--v1">detailed resource fields section</a> for the
mapping of specific <code>spec</code> fields to the corresponding fields in Configuration
and Route.</li>
</ul>
<p>Similarly, the Service MUST update its <code>status</code> fields based on the
corresponding <code>status</code> of its owned Route and Configuration. The Service MUST
include conditions of <code>ConfigurationsReady</code> and <code>RoutesReady</code> in addition to the
generic <code>Ready</code> condition; other conditions MAY also be present.</p>
<h2 id="configuration-1">Configuration</h2>
<p>When a Configuration is created or its <code>spec</code> updated, the following steps MUST
be taken to create a new Revision (on creation, the previous state for all
fields is an empty value):</p>
<ul>
<li>If the <code>spec.template</code> field has changed from the previous state, a new owned
Revision MUST be created. If the Revision name is not provided by the user
through the <code>spec.template.metadata.name</code> field, it MUST be system generated.
The system generated name should be treated opaquely as no semantics are
defined. The values of <code>spec.template.metadata</code> and <code>spec.template.spec</code> MUST
be copied to the newly created Revision. If the Revision cannot be created,
the Configuration MUST signal that the Configuration is not <code>Ready</code>.</li>
<li><code>metadata.labels</code> and <code>metadata.annotations</code> from the Configuration MUST NOT
be copied to the newly-created Revision.</li>
</ul>
<p>Configuration MUST track the status of owned Revisions in order of creation, and
report the name of the most recently created Revision in
<code>status.latestCreatedRevisionName</code> and the name of the most recently created
Revision where the <code>Ready</code> Condition is <code>True</code> in
<code>status.latestReadyRevisionName</code>. These fields MAY be used by client software
and Route objects to determine the status of the Configuration and the best
target Revision for requests.</p>
<h2 id="revision-1">Revision</h2>
<p>A Revision is automatically scaled by the underlying infrastructure; a Revision
with no referencing Routes MAY be automatically scaled to zero instances and
backing resources collected. Additionally, Revisions which are older than the
oldest live Revision (referenced by at least one Route or latest for the
Configuration) MAY be automatically deleted by the system.</p>
<h2 id="route-1">Route</h2>
<p>Route does not directly own any Knative resources, but may refer to multiple
Revisions which will receive incoming requests either directly or through a
reference to a Configuration&rsquo;s <code>status.latestReadyRevisionName</code> field. In these
cases, the Route MAY use a <code>serving.knative.dev/route</code> label to indicate that a
Configuration or Revision is currently referenced by the Route. This label or
other mechanisms MAY be used to prevent user deletion of Revisions referenced by
a Route.</p>
<h1 id="request-routing">Request Routing</h1>
<p>Knative uses fractional host-based HTTP routing to deliver requests to
autoscaled instances. Knative Routes specify request routing from HTTP virtual
hosts (<a href="https://tools.ietf.org/html/rfc7230#section-5.4">Host-header</a> based
routing) to fractional assignments to Revisions. The following semantics apply
to Knative request routing:</p>
<ul>
<li>Each <a href="https://tools.ietf.org/html/rfc7230#section-6.3">HTTP/1.1 request</a> MUST
be treated as a separate &ldquo;request&rdquo; using the following semantics.</li>
<li>If supported by the Knative installation, each
<a href="https://tools.ietf.org/html/rfc7540#section-5">HTTP/2 stream</a> MUST be treated
as a separate &ldquo;request&rdquo; using the following semantics. Note that this maps
naturally for
<a href="https://tools.ietf.org/html/rfc7540#section-8.1">HTTP requests over HTTP/2</a>,
but is also well-defined for other applications like <a href="https://grpc.io/">gRPC</a>.</li>
<li>DNS Hostnames allocated to Routes MUST be unique.</li>
<li>DNS Hostnames allocated to Routes SHOULD resolve.
<a href="https://tools.ietf.org/html/rfc4592">Wildcard DNS records</a> associated with a
domain assigned to the namespace are the RECOMMENDED implementation.</li>
<li>Requests to a specific Host MUST be dispatched to Revision instances in
accordance with the weights specified in the Route, even if the number of
container instances per Revision does not match the weights specified in the
Route.</li>
<li>When a selected Revision does not have available instances, the routing
infrastructure MUST hold (delay) requests until an available instance is
ready, scheduling a new container instance if needed. This is sometimes
referred to as a &ldquo;cold start&rdquo;.</li>
<li>Requests which cause a new container instance to be created (&ldquo;cold start&rdquo;)
SHOULD be sent to the initially selected Revision, rather than to a different
Revision.</li>
<li>Multiple simultaneous or subsequent requests from a single client (even over
the same TCP connection) MAY be dispatched to different instances or different
Revisions (traffic routing MUST NOT be &ldquo;sticky&rdquo; in a way which violates the
weight distributions). Developers SHOULD NOT assume that subsequent requests
from the same client will reach the same application instance.</li>
</ul>
<h1 id="detailed-resources--v1">Detailed Resources v1</h1>
<p>The following schema defines a set of REQUIRED or RECOMMENDED resource fields on
the Knative resource types. Whether a field is REQUIRED or RECOMMENDED is
denoted in the &ldquo;Schema Requirement&rdquo; column. Additional <code>spec</code> and <code>status</code>
fields MAY be provided by particular implementations, however it is expected
that most extension will be accomplished via the <code>metadata.labels</code> and
<code>metadata.annotations</code> fields, as Knative implementations MAY validate supplied
resources against these fields and refuse resources which specify unknown
fields. Knative implementations MUST NOT require <code>spec</code> fields outside this
implementation; to do so would break interoperability between such
implementations and implementations which implement validation of field names.</p>
<h2 id="service-2">Service</h2>
<h3 id="metadata">Metadata:</h3>
<p>Standard Kubernetes
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#objectmeta-v1-meta">meta.v1/ObjectMeta</a>
resource.</p>
<p>Service <code>labels</code> and <code>annotations</code> MUST be copied to the <code>labels</code> and
<code>annotations</code> on the owned Configuration and Route. Additionally, the owned
Configuration and Route MUST have the <code>serving.knative.dev/service</code> label set to
the name of the Service.</p>
<h3 id="spec">Spec:</h3>
<table>
<tr>
<td><strong>Field Name</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>template</code>
</td>
<td>
<a href="#revisiontemplatespec">RevisionTemplateSpec</a>
<br>
(Required)
</td>
<td>A template for the current desired application state. Changes to <code>template</code> will cause a new Revision to be created
<a href="#resource-lifecycle">as defined in the lifecycle section</a>. The contents of the Service's RevisionTemplateSpec is used to create a corresponding Configuration.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>traffic</code>
</td>
<td>[]<a href="#traffictarget">TrafficTarget</a>
<br>
(Optional)
</td>
<td>Traffic specifies how to distribute traffic over a collection of Revisions belonging to the Service. If traffic is empty or not provided, defaults to 100% traffic to the latest <code>Ready</code> Revision. The contents of the Service's TrafficTarget is used to create a corresponding Route.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h3 id="status">Status:</h3>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>conditions</code>
</td>
<td>
<a href="#error-signalling">See Error Signalling</a>
</td>
<td>Used for signalling errors, see link. Conditions of type Ready MUST be present. Conditions of type ConfigurationsReady and RoutesReady MAY be present.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>observedGeneration</code>
</td>
<td>int
</td>
<td>The latest <code>metadata.generation</code> that the reconciler has observed. If <code>observedGeneration</code> is updated, <code>conditions</code> MUST be updated with current status in the same transaction.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>url</code>
</td>
<td>string (url)
</td>
<td>A URL which may be used to reach the application, copied from the owned Route. The URL MUST contain the scheme (i.e. "http://", etc.).
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>address</code>
</td>
<td>An implementation of the
<p><a href="#addressable-interface">Addressable</a> contract (an object with a
<code>url</code> string).</p>
</td>
<td>A duck-typed interface for loading the delivery address of the destination, copied from the owned Route. The URL provided in address MAY only be internally-routable.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>traffic</code>
</td>
<td>[]<a href="#traffictarget">TrafficTarget</a>
</td>
<td>Detailed current traffic split routing information.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>latestReadyRevisionName</code>
</td>
<td>string
</td>
<td>The most recently created Revision with where the <code>Ready</code> Condition is <code>True</code>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>latestCreatedRevisionName</code>
</td>
<td>string
</td>
<td>The most recently created Revision.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="configuration-2">Configuration</h2>
<h3 id="metadata-1">Metadata:</h3>
<p>Standard Kubernetes
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#objectmeta-v1-meta">meta.v1/ObjectMeta</a>
resource.</p>
<p>Configuration <code>labels</code> and <code>annotations</code> MUST NOT be copied to the <code>labels</code> and
<code>annotations</code> on newly-created Revisions. Configuration metadata MUST NOT be
continuously copied to existing Revisions, which should remain immutable after
creation. Additionally, the newly-created Revision MUST have the
<code>serving.knative.dev/configuration</code> label set to the name of the Configuration.
The Revision MUST also have the <code>serving.knative.dev/configurationGeneration</code>
label set to the Configuration&rsquo;s <code>metadata.generation</code> from which this Revision
was created.</p>
<h3 id="spec-1">Spec:</h3>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>template</code>
</td>
<td>
<p><a href="#revisiontemplatespec">RevisionTemplateSpec</a> <br> (Required)</p>
</td>
<td>A template for the current desired application state. Changes to <code>template</code> will cause a new Revision to be created
<p><a href="#resource-lifecycle">as defined in the lifecycle section</a>.</p>
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h3 id="status-1">Status:</h3>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>conditions</code>
</td>
<td>
<p><a href="#error-signalling">See Error Signalling</a></p>
</td>
<td>Used for signalling errors, see link. Condition of type Ready MUST be present.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>observedGeneration</code>
</td>
<td>int
</td>
<td>The latest metadata.generation that the reconciler has attempted. If <code>observedGeneration</code> is updated, <code>conditions</code> MUST be updated with current status in the same transaction.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>latestReadyRevisionName</code>
</td>
<td>string
</td>
<td>The most recently created Revision with where the <code>Ready</code> Condition is <code>True</code>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>latestCreatedRevisionName</code>
</td>
<td>string
</td>
<td>The most recently created Revision.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="route-2">Route</h2>
<h3 id="metadata-2">Metadata:</h3>
<p>Standard Kubernetes
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#objectmeta-v1-meta">meta.v1/ObjectMeta</a>
resource.</p>
<h3 id="spec-2">Spec:</h3>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>traffic</code>
</td>
<td>[]<a href="#traffictarget">TrafficTarget</a>
<br>
(Optional)
</td>
<td>Traffic specifies how to distribute traffic over a collection of Revisions belonging to the Service. If traffic is empty or not provided, defaults to 100% traffic to the latest Ready Revision.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h3 id="status-2">Status:</h3>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>conditions</code>
</td>
<td>
<p><a href="#error-signalling">See Error Signalling</a></p>
</td>
<td>Used for signalling errors, see link. Conditions of types Ready MUST be present. `AllTrafficAssigned`, `IngressReady`, and `CertificateProvisioned` MAY be present.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>observedGeneration</code>
</td>
<td>int
</td>
<td>The latest `metadata.generation` that the reconciler has observed. If <code>observedGeneration</code> is updated, <code>conditions</code> MUST be updated with current status in the same transaction.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>url</code>
</td>
<td>string (url)
</td>
<td>A URL which may be used to reach the application. The URL MUST contain the scheme (i.e. "http://", etc.).
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>address</code>
</td>
<td>An implementation of the <a href="#addressable-interface">Addressable</a> contract (an object with a <code>url</code> string).
</td>
<td>A duck-typed interface for loading the delivery address of the destination. The URL provided in address MAY only be internally-routable.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>traffic</code>
</td>
<td>[]<a href="#traffictarget">TrafficTarget</a>
</td>
<td>Detailed current traffic split routing information.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="revision-2">Revision</h2>
<h3 id="metadata-3">Metadata:</h3>
<p>Standard Kubernetes
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#objectmeta-v1-meta">meta.v1/ObjectMeta</a>
resource.</p>
<h3 id="spec-3">Spec:</h3>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>containers</code>
</td>
<td>[]<a href="#container">Container</a>
<br>
(Required)
<br>
Min: 1
<br>
Max: 1
</td>
<td>Specifies the parameters used to execute each container instance corresponding to this Revision.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>volumes</code>
</td>
<td>[]<a href="#volume">Volume</a>
<br>
(Optional)
</td>
<td>A list of Volumes to make available to <code>containers[0]</code>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>timeoutSeconds</code>
</td>
<td>int
<br>
(Optional)
</td>
<td>The maximum duration in seconds that the request routing layer will wait for a request delivered to a container to progress (send network traffic). If unspecified, a system default will be provided.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>containerConcurrency</code>
</td>
<td>int
<br>
(Optional)
<br>
Default: 0
</td>
<td>The maximum number of concurrent requests being handled by a single instance of <code>containers[0]</code>. The default value is 0, which means that the system decides.
<p>
See
<p><a href="#request-routing">Request Routing</a> for more details on what
constitutes a request.</p>
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>serviceAccountName</code>
</td>
<td>string
<br>
(Optional)
</td>
<td>The name of a Service Account which <code>containers[0]</code> should be run as. The Service Account should be used to provide access and authorization to the container.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>imagePullSecrets</code>
</td>
<td>[]<a href="#localobjectreference">LocalObjectReference</a>
<br>
(Optional)
</td>
<td>The list of secrets for pulling images from private repositories.
</td>
<td>RECOMMENDED
</td>
</tr>
</table>
<h3 id="status-3">Status:</h3>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>conditions</code>
</td>
<td>
<p><a href="#error-signalling">See Error Signalling</a></p>
</td>
<td>Used for signalling errors, see link. Conditions of type Ready MUST be present. Conditions of type Active, ContainerHealthy, ResourcesAvailable MAY be present.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>logUrl</code>
</td>
<td>string (url)
</td>
<td>A URL which may be used to retrieve logs specific to this Revision. The destination MAY require authentication and/or use a format (such as a web UI) which requires additional configuration. There is no further standardization of this URL or the targeted endpoint.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>containerStatuses</code>
</td>
<td>[]<a href="#containerStatuses">ContainerStatuses</a>
</td>
<td>The ContainerStatuses holds the resolved image digest for both serving and non serving containers.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>imageDigest</code>
</td>
<td>string
</td>
<td>The resolved image digest for the requested Container. This MAY be omitted by the implementation.
</td>
<td>RECOMMENDED
</td>
</tr>
</table>
<h1 id="detailed-resource-types---v1">Detailed Resource Types - v1</h1>
<p>Although <code>container,</code> <code>volumes,</code> and types that they reference are based upon
core Kubernetes objects, there are additional limitations applied to ensure that
created containers can statelessly autoscale. The set of fields that have been
determined to be compatible with statelessly scaling are detailed below.
Restrictions to the values of the field are noted in the Description column.</p>
<h2 id="containerstatuses">ContainerStatuses</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
<p>
(Optional)
</td>
<td>Name represents the container name and name must be a DNS_LABEL.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>imageDigest</code>
</td>
<td>string
<p>
(Optional)
</td>
<td>ImageDigest is the digest value for the container's image.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="traffictarget">TrafficTarget</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>revisionName</code>
</td>
<td>string
<p>
(Optional)
</td>
<td>A specific revision to which to send this portion of traffic. This is mutually exclusive with configurationName.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>configurationName</code>
</td>
<td>string
<p>
(Optional)
</td>
<td>ConfigurationName of a configuration to whose latest Revision we will send this portion of traffic. Tracks latestReadyRevisionName for the Configuration. This field is never set in <code>status</code>, only in <code>spec</code>. This is mutually exclusive with revisionName. This field is disallowed when used in
<p><a href="#spec">ServiceSpec</a>.</p>
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>latestRevision</code>
</td>
<td>bool
<p>
(Optional)
</td>
<td>latestRevision may be optionally provided to indicate that the latest ready Revision of the Configuration should be used for this traffic target. When provided latestRevision MUST be true if revisionName is empty, and it MUST be false when revisionName is non-empty.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>tag</code>
</td>
<td>string
<p>
(Optional)
</td>
<td>Tag is optionally used to expose a dedicated URL for referencing this target exclusively. The dedicated URL MUST include in it the string provided by tag.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>percent</code>
</td>
<td>int
<br>
(Required)
<br>
Min: 0
<br>
Max: 100
</td>
<td>The
<p><a href="#request-routing">percentage of requests which should be allocated from
the main Route domain name</a> to the specified <code>revisionName</code> or
<code>configurationName</code>.</p>
<p>
All <code>percent</code> values in <code>traffic</code> MUST sum to 100.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>url</code>
</td>
<td>string
</td>
<td>The URL at which the tag endpoint is reachable. It MUST not be taken as input, and is only provided on Status.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="revisiontemplatespec">RevisionTemplateSpec</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>metadata</code>
</td>
<td>
<p><a href="#metadata-3">RevisionMetadata</a></p>
</td>
<td>The requested metadata for the Revision.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>spec</code>
</td>
<td>
<p><a href="#spec-3">RevisionSpec</a></p>
</td>
<td>The requested spec for the Revision.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="container">Container</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>args</code>
</td>
<td>[]string
<p>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>command</code>
</td>
<td>[]string
<p>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>env</code>
</td>
<td>[]<a href="#envvar">EnvVar</a>
<p>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>envFrom</code>
</td>
<td>[]<a href="#envfromsource">EnvFromSource</a>
<p>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>image</code>
</td>
<td>string
<p>
(Required)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>imagePullPolicy</code>
</td>
<td>string
<p>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>. However, Knative resolves the image to a digest. The pull policy will be applied against the digest of the resolved image and not the image tag.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>livenessProbe</code>
</td>
<td>
<a href="#probe">Probe</a>
<p>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
<p>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>ports</code>
</td>
<td>[]<a href="#containerport">ContainerPort</a>
<br>
(Optional)
<br>
Min: 0
<br>
Max: 1
</td>
<td>Only a single <code>port</code> may be specified. The port must be named <a href="https://github.com/knative/serving/blob/master/docs/runtime-contract.md#protocols-and-ports">as described in the runtime contract</a>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>readinessProbe</code>
</td>
<td>
<a href="#probe">Probe</a>
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>resources</code>
</td>
<td>
<a href="#resourcerequirements">ResourceRequirements</a>
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>securityContext</code>
</td>
<td>
<a href="#securitycontext">SecurityContext</a>
<br>
(Optional)
</td>
<td>In <code>securityContext</code>, only <code>runAsUser</code> MAY be set.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>terminationMessagePath</code>
</td>
<td>string
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>terminationMessagePolicy</code>
</td>
<td>string
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>volumeMounts</code>
</td>
<td>[]<a href="#volumemount">VolumeMount</a>
<br>
(Optional)
</td>
<td><code>volumeMounts</code> MUST correspond to a volume and specify an absolute mount path which does not shadow <a href="https://github.com/knative/serving/blob/master/docs/runtime-contract.md#default-filesystems">the runtime contract directories</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>workingDir</code>
</td>
<td>string
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#container-v1-core">core/v1.Container</a>.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="envvar">EnvVar</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
<br>
(Required)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envvar-v1-core">core/v1.EnvVar</a>
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>value</code>
</td>
<td>string
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envvar-v1-core">core/v1.EnvVar</a>. Must have one of value or valueFrom.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>valueFrom</code>
</td>
<td>
<a href="#envvarsource">EnvVarSource</a>
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envvar-v1-core">core/v1.EnvVar</a>. Must have one of value or valueFrom.
</td>
<td>RECOMMENDED
</td>
</tr>
</table>
<h2 id="envvarsource">EnvVarSource</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>configMapKeyRef</code>
</td>
<td>
<a href="#configmapkeyselector">ConfigMapKeySelector</a>
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envvarsource-v1-core">core/v1.EnvVarSource</a>. Must have one of configMapKeyRef or secretKeyRef.
</td>
<td>REQUIRED, if valueFrom is supported.
</td>
</tr>
<tr>
<td><code>secretKeyRef</code>
</td>
<td>
<a href="#secretkeyselector">SecretKeySelector</a>
<br>
(Optional)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envvarsource-v1-core">core/v1.EnvVarSource</a>. Must have one of configMapKeyRef or secretKeyRef.
</td>
<td>RECOMMENDED
</td>
</tr>
</table>
<h2 id="configmapkeyselector">ConfigMapKeySelector</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>key</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapkeyselector-v1-core">core/v1.ConfigMapKeySelector</a>.
</td>
<td>REQUIRED, if configMapKeyRef is supported
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapkeyselector-v1-core">core/v1.ConfigMapKeySelector</a>.
</td>
<td>REQUIRED, if configMapKeyRef is supported
</td>
</tr>
<tr>
<td><code>optional</code>
</td>
<td>boolean
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapkeyselector-v1-core">core/v1.ConfigMapKeySelector</a>.
</td>
<td>REQUIRED, if configMapKeyRef is supported
</td>
</tr>
</table>
<h2 id="secretkeyselector">SecretKeySelector</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>key</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretkeyselector-v1-core">core/v1.SecretKeySelector</a>.
</td>
<td>REQUIRED, if secretKeyRef is supported
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretkeyselector-v1-core">core/v1.SecretKeySelector</a>.
</td>
<td>REQUIRED, if secretKeyRef is supported
</td>
</tr>
<tr>
<td><code>optional</code>
</td>
<td>boolean
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretkeyselector-v1-core">core/v1.SecretKeySelector</a>.
</td>
<td>REQUIRED, if secretKeyRef is supported
</td>
</tr>
</table>
<h2 id="probe">Probe</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>exec</code>
</td>
<td>
<p><a href="#execaction">ExecAction</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core">core/v1.Probe</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>failureThreshold</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core">core/v1.Probe</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>httpGet</code>
</td>
<td>
<p><a href="#httpgetaction">HTTPGetAction</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core">core/v1.Probe</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>initialDelaySeconds</code>
</td>
<td>int
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core">core/v1.Probe</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>successThreshold</code>
</td>
<td>int
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core">core/v1.Probe</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>tcpSocket</code>
</td>
<td>
<p><a href="#tcpsocketaction">TCPSocketAction</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core">core/v1.Probe</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>timeoutSeconds</code>
</td>
<td>int
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#probe-v1-core">core/v1.Probe</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
</table>
<h2 id="envfromsource">EnvFromSource</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>configMapRef</code>
</td>
<td>
<p><a href="#configmapenvsource">ConfigMapEnvSource</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envfromsource-v1-core">core/v1.EnvFromSource</a>.
</td>
<td>REQUIRED, if envFrom is supported
</td>
</tr>
<tr>
<td><code>prefix</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envfromsource-v1-core">core/v1.EnvFromSource</a>.
</td>
<td>REQUIRED, if envFrom is supported
</td>
</tr>
<tr>
<td><code>secretRef</code>
</td>
<td>
<p><a href="#secretenvsource">SecretEnvSource</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#envfromsource-v1-core">core/v1.EnvFromSource</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
</table>
<h2 id="execaction">ExecAction</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>command</code>
</td>
<td>[]string
<br>
(Required)
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#execaction-v1-core">core/v1.ExecAction</a>.
</td>
<td>REQUIRED, if exec is supported
</td>
</tr>
</table>
<h2 id="httpgetaction">HTTPGetAction</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>host</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#httpgetaction-v1-core">core/v1.HTTPGetAction</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>httpHeaders</code>
</td>
<td>
<p><a href="#httpheader">HTTPHeader</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#httpgetaction-v1-core">core/v1.HTTPGetAction</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>path</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#httpgetaction-v1-core">core/v1.HTTPGetAction</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>scheme</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#httpgetaction-v1-core">core/v1.HTTPGetAction</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
</table>
<h2 id="tcpsocketaction">TCPSocketAction</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>host</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#tcpsocketaction-v1-core">core/v1.TCPSocketAction</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
</table>
<h2 id="httpheader">HTTPHeader</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#httpheader-v1-core">core/v1.HTTPHeader</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
<tr>
<td><code>value</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#httpheader-v1-core">core/v1.HTTPHeader</a>.
</td>
<td>REQUIRED, if livenessProbe or readinessProbe is supported
</td>
</tr>
</table>
<h2 id="containerport">ContainerPort</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
<br>
(Optional)
</td>
<td>Must be one of "http1" or "h2c" (if supported). Defaults to "http1".
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>containerPort</code>
</td>
<td>int
</td>
<td>The selected port for which Knative will direct traffic to the user container.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>protocol</code>
</td>
<td>string
<br>
(Optional)
</td>
<td>If specified must be TCP. Defaults to TCP.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="configmapenvsource">ConfigMapEnvSource</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapenvsource-v1-core">core/v1.ConfigMapEnvSource</a>.
</td>
<td>REQUIRED, if envFrom is supported
</td>
</tr>
<tr>
<td><code>optional</code>
</td>
<td>boolean
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapenvsource-v1-core">core/v1.ConfigMapEnvSource</a>.
</td>
<td>REQUIRED, if envFrom is supported
</td>
</tr>
</table>
<h2 id="secretenvsource">SecretEnvSource</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretenvsource-v1-core">core/v1.SecretEnvSource</a>.
</td>
<td>REQUIRED, if secretRef is supported
</td>
</tr>
<tr>
<td><code>optional</code>
</td>
<td>boolean
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretenvsource-v1-core">core/v1.SecretEnvSource</a>.
</td>
<td>REQUIRED, if secretRef is supported
</td>
</tr>
</table>
<h2 id="resourcerequirements">ResourceRequirements</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>limits</code>
</td>
<td>object
</td>
<td>Must support at least cpu and memory. See <a href="https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/">Kubernetes</a>.
</td>
<td>REQUIRED
</td>
</tr>
<tr>
<td><code>requests</code>
</td>
<td>object
</td>
<td>Must support at least cpu and memory. See <a href="https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/">Kubernetes</a>.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="securitycontext">SecurityContext</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>runAsUser</code>
</td>
<td>int
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#securitycontext-v1-core">core/v1.SecurityContext</a>
</td>
<td>REQUIRED, if securityContext is supported.
</td>
</tr>
</table>
<h2 id="volumemount">VolumeMount</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>mountPath</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volumemount-v1-core">core/v1.VolumeMount</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volumemount-v1-core">core/v1.VolumeMount</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>subPath</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volumemount-v1-core">core/v1.VolumeMount</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>readOnly</code>
</td>
<td>bool
</td>
<td>Must be true. Defaults to true.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
</table>
<h2 id="volume">Volume</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>configMap</code>
</td>
<td>
<p><a href="#configmapvolumesource">ConfigMapVolumeSource</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volume-v1-core">core/v1.Volume</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>secret</code>
</td>
<td>
<p><a href="#secretvolumesource">SecretVolumeSource</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volume-v1-core">core/v1.Volume</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
<tr>
<td><code>projected</code>
</td>
<td>
<p><a href="#projectedvolumesource">ProjectedVolumeSource</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volume-v1-core">core/v1.Volume</a>.
</td>
<td>RECOMMENDED
</td>
</tr>
</table>
<h2 id="configmapvolumesource">ConfigMapVolumeSource</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>defaultMode</code>
</td>
<td>int
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapvolumesource-v1-core">core/v1.ConfigMapVolumeSource</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>items</code>
</td>
<td>[]<a href="#keytopath">KeyToPath</a>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapvolumesource-v1-core">core/v1.ConfigMapVolumeSource</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapvolumesource-v1-core">core/v1.ConfigMapVolumeSource</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>optional</code>
</td>
<td>bool
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapvolumesource-v1-core">core/v1.ConfigMapVolumeSource</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
</table>
<h2 id="secretvolumesource">SecretVolumeSource</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>defaultMode</code>
</td>
<td>int
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretvolumesource-v1-core">core/v1.SecretVolumeSource</a>.
</td>
<td>REQUIRED, if secret is supported.
</td>
</tr>
<tr>
<td><code>items</code>
</td>
<td>[]<a href="#keytopath">KeyToPath</a>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretvolumesource-v1-core">core/v1.SecretVolumeSource</a>.
</td>
<td>REQUIRED, if secret is supported.
</td>
</tr>
<tr>
<td><code>secretName</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretvolumesource-v1-core">core/v1.SecretVolumeSource</a>.
</td>
<td>REQUIRED, if secret is supported.
</td>
</tr>
<tr>
<td><code>optional</code>
</td>
<td>bool
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretvolumesource-v1-core">core/v1.SecretVolumeSource</a>.
</td>
<td>REQUIRED, if secret is supported.
</td>
</tr>
</table>
<h2 id="projectedvolumesource">ProjectedVolumeSource</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>defaultMode</code>
</td>
<td>int
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#projectedvolumesource-v1-core">core/v1.ProjectedVolumeSource</a>.
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
<tr>
<td><code>sources</code>
</td>
<td>[]<a href="#volumeprojection">VolumeProjection</a>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#projectedvolumesource-v1-core">core/v1.ProjectedVolumeSource</a>.
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
</table>
<h2 id="keytopath">KeyToPath</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>key</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#keytopath-v1-core">core/v1.KeyToPath</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>mode</code>
</td>
<td>int
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#keytopath-v1-core">core/v1.KeyToPath</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
<tr>
<td><code>path</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#keytopath-v1-core">core/v1.KeyToPath</a>.
</td>
<td>REQUIRED, if volumes is supported.
</td>
</tr>
</table>
<h2 id="volumeprojection">VolumeProjection</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>configMap</code>
</td>
<td>
<p><a href="#configmapprojection">ConfigMapProjection</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volumeprojection-v1-core">core/v1.VolumeProjection.</a>
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
<tr>
<td><code>secret</code>
</td>
<td>
<p><a href="#secretprojection">SecretProjection</a></p>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#volumeprojection-v1-core">core/v1.VolumeProjection.</a>
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
</table>
<h2 id="configmapprojection">ConfigMapProjection</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>items</code>
</td>
<td>[]<a href="#keytopath">KeyToPath</a>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapprojection-v1-core">core/v1.ConfigMapProjection.</a>
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
<tr>
<td><code>secret</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapprojection-v1-core">core/v1.ConfigMapProjection.</a>
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
<tr>
<td><code>optional</code>
</td>
<td>boolean
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#configmapprojection-v1-core">core/v1.ConfigMapProjection.</a>
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
</table>
<h2 id="secretprojection">SecretProjection</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>items</code>
</td>
<td>[]<a href="#keytopath">KeyToPath</a>
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretprojection-v1-core">core/v1.SecretProjection.</a>
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretprojection-v1-core">core/v1.SecretProjection.</a>
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
<tr>
<td><code>optional</code>
</td>
<td>boolean
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#secretprojection-v1-core">core/v1.SecretProjection.</a>
</td>
<td>REQUIRED, if projected is supported.
</td>
</tr>
</table>
<h2 id="addressablehttpsgithubcomknativepkgblobmasterapisduckv1addressable_typesgo-interface"><a href="https://github.com/knative/pkg/blob/master/apis/duck/v1/addressable_types.go">Addressable</a> (Interface)</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>url</code>
</td>
<td>string (<a href="https://github.com/knative/pkg/blob/master/apis/url.go">apis.URL</a>)
</td>
<td>A generic mechanism for a custom resource definition to indicate a destination for message delivery.
</td>
<td>REQUIRED
</td>
</tr>
</table>
<h2 id="localobjectreference">LocalObjectReference</h2>
<table>
<tr>
<td><strong>FieldName</strong>
</td>
<td><strong>Field Type</strong>
</td>
<td><strong>Description</strong>
</td>
<td><strong>Schema Requirement</strong>
</td>
</tr>
<tr>
<td><code>name</code>
</td>
<td>string
</td>
<td>As specified in Kubernetes <a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#localobjectreference-v1-core">core/v1.LocalObjectReference</a>.
</td>
<td>REQUIRED, if imagePullSecrets is supported.
</td>
</tr>
</table>
</div>
</main>
</div>
</div>
<div class="cookienotice">
<div class="text">
<p>We use analytics and cookies to understand site traffic. Information about your use of
our site is shared with Google for that purpose. <a href="../../../../about-analytics-cookies/">Learn more.</a>
</p>
</div>
<div class="buttons">
<a class="close" onclick="closenotice()">&times;</a>
<a class="ok btn-sm" onclick="acceptcookie()">OK</a>
</div>
</div>
<footer class="bg-light py-5 row d-print-none">
<div class="container-fluid mx-sm-5">
<div class="row">
<div class="col-6 col-sm-4 text-xs-center order-sm-2">
<ul class="list-inline mb-0">
<li class="list-inline-item mx-2 h4" data-toggle="tooltip" data-placement="top" title="Knative users Group">
<a class="text-white" target="_blank" href="https://groups.google.com/forum/#!forum/knative-users" rel="noopener noreferrer">
<i class="fa fa-users"></i>
</a>
</li>
<li class="list-inline-item mx-2 h4" data-toggle="tooltip" data-placement="top" title="Twitter">
<a class="text-white" target="_blank" href="https://twitter.com/KnativeProject" rel="noopener noreferrer">
<i class="fab fa-twitter"></i>
</a>
</li>
<li class="list-inline-item mx-2 h4" data-toggle="tooltip" data-placement="top" title="Stack Overflow questions">
<a class="text-white" target="_blank" href="https://stackoverflow.com/questions/tagged/*knative*" rel="noopener noreferrer">
<i class="fab fa-stack-overflow"></i>
</a>
</li>
</ul>
<h6 class="text-white">Knative users</h6>
</div>
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
<ul class="list-inline mb-0">
<li class="list-inline-item mx-2 h4" data-toggle="tooltip" data-placement="top" title="Knative GitHub repo">
<a class="text-white" target="_blank" href="https://github.com/knative" rel="noopener noreferrer">
<i class="fab fa-github"></i>
</a>
</li>
<li class="list-inline-item mx-2 h4" data-toggle="tooltip" data-placement="top" title="Knative Slack channels">
<a class="text-white" target="_blank" href="https://slack.knative.dev/" rel="noopener noreferrer">
<i class="fab fa-slack"></i>
</a>
</li>
<li class="list-inline-item mx-2 h4" data-toggle="tooltip" data-placement="top" title="Knative developers Group">
<a class="text-white" target="_blank" href="https://groups.google.com/forum/#!forum/knative-dev" rel="noopener noreferrer">
<i class="fa fa-users"></i>
</a>
</li>
</ul>
<h6 class="text-white">Knative developers</h6>
</div>
<div class="col-12 col-sm-4 text-center py-0 order-sm-2">
<small class="text-white">
<p>&copy; 2021 The Knative Authors | <b><a class="text-white" href="https://policies.google.com/privacy">Privacy Policy</a></b> | <b><a class="text-white" href="../../../../about-analytics-cookies/">Cookie Usage</a></b> | <b><a class="text-white" href="https://github.com/knative/docs/blob/master/LICENSE">Knative Licensing</a></b><br>
<span class="d-none d-lg-inline d-xl-inline" style="white-space:nowrap"><a class="text-white" href="https://creativecommons.org/licenses/by/4.0/">CC By 4.0</a>, <a class="text-white" href="https://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a></span></p>
</small>
</div>
</div>
</div>
</footer>
<div id="cookieModal" class="modal custom fade" role="dialog" data-backdrop="false">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-body">
<p>We use cookies. <a href="https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage" target="_blank">Google Analytics</a> is used to improve your experience and help us understand site traffic and page usage.</p>
<div class="consent-buttons">
<button type="button" class="btn btn-sm mr-3 mb-4" onclick="learnaboutcookies()">Learn more</button>
<button type="button" class="btn btn-sm btn-secondary mr-3 mb-4" onclick="acceptcookie()">Accept</button>
<div class="opt-out">
<hr>
<p><a href="../../../../about-analytics-cookies/">Learn about analytics cookies and how you can take steps to opt-out from sharing your usage data.</a></p>
<button type="button" class="btn btn-sm btn-primary mr-3 mb-4" onclick="optout()">I understand how to opt-out, hide this notice.</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="../../../../js/main.min.b201a3c9217360dbc0727dd320ea5f0bfc3f9128a4baa02246fb92034f9442a3.js" integrity="sha256-sgGjySFzYNvAcn3TIOpfC/w/kSikuqAiRvuSA0&#43;UQqM=" crossorigin="anonymous"></script>
</body>
</html>