CINXE.COM
Chapter 5. Develop | Red Hat Product Documentation
<!DOCTYPE html><html data-capo=""><head><script type="importmap"> { "imports": { "@patternfly/elements/": "/scripts/v1/@patternfly/elements/", "@patternfly/pfe-clipboard/": "/scripts/v1/@patternfly/pfe-clipboard/", "@rhds/elements/": "/scripts/v1/@rhds/elements/elements/", "@cpelements/elements/": "/scripts/v1/@cpelements/elements/elements/" }, "scopes": { "/": { "@floating-ui/core": "/scripts/v1/@floating-ui/core/dist/floating-ui.core.mjs", "@floating-ui/dom": "/scripts/v1/@floating-ui/dom/dist/floating-ui.dom.mjs", "@floating-ui/utils": "/scripts/v1/@floating-ui/utils/dist/floating-ui.utils.mjs", "@floating-ui/utils/dom": "/scripts/v1/@floating-ui/utils/dom/dist/floating-ui.utils.dom.mjs", "@lit/reactive-element": "/scripts/v1/@lit/reactive-element/reactive-element.js", "@lit/reactive-element/decorators/": "/scripts/v1/@lit/reactive-element/decorators/", "@patternfly/pfe-core": "/scripts/v1/@patternfly/pfe-core/core.js", "@patternfly/pfe-core/": "/scripts/v1/@patternfly/pfe-core/", "@rhds/tokens/media.js": "/scripts/v1/@rhds/tokens/js/media.js", "lit": "/scripts/v1/lit/index.js", "lit-element/lit-element.js": "/scripts/v1/lit-element/lit-element.js", "lit-html": "/scripts/v1/lit-html/lit-html.js", "lit-html/": "/scripts/v1/lit-html/", "lit/": "/scripts/v1/lit/", "tslib": "/scripts/v1/tslib/tslib.es6.mjs", "@cpelements/rh-table/dist/rh-table.js": "/scripts/v1/@cpelements/rh-table/dist/rh-table.js" } } } </script><meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Chapter 5. Develop | Red Hat Product Documentation</title> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <script type="text/javascript" id="trustarc" src="//static.redhat.com/libs/redhat/marketing/latest/trustarc/trustarc.js"></script> <script src="//www.redhat.com/dtm.js"></script> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Red+Hat+Display:wght@400;500;700&family=Red+Hat+Text:wght@400;500;700&display=swap"> <link rel="stylesheet" href="/styles/rh-table--lightdom.min.css"> <style>.section .titlepage{gap:.75rem}.section .titlepage,div.edit{align-items:center;display:flex}div.edit{font-size:.9rem;margin-bottom:8px}div.edit>a{align-items:center;display:flex}.edit pf-icon{margin-right:4px}rh-tile{&[color-palette=dark]{& a{color:var(--rh-color-interactive-primary-default-on-dark,#92c5f9)!important}&:not(:defined){background-color:var(--rh-color-surface-darkest,#151515);border-color:var(--rh-color-border-subtle-on-dark,#707070);color:var(--rh-color-text-primary-on-dark,#fff);img{aspect-ratio:1;width:48px}img+h3{margin-block-start:var(--rh-space-2xl,32px)}}}&:not(:defined){border:var(--rh-border-width-sm,1px) solid var(--rh-color-border-subtle-on-light,#c7c7c7);border-radius:var(--rh-border-radius-default,3px);color:var(--rh-color-text-primary-on-light,#151515);padding:var(--rh-space-2xl,32px) var(--rh-space-2xl,32px) var(--rh-space-3xl,48px) var(--rh-space-2xl,32px)}}rh-card{&[color-palette=dark]{color:var(--rh-color-text-primary-on-dark,#fff)!important;&:not(:defined){align-items:center;display:flex;flex-direction:column;justify-content:center;& h4{font-size:var(--rh-font-size-heading-sm,1.5rem);padding-bottom:var(--rh-space-lg,16px)}& rh-cta:not(:defined){border:var(--rh-border-width-sm,1px) solid var(--rh-color-border-strong-on-dark,#fff);border-radius:var(--rh-border-radius-default,3px);max-width:-moz-fit-content;max-width:fit-content;padding-block:var(--rh-space-lg,16px);padding-inline:var(--rh-space-2xl,32px)}}& rh-cta[variant=secondary]{--rh-color-text-primary-on-light:#fff!important;--rh-color-border-strong-on-light:#fff!important;&:hover{--rh-color-text-primary-on-light:#151515!important;--rh-color-border-strong-on-light:#c7c7c7!important}& a{color:var(--rh-color-text-primary-on-dark,#fff)!important}}}}</style> <style>#error[data-v-df31ff14]{align-items:center;display:flex;flex-direction:column;justify-content:center;min-height:80vh}h1[data-v-df31ff14]{font-size:calc(var(--rh-font-size-body-text-md, 1rem)*4);font-weight:700;margin-bottom:0}h1[data-v-df31ff14],h1 span[data-v-df31ff14]{line-height:var(--rh-line-height-heading,1.3)}h1 span[data-v-df31ff14]{color:var(--rh-color-text-brand-on-light,#e00);display:block;text-transform:uppercase}h1 span[data-v-df31ff14],p[data-v-df31ff14]{font-size:var(--rh-font-size-body-text-lg,1.125rem)}aside[data-v-df31ff14]{align-items:center;background:var(--rh-color-surface-lightest,#fff);border:var(--rh-border-width-sm,1px) solid var(--rh-color-border-subtle-on-light,#c7c7c7);border-radius:var(--rh-border-radius-default,3px);border-top:calc(var(--rh-border-width-md, 2px)*2) solid var(--rh-color-text-brand-on-light,#e00);box-shadow:var(--rh-box-shadow-sm,0 2px 4px 0 hsla(0,0%,8%,.2));display:flex;flex-direction:column;justify-content:space-between;margin-top:var(--rh-space-2xl,32px);padding:var(--rh-space-xl,24px)}aside[data-v-df31ff14],aside>div[data-v-df31ff14]{width:100%}.text-container[data-v-df31ff14]{margin:auto;max-width:442px;text-align:center}.desktop[data-v-df31ff14]{display:none}.sr-only[data-v-df31ff14]{height:1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;clip-path:inset(50%);white-space:nowrap}form[data-v-df31ff14]{display:flex}button[data-v-df31ff14],input[data-v-df31ff14]{border:1px solid var(--rh-color-black-500,#8a8d90);box-sizing:border-box;height:40px}input[data-v-df31ff14]{border-right:none;flex:1;font-family:var(--rh-font-family-heading,RedHatDisplay,"Red Hat Display","Noto Sans Arabic","Noto Sans Hebrew","Noto Sans JP","Noto Sans KR","Noto Sans Malayalam","Noto Sans SC","Noto Sans TC","Noto Sans Thai",Helvetica,Arial,sans-serif);font-size:var(--rh-font-size-body-text-md,1rem);padding-left:var(--rh-space-md,8px);width:100%}button[data-v-df31ff14]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border-left:none;display:flex;width:var(--rh-size-icon-04,40px)}button[data-v-df31ff14]:before{background:var(--rh-context-light-color-text-link,#06c);content:"";cursor:pointer;display:block;height:28px;margin:auto;width:28px}.search-icon[data-v-df31ff14]{margin:auto}ul[data-v-df31ff14]{max-width:275px;padding:0}ul li[data-v-df31ff14]{display:inline-block;list-style:none;margin-right:var(--rh-space-xl,24px);padding:var(--rh-space-xs,4px) 0}ul li a[data-v-df31ff14]{color:var(--rh-context-light-color-text-link,#06c);text-decoration:none}@media (min-width:992px){aside[data-v-df31ff14]{flex-direction:row}.mobile[data-v-df31ff14]{display:none}.desktop[data-v-df31ff14]{display:block}input[data-v-df31ff14]{width:auto}}</style> <style>@keyframes fade-in{0%{opacity:0;visibility:hidden}1%{visibility:visible}to{opacity:1;visibility:visible}}@media (min-height:48em){.rhdocs{--rh-table--maxHeight:calc(100vh - 12.5rem)}}*,.rhdocs *,.rhdocs :after,.rhdocs :before,:after,:before{box-sizing:border-box}.rhdocs img,.rhdocs object,.rhdocs svg,img,object,svg{display:inline-block;max-width:100%;vertical-align:middle}.rhdocs hr{border:0;border-top:.0625rem solid #d2d2d2;clear:both;margin:1rem 0}.rhdocs a{color:#06c;text-decoration:underline}.rhdocs a:focus,.rhdocs a:hover{color:#036}.rhdocs a.anchor-heading{color:#151515;cursor:pointer;text-decoration:none;word-break:break-word}.rhdocs p{margin:1.49963rem 0}.rhdocs li>p{margin:0}.rhdocs h1,.rhdocs h2,.rhdocs h3,.rhdocs h4,.rhdocs h5,.rhdocs h6{font-family:RedHatDisplay,Red Hat Display,Helvetica Neue,Arial,sans-serif;font-weight:500;margin:0 0 .625rem}.rhdocs h1{font-size:2.25rem;margin:2rem 0}.rhdocs h2{font-size:1.625rem;margin:2rem 0}.rhdocs h3{font-size:1.5rem;font-weight:400}.rhdocs h4,.rhdocs h5{font-size:1.25rem}.rhdocs h5{font-weight:400}.rhdocs h6{font-size:1.125rem;font-weight:500;line-height:1.6667}.rhdocs ol,.rhdocs ul{margin:1rem 0;padding:0 0 0 1.5rem}.rhdocs ol ::marker,.rhdocs ul ::marker{font:inherit}.rhdocs li{margin:0 0 .5em;padding:0}.rhdocs li>p{margin:.5rem 0}.rhdocs li>ol,.rhdocs li>ul{margin:0}.rhdocs dl dd{margin:.5rem 0 .5rem 1rem}.rhdocs dl dd>p{margin:.5rem 0}.rhdocs .informaltable,.rhdocs .table-contents,.rhdocs .table-wrapper{max-height:var(--rh-table--maxHeight);overflow:auto}.rhdocs table{border:0;font-size:1rem;line-height:1.6667;table-layout:fixed}.rhdocs table caption{color:#585858;margin-bottom:.5rem;margin-top:.5rem;text-align:left}.rhdocs table td,.rhdocs table th{border:0;border-bottom:.0625rem solid #d2d2d2;border-bottom:.0625rem solid var(--pfe-table--Border,#d2d2d2);padding:.5em 1rem}.rhdocs table td.halign-left,.rhdocs table th.halign-left{text-align:left}.rhdocs table td.halign-center,.rhdocs table th.halign-center,table td.halign-center,table th.halign-center{text-align:center}.rhdocs table td.halign-right,.rhdocs table th.halign-right{text-align:right}.rhdocs table td.valign-top,.rhdocs table th.valign-top{vertical-align:top}.rhdocs table td.valign-middle,.rhdocs table th.valign-middle{vertical-align:middle}.rhdocs table td.valign-bottom,.rhdocs table th.valign-bottom{vertical-align:bottom}.rhdocs table thead td,.rhdocs table thead th{background:#f5f5f5;font-weight:600}.rhdocs rh-table table,.rhdocs rh-table.rh-table--expanded-vertically{max-height:-moz-max-content;max-height:max-content}.rhdocs pre.nowrap{overflow:auto;overflow-wrap:normal;white-space:pre;word-break:normal}.rhdocs .codeblock__wrapper pre{background:transparent}.rh-table--full-screen code,.rhdocs .content--md code,.rhdocs .content--sm code,.rhdocs .rh-table--full-screen code{overflow-wrap:normal;word-break:normal}.rhdocs[class] pre code,[class] pre code{background:inherit;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.rhdocs .keycap,.rhdocs kbd{background-color:#eee;background-image:linear-gradient(180deg,#ddd,#eee,#fff);border-radius:.1875rem;box-shadow:0 -.0625rem 0 0 #fff,0 .0625rem 0 .1875rem #aaa;font-family:RedHatMono,Red Hat Mono,Consolas,monospace;font-size:90%;font-weight:400;margin:0 .25rem;padding:.125rem .375rem}.keycap strong,.rhdocs .keycap strong{font-weight:inherit}.rhdocs kbd.keyseq,kbd.keyseq{background:transparent;border:0;box-shadow:none;padding:0}.rhdocs kbd.keyseq kbd,kbd.keyseq kbd{display:inline-block;margin:0 .375rem}.rhdocs kbd.keyseq kbd:first-child,kbd.keyseq kbd:first-child{margin-left:0}.rhdocs b.button{font-size:90%;font-weight:700;padding:.1875rem}.rhdocs b.button:before{content:"["}.rhdocs b.button:after{content:"]"}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}.rhdocs audio,.rhdocs canvas,.rhdocs progress,.rhdocs video{display:inline-block;vertical-align:baseline}.rhdocs audio:not([controls]){display:none;height:0}[hidden],template{display:none}.rhdocs a{background:transparent}.rhdocs a:active,.rhdocs a:hover{outline:0}.rhdocs a.anchor-heading:hover:before{color:#151515;content:"#";margin-left:-1.6rem;position:absolute}.rhdocs a.anchor-heading:focus-visible{color:#151515}@media screen and (max-width:990px){.rhdocs a.anchor-heading:hover:before{font-size:16px;margin-left:-1rem;padding-top:8px}.rhdocs h1 a.anchor-heading:hover:before{padding-top:12px}.rhdocs h4 a.anchor-heading:hover:before,.rhdocs h5 a.anchor-heading:hover:before{padding-top:4px}.rhdocs h6 a.anchor-heading:hover:before{padding-top:2px}}.rhdocs abbr[title]{border-bottom:.0625rem dotted}.rhdocs dfn{font-style:italic}.rhdocs h1{font-size:2em;margin:.67em 0}.rhdocs mark{background:#ff0;color:#000}.rhdocs small{font-size:80%}.rhdocs sub,.rhdocs sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.rhdocs sup{top:-.5em}.rhdocs sub{bottom:-.25em}.rhdocs img{border:0}.rhdocs svg:not(:root){overflow:hidden}.rhdocs figure{margin:1em 2.5rem}.rhdocs hr{box-sizing:content-box;height:0}.rhdocs code,.rhdocs kbd,.rhdocs pre,.rhdocs samp{font-family:monospace,monospace;font-size:1em}.rhdocs button,.rhdocs optgroup,.rhdocs select,.rhdocs textarea,.rhdocsinput{color:inherit;font:inherit;margin:0}.rhdocs button.copy-link-btn{background:none;border:2px solid #fff;font:1px Red Hat Text}.rhdocs button.copy-link-btn:hover{border-bottom:2px solid #06c}.rhdocs button.copy-link-btn .link-icon{padding-bottom:4px}.rhdocs button{overflow:visible}.rhdocs button,.rhdocs select{text-transform:none}.rhdocs button,.rhdocs html input[type=button],.rhdocs input[type=reset],.rhdocs input[type=submit]{-moz-appearance:button;appearance:button;-webkit-appearance:button;cursor:pointer}.rhdocs button[disabled],.rhdocs html input[disabled]{cursor:default}.rhdocs button::-moz-focus-inner,.rhdocs input::-moz-focus-inner{border:0;padding:0}.rhdocs input{line-height:normal}.rhdocs input[type=checkbox],.rhdocs input[type=radio]{box-sizing:border-box;padding:0}.rhdocs input[type=number]::-webkit-inner-spin-button,.rhdocs input[type=number]::-webkit-outer-spin-button{height:auto}.rhdocs input[type=search]{-moz-appearance:textfield;appearance:textfield;-webkit-appearance:textfield;box-sizing:content-box}.rhdocs input[type=search]::-webkit-search-cancel-button,.rhdocs input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.rhdocs fieldset{border:.0625rem solid silver;margin:0 .125rem;padding:.35em .625em .75em}.rhdocs legend{border:0;padding:0}.rhdocs textarea{overflow:auto}.rhdocs optgroup{font-weight:700}.rhdocs table{border-collapse:collapse;border-spacing:0}.rhdocs td,.rhdocs th{padding:0}.rhdocs ._additional-resources[class][class][id]:last-child{margin-top:-2rem}.rhdocs ._additional-resources[class][class]:only-child{grid-column:1/-1}._additional-resources[class][class] .additional-resources__heading,._additional-resources[class][class] .heading,._additional-resources[class][class] h1,._additional-resources[class][class] h2,._additional-resources[class][class] h3,._additional-resources[class][class] h4,._additional-resources[class][class] h5,._additional-resources[class][class] h6,._additional-resources[class][class] p.title{display:block;font-family:RedHatDisplay,Red Hat Display,Helvetica Neue,Arial,sans-serif;font-size:1.125rem;font-weight:700;line-height:1.5rem;margin:0 0 .5rem;padding:0;text-transform:uppercase}._additional-resources[class][class] ul{border:0;list-style:none;margin:0;padding:0;position:relative}.related-topic-content__wrapper ._additional-resources[class][class] ul{display:block}._additional-resources[class][class] ul:after{background-color:#fff;bottom:0;content:"";display:block;height:.125rem;position:absolute;width:100%}._additional-resources[class][class] li{border-bottom:.0625rem solid #d2d2d2;box-sizing:content-box;margin:0;padding:1rem 1.5rem 1rem 0;-moz-column-break-inside:avoid;break-inside:avoid}._additional-resources[class][class] li:only-child{grid-column:1/-1}._additional-resources[class][class] li:last-child{border:0}@media (min-width:1100px){._additional-resources[class][class] li:last-child{border-bottom:.0625rem solid #d2d2d2}}._additional-resources[class][class] li p:only-child{margin:0;padding:0}._additional-resources[class][class] li a{text-decoration:none}._additional-resources[class][class] li a:focus,._additional-resources[class][class] li a:hover{text-decoration:underline}.rhdocs table .admonitionblock>div:nth-child(2),.rhdocs table .caution>div:nth-child(2),.rhdocs table .important>div:nth-child(2),.rhdocs table .note>div:nth-child(2),.rhdocs table .tip>div:nth-child(2),.rhdocs table .warning>div:nth-child(2){margin:.5rem 0}.rhdocs table .admonitionblock>div:nth-child(2)>:first-child,.rhdocs table .caution>div:nth-child(2)>:first-child,.rhdocs table .important>div:nth-child(2)>:first-child,.rhdocs table .note>div:nth-child(2)>:first-child,.rhdocs table .tip>div:nth-child(2)>:first-child,.rhdocs table .warning>div:nth-child(2)>:first-child{margin-top:0}.rhdocs table .admonitionblock>div:nth-child(2)>:last-child,.rhdocs table .caution>div:nth-child(2)>:last-child,.rhdocs table .important>div:nth-child(2)>:last-child,.rhdocs table .note>div:nth-child(2)>:last-child,.rhdocs table .tip>div:nth-child(2)>:last-child,.rhdocs table .warning>div:nth-child(2)>:last-child{margin-bottom:0}.rhdocs .codeblock__wrapper+.codeblock__wrapper,.rhdocs pre+pre,.rhdocs pre[class]+pre[class]{margin-top:2rem}.rhdocs .codeblock__wrapper{background:#f8f8f8;overflow:visible;position:relative;transform:translate(0);z-index:0}.codeblock__wrapper:before{background-repeat:no-repeat;background-size:6.25rem 100%;bottom:var(--scrollbar__height,1px);content:"";display:block;height:7.125rem;max-height:100%;max-height:calc(100% - var(--scrollbar__height, 2px));position:absolute;right:var(--scrollbar__width,6px);top:.0625rem;width:4.0625rem;z-index:1}.rhdocs .codeblock__inner-wrapper,.rhdocs pre{max-height:calc(100vh - 6.25rem)}@media (min-height:48em){.rhdocs .codeblock__inner-wrapper,.rhdocs pre{max-height:calc(100vh - 12.5rem)}}.rhdocs .codeblock__inner-wrapper{display:grid;grid-template-columns:1fr 4.375rem}.rhdocs .codeblock__wrapper--expanded .codeblock__inner-wrapper{max-height:-moz-max-content;max-height:max-content}.codeblock__copy span{display:block;height:0;position:absolute;visibility:hidden;width:0}.codeblock__copy:focus{outline:.0625rem dashed currentcolor}.codeblock__copy svg#icon--copy{height:1rem;width:1rem}.codeblock__expand{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f0efef;border:0;cursor:pointer;height:1.75rem;left:calc(100% - 2.75rem - var(--scrollbar__width, 0px));position:absolute;text-indent:-9999em;top:3.25rem;width:1.75rem;z-index:2}.codeblock__expand:before{background:#6a6e73;content:"";height:100%;left:0;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3C!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc.--%3E%3Cpath d='M182.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l41.4-41.4v293.4l-41.4-41.3c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7V109.3l41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512'%3E%3C!--! Font Awesome Pro 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2022 Fonticons, Inc.--%3E%3Cpath d='M182.6 9.4c-12.5-12.5-32.8-12.5-45.3 0l-96 96c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l41.4-41.4v293.4l-41.4-41.3c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l96 96c12.5 12.5 32.8 12.5 45.3 0l96-96c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 402.7V109.3l41.4 41.4c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-96-96z'/%3E%3C/svg%3E");-webkit-mask-position:center center;mask-position:center center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:auto 1rem;mask-size:auto 1rem;position:absolute;top:0;width:100%}.codeblock__wrapper--expanded .codeblock__expand{background:#2b9af3}.codeblock__wrapper--expanded .codeblock__expand:before{background:#fff}.codeblock__expand:focus:before,.codeblock__expand:hover:before{background:#06c}.codeblock__wrapper--expanded .codeblock__expand:focus:before,.codeblock__wrapper--expanded .codeblock__expand:hover:before{background:#fff}.codeblock__expand:focus{outline:.0625rem dashed currentcolor}.rhdocs .calloutlist>ol,.rhdocs .colist>ol{counter-reset:colist;list-style:none;margin:1rem 0 2rem;padding:0}.rhdocs .calloutlist>ol>li,.rhdocs .colist>ol>li{counter-increment:colist;font-size:1rem;margin:.5rem 0;padding-left:1.75rem;position:relative}.rhdocs .calloutlist>ol>li .colist-num,.rhdocs .colist>ol>li .colist-num{display:none}.calloutlist>ol>li:before,.colist>ol>li:before{content:counter(colist);left:0;position:absolute;top:.1875rem}.calloutlist dt{clear:left;float:left;margin:0;padding:0 .5rem 0 0}.included-in-guides[class],.included-in-guides[class][id]:last-child{background:#fff;border:.0625rem solid #d2d2d2;border-radius:.1875rem;margin:2em 0 4em;padding:2rem 2rem 1rem}.included-in-guides[class][id]:last-child{margin-top:-2rem}.included-in-guides[class]:only-child{grid-column:1/-1}.included-in-guides[class] .additional-resources__heading,.included-in-guides[class] .heading,.included-in-guides[class] h1,.included-in-guides[class] h2,.included-in-guides[class] h3,.included-in-guides[class] h4,.included-in-guides[class] h5,.included-in-guides[class] h6,.included-in-guides[class] p.title{display:block;font-family:RedHatDisplay,Red Hat Display,Helvetica Neue,Arial,sans-serif;font-size:1.125rem;font-weight:700;line-height:1.5rem;margin:0 0 .5rem;padding:0;text-transform:uppercase}.included-in-guides[class] ul{border:0;list-style:none;margin:0;padding:0;position:relative}.related-topic-content__wrapper .included-in-guides[class] ul{display:block}.included-in-guides[class] ul:after{background-color:#fff;bottom:0;content:"";display:block;height:.125rem;position:absolute;width:100%}.included-in-guides[class] li{border-bottom:.0625rem solid #d2d2d2;box-sizing:content-box;margin:0;padding:1rem 1.5rem 1rem 0;-moz-column-break-inside:avoid;break-inside:avoid}.included-in-guides[class] li:only-child{grid-column:1/-1}.included-in-guides[class] li:last-child{border:0}@media (min-width:1100px){.included-in-guides[class] li:last-child{border-bottom:.0625rem solid #d2d2d2}}.included-in-guides[class] li p:only-child{margin:0;padding:0}.included-in-guides[class] li a{text-decoration:none}.included-in-guides[class] li a:focus,.included-in-guides[class] li a:hover{text-decoration:underline}.menuseq{display:inline-flex;overflow:hidden;text-indent:-9999em}.menuseq .menu,.menuseq .menuitem,.menuseq .submenu{display:block;position:relative;text-indent:0}.menuseq .menu+.menu:before,.menuseq .menu+.menuitem:before,.menuseq .menu+.submenu:before,.menuseq .menuitem+.menu:before,.menuseq .menuitem+.menuitem:before,.menuseq .menuitem+.submenu:before,.menuseq .submenu+.menu:before,.menuseq .submenu+.menuitem:before,.menuseq .submenu+.submenu:before{content:">";display:inline-block;font-weight:700;padding:0 .25em}.related-topic-content__wrapper{margin:2em 0}.related-topic-content__wrapper--for-guide{margin-bottom:-2.5rem;padding-bottom:.0625rem;position:relative;z-index:1}.related-topic-content__wrapper--for-guide:before{background:#f0f0f0;content:"";display:block;height:100%;left:-3rem;position:absolute;right:-4.5rem;top:0;width:auto;z-index:-1}@media (min-width:1100px){.related-topic-content__wrapper--for-guide:before{left:-2.5rem;right:-3.625rem}}.related-topic-content__wrapper--for-guide summary{padding:1em 2em 1em 2.1875rem}@media (min-width:950px){.related-topic-content__inner-wrapper{display:grid;gap:2em;grid-template-columns:repeat(2,minmax(0,1fr))}}.local-render .rhdocs-content{margin:0 auto}.rhdocs cp-documentation{display:block;padding-bottom:2.5rem}.rhdocs cp-documentation.PFElement,.rhdocs cp-documentation[pfelement]{padding:0}rh-table{display:block}::-webkit-scrollbar,:host .rhdocs ::-webkit-scrollbar{height:.625rem;width:.625rem}::-webkit-scrollbar,::-webkit-scrollbar-track,:host .rhdocs ::-webkit-scrollbar,:host .rhdocs ::-webkit-scrollbar-track{background-color:#d6d6d6}::-webkit-scrollbar-thumb,:host .rhdocs ::-webkit-scrollbar-thumb{background-color:#8e8e8e}*,:host .rhdocs *{scrollbar-color:#8e8e8e #d6d6d6}.rhdocs p:empty,p:empty{display:none}.rhdocs[class] h1 code,.rhdocs[class] h2 code,.rhdocs[class] h3 code,.rhdocs[class] h4 code,.rhdocs[class] h5 code,.rhdocs[class] h6 code,[class] h1 code,[class] h2 code,[class] h3 code,[class] h4 code,[class] h5 code,[class] h6 code{background:transparent;border:0;color:inherit;font:inherit;margin:0;padding:0}.pane-page-title h1,.rhdocs__header__primary-wrapper h1{font-family:RedHatDisplay,Red Hat Display,Helvetica Neue,Arial,sans-serif;font-size:2.25rem;line-height:1.333}.rhdocs details[class]{list-style:none;margin:1rem 0 3rem;padding:0}.rhdocs-toc[class]{background:#f2f2f2;margin:1rem 0 2rem;padding:1rem}.rhdocs-toc[class]>:last-child{margin-bottom:0}.rhdocs-toc[class] .rhdocs-toctitle{font-size:1.25rem;font-weight:400;line-height:1.6667;margin-top:0;text-transform:none}.rhdocs-toc[class] li{margin-bottom:.25em;padding-left:.5em}.preamble{margin:0 0 2rem}.sect1{margin:2rem 0 1rem}:host .sect1,cp-documentation .sect1{margin:0 0 2rem;padding:.0625rem 0 0}:host(.cp-documentation--has-external-header) .sect1:first-child>h2:first-child,:host(.cp-documentation--has-external-header) .sect1:first-child>h3:first-child{margin-top:0}.listingblock,.literalblock{margin:1rem 0}.quoteblock,.verseblock{border-left:.25rem solid #d2d2d2;margin:1rem 0;padding:1rem 1rem 1rem 2rem}.quoteblock.pullleft,.verseblock.pullleft{float:left;margin-right:3rem;width:25rem}@media (min-width:768px){.quoteblock.pullleft,.verseblock.pullleft{margin-left:-1rem}}.quoteblock.pullright,.verseblock.pullright{float:right;margin-left:3rem;width:25rem}@media (min-width:768){.quoteblock.pullright,.verseblock.pullright{margin-right:-2rem}}@media (min-width:1100px){.quoteblock.pullright,.verseblock.pullright{margin-right:-10rem}}.quoteblock>:first-child,.verseblock>:first-child{margin-top:0}.quoteblock .content,.verseblock .content{font-family:RedHatText,Red Hat Text,Helvetica Neue,Arial,sans-serif;font-size:1.25rem;line-height:1.6667}.quoteblock .attribution,.verseblock .attribution{font-size:.875rem;font-style:italic;font-weight:600;line-height:1.6667;text-transform:uppercase}.quoteblock .attribution .citetitle,.verseblock .attribution .citetitle{color:#585858}.quoteblock .attribution cite,.verseblock .attribution cite{font-size:1em}.quoteblock blockquote{font-style:italic;margin:0;padding:0}.quoteblock blockquote .content>:first-child{margin-top:0}.quoteblock blockquote .content>:first-child:before{color:#e00;content:"“";display:block;float:left;font-size:2.75rem;font-style:normal;line-height:1.125em;margin-right:.5rem}.quoteblock blockquote .content>:first-child .content>:first-child:before{content:none}.imageblock{margin:1rem 0}.imageblock.pullleft{float:left;margin-right:3rem;width:25rem}@media (min-width:768px){.imageblock.pullleft{margin-left:-1rem}}.imageblock.pullright{float:right;margin-left:3rem;width:25rem}@media (min-width:768){.imageblock.pullright{margin-right:-2rem}}@media (min-width:1100px){.imageblock.pullright{margin-right:-10rem}}.imageblock.interrupter{margin:2rem 0}@media (min-width:768px){.imageblock.interrupter{margin-left:-1rem;margin-right:-2rem}.imageblock.interrupter .caption{margin-left:1rem;margin-right:2rem}}@media (min-width:1100px){.imageblock.interrupter{margin-right:-10rem}.imageblock.interrupter .caption{margin-right:10rem}}.imageblock.interrupter img{max-width:100%}.imageblock .caption{color:#585858;display:block;font-size:.875rem;line-height:1.6667;margin:.5rem 0 0}.rhdocs-footnotes{border-top:.0625rem solid #d2d2d2;margin:3rem 0 1rem;padding:1rem 0 0}.rhdocs-footnotes>ol{margin:0;padding:0 0 0 1.5rem}@supports (counter-reset:footnotenum){.rhdocs-footnotes>ol{counter-reset:footnotenum;list-style:none;padding:0}.rhdocs-footnotes>ol>li{counter-increment:footnotenum}.rhdocs-footnotes>ol>li:before{color:#585858;content:"[" counter(footnotenum) "]";display:inline-block;margin-right:.25rem}}.rhdocs-footer{background:#ededed;color:#151515;font-size:.875rem;line-height:1.6667;margin:3rem 0 0;padding:1rem}.center{margin-left:auto;margin-right:auto}.stretch{width:100%}.visually-hidden{overflow:hidden;position:absolute;clip:rect(0,0,0,0);border:0;height:.0625rem;margin:-.0625rem;padding:0;width:.0625rem}.rh-docs-legal-notice{margin-top:4em}pre,pre[class]{margin:0;padding:1.25em 1em;position:relative}code[class*=language-],pre[class*=language-]{color:#151515;-moz-tab-size:4;-o-tab-size:4;tab-size:4}code.language-none,code.language-text,code.language-txt,pre.language-none,pre.language-text,pre.language-txt{color:#151515}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{background:#cceae7;color:#263238}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{background:#cceae7;color:#263238}:not(pre)>code[class*=language-]{border-radius:.2em;padding:.1em;white-space:normal}.token.atrule{color:#40199a}.token.attr-name{color:#06c}.token.attr-value,.token.attribute{color:#b300b3}.token.boolean{color:#40199a}.token.builtin,.token.cdata,.token.char,.token.class,.token.class-name{color:#06c}.token.comment{color:#6a6e73}.token.constant{color:#40199a}.token.deleted{color:#c9190b}.token.doctype{color:#6a6e73}.token.entity{color:#c9190b}.token.function{color:#40199a}.token.hexcode{color:#b300b3}.token.id,.token.important{color:#40199a;font-weight:700}.token.inserted{color:#06c}.token.keyword{color:#40199a}.token.number{color:#b300b3}.token.operator{color:#06c}.token.prolog{color:#6a6e73}.token.property{color:#06c}.token.pseudo-class,.token.pseudo-element{color:#b300b3}.token.punctuation,.token.regex{color:#06c}.token.selector{color:#c9190b}.token.string{color:#b300b3}.token.symbol{color:#40199a}.token.unit{color:#b300b3}.token.url,.token.variable{color:#c9190b}.rhdocs.local-render{margin:0 auto;max-width:45.8125rem;padding:0 1.5rem}@media print{.field code,.field pre,code[class*=language-],pre,pre[class*=language-]{white-space:pre-wrap!important;word-wrap:break-word!important;overflow-wrap:break-word!important;word-break:break-word!important}}.book-nav__list[class]{display:flex;justify-content:space-between;line-height:var(--jupiter__lineHeight--xs,1.3333);list-style:none;margin:5rem 0 0;padding:0}@media (min-width:1200px){.book-nav__list[class]{display:grid;gap:2rem;grid-template-columns:repeat(2,minmax(0,1fr))}}.book-nav__item a{display:inline-block;font-size:.875rem;font-weight:500;padding-left:1.25rem;position:relative;text-transform:uppercase}.book-nav__item a:before{background:url(/sites/dxp-docs/penumbra-dist/jupiter/images/arrow-down-solid.svg) no-repeat;background-size:contain;content:"";display:block;height:.875rem;left:0;position:absolute;top:.125rem;transform:rotate(90deg);width:.875rem}.book>.titlepage:not(:last-child),.rhdocs .chapter,section[id]{padding-bottom:3.75rem}.book>.titlepage .chapter:last-child,.book>.titlepage section[id]:last-child,.chapter .chapter:last-child,.chapter section[id]:last-child,section[id] .chapter:last-child,section[id] section[id]:last-child{margin-bottom:-3.75rem}.rhdocs .codeblock__wrapper+section[id],pre+section[id]{padding-top:3.75rem}.rhdocs .cta-link{font-size:inherit}.rhdocs a{word-wrap:break-word;overflow-wrap:break-word}.rhdocs .caution,.rhdocs .important,.rhdocs .note,.rhdocs .tip,.rhdocs .warning{padding:.8888888889em;position:relative}.rhdocs .QSIPopOver{bottom:18.75rem!important;top:auto!important}.rhdocs .alert{position:relative}.rhdocs button.dismiss-button{background:none;border:0;cursor:pointer;height:2.5rem;margin-top:-1.25rem;padding:0;position:absolute;right:.3125rem;text-align:center;top:50%;width:2.5rem;z-index:50}.rhdocs button.dismiss-button:after{content:"\f109";display:inline-block;filter:alpha(opacity=30);font-family:rh-web-iconfont;font-size:1.3125rem;font-style:normal;font-variant:normal;font-weight:400;line-height:1;line-height:2.5rem;opacity:.3;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none!important;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.rhdocs .book>.titlepage,.rhdocs .chapter,.rhdocs section[id]{padding-bottom:var(--rh-space-4xl,64px)}.rhdocs .alert{border:0;border-radius:0}.rhdocs .alert>h2:first-child,.rhdocs .alert>h3:first-child,.rhdocs .alert>h4:first-child,.rhdocs .alert>h5:first-child,.rhdocs .alert>h6:first-child,.rhdocs .alert>p:first-child{margin-top:0!important}.rhdocs .alert>p:last-child{margin-bottom:0!important}.rhdocs .alert-w-icon[class]{padding-left:2.8125rem}.rhdocs .alert-w-icon .alert-icon{float:left;font-size:1.125rem;margin-left:-1.875rem;margin-right:.625rem}.rhdocs .alert-w-icon .alert-icon[class*=" rh-icon-"],.rhdocs .alert-w-icon .alert-icon[class^=rh-icon-]{font-size:2.25rem;line-height:1em;margin-left:-2.5rem;margin-top:-.375rem}.rhdocs .alert-w-icon .alert-icon[class*=" icon-innov-prev"],.rhdocs .alert-w-icon .alert-icon[class^=icon-innov-prev]{font-size:1.3125rem;margin-top:.25rem}.rhdocs .alert-w-icon.alert-plain{background:none;color:#151515;padding-left:5rem}.rhdocs .alert-w-icon.alert-plain .alert-icon{font-size:3rem;margin-left:-4.375rem;margin-right:0}.rhdocs .alert-w-icon.alert-plain.alert-success .alert-icon{color:#3f9c35}.rhdocs .alert-w-icon.alert-plain.alert-info .alert-icon{color:#0088ce}.rhdocs .alert-w-icon.alert-plain.alert-warning .alert-icon{color:#f0ab00}.rhdocs .alert-w-icon.alert-plain.alert-danger .alert-icon{color:#e00}#target_banner .copy-url{float:right;margin-top:0}#target_banner .dropdown-menu{font-size:inherit}.titlepage .svg-img[data*="title_logo.svg"]{margin:1.5rem 0;width:15rem}.para{margin:1.49963rem 0}.para[class]{margin-bottom:1.49963rem}dd{margin-bottom:2.5rem}.rhdocs .card-light,.rhdocs .card-light-gray,.rhdocs .card-light-grey{background:#f0f0f0;border:.0625rem solid #f0f0f0;color:#151515}.rhdocs .card-light-gray.push-bottom:first-child,.rhdocs .card-light-grey.push-bottom:first-child,.rhdocs .card-light.push-bottom:first-child{margin-bottom:3.125rem!important}.rhdocs .card-light a.card-link,.rhdocs .card-light h1,.rhdocs .card-light h2,.rhdocs .card-light h3,.rhdocs .card-light h4,.rhdocs .card-light h5,.rhdocs .card-light h6,.rhdocs .card-light-gray a.card-link,.rhdocs .card-light-gray h1,.rhdocs .card-light-gray h2,.rhdocs .card-light-gray h3,.rhdocs .card-light-gray h4,.rhdocs .card-light-gray h5,.rhdocs .card-light-gray h6,.rhdocs .card-light-grey a.card-link,.rhdocs .card-light-grey h1,.rhdocs .card-light-grey h2,.rhdocs .card-light-grey h3,.rhdocs .card-light-grey h4,.rhdocs .card-light-grey h5,.rhdocs .card-light-grey h6{color:#151515}.rhdocs .card-light-gray.card-active:after,.rhdocs .card-light-grey.card-active:after,.rhdocs .card-light.card-active:after{border-top-color:#f0f0f0}.rhdocs .card-md,.rhdocs .card-narrow{display:block;padding:1.1875rem;white-space:normal;word-wrap:break-word}.rhdocs .card .card-heading.card-heading-sm,.rhdocs .card-sm .card .card-heading{font-size:1.0625em;font-weight:500;line-height:1.5}.rhdocs .card .card-heading.card-heading-flush{margin-bottom:.25rem}.rhdocs .card .card-heading.card-heading-red{color:#d10000}.rhdocs .card>p{margin-top:0}.rhdocs .card>p:last-child{margin-bottom:0}.rhdocs .new-experience{background-color:#e7f1fa;border:.0625rem solid #bee1f4;font-size:1rem;margin:1.5rem;padding:1.5rem;position:relative;z-index:1}@media (min-width:48rem){.new-experience{display:flex}.new-experience--contained{left:50%;position:relative;transform:translateX(-50%);width:calc(100vw - 2.5rem)}}.new-experience__primary-content{flex-grow:1}@media (min-width:48rem){.new-experience__primary-content{margin-right:1.25rem}}.new-experience__title{font-size:inherit;font-weight:inherit;line-height:1.6;margin:0;padding:0}.new-experience__title+a,.new-experience__title+pfe-cta{display:inline-block;margin-top:1.5em}.new-experience__secondary-content{min-width:12.5rem}@media (min-width:48rem){.new-experience__secondary-content{text-align:right}}.example{border-left:.3125rem solid #ccc;margin-bottom:2rem;padding:1rem 0 1rem 1rem}dl.calloutlist[class]{display:grid;gap:1.25em .75em;grid-template-columns:min-content 1fr}dl.calloutlist[class] dt{float:none;margin:0;padding:0}dl.calloutlist[class] dd{margin:0;padding:0}dl.calloutlist[class] dd>:first-child{margin-top:0}dl.calloutlist[class] dd>:last-child{margin-bottom:0}.toast{background-color:#000;background-color:rgba(0,0,0,.9);bottom:.9375rem;box-shadow:0 .125rem .3125rem 0 rgba(0,0,0,.26);color:#fff;left:.9375rem;max-width:32.8125rem;min-width:6.25rem;padding:.9375rem;position:fixed;right:.9375rem;transform:translate3d(0,150%,0);transition:transform .2s cubic-bezier(.465,.183,.153,.946);will-change:transform;z-index:999}.toast.show{transform:translateZ(0)}.toast a{color:#fff;text-decoration:underline}.toast a:focus,.toast a:hover{color:#2b9af3}.toast a.btn{text-decoration:none}.toast .btn.btn-link{color:#fff}.toast .close{color:#fff;opacity:.3;text-decoration:none}.toast .close:focus,.toast .close:hover{color:#fff;opacity:.5}.no-csstransforms3d.csstransitions .toast{transition:all .2s cubic-bezier(.465,.183,.153,.946)}.no-csstransforms3d .toast{opacity:0;visibility:hidden}.no-csstransforms3d .toast.show{opacity:1;visibility:visible}.annotator-outer[class][class]{display:none;flex-direction:column;flex-grow:1;height:auto;margin:0;position:static;width:auto}@media (min-width:1400px){.annotator-outer[class][class]{display:flex}}.annotator-frame[class] *{height:auto}@media (min-width:1400px){.annotator-frame .h-sidebar-iframe[class]{position:static;width:calc(100% + 1.5rem)}}.annotator-toolbar[class][class]{position:static;width:auto}.annotator-toolbar>ul,.annotator-toolbar>ul>li{display:block;height:auto;list-style:none;margin:0;padding:0;width:auto}.annotator-toolbar>ul>li{display:flex;justify-content:flex-end}.annotator-frame[class] .annotator-frame-button--sidebar_toggle,.annotator-outer .annotator-frame-button[class][class],.app-content-wrapper *{font-family:RedHatText,Red Hat Text,Helvetica Neue,Arial,sans-serif!important}.annotator-outer .annotator-frame-button[class][class]{font-size:.9375rem;font-weight:500;height:auto;line-height:1.333;margin-right:1.875rem;padding:.75em 1em;position:static}@media (min-width:1400px){.annotator-outer .annotator-frame-button[class][class]{margin-right:0}}.annotator-outer iframe{flex-grow:1;margin-bottom:1.25rem}@media (min-width:1400px){.annotator-outer iframe{min-height:37.5rem}}.producttitle{color:#000;font-size:1.25rem;text-transform:uppercase}.producttitle .productnumber{color:var(--jupiter__palette__red--50,#e00)}.cp-modal-open,.zoom-open{overflow:hidden}.cp-modal,.cp-video-modal,.zoom-modal{bottom:0;display:none;filter:alpha(opacity=0);left:0;opacity:0;outline:0;overflow:hidden;position:fixed;right:0;top:0;transition:all .2s cubic-bezier(.465,.183,.153,.946);z-index:1040;z-index:1050;-webkit-overflow-scrolling:touch}.rhdocs .in.cp-modal,.rhdocs .in.cp-video-modal,.rhdocs .in.zoom-modal{display:block;filter:alpha(opacity=100);opacity:1;overflow-x:hidden;overflow-y:auto}.rhdocs .cp-modal .close,.rhdocs .cp-video-modal .close,.rhdocs .zoom-modal .close{background-color:#fff;border-radius:50%;color:#1a1a1a;font-size:1.75rem;height:28px;height:1.75rem;line-height:1.75rem;margin-bottom:.375rem;margin-top:0;opacity:.9;position:absolute;right:-.5rem;text-shadow:none;top:0;width:28px;width:1.75rem}.cp-modal .close:after,.cp-video-modal .close:after,.zoom-modal .close:after{line-height:1.75rem}.cp-modal-wrap,.zoom-wrap{margin:.625rem;padding-top:.5rem;position:relative}@media (min-width:48rem){.rhdocs .cp-modal-wrap,.rhdocs .zoom-wrap{margin:2.8125rem auto;width:38.4375rem}}@media (min-width:62rem){.rhdocs .cp-modal-wrap,.rhdocs .zoom-wrap{width:49.8958rem}}@media (min-width:75rem){.rhdocs .cp-modal-wrap,.rhdocs .zoom-wrap{width:60.3125rem}}.rhdocs .cp-modal-body :last-child{margin-bottom:0}.rhdocs .cp-modal-backdrop,.rhdocs .zoom-backdrop{background-color:#000;bottom:0;display:none;filter:alpha(opacity=0);left:0;opacity:0;position:fixed;right:0;top:0;transition:opacity .2s cubic-bezier(.465,.183,.153,.946);z-index:1040}.rhdocs .in.cp-modal-backdrop,.rhdocs .in.zoom-backdrop{display:block;filter:alpha(opacity=80);opacity:.8}.rhdocs .cp-modal-body{background:#fff;padding:1.875rem}.rhdocs .cp-modal[data-cp-modal-video=true] .cp-modal-body,.rhdocs .cp-video-modal .cp-modal-body{padding:0}.rhdocs [data-action=zoom]{position:relative}.rhdocs [data-action=zoom]:after{background:rgba(0,0,0,.4);bottom:0;color:#fff;display:inline-block;font-family:rh-web-iconfont;font-style:normal;font-variant:normal;font-weight:400;line-height:1;padding:.375rem;position:absolute;right:0;text-decoration:inherit;text-decoration:none!important;text-rendering:optimizeLegibility;text-transform:none!important;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.rhdocs [data-action=zoom]:focus:after,.rhdocs [data-action=zoom]:hover:after{background:rgba(0,0,0,.9)}.rhdocs .zoom-wrap .zoom-larger{text-align:center}.rhdocs .zoom-wrap .zoom-larger a{color:#fff}.rhdocs .zoom-wrap .zoom-larger a:focus,.rhdocs .zoom-wrap .zoom-larger a:hover{color:#fff;text-decoration:underline}.rhdocs .zoom-wrap .zoom-larger a:after{content:"â¿»";display:inline-block;margin-left:.25rem}.rhdocs .zoom-body{background:#fff;border-radius:.5rem;margin:0 0 1rem;padding:1rem;text-align:center}.rhdocs .zoom-body .video-wrapper{height:0;overflow:hidden;padding-bottom:56.25%;position:relative}.rhdocs .zoom-body .video-wrapper[data-aspect-ratio="4:3"]{padding-bottom:75%}.rhdocs .zoom-body iframe{height:100%;left:0;position:absolute;top:0;width:100%}.rhdocs .para>.title[class],.rhdocs p.title[class]{font-size:1rem;font-style:normal;font-weight:700;line-height:1.6667;margin:1.25rem 0 0;text-transform:none}.rhdocs .para>.title[class]+.content>:first-child,.rhdocs .para>.title[class]+p,.rhdocs p.title[class]+.content>:first-child,.rhdocs p.title[class]+p{margin-top:0}.rhdocs [class] pre .caution,.rhdocs [class] pre .important,.rhdocs [class] pre .note,.rhdocs [class] pre .tip,.rhdocs [class] pre .warning{background:transparent;border:0;color:inherit;font:inherit;margin:0;padding:0}.rhdocs [class] pre .caution:after,.rhdocs [class] pre .important:after,.rhdocs [class] pre .note:after,.rhdocs [class] pre .tip:after,.rhdocs [class] pre .warning:after{content:none}.rhdocs [class] code.email{background-color:transparent;font:inherit;padding:0}.rhdocs [class] .author{margin-bottom:1.5rem}.rhdocs [class] .author .author{margin-bottom:0}.rhdocs table{margin:2rem 0}.rhdocs [class] table{width:auto}.rhdocs table .table-contents table{max-width:100%;overflow:auto}.rhdocs rh-table table{margin:0;max-width:9999em;overflow:visible}.rhdocs td,.rhdocs th{border-left:0;padding:.5em 1rem;transition:background .25s ease-out}.rhdocs td.content--md[class][class],.rhdocs th.content--md[class][class]{min-width:13em}.rhdocs td.content--lg[class][class],.rhdocs th.content--lg[class][class]{min-width:20em}.rhdocs thead th{padding-top:1.5em}.rhdocs caption{color:currentColor;color:var(--pfe-table__caption--Color,currentColor);font-weight:700;margin-bottom:.5rem;margin-top:.5rem;text-align:center}.rhdocs .revhistory table td,.rhdocs .revhistory table th{border-color:transparent}.rhdocs .revhistory table td{padding:.625rem .875rem}.rhdocs .revhistory table.simplelist{margin:0}@media print{#masthead{display:none!important}}.rh-table--is-full-screen #to-top{display:none}.rhdocs{--rh-table--maxHeight:calc(100vh - 6.25rem);color:#151515;font-family:var(--rh-font-family-body-text,RedHatText,"Red Hat Text","Noto Sans Arabic","Noto Sans Hebrew","Noto Sans JP","Noto Sans KR","Noto Sans Malayalam","Noto Sans SC","Noto Sans TC","Noto Sans Thai",Helvetica,Arial,sans-serif);font-size:var(--rh-body-copy-lage,1.125rem);line-height:1.6667;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.rhdocs rh-codeblock::slotted(#content){border-radius:.25rem;padding:var (--rh-space-lg,16px)}.rhdocs rh-codeblock .screen{display:grid;grid-template-columns:1fr 4.375rem}.rhdocs rh-codeblock[class][class][class][class][class]{max-width:99999em}.rhdocs .codeblock__copy span{display:block;height:0;position:absolute;visibility:hidden;width:0}.rhdocs .codeblock__copy:focus{outline:.0625rem dashed currentcolor}.rhdocs .codeblock__copy svg#icon--copy{height:1rem;width:1rem}.rhdocs pre{border:0;max-height:-moz-max-content;max-height:max-content}.rhdocs pre,pre[class]{margin:0;padding:1.25em 1em;position:relative}.rhdocs rh-code-block>div.codeblock__inner-wrapper>pre,.rhdocs rh-code-block>div.codeblock__inner-wrapper>pre[class]{margin:0;padding:0;position:relative}.rhdocs code[class*=language-],pre[class*=language-]{color:#151515;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.rhdocs code.literal{background:#eee;border-radius:.25rem;color:#000;font-size:.875rem;line-height:1.6667;overflow-wrap:break-word;padding:.125em .5em;word-break:break-word}.rhdocs code.literal,.rhdocs kbd,.rhdocs span.keycap{font-family:RedHatMono,Red Hat Mono,Consolas,monospace}.rhdocs kbd,.rhdocs span.keycap{background-color:#eee;background-image:linear-gradient(180deg,#ddd,#eee,#fff);border-radius:.1875rem;box-shadow:0 -.0625rem 0 0 #fff,0 .0625rem 0 .1875rem #aaa;font-size:90%;font-weight:400;margin:0 .25rem;padding:.125rem .375rem}.rhdocs ol,.rhdocs ul{margin:1rem 0;padding:0 0 0 1.5rem}.rhdocs ._additional-resources[class][class],.rhdocs ._additional-resources[class][class][id]:last-child{background:#fff;border:.0625rem solid #d2d2d2;border-radius:.1875rem;margin:2em 0 4em;padding:2rem 2rem 1rem}.rhdocs ._additional-resources[class][class] ul{border:0;list-style:none;margin:0;padding:0;position:relative}.rhdocs ._additional-resources[class][class] li{border-bottom:.0625rem solid #d2d2d2;box-sizing:content-box;margin:0;padding:1rem 1.5rem 1rem 0;-moz-column-break-inside:avoid;break-inside:avoid}.rhdocs ._additional-resources[class][class] li:last-child{border:0}.rhdocs section.section#additional_resource .additional-resources__heading,.rhdocs section.section#additional_resource .heading,.rhdocs section.section#additional_resource h1,.rhdocs section.section#additional_resource h2,.rhdocs section.section#additional_resource h3,.rhdocs section.section#additional_resource h4,.rhdocs section.section#additional_resource h5,.rhdocs section.section#additional_resource h6,.rhdocs section.section#additional_resource p.title{display:block;font-family:RedHatDisplay,Red Hat Display,Helvetica Neue,Arial,sans-serif;font-size:1.125rem;font-weight:700;line-height:1.5rem;margin:0 0 .5rem;padding:0;text-transform:uppercase}.rhdocs section.section:first-of-type{margin-top:var(--rh-space-4xl,64px)}.rhdocs section.section p{margin-bottom:var(--rh-space-lg,16px);margin-top:0;word-wrap:break-word}.rhdocs .section.section h1,.rhdocs .section.section h2,.rhdocs .section.section h3,.rhdocs .section.section h4,.rhdocs .section.section h5,.rhdocs .section.section h6,.rhdocs h1,.rhdocs h2,.rhdocs h3,.rhdocs h4,.rhdocs h5,.rhdocs h6{font-family:RedHatDisplay,Red Hat Display,Helvetica Neue,Arial,sans-serif;font-weight:400;line-height:1.3333}.rhdocs h1:first-of-type,.rhdocs h2:first-of-type,.rhdocs h3:first-of-type,.rhdocs h4:first-of-type,.rhdocs h5:first-of-type,.rhdocs h6:first-of-type{margin-top:0}.rhdocs h1,.rhdocs h2,.rhdocs h3,.rhdocs h4,.rhdocs h5,.rhdocs h6{font-family:RedHatDisplay,Red Hat Display,Helvetica,Arial,sans-serif;font-weight:400;line-height:1.3333}.rhdocs h2,.rhdocs section.section h2{font-size:var(--rh-font-size-heading-md,1.75rem)}.rhdocs h3,.rhdocs section.section h3{font-size:1.5rem;font-weight:400}.rhdocs dl dt{font-weight:600;margin:.5rem 0}.rhdocs dl{display:block;margin-block-end:1em;margin-block-start:1em;margin-inline-end:0;margin-inline-start:0}.rhdocs .para{margin:1.49963rem 0}.rhdocs dl.calloutlist[class] dt{float:none;margin:0;padding:0}.rhdocs dl.calloutlist[class] dd>:last-child{margin-bottom:0}.rhdocs dl.calloutlist[class]{display:grid;gap:1.25em .75em;grid-template-columns:fit-content(40%) 1fr}.rhdocs .calloutlist dt{clear:left;display:flex;flex-wrap:wrap;float:left;margin:0;padding:0 .5rem 0 0}.rhdocs .calloutlist dt a:not(:first-child){padding-left:4px}.rhdocs dl.calloutlist[class] dd{margin:0;padding:0}.rhdocs .callout,.rhdocs .colist>ol>li:before,.rhdocs .conum{background:#06c;border-radius:50%;color:#fff;display:inline-block;font-family:RedHatText,Red Hat Text,Helvetica Neue,Arial,sans-serif;font-size:.75rem;font-style:normal;font-weight:600;height:1.25rem;line-height:1.35rem;padding:0;position:relative;text-align:center;top:-.125em;vertical-align:middle;width:1.25rem}.rhdocs img,.rhdocs object,.rhdocs svg{display:inline-block;max-width:100%;vertical-align:middle}.rhdocs .titlepage .svg-img[data*="title_logo.svg"]{margin:1.5rem 0;width:15rem}.rhdocs[class] .author{margin-bottom:1.5rem}.rhdocs[class] .author .author{margin-bottom:0}.rhdocs .para>.title[class],p.title[class]{font-size:1rem;font-style:normal;font-weight:700;line-height:1.6667;margin:1.25rem 0 0}.rhdocs .example{border-left:.3125rem solid #ccc;margin-bottom:2rem;padding:1rem 0 1rem 1rem}.rhdocs code{background:#eee;color:#000;font-family:RedHatMono,Red Hat Mono,Consolas,monospace;font-size:.875rem;line-height:1.6667;overflow-wrap:break-word;padding:.125em .5em;word-break:break-word}.rhdocs .para[class]{margin-bottom:1.49963rem}.rhdocs[class] code.email{background-color:transparent;font:inherit;padding:0}rh-alert.admonition #description,rh-alert.admonition p{font-size:var(--rh-font-size-body-text-md,1rem)}rh-alert{width:-moz-fit-content;width:fit-content}.rhdocs .producttitle{color:#000;font-size:1.25rem;text-transform:uppercase}.rhdocs dl{margin:1rem 0}.rhdocs dl dt{font-weight:600;margin:.5rem 0}.rhdocs ol ol{list-style:lower-roman}.rhdocs .codeblock--processed pf-clipboard-copy::part(input),.rhdocs .codeblock--processed pf-clipboard-copy::part(span){display:none}.token.tag{color:#c9190b}.calloutlist div.para{margin:0}rh-alert.admonition{margin-bottom:var(--rh-space-lg,1rem)}.guibutton,.guimenu,.guimenuitem{font-weight:700}.guibutton{font-size:90%;padding:.1875rem}.guibutton:before{content:"["}.guibutton:after{content:"]"}.docs-content-container,.rhdocs{--rh-table--maxHeight:calc(100vh - 6.25rem);color:#151515;font-family:RedHatText,Red Hat Text,Helvetica Neue,Arial,sans-serif;font-size:1.125rem;line-height:1.6667;-moz-tab-size:4;-o-tab-size:4;tab-size:4}pre[hidden]{display:none}.codeblock[class][class][class][class][class]{max-width:99999em}.codeblock__wrapper{background:var(--rh-color-surface-lighter,#f2f2f2);margin:1rem 0;overflow:visible;position:relative;transform:translate(0);z-index:0}.codeblock__inner-wrapper:after{content:"";display:block;min-height:.625rem;width:4.375rem}.codeblock__copy{--pfe-clipboard--icon--Color--hover:#06c;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f0efef;height:1.75rem;left:calc(100% - 2.75rem - var(--scrollbar__width, 0px));padding:.3125rem .375rem;position:absolute;top:1rem;width:1.75rem;z-index:2}.codeblock__inner-wrapper pre{border:0;max-height:-moz-max-content;max-height:max-content}.pfe-clipboard:not([copied]) .pfe-clipboard__text--success,:host(:not([copied])) .pfe-clipboard__text--success{display:none!important}.codeblock[class]{margin:0;overflow:visible;padding-right:0}pre{display:block;font-size:.8125rem;line-height:1.42857;margin:0 0 .625rem;word-break:break-all;word-wrap:break-word;background-color:var(--rh-color-surface-lighter,#f2f2f2);border:.0625rem solid #ccc;border-radius:.25rem;color:#333}.docs-content-container pre,.rhdocs pre{background:var(--rh-color-surface-lighter,#f2f2f2);color:#151515;font-family:RedHatMono,Red Hat Mono,Consolas,monospace;font-size:.875rem;line-height:1.6667;overflow-wrap:normal;white-space:pre;word-break:normal}.rhdocs pre[class]{line-height:1.6667;overflow-x:auto}rh-codeblock pre[class][class]{overflow-x:auto}.pfe-clipboard__text--success{background-color:#ddd;border:1px solid #000;border-radius:2px}*,:after,:before{box-sizing:border-box}:root{--rh-space-xs:4px;--rh-space-sm:6px;--rh-space-md:8px;--rh-space-lg:16px;--rh-space-xl:24px;--rh-space-2xl:32px;--rh-space-3xl:48px;--rh-space-4xl:64px;--rh-space-5xl:80px;--rh-space-6xl:96px;--rh-space-7xl:128px;--rh-font-size-body-text-xs:.75rem;--rh-font-size-body-text-sm:.875rem;--rh-font-size-body-text-md:1rem;--rh-font-size-body-text-lg:1.125rem;--rh-font-size-body-text-xl:1.25rem;--rh-font-size-body-text-2xl:1.5rem;--rh-font-size-heading-xs:1.25rem;--rh-font-size-heading-sm:1.5rem;--rh-font-size-heading-md:1.75rem;--rh-font-size-heading-lg:2.25rem;--rh-font-size-heading-xl:2.5rem;--rh-font-size-heading-2xl:3rem;--pfe-navigation--logo--maxWidth:200px;--pfe-navigation__logo--height:40px;--pfe-navigation--fade-transition-delay:500ms;--pfe-navigation__nav-bar--highlight-color:var(--rh-color-brand-red-on-dark,#e00);--pf-global--icon--FontSize--sm:.75rem}body,html{font-family:Red Hat Text,sans-serif;font-size:var(--rh-font-size-body-text-md,1rem);line-height:var(--rh-line-height-body-text,1.5);margin:0}h1,h2,h3,h4,h5,h6{font-family:Red Hat Display,sans-serif;font-weight:400;line-height:var(--rh-line-height-heading,1.3)}h1{font-size:var(--rh-font-size-heading-2xl,3rem);line-height:62px}h2{font-size:var(--rh-font-size-heading-xl,2.5rem);line-height:48px}h3{font-size:var(--rh-font-size-heading-lg,2.25rem)}h4{font-size:var(--rh-font-size-heading-md,2.25rem)}h5{font-size:var(--rh-font-size-heading-sm,2.25rem)}h6{font-size:var(--rh-font-size-heading-xs,2.25rem)}main{line-height:30px}section{padding-bottom:3rem;padding-top:3rem}img{height:auto;max-width:100%}a{color:var(--rh-color-interactive-blue-darker,#06c);text-decoration:none}a:hover{color:var(--rh-color-interactive-blue-darkest,#004080)}rh-alert.html-container a{text-decoration:underline}.container{padding-left:12px;padding-right:12px}.container,.container-fluid{margin-left:auto;margin-right:auto;width:100%}.container-fluid{padding:12px}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{min-width:1140px}}@media (min-width:1400px){.container{min-width:1320px}}.grid{display:grid;gap:var(--rh-space-xl,24px)}.grid-center{margin:auto}.grid.grid-col-2{grid-template-columns:repeat(2,1fr)}.grid.grid-col-3{grid-template-columns:repeat(3,1fr)}.grid.grid-col-4{grid-template-columns:repeat(4,1fr)}.grid.grid-col-5{grid-template-columns:repeat(5,1fr)}.grid.grid-col-6{grid-template-columns:repeat(6,1fr)}.grid.grid-col-7{grid-template-columns:repeat(7,1fr)}.grid.grid-col-8{grid-template-columns:repeat(8,1fr)}.grid.grid-col-9{grid-template-columns:repeat(9,1fr)}.grid.grid-col-10{grid-template-columns:repeat(10,1fr)}.grid.grid-col-11{grid-template-columns:repeat(11,1fr)}.grid.grid-col-12{grid-template-columns:repeat(12,1fr)}@media (min-width:576px){.grid.grid-col-sm-2{grid-template-columns:repeat(2,1fr)}.grid.grid-col-sm-3{grid-template-columns:repeat(3,1fr)}.grid.grid-col-sm-4{grid-template-columns:repeat(4,1fr)}.grid.grid-col-sm-5{grid-template-columns:repeat(5,1fr)}.grid.grid-col-sm-6{grid-template-columns:repeat(6,1fr)}.grid.grid-col-sm-7{grid-template-columns:repeat(7,1fr)}.grid.grid-col-sm-8{grid-template-columns:repeat(8,1fr)}.grid.grid-col-sm-9{grid-template-columns:repeat(9,1fr)}.grid.grid-col-sm-10{grid-template-columns:repeat(10,1fr)}.grid.grid-col-sm-11{grid-template-columns:repeat(11,1fr)}.grid.grid-col-sm-12{grid-template-columns:repeat(12,1fr)}}@media (min-width:768px){.grid.grid-col-md-2{grid-template-columns:repeat(2,1fr)}.grid.grid-col-md-3{grid-template-columns:repeat(3,1fr)}.grid.grid-col-md-4{grid-template-columns:repeat(4,1fr)}.grid.grid-col-md-5{grid-template-columns:repeat(5,1fr)}.grid.grid-col-md-6{grid-template-columns:repeat(6,1fr)}.grid.grid-col-md-7{grid-template-columns:repeat(7,1fr)}.grid.grid-col-md-8{grid-template-columns:repeat(8,1fr)}.grid.grid-col-md-9{grid-template-columns:repeat(9,1fr)}.grid.grid-col-md-10{grid-template-columns:repeat(10,1fr)}.grid.grid-col-md-11{grid-template-columns:repeat(11,1fr)}.grid.grid-col-md-12{grid-template-columns:repeat(12,1fr)}}@media (min-width:992px){.grid.grid-col-lg-2{grid-template-columns:repeat(2,1fr)}.grid.grid-col-lg-3{grid-template-columns:repeat(3,1fr)}.grid.grid-col-lg-4{grid-template-columns:repeat(4,1fr)}.grid.grid-col-lg-5{grid-template-columns:repeat(5,1fr)}.grid.grid-col-lg-6{grid-template-columns:repeat(6,1fr)}.grid.grid-col-lg-7{grid-template-columns:repeat(7,1fr)}.grid.grid-col-lg-8{grid-template-columns:repeat(8,1fr)}.grid.grid-col-lg-9{grid-template-columns:repeat(9,1fr)}.grid.grid-col-lg-10{grid-template-columns:repeat(10,1fr)}.grid.grid-col-lg-11{grid-template-columns:repeat(11,1fr)}.grid.grid-col-lg-12{grid-template-columns:repeat(12,1fr)}}.span-1{grid-column:span 1}.span-2{grid-column:span 2}.span-3{grid-column:span 3}.span-4{grid-column:span 4}.span-5{grid-column:span 5}.span-6{grid-column:span 6}.span-7{grid-column:span 7}.span-8{grid-column:span 8}.span-9{grid-column:span 9}.span-10{grid-column:span 10}.span-11{grid-column:span 11}.span-12{grid-column:span 12}@media (min-width:399px){.span-xs-1{grid-column:span 1}.span-xs-2{grid-column:span 2}.span-xs-3{grid-column:span 3}.span-xs-4{grid-column:span 4}.span-xs-5{grid-column:span 5}.span-xs-6{grid-column:span 6}.span-xs-7{grid-column:span 7}.span-xs-8{grid-column:span 8}.span-xs-9{grid-column:span 9}.span-xs-10{grid-column:span 10}.span-xs-11{grid-column:span 11}.span-xs-12{grid-column:span 12}}@media (min-width:768px){.span-md-1{grid-column:span 1}.span-md-2{grid-column:span 2}.span-md-3{grid-column:span 3}.span-md-4{grid-column:span 4}.span-md-5{grid-column:span 5}.span-md-6{grid-column:span 6}.span-md-7{grid-column:span 7}.span-md-8{grid-column:span 8}.span-md-9{grid-column:span 9}.span-md-10{grid-column:span 10}.span-md-11{grid-column:span 11}.span-md-12{grid-column:span 12}}@media (min-width:992px){.span-lg-1{grid-column:span 1}.span-lg-2{grid-column:span 2}.span-lg-3{grid-column:span 3}.span-lg-4{grid-column:span 4}.span-lg-5{grid-column:span 5}.span-lg-6{grid-column:span 6}.span-lg-7{grid-column:span 7}.span-lg-8{grid-column:span 8}.span-lg-9{grid-column:span 9}.span-lg-10{grid-column:span 10}.span-lg-11{grid-column:span 11}.span-lg-12{grid-column:span 12}}@media (min-width:1025px){.span-xl-1{grid-column:span 1}.span-xl-2{grid-column:span 2}.span-xl-3{grid-column:span 3}.span-xl-4{grid-column:span 4}.span-xl-5{grid-column:span 5}.span-xl-6{grid-column:span 6}.span-xl-7{grid-column:span 7}.span-xl-8{grid-column:span 8}.span-xl-9{grid-column:span 9}.span-xl-10{grid-column:span 10}.span-xl-11{grid-column:span 11}.span-xl-12{grid-column:span 12}}@media (min-width:1200px){.span-2xl-1{grid-column:span 1}.span-2xl-2{grid-column:span 2}.span-2xl-3{grid-column:span 3}.span-2xl-4{grid-column:span 4}.span-2xl-5{grid-column:span 5}.span-2xl-6{grid-column:span 6}.span-2xl-7{grid-column:span 7}.span-2xl-8{grid-column:span 8}.span-2xl-9{grid-column:span 9}.span-2xl-10{grid-column:span 10}.span-2xl-11{grid-column:span 11}.span-2xl-12{grid-column:span 12}}.flex{display:flex;flex-direction:column;gap:var(--rh-space-lg,16px)}.flex-row{flex-direction:row}.flex-column{flex-direction:column}@media (min-width:768px){.flex-md-row{flex-direction:row}.flex-md-column{flex-direction:column}}.typography-h1{font-size:var(--rh-font-size-heading-2xl,3rem)}.typography-h2{font-size:var(--rh-font-size-heading-xl,2.5rem)}.typography-h3{font-size:var(--rh-font-size-heading-lg,2.25rem)}.typography-h4{font-size:var(--rh-font-size-heading-md,1.75rem)}.typography-h5{font-size:var(--rh-font-size-heading-sm,1.5rem)}.typography-h6{font-size:var(--rh-font-size-heading-xs,1.25rem)}.content section{padding:0}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{margin:var(--rh-space-lg,16px) 0}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0}.list-unstyled{list-style:none;padding-left:0}.tooltip-content{align-items:center;display:flex;font-family:Red Hat Text;justify-content:center;text-transform:none}.tooltip-content .check-icon{margin-left:var(--rh-space-md,8px)}.doc-image-link{display:inline-block;text-decoration:none}.modal-img{display:block;width:100%}.modal-helper-text{margin-top:.5rem;text-align:center}.modal-helper-text a{color:#000;cursor:pointer}.modal-helper-text a:hover{text-decoration:underline}.modal-helper-text a:after{content:"⿻";margin-left:.25rem}pf-modal.pf-img-modal{--pf-c-modal-box--MaxHeight:90vh;overflow-y:scroll}pf-modal.pf-img-modal::part(close-button){background-color:#fff;border-radius:50%;color:#000;margin-right:-2rem;margin-top:-2rem}pf-modal.pf-img-modal::part(close-button):hover{opacity:.7}h2.truste-title{line-height:normal;margin-top:0}rh-alert p[slot=header]{color:#002952}@media (width < 992px){html:has(nav.mobile-nav .mobile-nav-wrapper){scroll-behavior:smooth;scroll-padding-top:4rem}html:has(nav.mobile-nav .mobile-jump-links){scroll-padding-top:7rem}html:has(nav.mobile-nav.hide-mobile-nav){scroll-padding-top:2rem}}.highlight{background:#fff4cc;color:#000}</style> <style>rh-alert[data-v-84359384]{width:100%}</style> <style>.search-btn[data-v-c8f2da08]{align-items:center;background-color:var(--rh-color-canvas-black,#151515);border:3px solid var(--rh-color-canvas-black,#151515);cursor:pointer;display:flex;flex-direction:column;height:100%;justify-content:center;outline:none;padding:14px var(--rh-space-md,8px)}.search-btn[data-v-c8f2da08]:focus{border-top:3px solid var(--rh-color-accent-brand-on-light,#e00);outline:2px dotted var(--rh-color-white,#fff)}.search-btn .search-icon[data-v-c8f2da08]{height:26px;padding:2px 0 var(--rh-space-xs,4px);width:20px}.search-btn .search-icon[data-v-c8f2da08],.search-icon-helper-text[data-v-c8f2da08]{color:var(--rh-color-white,#fff)}.search-mobile[data-v-c8f2da08]{margin-bottom:var(--rh-space-2xl,32px)}.search-mobile form[data-v-c8f2da08]{display:flex;gap:var(--rh-space-md,8px);margin:auto}.search-box[data-v-c8f2da08]{width:35rem}nav[data-v-c8f2da08]{background-color:#151515;justify-content:space-between;width:100%}a[data-v-c8f2da08],a[data-v-c8f2da08]:visited{color:#fff;display:inline-block;font-size:var(--rh-font-size-body-text-md,1rem)}.skip-link[class][class][data-v-c8f2da08]{font-size:var(--pf-global--FontSize--sm,.875rem);line-height:18px}.skip-link[class][class][data-v-c8f2da08]:focus{border-radius:.21429em;height:auto;left:50%;padding:.42857em .57143em;position:fixed;top:8px;transform:translateX(-50%);width:auto;z-index:99999;clip:auto;background:#fff;background:var(--pfe-navigation__skip-link--BackgroundColor,var(--pfe-theme--color--surface--lightest,#fff));color:#06c;color:var(--pfe-navigation__skip-link--Color,var(--pfe-theme--color--link,#06c));text-decoration:none}.visually-hidden[data-v-c8f2da08]{border:1px solid #06c;height:1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);white-space:nowrap}h3[data-v-c8f2da08]{color:#464646;font-family:var(--rh-font-family-heading,"Red Hat Display",Helvetica,Arial,sans-serif);font-size:var(--rh-font-size-body-text-lg,1.125rem)}.language-picker[data-v-c8f2da08]{align-items:center;background-color:#fff;display:flex;flex-direction:column;padding:var(--rh-space-xl,24px);width:100%}.language-picker h3[data-v-c8f2da08]{margin:0;padding:0 1rem 1rem}.language-picker ul[data-v-c8f2da08]{margin:0;padding:0}.language-picker a[data-v-c8f2da08]{color:#06c}.language-picker li[data-v-c8f2da08]{list-style:none}.language-dropdown[data-v-c8f2da08]{background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.098);display:block!important;position:absolute;right:0;width:100%;z-index:104}.pfe-navigation.pfe-navigation--processed>[slot=secondary-links][data-v-c8f2da08]{height:auto;overflow:visible;visibility:visible;width:auto}.upper-navigation[data-v-c8f2da08]{padding:0 var(--rh-space-2xl,32px)}.upper-nav-container[data-v-c8f2da08]{border-bottom:1px solid #404040;margin:0}.upper-nav-hidden[data-v-c8f2da08]:not(:focus):not(:active){clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}.upper-nav-menu[data-v-c8f2da08]{align-items:center;display:flex;justify-content:flex-end;line-height:1.444;list-style:none;margin-bottom:0;margin-top:0;padding-left:0}.upper-nav-menu[data-v-c8f2da08],.upper-nav-menu>li[data-v-c8f2da08]{position:relative}.upper-nav-menu>li:not(:first-child)>a[data-v-c8f2da08]:before,.upper-nav-menu>li:not(:first-child)>button[data-v-c8f2da08]:before{background-color:#404040;content:"";height:40%;left:0;position:absolute;top:30%;width:1px}li[data-v-c8f2da08]{display:list-item;margin:0;padding:0;text-align:-webkit-match-parent}.upper-nav-menu button.upper-nav-links[data-v-c8f2da08]{border:0;border-top:3px solid transparent;cursor:pointer;line-height:1.444}.upper-nav-menu button.upper-nav-links[aria-expanded=true][data-v-c8f2da08]{outline-color:#151515}.upper-nav-menu button.upper-nav-links[aria-expanded=true] .upper-nav-arrow[data-v-c8f2da08]{filter:invert(0) sepia(2%) saturate(21%) hue-rotate(257deg) brightness(108%) contrast(100%);transform:rotate(270deg)}.upper-nav-menu button.upper-nav-links[aria-expanded=true][data-v-c8f2da08]:before{display:none}.upper-nav-menu .upper-nav-links[data-v-c8f2da08]{background-color:var(--pfe-navigation--BackgroundColor,var(--pfe-theme--color--surface--darkest,#151515));border-top:3px solid transparent;color:#fff;display:block;font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:var(--rh-font-size-body-text-sm,.875rem);outline:none;padding:12px 12px 14px;text-decoration:none}.upper-nav-menu .upper-nav-links[data-v-c8f2da08]:hover{border-top-color:#b8bbbe}.upper-nav-menu .upper-nav-links[data-v-c8f2da08]:focus-within{outline:1px dashed var(--rh-color-white,#fff);outline-offset:-1px}.upper-nav-menu .upper-nav-links[data-v-c8f2da08]:focus-within:before{display:none}.upper-nav-dropdown-container[data-v-c8f2da08]{background:#fff;box-shadow:0 3px 6px rgba(0,0,0,.098);display:none;padding:5px 30px 24px;position:absolute;right:0;top:100%;width:500px;z-index:105}.upper-nav-dropdown-container>ul[data-v-c8f2da08]{-moz-column-count:2;column-count:2;list-style-type:none;padding:0;width:auto}.upper-nav-dropdown-container>ul li[data-v-c8f2da08]{color:#151515;font-family:var(--rh-font-family-heading,"Red Hat Display",Helvetica,Arial,sans-serif);font-size:var(--rh-font-size-body-text-sm,.875rem);list-style-type:none;margin-bottom:0}.upper-nav-dropdown-container>ul li span[data-v-c8f2da08]{font-weight:var(--rh-font-weight-body-text-medium,500)}.upper-nav-dropdown-container>ul ul[data-v-c8f2da08]{padding-left:0;padding-top:9px}.upper-nav-dropdown-container>ul>li[data-v-c8f2da08]{padding-top:19px;-moz-column-break-inside:avoid;break-inside:avoid}.upper-nav-dropdown-container>ul>li>ul>li[data-v-c8f2da08]{line-height:1.45;padding:4px 0}.upper-nav-menu .upper-nav-arrow[data-v-c8f2da08]{display:inline-block;filter:invert(100%) sepia(8%) saturate(7%) hue-rotate(1turn) brightness(100%) contrast(93%);height:18px;margin-left:5px;transform:rotate(90deg);vertical-align:middle;width:8px}#pfe-navigation__secondary-links .show[data-v-c8f2da08],.upper-navigation .show[data-v-c8f2da08]{display:block}.upper-nav-menu .upper-nav-links[aria-expanded=true][data-v-c8f2da08]:active,.upper-nav-menu .upper-nav-links[aria-expanded=true][data-v-c8f2da08]:focus,.upper-nav-menu .upper-nav-links[aria-expanded=true][data-v-c8f2da08]:hover{background-color:#fff;color:#151515}.upper-nav-menu .upper-nav-links[aria-expanded=true][data-v-c8f2da08]{background-color:#fff;border-top-color:#b8bbbe;color:#000;position:relative;z-index:1}.upper-nav-dropdown-container>ul a[data-v-c8f2da08]{color:var(--rh-color-accent-base-on-light,#06c);font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:14px;text-decoration:none}.pfe-navigation__search[data-v-c8f2da08]{background-color:var(--rh-color-white,#fff)}.pfe-navigation__search form[data-v-c8f2da08]{display:flex;gap:var(--rh-space-md,8px);margin:auto;max-width:992px}pfe-navigation [slot=secondary-links] .buttons[data-v-c8f2da08]{display:flex;flex-wrap:wrap;gap:var(--rh-space-md,8px);margin-top:4px}pfe-navigation [slot=secondary-links] .buttons a[data-v-c8f2da08]{border:1px solid #d2d2d2;border-radius:3px;color:#06c;cursor:pointer;flex-basis:calc(50% - 5px);font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-weight:var(--rh-font-weight-code-regular,400);padding:1em;text-align:center;text-decoration:none}pfe-navigation [slot=secondary-links] .mobile-lang-select[data-v-c8f2da08]{border:1px solid #d2d2d2;border-bottom-color:#3c3f42;cursor:pointer;display:flex;margin:3rem 0;position:relative}pfe-navigation [slot=secondary-links] .mobile-lang-select label[data-v-c8f2da08]{bottom:100%;color:#000;font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:14px;font-weight:500;margin-bottom:5px;position:absolute}pfe-navigation [slot=secondary-links] .mobile-lang-select select[data-v-c8f2da08]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-style:none;color:#000;flex-basis:100%;font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:16px;line-height:24px;padding:6px 24px 6px 8px}select[data-v-c8f2da08]{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none' viewBox='0 0 10 6'%3E%3Cpath fill='%23151515' d='M.678 0h8.644c.596 0 .895.797.497 1.195l-4.372 4.58c-.298.3-.695.3-.993 0L.18 1.196C-.216.797.081 0 .678 0'/%3E%3C/svg%3E");background-position:98% 50%;background-repeat:no-repeat}#inputLabel[data-v-c8f2da08]{align-items:center;display:flex;position:relative}#inputLabel form[data-v-c8f2da08]{width:100%}.input-box[data-v-c8f2da08]{font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:var(--rh-font-size-body-text-md,1rem);height:36px;padding:0 8px;width:100%}.input-box[data-v-c8f2da08]::-moz-placeholder{color:#6a6e73;font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:var(--rh-font-size-body-text-md,1rem);font-weight:var(--rh-font-weight-code-regular,400);line-height:24px}.input-box[data-v-c8f2da08]::placeholder{color:#6a6e73;font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:var(--rh-font-size-body-text-md,1rem);font-weight:var(--rh-font-weight-code-regular,400);line-height:24px}@media(max-width:960px){.search-box[data-v-c8f2da08]{width:28rem}}@media (max-width:768px){.right-navigation[data-v-c8f2da08],.upper-navigation[data-v-c8f2da08]{display:none}}@media (min-width:767px){.pfe-navigation__search form[data-v-c8f2da08]{padding:var(--rh-space-2xl,32px) 0}}</style> <style>.element-invisible,.sr-only,.visually-hidden{height:1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}@keyframes reveal-nav{0%{max-height:72px;max-height:var(--pfe-navigation__nav-bar--Height,72px);opacity:0;visibility:hidden}99%{max-height:72px;max-height:var(--pfe-navigation__nav-bar--Height,72px)}to{max-height:9999em;opacity:1;visibility:visible}}@keyframes reveal-nav-parts{0%{max-height:72px;max-height:var(--pfe-navigation__nav-bar--Height,72px);opacity:0;visibility:hidden}1%{visibility:visible}99%{max-height:72px;max-height:var(--pfe-navigation__nav-bar--Height,72px)}to{max-height:9999em;opacity:1;visibility:visible}}@media print{.pfe-navigation__menu,pfe-navigation [slot]{display:none!important}}pfe-navigation{--pfe-broadcasted--text:var(--pfe-theme--color--text,#151515);--pfe-broadcasted--text--muted:var(--pfe-theme--color--text--muted,#6a6e73);--pfe-broadcasted--link:var(--pfe-theme--color--link,#06c);--pfe-broadcasted--link--hover:var(--pfe-theme--color--link--hover,#004080);--pfe-broadcasted--link--focus:var(--pfe-theme--color--link--focus,#004080);--pfe-broadcasted--link--visited:var(--pfe-theme--color--link--visited,#6753ac);--pfe-broadcasted--link-decoration:var(--pfe-theme--link-decoration,none);--pfe-broadcasted--link-decoration--hover:var(--pfe-theme--link-decoration--hover,underline);--pfe-broadcasted--link-decoration--focus:var(--pfe-theme--link-decoration--focus,underline);--pfe-broadcasted--link-decoration--visited:var(--pfe-theme--link-decoration--visited,none)}@supports (display:grid){pfe-navigation{animation:reveal-nav .1618s 4s 1 forwards;max-height:72px;max-height:var(--pfe-navigation__nav-bar--Height,72px)}pfe-navigation>*{animation:reveal-nav-parts .1618s 4s 1 forwards;opacity:0;transition:opacity .1618s ease-in-out;transition:opacity var(--pfe-reveal-duration,.1618s) ease-in-out;visibility:hidden}}pfe-navigation.pfe-navigation--processed,pfe-navigation.pfe-navigation--processed>*{animation:none;opacity:1;visibility:visible}pfe-navigation pfe-primary-detail{display:none}pfe-navigation[pfelement]{display:block}pfe-navigation-dropdown{color:#151515;color:var(--pfe-navigation__dropdown--Color,#151515)}#pfe-navigation[breakpoint=desktop] .hidden-at-desktop[class][class][class],#pfe-navigation[breakpoint=mobile] .hidden-at-mobile[class][class][class],#pfe-navigation[breakpoint=tablet] .hidden-at-tablet[class][class][class],pfe-navigation[breakpoint=desktop] .hidden-at-desktop[class][class][class],pfe-navigation[breakpoint=mobile] .hidden-at-mobile[class][class][class],pfe-navigation[breakpoint=tablet] .hidden-at-tablet[class][class][class]{display:none}#pfe-navigation,#pfe-navigation *,pfe-navigation,pfe-navigation *{box-sizing:border-box}#pfe-navigation [pfelement] .pfe-navigation__log-in-link,pfe-navigation [pfelement] .pfe-navigation__log-in-link{display:none}#pfe-navigation,pfe-navigation{align-items:stretch;background:#151515;background:var(--pfe-navigation__nav-bar--Background,#151515);color:#fff;color:var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));display:flex;font-family:Red Hat Text,RedHatText,Arial,Helvetica,sans-serif;font-family:var(--pfe-navigation--FontFamily,Red Hat Text,RedHatText,Arial,Helvetica,sans-serif);font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem);height:72px;height:var(--pfe-navigation__nav-bar--Height,72px);height:auto;line-height:1.5;margin:0;max-width:9999em;min-height:72px;min-height:var(--pfe-navigation__nav-bar--Height,72px);padding:0 16px;position:relative;z-index:95;z-index:var(--pfe-navigation--ZIndex,var(--pfe-theme--zindex--navigation,95))}@media (min-width:768px){#pfe-navigation,pfe-navigation{flex-wrap:wrap;margin:0;max-width:9999em;padding:0 16px}}@media (min-width:1200px){#pfe-navigation,pfe-navigation{margin:0 auto;padding:0 32px}}#pfe-navigation .pfe-navigation__dropdown,#pfe-navigation pfe-navigation-dropdown,pfe-navigation .pfe-navigation__dropdown,pfe-navigation pfe-navigation-dropdown{display:none}#pfe-navigation>[slot=account],#pfe-navigation>[slot=search],#pfe-navigation>[slot=secondary-links],pfe-navigation>[slot=account],pfe-navigation>[slot=search],pfe-navigation>[slot=secondary-links]{height:0;overflow:hidden;visibility:hidden;width:0}@media (min-width:768px){#pfe-navigation nav.pfe-navigation,pfe-navigation nav.pfe-navigation{align-items:stretch;display:flex;flex-wrap:wrap}}@media (min-width:992px){#pfe-navigation nav.pfe-navigation,pfe-navigation nav.pfe-navigation{flex-wrap:nowrap}}#pfe-navigation .pfe-navigation__logo-wrapper,pfe-navigation .pfe-navigation__logo-wrapper{align-items:center;display:flex;justify-content:flex-start;margin:0;min-width:150px;padding:10px 16px 10px 0}@media (min-width:768px){.pfe-navigation--no-main-menu #pfe-navigation .pfe-navigation__logo-wrapper,.pfe-navigation--no-main-menu pfe-navigation .pfe-navigation__logo-wrapper{margin-right:auto}}.pfe-navigation--collapse-secondary-links .pfe-navigation--no-main-menu #pfe-navigation .pfe-navigation__logo-wrapper,.pfe-navigation--collapse-secondary-links .pfe-navigation--no-main-menu pfe-navigation .pfe-navigation__logo-wrapper{margin-right:0}#pfe-navigation .pfe-navigation__logo-link,pfe-navigation .pfe-navigation__logo-link{border-radius:3px;display:block;margin-left:-8px;outline:0;padding:6px 8px;position:relative}#pfe-navigation .pfe-navigation__logo-link:focus,pfe-navigation .pfe-navigation__logo-link:focus{outline:0}#pfe-navigation .pfe-navigation__logo-link:focus:after,pfe-navigation .pfe-navigation__logo-link:focus:after{border:1px dashed #fff;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}#pfe-navigation .pfe-navigation__logo-image,pfe-navigation .pfe-navigation__logo-image{display:block;height:auto;width:100%}@media (min-width:576px){#pfe-navigation .pfe-navigation__logo-image,pfe-navigation .pfe-navigation__logo-image{height:40px;height:var(--pfe-navigation__logo--height,40px);width:auto}}@media print{#pfe-navigation .pfe-navigation__logo-image,pfe-navigation .pfe-navigation__logo-image{display:none}}#pfe-navigation .pfe-navigation__logo-image:only-child,pfe-navigation .pfe-navigation__logo-image:only-child{display:block}@media (min-width:576px){#pfe-navigation .pfe-navigation__logo-image.pfe-navigation__logo-image--small,pfe-navigation .pfe-navigation__logo-image.pfe-navigation__logo-image--small{height:32px;height:var(--pfe-navigation__logo--height,32px)}}@media print{#pfe-navigation .pfe-navigation__logo-image.pfe-navigation__logo-image--screen,pfe-navigation .pfe-navigation__logo-image.pfe-navigation__logo-image--screen{display:none!important}}@media screen{#pfe-navigation .pfe-navigation__logo-image.pfe-navigation__logo-image--print,pfe-navigation .pfe-navigation__logo-image.pfe-navigation__logo-image--print{display:none!important}}#pfe-navigation .pfe-navigation__logo-image.pfe-navigation__logo-image--screen.pfe-navigation__logo-image--print,pfe-navigation .pfe-navigation__logo-image.pfe-navigation__logo-image--screen.pfe-navigation__logo-image--print{display:inline-block!important}#pfe-navigation .pfe-navigation__fallback-links a,#pfe-navigation .pfe-navigation__log-in-link,#pfe-navigation .pfe-navigation__menu-link,#pfe-navigation .pfe-navigation__secondary-link,pfe-navigation .pfe-navigation__fallback-links a,pfe-navigation .pfe-navigation__log-in-link,pfe-navigation .pfe-navigation__menu-link,pfe-navigation .pfe-navigation__secondary-link{--pfe-icon--color:var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:0;color:#06c;color:var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));color:#fff;color:var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));cursor:pointer;display:flex;font-family:inherit;font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem);justify-content:flex-start;justify-content:center;margin:0;outline:0;padding:8px 24px;position:relative;text-align:center;text-decoration:none;white-space:nowrap;width:100%}@media print{#pfe-navigation .pfe-navigation__fallback-links a,#pfe-navigation .pfe-navigation__log-in-link,#pfe-navigation .pfe-navigation__menu-link,#pfe-navigation .pfe-navigation__secondary-link,pfe-navigation .pfe-navigation__fallback-links a,pfe-navigation .pfe-navigation__log-in-link,pfe-navigation .pfe-navigation__menu-link,pfe-navigation .pfe-navigation__secondary-link{display:none!important}}@media (min-width:768px){#pfe-navigation .pfe-navigation__fallback-links a,#pfe-navigation .pfe-navigation__log-in-link,#pfe-navigation .pfe-navigation__menu-link,#pfe-navigation .pfe-navigation__secondary-link,pfe-navigation .pfe-navigation__fallback-links a,pfe-navigation .pfe-navigation__log-in-link,pfe-navigation .pfe-navigation__menu-link,pfe-navigation .pfe-navigation__secondary-link{--pfe-icon--color:var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));color:#fff;color:var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));display:flex;flex-direction:column;font-size:12px;font-size:var(--pfe-navigation--FontSize--xs,12px);height:72px;height:var(--pfe-navigation__nav-bar--Height,72px);justify-content:flex-end;padding:14px 8px;width:auto}@supports (display:grid){#pfe-navigation .pfe-navigation__fallback-links a,#pfe-navigation .pfe-navigation__log-in-link,#pfe-navigation .pfe-navigation__menu-link,#pfe-navigation .pfe-navigation__secondary-link,pfe-navigation .pfe-navigation__fallback-links a,pfe-navigation .pfe-navigation__log-in-link,pfe-navigation .pfe-navigation__menu-link,pfe-navigation .pfe-navigation__secondary-link{align-items:center;display:grid;grid-template-rows:26px 18px;justify-items:center}}#pfe-navigation .pfe-navigation__fallback-links a[class]:focus,#pfe-navigation .pfe-navigation__fallback-links a[class]:hover,#pfe-navigation .pfe-navigation__log-in-link[class]:focus,#pfe-navigation .pfe-navigation__log-in-link[class]:hover,#pfe-navigation .pfe-navigation__menu-link[class]:focus,#pfe-navigation .pfe-navigation__menu-link[class]:hover,#pfe-navigation .pfe-navigation__secondary-link[class]:focus,#pfe-navigation .pfe-navigation__secondary-link[class]:hover,pfe-navigation .pfe-navigation__fallback-links a[class]:focus,pfe-navigation .pfe-navigation__fallback-links a[class]:hover,pfe-navigation .pfe-navigation__log-in-link[class]:focus,pfe-navigation .pfe-navigation__log-in-link[class]:hover,pfe-navigation .pfe-navigation__menu-link[class]:focus,pfe-navigation .pfe-navigation__menu-link[class]:hover,pfe-navigation .pfe-navigation__secondary-link[class]:focus,pfe-navigation .pfe-navigation__secondary-link[class]:hover{box-shadow:inset 0 4px 0 0 #06c;box-shadow:inset 0 4px 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}}#pfe-navigation .pfe-navigation__fallback-links a:focus,#pfe-navigation .pfe-navigation__fallback-links a:hover,#pfe-navigation .pfe-navigation__log-in-link:focus,#pfe-navigation .pfe-navigation__log-in-link:hover,#pfe-navigation .pfe-navigation__menu-link:focus,#pfe-navigation .pfe-navigation__menu-link:hover,#pfe-navigation .pfe-navigation__secondary-link:focus,#pfe-navigation .pfe-navigation__secondary-link:hover,pfe-navigation .pfe-navigation__fallback-links a:focus,pfe-navigation .pfe-navigation__fallback-links a:hover,pfe-navigation .pfe-navigation__log-in-link:focus,pfe-navigation .pfe-navigation__log-in-link:hover,pfe-navigation .pfe-navigation__menu-link:focus,pfe-navigation .pfe-navigation__menu-link:hover,pfe-navigation .pfe-navigation__secondary-link:focus,pfe-navigation .pfe-navigation__secondary-link:hover{box-shadow:inset 4px 0 0 0 #06c;box-shadow:inset 4px 0 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}@media (min-width:768px){#pfe-navigation .pfe-navigation__fallback-links a:focus,#pfe-navigation .pfe-navigation__fallback-links a:hover,#pfe-navigation .pfe-navigation__log-in-link:focus,#pfe-navigation .pfe-navigation__log-in-link:hover,#pfe-navigation .pfe-navigation__menu-link:focus,#pfe-navigation .pfe-navigation__menu-link:hover,#pfe-navigation .pfe-navigation__secondary-link:focus,#pfe-navigation .pfe-navigation__secondary-link:hover,pfe-navigation .pfe-navigation__fallback-links a:focus,pfe-navigation .pfe-navigation__fallback-links a:hover,pfe-navigation .pfe-navigation__log-in-link:focus,pfe-navigation .pfe-navigation__log-in-link:hover,pfe-navigation .pfe-navigation__menu-link:focus,pfe-navigation .pfe-navigation__menu-link:hover,pfe-navigation .pfe-navigation__secondary-link:focus,pfe-navigation .pfe-navigation__secondary-link:hover{box-shadow:inset 0 4px 0 0 #06c;box-shadow:inset 0 4px 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}}.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__fallback-links a:focus,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__fallback-links a:hover,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__log-in-link:focus,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__log-in-link:hover,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__menu-link:focus,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__menu-link:hover,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__secondary-link:focus,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__secondary-link:hover,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__fallback-links a:focus,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__fallback-links a:hover,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__log-in-link:focus,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__log-in-link:hover,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__menu-link:focus,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__menu-link:hover,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__secondary-link:focus,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__secondary-link:hover{box-shadow:inset 4px 0 0 0 #06c;box-shadow:inset 4px 0 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}#pfe-navigation .pfe-navigation__fallback-links a:focus,#pfe-navigation .pfe-navigation__log-in-link:focus,#pfe-navigation .pfe-navigation__menu-link:focus,#pfe-navigation .pfe-navigation__secondary-link:focus,pfe-navigation .pfe-navigation__fallback-links a:focus,pfe-navigation .pfe-navigation__log-in-link:focus,pfe-navigation .pfe-navigation__menu-link:focus,pfe-navigation .pfe-navigation__secondary-link:focus{outline:0}#pfe-navigation .pfe-navigation__fallback-links a:focus:after,#pfe-navigation .pfe-navigation__log-in-link:focus:after,#pfe-navigation .pfe-navigation__menu-link:focus:after,#pfe-navigation .pfe-navigation__secondary-link:focus:after,pfe-navigation .pfe-navigation__fallback-links a:focus:after,pfe-navigation .pfe-navigation__log-in-link:focus:after,pfe-navigation .pfe-navigation__menu-link:focus:after,pfe-navigation .pfe-navigation__secondary-link:focus:after{border:1px dashed;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}#pfe-navigation .pfe-navigation__fallback-links a pfe-icon,#pfe-navigation .pfe-navigation__log-in-link pfe-icon,#pfe-navigation .pfe-navigation__menu-link pfe-icon,#pfe-navigation .pfe-navigation__secondary-link pfe-icon,pfe-navigation .pfe-navigation__fallback-links a pfe-icon,pfe-navigation .pfe-navigation__log-in-link pfe-icon,pfe-navigation .pfe-navigation__menu-link pfe-icon,pfe-navigation .pfe-navigation__secondary-link pfe-icon{pointer-events:none}#pfe-navigation .pfe-navigation__fallback-links a .secondary-link__icon-wrapper,#pfe-navigation .pfe-navigation__fallback-links a>pfe-icon,#pfe-navigation .pfe-navigation__log-in-link .secondary-link__icon-wrapper,#pfe-navigation .pfe-navigation__log-in-link>pfe-icon,#pfe-navigation .pfe-navigation__menu-link .secondary-link__icon-wrapper,#pfe-navigation .pfe-navigation__menu-link>pfe-icon,#pfe-navigation .pfe-navigation__secondary-link .secondary-link__icon-wrapper,#pfe-navigation .pfe-navigation__secondary-link>pfe-icon,pfe-navigation .pfe-navigation__fallback-links a .secondary-link__icon-wrapper,pfe-navigation .pfe-navigation__fallback-links a>pfe-icon,pfe-navigation .pfe-navigation__log-in-link .secondary-link__icon-wrapper,pfe-navigation .pfe-navigation__log-in-link>pfe-icon,pfe-navigation .pfe-navigation__menu-link .secondary-link__icon-wrapper,pfe-navigation .pfe-navigation__menu-link>pfe-icon,pfe-navigation .pfe-navigation__secondary-link .secondary-link__icon-wrapper,pfe-navigation .pfe-navigation__secondary-link>pfe-icon{--pfe-icon--size:18px;padding-right:5px}@media (min-width:768px){#pfe-navigation .pfe-navigation__fallback-links a .secondary-link__icon-wrapper,#pfe-navigation .pfe-navigation__fallback-links a>pfe-icon,#pfe-navigation .pfe-navigation__log-in-link .secondary-link__icon-wrapper,#pfe-navigation .pfe-navigation__log-in-link>pfe-icon,#pfe-navigation .pfe-navigation__menu-link .secondary-link__icon-wrapper,#pfe-navigation .pfe-navigation__menu-link>pfe-icon,#pfe-navigation .pfe-navigation__secondary-link .secondary-link__icon-wrapper,#pfe-navigation .pfe-navigation__secondary-link>pfe-icon,pfe-navigation .pfe-navigation__fallback-links a .secondary-link__icon-wrapper,pfe-navigation .pfe-navigation__fallback-links a>pfe-icon,pfe-navigation .pfe-navigation__log-in-link .secondary-link__icon-wrapper,pfe-navigation .pfe-navigation__log-in-link>pfe-icon,pfe-navigation .pfe-navigation__menu-link .secondary-link__icon-wrapper,pfe-navigation .pfe-navigation__menu-link>pfe-icon,pfe-navigation .pfe-navigation__secondary-link .secondary-link__icon-wrapper,pfe-navigation .pfe-navigation__secondary-link>pfe-icon{padding-right:0;padding:2px 0 4px}}.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__fallback-links a .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__fallback-links a>pfe-icon,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__log-in-link .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__log-in-link>pfe-icon,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__menu-link .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__menu-link>pfe-icon,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__secondary-link .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__secondary-link>pfe-icon,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__fallback-links a .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__fallback-links a>pfe-icon,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__log-in-link .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__log-in-link>pfe-icon,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__menu-link .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__menu-link>pfe-icon,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__secondary-link .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__secondary-link>pfe-icon{padding:0 16px 0 0}#pfe-navigation .pfe-navigation__fallback-links a pfe-icon,#pfe-navigation .pfe-navigation__log-in-link pfe-icon,#pfe-navigation .pfe-navigation__menu-link pfe-icon,#pfe-navigation .pfe-navigation__secondary-link pfe-icon,pfe-navigation .pfe-navigation__fallback-links a pfe-icon,pfe-navigation .pfe-navigation__log-in-link pfe-icon,pfe-navigation .pfe-navigation__menu-link pfe-icon,pfe-navigation .pfe-navigation__secondary-link pfe-icon{display:block;height:18px}#pfe-navigation .pfe-navigation__fallback-links a[class],#pfe-navigation .pfe-navigation__fallback-links a[href],#pfe-navigation .pfe-navigation__log-in-link[class],#pfe-navigation .pfe-navigation__log-in-link[href],#pfe-navigation .pfe-navigation__menu-link[class],#pfe-navigation .pfe-navigation__menu-link[href],#pfe-navigation .pfe-navigation__secondary-link[class],#pfe-navigation .pfe-navigation__secondary-link[href],pfe-navigation .pfe-navigation__fallback-links a[class],pfe-navigation .pfe-navigation__fallback-links a[href],pfe-navigation .pfe-navigation__log-in-link[class],pfe-navigation .pfe-navigation__log-in-link[href],pfe-navigation .pfe-navigation__menu-link[class],pfe-navigation .pfe-navigation__menu-link[href],pfe-navigation .pfe-navigation__secondary-link[class],pfe-navigation .pfe-navigation__secondary-link[href]{align-items:center;justify-content:center}#pfe-navigation .pfe-navigation__account-toggle,#pfe-navigation [slot=account]>a[href],pfe-navigation .pfe-navigation__account-toggle,pfe-navigation [slot=account]>a[href]{--pfe-icon--color:var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:0;color:#06c;color:var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));cursor:pointer;font-family:inherit;font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem);justify-content:flex-start;margin:0;outline:0;position:relative;text-align:center;text-decoration:none;white-space:nowrap;width:100%;--pfe-icon--color:var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));color:#fff;color:var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));display:flex;flex-direction:column;font-size:12px;font-size:var(--pfe-navigation--FontSize--xs,12px);height:72px;height:var(--pfe-navigation__nav-bar--Height,72px);justify-content:flex-end;padding:14px 8px;width:auto}@media print{#pfe-navigation .pfe-navigation__account-toggle,#pfe-navigation [slot=account]>a[href],pfe-navigation .pfe-navigation__account-toggle,pfe-navigation [slot=account]>a[href]{display:none!important}}#pfe-navigation .pfe-navigation__account-toggle:focus,#pfe-navigation .pfe-navigation__account-toggle:hover,#pfe-navigation [slot=account]>a[href]:focus,#pfe-navigation [slot=account]>a[href]:hover,pfe-navigation .pfe-navigation__account-toggle:focus,pfe-navigation .pfe-navigation__account-toggle:hover,pfe-navigation [slot=account]>a[href]:focus,pfe-navigation [slot=account]>a[href]:hover{box-shadow:inset 4px 0 0 0 #06c;box-shadow:inset 4px 0 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}#pfe-navigation .pfe-navigation__account-toggle:focus,#pfe-navigation [slot=account]>a[href]:focus,pfe-navigation .pfe-navigation__account-toggle:focus,pfe-navigation [slot=account]>a[href]:focus{outline:0}#pfe-navigation .pfe-navigation__account-toggle:focus:after,#pfe-navigation [slot=account]>a[href]:focus:after,pfe-navigation .pfe-navigation__account-toggle:focus:after,pfe-navigation [slot=account]>a[href]:focus:after{border:1px dashed;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}#pfe-navigation .pfe-navigation__account-toggle pfe-icon,#pfe-navigation [slot=account]>a[href] pfe-icon,pfe-navigation .pfe-navigation__account-toggle pfe-icon,pfe-navigation [slot=account]>a[href] pfe-icon{pointer-events:none}@supports (display:grid){#pfe-navigation .pfe-navigation__account-toggle,#pfe-navigation [slot=account]>a[href],pfe-navigation .pfe-navigation__account-toggle,pfe-navigation [slot=account]>a[href]{align-items:center;display:grid;grid-template-rows:26px 18px;justify-items:center}}#pfe-navigation .pfe-navigation__account-toggle[class]:focus,#pfe-navigation .pfe-navigation__account-toggle[class]:hover,#pfe-navigation [slot=account]>a[href][class]:focus,#pfe-navigation [slot=account]>a[href][class]:hover,pfe-navigation .pfe-navigation__account-toggle[class]:focus,pfe-navigation .pfe-navigation__account-toggle[class]:hover,pfe-navigation [slot=account]>a[href][class]:focus,pfe-navigation [slot=account]>a[href][class]:hover{box-shadow:inset 0 4px 0 0 #06c;box-shadow:inset 0 4px 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}@media print{#pfe-navigation .pfe-navigation__account-toggle,#pfe-navigation [slot=account]>a[href],pfe-navigation .pfe-navigation__account-toggle,pfe-navigation [slot=account]>a[href]{display:none}}#pfe-navigation .pfe-navigation__account-toggle pfe-icon,#pfe-navigation [slot=account]>a[href] pfe-icon,pfe-navigation .pfe-navigation__account-toggle pfe-icon,pfe-navigation [slot=account]>a[href] pfe-icon{--pfe-icon--size:18px;padding:2px 0 4px}@media (min-width:768px){#pfe-navigation .pfe-navigation__account-toggle pfe-icon,#pfe-navigation [slot=account]>a[href] pfe-icon,pfe-navigation .pfe-navigation__account-toggle pfe-icon,pfe-navigation [slot=account]>a[href] pfe-icon{padding-right:0}}#pfe-navigation .pfe-navigation__account-toggle:focus,#pfe-navigation .pfe-navigation__account-toggle:hover,#pfe-navigation .pfe-navigation__account-toggle[aria-expanded=true],#pfe-navigation [slot=account]>a[href][href]:focus,#pfe-navigation [slot=account]>a[href][href]:hover,pfe-navigation .pfe-navigation__account-toggle:focus,pfe-navigation .pfe-navigation__account-toggle:hover,pfe-navigation .pfe-navigation__account-toggle[aria-expanded=true],pfe-navigation [slot=account]>a[href][href]:focus,pfe-navigation [slot=account]>a[href][href]:hover{box-shadow:inset 0 4px 0 0 #06c;box-shadow:inset 0 4px 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}#pfe-navigation .pfe-navigation__account-toggle[aria-expanded=true],pfe-navigation .pfe-navigation__account-toggle[aria-expanded=true]{--pfe-icon--color:var(--pfe-navigation__nav-bar--Color--active,var(--pfe-theme--color--text,#151515));background:#fff;background:var(--pfe-navigation__nav-bar--toggle--BackgroundColor--active,var(--pfe-theme--color--surface--lightest,#fff));color:#151515;color:var(--pfe-navigation__nav-bar--Color--active,var(--pfe-theme--color--text,#151515))}#pfe-navigation .pfe-navigation__account-toggle[aria-expanded=true]:focus,pfe-navigation .pfe-navigation__account-toggle[aria-expanded=true]:focus{outline:0}#pfe-navigation .pfe-navigation__account-toggle[aria-expanded=true]:focus:after,pfe-navigation .pfe-navigation__account-toggle[aria-expanded=true]:focus:after{border:1px dashed #151515;border:1px dashed var(--pfe-navigation__nav-bar--Color--active,var(--pfe-theme--color--text,#151515));bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}#pfe-navigation .pfe-navigation__fallback-links,#pfe-navigation .pfe-navigation__menu,pfe-navigation .pfe-navigation__fallback-links,pfe-navigation .pfe-navigation__menu{font-size:inherit;list-style:none;margin:0;padding:0}@media (min-width:768px){#pfe-navigation .pfe-navigation__fallback-links,#pfe-navigation .pfe-navigation__menu,pfe-navigation .pfe-navigation__fallback-links,pfe-navigation .pfe-navigation__menu{align-items:stretch;display:flex}}#pfe-navigation .pfe-navigation__fallback-links li,#pfe-navigation .pfe-navigation__menu li,pfe-navigation .pfe-navigation__fallback-links li,pfe-navigation .pfe-navigation__menu li{font-size:inherit;margin:0;padding:0}#pfe-navigation .pfe-navigation__fallback-links li:before,#pfe-navigation .pfe-navigation__menu li:before,pfe-navigation .pfe-navigation__fallback-links li:before,pfe-navigation .pfe-navigation__menu li:before{content:none}#pfe-navigation .pfe-navigation__fallback-links,pfe-navigation .pfe-navigation__fallback-links{margin-left:auto}#pfe-navigation .pfe-navigation__menu-link,pfe-navigation .pfe-navigation__menu-link{display:flex;font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem);white-space:nowrap}#pfe-navigation.pfe-navigation--processed,pfe-navigation.pfe-navigation--processed{display:block;padding:0}#pfe-navigation.pfe-navigation--processed:before,pfe-navigation.pfe-navigation--processed:before{content:none}#pfe-navigation.pfe-navigation--processed>[slot=account],#pfe-navigation.pfe-navigation--processed>[slot=search],#pfe-navigation.pfe-navigation--processed>[slot=secondary-links],pfe-navigation.pfe-navigation--processed>[slot=account],pfe-navigation.pfe-navigation--processed>[slot=search],pfe-navigation.pfe-navigation--processed>[slot=secondary-links]{height:auto;overflow:visible;visibility:visible;width:auto}#pfe-navigation.pfe-navigation--processed pfe-navigation-dropdown,pfe-navigation.pfe-navigation--processed pfe-navigation-dropdown{display:block}#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown,#pfe-navigation.pfe-navigation--processed pfe-navigation-dropdown,#pfe-navigation.pfe-navigation--processed>[slot],pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown,pfe-navigation.pfe-navigation--processed pfe-navigation-dropdown,pfe-navigation.pfe-navigation--processed>[slot]{animation:none;opacity:1}#pfe-navigation.pfe-navigation--processed [slot=secondary-links],pfe-navigation.pfe-navigation--processed [slot=secondary-links]{display:block;height:auto;list-style:none;margin:0 0 8px;padding:0;width:auto}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed [slot=secondary-links],pfe-navigation.pfe-navigation--processed [slot=secondary-links]{margin:0}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links],.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]{margin:0 0 8px}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button{--pfe-icon--color:var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:0 0;border:0;color:#06c;color:var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));cursor:pointer;display:flex;font-family:inherit;font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem);justify-content:flex-start;margin:0;outline:0;padding:8px 24px;position:relative;text-align:center;text-decoration:none;white-space:nowrap;width:100%}@media print{#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button{display:none!important}}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button{--pfe-icon--color:var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));color:#fff;color:var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));display:flex;flex-direction:column;font-size:12px;font-size:var(--pfe-navigation--FontSize--xs,12px);height:72px;height:var(--pfe-navigation__nav-bar--Height,72px);justify-content:flex-end;padding:14px 8px;width:auto}@supports (display:grid){#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button{align-items:center;display:grid;grid-template-rows:26px 18px;justify-items:center}}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a[class]:focus,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a[class]:hover,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button[class]:focus,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button[class]:hover,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a[class]:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a[class]:hover,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button[class]:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button[class]:hover{box-shadow:inset 0 4px 0 0 #06c;box-shadow:inset 0 4px 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:hover,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:hover,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:hover,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:hover{box-shadow:inset 4px 0 0 0 #06c;box-shadow:inset 4px 0 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:hover,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:hover,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:hover,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:hover{box-shadow:inset 0 4px 0 0 #06c;box-shadow:inset 0 4px 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:hover,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:hover,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:hover,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:hover{box-shadow:inset 4px 0 0 0 #06c;box-shadow:inset 4px 0 0 0 var(--pfe-navigation__nav-bar--highlight-color,var(--pfe-theme--color--ui-accent,#06c))}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus{outline:0}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus:after,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus:after,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus:after,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus:after{border:1px dashed;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a pfe-icon,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button pfe-icon,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a pfe-icon,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button pfe-icon{pointer-events:none}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a .secondary-link__icon-wrapper,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a>pfe-icon,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button .secondary-link__icon-wrapper,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button>pfe-icon,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a .secondary-link__icon-wrapper,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a>pfe-icon,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button .secondary-link__icon-wrapper,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button>pfe-icon{--pfe-icon--size:18px;padding-right:5px}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a .secondary-link__icon-wrapper,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a>pfe-icon,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button .secondary-link__icon-wrapper,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button>pfe-icon,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a .secondary-link__icon-wrapper,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a>pfe-icon,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button .secondary-link__icon-wrapper,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button>pfe-icon{padding-right:0;padding:2px 0 4px}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a>pfe-icon,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button>pfe-icon,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a>pfe-icon,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button .secondary-link__icon-wrapper,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button>pfe-icon{padding:0 16px 0 0}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a pfe-icon,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button pfe-icon,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a pfe-icon,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button pfe-icon{display:block;height:18px}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus{outline:0}#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus:after,#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus:after,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus:after,pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus:after{border:1px dashed #fff;border:1px dashed var(--pfe-navigation__nav-bar--Color--default,var(--pfe-theme--color--ui-base--text,#fff));bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a:focus,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button:focus{box-shadow:none}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a[aria-expanded=true],#pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button[aria-expanded=true],pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a[aria-expanded=true],pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button[aria-expanded=true]{--pfe-icon--color:var(--pfe-navigation__nav-bar--Color--active,var(--pfe-theme--color--text,#151515));background:#fff;background:var(--pfe-navigation__nav-bar--toggle--BackgroundColor--active,var(--pfe-theme--color--surface--lightest,#fff));color:#151515;color:var(--pfe-navigation__nav-bar--Color--active,var(--pfe-theme--color--text,#151515))}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a[aria-expanded=true],.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button[aria-expanded=true],.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>a[aria-expanded=true],.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links]>button[aria-expanded=true]{background:0 0;box-shadow:none}#pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown__wrapper--single-column,pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown__wrapper--single-column{position:relative}#pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown__wrapper,pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown__wrapper{display:block}#pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class],pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class]{height:0;transition:height .25s ease-in-out;transition:var(--pfe-navigation--accordion-transition,height .25s ease-in-out)}@media (prefers-reduced-motion){#pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class],pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class]{transition:none}}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class],pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class]{position:absolute;right:0;top:72px;top:var(--pfe-navigation__nav-bar--Height,72px)}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class],.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class]{position:static}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class][aria-hidden=false],pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class][aria-hidden=false]{height:auto}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class][aria-hidden=false],.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed [slot=secondary-links] .pfe-navigation__dropdown-wrapper[class][aria-hidden=false]{height:0}#pfe-navigation.pfe-navigation--processed[breakpoint=mobile] [slot=secondary-links][mobile-slider] .pfe-navigation__dropdown-wrapper,pfe-navigation.pfe-navigation--processed[breakpoint=mobile] [slot=secondary-links][mobile-slider] .pfe-navigation__dropdown-wrapper{left:100vw;left:calc(100vw - 32px);left:calc(100vw - var(--pfe-navigation__mobile-dropdown--PaddingHorizontal,32px));position:absolute;top:0;width:100vw}#pfe-navigation.pfe-navigation--processed[breakpoint=mobile] [slot=secondary-links][mobile-slider] .pfe-navigation__dropdown-wrapper[aria-hidden=false],pfe-navigation.pfe-navigation--processed[breakpoint=mobile] [slot=secondary-links][mobile-slider] .pfe-navigation__dropdown-wrapper[aria-hidden=false]{height:100vh;height:calc(100vh - 72px);height:calc(100vh - var(--pfe-navigation__nav-bar--Height,72px));overflow-y:scroll}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles,#pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown-wrapper,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles,pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown-wrapper{background:#fff;background:var(--pfe-navigation__dropdown--Background,var(--pfe-theme--color--surface--lightest,#fff));padding:0 24px;padding:0 var(--pfe-navigation__dropdown--full-width--spacing--mobile,24px)}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles,#pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown-wrapper,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles,pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown-wrapper{padding:0 64px24px;padding:0 var(--pfe-navigation__dropdown--full-width--spacing--desktop,64px) var(--pfe-navigation__dropdown--full-width--spacing--mobile,24px)}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown-wrapper,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown-wrapper{padding:0 24px;padding:0 var(--pfe-navigation__dropdown--full-width--spacing--mobile,24px)}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a{border:1px solid transparent;color:#06c;color:var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));display:inline-block}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a:hover{color:#036;color:var(--pfe-navigation__dropdown--link--Color--hover,#036);text-decoration:underline}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a:focus{border:1px dashed;outline:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level],#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level],#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level],pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level],pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6{margin:32px 0 .75em;margin:var(--pfe-navigation--gutter,32px) 0 .75em;padding:0;-moz-column-break-inside:avoid;break-inside:avoid;color:#464646;color:var(--pfe-navigation__dropdown--headings--Color,#464646);font-family:Red Hat Display,RedHatDisplay,Arial,Helvetica,sans-serif;font-family:var(--pfe-navigation--FontFamilyHeadline,Red Hat Display,RedHatDisplay,Arial,Helvetica,sans-serif);font-size:1.125rem;font-size:var(--pf-global--FontSize--lg,1.125rem);font-weight:500}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level]:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level]:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5:first-child,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level]:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level]:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5:first-child,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6:first-child{margin-top:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header a,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level] a,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level] a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5 a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6 a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level] a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2 a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3 a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4 a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5 a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6 a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level] a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2 a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3 a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4 a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5 a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6 a{border:1px solid transparent;color:#464646;color:var(--pfe-navigation__dropdown--headings--Color,#464646);text-decoration:underline}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level] a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level] a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level] a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level] a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5 a:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level] a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level] a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level] a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level] a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5 a:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6 a:hover{color:#036;color:var(--pfe-navigation__dropdown--link--Color--hover,#036);text-decoration:none}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level] a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level] a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5 a:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container .pfe-link-list--header a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container [role=heading][aria-heading-level] a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h2 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h3 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h4 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h5 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container h6 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles .pfe-link-list--header a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles [role=heading][aria-heading-level] a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h2 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h3 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h4 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h5 a:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles h6 a:focus{border:1px dashed;outline:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container li,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles li,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container li,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles li{margin:0 0 16px;-moz-column-break-inside:avoid;break-inside:avoid}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-card,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-card,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container a,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-card,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles a,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-card,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta{-moz-column-break-inside:avoid;break-inside:avoid}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[pfe-priority=primary],#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[priority=primary],#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[pfe-priority=primary],#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[priority=primary],pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[pfe-priority=primary],pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[priority=primary],pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[pfe-priority=primary],pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[priority=primary]{--pfe-cta--BackgroundColor:var(--pfe-navigation__dropdown--pfe-cta--BackgroundColor,#e00);--pfe-cta--BackgroundColor--hover:var(--pfe-navigation__dropdown--pfe-cta--hover--BackgroundColor,#c00);--pfe-theme--ui--border-width:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[pfe-priority=primary]:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[pfe-priority=primary]:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[priority=primary]:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[priority=primary]:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[pfe-priority=primary]:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[pfe-priority=primary]:hover,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[priority=primary]:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[priority=primary]:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[pfe-priority=primary]:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[pfe-priority=primary]:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[priority=primary]:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta[priority=primary]:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[pfe-priority=primary]:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[pfe-priority=primary]:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[priority=primary]:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta[priority=primary]:hover{--pfe-cta--BackgroundColor:var(--pfe-navigation__dropdown--pfe-cta--hover--BackgroundColor,#c00)}pfe-card #pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta,pfe-card #pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta,pfe-card pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container pfe-cta,pfe-card pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles pfe-cta{margin-top:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container li,#pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container ul,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles li,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles ul,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container li,pfe-navigation.pfe-navigation--processed .pfe-navigation-item__tray--container ul,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles li,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--default-styles ul{list-style:none;margin:0;padding:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles,pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles{color:#151515;color:var(--pfe-navigation__dropdown--Color,#151515);-moz-column-count:auto;column-count:auto;display:block;font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem);gap:0;margin-left:auto;margin-right:auto;max-width:1136px;max-width:var(--pfe-navigation--content-max-width,1136px);padding-bottom:12px;padding-top:12px;width:calc(100% + 32px)}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles,pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles{-moz-column-count:3;column-count:3;display:block;gap:32px;gap:var(--pfe-navigation--gutter,32px);padding-bottom:12px;padding-top:12px}}@media (min-width:1200px){#pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles,pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles{-moz-column-count:auto;column-count:auto;display:flex;flex-wrap:wrap;padding-bottom:32px;padding-top:32px}@supports (display:grid){#pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles,pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles{display:grid;gap:32px;gap:var(--pfe-navigation--gutter,32px);grid-auto-flow:row;grid-template-columns:repeat(4,minmax(0,1fr))}}}.pfe-navigation--collapse-main-menu #pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,.pfe-navigation--collapse-main-menu #pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles,.pfe-navigation--collapse-main-menu pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,.pfe-navigation--collapse-main-menu pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles{-moz-column-count:3;column-count:3;display:block;gap:32px;gap:var(--pfe-navigation--gutter,32px);padding-bottom:12px;padding-top:12px}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles{-moz-column-count:auto;column-count:auto;display:block;gap:0;margin-left:-16px;margin-right:-16px;max-width:1136px;max-width:var(--pfe-navigation--content-max-width,1136px);padding-bottom:12px;padding-top:12px;width:calc(100% + 32px)}.pfe-navigation__menu-item--open #pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,.pfe-navigation__menu-item--open #pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles,.pfe-navigation__menu-item--open pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,.pfe-navigation__menu-item--open pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles{transition-delay:0s;visibility:visible}#pfe-navigation.pfe-navigation--processed .pfe-navigation-grid>*,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles>*,pfe-navigation.pfe-navigation--processed .pfe-navigation-grid>*,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles>*{margin:0 0 18px;-moz-column-break-inside:avoid;break-inside:avoid}@media (min-width:1200px){#pfe-navigation.pfe-navigation--processed .pfe-navigation-grid>*,#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles>*,pfe-navigation.pfe-navigation--processed .pfe-navigation-grid>*,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles>*{margin:0}}.pfe-navigation--collapse-main-menu #pfe-navigation.pfe-navigation--processed .pfe-navigation-grid>*,.pfe-navigation--collapse-main-menu #pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles>*,.pfe-navigation--collapse-main-menu pfe-navigation.pfe-navigation--processed .pfe-navigation-grid>*,.pfe-navigation--collapse-main-menu pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--default-styles>*{margin:0 0 18px}#pfe-navigation.pfe-navigation--processed .pfe-navigation-grid,pfe-navigation.pfe-navigation--processed .pfe-navigation-grid{max-width:100%}#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--1-x,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown--1-x{display:block}#pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown,pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown{background:#fff}#pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown site-switcher,pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown site-switcher{margin-left:auto;margin-right:auto;max-width:1136px;max-width:var(--pfe-navigation--content-max-width,1136px);padding:12px 24px;padding:12px var(--pfe-navigation__dropdown--full-width--spacing--mobile,24px)}@media (min-width:1200px){#pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown site-switcher,pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown site-switcher{padding:32px 64px;padding:32px var(--pfe-navigation__dropdown--full-width--spacing--desktop,64px)}}.pfe-navigation--collapse-main-menu #pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown site-switcher,.pfe-navigation--collapse-main-menu pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown site-switcher{padding:12px 24px;padding:12px var(--pfe-navigation__dropdown--full-width--spacing--mobile,24px)}#pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown site-switcher .container,pfe-navigation.pfe-navigation--processed .pfe-navigation__site-switcher .pfe-navigation__dropdown site-switcher .container{margin:0;padding:0;width:auto}#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--invisible[class],pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--invisible[class]{padding:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--invisible pfe-navigation-dropdown,pfe-navigation.pfe-navigation--processed .pfe-navigation__dropdown-wrapper--invisible pfe-navigation-dropdown{visibility:hidden}#pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--single-column[class],pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--single-column[class]{padding:0}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--single-column[class],pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--single-column[class]{box-shadow:0 1px 2px rgba(0,0,0,.12);box-shadow:var(--pfe-navigation__dropdown--BoxShadow,0 1px 2px rgba(0,0,0,.12));max-width:100%;min-width:13em;padding:0 32px;position:absolute;top:100%}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--single-column[class],.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--single-column[class]{box-shadow:none;max-width:100%;position:static}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--single-column[class],pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--single-column[class]{right:0}}#pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--full[class],pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--full[class]{width:100%}@media (min-width:768px){#pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--full[class],pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--full[class]{left:0;position:absolute;right:0}}.pfe-navigation--collapse-secondary-links #pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--full[class],.pfe-navigation--collapse-secondary-links pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--full[class]{position:static}#pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--full[class] .pfe-navigation__dropdown,pfe-navigation.pfe-navigation--processed .pfe-navigation__custom-dropdown--full[class] .pfe-navigation__dropdown{width:100%}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles{padding-left:16px;padding-right:16px}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles form,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles form{align-items:center;display:flex}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button,#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input{padding:10px;transition:box-shadow .2s}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input{border:1px solid #f0f0f0;border-bottom-color:#8b8e91;color:#717579;flex-basis:0%;flex-grow:1;flex-shrink:1;font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem);margin-right:8px}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input::-moz-placeholder,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input::-moz-placeholder{color:#717579}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input::placeholder,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input::placeholder{color:#717579}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button{background-color:#e00;border:1px solid #e00;border-radius:2px;color:#fff;flex-basis:auto;flex-grow:0;flex-shrink:1;font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem)}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input:hover{outline:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input:focus:after,#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input:hover:after,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input:focus:after,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles input:hover:after{border:1px dashed #000;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button:focus,#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button:hover,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button:focus,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button:hover{outline:0}#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button:focus:after,#pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button:hover:after,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button:focus:after,pfe-navigation.pfe-navigation--processed .pfe-navigation__search--default-styles button:hover:after{border:1px dashed #fff;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}#pfe-navigation .pfe-navigation__site-switcher__back-wrapper,pfe-navigation .pfe-navigation__site-switcher__back-wrapper{border-bottom:1px solid #d2d2d2;border-bottom:var(--pfe-navigation__dropdown--separator--Border,1px solid var(--pfe-theme--color--ui--border--lighter,#d2d2d2));display:block}@media (min-width:768px){#pfe-navigation .pfe-navigation__site-switcher__back-wrapper,pfe-navigation .pfe-navigation__site-switcher__back-wrapper{display:none}}.pfe-navigation--collapse-secondary-links #pfe-navigation .pfe-navigation__site-switcher__back-wrapper,.pfe-navigation--collapse-secondary-links pfe-navigation .pfe-navigation__site-switcher__back-wrapper{display:block}#pfe-navigation .pfe-navigation__site-switcher__back-button,pfe-navigation .pfe-navigation__site-switcher__back-button{background-color:transparent;border:1px solid transparent;color:#06c;color:var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));cursor:pointer;font-size:1rem;font-size:var(--pf-global--FontSize--md,1rem);padding:21px 21px 21px 45px;position:relative;text-align:left;width:100%}#pfe-navigation .pfe-navigation__site-switcher__back-button:before,pfe-navigation .pfe-navigation__site-switcher__back-button:before{border:2px solid #06c;border:2px solid var(--pfe-navigation__dropdown--link--Color,var(--pfe-theme--color--link,#06c));border-right:0;border-top:0;content:"";display:block;height:8px;left:35px;position:absolute;right:auto;top:27px;transform:rotate(45deg);transform-origin:left top;width:8px}#pfe-navigation .pfe-navigation__site-switcher__back-button:focus,#pfe-navigation .pfe-navigation__site-switcher__back-button:hover,pfe-navigation .pfe-navigation__site-switcher__back-button:focus,pfe-navigation .pfe-navigation__site-switcher__back-button:hover{border:1px dashed #151515;border-top:1px dashed #151515;border:1px dashed var(--pfe-navigation__dropdown--Color,#151515);color:#036;color:var(--pfe-navigation__dropdown--link--Color--hover,#036);outline:0}#pfe-navigation.pfe-navigation--processed site-switcher,pfe-navigation.pfe-navigation--processed site-switcher{-moz-columns:auto;columns:auto;display:block}#pfe-navigation.pfe-navigation--stuck,pfe-navigation.pfe-navigation--stuck{left:0;position:fixed;top:0;width:100%;z-index:95;z-index:var(--pfe-theme--zindex--navigation,95)}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__outer-menu-wrapper__inner,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__outer-menu-wrapper__inner{opacity:1!important}#pfe-navigation.pfe-navigation--in-crusty-browser pfe-navigation-account,#pfe-navigation.pfe-navigation--in-crusty-browser rh-account-dropdown,pfe-navigation.pfe-navigation--in-crusty-browser pfe-navigation-account,pfe-navigation.pfe-navigation--in-crusty-browser rh-account-dropdown{display:none!important}#pfe-navigation.pfe-navigation--in-crusty-browser[open-toggle=pfe-navigation__account-toggle] pfe-navigation-account,#pfe-navigation.pfe-navigation--in-crusty-browser[open-toggle=pfe-navigation__account-toggle] rh-account-dropdown,pfe-navigation.pfe-navigation--in-crusty-browser[open-toggle=pfe-navigation__account-toggle] pfe-navigation-account,pfe-navigation.pfe-navigation--in-crusty-browser[open-toggle=pfe-navigation__account-toggle] rh-account-dropdown{display:block!important}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__menu-item,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__menu-item{display:block}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__menu-link[aria-expanded=true],pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__menu-link[aria-expanded=true]{--pfe-icon--color:var(--pfe-navigation__nav-bar--Color--active,var(--pfe-theme--color--text,#151515));background:#fff;background:var(--pfe-navigation__nav-bar--toggle--BackgroundColor--active,var(--pfe-theme--color--surface--lightest,#fff));color:#151515;color:var(--pfe-navigation__nav-bar--Color--active,var(--pfe-theme--color--text,#151515))}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__menu-link[aria-expanded=true]:focus,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__menu-link[aria-expanded=true]:focus{outline:0}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__menu-link[aria-expanded=true]:focus:after,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__menu-link[aria-expanded=true]:focus:after{border:1px dashed;bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown{display:flex;flex-wrap:wrap}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown>.style-scope,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown>.style-scope{flex-basis:25%}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown .pfe-navigation__footer.style-scope,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown .pfe-navigation__footer.style-scope{flex-basis:100%}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown .pfe-navigation__footer.style-scope>.style-scope,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown .pfe-navigation__footer.style-scope>.style-scope{margin-right:16px}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown--single-column,#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown--single-column ul,#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown--single-column>.style-scope,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown--single-column,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown--single-column ul,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown--single-column>.style-scope{display:flex;flex-direction:column;flex-wrap:nowrap}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown--single-column>.style-scope,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__dropdown--single-column>.style-scope{flex-basis:auto}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__search-toggle,#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__secondary-link,#pfe-navigation.pfe-navigation--in-crusty-browser [slot=secondary-links]>a,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__search-toggle,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__secondary-link,pfe-navigation.pfe-navigation--in-crusty-browser [slot=secondary-links]>a{color:#fff!important;justify-content:center!important}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__search-toggle[aria-expanded=true],#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__secondary-link[aria-expanded=true],#pfe-navigation.pfe-navigation--in-crusty-browser [slot=secondary-links]>a[aria-expanded=true],pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__search-toggle[aria-expanded=true],pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__secondary-link[aria-expanded=true],pfe-navigation.pfe-navigation--in-crusty-browser [slot=secondary-links]>a[aria-expanded=true]{color:#151515!important}#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__account-wrapper--logged-in .pfe-navigation__log-in-link,#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__search-toggle .secondary-link__icon-wrapper,#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__search-toggle pfe-icon,#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__secondary-link .secondary-link__icon-wrapper,#pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__secondary-link pfe-icon,#pfe-navigation.pfe-navigation--in-crusty-browser [slot=secondary-links]>a .secondary-link__icon-wrapper,#pfe-navigation.pfe-navigation--in-crusty-browser [slot=secondary-links]>a pfe-icon,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__account-wrapper--logged-in .pfe-navigation__log-in-link,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__search-toggle .secondary-link__icon-wrapper,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__search-toggle pfe-icon,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__secondary-link .secondary-link__icon-wrapper,pfe-navigation.pfe-navigation--in-crusty-browser .pfe-navigation__secondary-link pfe-icon,pfe-navigation.pfe-navigation--in-crusty-browser [slot=secondary-links]>a .secondary-link__icon-wrapper,pfe-navigation.pfe-navigation--in-crusty-browser [slot=secondary-links]>a pfe-icon{display:none!important}[id=pfe-navigation__account-dropdown][class][class]{display:block;height:auto;left:0;padding:0;position:absolute;top:72px;top:var(--pfe-navigation__nav-bar--Height,72px);width:100%}[id=pfe-navigation__account-dropdown].pfe-navigation__dropdown-wrapper--invisible[class]{display:none}.pfe-navigation__dropdown-wrapper{overflow:hidden}@media (min-width:768px){.pfe-navigation__custom-dropdown--single-column{min-width:25em}}.pfe-navigation--collapse-secondary-links .pfe-navigation__custom-dropdown--single-column{min-width:0}.secondary-link__icon-wrapper{align-items:center;display:flex;justify-content:center}.secondary-link__alert-count{background:#06c;background:var(--pfe-navigation__nav-bar--alert-color,var(--pfe-theme--color--link,#06c));border-radius:20px;color:#fff;color:var(--pfe-navigation__nav-bar--Color--on-highlight,var(--pfe-theme--color--text--on-saturated,#fff));display:block;font-size:12px;font-size:var(--pfe-navigation--FontSize--xs,12px);line-height:20px;margin:0 4px 0 2px;min-width:23px;overflow:hidden;padding:0 8px}.secondary-link__alert-count:empty{display:none}#pfe-navigation__1x-skip-links{left:0;position:absolute;top:0}#pfe-navigation__1x-skip-links,#pfe-navigation__1x-skip-links li{height:0;list-style:none;margin:0;padding:0;width:0}.skip-link[class][class]{font-size:.875rem;font-size:var(--pf-global--FontSize--sm,.875rem);line-height:18px}.skip-link[class][class]:focus{border-radius:.21429em;height:auto;left:50%;padding:.42857em .57143em;position:fixed;top:8px;transform:translateX(-50%);width:auto;z-index:99999;clip:auto;background:#fff;background:var(--pfe-navigation__skip-link--BackgroundColor,var(--pfe-theme--color--surface--lightest,#fff));color:#06c;color:var(--pfe-navigation__skip-link--Color,var(--pfe-theme--color--link,#06c));text-decoration:none}pfe-navigation pfe-navigation-account[slot=account]{background:#fff;background:var(--pfe-navigation__dropdown--Background,var(--pfe-theme--color--surface--lightest,#fff));width:100%}</style> <style>:host([size=sm]) #container[data-v-8589d091]{--_size:var(--pf-global--icon--FontSize--sm,12px)}.content-wrapper[data-v-8589d091]{height:auto;margin:0 auto;min-height:46vh}.content[data-v-8589d091]{max-width:1000px}#left-content[data-v-8589d091]{max-width:330px;z-index:1}.line-below-chp[data-v-8589d091]{margin:var(--rh-space-xl,24px) 0 var(--rh-space-3xl,48px)}.toc-container[data-v-8589d091]{border-right:1px solid var(--rh-color-gray-30,#c7c7c7);min-height:100vh;position:sticky;top:0;transition:transform .3s ease-in-out}nav#toc[data-v-8589d091]{height:auto;overflow-y:auto;padding-bottom:var(--rh-space-2xl,32px)}.max-height-85[data-v-8589d091]{max-height:85vh}.max-height-75[data-v-8589d091]{max-height:75vh}.toc-filter[data-v-8589d091]{background-color:#fff;padding:var(--rh-space-lg,16px) var(--rh-space-2xl,32px);position:sticky;top:-1px;width:100%;z-index:1}#text[data-v-8589d091],.toc-filter[data-v-8589d091]{align-items:center;display:flex}#text[data-v-8589d091]{flex:1;flex-direction:row}#search-icon[data-v-8589d091]{color:#151515;left:2.5rem;position:absolute;top:55%;transform:translateY(-50%)}pf-icon[data-v-8589d091]{--pf-icon--size:16px}#text:focus-within #icon[data-v-8589d091],#text:hover #icon[data-v-8589d091]{color:#151515}#text[data-v-8589d091]:after,#text[data-v-8589d091]:before{content:"";inset:0;pointer-events:none;position:absolute}#text-input[data-v-8589d091]:focus,#text-input:focus+#utilities[data-v-8589d091]{border-bottom:2px solid #06c;outline:none}#text-input[data-v-8589d091]{background-color:transparent;border:1px solid #f0f0f0;border-bottom-color:#8a8d90;color:#151515;font-family:inherit;font-size:100%;grid-area:text-input;line-height:1.5;overflow:hidden;padding:.375rem .25rem .375rem 2rem;position:relative;text-overflow:ellipsis;white-space:nowrap;width:100%}#utilities[data-v-8589d091]{align-items:center;border:1px solid #f0f0f0;border-bottom:1px solid #8a8d90;border-left:0;display:flex}#utilities rh-badge[data-v-8589d091]{border-radius:80px;font-weight:var(--rh-font-weight-heading-medium,500);--_background-color:#e0e0e0;margin-right:8px}#clear-button[data-v-8589d091]{--pf-c-button--PaddingTop:0.625rem;--pf-c-button--PaddingRight:.25rem;--pf-c-button--PaddingBottom:0.625rem;--pf-c-button--PaddingLeft:.25rem;margin-right:8px}#text-input.no-right-border[data-v-8589d091]{border-right:0}.btn-container[data-v-8589d091]{bottom:0;display:flex;justify-content:flex-end;padding:1rem;pointer-events:none;position:fixed;right:0;z-index:2}.top-scroll-btn[data-v-8589d091]{--pf-c-button--BorderRadius:64px;pointer-events:all}.focusable[data-v-8589d091]:focus-visible{border:2px solid var(--rh-color-interactive-blue,#06c)}.mobile-nav-wrapper[data-v-8589d091]{align-items:center;border-bottom:1px solid #c7c7c7;display:flex;height:auto;justify-content:space-between;padding:var(--rh-space-sm,.5rem)}.mobile-nav[data-v-8589d091]{align-items:center;background-color:var(--rh-color-bg-page,#fff);min-height:51px;position:sticky;top:0;z-index:5}.active-mobile-menu[data-v-8589d091]{color:#151515;padding-left:.5rem}.hidden[data-v-8589d091]{display:none}.mobile-nav-btn[data-v-8589d091]{background-color:transparent;border:none;font-family:inherit;font-size:.875rem;font-weight:500;margin:0;min-height:40px;min-width:40px}.border-right[data-v-8589d091]{border-right:1px solid #c7c7c7}.toc-focus-container[data-v-8589d091]{position:sticky;top:0;z-index:2}.toc-focus-btn[data-v-8589d091]{align-items:center;background-color:var(--rh-color-white,#fff);border:1px solid var(--rh-color-blue-50,#06c);border-radius:50%;cursor:pointer;display:flex;height:40px;justify-content:center;position:absolute;right:-20px;top:15px;width:40px}.toc-focus-btn[data-v-8589d091]:focus-visible,.toc-focus-btn[data-v-8589d091]:hover{background-color:var(--rh-color-blue-10,#e0f0ff);box-shadow:var(--rh-box-shadow-sm,0 2px 4px 0 hsla(0,0%,8%,.2))}.toc-focus-btn[data-v-8589d091]:focus-visible{border:2px solid var(--rh-color-blue-50,#06c)}.toc-focus-btn-icon[data-v-8589d091]{color:var(--rh-color-blue-50,#06c)}.toc-wrapper[data-v-8589d091]{padding:0}.product-container[data-v-8589d091]{border-bottom:1px solid var(--rh-color-gray-30,#c7c7c7);padding:var(--rh-space-xl,24px) var(--rh-space-2xl,32px)}.product-container h1.product-title[data-v-8589d091]{font-size:var(--rh-font-size-code-xl,1.25rem);line-height:30px;margin-bottom:0;margin-top:0}.product-container .product-version[data-v-8589d091]{align-items:center;display:flex;flex-wrap:wrap;margin-top:var(--rh-space-lg,16px)}.product-version .version-label[data-v-8589d091]{color:var(--rh-color-canvas-black,#151515);font-family:Red Hat Text;font-size:var(--rh-font-size-body-text-sm,.875rem);font-weight:500}.product-version .version-select-dropdown[data-v-8589d091]{margin:var(--rh-space-md,8px) var(--rh-space-sm,6px);max-width:9.75rem;min-height:2rem;min-width:3rem;overflow:hidden;width:-moz-min-content;width:min-content;word-wrap:nowrap;-webkit-appearance:none;-moz-appearance:none;background:var(--rh-color-white,#fff);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none' viewBox='0 0 10 6'%3E%3Cpath fill='%23151515' d='M.678 0h8.644c.596 0 .895.797.497 1.195l-4.372 4.58c-.298.3-.695.3-.993 0L.18 1.196C-.216.797.081 0 .678 0'/%3E%3C/svg%3E");background-position-x:85%;background-position-y:50%;background-repeat:no-repeat;border:1px solid var(--rh-color-gray-30,#c7c7c7);border-bottom:0;box-shadow:0 -1px 0 0 var(--rh-color-gray-60,#4d4d4d) inset;cursor:pointer;font-size:var(--rh-font-size-body-text-md,1rem);padding:var(--rh-space-md,8px);padding-right:24px;text-overflow:ellipsis}pf-popover[data-v-8589d091]{margin-top:var(--rh-space-md,8px);--pf-c-popover__arrow--BackgroundColor:var(--rh-color-canvas-black,#151515);--pf-c-popover__content--BackgroundColor:var(--rh-color-canvas-black,#151515);--pf-c-popover--BoxShadow:0px 4px 8px 0px #15151540;--pf-c-popover__title-text--Color:var(--rh-color-white,#fff);--pf-c-popover--MaxWidth:300px;--pf-c-popover--MinWidth:300px;--pf-c-popover--c-button--Top:20px;--pf-c-popover--c-button--Right:4px;--pf-c-button--m-plain--hover--Color:var(--rh-color-white,#fff)}pf-popover[data-v-8589d091]::part(content){padding:var(--rh-space-2xl,32px)}pf-popover[data-v-8589d091]::part(body){margin-top:var(--rh-space-lg,16px)}pf-popover[data-v-8589d091]::part(close-button){--pf-c-button--m-plain--focus--Color:var(--rh-color-gray-30,#c7c7c7);--pf-c-button--m-plain--Color:var(--rh-color-gray-30,#c7c7c7)}.popover-header-text[data-v-8589d091]{color:var(--rh-color-white,#fff);font-size:var(--rh-font-size-code-md,1rem);margin:0;max-width:80%;padding:0}.popover-body-link[data-v-8589d091]{color:var(--rh-color-blue-30,#92c5f9);text-decoration:none}.popover-trigger-btn[data-v-8589d091]{align-items:center;background:none;border:none;cursor:pointer;display:flex;justify-content:center}#first-button[data-v-8589d091]{width:80%}#second-button[data-v-8589d091]{text-align:right;width:20%}#toc-btn[data-v-8589d091]{text-align:left;width:100%}.toc-error[data-v-8589d091]{margin:0;max-width:100%}#layout label[data-v-8589d091]{font-weight:500}.page-layout-options[data-v-8589d091]{background-color:#fff;display:flex;flex-direction:column;padding-bottom:var(--rh-space-lg,16px)}.sticky-top[data-v-8589d091]{position:sticky;top:0}summary[data-v-8589d091]{cursor:pointer;list-style:none;position:relative}summary[data-v-8589d091]::-webkit-details-marker{display:none}details#jump-links-details .jump-links-heading[data-v-8589d091]{background-color:var(--rh-color-white,#fff);display:block;margin-top:var(--rh-space-lg,16px);padding:var(--rh-space-lg,16px) 0 0 var(--rh-space-xl,24px);position:sticky;top:0}details#jump-links-details .jump-links-heading[data-v-8589d091]:before{border-right:3px solid #151515;border-top:3px solid #151515;color:#151515;content:"";display:flex;height:9px;left:2px;position:absolute;top:26px;transform:rotate(-135deg);width:9px}details#jump-links-details[open] .jump-links-heading[data-v-8589d091]:before{transform:rotate(135deg)}.table-of-contents>ol[data-v-8589d091]{list-style:none;margin:0;padding:0}nav.table-of-contents[data-v-8589d091]{z-index:1}nav.table-of-contents ol[data-v-8589d091]{list-style:none;margin:0;padding:0}#mobile-browse-docs[data-v-8589d091]{font-weight:var(--rh-font-weight-body-text-medium,500);padding-left:var(--rh-space-2xl,32px)}.docs-content-container[data-v-8589d091]{font-size:var(--rh-font-size-body-text-lg,1.125rem);font-weight:var(--rh-font-weight-body-text-regular,400);line-height:1.6667;padding-left:6rem;padding-right:6rem;padding-top:var(--rh-space-3xl,4rem)}.chapter-title[data-v-8589d091]{font-family:Red Hat Display}h1.chapter-title[data-v-8589d091]{font-size:var(--rh-fontsize-heading-xl,2.25rem);line-height:46.8px;margin:0;padding:0}.chapter .section h4[data-v-8589d091]{font-size:24px;font-weight:400}.banner-wrapper[data-v-8589d091]{padding:3rem 6rem 0}.page-format-dropdown[data-v-8589d091]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABtSURBVHgBhc4xCoAwDAXQxE6li0K76w0cPZqjHsEb6AlcHb2BR9ADdG7GmIKTWv0QSOAFPjrndgAo4TtHxszTD4JoVAhh1VoXiNgkUO+971Q8iGgxxlSy1jc3CGof39baWTrzNSOkkksEbG/oBGEJIn6gD3jAAAAAAElFTkSuQmCC");background-position:8.5rem;background-repeat:no-repeat;background-size:auto;border:1px solid #c7c7c7;box-shadow:inset 0 -1px 0 0 #4d4d4d;font-family:Red Hat Text;font-size:var(--rh-font-size-body-text-md,1rem);margin-top:var(--rh-space-xs,4px);max-width:168px;min-height:36px;min-width:168px;overflow:hidden;padding:0 var(--rh-space-xl,24px) 0 var(--rh-space-md,8px);text-overflow:ellipsis;white-space:nowrap}.content-format-selectors[data-v-8589d091]{color:#151515;font-family:Red Hat Text;font-size:var(--rh-font-size-body-text-sm,.875rem);font-weight:var(--rh-font-weight-body-text-medium,500);margin-right:var(--rh-space-2xl,32px);max-width:250px;min-width:250px;padding-top:var(--rh-space-2xl,32px)}.chapter .section .simpara[data-v-8589d091],.chapter .section p[data-v-8589d091]{font-family:Red Hat Text;font-size:var(--rh-font-size-body-text-lg,1.125rem);font-weight:var(--rh-font-weight-body-text-regular,400);line-height:30px}#toggle-focus-mode[data-v-8589d091]{padding-right:var(--rh-space-lg,1rem)}@keyframes slideaway-left-8589d091{0%{display:block}to{opacity:0;transform:translateX(-40px)}}@keyframes slideaway-right-8589d091{0%{display:block}to{opacity:0;transform:translateX(40px)}}@keyframes enter-left-8589d091{0%{display:none;transform:translateX(-40px)}to{opacity:1}}@keyframes enter-right-8589d091{0%{display:none;transform:translateX(40px)}to{opacity:1}}.hide-left[data-v-8589d091]{animation:slideaway-left-8589d091 .2s;display:none}.enter-left[data-v-8589d091]{animation:enter-left-8589d091 .3s;border-right:none;display:block}.enter-right[data-v-8589d091]{animation:enter-right-8589d091 .3s;display:block}.hide-right[data-v-8589d091]{animation:slideaway-right-8589d091 .2s;display:none}.toc-container.enter-toc-container-left[data-v-8589d091]{transform:translateX(-85%)}.alert-section[data-v-8589d091]{padding-bottom:3rem}rh-alert[data-v-8589d091]{width:auto}@media (min-width:992px){#mobile-nav[data-v-8589d091],#toc-list-mobile[data-v-8589d091]{display:none}}@media (min-width:992px) and (max-width:1400px){.docs-ocp-content-container[data-v-8589d091]{padding:var(--rh-space-4xl,64px) var(--rh-space-lg,16px) 0}}@media (width < 992px){#breadcrumbs[data-v-8589d091],.content-format-selectors[data-v-8589d091],.toc-container[data-v-8589d091]{display:none}#mobile-nav-content-wrapper[data-v-8589d091]{border-bottom:1px solid #c7c7c7;border-top:1px solid #c7c7c7}#toc-wrapper-mobile[data-v-8589d091]{padding:var(--rh-space-md,1.5rem)}.product-container[data-v-8589d091]{padding:var(--rh-space-2xl,32px) var(--rh-space-lg,16px)}.product-container.shrink-product-padding[data-v-8589d091]{padding:var(--rh-space-lg,16px)}.product-version .version-select-dropdown[data-v-8589d091]{margin:0 var(--rh-space-lg,16px)}#page-content-options-mobile[data-v-8589d091]{padding:var(--rh-space-lg,2rem)}label[for=page-format][data-v-8589d091],label[for=toggle-focus-mode][data-v-8589d091]{display:block}.page-format-dropdown[data-v-8589d091]{background-position:97%;max-width:100%}nav#mobile-toc-menu[data-v-8589d091]{max-height:50vh;overflow-y:scroll}.mobile-jump-links #first-button[data-v-8589d091]{width:100%}#jump-links-btn[data-v-8589d091]{text-align:left;width:100%}#mobile-jump-links-content-wrapper[data-v-8589d091]{border-bottom:1px solid #c7c7c7;border-top:1px solid #c7c7c7;padding:0 var(--rh-space-lg,16px) var(--rh-space-2xl,32px)}.table-of-contents #browse-docs[data-v-8589d091]{margin-top:1rem;padding-top:var(--rh-space-md,1.5rem)}.mobile-nav[data-v-8589d091]{display:block}.hide-mobile-nav[data-v-8589d091],.mobile-nav[data-v-8589d091]{transition:transform .3s ease-in-out}.hide-mobile-nav[data-v-8589d091]{transform:translateY(-100%)}.docs-content-container[data-v-8589d091]{padding-left:1.25rem;padding-right:1.25rem;padding-top:var(--rh-space-xl,24px)}.banner-wrapper[data-v-8589d091]{padding:0 1rem}.toc-filter-mobile[data-v-8589d091]{align-items:center;display:flex;padding:var(--rh-space-lg,16px);width:100%}#text-input[data-v-8589d091]{padding-left:.5rem}.toc-filter[data-v-8589d091]{display:none}}@media (width <=576px){.content-format-selectors[data-v-8589d091]{display:none}}.informaltable[data-v-8589d091],.rhdocs .informaltable[data-v-8589d091],.rhdocs .table-contents[data-v-8589d091],.rhdocs .table-wrapper[data-v-8589d091],.table-contents[data-v-8589d091],.table-wrapper[data-v-8589d091]{max-height:var(--rh-table--maxHeight);overflow:auto}rh-table[data-v-8589d091]{display:block;margin:2rem 0;max-width:100%}.pvof-doc__wrapper[data-v-8589d091],.rhdocs[data-v-8589d091]{--rh-table--maxHeight:calc(100vh - 12.5rem)}</style> <style>:is(rh-footer-block) a[data-v-97dd2752]{text-decoration:underline}</style> <style>:is(rh-footer,:is(rh-footer-universal,rh-global-footer)) a{color:var(--rh-color-link-inline-on-dark,var(--rh-color-interactive-blue-lighter,#92c5f9));text-decoration:none}:is(rh-footer,:is(rh-footer-universal,rh-global-footer)) a:hover{color:var(--rh-color-link-inline-hover-on-dark,var(--rh-color-interactive-blue-lightest,#b9dafc));text-decoration:underline}:is(rh-footer,:is(rh-footer-universal,rh-global-footer)) a:is(:focus,:focus-within){color:var(--rh-color-link-inline-focus-on-dark,var(--rh-color-interactive-blue-lightest,#b9dafc));text-decoration:underline}:is(rh-footer,:is(rh-footer-universal,rh-global-footer)) a:visited{color:var(--rh-color-link-inline-visited-on-dark,var(--rh-color-interactive-blue-lightest,#b9dafc));text-decoration:none}:is(rh-footer,:is(rh-footer-universal,rh-global-footer)) a[slot^=logo]{display:block}:is(rh-footer) a[slot^=logo]>img{display:block;height:100%;height:var(--rh-size-icon-04,40px);width:auto}:is(rh-footer,rh-footer-universal,rh-global-footer) :is(h1,h2,h3,h4,h5,h6){font-family:var(--rh-font-family-heading,RedHatDisplay,"Red Hat Display","Noto Sans Arabic","Noto Sans Hebrew","Noto Sans JP","Noto Sans KR","Noto Sans Malayalam","Noto Sans SC","Noto Sans TC","Noto Sans Thai",Helvetica,Arial,sans-serif);line-height:var(--rh-line-height-heading,1.3)}rh-footer [slot=links]:is(h1,h2,h3,h4,h5):nth-of-type(n+5){--_link-header-margin:calc(var(--rh-space-2xl, 32px) - var(--rh-space-lg, 16px))}rh-footer [slot^=links] a{gap:var(--rh-footer-links-gap,var(--rh-space-md,8px))}:is(rh-footer,:is(rh-footer-universal,rh-global-footer)) [slot^=links] li{display:contents;margin:0;padding:0}:is(rh-footer,:is(rh-footer-universal,rh-global-footer)) [slot^=links] a{color:var(--rh-color-text-primary-on-dark,#fff)!important;display:block;font-size:var(--rh-footer-link-font-size,var(--rh-font-size-body-text-sm,.875rem));width:-moz-fit-content;width:fit-content}:is(rh-footer-universal,rh-global-footer) [slot^=links] a{font-size:inherit}:is(rh-footer,rh-footer-universal,rh-global-footer){--rh-footer-section-side-gap:var(--rh-space-lg,16px)}@media screen and (min-width:768px){:is(rh-footer,rh-footer-universal,rh-global-footer){--rh-footer-section-side-gap:var(--rh-space-2xl,32px)}}@media screen and (min-width:1440px){:is(rh-footer,rh-footer-universal,rh-global-footer){--rh-footer-section-side-gap:var(--rh-space-4xl,64px)}}rh-footer:not(:defined){background-color:var(--rh-color-surface-darker,#1f1f1f);display:grid;grid-template-areas:"footer" "global";grid-template-rows:1fr auto;min-height:var(--rh-footer-nojs-min-height,750px);width:100%}:is(rh-footer-universal,rh-global-footer):not(:defined):before{grid-area:global}rh-footer:not(:defined)>[slot=logo]{padding:var(--rh-space-2xl,32px) var(--_section-side-gap)}:is(rh-footer-universal,rh-global-footer):not(:defined)>*,rh-footer:not(:defined)>:not([slot=logo],:is(rh-footer-universal,rh-global-footer)){border:0;clip:rect(1px,1px,1px,1px);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:is(rh-footer-universal,rh-global-footer):not(:defined){background-color:var(--rh-color-surface-darkest,#151515);display:block;min-height:176px;width:100%}rh-footer-universal rh-footer-copyright{grid-column:-1/1}</style> <style>.status-legal .status-page-widget[data-v-5f538988]{display:block;margin:.5rem 0;width:11.3125rem;width:-moz-max-content;width:max-content}.status-page-widget[data-v-5f538988]{align-items:center;display:flex;flex-direction:row}.status-legal .status-page-widget .status-description[data-v-5f538988]{color:#ccc;font-weight:600;letter-spacing:.0125rem;line-height:1.5;margin-right:.5rem}.status-good[data-v-5f538988]{background-color:#3e8536}.status-critical[data-v-5f538988]{background-color:#a30100}.status-partial[data-v-5f538988]{background-color:#f5c12d}.status-maintentance[data-v-5f538988]{background-color:#316dc1}.status-minor[data-v-5f538988]{background-color:#b85c00}.status-description[data-v-5f538988]{color:#ccc;font-weight:500;letter-spacing:.2px;line-height:1.5}.current-status-indicator[data-v-5f538988]{border-radius:6px;display:inline-block;height:12px;margin:0 0 0 5px;width:12px}.current-status-indicator.small[data-v-5f538988]{border-radius:4px;display:inline-block;height:8px;margin:0 0 0 5px;width:8px}</style> <style>.breadcrumbs[data-v-5066b940]{align-items:center;background-color:#f6f6f6;display:flex;gap:var(--rh-space-xl,24px);padding:var(--rh-space-lg,16px) var(--rh-space-2xl,32px)}nav[data-v-5066b940]{flex:1}ol[data-v-5066b940]{background-color:#f6f6f6;font-size:.875rem;list-style:none;margin:0;padding:0}li[data-v-5066b940]{color:#151515;display:inline}a[data-v-5066b940]:after{border-bottom-color:transparent;border-left-color:transparent;box-shadow:inset .25rem .25rem 0 .0625rem #8a8d8d;content:"";display:inline-block;height:1.07143em;margin:0 .5em;position:relative;right:0;top:.75em;transform:translateY(-.5em) rotate(135deg) scale(.5);width:1.07143em}</style> <style>ol[data-v-fa0dae77]{margin:0;padding:0}li[data-v-fa0dae77],ol[data-v-fa0dae77],ul[data-v-fa0dae77]{list-style:none;margin:0}.chapter-title[data-v-fa0dae77]{font-size:1em}.sub-chapter-title[data-v-fa0dae77],.sub-chapter-title a[data-v-fa0dae77]{font-size:.875rem}#toc .link[data-v-fa0dae77],#toc-mobile .link[data-v-fa0dae77],.heading[data-v-fa0dae77],.sub-nav .link[data-v-fa0dae77],.sub-nav .link .link[data-v-fa0dae77]{display:block;padding:var(--rh-space-md,8px) var(--rh-space-2xl,32px);padding-right:2.5em;text-decoration:none;transition:background-color .25s}.heading[data-v-fa0dae77]:hover,.link[data-v-fa0dae77]:hover,.sub-nav .link[data-v-fa0dae77]:hover{background:var(--rh-color-surface-lighter,#f2f2f2);box-shadow:inset 3px 0 0 0 #d2d2d2;color:#151515}details[open]:first-of-type>.heading[data-v-fa0dae77]:after{transform:rotate(135deg)}.item[data-v-fa0dae77]{line-height:22px}#toc .link[data-v-fa0dae77],#toc-mobile .link[data-v-fa0dae77]{color:var(--rh-color-text-primary-on-light,#151515)}.sub-nav[data-v-fa0dae77],.toc-wrapper[data-v-fa0dae77]{list-style:none;margin:0}.toc-wrapper[data-v-fa0dae77]{min-width:100%;padding:0}.sub-nav[data-v-fa0dae77]{font-size:1em;line-height:24px;padding-left:1rem;padding-left:16px}.sub-nav .link[data-v-fa0dae77]:hover{color:#151515}.active[data-v-fa0dae77]{background:var(--rh-color-surface-lighter,#f2f2f2);box-shadow:inset 3px 0 0 0 var(--rh-color-icon-primary-on-light,#e00)}.chapter-landing-page[data-v-fa0dae77]{font-weight:500}summary[data-v-fa0dae77]{cursor:pointer;list-style:none;position:relative}summary[data-v-fa0dae77]::-webkit-details-marker{display:none}@keyframes slideDown-fa0dae77{0%{height:0;opacity:0}to{height:var(--details-height-open,"100%");opacity:1}}html[data-v-fa0dae77]{--details-transition-time:400ms}details[data-v-fa0dae77]{max-height:var(--details-height-closed,auto);transition:all ease-out var(--details-transition-time,0)}details[open][data-v-fa0dae77]{max-height:var(--details-height-open,auto)}details .heading.sub-chapter-title[data-v-fa0dae77]:after,details .heading[data-v-fa0dae77]:after{border-right:3px solid #151515;border-top:3px solid #151515;color:#151515;content:"";display:flex;float:right;height:9px;margin-left:16px;position:absolute;right:var(--rh-space-xl,24px);top:14px;transform:rotate(45deg);width:9px}details .heading.sub-chapter-title[data-v-fa0dae77]:after{height:8px;width:8px}</style> <style>.item[data-v-b883c74f]{line-height:22px}#toc .link[data-v-b883c74f],#toc-mobile .link[data-v-b883c74f]{color:var(--rh-color-text-primary-on-light,#151515)}#toc .link[data-v-b883c74f],#toc-mobile .link[data-v-b883c74f],.heading[data-v-b883c74f],.sub-nav .link[data-v-b883c74f],.sub-nav .link .link[data-v-b883c74f]{display:block;padding:var(--rh-space-md,8px) var(--rh-space-2xl,32px);padding-right:2.5em;text-decoration:none;transition:background-color .25s}.heading[data-v-b883c74f]:hover,.link[data-v-b883c74f]:hover,.sub-nav .link[data-v-b883c74f]:hover{background:var(--rh-color-surface-lighter,#f2f2f2);box-shadow:inset 3px 0 0 0 #d2d2d2;color:#151515}ol[data-v-b883c74f]{margin:0;padding:0}li[data-v-b883c74f],ol[data-v-b883c74f],ul[data-v-b883c74f]{list-style:none;margin:0}.chapter-title[data-v-b883c74f]{font-size:1em}.sub-nav[data-v-b883c74f]{font-size:1em;line-height:24px;list-style:none;margin:0;padding-left:1rem;padding-left:16px}.sub-nav .link[data-v-b883c74f]:hover{color:#151515}.active[data-v-b883c74f]{background:var(--rh-color-surface-lighter,#f2f2f2);box-shadow:inset 3px 0 0 0 var(--rh-color-icon-primary-on-light,#e00)}.sub-chapter-title[data-v-b883c74f],.sub-chapter-title a[data-v-b883c74f]{font-size:.875rem}summary[data-v-b883c74f]{cursor:pointer;list-style:none;position:relative}summary[data-v-b883c74f]::-webkit-details-marker{display:none}html[data-v-b883c74f]{--details-transition-time:400ms}.chapter-landing-page[data-v-b883c74f]{font-weight:500}details[open]:first-of-type>.heading[data-v-b883c74f]:after{transform:rotate(135deg)}details[data-v-b883c74f]{max-height:var(--details-height-closed,auto);transition:all ease-out var(--details-transition-time,0)}details[open][data-v-b883c74f]{max-height:var(--details-height-open,auto)}details .heading.sub-chapter-title[data-v-b883c74f]:after,details .heading[data-v-b883c74f]:after{border-right:3px solid #151515;border-top:3px solid #151515;color:#151515;content:"";display:flex;float:right;height:9px;margin-left:16px;position:absolute;right:var(--rh-space-xl,24px);top:14px;transform:rotate(45deg);width:9px}details .heading.sub-chapter-title[data-v-b883c74f]:after{height:8px;width:8px}</style> <style>.html-container[data-v-9c2a9ddb]{padding:2rem 1.5rem 0}rh-alert[data-v-9c2a9ddb]{color:#151515}@media (max-width:772px){.html-container[data-v-9c2a9ddb]{padding:3rem 1rem 0}}</style> <style>[variant=brick][data-v-a6039582]{max-width:150px}.pagination[data-v-a6039582]{display:flex;justify-content:space-between;margin-bottom:var(--rh-space-6xl,96px);margin-top:var(--rh-space-4xl,4rem)}.previous-btn[data-v-a6039582]{margin-right:auto}.next-btn[data-v-a6039582]{margin-left:auto}.next-btn[data-v-a6039582]:hover,.previous-btn[data-v-a6039582]:hover{cursor:pointer}.next-btn.disabled[data-v-a6039582],.previous-btn.disabled[data-v-a6039582]{background-color:var(--rh-color-bg-disabled,#f2f2f2);cursor:not-allowed;pointer-events:none}</style> <style>.jump-links[data-v-1d1b84c1]{margin-top:var(--rh-space-lg,16px);max-height:85vh;overflow-y:auto}.jump-links ul[data-v-1d1b84c1]{align-items:flex-start;border-left:1px solid #c7c7c7;display:flex;flex-direction:column;list-style:none;padding:0}.jump-link-item[data-v-1d1b84c1]{border-left:3px solid transparent}.jump-link-item a[data-v-1d1b84c1]{color:#4d4d4d;cursor:pointer;display:block;font-family:Red Hat Text;font-weight:400;line-height:21px;padding:var(--rh-space-md,8px) var(--rh-space-lg,16px)}.active_link[data-v-1d1b84c1]{border-left:3px solid #e00}.active_link a[data-v-1d1b84c1],.jump-link-item a[data-v-1d1b84c1]:hover{color:#151515}@media (width < 992px){.jump-links[data-v-1d1b84c1]{max-height:50vh}}</style> <style>.search-container[data-v-8df2653a]{height:100%}.form-box[data-v-8df2653a],.search-container[data-v-8df2653a]{justify-content:center}.form-box[data-v-8df2653a],.search-box[data-v-8df2653a],.search-container[data-v-8df2653a]{align-items:center;display:flex;width:100%}.search-box[data-v-8df2653a]{justify-content:space-between;position:relative}ul[data-v-8df2653a]{list-style-type:none}#search-list[data-v-8df2653a]{background:#fff;border:1px solid #f0f0f0;box-shadow:0 4px 4px 0 #00000040;color:#151515;cursor:pointer;display:block;left:0;margin:0;padding:0;position:absolute;top:37px;width:100%;z-index:200}#search-list li[data-v-8df2653a]{align-items:center;display:flex;justify-content:space-between;padding:.75rem}#search-list .active[data-v-8df2653a],#search-list li[data-v-8df2653a]:hover{background:#f0f0f0}.group-title[data-v-8df2653a]{border-top:1px solid #4d4d4d;color:#4d4d4d;cursor:default;font-size:12px;font-weight:400;pointer-events:none}.group-title[data-v-8df2653a],.group-title[data-v-8df2653a]:hover{background:#fff}.search-item-text-elipsis[data-v-8df2653a]{display:inline-block;max-width:48%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-item-text[data-v-8df2653a]{padding-left:1.75rem}.search-item-chip[data-v-8df2653a]{float:right}.search-product-version[data-v-8df2653a]{background:#fff;border:1px solid #f0f0f0;border-radius:3px;font-size:1rem;font-weight:400;line-height:24px}.search-icon-form[data-v-8df2653a]{color:var(--rh-color-gray-50,#707070);left:12px;position:absolute}.input-search-box[data-v-8df2653a]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:var(--rh-font-size-body-text-md,1rem);height:36px;padding:0 40px;width:100%}.input-clear-btn[data-v-8df2653a]{align-items:center;background-color:transparent;border:none;display:flex;height:36px;justify-content:center;margin-right:-30px;outline:none;transform:translateX(-30px)}.input-clear-btn[data-v-8df2653a]:focus{border:1px solid var(--rh-color-accent-base-on-light,#06c)}.input-clear-btn:focus .input-clear-icon[data-v-8df2653a]{color:var(--rh-color-canvas-black,#151515)}.input-clear-icon[data-v-8df2653a]{color:#6b6e72;cursor:pointer}.input-clear-icon[data-v-8df2653a]:hover{color:var(--rh-color-canvas-black,#151515)}.form-submit-btn[data-v-8df2653a]::part(button){align-items:center;background-color:var(--rh-color-gray-20,#e0e0e0);border-radius:0;display:flex;height:36px;justify-content:center;--_default-border-color:var(--rh-color-gray-20,#e0e0e0)}.input-close-btn[data-v-8df2653a]{background:none;border:none;cursor:pointer;margin:0 var(--rh-space-lg,16px)}.input-close-icon[data-v-8df2653a]{color:var(--rh-color-white,#fff)}@media (max-width:992px){.form-box[data-v-8df2653a]{gap:var(--rh-space-md,8px);margin:auto;width:100%}.input-search-box[data-v-8df2653a]{border:1px solid var(--rh-color-gray-30,#c7c7c7)}.input-search-box[data-v-8df2653a]::-moz-placeholder{color:#6a6e73;font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:var(--rh-font-size-body-text-md,1rem);font-weight:var(--rh-font-weight-code-regular,400);line-height:24px}.input-search-box[data-v-8df2653a]::placeholder{color:#6a6e73;font-family:var(--rh-font-family-body-text,"Red Hat Text","RedHatText",Arial,sans-serif);font-size:var(--rh-font-size-body-text-md,1rem);font-weight:var(--rh-font-weight-code-regular,400);line-height:24px}.search-item-text-elipsis[data-v-8df2653a]{max-width:60%}}@media (max-width:767px){.input-close-btn[data-v-8df2653a]{display:none}.search-container[data-v-8df2653a]{border:1px solid #f0f0f0}}</style> <link rel="stylesheet" href="/_nuxt/entry.BHrZpDa4.css" integrity="sha384-sBgj52mxWd8Bqb2I7f6O8HlUNr+30C/gzrNEJkg2gC25ABZ8sgQynxiTcIHK0q2d"> <link rel="stylesheet" href="/_nuxt/SearchAutocomplete.BO6TUTVN.css" integrity="sha384-EHSyy3jQiy9imTksXKEZAwryTLFzljHbYNZY9YS8ofx1wjlSdpY1rxeaDxHiBvpR"> <link rel="stylesheet" href="/_nuxt/Breadcrumbs._-vxH_Cy.css" integrity="sha384-lwT/7eLOe4tGsotnHydE4RpM44Q8GNBJpOybPhjiZQP5aI1RRGpnUGwerKfUk80c"> <link rel="stylesheet" href="/_nuxt/Alert.fTkXFs3h.css" integrity="sha384-yFMpT5E64LAQi3qJ10AJJ1oOH3DrI68OvLSjSivjNCQXZ25pmFxlPavPQ0TEyEpq"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/UCMGSzEV.js" integrity="sha384-/vUn544gHNJaiC7BTfRdp1MZ49JcEcDC70YhQXdj2PydTvV5C0hHJ45+StlQNVG3"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/Bs1QrbBk.js" integrity="sha384-dSkeK6jMifm43FU/d6jHqNKSTwiuVaQzFRqyLl3R+tyjM5jiROjyiAYIz25uRjOK"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/DlfrbtLw.js" integrity="sha384-kG2qtCUCpTo3jtffaYMCzmLwqnnlrNu+QM8AEN2xkwoj3afk2a2dCXfRQK6NgDE8"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/BxBriHwM.js" integrity="sha384-bejD6BN5N1iVRo5Ymn+LdVN0jvrnJTzgqgFD9xQ5+Yi46U6ff+s5W2AISzRWvJaM"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/CU7gxZiA.js" integrity="sha384-i7mDApwaYNC+KN6QkCq22cv1wYMqFw/bzWtDCCCbTdRrnDiElmlxi7vdxhhfPuBy"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/BN9LS_l6.js" integrity="sha384-9viByBtVL8zkKa3glakI1XfRZdeuTO6pUJ4mX5HJgDW+GyJj3+sbNpSlxQqWKBIW"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/DRnm3NBl.js" integrity="sha384-5Pc0n18DJdugX5IGy8J04NTyM9MQsSrlng6jKfjQ4D8ZHfx2pTj5gciRumoWLATr"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/Dz82E7ZM.js" integrity="sha384-fAnDW8CevqqtdQ+0b2OwhZgPlt8r8Kl62YpcFZUweGc8zIvAE/+DGBDBGPkP0VJX"> <link rel="modulepreload" as="script" crossorigin href="/_nuxt/BFHOqQ6D.js" integrity="sha384-JIcCUkNap9uH1sLT400FxpY73lVKg/kCh+AdQIKpFwA/NK3/+ox/X4CZZVRn0+7k"> <link rel="prefetch" as="script" crossorigin href="/_nuxt/BB-2kp7Z.js"> <link rel="prefetch" as="script" crossorigin href="/_nuxt/BrMOaKwI.js"> <link rel="prefetch" as="script" crossorigin href="/_nuxt/Ce-goSiu.js"> <link rel="prefetch" as="image" type="image/svg+xml" href="/_nuxt/Footer_Cloud.DpSdW8MR.svg"> <script type="module"> import "@rhds/elements/rh-cta/rh-cta.js"; </script> <script type="module"> import '@rhds/elements/rh-alert/rh-alert.js'; </script> <script type="module"> import "/scripts/v1/@cpelements/pfe-navigation/dist/pfe-navigation.min.js"; import "/scripts/v1/@rhds/elements/elements/rh-button/rh-button.js"; </script> <script type="module">import "@rhds/elements/rh-footer/rh-footer.js"</script> <link rel="canonical" href="https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/develop"> <script type="module"> import "@rhds/elements/rh-alert/rh-alert.js"; import "@rhds/elements/rh-code-block/rh-code-block.js"; import '@rhds/elements/rh-cta/rh-cta.js'; import '@patternfly/elements/pf-switch/pf-switch.js'; import '@cpelements/rh-table/dist/rh-table.js'; import '@patternfly/pfe-clipboard/dist/pfe-clipboard.min.js'; import '@patternfly/elements/pf-button/pf-button.js'; import '@patternfly/elements/pf-modal/pf-modal.js'; import '@patternfly/elements/pf-icon/pf-icon.js'; import '@patternfly/elements/pf-popover/pf-popover.js'; import '@patternfly/elements/pf-tooltip/pf-tooltip.js'; import '@rhds/elements/rh-badge/rh-badge.js'; </script> <meta name="description" content="Chapter 5. Develop | Red Hat Documentation"> <meta name="app-version" content="v0.0.1"> <script type="module"> import "/scripts/v1/@rhds/elements/elements/rh-button/rh-button.js"; </script> <script type="module"> import '@rhds/elements/rh-alert/rh-alert.js'; </script> <script type="module"> import "/scripts/v1/@rhds/elements/elements/rh-button/rh-button.js"; import "@patternfly/elements/pf-badge/pf-badge.js"; </script> <script type="module" src="/_nuxt/UCMGSzEV.js" crossorigin integrity="sha384-/vUn544gHNJaiC7BTfRdp1MZ49JcEcDC70YhQXdj2PydTvV5C0hHJ45+StlQNVG3"></script></head><body><div id="__nuxt"><!--[--><!--[--><!----><header data-v-c8f2da08><a href="#pfe-navigation" id="global-skip-to-nav" class="skip-link visually-hidden" data-v-c8f2da08>Skip to navigation</a><a href="#main-content" class="skip-link visually-hidden" data-v-c8f2da08>Skip to content</a><nav id="upper-navigation" class="upper-navigation" aria-labelledby="upper-navigation-label" data-analytics-region="upper-navigation" data-v-c8f2da08><p id="upper-navigation-label" class="upper-nav-hidden" data-v-c8f2da08>Featured links</p><div class="upper-nav-container" data-v-c8f2da08><ul class="upper-nav-menu" data-v-c8f2da08><li data-v-c8f2da08><a href="https://access.redhat.com/" class="upper-nav-links" data-analytics-text="Support" data-analytics-category="Featured Links" data-v-c8f2da08>Support</a></li><li data-v-c8f2da08><a href="https://console.redhat.com/" class="upper-nav-links" data-analytics-text="Console" data-analytics-category="Featured Links" data-v-c8f2da08>Console</a></li><li data-v-c8f2da08><a href="https://developers.redhat.com/" class="upper-nav-links" data-analytics-text="Developers" data-analytics-category="Featured Links" data-v-c8f2da08>Developers</a></li><li data-v-c8f2da08><a href="https://www.redhat.com/en/products/trials" class="upper-nav-links" data-analytics-text="Start a trial" data-analytics-category="Featured Links" data-v-c8f2da08>Start a trial</a></li><li data-v-c8f2da08><button id="all-red-hat" class="upper-nav-links" data-analytics-text="All Red Hat" data-analytics-category="Featured Links" aria-expanded="false" data-analytics-linktype="tab" data-v-c8f2da08>All Red Hat<svg class="upper-nav-arrow" xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" aria-hidden="true" data-v-c8f2da08=""><path d="M810.642 511.557c0 8.905-3.447 16.776-10.284 23.613L322.31 1013.216c-6.835 6.837-14.706 10.284-23.61 10.284s-16.776-3.447-23.613-10.284l-51.303-51.303c-6.837-6.837-10.284-14.707-10.284-23.612s3.447-16.775 10.284-23.61L626.972 511.5 223.784 108.31c-6.837-6.835-10.284-14.706-10.284-23.61s3.447-16.776 10.284-23.613l51.303-51.303C281.924 2.947 289.794-.5 298.7-.5s16.775 3.447 23.61 10.284L800.36 487.83c6.837 6.837 10.284 14.708 10.284 23.613v.114" data-v-c8f2da08=""/></svg></button><div class="upper-nav-dropdown-container" data-v-c8f2da08><ul data-v-c8f2da08><li data-v-c8f2da08><span data-v-c8f2da08>For customers</span><ul data-v-c8f2da08><li data-v-c8f2da08><a href="https://access.redhat.com/support" data-pzn-audience="customers" data-analytics-category="All Red Hat|For customers" data-analytics-text="Customer support" data-v-c8f2da08>Customer support</a></li><li data-v-c8f2da08><a href="/products" data-pzn-audience="customers" data-analytics-category="All Red Hat|For customers" data-analytics-text="Documentation" data-v-c8f2da08>Documentation</a></li><li data-v-c8f2da08><a href="https://access.redhat.com/support/cases" data-pzn-audience="customers" data-analytics-category="All Red Hat|For customers" data-analytics-text="Support cases" data-v-c8f2da08>Support Cases</a></li><li data-v-c8f2da08><a href="https://access.redhat.com/management" data-pzn-audience="customers" data-analytics-category="All Red Hat|For customers" data-analytics-text="Subscription management" data-v-c8f2da08>Subscription management</a></li><li data-v-c8f2da08><a href="https://catalog.redhat.com/" data-analytics-category="All Red Hat|For customers" data-analytics-text="Red Hat Ecosystem Catalog" data-v-c8f2da08>Red Hat Ecosystem Catalog</a></li><li data-v-c8f2da08><a href="https://catalog.redhat.com/partners" data-analytics-category="All Red Hat|For customers" data-analytics-text="Find a partner" data-v-c8f2da08>Find a partner</a></li></ul></li><li data-v-c8f2da08><span data-v-c8f2da08>For partners</span><ul data-v-c8f2da08><li data-v-c8f2da08><a href="https://connect.redhat.com/login" data-pzn-audience="partners" data-analytics-category="All Red Hat|For partners" data-analytics-text="Partner login" data-v-c8f2da08>Partner login</a></li><li data-v-c8f2da08><a href="https://connect.redhat.com/en/support" data-pzn-audience="partners" data-analytics-category="All Red Hat|For partners" data-analytics-text="Partner support" data-v-c8f2da08>Partner support</a></li><li data-v-c8f2da08><a href="https://connect.redhat.com/" data-pzn-audience="partners" data-analytics-category="All Red Hat|For partners" data-analytics-text="Become a partner " data-v-c8f2da08>Become a partner</a></li></ul></li><li data-v-c8f2da08><span data-v-c8f2da08>Try, buy, & sell</span><ul data-v-c8f2da08><li data-v-c8f2da08><a href="https://marketplace.redhat.com/en-us" data-analytics-category="All Red Hat|Try, buy, & sell" data-analytics-text="Red Hat Marketplace" data-v-c8f2da08>Red Hat Marketplace</a></li><li data-v-c8f2da08><a href="https://www.redhat.com/en/store" data-analytics-category="All Red Hat|Try, buy, & sell" data-analytics-text="Red Hat Store" data-v-c8f2da08>Red Hat Store</a></li><li data-v-c8f2da08><a href="https://www.redhat.com/en/contact" data-analytics-category="All Red Hat|Try, buy, & sell" data-analytics-text="Contact sales" data-v-c8f2da08>Contact Sales</a></li><li data-v-c8f2da08><a href="https://www.redhat.com/en/products/trials" data-analytics-category="All Red Hat|Try, buy, & sell" data-analytics-text="Start a trial" data-v-c8f2da08>Start a trial</a></li></ul></li><li data-v-c8f2da08><span data-v-c8f2da08>Learning resources</span><ul data-v-c8f2da08><li data-v-c8f2da08><a href="https://www.redhat.com/en/services/training-and-certification" data-analytics-category="All Red Hat|Learning resources" data-analytics-text="Training and certification " data-v-c8f2da08>Training and certification</a></li><li data-v-c8f2da08><a href="https://developers.redhat.com/" data-pzn-audience="developers|community" data-analytics-category="All Red Hat|Learning resources" data-analytics-text="For developers" data-v-c8f2da08>For developers</a></li><li data-v-c8f2da08><a href="https://cloud.redhat.com/learn" data-analytics-category="All Red Hat|Learning resources" data-analytics-text="Hybrid cloud learning hub" data-v-c8f2da08>Hybrid cloud learning hub</a></li><li data-v-c8f2da08><a href="https://www.redhat.com/en/interactive-labs" data-analytics-category="All Red Hat|Learning resources" data-analytics-text="Interactive labs" data-v-c8f2da08>Interactive labs</a></li><li data-v-c8f2da08><a href="https://learn.redhat.com/" data-analytics-category="All Red Hat|Learning resources" data-analytics-text="Learning community" data-v-c8f2da08>Learning community</a></li><li data-v-c8f2da08><a href="https://www.redhat.com/en/tv" data-analytics-category="All Red Hat|Learning resources" data-analytics-text="Red Hat TV" data-v-c8f2da08>Red Hat TV</a></li></ul></li><li data-v-c8f2da08><span data-v-c8f2da08>Open source communities</span><ul data-v-c8f2da08><li data-v-c8f2da08><a href="https://www.ansible.com/community" data-analytics-category="All Red Hat|Open source communities" data-analytics-text="Ansible" data-v-c8f2da08>Ansible</a></li><li data-v-c8f2da08><a href="https://www.redhat.com/sysadmin/" data-analytics-category="All Red Hat|Open source communities" data-analytics-text="For system administrators" data-v-c8f2da08>For system administrators</a></li><li data-v-c8f2da08><a href="https://www.redhat.com/architect/" data-pzn-audience="community" data-analytics-category="All Red Hat|Open source communities" data-analytics-text="For architects" data-v-c8f2da08>For architects</a></li></ul></li></ul></div></li></ul></div></nav><pfe-navigation full-width id="pfe-navigation" pf-sticky="true" lang="en" data-v-c8f2da08><nav class="pfe-navigation" aria-label="Main Navigation" data-v-c8f2da08><div class="pfe-navigation__logo-wrapper" id="pfe-navigation__logo-wrapper" data-v-c8f2da08><a href="/en" class="pfe-navigation__logo-link" data-v-c8f2da08><img class="pfe-navigation__logo-image pfe-navigation__logo-image--screen pfe-navigation__logo-image--small" src="/Logo-Red_Hat-Documentation-A-Reverse-RGB.svg" width="240" height="40" alt="Red Hat Documentation" data-v-c8f2da08></a></div></nav><span data-v-c8f2da08></span><div slot="secondary-links" data-v-c8f2da08><div class="hidden-at-desktop hidden-at-tablet search-mobile" data-v-c8f2da08><div id="search-form" class="search-container" opensearchbox="true" data-v-c8f2da08 data-v-8df2653a><form role="search" class="form-box" autocomplete="off" data-v-8df2653a><div class="search-box" data-v-8df2653a><pf-icon icon="search" size="md" class="search-icon-form" data-v-8df2653a></pf-icon><input type="text" id="input-search" class="input-search-box" placeholder="Search documentation" value aria-autocomplete="list" data-v-8df2653a><!----><!----><!----><rh-button disabled variant="tertiary" class="form-submit-btn" data-v-8df2653a><img src="data:image/svg+xml,%3csvg%20width='14'%20height='14'%20viewBox='0%200%2014%2014'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M7%200L5.6%201.4L10.3%206H0V8H10.3L5.6%2012.6L7%2014L14%207L7%200Z'%20fill='%23707070'/%3e%3c/svg%3e" alt="Submit button" data-v-8df2653a></rh-button></div></form><!----></div></div><div class="hidden-at-desktop hidden-at-tablet buttons" data-v-c8f2da08><a href="https://access.redhat.com/" data-analytics-category="More Red Hat" data-analytics-text="Support" data-v-c8f2da08>Support</a><a href="https://console.redhat.com/" data-analytics-category="More Red Hat" data-analytics-text="Console" data-v-c8f2da08>Console</a><a href="https://developers.redhat.com/" data-analytics-category="More Red Hat" data-analytics-text="Developers" data-v-c8f2da08>Developers</a><a href="https://www.redhat.com/en/products/trials" data-analytics-category="More Red Hat" data-analytics-text="Start a trial" data-v-c8f2da08>Start a trial</a><a href="https://www.redhat.com/en/contact" data-analytics-category="More Red Hat" data-analytics-text="Contact" data-v-c8f2da08>Contact</a></div><div class="hidden-at-desktop hidden-at-tablet mobile-lang-select" data-v-c8f2da08><label for="lang_selection" data-v-c8f2da08>Select your language</label><select id="lang_selection" data-v-c8f2da08><!--[--><option value="en" xml:lang="en" hreflang="en" data-v-c8f2da08>English</option><option value="fr" xml:lang="fr" hreflang="fr" data-v-c8f2da08>Français</option><option value="ko" xml:lang="ko" hreflang="ko" data-v-c8f2da08>한국어</option><option value="ja" xml:lang="ja" hreflang="ja" data-v-c8f2da08>日本語</option><option value="zh-cn" xml:lang="zh-cn" hreflang="zh-cn" data-v-c8f2da08>中文 (中国)</option><option value="de" xml:lang="de" hreflang="de" data-v-c8f2da08>Deutsch</option><option value="it" xml:lang="it" hreflang="it" data-v-c8f2da08>Italiano</option><option value="pt-br" xml:lang="pt-br" hreflang="pt-br" data-v-c8f2da08>Português</option><option value="es" xml:lang="es" hreflang="es" data-v-c8f2da08>Español</option><!--]--></select></div></div></pfe-navigation></header><main id="main-content"><!--[--><!--[--><!--[--><!----><!----><!--]--><div class="breadcrumbs" id="breadcrumbs" data-v-8589d091 data-v-5066b940><nav aria-label="Breadcrumb" class="breadcrumb" data-v-5066b940><ol data-v-5066b940><li data-v-5066b940><a href="/" data-v-5066b940>Home</a></li><li data-v-5066b940><a href="/en/products" data-v-5066b940>Products</a></li><!--[--><li data-v-5066b940><a href="/en/documentation/openshift_container_platform/" data-v-5066b940>OpenShift Container Platform</a></li><li data-v-5066b940><a href="/en/documentation/openshift_container_platform/4.8/" data-v-5066b940>4.8</a></li><li data-v-5066b940><a href="/en/documentation/openshift_container_platform/4.8/html/serverless/" data-v-5066b940>Serverless</a></li><li data-v-5066b940><!--[-->Chapter 5. Develop<!--]--></li><!--]--></ol></nav><span data-v-5066b940></span></div><!----><nav id="mobile-nav" class="mobile-nav" aria-label="mobile menu" data-v-8589d091><div class="mobile-nav-wrapper" data-v-8589d091><div id="first-button" data-v-8589d091><button id="toc-btn" aria-expanded="false" aria-controls="mobile-nav-content-wrapper" class="mobile-nav-btn" data-v-8589d091><span class="sr-only" data-v-8589d091>Open </span>Table of contents</button></div><div id="second-button" data-v-8589d091><button id="settings-btn" aria-expanded="false" aria-controls="mobile-nav-content-wrapper" class="mobile-nav-btn" data-v-8589d091><pf-icon icon="cog" size="md" data-v-8589d091></pf-icon><span class="sr-only" data-v-8589d091>Open page settings</span></button></div></div><div id="mobile-nav-content-wrapper" class="hidden" role="navigation" tabindex="0" data-v-8589d091><div id="toc-mobile" class="hidden" aria-labelledby="toc-btn" data-v-8589d091><div class="product-container" id="product-container-mobile" data-v-8589d091><h1 class="product-title" data-v-8589d091>OpenShift Container Platform</h1><div class="product-version" data-v-8589d091><label class="version-label" for="mobile-version-selector" data-v-8589d091>Version</label><select id="mobile-version-selector" class="version-select-dropdown" data-v-8589d091><!--[--><option value="4.17" data-v-8589d091>4.17</option><option value="4.16" data-v-8589d091>4.16</option><option value="4.15" data-v-8589d091>4.15</option><option value="4.14" data-v-8589d091>4.14</option><option value="4.13" data-v-8589d091>4.13</option><option value="4.12" data-v-8589d091>4.12</option><option value="4.11" data-v-8589d091>4.11</option><option value="4.10" data-v-8589d091>4.10</option><option value="4.9" data-v-8589d091>4.9</option><option value="4.8" selected data-v-8589d091>4.8</option><option value="4.7" data-v-8589d091>4.7</option><option value="4.6" data-v-8589d091>4.6</option><option value="4.5" data-v-8589d091>4.5</option><option value="4.4" data-v-8589d091>4.4</option><option value="4.3" data-v-8589d091>4.3</option><option value="4.2" data-v-8589d091>4.2</option><option value="4.1" data-v-8589d091>4.1</option><option value="3.11" data-v-8589d091>3.11</option><option value="3.10" data-v-8589d091>3.10</option><option value="3.9" data-v-8589d091>3.9</option><option value="3.7" data-v-8589d091>3.7</option><option value="3.6" data-v-8589d091>3.6</option><option value="3.5" data-v-8589d091>3.5</option><option value="3.4" data-v-8589d091>3.4</option><option value="3.3" data-v-8589d091>3.3</option><option value="3.2" data-v-8589d091>3.2</option><option value="3.1" data-v-8589d091>3.1</option><option value="3.0" data-v-8589d091>3.0</option><option value="2" data-v-8589d091>2</option><!--]--></select><pf-popover position="bottom" data-v-8589d091><p slot="heading" class="popover-header-text" data-v-8589d091>This documentation may not be available for all versions.</p><div slot="body" data-v-8589d091><a href="/en/documentation/openshift_container_platform" class="popover-body-link" data-v-8589d091>View the product page for all versions</a></div><button class="popover-trigger-btn" aria-label="toggle version information popover" data-v-8589d091><pf-icon set="patternfly" icon="info-alt" size="sm" data-v-8589d091></pf-icon></button></pf-popover></div></div><div class="toc-filter-mobile" data-v-8589d091><span id="text" part="text" data-v-8589d091><input id="text-input" aria-label="Search input" part="text-input" placeholder="Filter table of contents" type="text" class value data-v-8589d091><!----></span></div><div id="toc-wrapper-mobile" class="span-xs-12 span-sm-4 span-md-3" lang="en" data-v-8589d091><nav id="mobile-toc-menu" class="table-of-contents" aria-label="table of content - mobile" data-v-8589d091><!----></nav></div><!----></div><div id="page-content-options-mobile" class="hidden" aria-labelledby="settings-btn" data-v-8589d091><div class="page-layout-options" data-v-8589d091><label for="page-format-mobile" data-v-8589d091>Format</label><select id="page-format-mobile" class="page-format-dropdown" data-v-8589d091><option selected class="page-type" value="html" data-v-8589d091>Multi-page</option><option class="page-type" value="html-single" data-v-8589d091>Single-page</option><option class="page-type" value="pdf" data-v-8589d091>View full doc as PDF</option></select></div></div></div><div class="mobile-jump-links mobile-nav-wrapper" data-v-8589d091><div id="first-button" data-v-8589d091><button class="mobile-nav-btn" id="jump-links-btn" aria-expanded="false" aria-controls="mobile-jump-links-content-wrapper" data-v-8589d091>Jump to section</button></div><!----></div><!----></nav><div class="grid grid-col-12 content-wrapper" data-v-8589d091><aside id="left-content" class="span-xs-12 span-sm-4 span-md-3" lang="en" aria-label="left navigation" xml:lang="en" data-v-8589d091><div class="toc-container" id="toc-container" visible="true" data-v-8589d091><div class="toc-focus-container" id="toc-focus-container" data-v-8589d091><button class="toc-focus-btn" aria-label="toggle left menu" aria-controls="toc-container" aria-expanded="true" data-v-8589d091><pf-icon size="md" icon="angle-left" class="toc-focus-btn-icon" data-v-8589d091></pf-icon></button></div><div class="product-container" id="product-container-desktop" data-v-8589d091><h1 class="product-title" data-v-8589d091>OpenShift Container Platform</h1><div class="product-version" data-v-8589d091><label class="version-label" for="version-selector" data-v-8589d091>Version</label><select id="version-selector" class="version-select-dropdown" data-v-8589d091><!--[--><option value="4.17" data-v-8589d091>4.17</option><option value="4.16" data-v-8589d091>4.16</option><option value="4.15" data-v-8589d091>4.15</option><option value="4.14" data-v-8589d091>4.14</option><option value="4.13" data-v-8589d091>4.13</option><option value="4.12" data-v-8589d091>4.12</option><option value="4.11" data-v-8589d091>4.11</option><option value="4.10" data-v-8589d091>4.10</option><option value="4.9" data-v-8589d091>4.9</option><option value="4.8" selected data-v-8589d091>4.8</option><option value="4.7" data-v-8589d091>4.7</option><option value="4.6" data-v-8589d091>4.6</option><option value="4.5" data-v-8589d091>4.5</option><option value="4.4" data-v-8589d091>4.4</option><option value="4.3" data-v-8589d091>4.3</option><option value="4.2" data-v-8589d091>4.2</option><option value="4.1" data-v-8589d091>4.1</option><option value="3.11" data-v-8589d091>3.11</option><option value="3.10" data-v-8589d091>3.10</option><option value="3.9" data-v-8589d091>3.9</option><option value="3.7" data-v-8589d091>3.7</option><option value="3.6" data-v-8589d091>3.6</option><option value="3.5" data-v-8589d091>3.5</option><option value="3.4" data-v-8589d091>3.4</option><option value="3.3" data-v-8589d091>3.3</option><option value="3.2" data-v-8589d091>3.2</option><option value="3.1" data-v-8589d091>3.1</option><option value="3.0" data-v-8589d091>3.0</option><option value="2" data-v-8589d091>2</option><!--]--></select><pf-popover position="right" data-v-8589d091><p slot="heading" class="popover-header-text" data-v-8589d091>This documentation may not be available for all versions.</p><div slot="body" data-v-8589d091><a href="/en/documentation/openshift_container_platform" class="popover-body-link" data-v-8589d091>View the product page for all versions</a></div><button class="popover-trigger-btn" aria-label="toggle version information popover" data-v-8589d091><pf-icon set="patternfly" icon="info-alt" size="sm" data-v-8589d091></pf-icon></button></pf-popover></div></div><div class="toc-filter" id="toc-filter" data-v-8589d091><span id="text" part="text" data-v-8589d091><span id="search-icon" part="search-icon" data-v-8589d091><pf-icon icon="filter" size="md" data-v-8589d091></pf-icon></span><input id="text-input" aria-label="Search input" part="text-input" placeholder="Filter table of contents" type="text" class value data-v-8589d091><!----></span></div><div id="toc-wrapper" class="toc-wrapper" data-v-8589d091><nav id="toc" class="max-height-75 table-of-contents" aria-label="Table of contents" data-v-8589d091><ol id="toc-list" data-v-8589d091><!--[--><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Getting Started</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>About</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/about/index" id="chapter-landing--about-index" data-v-b883c74f>About</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/about/welcome-index" id="sub-link-to-about-welcome-index" data-v-b883c74f>OpenShift Container Platform 4.8 Documentation</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/about/learn_more_about_openshift" id="sub-link-to-about-learn_more_about_openshift" data-v-b883c74f>Learn more about OpenShift Container Platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/about/oke-about" id="sub-link-to-about-oke-about" data-v-b883c74f>About OpenShift Kubernetes Engine</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/about/kubernetes-overview" id="sub-link-to-about-kubernetes-overview" data-v-b883c74f>Kubernetes overview</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Release notes</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/release_notes/index" id="chapter-landing--release_notes-index" data-v-b883c74f>Release notes</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/release_notes/ocp-4-8-release-notes" id="sub-link-to-release_notes-ocp-4-8-release-notes" data-v-b883c74f>OpenShift Container Platform 4.8 release notes</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Architecture</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/architecture/index" id="chapter-landing--architecture-index" data-v-b883c74f>Architecture</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/architecture/architecture-overview" id="sub-link-to-architecture-architecture-overview" data-v-b883c74f>Architecture overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/architecture/architecture" id="sub-link-to-architecture-architecture" data-v-b883c74f>OpenShift Container Platform architecture</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/architecture/architecture-installation" id="sub-link-to-architecture-architecture-installation" data-v-b883c74f>Installation and update</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/architecture/control-plane" id="sub-link-to-architecture-control-plane" data-v-b883c74f>Control plane architecture</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/architecture/understanding-development" id="sub-link-to-architecture-understanding-development" data-v-b883c74f>Understanding OpenShift Container Platform development</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/architecture/architecture-rhcos" id="sub-link-to-architecture-architecture-rhcos" data-v-b883c74f>Red Hat Enterprise Linux CoreOS (RHCOS)</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/architecture/admission-plug-ins" id="sub-link-to-architecture-admission-plug-ins" data-v-b883c74f>Admission plugins</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Security and compliance</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/index" id="chapter-landing--security_and_compliance-index" data-v-b883c74f>Security and compliance</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/security-compliance-overview" id="sub-link-to-security_and_compliance-security-compliance-overview" data-v-b883c74f>OpenShift Container Platform security and compliance</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/container-security-1" id="sub-link-to-security_and_compliance-container-security-1" data-v-b883c74f>Container security</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/configuring-certificates" id="sub-link-to-security_and_compliance-configuring-certificates" data-v-b883c74f>Configuring certificates</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/certificate-types-and-descriptions" id="sub-link-to-security_and_compliance-certificate-types-and-descriptions" data-v-b883c74f>Certificate types and descriptions</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/compliance-operator" id="sub-link-to-security_and_compliance-compliance-operator" data-v-b883c74f>Compliance Operator</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/file-integrity-operator" id="sub-link-to-security_and_compliance-file-integrity-operator" data-v-b883c74f>File Integrity Operator</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/audit-log-view" id="sub-link-to-security_and_compliance-audit-log-view" data-v-b883c74f>Viewing audit logs</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/audit-log-policy-config" id="sub-link-to-security_and_compliance-audit-log-policy-config" data-v-b883c74f>Configuring the audit log policy</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/tls-security-profiles" id="sub-link-to-security_and_compliance-tls-security-profiles" data-v-b883c74f>Configuring TLS security profiles</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/seccomp-profiles" id="sub-link-to-security_and_compliance-seccomp-profiles" data-v-b883c74f>Configuring seccomp profiles</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/allowing-javascript-based-access-api-server" id="sub-link-to-security_and_compliance-allowing-javascript-based-access-api-server" data-v-b883c74f>Allowing JavaScript-based access to the API server from additional hosts</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/encrypting-etcd" id="sub-link-to-security_and_compliance-encrypting-etcd" data-v-b883c74f>Encrypting etcd data</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/security_and_compliance/pod-vulnerability-scan" id="sub-link-to-security_and_compliance-pod-vulnerability-scan" data-v-b883c74f>Scanning pods for vulnerabilities</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Install</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Installing</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/installing/index" id="chapter-landing--installing-index" data-v-b883c74f>Installing</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/ocp-installation-overview" id="sub-link-to-installing-ocp-installation-overview" data-v-b883c74f>OpenShift Container Platform installation overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-preparing" id="sub-link-to-installing-installing-preparing" data-v-b883c74f>Selecting a cluster installation method and preparing it for users</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-mirroring-installation-images" id="sub-link-to-installing-installing-mirroring-installation-images" data-v-b883c74f>Mirroring images for a disconnected installation</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-aws" id="sub-link-to-installing-installing-on-aws" data-v-b883c74f>Installing on AWS</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-azure" id="sub-link-to-installing-installing-on-azure" data-v-b883c74f>Installing on Azure</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-gcp" id="sub-link-to-installing-installing-on-gcp" data-v-b883c74f>Installing on GCP</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-bare-metal" id="sub-link-to-installing-installing-on-bare-metal" data-v-b883c74f>Installing on bare metal</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/deploying-installer-provisioned-clusters-on-bare-metal" id="sub-link-to-installing-deploying-installer-provisioned-clusters-on-bare-metal" data-v-b883c74f>Deploying installer-provisioned clusters on bare metal</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-with-z-vm-on-ibm-z-and-linuxone" id="sub-link-to-installing-installing-with-z-vm-on-ibm-z-and-linuxone" data-v-b883c74f>Installing with z/VM on IBM Z and LinuxONE</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-with-rhel-kvm-on-ibm-z-and-linuxone" id="sub-link-to-installing-installing-with-rhel-kvm-on-ibm-z-and-linuxone" data-v-b883c74f>Installing with RHEL KVM on IBM Z and LinuxONE</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-ibm-power-systems" id="sub-link-to-installing-installing-on-ibm-power-systems" data-v-b883c74f>Installing on IBM Power Systems</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-openstack" id="sub-link-to-installing-installing-on-openstack" data-v-b883c74f>Installing on OpenStack</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-rhv" id="sub-link-to-installing-installing-on-rhv" data-v-b883c74f>Installing on RHV</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-vsphere" id="sub-link-to-installing-installing-on-vsphere" data-v-b883c74f>Installing on vSphere</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-vmc" id="sub-link-to-installing-installing-on-vmc" data-v-b883c74f>Installing on VMC</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-on-any-platform" id="sub-link-to-installing-installing-on-any-platform" data-v-b883c74f>Installing on any platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installation-configuration" id="sub-link-to-installing-installation-configuration" data-v-b883c74f>Installation configuration</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/validating-an-installation" id="sub-link-to-installing-validating-an-installation" data-v-b883c74f>Validating an installation</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-troubleshooting" id="sub-link-to-installing-installing-troubleshooting" data-v-b883c74f>Troubleshooting installation issues</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/installing/installing-fips" id="sub-link-to-installing-installing-fips" data-v-b883c74f>Support for FIPS cryptography</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Upgrade</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Updating clusters</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/index" id="chapter-landing--updating_clusters-index" data-v-b883c74f>Updating clusters</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/understanding-openshift-updates" id="sub-link-to-updating_clusters-understanding-openshift-updates" data-v-b883c74f>Understanding OpenShift Container Platform updates</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-clusters-overview" id="sub-link-to-updating_clusters-updating-clusters-overview" data-v-b883c74f>Updating clusters overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/understanding-upgrade-channels-releases" id="sub-link-to-updating_clusters-understanding-upgrade-channels-releases" data-v-b883c74f>Understanding upgrade channels and releases</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/preparing-eus-eus-upgrade" id="sub-link-to-updating_clusters-preparing-eus-eus-upgrade" data-v-b883c74f>Preparing to perform an EUS-to-EUS update</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-cluster-within-minor" id="sub-link-to-updating_clusters-updating-cluster-within-minor" data-v-b883c74f>Updating a cluster using the web console</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-cluster-cli" id="sub-link-to-updating_clusters-updating-cluster-cli" data-v-b883c74f>Updating a cluster using the CLI</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/update-using-custom-machine-config-pools" id="sub-link-to-updating_clusters-update-using-custom-machine-config-pools" data-v-b883c74f>Performing a canary rollout update</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-cluster-rhel-compute" id="sub-link-to-updating_clusters-updating-cluster-rhel-compute" data-v-b883c74f>Updating a cluster that includes RHEL compute machines</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-a-cluster-in-a-disconnected-environment" id="sub-link-to-updating_clusters-updating-a-cluster-in-a-disconnected-environment" data-v-b883c74f>Updating a cluster in a disconnected environment</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Configure</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Storage</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/storage/index" id="chapter-landing--storage-index" data-v-b883c74f>Storage</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/storage/storage-overview" id="sub-link-to-storage-storage-overview" data-v-b883c74f>OpenShift Container Platform storage overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/storage/understanding-ephemeral-storage" id="sub-link-to-storage-understanding-ephemeral-storage" data-v-b883c74f>Understanding ephemeral storage</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/storage/understanding-persistent-storage" id="sub-link-to-storage-understanding-persistent-storage" data-v-b883c74f>Understanding persistent storage</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/storage/configuring-persistent-storage" id="sub-link-to-storage-configuring-persistent-storage" data-v-b883c74f>Configuring persistent storage</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/storage/using-container-storage-interface-csi" id="sub-link-to-storage-using-container-storage-interface-csi" data-v-b883c74f>Using Container Storage Interface (CSI)</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/storage/expanding-persistent-volumes" id="sub-link-to-storage-expanding-persistent-volumes" data-v-b883c74f>Expanding persistent volumes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/storage/dynamic-provisioning" id="sub-link-to-storage-dynamic-provisioning" data-v-b883c74f>Dynamic provisioning</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Authentication and authorization</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/index" id="chapter-landing--authentication_and_authorization-index" data-v-b883c74f>Authentication and authorization</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/overview-of-authentication-authorization" id="sub-link-to-authentication_and_authorization-overview-of-authentication-authorization" data-v-b883c74f>Overview of authentication and authorization</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/understanding-authentication" id="sub-link-to-authentication_and_authorization-understanding-authentication" data-v-b883c74f>Understanding authentication</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/configuring-internal-oauth" id="sub-link-to-authentication_and_authorization-configuring-internal-oauth" data-v-b883c74f>Configuring the internal OAuth server</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/configuring-oauth-clients" id="sub-link-to-authentication_and_authorization-configuring-oauth-clients" data-v-b883c74f>Configuring OAuth clients</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/managing-oauth-access-tokens" id="sub-link-to-authentication_and_authorization-managing-oauth-access-tokens" data-v-b883c74f>Managing user-owned OAuth access tokens</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/understanding-identity-provider" id="sub-link-to-authentication_and_authorization-understanding-identity-provider" data-v-b883c74f>Understanding identity provider configuration</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/configuring-identity-providers" id="sub-link-to-authentication_and_authorization-configuring-identity-providers" data-v-b883c74f>Configuring identity providers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/using-rbac" id="sub-link-to-authentication_and_authorization-using-rbac" data-v-b883c74f>Using RBAC to define and apply permissions</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/removing-kubeadmin" id="sub-link-to-authentication_and_authorization-removing-kubeadmin" data-v-b883c74f>Removing the kubeadmin user</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/understanding-and-creating-service-accounts" id="sub-link-to-authentication_and_authorization-understanding-and-creating-service-accounts" data-v-b883c74f>Understanding and creating service accounts</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/using-service-accounts" id="sub-link-to-authentication_and_authorization-using-service-accounts" data-v-b883c74f>Using service accounts in applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/using-service-accounts-as-oauth-client" id="sub-link-to-authentication_and_authorization-using-service-accounts-as-oauth-client" data-v-b883c74f>Using a service account as an OAuth client</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/tokens-scoping" id="sub-link-to-authentication_and_authorization-tokens-scoping" data-v-b883c74f>Scoping tokens</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/bound-service-account-tokens" id="sub-link-to-authentication_and_authorization-bound-service-account-tokens" data-v-b883c74f>Using bound service account tokens</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/managing-pod-security-policies" id="sub-link-to-authentication_and_authorization-managing-pod-security-policies" data-v-b883c74f>Managing security context constraints</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/impersonating-system-admin" id="sub-link-to-authentication_and_authorization-impersonating-system-admin" data-v-b883c74f>Impersonating the system:admin user</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/ldap-syncing" id="sub-link-to-authentication_and_authorization-ldap-syncing" data-v-b883c74f>Syncing LDAP groups</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/managing-cloud-provider-credentials" id="sub-link-to-authentication_and_authorization-managing-cloud-provider-credentials" data-v-b883c74f>Managing cloud provider credentials</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Networking</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/networking/index" id="chapter-landing--networking-index" data-v-b883c74f>Networking</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/understanding-networking" id="sub-link-to-networking-understanding-networking" data-v-b883c74f>Understanding networking</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/accessing-hosts" id="sub-link-to-networking-accessing-hosts" data-v-b883c74f>Accessing hosts</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/networking-operators-overview" id="sub-link-to-networking-networking-operators-overview" data-v-b883c74f>Networking Operators overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/cluster-network-operator" id="sub-link-to-networking-cluster-network-operator" data-v-b883c74f>Cluster Network Operator in OpenShift Container Platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/dns-operator" id="sub-link-to-networking-dns-operator" data-v-b883c74f>DNS Operator in OpenShift Container Platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/configuring-ingress" id="sub-link-to-networking-configuring-ingress" data-v-b883c74f>Ingress Operator in OpenShift Container Platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/verifying-connectivity-endpoint" id="sub-link-to-networking-verifying-connectivity-endpoint" data-v-b883c74f>Verifying connectivity to an endpoint</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/configuring-node-port-service-range" id="sub-link-to-networking-configuring-node-port-service-range" data-v-b883c74f>Configuring the node port service range</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/configuring-ipfailover" id="sub-link-to-networking-configuring-ipfailover" data-v-b883c74f>Configuring IP failover</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/using-sctp" id="sub-link-to-networking-using-sctp" data-v-b883c74f>Using the Stream Control Transmission Protocol (SCTP) on a bare metal cluster</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/configuring-ptp" id="sub-link-to-networking-configuring-ptp" data-v-b883c74f>Configuring PTP hardware</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/network-policy" id="sub-link-to-networking-network-policy" data-v-b883c74f>Network policy</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/multiple-networks" id="sub-link-to-networking-multiple-networks" data-v-b883c74f>Multiple networks</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/hardware-networks" id="sub-link-to-networking-hardware-networks" data-v-b883c74f>Hardware networks</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/openshift-sdn-default-cni-network-provider" id="sub-link-to-networking-openshift-sdn-default-cni-network-provider" data-v-b883c74f>OpenShift SDN default CNI network provider</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/ovn-kubernetes-default-cni-network-provider" id="sub-link-to-networking-ovn-kubernetes-default-cni-network-provider" data-v-b883c74f>OVN-Kubernetes default CNI network provider</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/configuring-routes" id="sub-link-to-networking-configuring-routes" data-v-b883c74f>Configuring Routes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/configuring-ingress-cluster-traffic" id="sub-link-to-networking-configuring-ingress-cluster-traffic" data-v-b883c74f>Configuring ingress cluster traffic</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/kubernetes-nmstate" id="sub-link-to-networking-kubernetes-nmstate" data-v-b883c74f>Kubernetes NMState</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/enable-cluster-wide-proxy" id="sub-link-to-networking-enable-cluster-wide-proxy" data-v-b883c74f>Configuring the cluster-wide proxy</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/configuring-a-custom-pki" id="sub-link-to-networking-configuring-a-custom-pki" data-v-b883c74f>Configuring a custom PKI</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/load-balancing-openstack" id="sub-link-to-networking-load-balancing-openstack" data-v-b883c74f>Load balancing on RHOSP</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/networking/associating-secondary-interfaces-metrics-to-network-attachments" id="sub-link-to-networking-associating-secondary-interfaces-metrics-to-network-attachments" data-v-b883c74f>Associating secondary interfaces metrics to network attachments</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Registry</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/registry/index" id="chapter-landing--registry-index" data-v-b883c74f>Registry</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/registry/registry-overview" id="sub-link-to-registry-registry-overview" data-v-b883c74f>OpenShift Container Platform registry overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/registry/configuring-registry-operator" id="sub-link-to-registry-configuring-registry-operator" data-v-b883c74f>Image Registry Operator in OpenShift Container Platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/registry/setting-up-and-configuring-the-registry" id="sub-link-to-registry-setting-up-and-configuring-the-registry" data-v-b883c74f>Setting up and configuring the registry</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/registry/accessing-the-registry" id="sub-link-to-registry-accessing-the-registry" data-v-b883c74f>Accessing the registry</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/registry/securing-exposing-registry" id="sub-link-to-registry-securing-exposing-registry" data-v-b883c74f>Exposing the registry</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Post-installation configuration</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/index" id="chapter-landing--post-installation_configuration-index" data-v-b883c74f>Post-installation configuration</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-configuration-overview" id="sub-link-to-post-installation_configuration-post-install-configuration-overview" data-v-b883c74f>Post-installation configuration overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/configuring-private-cluster" id="sub-link-to-post-installation_configuration-configuring-private-cluster" data-v-b883c74f>Configuring a private cluster</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-machine-configuration-tasks" id="sub-link-to-post-installation_configuration-post-install-machine-configuration-tasks" data-v-b883c74f>Post-installation machine configuration tasks</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-cluster-tasks" id="sub-link-to-post-installation_configuration-post-install-cluster-tasks" data-v-b883c74f>Post-installation cluster tasks</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-node-tasks" id="sub-link-to-post-installation_configuration-post-install-node-tasks" data-v-b883c74f>Post-installation node tasks</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-network-configuration" id="sub-link-to-post-installation_configuration-post-install-network-configuration" data-v-b883c74f>Post-installation network configuration</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-storage-configuration" id="sub-link-to-post-installation_configuration-post-install-storage-configuration" data-v-b883c74f>Post-installation storage configuration</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-preparing-for-users" id="sub-link-to-post-installation_configuration-post-install-preparing-for-users" data-v-b883c74f>Preparing for users</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/configuring-alert-notifications" id="sub-link-to-post-installation_configuration-configuring-alert-notifications" data-v-b883c74f>Configuring alert notifications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-configure-additional-devices-ibmz" id="sub-link-to-post-installation_configuration-post-install-configure-additional-devices-ibmz" data-v-b883c74f>Configuring additional devices in an IBM Z or LinuxONE environment</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Migrate</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Migrating from version 3 to 4</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/index" id="chapter-landing--migrating_from_version_3_to_4-index" data-v-b883c74f>Migrating from version 3 to 4</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/migration-from-version-3-to-4-overview" id="sub-link-to-migrating_from_version_3_to_4-migration-from-version-3-to-4-overview" data-v-b883c74f>Migration from OpenShift Container Platform 3 to 4 overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/about-migrating-from-3-to-4" id="sub-link-to-migrating_from_version_3_to_4-about-migrating-from-3-to-4" data-v-b883c74f>About migrating from OpenShift Container Platform 3 to 4</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/planning-migration-3-4" id="sub-link-to-migrating_from_version_3_to_4-planning-migration-3-4" data-v-b883c74f>Differences between OpenShift Container Platform 3 and 4</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/planning-considerations-3-4" id="sub-link-to-migrating_from_version_3_to_4-planning-considerations-3-4" data-v-b883c74f>Network considerations</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/about-mtc-3-4" id="sub-link-to-migrating_from_version_3_to_4-about-mtc-3-4" data-v-b883c74f>About the Migration Toolkit for Containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/installing-3-4" id="sub-link-to-migrating_from_version_3_to_4-installing-3-4" data-v-b883c74f>Installing the Migration Toolkit for Containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/installing-restricted-3-4" id="sub-link-to-migrating_from_version_3_to_4-installing-restricted-3-4" data-v-b883c74f>Installing the Migration Toolkit for Containers in a restricted network environment</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/upgrading-3-4" id="sub-link-to-migrating_from_version_3_to_4-upgrading-3-4" data-v-b883c74f>Upgrading the Migration Toolkit for Containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/premigration-checklists-3-4" id="sub-link-to-migrating_from_version_3_to_4-premigration-checklists-3-4" data-v-b883c74f>Premigration checklists</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/migrating-applications-3-4" id="sub-link-to-migrating_from_version_3_to_4-migrating-applications-3-4" data-v-b883c74f>Migrating your applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/advanced-migration-options-3-4" id="sub-link-to-migrating_from_version_3_to_4-advanced-migration-options-3-4" data-v-b883c74f>Advanced migration options</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/troubleshooting-3-4" id="sub-link-to-migrating_from_version_3_to_4-troubleshooting-3-4" data-v-b883c74f>Troubleshooting</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Migration Toolkit for Containers</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/index" id="chapter-landing--migration_toolkit_for_containers-index" data-v-b883c74f>Migration Toolkit for Containers</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/about-mtc" id="sub-link-to-migration_toolkit_for_containers-about-mtc" data-v-b883c74f>About the Migration Toolkit for Containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/mtc-release-notes" id="sub-link-to-migration_toolkit_for_containers-mtc-release-notes" data-v-b883c74f>Migration Toolkit for Containers release notes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/installing-mtc" id="sub-link-to-migration_toolkit_for_containers-installing-mtc" data-v-b883c74f>Installing the Migration Toolkit for Containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/installing-mtc-restricted" id="sub-link-to-migration_toolkit_for_containers-installing-mtc-restricted" data-v-b883c74f>Installing the Migration Toolkit for Containers in a restricted network environment</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/upgrading-mtc" id="sub-link-to-migration_toolkit_for_containers-upgrading-mtc" data-v-b883c74f>Upgrading the Migration Toolkit for Containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/premigration-checklists-mtc" id="sub-link-to-migration_toolkit_for_containers-premigration-checklists-mtc" data-v-b883c74f>Premigration checklists</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/network-considerations-mtc" id="sub-link-to-migration_toolkit_for_containers-network-considerations-mtc" data-v-b883c74f>Network considerations</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/migrating-applications-with-mtc" id="sub-link-to-migration_toolkit_for_containers-migrating-applications-with-mtc" data-v-b883c74f>Migrating your applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/advanced-migration-options-mtc" id="sub-link-to-migration_toolkit_for_containers-advanced-migration-options-mtc" data-v-b883c74f>Advanced migration options</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/troubleshooting-mtc" id="sub-link-to-migration_toolkit_for_containers-troubleshooting-mtc" data-v-b883c74f>Troubleshooting</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Manage</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Backup and restore</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/backup_and_restore/index" id="chapter-landing--backup_and_restore-index" data-v-b883c74f>Backup and restore</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/backup_and_restore/backup-restore-overview" id="sub-link-to-backup_and_restore-backup-restore-overview" data-v-b883c74f>Backup and restore</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/backup_and_restore/graceful-shutdown-cluster" id="sub-link-to-backup_and_restore-graceful-shutdown-cluster" data-v-b883c74f>Shutting down the cluster gracefully</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/backup_and_restore/graceful-restart-cluster" id="sub-link-to-backup_and_restore-graceful-restart-cluster" data-v-b883c74f>Restarting the cluster gracefully</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/backup_and_restore/application-backup-and-restore" id="sub-link-to-backup_and_restore-application-backup-and-restore" data-v-b883c74f>Application backup and restore</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/backup_and_restore/control-plane-backup-and-restore" id="sub-link-to-backup_and_restore-control-plane-backup-and-restore" data-v-b883c74f>Control plane backup and restore</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Machine management</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/index" id="chapter-landing--machine_management-index" data-v-b883c74f>Machine management</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/overview-of-machine-management" id="sub-link-to-machine_management-overview-of-machine-management" data-v-b883c74f>Overview of machine management</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/creating-machine-sets" id="sub-link-to-machine_management-creating-machine-sets" data-v-b883c74f>Creating machine sets</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/manually-scaling-machineset" id="sub-link-to-machine_management-manually-scaling-machineset" data-v-b883c74f>Manually scaling a machine set</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/modifying-machineset" id="sub-link-to-machine_management-modifying-machineset" data-v-b883c74f>Modifying a machine set</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/deleting-machine" id="sub-link-to-machine_management-deleting-machine" data-v-b883c74f>Deleting a machine</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/applying-autoscaling" id="sub-link-to-machine_management-applying-autoscaling" data-v-b883c74f>Applying autoscaling to an OpenShift Container Platform cluster</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/creating-infrastructure-machinesets" id="sub-link-to-machine_management-creating-infrastructure-machinesets" data-v-b883c74f>Creating infrastructure machine sets</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/adding-rhel-compute" id="sub-link-to-machine_management-adding-rhel-compute" data-v-b883c74f>Adding RHEL compute machines to an OpenShift Container Platform cluster</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/more-rhel-compute" id="sub-link-to-machine_management-more-rhel-compute" data-v-b883c74f>Adding more RHEL compute machines to an OpenShift Container Platform cluster</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/user-provisioned-infrastructure-2" id="sub-link-to-machine_management-user-provisioned-infrastructure-2" data-v-b883c74f>User-provisioned infrastructure</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/machine_management/deploying-machine-health-checks" id="sub-link-to-machine_management-deploying-machine-health-checks" data-v-b883c74f>Deploying machine health checks</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Metering</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/metering/index" id="chapter-landing--metering-index" data-v-b883c74f>Metering</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/about-metering" id="sub-link-to-metering-about-metering" data-v-b883c74f>About Metering</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/installing-metering" id="sub-link-to-metering-installing-metering" data-v-b883c74f>Installing metering</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/upgrading-metering" id="sub-link-to-metering-upgrading-metering" data-v-b883c74f>Upgrading metering</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/configuring-metering" id="sub-link-to-metering-configuring-metering" data-v-b883c74f>Configuring metering</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/reports" id="sub-link-to-metering-reports" data-v-b883c74f>Reports</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/using-metering" id="sub-link-to-metering-using-metering" data-v-b883c74f>Using Metering</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/metering-usage-examples" id="sub-link-to-metering-metering-usage-examples" data-v-b883c74f>Examples of using metering</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/metering-troubleshooting-debugging" id="sub-link-to-metering-metering-troubleshooting-debugging" data-v-b883c74f>Troubleshooting and debugging metering</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/metering/metering-uninstall" id="sub-link-to-metering-metering-uninstall" data-v-b883c74f>Uninstalling metering</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Web console</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/web_console/index" id="chapter-landing--web_console-index" data-v-b883c74f>Web console</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/web_console/web-console-overview" id="sub-link-to-web_console-web-console-overview" data-v-b883c74f>Web Console Overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/web_console/web-console" id="sub-link-to-web_console-web-console" data-v-b883c74f>Accessing the web console</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/web_console/using-dashboard-to-get-cluster-info" id="sub-link-to-web_console-using-dashboard-to-get-cluster-info" data-v-b883c74f>Using the OpenShift Container Platform dashboard to get cluster information</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/web_console/configuring-web-console" id="sub-link-to-web_console-configuring-web-console" data-v-b883c74f>Configuring the web console in OpenShift Container Platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/web_console/customizing-web-console" id="sub-link-to-web_console-customizing-web-console" data-v-b883c74f>Customizing the web console in OpenShift Container Platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/web_console/odc-about-web-terminal" id="sub-link-to-web_console-odc-about-web-terminal" data-v-b883c74f>About the web terminal in the web console</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/web_console/disabling-web-console" id="sub-link-to-web_console-disabling-web-console" data-v-b883c74f>Disabling the web console in OpenShift Container Platform</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/web_console/creating-quick-start-tutorials" id="sub-link-to-web_console-creating-quick-start-tutorials" data-v-b883c74f>Creating quick start tutorials in the web console</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Reference</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>CLI tools</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/cli_tools/index" id="chapter-landing--cli_tools-index" data-v-b883c74f>CLI tools</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cli_tools/cli-tools-overview" id="sub-link-to-cli_tools-cli-tools-overview" data-v-b883c74f>OpenShift Container Platform CLI tools overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cli_tools/openshift-cli-oc" id="sub-link-to-cli_tools-openshift-cli-oc" data-v-b883c74f>OpenShift CLI (oc)</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cli_tools/developer-cli-odo" id="sub-link-to-cli_tools-developer-cli-odo" data-v-b883c74f>Developer CLI (odo)</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cli_tools/kn-cli-tools" id="sub-link-to-cli_tools-kn-cli-tools" data-v-b883c74f>Knative CLI for use with OpenShift Serverless</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cli_tools/pipelines-cli-tkn" id="sub-link-to-cli_tools-pipelines-cli-tkn" data-v-b883c74f>Pipelines CLI (tkn)</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cli_tools/opm-cli" id="sub-link-to-cli_tools-opm-cli" data-v-b883c74f>opm CLI</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cli_tools/operator-sdk" id="sub-link-to-cli_tools-operator-sdk" data-v-b883c74f>Operator SDK</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Develop</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Building Applications</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/index" id="chapter-landing--building_applications-index" data-v-b883c74f>Building Applications</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/building-applications-overview" id="sub-link-to-building_applications-building-applications-overview" data-v-b883c74f>Building applications overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/projects" id="sub-link-to-building_applications-projects" data-v-b883c74f>Projects</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/creating-applications" id="sub-link-to-building_applications-creating-applications" data-v-b883c74f>Creating Applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/odc-viewing-application-composition-using-topology-view" id="sub-link-to-building_applications-odc-viewing-application-composition-using-topology-view" data-v-b883c74f>Viewing application composition using the Topology view</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/working-with-helm-charts" id="sub-link-to-building_applications-working-with-helm-charts" data-v-b883c74f>Working with Helm charts</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/deployments" id="sub-link-to-building_applications-deployments" data-v-b883c74f>Deployments</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/quotas" id="sub-link-to-building_applications-quotas" data-v-b883c74f>Quotas</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/config-maps" id="sub-link-to-building_applications-config-maps" data-v-b883c74f>Using config maps with applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/odc-monitoring-project-and-application-metrics-using-developer-perspective" id="sub-link-to-building_applications-odc-monitoring-project-and-application-metrics-using-developer-perspective" data-v-b883c74f>Monitoring project and application metrics using the Developer perspective</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/application-health" id="sub-link-to-building_applications-application-health" data-v-b883c74f>Monitoring application health by using health checks</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/odc-editing-applications" id="sub-link-to-building_applications-odc-editing-applications" data-v-b883c74f>Editing applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/pruning-objects" id="sub-link-to-building_applications-pruning-objects" data-v-b883c74f>Pruning objects to reclaim resources</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/idling-applications" id="sub-link-to-building_applications-idling-applications" data-v-b883c74f>Idling applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/odc-deleting-applications" id="sub-link-to-building_applications-odc-deleting-applications" data-v-b883c74f>Deleting applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/building_applications/red-hat-marketplace" id="sub-link-to-building_applications-red-hat-marketplace" data-v-b883c74f>Using the Red Hat Marketplace</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>CI/CD</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/cicd/index" id="chapter-landing--cicd-index" data-v-b883c74f>CI/CD</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cicd/ci-cd-overview" id="sub-link-to-cicd-ci-cd-overview" data-v-b883c74f>OpenShift Container Platform CI/CD overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cicd/builds" id="sub-link-to-cicd-builds" data-v-b883c74f>Builds</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cicd/migrating-from-jenkins-to-tekton" id="sub-link-to-cicd-migrating-from-jenkins-to-tekton" data-v-b883c74f>Migrating from Jenkins to Tekton</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cicd/pipelines" id="sub-link-to-cicd-pipelines" data-v-b883c74f>Pipelines</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/cicd/gitops" id="sub-link-to-cicd-gitops" data-v-b883c74f>GitOps</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Images</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/images/index" id="chapter-landing--images-index" data-v-b883c74f>Images</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/overview-of-images" id="sub-link-to-images-overview-of-images" data-v-b883c74f>Overview of images</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/configuring-samples-operator" id="sub-link-to-images-configuring-samples-operator" data-v-b883c74f>Configuring the Cluster Samples Operator</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/samples-operator-alt-registry" id="sub-link-to-images-samples-operator-alt-registry" data-v-b883c74f>Using the Cluster Samples Operator with an alternate registry</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/creating-images" id="sub-link-to-images-creating-images" data-v-b883c74f>Creating images</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/managing-images" id="sub-link-to-images-managing-images" data-v-b883c74f>Managing images</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/managing-image-streams" id="sub-link-to-images-managing-image-streams" data-v-b883c74f>Managing image streams</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/using-imagestreams-with-kube-resources" id="sub-link-to-images-using-imagestreams-with-kube-resources" data-v-b883c74f>Using image streams with Kubernetes resources</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/triggering-updates-on-imagestream-changes" id="sub-link-to-images-triggering-updates-on-imagestream-changes" data-v-b883c74f>Triggering updates on image stream changes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/image-configuration" id="sub-link-to-images-image-configuration" data-v-b883c74f>Image configuration resources</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/using-templates" id="sub-link-to-images-using-templates" data-v-b883c74f>Using templates</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/templates-using-ruby-on-rails" id="sub-link-to-images-templates-using-ruby-on-rails" data-v-b883c74f>Using Ruby on Rails</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/images/using-images" id="sub-link-to-images-using-images" data-v-b883c74f>Using images</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Nodes</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/nodes/index" id="chapter-landing--nodes-index" data-v-b883c74f>Nodes</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/nodes/overview-of-nodes" id="sub-link-to-nodes-overview-of-nodes" data-v-b883c74f>Overview of nodes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/nodes/working-with-pods" id="sub-link-to-nodes-working-with-pods" data-v-b883c74f>Working with pods</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/nodes/controlling-pod-placement-onto-nodes-scheduling" id="sub-link-to-nodes-controlling-pod-placement-onto-nodes-scheduling" data-v-b883c74f>Controlling pod placement onto nodes (scheduling)</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/nodes/using-jobs-and-daemonsets" id="sub-link-to-nodes-using-jobs-and-daemonsets" data-v-b883c74f>Using Jobs and DaemonSets</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/nodes/working-with-nodes" id="sub-link-to-nodes-working-with-nodes" data-v-b883c74f>Working with nodes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/nodes/working-with-containers" id="sub-link-to-nodes-working-with-containers" data-v-b883c74f>Working with containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/nodes/working-with-clusters" id="sub-link-to-nodes-working-with-clusters" data-v-b883c74f>Working with clusters</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/nodes/remote-worker-nodes-on-the-network-edge" id="sub-link-to-nodes-remote-worker-nodes-on-the-network-edge" data-v-b883c74f>Remote worker nodes on the network edge</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Sandboxed Containers Support for OpenShift</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/index" id="chapter-landing--sandboxed_containers_support_for_openshift-index" data-v-b883c74f>Sandboxed Containers Support for OpenShift</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/sandboxed-containers-4-8-release-notes" id="sub-link-to-sandboxed_containers_support_for_openshift-sandboxed-containers-4-8-release-notes" data-v-b883c74f>{sandboxed-containers-first} 1.0 release notes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/understanding-sandboxed-containers" id="sub-link-to-sandboxed_containers_support_for_openshift-understanding-sandboxed-containers" data-v-b883c74f>Understanding OpenShift sandboxed containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/deploying-sandboxed-containers-workloads" id="sub-link-to-sandboxed_containers_support_for_openshift-deploying-sandboxed-containers-workloads" data-v-b883c74f>Deploying OpenShift sandboxed containers workloads</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/uninstalling-sandboxed-containers" id="sub-link-to-sandboxed_containers_support_for_openshift-uninstalling-sandboxed-containers" data-v-b883c74f>Uninstalling OpenShift sandboxed containers</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/upgrade-sandboxed-containers" id="sub-link-to-sandboxed_containers_support_for_openshift-upgrade-sandboxed-containers" data-v-b883c74f>Upgrade OpenShift sandboxed containers</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Operators</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/operators/index" id="chapter-landing--operators-index" data-v-b883c74f>Operators</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/operators/operators-overview" id="sub-link-to-operators-operators-overview" data-v-b883c74f>Operators overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/operators/understanding-operators" id="sub-link-to-operators-understanding-operators" data-v-b883c74f>Understanding Operators</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/operators/user-tasks" id="sub-link-to-operators-user-tasks" data-v-b883c74f>User tasks</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/operators/administrator-tasks" id="sub-link-to-operators-administrator-tasks" data-v-b883c74f>Administrator tasks</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/operators/developing-operators" id="sub-link-to-operators-developing-operators" data-v-b883c74f>Developing Operators</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/operators/cluster-operators-ref" id="sub-link-to-operators-cluster-operators-ref" data-v-b883c74f>Cluster Operators reference</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Monitor</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Logging</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/logging/index" id="chapter-landing--logging-index" data-v-b883c74f>Logging</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/release-notes" id="sub-link-to-logging-release-notes" data-v-b883c74f>Release notes for Logging</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging" id="sub-link-to-logging-cluster-logging" data-v-b883c74f>Understanding Red Hat OpenShift Logging</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-deploying" id="sub-link-to-logging-cluster-logging-deploying" data-v-b883c74f>Installing OpenShift Logging</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/configuring-your-logging-deployment" id="sub-link-to-logging-configuring-your-logging-deployment" data-v-b883c74f>Configuring your Logging deployment</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/vewing-resource-logs" id="sub-link-to-logging-vewing-resource-logs" data-v-b883c74f>Viewing logs for a resource</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-visualizer-using" id="sub-link-to-logging-cluster-logging-visualizer-using" data-v-b883c74f>Viewing cluster logs by using Kibana</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-external" id="sub-link-to-logging-cluster-logging-external" data-v-b883c74f>Forwarding logs to external third-party logging systems</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-enabling-json-logging" id="sub-link-to-logging-cluster-logging-enabling-json-logging" data-v-b883c74f>Enabling JSON logging</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-eventrouter" id="sub-link-to-logging-cluster-logging-eventrouter" data-v-b883c74f>Collecting and storing Kubernetes events</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-upgrading" id="sub-link-to-logging-cluster-logging-upgrading" data-v-b883c74f>Updating OpenShift Logging</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-dashboards" id="sub-link-to-logging-cluster-logging-dashboards" data-v-b883c74f>Viewing cluster dashboards</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/troubleshooting-logging" id="sub-link-to-logging-troubleshooting-logging" data-v-b883c74f>Troubleshooting Logging</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-uninstall" id="sub-link-to-logging-cluster-logging-uninstall" data-v-b883c74f>Uninstalling OpenShift Logging</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-exported-fields" id="sub-link-to-logging-cluster-logging-exported-fields" data-v-b883c74f>Log Record Fields</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/message" id="sub-link-to-logging-message" data-v-b883c74f>message</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/structured" id="sub-link-to-logging-structured" data-v-b883c74f>structured</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/timestamp" id="sub-link-to-logging-timestamp" data-v-b883c74f>@timestamp</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/hostname" id="sub-link-to-logging-hostname" data-v-b883c74f>hostname</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/ipaddr4" id="sub-link-to-logging-ipaddr4" data-v-b883c74f>ipaddr4</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/ipaddr6" id="sub-link-to-logging-ipaddr6" data-v-b883c74f>ipaddr6</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/level" id="sub-link-to-logging-level" data-v-b883c74f>level</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/pid" id="sub-link-to-logging-pid" data-v-b883c74f>pid</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/service" id="sub-link-to-logging-service" data-v-b883c74f>service</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/tags" id="sub-link-to-logging-tags" data-v-b883c74f>tags</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/file" id="sub-link-to-logging-file" data-v-b883c74f>file</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/offset" id="sub-link-to-logging-offset" data-v-b883c74f>offset</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-exported-fields-kubernetes_cluster-logging-exported-fields" id="sub-link-to-logging-cluster-logging-exported-fields-kubernetes_cluster-logging-exported-fields" data-v-b883c74f>kubernetes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/logging/openshift" id="sub-link-to-logging-openshift" data-v-b883c74f>OpenShift</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Monitoring</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/index" id="chapter-landing--monitoring-index" data-v-b883c74f>Monitoring</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/monitoring-overview" id="sub-link-to-monitoring-monitoring-overview" data-v-b883c74f>Monitoring overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/configuring-the-monitoring-stack" id="sub-link-to-monitoring-configuring-the-monitoring-stack" data-v-b883c74f>Configuring the monitoring stack</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/enabling-monitoring-for-user-defined-projects" id="sub-link-to-monitoring-enabling-monitoring-for-user-defined-projects" data-v-b883c74f>Enabling monitoring for user-defined projects</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/managing-metrics" id="sub-link-to-monitoring-managing-metrics" data-v-b883c74f>Managing metrics</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/managing-alerts" id="sub-link-to-monitoring-managing-alerts" data-v-b883c74f>Managing alerts</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/reviewing-monitoring-dashboards" id="sub-link-to-monitoring-reviewing-monitoring-dashboards" data-v-b883c74f>Reviewing monitoring dashboards</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/accessing-third-party-uis" id="sub-link-to-monitoring-accessing-third-party-uis" data-v-b883c74f>Accessing third-party UIs</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/monitoring/troubleshooting-monitoring-issues" id="sub-link-to-monitoring-troubleshooting-monitoring-issues" data-v-b883c74f>Troubleshooting monitoring issues</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Scalability and performance</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/index" id="chapter-landing--scalability_and_performance-index" data-v-b883c74f>Scalability and performance</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/recommended-host-practices" id="sub-link-to-scalability_and_performance-recommended-host-practices" data-v-b883c74f>Recommended host practices</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/ibm-z-recommended-host-practices" id="sub-link-to-scalability_and_performance-ibm-z-recommended-host-practices" data-v-b883c74f>Recommended host practices for IBM Z & LinuxONE environments</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/recommended-cluster-scaling-practices" id="sub-link-to-scalability_and_performance-recommended-cluster-scaling-practices" data-v-b883c74f>Recommended cluster scaling practices</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/using-node-tuning-operator" id="sub-link-to-scalability_and_performance-using-node-tuning-operator" data-v-b883c74f>Using the Node Tuning Operator</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/using_cluster_loader_node-tuning-operator" id="sub-link-to-scalability_and_performance-using_cluster_loader_node-tuning-operator" data-v-b883c74f>Using Cluster Loader</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/using-cpu-manager" id="sub-link-to-scalability_and_performance-using-cpu-manager" data-v-b883c74f>Using CPU Manager</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/using-topology-manager" id="sub-link-to-scalability_and_performance-using-topology-manager" data-v-b883c74f>Using Topology Manager</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/scaling-cluster-monitoring-operator" id="sub-link-to-scalability_and_performance-scaling-cluster-monitoring-operator" data-v-b883c74f>Scaling the Cluster Monitoring Operator</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/node-feature-discovery-operator" id="sub-link-to-scalability_and_performance-node-feature-discovery-operator" data-v-b883c74f>The Node Feature Discovery Operator</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/driver-toolkit" id="sub-link-to-scalability_and_performance-driver-toolkit" data-v-b883c74f>The Driver Toolkit</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/planning-your-environment-according-to-object-maximums" id="sub-link-to-scalability_and_performance-planning-your-environment-according-to-object-maximums" data-v-b883c74f>Planning your environment according to object maximums</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/optimizing-storage" id="sub-link-to-scalability_and_performance-optimizing-storage" data-v-b883c74f>Optimizing storage</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/routing-optimization" id="sub-link-to-scalability_and_performance-routing-optimization" data-v-b883c74f>Optimizing routing</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/optimizing-networking" id="sub-link-to-scalability_and_performance-optimizing-networking" data-v-b883c74f>Optimizing networking</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/managing-bare-metal-hosts" id="sub-link-to-scalability_and_performance-managing-bare-metal-hosts" data-v-b883c74f>Managing bare metal hosts</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/what-huge-pages-do-and-how-they-are-consumed" id="sub-link-to-scalability_and_performance-what-huge-pages-do-and-how-they-are-consumed" data-v-b883c74f>What huge pages do and how they are consumed by applications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/cnf-performance-addon-operator-for-low-latency-nodes" id="sub-link-to-scalability_and_performance-cnf-performance-addon-operator-for-low-latency-nodes" data-v-b883c74f>Performance Addon Operator for low latency nodes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/cnf-performing-platform-verification-latency-tests" id="sub-link-to-scalability_and_performance-cnf-performing-platform-verification-latency-tests" data-v-b883c74f>Performing latency tests for platform verification</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/scalability_and_performance/cnf-create-performance-profiles" id="sub-link-to-scalability_and_performance-cnf-create-performance-profiles" data-v-b883c74f>Creating a performance profile</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Support</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/support/index" id="chapter-landing--support-index" data-v-b883c74f>Support</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/support/support-overview" id="sub-link-to-support-support-overview" data-v-b883c74f>Support overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/support/managing-cluster-resources" id="sub-link-to-support-managing-cluster-resources" data-v-b883c74f>Managing your cluster resources</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/support/getting-support" id="sub-link-to-support-getting-support" data-v-b883c74f>Getting support</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/support/remote-health-monitoring-with-connected-clusters" id="sub-link-to-support-remote-health-monitoring-with-connected-clusters" data-v-b883c74f>Remote health monitoring with connected clusters</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/support/gathering-cluster-data" id="sub-link-to-support-gathering-cluster-data" data-v-b883c74f>Gathering data about your cluster</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/support/summarizing-cluster-specifications" id="sub-link-to-support-summarizing-cluster-specifications" data-v-b883c74f>Summarizing cluster specifications</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/support/troubleshooting" id="sub-link-to-support-troubleshooting" data-v-b883c74f>Troubleshooting</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><details id="toc--undefined" data-v-fa0dae77><summary class="heading chapter-title" id="undefined--summary" data-v-fa0dae77>Integration</summary><ol class="sub-nav" data-v-fa0dae77><!----><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Service Mesh</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/service_mesh/index" id="chapter-landing--service_mesh-index" data-v-b883c74f>Service Mesh</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/service_mesh/service-mesh-2-x" id="sub-link-to-service_mesh-service-mesh-2-x" data-v-b883c74f>Service Mesh 2.x</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/service_mesh/service-mesh-1-x" id="sub-link-to-service_mesh-service-mesh-1-x" data-v-b883c74f>Service Mesh 1.x</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Distributed tracing</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/distributed_tracing/index" id="chapter-landing--distributed_tracing-index" data-v-b883c74f>Distributed tracing</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/distributed_tracing/distr-tracing-release-notes" id="sub-link-to-distributed_tracing-distr-tracing-release-notes" data-v-b883c74f>Distributed tracing release notes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/distributed_tracing/distributed-tracing-architecture" id="sub-link-to-distributed_tracing-distributed-tracing-architecture" data-v-b883c74f>Distributed tracing architecture</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/distributed_tracing/distributed-tracing-installation" id="sub-link-to-distributed_tracing-distributed-tracing-installation" data-v-b883c74f>Distributed tracing installation</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Serverless</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/serverless/index" id="chapter-landing--serverless-index" data-v-b883c74f>Serverless</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/serverless-release-notes" id="sub-link-to-serverless-serverless-release-notes" data-v-b883c74f>Release notes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/discover" id="sub-link-to-serverless-discover" data-v-b883c74f>Discover</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/install" id="sub-link-to-serverless-install" data-v-b883c74f>Install</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/knative-cli" id="sub-link-to-serverless-knative-cli" data-v-b883c74f>Knative CLI</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title active" href="/en/documentation/openshift_container_platform/4.8/html/serverless/develop" id="sub-link-to-serverless-develop" data-v-b883c74f>Develop</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/administer" id="sub-link-to-serverless-administer" data-v-b883c74f>Administer</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/monitor" id="sub-link-to-serverless-monitor" data-v-b883c74f>Monitor</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/serverless-tracing" id="sub-link-to-serverless-serverless-tracing" data-v-b883c74f>Tracing requests</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/serverless-support" id="sub-link-to-serverless-serverless-support" data-v-b883c74f>OpenShift Serverless support</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/security" id="sub-link-to-serverless-security" data-v-b883c74f>Security</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/functions" id="sub-link-to-serverless-functions" data-v-b883c74f>Functions</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/serverless/integrations" id="sub-link-to-serverless-integrations" data-v-b883c74f>Integrations</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>OpenShift Virtualization</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/index" id="chapter-landing--openshift_virtualization-index" data-v-b883c74f>OpenShift Virtualization</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/about-virt" id="sub-link-to-openshift_virtualization-about-virt" data-v-b883c74f>About OpenShift Virtualization</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/start-here-with-openshift-virtualization" id="sub-link-to-openshift_virtualization-start-here-with-openshift-virtualization" data-v-b883c74f>Start here with OpenShift Virtualization</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/openshift-virtualization-release-notes" id="sub-link-to-openshift_virtualization-openshift-virtualization-release-notes" data-v-b883c74f>OpenShift Virtualization release notes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/installing-openshift-virtualization" id="sub-link-to-openshift_virtualization-installing-openshift-virtualization" data-v-b883c74f>Installing OpenShift Virtualization</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/upgrading-openshift-virtualization" id="sub-link-to-openshift_virtualization-upgrading-openshift-virtualization" data-v-b883c74f>Updating OpenShift Virtualization</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/virt-additional-security-privileges-controller-and-launcher" id="sub-link-to-openshift_virtualization-virt-additional-security-privileges-controller-and-launcher" data-v-b883c74f>Additional security privileges granted for kubevirt-controller and virt-launcher</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/virt-using-the-cli-tools" id="sub-link-to-openshift_virtualization-virt-using-the-cli-tools" data-v-b883c74f>Using the CLI tools</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/virtual-machines" id="sub-link-to-openshift_virtualization-virtual-machines" data-v-b883c74f>Virtual machines</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/virtual-machine-templates" id="sub-link-to-openshift_virtualization-virtual-machine-templates" data-v-b883c74f>Virtual machine templates</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/live-migration" id="sub-link-to-openshift_virtualization-live-migration" data-v-b883c74f>Live migration</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/node-maintenance" id="sub-link-to-openshift_virtualization-node-maintenance" data-v-b883c74f>Node maintenance</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/node-networking" id="sub-link-to-openshift_virtualization-node-networking" data-v-b883c74f>Node networking</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/openshift_virtualization/logging-events-and-monitoring" id="sub-link-to-openshift_virtualization-logging-events-and-monitoring" data-v-b883c74f>Logging, events, and monitoring</a></li><!--]--><!--]--></ol></details></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><details id="nested-toc--null" data-v-b883c74f><summary class="heading sub-chapter-title" id="null--summary" data-v-b883c74f>Windows Container Support for OpenShift</summary><ol id="sub-nav--null" class="sub-nav" data-v-b883c74f><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title chapter-landing-page" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/index" id="chapter-landing--windows_container_support_for_openshift-index" data-v-b883c74f>Windows Container Support for OpenShift</a></li><!--[--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/windows-container-overview" id="sub-link-to-windows_container_support_for_openshift-windows-container-overview" data-v-b883c74f>Red Hat OpenShift support for Windows Containers overview</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/windows-containers-release-notes-3-x" id="sub-link-to-windows_container_support_for_openshift-windows-containers-release-notes-3-x" data-v-b883c74f>Windows Container Support for Red Hat OpenShift release notes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/understanding-windows-container-workloads" id="sub-link-to-windows_container_support_for_openshift-understanding-windows-container-workloads" data-v-b883c74f>Understanding Windows container workloads</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/enabling-windows-container-workloads" id="sub-link-to-windows_container_support_for_openshift-enabling-windows-container-workloads" data-v-b883c74f>Enabling Windows container workloads</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/creating-windows-machineset-objects" id="sub-link-to-windows_container_support_for_openshift-creating-windows-machineset-objects" data-v-b883c74f>Creating Windows MachineSet objects</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/scheduling-windows-workloads" id="sub-link-to-windows_container_support_for_openshift-scheduling-windows-workloads" data-v-b883c74f>Scheduling Windows container workloads</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/windows-node-upgrades" id="sub-link-to-windows_container_support_for_openshift-windows-node-upgrades" data-v-b883c74f>Windows node upgrades</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/byoh-windows-instance" id="sub-link-to-windows_container_support_for_openshift-byoh-windows-instance" data-v-b883c74f>Using Bring-Your-Own-Host (BYOH) Windows instances as nodes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/removing-windows-nodes" id="sub-link-to-windows_container_support_for_openshift-removing-windows-nodes" data-v-b883c74f>Removing Windows nodes</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/en/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/disabling-windows-container-workloads" id="sub-link-to-windows_container_support_for_openshift-disabling-windows-container-workloads" data-v-b883c74f>Disabling Windows container workloads</a></li><!--]--><!--]--></ol></details></li><!--]--><!--]--></ol></details></li><li class="item chapter" data-v-fa0dae77><a class="link" href="/en/documentation/openshift_container_platform/4.8/html/serverless/legal-notice" id="chapter-landing--serverless-legal-notice" data-v-fa0dae77>Legal Notice</a></li><!--]--></ol></nav><!----></div></div></aside><article class="content span-xs-12 span-sm-6 span-md-12 span-lg-7" aria-live="polite" data-v-8589d091><!----><div lang="en" xml:lang="en" class="docs-ocp-content-container docs-content-container" data-v-8589d091><!----><!----><h1 data-id="content_chapter" class="chapter-title" data-v-8589d091>Chapter 5. Develop</h1><hr class="line-below-chp" data-v-8589d091><section class="rhdocs" data-v-8589d091><body><section class="chapter" id="develop"><section class="section" id="serverless-applications"><div class="titlepage"><div><div><h2 class="title">5.1. Serverless applications</h2></div></div></div><p> Serverless applications are created and deployed as Kubernetes services, defined by a route and a configuration, and contained in a YAML file. To deploy a serverless application using OpenShift Serverless, you must create a Knative <code class="literal">Service</code> object. </p><div class="formalpara"><p class="title"><strong>Example Knative <code class="literal">Service</code> object YAML file</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello <span id="CO6-1"><!--Empty--></span><span class="callout">1</span> namespace: default <span id="CO6-2"><!--Empty--></span><span class="callout">2</span> spec: template: spec: containers: - image: docker.io/openshift/hello-openshift <span id="CO6-3"><!--Empty--></span><span class="callout">3</span> env: - name: RESPONSE <span id="CO6-4"><!--Empty--></span><span class="callout">4</span> value: "Hello Serverless!"</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO6-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the application. </div></dd><dt><a href="#CO6-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The namespace the application uses. </div></dd><dt><a href="#CO6-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The image of the application. </div></dd><dt><a href="#CO6-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The environment variable printed out by the sample application. </div></dd></dl></div><p> You can create a serverless application by using one of the following methods: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Create a Knative service from the OpenShift Container Platform web console. See the documentation about <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/building_applications/#odc-creating-applications-using-developer-perspective">Creating applications using the Developer perspective</a>. </li><li class="listitem"> Create a Knative service by using the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> Create and apply a Knative <code class="literal">Service</code> object as a YAML file, by using the <code class="literal">oc</code> CLI. </li></ul></div><section class="section" id="creating-serverless-apps-kn_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.1. Creating serverless applications by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to create serverless applications provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the <code class="literal">kn service create</code> command to create a basic serverless application. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Create a Knative service: </p><pre class="programlisting language-terminal">$ kn service create <service-name> --image <image> --tag <tag-value></pre><p class="simpara"> Where: </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> <code class="literal">--image</code> is the URI of the image for the application. </li><li class="listitem"><p class="simpara"> <code class="literal">--tag</code> is an optional flag that can be used to add a tag to the initial revision that is created with the service. </p><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Creating service 'event-display' in namespace 'default': 0.271s The Route is still working to reflect the latest desired specification. 0.580s Configuration "event-display" is waiting for a Revision to become ready. 3.857s ... 3.861s Ingress has not yet been reconciled. 4.270s Ready to serve. Service 'event-display' created with latest revision 'event-display-bxshg-1' and URL: http://event-display-default.apps-crc.testing</pre> <p></p></div></li></ul></div></li></ul></div></section><section class="section" id="creating-an-offline-service_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.2. Creating a service using offline mode</h3></div></div></div><p> You can execute <code class="literal">kn service</code> commands in offline mode, so that no changes happen on the cluster, and instead the service descriptor file is created on your local machine. After the descriptor file is created, you can modify the file before propagating changes to the cluster. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> The offline mode of the Knative CLI is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. </p><p> For more information about the support scope of Red Hat Technology Preview features, see <a class="link" href="https://access.redhat.com/support/offerings/techpreview/">https://access.redhat.com/support/offerings/techpreview/</a>. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> In offline mode, create a local Knative service descriptor file: </p><pre class="programlisting language-terminal">$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace test</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Service 'event-display' created in namespace 'test'.</pre> <p></p></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> The <code class="literal">--target ./</code> flag enables offline mode and specifies <code class="literal">./</code> as the directory for storing the new directory tree. </p><p class="simpara"> If you do not specify an existing directory, but use a filename, such as <code class="literal">--target my-service.yaml</code>, then no directory tree is created. Instead, only the service descriptor file <code class="literal">my-service.yaml</code> is created in the current directory. </p><p class="simpara"> The filename can have the <code class="literal">.yaml</code>, <code class="literal">.yml</code>, or <code class="literal">.json</code> extension. Choosing <code class="literal">.json</code> creates the service descriptor file in the JSON format. </p></li><li class="listitem"><p class="simpara"> The <code class="literal">--namespace test</code> option places the new service in the <code class="literal">test</code> namespace. </p><p class="simpara"> If you do not use <code class="literal">--namespace</code>, and you are logged in to an OpenShift Container Platform cluster, the descriptor file is created in the current namespace. Otherwise, the descriptor file is created in the <code class="literal">default</code> namespace. </p></li></ul></div></li><li class="listitem"><p class="simpara"> Examine the created directory structure: </p><pre class="programlisting language-terminal">$ tree ./</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">./ └── test └── ksvc └── event-display.yaml 2 directories, 1 file</pre> <p></p></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The current <code class="literal">./</code> directory specified with <code class="literal">--target</code> contains the new <code class="literal">test/</code> directory that is named after the specified namespace. </li><li class="listitem"> The <code class="literal">test/</code> directory contains the <code class="literal">ksvc</code> directory, named after the resource type. </li><li class="listitem"> The <code class="literal">ksvc</code> directory contains the descriptor file <code class="literal">event-display.yaml</code>, named according to the specified service name. </li></ul></div></li><li class="listitem"><p class="simpara"> Examine the generated service descriptor file: </p><pre class="programlisting language-terminal">$ cat test/ksvc/event-display.yaml</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: creationTimestamp: null name: event-display namespace: test spec: template: metadata: annotations: client.knative.dev/user-image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest creationTimestamp: null spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest name: "" resources: {} status: {}</pre> <p></p></div></li><li class="listitem"><p class="simpara"> List information about the new service: </p><pre class="programlisting language-terminal">$ kn service describe event-display --target ./ --namespace test</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: event-display Namespace: test Age: URL: Revisions: Conditions: OK TYPE AGE REASON</pre> <p></p></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> The <code class="literal">--target ./</code> option specifies the root directory for the directory structure containing namespace subdirectories. </p><p class="simpara"> Alternatively, you can directly specify a YAML or JSON filename with the <code class="literal">--target</code> option. The accepted file extensions are <code class="literal">.yaml</code>, <code class="literal">.yml</code>, and <code class="literal">.json</code>. </p></li><li class="listitem"><p class="simpara"> The <code class="literal">--namespace</code> option specifies the namespace, which communicates to <code class="literal">kn</code> the subdirectory that contains the necessary service descriptor file. </p><p class="simpara"> If you do not use <code class="literal">--namespace</code>, and you are logged in to an OpenShift Container Platform cluster, <code class="literal">kn</code> searches for the service in the subdirectory that is named after the current namespace. Otherwise, <code class="literal">kn</code> searches in the <code class="literal">default/</code> subdirectory. </p></li></ul></div></li><li class="listitem"><p class="simpara"> Use the service descriptor file to create the service on the cluster: </p><pre class="programlisting language-terminal">$ kn service create -f test/ksvc/event-display.yaml</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Creating service 'event-display' in namespace 'test': 0.058s The Route is still working to reflect the latest desired specification. 0.098s ... 0.168s Configuration "event-display" is waiting for a Revision to become ready. 23.377s ... 23.419s Ingress has not yet been reconciled. 23.534s Waiting for load balancer to be ready 23.723s Ready to serve. Service 'event-display' created to latest revision 'event-display-00001' is available at URL: http://event-display-test.apps.example.com</pre> <p></p></div></li></ol></div></section><section class="section" id="creating-serverless-apps-yaml_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.3. Creating serverless applications using YAML</h3></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe applications declaratively and in a reproducible manner. To create a serverless application by using YAML, you must create a YAML file that defines a Knative <code class="literal">Service</code> object, then apply it by using <code class="literal">oc apply</code>. </p><p> After the service is created and the application is deployed, Knative creates an immutable revision for this version of the application. Knative also performs network programming to create a route, ingress, service, and load balancer for your application and automatically scales your pods up and down based on traffic. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a YAML file containing the following sample code: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-delivery namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest env: - name: RESPONSE value: "Hello Serverless!"</pre></li><li class="listitem"><p class="simpara"> Navigate to the directory where the YAML file is contained, and deploy the application by applying the YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section><section class="section" id="verifying-serverless-app-deployment_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.4. Verifying your serverless application deployment</h3></div></div></div><p> To verify that your serverless application has been deployed successfully, you must get the application URL created by Knative, and then send a request to that URL and observe the output. OpenShift Serverless supports the use of both HTTP and HTTPS URLs, however the output from <code class="literal">oc get ksvc</code> always prints URLs using the <code class="literal">http://</code> format. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li><li class="listitem"> You have installed the <code class="literal">oc</code> CLI. </li><li class="listitem"> You have created a Knative service. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Find the application URL: </p><pre class="programlisting language-terminal">$ oc get ksvc <service_name></pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME URL LATESTCREATED LATESTREADY READY REASON event-delivery http://event-delivery-default.example.com event-delivery-4wsd2 event-delivery-4wsd2 True</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Make a request to your cluster and observe the output. </p><div class="formalpara"><p class="title"><strong>Example HTTP request</strong></p><p> </p><pre class="programlisting language-terminal">$ curl http://event-delivery-default.example.com</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example HTTPS request</strong></p><p> </p><pre class="programlisting language-terminal">$ curl https://event-delivery-default.example.com</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Hello Serverless!</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional. If you receive an error relating to a self-signed certificate in the certificate chain, you can add the <code class="literal">--insecure</code> flag to the curl command to ignore the error: </p><pre class="programlisting language-terminal">$ curl https://event-delivery-default.example.com --insecure</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Hello Serverless!</pre> <p></p></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Self-signed certificates must not be used in a production deployment. This method is only for testing purposes. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Optional. If your OpenShift Container Platform cluster is configured with a certificate that is signed by a certificate authority (CA) but not yet globally configured for your system, you can specify this with the <code class="literal">curl</code> command. The path to the certificate can be passed to the curl command by using the <code class="literal">--cacert</code> flag: </p><pre class="programlisting language-terminal">$ curl https://event-delivery-default.example.com --cacert <file></pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Hello Serverless!</pre> <p></p></div></li></ol></div></section><section class="section" id="interacting-serverless-apps-http2-gRPC_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.5. Interacting with a serverless application using HTTP2 and gRPC</h3></div></div></div><p> OpenShift Serverless supports only insecure or edge-terminated routes. Insecure or edge-terminated routes do not support HTTP2 on OpenShift Container Platform. These routes also do not support gRPC because gRPC is transported by HTTP2. If you use these protocols in your application, you must call the application using the ingress gateway directly. To do this you must find the ingress gateway’s public address and the application’s specific host. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> This method needs to expose Kourier Gateway using the <code class="literal">LoadBalancer</code> service type. You can configure this by adding the following YAML to your <code class="literal">KnativeServing</code> custom resource definition (CRD): </p><pre class="programlisting language-yaml">... spec: ingress: kourier: service-type: LoadBalancer ...</pre></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a Knative service. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> Find the application host. See the instructions in <span class="emphasis"><em>Verifying your serverless application deployment</em></span>. </li><li class="listitem"><p class="simpara"> Find the ingress gateway’s public address: </p><pre class="programlisting language-terminal">$ oc -n knative-serving-ingress get svc kourier</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67m</pre> <p></p></div><p class="simpara"> The public address is surfaced in the <code class="literal">EXTERNAL-IP</code> field, and in this case is <code class="literal">a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com</code>. </p></li><li class="listitem"><p class="simpara"> Manually set the host header of your HTTP request to the application’s host, but direct the request itself against the public address of the ingress gateway. </p><pre class="programlisting language-terminal">$ curl -H "Host: hello-default.example.com" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Hello Serverless!</pre> <p></p></div><p class="simpara"> You can also make a gRPC request by setting the authority to the application’s host, while directing the request against the ingress gateway directly: </p><pre class="programlisting language-yaml">grpc.Dial( "a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80", grpc.WithAuthority("hello-default.example.com:80"), grpc.WithInsecure(), )</pre><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Ensure that you append the respective port, 80 by default, to both hosts as shown in the previous example. </p></div></rh-alert></li></ol></div></section><section class="section" id="serverless-services-network-policies_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.6. Enabling communication with Knative applications on a cluster with restrictive network policies</h3></div></div></div><p> If you are using a cluster that multiple users have access to, your cluster might use network policies to control which pods, services, and namespaces can communicate with each other over the network. If your cluster uses restrictive network policies, it is possible that Knative system pods are not able to access your Knative application. For example, if your namespace has the following network policy, which denies all requests, Knative system pods cannot access your Knative application: </p><div class="formalpara"><p class="title"><strong>Example NetworkPolicy object that denies all requests to the namespace</strong></p><p> </p><pre class="programlisting language-yaml">kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: deny-by-default namespace: example-namespace spec: podSelector: ingress: []</pre> <p></p></div><p> To allow access to your applications from Knative system pods, you must add a label to each of the Knative system namespaces, and then create a <code class="literal">NetworkPolicy</code> object in your application namespace that allows access to the namespace for other namespaces that have this label. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> A network policy that denies requests to non-Knative services on your cluster still prevents access to these services. However, by allowing access from Knative system namespaces to your Knative application, you are allowing access to your Knative application from all namespaces in the cluster. </p><p> If you do not want to allow access to your Knative application from all namespaces on the cluster, you might want to use <span class="emphasis"><em>JSON Web Token authentication for Knative services</em></span> instead. JSON Web Token authentication for Knative services requires Service Mesh. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Add the <code class="literal">knative.openshift.io/system-namespace=true</code> label to each Knative system namespace that requires access to your application: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Label the <code class="literal">knative-serving</code> namespace: </p><pre class="programlisting language-terminal">$ oc label namespace knative-serving knative.openshift.io/system-namespace=true</pre></li><li class="listitem"><p class="simpara"> Label the <code class="literal">knative-serving-ingress</code> namespace: </p><pre class="programlisting language-terminal">$ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true</pre></li><li class="listitem"><p class="simpara"> Label the <code class="literal">knative-eventing</code> namespace: </p><pre class="programlisting language-terminal">$ oc label namespace knative-eventing knative.openshift.io/system-namespace=true</pre></li><li class="listitem"><p class="simpara"> Label the <code class="literal">knative-kafka</code> namespace: </p><pre class="programlisting language-terminal">$ oc label namespace knative-kafka knative.openshift.io/system-namespace=true</pre></li></ol></div></li><li class="listitem"><p class="simpara"> Create a <code class="literal">NetworkPolicy</code> object in your application namespace to allow access from namespaces with the <code class="literal">knative.openshift.io/system-namespace</code> label: </p><div class="formalpara"><p class="title"><strong>Example <code class="literal">NetworkPolicy</code> object</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: <network_policy_name> <span id="CO7-1"><!--Empty--></span><span class="callout">1</span> namespace: <namespace> <span id="CO7-2"><!--Empty--></span><span class="callout">2</span> spec: ingress: - from: - namespaceSelector: matchLabels: knative.openshift.io/system-namespace: "true" podSelector: {} policyTypes: - Ingress</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO7-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Provide a name for your network policy. </div></dd><dt><a href="#CO7-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The namespace where your application exists. </div></dd></dl></div></li></ol></div></section><section class="section" id="serverless-init-containers-apps_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.7. Configuring init containers</h3></div></div></div><p> <a class="link" href="https://kubernetes.io/docs/concepts/workloads/pods/init-containers/">Init containers</a> are specialized containers that are run before application containers in a pod. They are generally used to implement initialization logic for an application, which may include running setup scripts or downloading required configurations. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Init containers may cause longer application start-up times and should be used with caution for serverless applications, which are expected to scale up and down frequently. </p></div></rh-alert><p> Multiple init containers are supported in a single Knative service spec. Knative provides a default, configurable naming template if a template name is not provided. The init containers template can be set by adding an appropriate value in a Knative <code class="literal">Service</code> object spec. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li><li class="listitem"> Before you can use init containers for Knative services, an administrator must add the <code class="literal">kubernetes.podspec-init-containers</code> flag to the <code class="literal">KnativeServing</code> custom resource (CR). See the OpenShift Serverless "Global configuration" documentation for more information. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Add the <code class="literal">initContainers</code> spec to a Knative <code class="literal">Service</code> object: </p><div class="formalpara"><p class="title"><strong>Example service spec</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service ... spec: template: spec: initContainers: - imagePullPolicy: IfNotPresent <span id="CO8-1"><!--Empty--></span><span class="callout">1</span> image: <image_uri> <span id="CO8-2"><!--Empty--></span><span class="callout">2</span> volumeMounts: <span id="CO8-3"><!--Empty--></span><span class="callout">3</span> - name: data mountPath: /data ...</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO8-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The <a class="link" href="https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy">image pull policy</a> when the image is downloaded. </div></dd><dt><a href="#CO8-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The URI for the init container image. </div></dd><dt><a href="#CO8-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The location where volumes are mounted within the container file system. </div></dd></dl></div></li></ul></div></section><section class="section" id="serverless-https-redirect-service_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.8. HTTPS redirection per service</h3></div></div></div><p> You can enable or disable HTTPS redirection for a service by configuring the <code class="literal">networking.knative.dev/http-option</code> annotation. The following example shows how you can use this annotation in a Knative <code class="literal">Service</code> YAML object: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example namespace: default annotations: networking.knative.dev/http-option: "redirected" spec: ...</pre></section><section class="section _additional-resources" id="additional-resources_serverless-applications"><div class="titlepage"><div><div><h3 class="title">5.1.9. Additional resources</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#kn-serving-ref">Knative Serving CLI commands</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-ossm-with-kourier-jwt">Configuring JSON Web Token authentication for Knative services</a> </li></ul></div></section></section><section class="section" id="serverless-autoscaling-developer"><div class="titlepage"><div><div><h2 class="title">5.2. Autoscaling</h2></div></div></div><p> Knative Serving provides automatic scaling, or <span class="emphasis"><em>autoscaling</em></span>, for applications to match incoming demand. For example, if an application is receiving no traffic, and scale-to-zero is enabled, Knative Serving scales the application down to zero replicas. If scale-to-zero is disabled, the application is scaled down to the minimum number of replicas configured for applications on the cluster. Replicas can also be scaled up to meet demand if traffic to the application increases. </p><p> Autoscaling settings for Knative services can be global settings that are configured by cluster administrators, or per-revision settings that are configured for individual services. You can modify per-revision settings for your services by using the OpenShift Container Platform web console, by modifying the YAML file for your service, or by using the Knative (<code class="literal">kn</code>) CLI. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Any limits or targets that you set for a service are measured against a single instance of your application. For example, setting the <code class="literal">target</code> annotation to <code class="literal">50</code> configures the autoscaler to scale the application so that each revision handles 50 requests at a time. </p></div></rh-alert><section class="section" id="serverless-autoscaling-developer-scale-bounds"><div class="titlepage"><div><div><h3 class="title">5.2.1. Scale bounds</h3></div></div></div><p> Scale bounds determine the minimum and maximum numbers of replicas that can serve an application at any given time. You can set scale bounds for an application to help prevent cold starts or control computing costs. </p><section class="section" id="serverless-autoscaling-developer-minscale_serverless-autoscaling-developer"><div class="titlepage"><div><div><h4 class="title">5.2.1.1. Minimum scale bounds</h4></div></div></div><p> The minimum number of replicas that can serve an application is determined by the <code class="literal">min-scale</code> annotation. If scale to zero is not enabled, the <code class="literal">min-scale</code> value defaults to <code class="literal">1</code>. </p><p> The <code class="literal">min-scale</code> value defaults to <code class="literal">0</code> replicas if the following conditions are met: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The <code class="literal">min-scale</code> annotation is not set </li><li class="listitem"> Scaling to zero is enabled </li><li class="listitem"> The class <code class="literal">KPA</code> is used </li></ul></div><div class="formalpara"><p class="title"><strong>Example service spec with <code class="literal">min-scale</code> annotation</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/min-scale: "0" ...</pre> <p></p></div><section class="section" id="serverless-autoscaling-minscale-kn_serverless-autoscaling-developer"><div class="titlepage"><div><div><h5 class="title">5.2.1.1.1. Setting the min-scale annotation by using the Knative CLI</h5></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to set the <code class="literal">min-scale</code> annotation provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the <code class="literal">kn service</code> command with the <code class="literal">--scale-min</code> flag to create or modify the <code class="literal">min-scale</code> value for a service. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Knative Serving is installed on the cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Set the minimum number of replicas for the service by using the <code class="literal">--scale-min</code> flag: </p><pre class="programlisting language-terminal">$ kn service create <service_name> --image <image_uri> --scale-min <integer></pre><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-min 2</pre> <p></p></div></li></ul></div></section></section><section class="section" id="serverless-autoscaling-developer-maxscale_serverless-autoscaling-developer"><div class="titlepage"><div><div><h4 class="title">5.2.1.2. Maximum scale bounds</h4></div></div></div><p> The maximum number of replicas that can serve an application is determined by the <code class="literal">max-scale</code> annotation. If the <code class="literal">max-scale</code> annotation is not set, there is no upper limit for the number of replicas created. </p><div class="formalpara"><p class="title"><strong>Example service spec with <code class="literal">max-scale</code> annotation</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/max-scale: "10" ...</pre> <p></p></div><section class="section" id="serverless-autoscaling-maxscale-kn_serverless-autoscaling-developer"><div class="titlepage"><div><div><h5 class="title">5.2.1.2.1. Setting the max-scale annotation by using the Knative CLI</h5></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to set the <code class="literal">max-scale</code> annotation provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the <code class="literal">kn service</code> command with the <code class="literal">--scale-max</code> flag to create or modify the <code class="literal">max-scale</code> value for a service. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Knative Serving is installed on the cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Set the maximum number of replicas for the service by using the <code class="literal">--scale-max</code> flag: </p><pre class="programlisting language-terminal">$ kn service create <service_name> --image <image_uri> --scale-max <integer></pre><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-max 10</pre> <p></p></div></li></ul></div></section></section></section><section class="section" id="serverless-about-concurrency_serverless-autoscaling-developer"><div class="titlepage"><div><div><h3 class="title">5.2.2. Concurrency</h3></div></div></div><p> Concurrency determines the number of simultaneous requests that can be processed by each replica of an application at any given time. Concurrency can be configured as a <span class="emphasis"><em>soft limit</em></span> or a <span class="emphasis"><em>hard limit</em></span>: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> A soft limit is a targeted requests limit, rather than a strictly enforced bound. For example, if there is a sudden burst of traffic, the soft limit target can be exceeded. </li><li class="listitem"><p class="simpara"> A hard limit is a strictly enforced upper bound requests limit. If concurrency reaches the hard limit, surplus requests are buffered and must wait until there is enough free capacity to execute the requests. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Using a hard limit configuration is only recommended if there is a clear use case for it with your application. Having a low, hard limit specified may have a negative impact on the throughput and latency of an application, and might cause cold starts. </p></div></rh-alert></li></ul></div><p> Adding a soft target and a hard limit means that the autoscaler targets the soft target number of concurrent requests, but imposes a hard limit of the hard limit value for the maximum number of requests. </p><p> If the hard limit value is less than the soft limit value, the soft limit value is tuned down, because there is no need to target more requests than the number that can actually be handled. </p><section class="section" id="serverless-concurrency-limits-configure-soft_serverless-autoscaling-developer"><div class="titlepage"><div><div><h4 class="title">5.2.2.1. Configuring a soft concurrency target</h4></div></div></div><p> A soft limit is a targeted requests limit, rather than a strictly enforced bound. For example, if there is a sudden burst of traffic, the soft limit target can be exceeded. You can specify a soft concurrency target for your Knative service by setting the <code class="literal">autoscaling.knative.dev/target</code> annotation in the spec, or by using the <code class="literal">kn service</code> command with the correct flags. </p><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Optional: Set the <code class="literal">autoscaling.knative.dev/target</code> annotation for your Knative service in the spec of the <code class="literal">Service</code> custom resource: </p><div class="formalpara"><p class="title"><strong>Example service spec</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/target: "200"</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional: Use the <code class="literal">kn service</code> command to specify the <code class="literal">--concurrency-target</code> flag: </p><pre class="programlisting language-terminal">$ kn service create <service_name> --image <image_uri> --concurrency-target <integer></pre><div class="formalpara"><p class="title"><strong>Example command to create a service with a concurrency target of 50 requests</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-target 50</pre> <p></p></div></li></ul></div></section><section class="section" id="serverless-concurrency-limits-configure-hard_serverless-autoscaling-developer"><div class="titlepage"><div><div><h4 class="title">5.2.2.2. Configuring a hard concurrency limit</h4></div></div></div><p> A hard concurrency limit is a strictly enforced upper bound requests limit. If concurrency reaches the hard limit, surplus requests are buffered and must wait until there is enough free capacity to execute the requests. You can specify a hard concurrency limit for your Knative service by modifying the <code class="literal">containerConcurrency</code> spec, or by using the <code class="literal">kn service</code> command with the correct flags. </p><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Optional: Set the <code class="literal">containerConcurrency</code> spec for your Knative service in the spec of the <code class="literal">Service</code> custom resource: </p><div class="formalpara"><p class="title"><strong>Example service spec</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: spec: containerConcurrency: 50</pre> <p></p></div><p class="simpara"> The default value is <code class="literal">0</code>, which means that there is no limit on the number of simultaneous requests that are permitted to flow into one replica of the service at a time. </p><p class="simpara"> A value greater than <code class="literal">0</code> specifies the exact number of requests that are permitted to flow into one replica of the service at a time. This example would enable a hard concurrency limit of 50 requests. </p></li><li class="listitem"><p class="simpara"> Optional: Use the <code class="literal">kn service</code> command to specify the <code class="literal">--concurrency-limit</code> flag: </p><pre class="programlisting language-terminal">$ kn service create <service_name> --image <image_uri> --concurrency-limit <integer></pre><div class="formalpara"><p class="title"><strong>Example command to create a service with a concurrency limit of 50 requests</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-limit 50</pre> <p></p></div></li></ul></div></section><section class="section" id="serverless-target-utilization_serverless-autoscaling-developer"><div class="titlepage"><div><div><h4 class="title">5.2.2.3. Concurrency target utilization</h4></div></div></div><p> This value specifies the percentage of the concurrency limit that is actually targeted by the autoscaler. This is also known as specifying the <span class="emphasis"><em>hotness</em></span> at which a replica runs, which enables the autoscaler to scale up before the defined hard limit is reached. </p><p> For example, if the <code class="literal">containerConcurrency</code> value is set to 10, and the <code class="literal">target-utilization-percentage</code> value is set to 70 percent, the autoscaler creates a new replica when the average number of concurrent requests across all existing replicas reaches 7. Requests numbered 7 to 10 are still sent to the existing replicas, but additional replicas are started in anticipation of being required after the <code class="literal">containerConcurrency</code> value is reached. </p><div class="formalpara"><p class="title"><strong>Example service configured using the target-utilization-percentage annotation</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: template: metadata: annotations: autoscaling.knative.dev/target-utilization-percentage: "70" ...</pre> <p></p></div></section></section></section><section class="section" id="serverless-traffic-management"><div class="titlepage"><div><div><h2 class="title">5.3. Traffic management</h2></div></div></div><p> In a Knative application, traffic can be managed by creating a traffic split. A traffic split is configured as part of a route, which is managed by a Knative service. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/234e3aae5a480d45f77008f22617ce56/knative-service-architecture.png" alt="Traffic management for a Knative application"></div></div><p> Configuring a route allows requests to be sent to different revisions of a service. This routing is determined by the <code class="literal">traffic</code> spec of the <code class="literal">Service</code> object. </p><p> A <code class="literal">traffic</code> spec declaration consists of one or more revisions, each responsible for handling a portion of the overall traffic. The percentages of traffic routed to each revision must add up to 100%, which is ensured by a Knative validation. </p><p> The revisions specified in a <code class="literal">traffic</code> spec can either be a fixed, named revision, or can point to the “latest” revision, which tracks the head of the list of all revisions for the service. The "latest" revision is a type of floating reference that updates if a new revision is created. Each revision can have a tag attached that creates an additional access URL for that revision. </p><p> The <code class="literal">traffic</code> spec can be modified by: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Editing the YAML of a <code class="literal">Service</code> object directly. </li><li class="listitem"> Using the Knative (<code class="literal">kn</code>) CLI <code class="literal">--traffic</code> flag. </li><li class="listitem"> Using the OpenShift Container Platform web console. </li></ul></div><p> When you create a Knative service, it does not have any default <code class="literal">traffic</code> spec settings. </p><section class="section" id="serverless-traffic-management-spec-examples"><div class="titlepage"><div><div><h3 class="title">5.3.1. Traffic spec examples</h3></div></div></div><p> The following example shows a <code class="literal">traffic</code> spec where 100% of traffic is routed to the latest revision of the service. Under <code class="literal">status</code>, you can see the name of the latest revision that <code class="literal">latestRevision</code> resolves to: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: ... traffic: - latestRevision: true percent: 100 status: ... traffic: - percent: 100 revisionName: example-service</pre><p> The following example shows a <code class="literal">traffic</code> spec where 100% of traffic is routed to the revision tagged as <code class="literal">current</code>, and the name of that revision is specified as <code class="literal">example-service</code>. The revision tagged as <code class="literal">latest</code> is kept available, even though no traffic is routed to it: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: ... traffic: - tag: current revisionName: example-service percent: 100 - tag: latest latestRevision: true percent: 0</pre><p> The following example shows how the list of revisions in the <code class="literal">traffic</code> spec can be extended so that traffic is split between multiple revisions. This example sends 50% of traffic to the revision tagged as <code class="literal">current</code>, and 50% of traffic to the revision tagged as <code class="literal">candidate</code>. The revision tagged as <code class="literal">latest</code> is kept available, even though no traffic is routed to it: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: example-service namespace: default spec: ... traffic: - tag: current revisionName: example-service-1 percent: 50 - tag: candidate revisionName: example-service-2 percent: 50 - tag: latest latestRevision: true percent: 0</pre></section><section class="section" id="serverless-traffic-splitting-flags-kn_serverless-traffic-management"><div class="titlepage"><div><div><h3 class="title">5.3.2. Knative CLI traffic management flags</h3></div></div></div><p> The Knative (<code class="literal">kn</code>) CLI supports traffic operations on the traffic block of a service as part of the <code class="literal">kn service update</code> command. </p><p> The following table displays a summary of traffic splitting flags, value formats, and the operation the flag performs. The <span class="strong strong"><strong>Repetition</strong></span> column denotes whether repeating the particular value of flag is allowed in a <code class="literal">kn service update</code> command. </p><rh-table><table class="gt-4-cols lt-7-rows"><colgroup><col style="width: 25%; " class="col_1"><!--Empty--><col style="width: 25%; " class="col_2"><!--Empty--><col style="width: 25%; " class="col_3"><!--Empty--><col style="width: 25%; " class="col_4"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140155302457616" scope="col">Flag</th><th align="left" valign="top" id="idm140155302456528" scope="col">Value(s)</th><th align="left" valign="top" id="idm140155302455440" scope="col">Operation</th><th align="left" valign="top" id="idm140155302454352" scope="col">Repetition</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140155302457616"> <p> <code class="literal">--traffic</code> </p> </td><td align="left" valign="top" headers="idm140155302456528"> <p> <code class="literal">RevisionName=Percent</code> </p> </td><td align="left" valign="top" headers="idm140155302455440"> <p> Gives <code class="literal">Percent</code> traffic to <code class="literal">RevisionName</code> </p> </td><td align="left" valign="top" headers="idm140155302454352"> <p> Yes </p> </td></tr><tr><td align="left" valign="top" headers="idm140155302457616"> <p> <code class="literal">--traffic</code> </p> </td><td align="left" valign="top" headers="idm140155302456528"> <p> <code class="literal">Tag=Percent</code> </p> </td><td align="left" valign="top" headers="idm140155302455440"> <p> Gives <code class="literal">Percent</code> traffic to the revision having <code class="literal">Tag</code> </p> </td><td align="left" valign="top" headers="idm140155302454352"> <p> Yes </p> </td></tr><tr><td align="left" valign="top" headers="idm140155302457616"> <p> <code class="literal">--traffic</code> </p> </td><td align="left" valign="top" headers="idm140155302456528"> <p> <code class="literal">@latest=Percent</code> </p> </td><td align="left" valign="top" headers="idm140155302455440"> <p> Gives <code class="literal">Percent</code> traffic to the latest ready revision </p> </td><td align="left" valign="top" headers="idm140155302454352"> <p> No </p> </td></tr><tr><td align="left" valign="top" headers="idm140155302457616"> <p> <code class="literal">--tag</code> </p> </td><td align="left" valign="top" headers="idm140155302456528"> <p> <code class="literal">RevisionName=Tag</code> </p> </td><td align="left" valign="top" headers="idm140155302455440"> <p> Gives <code class="literal">Tag</code> to <code class="literal">RevisionName</code> </p> </td><td align="left" valign="top" headers="idm140155302454352"> <p> Yes </p> </td></tr><tr><td align="left" valign="top" headers="idm140155302457616"> <p> <code class="literal">--tag</code> </p> </td><td align="left" valign="top" headers="idm140155302456528"> <p> <code class="literal">@latest=Tag</code> </p> </td><td align="left" valign="top" headers="idm140155302455440"> <p> Gives <code class="literal">Tag</code> to the latest ready revision </p> </td><td align="left" valign="top" headers="idm140155302454352"> <p> No </p> </td></tr><tr><td align="left" valign="top" headers="idm140155302457616"> <p> <code class="literal">--untag</code> </p> </td><td align="left" valign="top" headers="idm140155302456528"> <p> <code class="literal">Tag</code> </p> </td><td align="left" valign="top" headers="idm140155302455440"> <p> Removes <code class="literal">Tag</code> from revision </p> </td><td align="left" valign="top" headers="idm140155302454352"> <p> Yes </p> </td></tr></tbody></table></rh-table><section class="section" id="serverless-traffic-splitting-flags-kn-precedence_serverless-traffic-management"><div class="titlepage"><div><div><h4 class="title">5.3.2.1. Multiple flags and order precedence</h4></div></div></div><p> All traffic-related flags can be specified using a single <code class="literal">kn service update</code> command. <code class="literal">kn</code> defines the precedence of these flags. The order of the flags specified when using the command is not taken into account. </p><p> The precedence of the flags as they are evaluated by <code class="literal">kn</code> are: </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> <code class="literal">--untag</code>: All the referenced revisions with this flag are removed from the traffic block. </li><li class="listitem"> <code class="literal">--tag</code>: Revisions are tagged as specified in the traffic block. </li><li class="listitem"> <code class="literal">--traffic</code>: The referenced revisions are assigned a portion of the traffic split. </li></ol></div><p> You can add tags to revisions and then split traffic according to the tags you have set. </p></section><section class="section" id="serverless-custom-revision-urls_serverless-traffic-management"><div class="titlepage"><div><div><h4 class="title">5.3.2.2. Custom URLs for revisions</h4></div></div></div><p> Assigning a <code class="literal">--tag</code> flag to a service by using the <code class="literal">kn service update</code> command creates a custom URL for the revision that is created when you update the service. The custom URL follows the pattern <code class="literal"><a class="link" href="https://<tag>-<service_name>-<namespace>.<domain>">https://<tag>-<service_name>-<namespace>.<domain></a></code> or <code class="literal"><a class="link" href="http://<tag>-<service_name>-<namespace>.<domain>">http://<tag>-<service_name>-<namespace>.<domain></a></code>. </p><p> The <code class="literal">--tag</code> and <code class="literal">--untag</code> flags use the following syntax: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Require one value. </li><li class="listitem"> Denote a unique tag in the traffic block of the service. </li><li class="listitem"> Can be specified multiple times in one command. </li></ul></div><section class="section" id="serverless-custom-revision-urls-assign_serverless-traffic-management"><div class="titlepage"><div><div><h5 class="title">5.3.2.2.1. Example: Assign a tag to a revision</h5></div></div></div><p> The following example assigns the tag <code class="literal">latest</code> to a revision named <code class="literal">example-revision</code>: </p><pre class="programlisting language-terminal">$ kn service update <service_name> --tag @latest=example-tag</pre></section><section class="section" id="serverless-custom-revision-urls-remove_serverless-traffic-management"><div class="titlepage"><div><div><h5 class="title">5.3.2.2.2. Example: Remove a tag from a revision</h5></div></div></div><p> You can remove a tag to remove the custom URL, by using the <code class="literal">--untag</code> flag. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> If a revision has its tags removed, and it is assigned 0% of the traffic, the revision is removed from the traffic block entirely. </p></div></rh-alert><p> The following command removes all tags from the revision named <code class="literal">example-revision</code>: </p><pre class="programlisting language-terminal">$ kn service update <service_name> --untag example-tag</pre></section></section></section><section class="section" id="serverless-create-traffic-split-kn_serverless-traffic-management"><div class="titlepage"><div><div><h3 class="title">5.3.3. Creating a traffic split by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to create traffic splits provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the <code class="literal">kn service update</code> command to split traffic between revisions of a service. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a Knative service. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Specify the revision of your service and what percentage of traffic you want to route to it by using the <code class="literal">--traffic</code> tag with a standard <code class="literal">kn service update</code> command: </p><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service update <service_name> --traffic <revision>=<percentage></pre> <p></p></div><p class="simpara"> Where: </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> <code class="literal"><service_name></code> is the name of the Knative service that you are configuring traffic routing for. </li><li class="listitem"> <code class="literal"><revision></code> is the revision that you want to configure to receive a percentage of traffic. You can either specify the name of the revision, or a tag that you assigned to the revision by using the <code class="literal">--tag</code> flag. </li><li class="listitem"> <code class="literal"><percentage></code> is the percentage of traffic that you want to send to the specified revision. </li></ul></div></li><li class="listitem"><p class="simpara"> Optional: The <code class="literal">--traffic</code> flag can be specified multiple times in one command. For example, if you have a revision tagged as <code class="literal">@latest</code> and a revision named <code class="literal">stable</code>, you can specify the percentage of traffic that you want to split to each revision as follows: </p><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service update example-service --traffic @latest=20,stable=80</pre> <p></p></div><p class="simpara"> If you have multiple revisions and do not specify the percentage of traffic that should be split to the last revision, the <code class="literal">--traffic</code> flag can calculate this automatically. For example, if you have a third revision named <code class="literal">example</code>, and you use the following command: </p><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service update example-service --traffic @latest=10,stable=60</pre> <p></p></div><p class="simpara"> The remaining 30% of traffic is split to the <code class="literal">example</code> revision, even though it was not specified. </p></li></ul></div></section><section class="section" id="odc-splitting-traffic-between-revisions-using-developer-perspective_serverless-traffic-management"><div class="titlepage"><div><div><h3 class="title">5.3.4. Managing traffic between revisions by using the OpenShift Container Platform web console</h3></div></div></div><p> After you create a serverless application, the application is displayed in the <span class="strong strong"><strong>Topology</strong></span> view of the <span class="strong strong"><strong>Developer</strong></span> perspective in the OpenShift Container Platform web console. The application revision is represented by the node, and the Knative service is indicated by a quadrilateral around the node. </p><p> Any new change in the code or the service configuration creates a new revision, which is a snapshot of the code at a given time. For a service, you can manage the traffic between the revisions of the service by splitting and routing it to the different revisions as required. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Serving are installed on your cluster. </li><li class="listitem"> You have logged in to the OpenShift Container Platform web console. </li></ul></div><div class="formalpara"><p class="title"><strong>Procedure</strong></p><p> To split traffic between multiple revisions of an application in the <span class="strong strong"><strong>Topology</strong></span> view: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> Click the Knative service to see its overview in the side panel. </li><li class="listitem"><p class="simpara"> Click the <span class="strong strong"><strong>Resources</strong></span> tab, to see a list of <span class="strong strong"><strong>Revisions</strong></span> and <span class="strong strong"><strong>Routes</strong></span> for the service. </p><div class="figure" id="idm140155302326416"><p class="title"><strong>Figure 5.1. Serverless application</strong></p><div class="figure-contents"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/dee36e4327463e13e0553f23d613a3c6/odc-serverless-app.png" alt="odc serverless app"></div></div></div></li><li class="listitem"> Click the service, indicated by the <span class="strong strong"><strong>S</strong></span> icon at the top of the side panel, to see an overview of the service details. </li><li class="listitem"> Click the <span class="strong strong"><strong>YAML</strong></span> tab and modify the service configuration in the YAML editor, and click <span class="strong strong"><strong>Save</strong></span>. For example, change the <code class="literal">timeoutseconds</code> from 300 to 301 . This change in the configuration triggers a new revision. In the <span class="strong strong"><strong>Topology</strong></span> view, the latest revision is displayed and the <span class="strong strong"><strong>Resources</strong></span> tab for the service now displays the two revisions. </li><li class="listitem"><p class="simpara"> In the <span class="strong strong"><strong>Resources</strong></span> tab, click <span class="guibutton">Set Traffic Distribution</span> to see the traffic distribution dialog box: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Add the split traffic percentage portion for the two revisions in the <span class="strong strong"><strong>Splits</strong></span> field. </li><li class="listitem"> Add tags to create custom URLs for the two revisions. </li><li class="listitem"><p class="simpara"> Click <span class="strong strong"><strong>Save</strong></span> to see two nodes representing the two revisions in the Topology view. </p><div class="figure" id="idm140155321974240"><p class="title"><strong>Figure 5.2. Serverless application revisions</strong></p><div class="figure-contents"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/4e53cb5d8f3c0e1d6c00fb9e5a30b3bc/odc-serverless-revisions.png" alt="odc serverless revisions"></div></div></div></li></ol></div></li></ol></div></section><section class="section" id="serverless-blue-green-deploy_serverless-traffic-management"><div class="titlepage"><div><div><h3 class="title">5.3.5. Routing and managing traffic by using a blue-green deployment strategy</h3></div></div></div><p> You can safely reroute traffic from a production version of an app to a new version, by using a <a class="link" href="https://en.wikipedia.org/wiki/Blue-green_deployment">blue-green deployment strategy</a>. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Serving are installed on the cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> Create and deploy an app as a Knative service. </li><li class="listitem"><p class="simpara"> Find the name of the first revision that was created when you deployed the service, by viewing the output from the following command: </p><pre class="programlisting language-terminal">$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'</pre><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ oc get ksvc example-service -o=jsonpath='{.status.latestCreatedRevisionName}'</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">$ example-service-00001</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Add the following YAML to the service <code class="literal">spec</code> to send inbound traffic to the revision: </p><pre class="programlisting language-yaml">... spec: traffic: - revisionName: <first_revision_name> percent: 100 # All traffic goes to this revision ...</pre></li><li class="listitem"><p class="simpara"> Verify that you can view your app at the URL output you get from running the following command: </p><pre class="programlisting language-terminal">$ oc get ksvc <service_name></pre></li><li class="listitem"> Deploy a second revision of your app by modifying at least one field in the <code class="literal">template</code> spec of the service and redeploying it. For example, you can modify the <code class="literal">image</code> of the service, or an <code class="literal">env</code> environment variable. You can redeploy the service by applying the service YAML file, or by using the <code class="literal">kn service update</code> command if you have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"><p class="simpara"> Find the name of the second, latest revision that was created when you redeployed the service, by running the command: </p><pre class="programlisting language-terminal">$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'</pre><p class="simpara"> At this point, both the first and second revisions of the service are deployed and running. </p></li><li class="listitem"><p class="simpara"> Update your existing service to create a new, test endpoint for the second revision, while still sending all other traffic to the first revision: </p><div class="formalpara"><p class="title"><strong>Example of updated service spec with test endpoint</strong></p><p> </p><pre class="programlisting language-yaml">... spec: traffic: - revisionName: <first_revision_name> percent: 100 # All traffic is still being routed to the first revision - revisionName: <second_revision_name> percent: 0 # No traffic is routed to the second revision tag: v2 # A named route ...</pre> <p></p></div><p class="simpara"> After you redeploy this service by reapplying the YAML resource, the second revision of the app is now staged. No traffic is routed to the second revision at the main URL, and Knative creates a new service named <code class="literal">v2</code> for testing the newly deployed revision. </p></li><li class="listitem"><p class="simpara"> Get the URL of the new service for the second revision, by running the following command: </p><pre class="programlisting language-terminal">$ oc get ksvc <service_name> --output jsonpath="{.status.traffic[*].url}"</pre><p class="simpara"> You can use this URL to validate that the new version of the app is behaving as expected before you route any traffic to it. </p></li><li class="listitem"><p class="simpara"> Update your existing service again, so that 50% of traffic is sent to the first revision, and 50% is sent to the second revision: </p><div class="formalpara"><p class="title"><strong>Example of updated service spec splitting traffic 50/50 between revisions</strong></p><p> </p><pre class="programlisting language-yaml">... spec: traffic: - revisionName: <first_revision_name> percent: 50 - revisionName: <second_revision_name> percent: 50 tag: v2 ...</pre> <p></p></div></li><li class="listitem"><p class="simpara"> When you are ready to route all traffic to the new version of the app, update the service again to send 100% of traffic to the second revision: </p><div class="formalpara"><p class="title"><strong>Example of updated service spec sending all traffic to the second revision</strong></p><p> </p><pre class="programlisting language-yaml">... spec: traffic: - revisionName: <first_revision_name> percent: 0 - revisionName: <second_revision_name> percent: 100 tag: v2 ...</pre> <p></p></div><rh-alert class="admonition tip" state="info"><div class="admonition_header" slot="header">Tip</div><div><p> You can remove the first revision instead of setting it to 0% of traffic if you do not plan to roll back the revision. Non-routeable revision objects are then garbage-collected. </p></div></rh-alert></li><li class="listitem"> Visit the URL of the first revision to verify that no more traffic is being sent to the old version of the app. </li></ol></div></section></section><section class="section" id="serverless-configuring-routes"><div class="titlepage"><div><div><h2 class="title">5.4. Routing</h2></div></div></div><p> Knative leverages OpenShift Container Platform TLS termination to provide routing for Knative services. When a Knative service is created, a OpenShift Container Platform route is automatically created for the service. This route is managed by the OpenShift Serverless Operator. The OpenShift Container Platform route exposes the Knative service through the same domain as the OpenShift Container Platform cluster. </p><p> You can disable Operator control of OpenShift Container Platform routing so that you can configure a Knative route to directly use your TLS certificates instead. </p><p> Knative routes can also be used alongside the OpenShift Container Platform route to provide additional fine-grained routing capabilities, such as traffic splitting. </p><section class="section" id="serverless-customize-labels-annotations-routes_serverless-configuring-routes"><div class="titlepage"><div><div><h3 class="title">5.4.1. Customizing labels and annotations for OpenShift Container Platform routes</h3></div></div></div><p> OpenShift Container Platform routes support the use of custom labels and annotations, which you can configure by modifying the <code class="literal">metadata</code> spec of a Knative service. Custom labels and annotations are propagated from the service to the Knative route, then to the Knative ingress, and finally to the OpenShift Container Platform route. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You must have the OpenShift Serverless Operator and Knative Serving installed on your OpenShift Container Platform cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a Knative service that contains the label or annotation that you want to propagate to the OpenShift Container Platform route: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> To create a service by using YAML: </p><div class="formalpara"><p class="title"><strong>Example service created by using YAML</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> labels: <label_name>: <label_value> annotations: <annotation_name>: <annotation_value> ...</pre> <p></p></div></li><li class="listitem"><p class="simpara"> To create a service by using the Knative (<code class="literal">kn</code>) CLI, enter: </p><div class="formalpara"><p class="title"><strong>Example service created by using a <code class="literal">kn</code> command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service create <service_name> \ --image=<image> \ --annotation <annotation_name>=<annotation_value> \ --label <label_value>=<label_value></pre> <p></p></div></li></ul></div></li><li class="listitem"><p class="simpara"> Verify that the OpenShift Container Platform route has been created with the annotation or label that you added by inspecting the output from the following command: </p><div class="formalpara"><p class="title"><strong>Example command for verification</strong></p><p> </p><pre class="programlisting language-terminal">$ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=<service_name> \ <span id="CO9-1"><!--Empty--></span><span class="callout">1</span> -l serving.knative.openshift.io/ingressNamespace=<service_namespace> \ <span id="CO9-2"><!--Empty--></span><span class="callout">2</span> -n knative-serving-ingress -o yaml \ | grep -e "<label_name>: \"<label_value>\"" -e "<annotation_name>: <annotation_value>" <span id="CO9-3"><!--Empty--></span><span class="callout">3</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO9-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Use the name of your service. </div></dd><dt><a href="#CO9-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Use the namespace where your service was created. </div></dd><dt><a href="#CO9-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Use your values for the label and annotation names and values. </div></dd></dl></div></li></ol></div></section><section class="section" id="serverless-openshift-routes_serverless-configuring-routes"><div class="titlepage"><div><div><h3 class="title">5.4.2. Configuring OpenShift Container Platform routes for Knative services</h3></div></div></div><p> If you want to configure a Knative service to use your TLS certificate on OpenShift Container Platform, you must disable the automatic creation of a route for the service by the OpenShift Serverless Operator and instead manually create a route for the service. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> When you complete the following procedure, the default OpenShift Container Platform route in the <code class="literal">knative-serving-ingress</code> namespace is not created. However, the Knative route for the application is still created in this namespace. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Serving component must be installed on your OpenShift Container Platform cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a Knative service that includes the <code class="literal">serving.knative.openshift.io/disableRoute=true</code> annotation: </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> The <code class="literal">serving.knative.openshift.io/disableRoute=true</code> annotation instructs OpenShift Serverless to not automatically create a route for you. However, the service still shows a URL and reaches a status of <code class="literal">Ready</code>. This URL does not work externally until you create your own route with the same hostname as the hostname in the URL. </p></div></rh-alert><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create a Knative <code class="literal">Service</code> resource: </p><div class="formalpara"><p class="title"><strong>Example resource</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: <service_name> annotations: serving.knative.openshift.io/disableRoute: "true" spec: template: spec: containers: - image: <image> ...</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">Service</code> resource: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li><li class="listitem"><p class="simpara"> Optional. Create a Knative service by using the <code class="literal">kn service create</code> command: </p><div class="formalpara"><p class="title"><strong>Example <code class="literal">kn</code> command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn service create <service_name> \ --image=gcr.io/knative-samples/helloworld-go \ --annotation serving.knative.openshift.io/disableRoute=true</pre> <p></p></div></li></ol></div></li><li class="listitem"><p class="simpara"> Verify that no OpenShift Container Platform route has been created for the service: </p><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ $ oc get routes.route.openshift.io \ -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \ -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \ -n knative-serving-ingress</pre> <p></p></div><p class="simpara"> You will see the following output: </p><pre class="programlisting language-terminal">No resources found in knative-serving-ingress namespace.</pre></li><li class="listitem"><p class="simpara"> Create a <code class="literal">Route</code> resource in the <code class="literal">knative-serving-ingress</code> namespace: </p><pre class="programlisting language-yaml">apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: haproxy.router.openshift.io/timeout: 600s <span id="CO10-1"><!--Empty--></span><span class="callout">1</span> name: <route_name> <span id="CO10-2"><!--Empty--></span><span class="callout">2</span> namespace: knative-serving-ingress <span id="CO10-3"><!--Empty--></span><span class="callout">3</span> spec: host: <service_host> <span id="CO10-4"><!--Empty--></span><span class="callout">4</span> port: targetPort: http2 to: kind: Service name: kourier weight: 100 tls: insecureEdgeTerminationPolicy: Allow termination: edge <span id="CO10-5"><!--Empty--></span><span class="callout">5</span> key: |- -----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- certificate: |- -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- caCertificate: |- -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE---- wildcardPolicy: None</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO10-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The timeout value for the OpenShift Container Platform route. You must set the same value as the <code class="literal">max-revision-timeout-seconds</code> setting (<code class="literal">600s</code> by default). </div></dd><dt><a href="#CO10-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The name of the OpenShift Container Platform route. </div></dd><dt><a href="#CO10-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The namespace for the OpenShift Container Platform route. This must be <code class="literal">knative-serving-ingress</code>. </div></dd><dt><a href="#CO10-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The hostname for external access. You can set this to <code class="literal"><service_name>-<service_namespace>.<domain></code>. </div></dd><dt><a href="#CO10-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The certificates you want to use. Currently, only <code class="literal">edge</code> termination is supported. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">Route</code> resource: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section><section class="section" id="knative-service-cluster-local_serverless-configuring-routes"><div class="titlepage"><div><div><h3 class="title">5.4.3. Setting cluster availability to cluster local</h3></div></div></div><p> By default, Knative services are published to a public IP address. Being published to a public IP address means that Knative services are public applications, and have a publicly accessible URL. </p><p> Publicly accessible URLs are accessible from outside of the cluster. However, developers may need to build back-end services that are only be accessible from inside the cluster, known as <span class="emphasis"><em>private services</em></span>. Developers can label individual services in the cluster with the <code class="literal">networking.knative.dev/visibility=cluster-local</code> label to make them private. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> For OpenShift Serverless 1.15.0 and newer versions, the <code class="literal">serving.knative.dev/visibility</code> label is no longer available. You must update existing services to use the <code class="literal">networking.knative.dev/visibility</code> label instead. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Serving are installed on the cluster. </li><li class="listitem"> You have created a Knative service. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Set the visibility for your service by adding the <code class="literal">networking.knative.dev/visibility=cluster-local</code> label: </p><pre class="programlisting language-terminal">$ oc label ksvc <service_name> networking.knative.dev/visibility=cluster-local</pre></li></ul></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Check that the URL for your service is now in the format <code class="literal">http://<service_name>.<namespace>.svc.cluster.local</code>, by entering the following command and reviewing the output: </p><pre class="programlisting language-termina">$ oc get ksvc</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME URL LATESTCREATED LATESTREADY READY REASON hello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 True</pre> <p></p></div></li></ul></div></section><section class="section _additional-resources" id="additional-resources_serverless-configuring-routes"><div class="titlepage"><div><div><h3 class="title">5.4.4. Additional resources</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/networking/#nw-route-specific-annotations_route-configuration">Route-specific annotations</a> </li></ul></div></section></section><section class="section" id="serverless-event-sinks"><div class="titlepage"><div><div><h2 class="title">5.5. Event sinks</h2></div></div></div><p> When you create an event source, you can specify a sink where events are sent to from the source. A sink is an addressable or a callable resource that can receive incoming events from other resources. Knative services, channels and brokers are all examples of sinks. </p><p> Addressable objects receive and acknowledge an event delivered over HTTP to an address defined in their <code class="literal">status.address.url</code> field. As a special case, the core Kubernetes <code class="literal">Service</code> object also fulfills the addressable interface. </p><p> Callable objects are able to receive an event delivered over HTTP and transform the event, returning <code class="literal">0</code> or <code class="literal">1</code> new events in the HTTP response. These returned events may be further processed in the same way that events from an external event source are processed. </p><section class="section" id="specifying-sink-flag-kn_serverless-event-sinks"><div class="titlepage"><div><div><h3 class="title">5.5.1. Knative CLI sink flag</h3></div></div></div><p> When you create an event source by using the Knative (<code class="literal">kn</code>) CLI, you can specify a sink where events are sent to from that resource by using the <code class="literal">--sink</code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources. </p><p> The following example creates a sink binding that uses a service, <code class="literal">http://event-display.svc.cluster.local</code>, as the sink: </p><div class="formalpara"><p class="title"><strong>Example command using the sink flag</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ <span id="CO11-1"><!--Empty--></span><span class="callout">1</span> --ce-override "sink=bound"</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO11-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">svc</code> in <code class="literal">http://event-display.svc.cluster.local</code> determines that the sink is a Knative service. Other default sink prefixes include <code class="literal">channel</code>, and <code class="literal">broker</code>. </div></dd></dl></div><rh-alert class="admonition tip" state="info"><div class="admonition_header" slot="header">Tip</div><div><p> You can configure which CRs can be used with the <code class="literal">--sink</code> flag for Knative (<code class="literal">kn</code>) CLI commands by <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#advanced-kn-config">Customizing <code class="literal">kn</code></a>. </p></div></rh-alert></section><section class="section" id="serverless-connect-sink-source-odc_serverless-event-sinks"><div class="titlepage"><div><div><h3 class="title">5.5.2. Connect an event source to a sink using the Developer perspective</h3></div></div></div><p> When you create an event source by using the OpenShift Container Platform web console, you can specify a sink that events are sent to from that source. The sink can be any addressable or callable resource that can receive incoming events from other resources. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have logged in to the web console and are in the <span class="strong strong"><strong>Developer</strong></span> perspective. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have created a sink, such as a Knative service, channel or broker. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> Create an event source of any type, by navigating to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>Event Source</strong></span> and selecting the event source type that you want to create. </li><li class="listitem"> In the <span class="strong strong"><strong>Sink</strong></span> section of the <span class="strong strong"><strong>Create Event Source</strong></span> form view, select your sink in the <span class="strong strong"><strong>Resource</strong></span> list. </li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the event source was created and is connected to the sink by viewing the <span class="strong strong"><strong>Topology</strong></span> page. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>Topology</strong></span>. </li><li class="listitem"> View the event source and click the connected sink to see the sink details in the right panel. </li></ol></div></section><section class="section" id="serverless-connect-trigger-sink_serverless-event-sinks"><div class="titlepage"><div><div><h3 class="title">5.5.3. Connecting a trigger to a sink</h3></div></div></div><p> You can connect a trigger to a sink, so that events from a broker are filtered before they are sent to the sink. A sink that is connected to a trigger is configured as a <code class="literal">subscriber</code> in the <code class="literal">Trigger</code> object’s resource spec. </p><div class="formalpara"><p class="title"><strong>Example of a <code class="literal">Trigger</code> object connected to a Kafka sink</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: <trigger_name> <span id="CO12-1"><!--Empty--></span><span class="callout">1</span> spec: ... subscriber: ref: apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink name: <kafka_sink_name> <span id="CO12-2"><!--Empty--></span><span class="callout">2</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO12-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the trigger being connected to the sink. </div></dd><dt><a href="#CO12-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The name of a <code class="literal">KafkaSink</code> object. </div></dd></dl></div></section></section><section class="section" id="serverless-event-delivery"><div class="titlepage"><div><div><h2 class="title">5.6. Event delivery</h2></div></div></div><p> You can configure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. Configuring event delivery parameters, including a dead letter sink, ensures that any events that fail to be delivered to an event sink are retried. Otherwise, undelivered events are dropped. </p><section class="section" id="serverless-event-delivery-component-behaviors_serverless-event-delivery"><div class="titlepage"><div><div><h3 class="title">5.6.1. Event delivery behavior patterns for channels and brokers</h3></div></div></div><p> Different channel and broker types have their own behavior patterns that are followed for event delivery. </p><section class="section" id="serverless-event-delivery-component-behaviors-kafka_serverless-event-delivery"><div class="titlepage"><div><div><h4 class="title">5.6.1.1. Knative Kafka channels and brokers</h4></div></div></div><p> If an event is successfully delivered to a Kafka channel or broker receiver, the receiver responds with a <code class="literal">202</code> status code, which means that the event has been safely stored inside a Kafka topic and is not lost. </p><p> If the receiver responds with any other status code, the event is not safely stored, and steps must be taken by the user to resolve the issue. </p></section></section><section class="section" id="serverless-event-delivery-parameters_serverless-event-delivery"><div class="titlepage"><div><div><h3 class="title">5.6.2. Configurable event delivery parameters</h3></div></div></div><p> The following parameters can be configured for event delivery: </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Dead letter sink</span></dt><dd> You can configure the <code class="literal">deadLetterSink</code> delivery parameter so that if an event fails to be delivered, it is stored in the specified event sink. Undelivered events that are not stored in a dead letter sink are dropped. The dead letter sink be any addressable object that conforms to the Knative Eventing sink contract, such as a Knative service, a Kubernetes service, or a URI. </dd><dt><span class="term">Retries</span></dt><dd> You can set a minimum number of times that the delivery must be retried before the event is sent to the dead letter sink, by configuring the <code class="literal">retry</code> delivery parameter with an integer value. </dd><dt><span class="term">Back off delay</span></dt><dd> You can set the <code class="literal">backoffDelay</code> delivery parameter to specify the time delay before an event delivery retry is attempted after a failure. The duration of the <code class="literal">backoffDelay</code> parameter is specified using the <a class="link" href="https://en.wikipedia.org/wiki/ISO_8601#Durations">ISO 8601</a> format. For example, <code class="literal">PT1S</code> specifies a 1 second delay. </dd><dt><span class="term">Back off policy</span></dt><dd> The <code class="literal">backoffPolicy</code> delivery parameter can be used to specify the retry back off policy. The policy can be specified as either <code class="literal">linear</code> or <code class="literal">exponential</code>. When using the <code class="literal">linear</code> back off policy, the back off delay is equal to <code class="literal">backoffDelay * <numberOfRetries></code>. When using the <code class="literal">exponential</code> backoff policy, the back off delay is equal to <code class="literal">backoffDelay*2^<numberOfRetries></code>. </dd></dl></div></section><section class="section" id="serverless-configuring-event-delivery-examples_serverless-event-delivery"><div class="titlepage"><div><div><h3 class="title">5.6.3. Examples of configuring event delivery parameters</h3></div></div></div><p> You can configure event delivery parameters for <code class="literal">Broker</code>, <code class="literal">Trigger</code>, <code class="literal">Channel</code>, and <code class="literal">Subscription</code> objects. If you configure event delivery parameters for a broker or channel, these parameters are propagated to triggers or subscriptions created for those objects. You can also set event delivery parameters for triggers or subscriptions to override the settings for the broker or channel. </p><div class="formalpara"><p class="title"><strong>Example <code class="literal">Broker</code> object</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Broker metadata: ... spec: delivery: deadLetterSink: ref: apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example <code class="literal">Trigger</code> object</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: ... spec: broker: <broker_name> delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example <code class="literal">Channel</code> object</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: messaging.knative.dev/v1 kind: Channel metadata: ... spec: delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example <code class="literal">Subscription</code> object</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: messaging.knative.dev/v1 kind: Subscription metadata: ... spec: channel: apiVersion: messaging.knative.dev/v1 kind: Channel name: <channel_name> delivery: deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: <sink_name> backoffDelay: <duration> backoffPolicy: <policy_type> retry: <integer> ...</pre> <p></p></div></section><section class="section" id="trigger-event-delivery-config_serverless-event-delivery"><div class="titlepage"><div><div><h3 class="title">5.6.4. Configuring event delivery ordering for triggers</h3></div></div></div><p> If you are using a Kafka broker, you can configure the delivery order of events from triggers to event sinks. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and Knative Kafka are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> Kafka broker is enabled for use on your cluster, and you have created a Kafka broker. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have installed the OpenShift (<code class="literal">oc</code>) CLI. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create or modify a <code class="literal">Trigger</code> object and set the <code class="literal">kafka.eventing.knative.dev/delivery.order</code> annotation: </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: <trigger_name> annotations: kafka.eventing.knative.dev/delivery.order: ordered ...</pre><p class="simpara"> The supported consumer delivery guarantees are: </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">unordered</code></span></dt><dd> An unordered consumer is a non-blocking consumer that delivers messages unordered, while preserving proper offset management. </dd><dt><span class="term"><code class="literal">ordered</code></span></dt><dd><p class="simpara"> An ordered consumer is a per-partition blocking consumer that waits for a successful response from the CloudEvent subscriber before it delivers the next message of the partition. </p><p class="simpara"> The default ordering guarantee is <code class="literal">unordered</code>. </p></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">Trigger</code> object: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section></section><section class="section" id="serverless-listing-event-sources"><div class="titlepage"><div><div><h2 class="title">5.7. Listing event sources and event source types</h2></div></div></div><p> It is possible to view a list of all event sources or event source types that exist or are available for use on your OpenShift Container Platform cluster. You can use the Knative (<code class="literal">kn</code>) CLI or the <span class="strong strong"><strong>Developer</strong></span> perspective in the OpenShift Container Platform web console to list available event sources or event source types. </p><section class="section" id="serverless-list-source-types-kn_serverless-listing-event-sources"><div class="titlepage"><div><div><h3 class="title">5.7.1. Listing available event source types by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI provides a streamlined and intuitive user interface to view available event source types on your cluster. You can list event source types that can be created and used on your cluster by using the <code class="literal">kn source list-types</code> CLI command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> List the available event source types in the terminal: </p><pre class="programlisting language-terminal">$ kn source list-types</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">TYPE NAME DESCRIPTION ApiServerSource apiserversources.sources.knative.dev Watch and send Kubernetes API events to a sink PingSource pingsources.sources.knative.dev Periodically send ping events to a sink SinkBinding sinkbindings.sources.knative.dev Binding for connecting a PodSpecable to a sink</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional: You can also list the available event source types in YAML format: </p><pre class="programlisting language-terminal">$ kn source list-types -o yaml</pre></li></ol></div></section><section class="section" id="serverless-list-source-types-odc_serverless-listing-event-sources"><div class="titlepage"><div><div><h3 class="title">5.7.2. Viewing available event source types within the Developer perspective</h3></div></div></div><p> It is possible to view a list of all available event source types on your cluster. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to view available event source types. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have logged in to the OpenShift Container Platform web console. </li><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> Access the <span class="strong strong"><strong>Developer</strong></span> perspective. </li><li class="listitem"> Click <span class="strong strong"><strong>+Add</strong></span>. </li><li class="listitem"> Click <span class="strong strong"><strong>Event Source</strong></span>. </li><li class="listitem"> View the available event source types. </li></ol></div></section><section class="section" id="serverless-list-source_serverless-listing-event-sources"><div class="titlepage"><div><div><h3 class="title">5.7.3. Listing available event sources by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI provides a streamlined and intuitive user interface to view existing event sources on your cluster. You can list existing event sources by using the <code class="literal">kn source list</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> List the existing event sources in the terminal: </p><pre class="programlisting language-terminal">$ kn source list</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME TYPE RESOURCE SINK READY a1 ApiServerSource apiserversources.sources.knative.dev ksvc:eshow2 True b1 SinkBinding sinkbindings.sources.knative.dev ksvc:eshow3 False p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 True</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional: You can list event sources of a specific type only, by using the <code class="literal">--type</code> flag: </p><pre class="programlisting language-terminal">$ kn source list --type <event_source_type></pre><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source list --type PingSource</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME TYPE RESOURCE SINK READY p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 True</pre> <p></p></div></li></ol></div></section></section><section class="section" id="serverless-apiserversource"><div class="titlepage"><div><div><h2 class="title">5.8. Creating an API server source</h2></div></div></div><p> The API server source is an event source that can be used to connect an event sink, such as a Knative service, to the Kubernetes API server. The API server source watches for Kubernetes events and forwards them to the Knative Eventing broker. </p><section class="section" id="odc-creating-apiserversource_serverless-apiserversource"><div class="titlepage"><div><div><h3 class="title">5.8.1. Creating an API server source by using the web console</h3></div></div></div><p> After Knative Eventing is installed on your cluster, you can create an API server source by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create an event source. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have logged in to the OpenShift Container Platform web console. </li><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have installed the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Procedure</div><div><p> If you want to re-use an existing service account, you can modify your existing <code class="literal">ServiceAccount</code> resource to include the required permissions instead of creating a new resource. </p></div></rh-alert><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a service account, role, and role binding for the event source as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: ServiceAccount metadata: name: events-sa namespace: default <span id="CO13-1"><!--Empty--></span><span class="callout">1</span> --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: event-watcher namespace: default <span id="CO13-2"><!--Empty--></span><span class="callout">2</span> rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: k8s-ra-event-watcher namespace: default <span id="CO13-3"><!--Empty--></span><span class="callout">3</span> roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: event-watcher subjects: - kind: ServiceAccount name: events-sa namespace: default <span id="CO13-4"><!--Empty--></span><span class="callout">4</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO13-1"><span class="callout">1</span></a> <a href="#CO13-2"><span class="callout">2</span></a> <a href="#CO13-3"><span class="callout">3</span></a> <a href="#CO13-4"><span class="callout">4</span></a> </dt><dd><div class="para"> Change this namespace to the namespace that you have selected for installing the event source. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>Event Source</strong></span>. The <span class="strong strong"><strong>Event Sources</strong></span> page is displayed. </li><li class="listitem"> Optional: If you have multiple providers for your event sources, select the required provider from the <span class="strong strong"><strong>Providers</strong></span> list to filter the available event sources from the provider. </li><li class="listitem"> Select <span class="strong strong"><strong>ApiServerSource</strong></span> and then click <span class="strong strong"><strong>Create Event Source</strong></span>. The <span class="strong strong"><strong>Create Event Source</strong></span> page is displayed. </li><li class="listitem"><p class="simpara"> Configure the <span class="strong strong"><strong>ApiServerSource</strong></span> settings by using the <span class="strong strong"><strong>Form view</strong></span> or <span class="strong strong"><strong>YAML view</strong></span>: </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> You can switch between the <span class="strong strong"><strong>Form view</strong></span> and <span class="strong strong"><strong>YAML view</strong></span>. The data is persisted when switching between the views. </p></div></rh-alert><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Enter <code class="literal">v1</code> as the <span class="strong strong"><strong>APIVERSION</strong></span> and <code class="literal">Event</code> as the <span class="strong strong"><strong>KIND</strong></span>. </li><li class="listitem"> Select the <span class="strong strong"><strong>Service Account Name</strong></span> for the service account that you created. </li><li class="listitem"> Select the <span class="strong strong"><strong>Sink</strong></span> for the event source. A <span class="strong strong"><strong>Sink</strong></span> can be either a <span class="strong strong"><strong>Resource</strong></span>, such as a channel, broker, or service, or a <span class="strong strong"><strong>URI</strong></span>. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> After you have created the API server source, you will see it connected to the service it is sinked to in the <span class="strong strong"><strong>Topology</strong></span> view. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/db87be151908745bc9955ae14c339869/toplogy-odc-apiserver.png" alt="ApiServerSource Topology view"></div></div></li></ul></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> If a URI sink is used, modify the URI by right-clicking on <span class="strong strong"><strong>URI sink</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>Edit URI</strong></span>. </p></div></rh-alert><div class="orderedlist"><p class="title"><strong>Deleting the API server source</strong></p><ol class="orderedlist" type="1"><li class="listitem"> Navigate to the <span class="strong strong"><strong>Topology</strong></span> view. </li><li class="listitem"><p class="simpara"> Right-click the API server source and select <span class="strong strong"><strong>Delete ApiServerSource</strong></span>. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/2efd3fc303c63556343fbe20d0d42bd7/delete-apiserversource-odc.png" alt="Delete the ApiServerSource"></div></div></li></ol></div></section><section class="section" id="apiserversource-kn_serverless-apiserversource"><div class="titlepage"><div><div><h3 class="title">5.8.2. Creating an API server source by using the Knative CLI</h3></div></div></div><p> You can use the <code class="literal">kn source apiserver create</code> command to create an API server source by using the <code class="literal">kn</code> CLI. Using the <code class="literal">kn</code> CLI to create an API server source provides a more streamlined and intuitive user interface than modifying YAML files directly. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have installed the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Procedure</div><div><p> If you want to re-use an existing service account, you can modify your existing <code class="literal">ServiceAccount</code> resource to include the required permissions instead of creating a new resource. </p></div></rh-alert><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a service account, role, and role binding for the event source as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: ServiceAccount metadata: name: events-sa namespace: default <span id="CO14-1"><!--Empty--></span><span class="callout">1</span> --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: event-watcher namespace: default <span id="CO14-2"><!--Empty--></span><span class="callout">2</span> rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: k8s-ra-event-watcher namespace: default <span id="CO14-3"><!--Empty--></span><span class="callout">3</span> roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: event-watcher subjects: - kind: ServiceAccount name: events-sa namespace: default <span id="CO14-4"><!--Empty--></span><span class="callout">4</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO14-1"><span class="callout">1</span></a> <a href="#CO14-2"><span class="callout">2</span></a> <a href="#CO14-3"><span class="callout">3</span></a> <a href="#CO14-4"><span class="callout">4</span></a> </dt><dd><div class="para"> Change this namespace to the namespace that you have selected for installing the event source. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li><li class="listitem"><p class="simpara"> Create an API server source that has an event sink. In the following example, the sink is a broker: </p><pre class="programlisting language-terminal">$ kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode Resource</pre></li><li class="listitem"><p class="simpara"> To check that the API server source is set up correctly, create a Knative service that dumps incoming messages to its log: </p><pre class="programlisting language-terminal">$ kn service create <service_name> --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre></li><li class="listitem"><p class="simpara"> If you used a broker as an event sink, create a trigger to filter events from the <code class="literal">default</code> broker to the service: </p><pre class="programlisting language-terminal">$ kn trigger create <trigger_name> --sink ksvc:<service_name></pre></li><li class="listitem"><p class="simpara"> Create events by launching a pod in the default namespace: </p><pre class="programlisting language-terminal">$ oc create deployment hello-node --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre></li><li class="listitem"><p class="simpara"> Check that the controller is mapped correctly by inspecting the output generated by the following command: </p><pre class="programlisting language-terminal">$ kn source apiserver describe <source_name></pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: mysource Namespace: default Annotations: sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer Age: 3m ServiceAccountName: events-sa Mode: Resource Sink: Name: default Namespace: default Kind: Broker (eventing.knative.dev/v1) Resources: Kind: event (v1) Controller: false Conditions: OK TYPE AGE REASON ++ Ready 3m ++ Deployed 3m ++ SinkProvided 3m ++ SufficientPermissions 3m ++ EventTypesProvided 3m</pre> <p></p></div></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the Kubernetes events were sent to Knative by looking at the message dumper function logs. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Get the pods: </p><pre class="programlisting language-terminal">$ oc get pods</pre></li><li class="listitem"><p class="simpara"> View the message dumper function logs for the pods: </p><pre class="programlisting language-terminal">$ oc logs $(oc get pod -o name | grep event-display) -c user-container</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.apiserver.resource.update datacontenttype: application/json ... Data, { "apiVersion": "v1", "involvedObject": { "apiVersion": "v1", "fieldPath": "spec.containers{hello-node}", "kind": "Pod", "name": "hello-node", "namespace": "default", ..... }, "kind": "Event", "message": "Started container", "metadata": { "name": "hello-node.159d7608e3a3572c", "namespace": "default", .... }, "reason": "Started", ... }</pre> <p></p></div></li></ol></div><div class="orderedlist"><p class="title"><strong>Deleting the API server source</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Delete the trigger: </p><pre class="programlisting language-terminal">$ kn trigger delete <trigger_name></pre></li><li class="listitem"><p class="simpara"> Delete the event source: </p><pre class="programlisting language-terminal">$ kn source apiserver delete <source_name></pre></li><li class="listitem"><p class="simpara"> Delete the service account, cluster role, and cluster binding: </p><pre class="programlisting language-terminal">$ oc delete -f authentication.yaml</pre></li></ol></div><section class="section" id="specifying-sink-flag-kn_serverless-apiserversource"><div class="titlepage"><div><div><h4 class="title">5.8.2.1. Knative CLI sink flag</h4></div></div></div><p> When you create an event source by using the Knative (<code class="literal">kn</code>) CLI, you can specify a sink where events are sent to from that resource by using the <code class="literal">--sink</code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources. </p><p> The following example creates a sink binding that uses a service, <code class="literal">http://event-display.svc.cluster.local</code>, as the sink: </p><div class="formalpara"><p class="title"><strong>Example command using the sink flag</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ <span id="CO15-1"><!--Empty--></span><span class="callout">1</span> --ce-override "sink=bound"</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO15-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">svc</code> in <code class="literal">http://event-display.svc.cluster.local</code> determines that the sink is a Knative service. Other default sink prefixes include <code class="literal">channel</code>, and <code class="literal">broker</code>. </div></dd></dl></div></section></section><section class="section" id="apiserversource-yaml_context"><div class="titlepage"><div><div><h3 class="title">5.8.3. Creating an API server source by using YAML files</h3></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe event sources declaratively and in a reproducible manner. To create an API server source by using YAML, you must create a YAML file that defines an <code class="literal">ApiServerSource</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have created the <code class="literal">default</code> broker in the same namespace as the one defined in the API server source YAML file. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Procedure</div><div><p> If you want to re-use an existing service account, you can modify your existing <code class="literal">ServiceAccount</code> resource to include the required permissions instead of creating a new resource. </p></div></rh-alert><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a service account, role, and role binding for the event source as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: ServiceAccount metadata: name: events-sa namespace: default <span id="CO16-1"><!--Empty--></span><span class="callout">1</span> --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: event-watcher namespace: default <span id="CO16-2"><!--Empty--></span><span class="callout">2</span> rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: k8s-ra-event-watcher namespace: default <span id="CO16-3"><!--Empty--></span><span class="callout">3</span> roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: event-watcher subjects: - kind: ServiceAccount name: events-sa namespace: default <span id="CO16-4"><!--Empty--></span><span class="callout">4</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO16-1"><span class="callout">1</span></a> <a href="#CO16-2"><span class="callout">2</span></a> <a href="#CO16-3"><span class="callout">3</span></a> <a href="#CO16-4"><span class="callout">4</span></a> </dt><dd><div class="para"> Change this namespace to the namespace that you have selected for installing the event source. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li><li class="listitem"><p class="simpara"> Create an API server source as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1alpha1 kind: ApiServerSource metadata: name: testevents spec: serviceAccountName: events-sa mode: Resource resources: - apiVersion: v1 kind: Event sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: default</pre></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">ApiServerSource</code> YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li><li class="listitem"><p class="simpara"> To check that the API server source is set up correctly, create a Knative service as a YAML file that dumps incoming messages to its log: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">Service</code> YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li><li class="listitem"><p class="simpara"> Create a <code class="literal">Trigger</code> object as a YAML file that filters events from the <code class="literal">default</code> broker to the service created in the previous step: </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: event-display-trigger namespace: default spec: broker: default subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display</pre></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">Trigger</code> YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li><li class="listitem"><p class="simpara"> Create events by launching a pod in the default namespace: </p><pre class="programlisting language-terminal">$ oc create deployment hello-node --image=quay.io/openshift-knative/knative-eventing-sources-event-display</pre></li><li class="listitem"><p class="simpara"> Check that the controller is mapped correctly, by entering the following command and inspecting the output: </p><pre class="programlisting language-terminal">$ oc get apiserversource.sources.knative.dev testevents -o yaml</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1alpha1 kind: ApiServerSource metadata: annotations: creationTimestamp: "2020-04-07T17:24:54Z" generation: 1 name: testevents namespace: default resourceVersion: "62868" selfLink: /apis/sources.knative.dev/v1alpha1/namespaces/default/apiserversources/testevents2 uid: 1603d863-bb06-4d1c-b371-f580b4db99fa spec: mode: Resource resources: - apiVersion: v1 controller: false controllerSelector: apiVersion: "" kind: "" name: "" uid: "" kind: Event labelSelector: {} serviceAccountName: events-sa sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: default</pre> <p></p></div></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> To verify that the Kubernetes events were sent to Knative, you can look at the message dumper function logs. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Get the pods by entering the following command: </p><pre class="programlisting language-terminal">$ oc get pods</pre></li><li class="listitem"><p class="simpara"> View the message dumper function logs for the pods by entering the following command: </p><pre class="programlisting language-terminal">$ oc logs $(oc get pod -o name | grep event-display) -c user-container</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.apiserver.resource.update datacontenttype: application/json ... Data, { "apiVersion": "v1", "involvedObject": { "apiVersion": "v1", "fieldPath": "spec.containers{hello-node}", "kind": "Pod", "name": "hello-node", "namespace": "default", ..... }, "kind": "Event", "message": "Started container", "metadata": { "name": "hello-node.159d7608e3a3572c", "namespace": "default", .... }, "reason": "Started", ... }</pre> <p></p></div></li></ol></div><div class="orderedlist"><p class="title"><strong>Deleting the API server source</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Delete the trigger: </p><pre class="programlisting language-terminal">$ oc delete -f trigger.yaml</pre></li><li class="listitem"><p class="simpara"> Delete the event source: </p><pre class="programlisting language-terminal">$ oc delete -f k8s-events.yaml</pre></li><li class="listitem"><p class="simpara"> Delete the service account, cluster role, and cluster binding: </p><pre class="programlisting language-terminal">$ oc delete -f authentication.yaml</pre></li></ol></div></section></section><section class="section" id="serverless-pingsource"><div class="titlepage"><div><div><h2 class="title">5.9. Creating a ping source</h2></div></div></div><p> A ping source is an event source that can be used to periodically send ping events with a constant payload to an event consumer. A ping source can be used to schedule sending events, similar to a timer. </p><section class="section" id="serverless-pingsource-odc_serverless-pingsource"><div class="titlepage"><div><div><h3 class="title">5.9.1. Creating a ping source by using the web console</h3></div></div></div><p> After Knative Eventing is installed on your cluster, you can create a ping source by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create an event source. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have logged in to the OpenShift Container Platform web console. </li><li class="listitem"> The OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> To verify that the ping source is working, create a simple Knative service that dumps incoming messages to the logs of the service. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>YAML</strong></span>. </li><li class="listitem"><p class="simpara"> Copy the example YAML: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div></li><li class="listitem"><p class="simpara"> Create a ping source in the same namespace as the service created in the previous step, or any other sink that you want to send events to. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>Event Source</strong></span>. The <span class="strong strong"><strong>Event Sources</strong></span> page is displayed. </li><li class="listitem"> Optional: If you have multiple providers for your event sources, select the required provider from the <span class="strong strong"><strong>Providers</strong></span> list to filter the available event sources from the provider. </li><li class="listitem"><p class="simpara"> Select <span class="strong strong"><strong>Ping Source</strong></span> and then click <span class="strong strong"><strong>Create Event Source</strong></span>. The <span class="strong strong"><strong>Create Event Source</strong></span> page is displayed. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> You can configure the <span class="strong strong"><strong>PingSource</strong></span> settings by using the <span class="strong strong"><strong>Form view</strong></span> or <span class="strong strong"><strong>YAML view</strong></span> and can switch between the views. The data is persisted when switching between the views. </p></div></rh-alert></li><li class="listitem"> Enter a value for <span class="strong strong"><strong>Schedule</strong></span>. In this example, the value is <code class="literal">*/2 * * * *</code>, which creates a PingSource that sends a message every two minutes. </li><li class="listitem"> Optional: You can enter a value for <span class="strong strong"><strong>Data</strong></span>, which is the message payload. </li><li class="listitem"> Select a <span class="strong strong"><strong>Sink</strong></span>. This can be either a <span class="strong strong"><strong>Resource</strong></span> or a <span class="strong strong"><strong>URI</strong></span>. In this example, the <code class="literal">event-display</code> service created in the previous step is used as the <span class="strong strong"><strong>Resource</strong></span> sink. </li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the ping source was created and is connected to the sink by viewing the <span class="strong strong"><strong>Topology</strong></span> page. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>Topology</strong></span>. </li><li class="listitem"><p class="simpara"> View the ping source and sink. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/982b6f0a531fe66d6f99e70f962389a2/verify-pingsource-ODC.png" alt="View the ping source and service in the Topology view"></div></div></li></ol></div><div class="orderedlist"><p class="title"><strong>Deleting the ping source</strong></p><ol class="orderedlist" type="1"><li class="listitem"> Navigate to the <span class="strong strong"><strong>Topology</strong></span> view. </li><li class="listitem"> Right-click the API server source and select <span class="strong strong"><strong>Delete Ping Source</strong></span>. </li></ol></div></section><section class="section" id="serverless-pingsource-kn_serverless-pingsource"><div class="titlepage"><div><div><h3 class="title">5.9.2. Creating a ping source by using the Knative CLI</h3></div></div></div><p> You can use the <code class="literal">kn source ping create</code> command to create a ping source by using the Knative (<code class="literal">kn</code>) CLI. Using the Knative CLI to create event sources provides a more streamlined and intuitive user interface than modifying YAML files directly. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> Optional: If you want to use the verification steps for this procedure, install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> To verify that the ping source is working, create a simple Knative service that dumps incoming messages to the service logs: </p><pre class="programlisting language-terminal">$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre></li><li class="listitem"><p class="simpara"> For each set of ping events that you want to request, create a ping source in the same namespace as the event consumer: </p><pre class="programlisting language-terminal">$ kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink ksvc:event-display</pre></li><li class="listitem"><p class="simpara"> Check that the controller is mapped correctly by entering the following command and inspecting the output: </p><pre class="programlisting language-terminal">$ kn source ping describe test-ping-source</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: test-ping-source Namespace: default Annotations: sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer Age: 15s Schedule: */2 * * * * Data: {"message": "Hello world!"} Sink: Name: event-display Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 8s ++ Deployed 8s ++ SinkProvided 15s ++ ValidSchedule 15s ++ EventTypeProvided 15s ++ ResourcesCorrect 15s</pre> <p></p></div></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the Kubernetes events were sent to the Knative event sink by looking at the logs of the sink pod. </p></div><p> By default, Knative services terminate their pods if no traffic is received within a 60 second period. The example shown in this guide creates a ping source that sends a message every 2 minutes, so each message should be observed in a newly created pod. </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Watch for new pods created: </p><pre class="programlisting language-terminal">$ watch oc get pods</pre></li><li class="listitem"><p class="simpara"> Cancel watching the pods using Ctrl+C, then look at the logs of the created pod: </p><pre class="programlisting language-terminal">$ oc logs $(oc get pod -o name | grep event-display) -c user-container</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.sources.ping source: /apis/v1/namespaces/default/pingsources/test-ping-source id: 99e4f4f6-08ff-4bff-acf1-47f61ded68c9 time: 2020-04-07T16:16:00.000601161Z datacontenttype: application/json Data, { "message": "Hello world!" }</pre> <p></p></div></li></ol></div><div class="itemizedlist"><p class="title"><strong>Deleting the ping source</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Delete the ping source: </p><pre class="programlisting language-terminal">$ kn delete pingsources.sources.knative.dev <ping_source_name></pre></li></ul></div><section class="section" id="specifying-sink-flag-kn_serverless-pingsource"><div class="titlepage"><div><div><h4 class="title">5.9.2.1. Knative CLI sink flag</h4></div></div></div><p> When you create an event source by using the Knative (<code class="literal">kn</code>) CLI, you can specify a sink where events are sent to from that resource by using the <code class="literal">--sink</code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources. </p><p> The following example creates a sink binding that uses a service, <code class="literal">http://event-display.svc.cluster.local</code>, as the sink: </p><div class="formalpara"><p class="title"><strong>Example command using the sink flag</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ <span id="CO17-1"><!--Empty--></span><span class="callout">1</span> --ce-override "sink=bound"</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO17-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">svc</code> in <code class="literal">http://event-display.svc.cluster.local</code> determines that the sink is a Knative service. Other default sink prefixes include <code class="literal">channel</code>, and <code class="literal">broker</code>. </div></dd></dl></div></section></section><section class="section" id="serverless-pingsource-yaml_serverless-pingsource"><div class="titlepage"><div><div><h3 class="title">5.9.3. Creating a ping source by using YAML</h3></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe event sources declaratively and in a reproducible manner. To create a serverless ping source by using YAML, you must create a YAML file that defines a <code class="literal">PingSource</code> object, then apply it by using <code class="literal">oc apply</code>. </p><div class="formalpara"><p class="title"><strong>Example <code class="literal">PingSource</code> object</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: PingSource metadata: name: test-ping-source spec: schedule: "*/2 * * * *" <span id="CO18-1"><!--Empty--></span><span class="callout">1</span> data: '{"message": "Hello world!"}' <span id="CO18-2"><!--Empty--></span><span class="callout">2</span> sink: <span id="CO18-3"><!--Empty--></span><span class="callout">3</span> ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO18-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The schedule of the event specified using <a class="link" href="https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#schedule">CRON expression</a>. </div></dd><dt><a href="#CO18-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The event message body expressed as a JSON encoded data string. </div></dd><dt><a href="#CO18-3"><span class="callout">3</span></a> </dt><dd><div class="para"> These are the details of the event consumer. In this example, we are using a Knative service named <code class="literal">event-display</code>. </div></dd></dl></div><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> To verify that the ping source is working, create a simple Knative service that dumps incoming messages to the service’s logs. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create a service YAML file: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre></li><li class="listitem"><p class="simpara"> Create the service: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></li><li class="listitem"><p class="simpara"> For each set of ping events that you want to request, create a ping source in the same namespace as the event consumer. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create a YAML file for the ping source: </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: PingSource metadata: name: test-ping-source spec: schedule: "*/2 * * * *" data: '{"message": "Hello world!"}' sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display</pre></li><li class="listitem"><p class="simpara"> Create the ping source: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></li><li class="listitem"><p class="simpara"> Check that the controller is mapped correctly by entering the following command: </p><pre class="programlisting language-terminal">$ oc get pingsource.sources.knative.dev <ping_source_name> -oyaml</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">apiVersion: sources.knative.dev/v1 kind: PingSource metadata: annotations: sources.knative.dev/creator: developer sources.knative.dev/lastModifier: developer creationTimestamp: "2020-04-07T16:11:14Z" generation: 1 name: test-ping-source namespace: default resourceVersion: "55257" selfLink: /apis/sources.knative.dev/v1/namespaces/default/pingsources/test-ping-source uid: 3d80d50b-f8c7-4c1b-99f7-3ec00e0a8164 spec: data: '{ value: "hello" }' schedule: '*/2 * * * *' sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display namespace: default</pre> <p></p></div></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the Kubernetes events were sent to the Knative event sink by looking at the sink pod’s logs. </p></div><p> By default, Knative services terminate their pods if no traffic is received within a 60 second period. The example shown in this guide creates a PingSource that sends a message every 2 minutes, so each message should be observed in a newly created pod. </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Watch for new pods created: </p><pre class="programlisting language-terminal">$ watch oc get pods</pre></li><li class="listitem"><p class="simpara"> Cancel watching the pods using Ctrl+C, then look at the logs of the created pod: </p><pre class="programlisting language-terminal">$ oc logs $(oc get pod -o name | grep event-display) -c user-container</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.sources.ping source: /apis/v1/namespaces/default/pingsources/test-ping-source id: 042ff529-240e-45ee-b40c-3a908129853e time: 2020-04-07T16:22:00.000791674Z datacontenttype: application/json Data, { "message": "Hello world!" }</pre> <p></p></div></li></ol></div><div class="itemizedlist"><p class="title"><strong>Deleting the ping source</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Delete the ping source: </p><pre class="programlisting language-terminal">$ oc delete -f <filename></pre><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ oc delete -f ping-source.yaml</pre> <p></p></div></li></ul></div></section></section><section class="section" id="serverless-custom-event-sources"><div class="titlepage"><div><div><h2 class="title">5.10. Custom event sources</h2></div></div></div><p> If you need to ingress events from an event producer that is not included in Knative, or from a producer that emits events which are not in the <code class="literal">CloudEvent</code> format, you can do this by creating a custom event source. You can create a custom event source by using one of the following methods: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Use a <code class="literal">PodSpecable</code> object as an event source, by creating a sink binding. </li><li class="listitem"> Use a container as an event source, by creating a container source. </li></ul></div><section class="section" id="serverless-sinkbinding-intro_context"><div class="titlepage"><div><div><h3 class="title">5.10.1. Sink binding</h3></div></div></div><p> The <code class="literal">SinkBinding</code> object supports decoupling event production from delivery addressing. Sink binding is used to connect <span class="emphasis"><em>event producers</em></span> to an event consumer, or <span class="emphasis"><em>sink</em></span>. An event producer is a Kubernetes resource that embeds a <code class="literal">PodSpec</code> template and produces events. A sink is an addressable Kubernetes object that can receive events. </p><p> The <code class="literal">SinkBinding</code> object injects environment variables into the <code class="literal">PodTemplateSpec</code> of the sink, which means that the application code does not need to interact directly with the Kubernetes API to locate the event destination. These environment variables are as follows: </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">K_SINK</code></span></dt><dd> The URL of the resolved sink. </dd><dt><span class="term"><code class="literal">K_CE_OVERRIDES</code></span></dt><dd> A JSON object that specifies overrides to the outbound event. </dd></dl></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The <code class="literal">SinkBinding</code> object currently does not support custom revision names for services. </p></div></rh-alert><section class="section" id="serverless-sinkbinding-yaml_serverless-custom-event-sources"><div class="titlepage"><div><div><h4 class="title">5.10.1.1. Creating a sink binding by using YAML</h4></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe event sources declaratively and in a reproducible manner. To create a sink binding by using YAML, you must create a YAML file that defines an <code class="literal">SinkBinding</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> To check that sink binding is set up correctly, create a Knative event display service, or event sink, that dumps incoming messages to its log. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create a service YAML file: </p><div class="formalpara"><p class="title"><strong>Example service YAML file</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Create the service: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></li><li class="listitem"><p class="simpara"> Create a sink binding instance that directs events to the service. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create a sink binding YAML file: </p><div class="formalpara"><p class="title"><strong>Example service YAML file</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1alpha1 kind: SinkBinding metadata: name: bind-heartbeat spec: subject: apiVersion: batch/v1 kind: Job <span id="CO19-1"><!--Empty--></span><span class="callout">1</span> selector: matchLabels: app: heartbeat-cron sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO19-1"><span class="callout">1</span></a> </dt><dd><div class="para"> In this example, any Job with the label <code class="literal">app: heartbeat-cron</code> will be bound to the event sink. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the sink binding: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></li><li class="listitem"><p class="simpara"> Create a <code class="literal">CronJob</code> object. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create a cron job YAML file: </p><div class="formalpara"><p class="title"><strong>Example cron job YAML file</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: batch/v1 kind: CronJob metadata: name: heartbeat-cron spec: # Run every minute schedule: "* * * * *" jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true" spec: template: spec: restartPolicy: Never containers: - name: single-heartbeat image: quay.io/openshift-knative/heartbeats:latest args: - --period=1 env: - name: ONE_SHOT value: "true" - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace</pre> <p></p></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> To use sink binding, you must manually add a <code class="literal">bindings.knative.dev/include=true</code> label to your Knative resources. </p><p> For example, to add this label to a <code class="literal">CronJob</code> resource, add the following lines to the <code class="literal">Job</code> resource YAML definition: </p><pre class="programlisting language-yaml"> jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"</pre></div></rh-alert></li><li class="listitem"><p class="simpara"> Create the cron job: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></li><li class="listitem"><p class="simpara"> Check that the controller is mapped correctly by entering the following command and inspecting the output: </p><pre class="programlisting language-terminal">$ oc get sinkbindings.sources.knative.dev bind-heartbeat -oyaml</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-yaml">spec: sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display namespace: default subject: apiVersion: batch/v1 kind: Job namespace: default selector: matchLabels: app: heartbeat-cron</pre> <p></p></div></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the Kubernetes events were sent to the Knative event sink by looking at the message dumper function logs. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Enter the command: </p><pre class="programlisting language-terminal">$ oc get pods</pre></li><li class="listitem"><p class="simpara"> Enter the command: </p><pre class="programlisting language-terminal">$ oc logs $(oc get pod -o name | grep event-display) -c user-container</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.eventing.samples.heartbeat source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596 time: 2019-10-18T15:23:20.809775386Z contenttype: application/json Extensions, beats: true heart: yes the: 42 Data, { "id": 1, "label": "" }</pre> <p></p></div></li></ol></div></section><section class="section" id="serverless-sinkbinding-kn_serverless-custom-event-sources"><div class="titlepage"><div><div><h4 class="title">5.10.1.2. Creating a sink binding by using the Knative CLI</h4></div></div></div><p> You can use the <code class="literal">kn source binding create</code> command to create a sink binding by using the Knative (<code class="literal">kn</code>) CLI. Using the Knative CLI to create event sources provides a more streamlined and intuitive user interface than modifying YAML files directly. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> Install the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The following procedure requires you to create YAML files. </p><p> If you change the names of the YAML files from those used in the examples, you must ensure that you also update the corresponding CLI commands. </p></div></rh-alert><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> To check that sink binding is set up correctly, create a Knative event display service, or event sink, that dumps incoming messages to its log: </p><pre class="programlisting language-terminal">$ kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre></li><li class="listitem"><p class="simpara"> Create a sink binding instance that directs events to the service: </p><pre class="programlisting language-terminal">$ kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-display</pre></li><li class="listitem"><p class="simpara"> Create a <code class="literal">CronJob</code> object. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create a cron job YAML file: </p><div class="formalpara"><p class="title"><strong>Example cron job YAML file</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: batch/v1 kind: CronJob metadata: name: heartbeat-cron spec: # Run every minute schedule: "* * * * *" jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true" spec: template: spec: restartPolicy: Never containers: - name: single-heartbeat image: quay.io/openshift-knative/heartbeats:latest args: - --period=1 env: - name: ONE_SHOT value: "true" - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace</pre> <p></p></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> To use sink binding, you must manually add a <code class="literal">bindings.knative.dev/include=true</code> label to your Knative CRs. </p><p> For example, to add this label to a <code class="literal">CronJob</code> CR, add the following lines to the <code class="literal">Job</code> CR YAML definition: </p><pre class="programlisting language-yaml"> jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"</pre></div></rh-alert></li><li class="listitem"><p class="simpara"> Create the cron job: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></li><li class="listitem"><p class="simpara"> Check that the controller is mapped correctly by entering the following command and inspecting the output: </p><pre class="programlisting language-terminal">$ kn source binding describe bind-heartbeat</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: bind-heartbeat Namespace: demo-2 Annotations: sources.knative.dev/creator=minikube-user, sources.knative.dev/lastModifier=minikub ... Age: 2m Subject: Resource: job (batch/v1) Selector: app: heartbeat-cron Sink: Name: event-display Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 2m</pre> <p></p></div></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the Kubernetes events were sent to the Knative event sink by looking at the message dumper function logs. </p></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> View the message dumper function logs by entering the following commands: </p><pre class="programlisting language-terminal">$ oc get pods</pre><pre class="programlisting language-terminal">$ oc logs $(oc get pod -o name | grep event-display) -c user-container</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.eventing.samples.heartbeat source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596 time: 2019-10-18T15:23:20.809775386Z contenttype: application/json Extensions, beats: true heart: yes the: 42 Data, { "id": 1, "label": "" }</pre> <p></p></div></li></ul></div><section class="section" id="specifying-sink-flag-kn_serverless-custom-event-sources"><div class="titlepage"><div><div><h5 class="title">5.10.1.2.1. Knative CLI sink flag</h5></div></div></div><p> When you create an event source by using the Knative (<code class="literal">kn</code>) CLI, you can specify a sink where events are sent to from that resource by using the <code class="literal">--sink</code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources. </p><p> The following example creates a sink binding that uses a service, <code class="literal">http://event-display.svc.cluster.local</code>, as the sink: </p><div class="formalpara"><p class="title"><strong>Example command using the sink flag</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ <span id="CO20-1"><!--Empty--></span><span class="callout">1</span> --ce-override "sink=bound"</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO20-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">svc</code> in <code class="literal">http://event-display.svc.cluster.local</code> determines that the sink is a Knative service. Other default sink prefixes include <code class="literal">channel</code>, and <code class="literal">broker</code>. </div></dd></dl></div></section></section><section class="section" id="serverless-sinkbinding-odc_serverless-custom-event-sources"><div class="titlepage"><div><div><h4 class="title">5.10.1.3. Creating a sink binding by using the web console</h4></div></div></div><p> After Knative Eventing is installed on your cluster, you can create a sink binding by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create an event source. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have logged in to the OpenShift Container Platform web console. </li><li class="listitem"> The OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a Knative service to use as a sink: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>YAML</strong></span>. </li><li class="listitem"><p class="simpara"> Copy the example YAML: </p><pre class="programlisting language-yaml">apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest</pre></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div></li><li class="listitem"><p class="simpara"> Create a <code class="literal">CronJob</code> resource that is used as an event source and sends an event every minute. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>YAML</strong></span>. </li><li class="listitem"><p class="simpara"> Copy the example YAML: </p><pre class="programlisting language-yaml">apiVersion: batch/v1 kind: CronJob metadata: name: heartbeat-cron spec: # Run every minute schedule: "*/1 * * * *" jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: true <span id="CO21-1"><!--Empty--></span><span class="callout">1</span> spec: template: spec: restartPolicy: Never containers: - name: single-heartbeat image: quay.io/openshift-knative/heartbeats args: - --period=1 env: - name: ONE_SHOT value: "true" - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO21-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Ensure that you include the <code class="literal">bindings.knative.dev/include: true</code> label. The default namespace selection behavior of OpenShift Serverless uses inclusion mode. </div></dd></dl></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div></li><li class="listitem"><p class="simpara"> Create a sink binding in the same namespace as the service created in the previous step, or any other sink that you want to send events to. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>Event Source</strong></span>. The <span class="strong strong"><strong>Event Sources</strong></span> page is displayed. </li><li class="listitem"> Optional: If you have multiple providers for your event sources, select the required provider from the <span class="strong strong"><strong>Providers</strong></span> list to filter the available event sources from the provider. </li><li class="listitem"><p class="simpara"> Select <span class="strong strong"><strong>Sink Binding</strong></span> and then click <span class="strong strong"><strong>Create Event Source</strong></span>. The <span class="strong strong"><strong>Create Event Source</strong></span> page is displayed. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> You can configure the <span class="strong strong"><strong>Sink Binding</strong></span> settings by using the <span class="strong strong"><strong>Form view</strong></span> or <span class="strong strong"><strong>YAML view</strong></span> and can switch between the views. The data is persisted when switching between the views. </p></div></rh-alert></li><li class="listitem"> In the <span class="strong strong"><strong>apiVersion</strong></span> field enter <code class="literal">batch/v1</code>. </li><li class="listitem"><p class="simpara"> In the <span class="strong strong"><strong>Kind</strong></span> field enter <code class="literal">Job</code>. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The <code class="literal">CronJob</code> kind is not supported directly by OpenShift Serverless sink binding, so the <span class="strong strong"><strong>Kind</strong></span> field must target the <code class="literal">Job</code> objects created by the cron job, rather than the cron job object itself. </p></div></rh-alert></li><li class="listitem"> Select a <span class="strong strong"><strong>Sink</strong></span>. This can be either a <span class="strong strong"><strong>Resource</strong></span> or a <span class="strong strong"><strong>URI</strong></span>. In this example, the <code class="literal">event-display</code> service created in the previous step is used as the <span class="strong strong"><strong>Resource</strong></span> sink. </li><li class="listitem"><p class="simpara"> In the <span class="strong strong"><strong>Match labels</strong></span> section: </p><div class="orderedlist"><ol class="orderedlist" type="i"><li class="listitem"> Enter <code class="literal">app</code> in the <span class="strong strong"><strong>Name</strong></span> field. </li><li class="listitem"><p class="simpara"> Enter <code class="literal">heartbeat-cron</code> in the <span class="strong strong"><strong>Value</strong></span> field. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The label selector is required when using cron jobs with sink binding, rather than the resource name. This is because jobs created by a cron job do not have a predictable name, and contain a randomly generated string in their name. For example, <code class="literal">hearthbeat-cron-1cc23f</code>. </p></div></rh-alert></li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the sink binding, sink, and cron job have been created and are working correctly by viewing the <span class="strong strong"><strong>Topology</strong></span> page and pod logs. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>Topology</strong></span>. </li><li class="listitem"><p class="simpara"> View the sink binding, sink, and heartbeats cron job. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/9a0fa2c38d9fb02364dd78a7e817d45c/verify-sinkbinding-odc.png" alt="View the sink binding and service in the Topology view"></div></div></li><li class="listitem"> Observe that successful jobs are being registered by the cron job once the sink binding is added. This means that the sink binding is successfully reconfiguring the jobs created by the cron job. </li><li class="listitem"> Browse the logs of the <code class="literal">event-display</code> service pod to see events produced by the heartbeats cron job. </li></ol></div></section><section class="section" id="serverless-sinkbinding-reference_serverless-custom-event-sources"><div class="titlepage"><div><div><h4 class="title">5.10.1.4. Sink binding reference</h4></div></div></div><p> You can use a <code class="literal">PodSpecable</code> object as an event source by creating a sink binding. You can configure multiple parameters when creating a <code class="literal">SinkBinding</code> object. </p><p> <code class="literal">SinkBinding</code> objects support the following parameters: </p><rh-table><table class="lt-4-cols lt-7-rows"><colgroup><col style="width: 33%; " class="col_1"><!--Empty--><col style="width: 33%; " class="col_2"><!--Empty--><col style="width: 33%; " class="col_3"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140155321069840" scope="col">Field</th><th align="left" valign="top" id="idm140155321068752" scope="col">Description</th><th align="left" valign="top" id="idm140155321067664" scope="col">Required or optional</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140155321069840"> <p> <code class="literal">apiVersion</code> </p> </td><td align="left" valign="top" headers="idm140155321068752"> <p> Specifies the API version, for example <code class="literal">sources.knative.dev/v1</code>. </p> </td><td align="left" valign="top" headers="idm140155321067664"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321069840"> <p> <code class="literal">kind</code> </p> </td><td align="left" valign="top" headers="idm140155321068752"> <p> Identifies this resource object as a <code class="literal">SinkBinding</code> object. </p> </td><td align="left" valign="top" headers="idm140155321067664"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321069840"> <p> <code class="literal">metadata</code> </p> </td><td align="left" valign="top" headers="idm140155321068752"> <p> Specifies metadata that uniquely identifies the <code class="literal">SinkBinding</code> object. For example, a <code class="literal">name</code>. </p> </td><td align="left" valign="top" headers="idm140155321067664"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321069840"> <p> <code class="literal">spec</code> </p> </td><td align="left" valign="top" headers="idm140155321068752"> <p> Specifies the configuration information for this <code class="literal">SinkBinding</code> object. </p> </td><td align="left" valign="top" headers="idm140155321067664"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321069840"> <p> <code class="literal">spec.sink</code> </p> </td><td align="left" valign="top" headers="idm140155321068752"> <p> A reference to an object that resolves to a URI to use as the sink. </p> </td><td align="left" valign="top" headers="idm140155321067664"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321069840"> <p> <code class="literal">spec.subject</code> </p> </td><td align="left" valign="top" headers="idm140155321068752"> <p> References the resources for which the runtime contract is augmented by binding implementations. </p> </td><td align="left" valign="top" headers="idm140155321067664"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321069840"> <p> <code class="literal">spec.ceOverrides</code> </p> </td><td align="left" valign="top" headers="idm140155321068752"> <p> Defines overrides to control the output format and modifications to the event sent to the sink. </p> </td><td align="left" valign="top" headers="idm140155321067664"> <p> Optional </p> </td></tr></tbody></table></rh-table><section class="section" id="serverless-sinkbinding-reference-subject-parameters_serverless-custom-event-sources"><div class="titlepage"><div><div><h5 class="title">5.10.1.4.1. Subject parameter</h5></div></div></div><p> The <code class="literal">Subject</code> parameter references the resources for which the runtime contract is augmented by binding implementations. You can configure multiple fields for a <code class="literal">Subject</code> definition. </p><p> The <code class="literal">Subject</code> definition supports the following fields: </p><rh-table><table class="lt-4-cols lt-7-rows"><colgroup><col style="width: 33%; " class="col_1"><!--Empty--><col style="width: 33%; " class="col_2"><!--Empty--><col style="width: 33%; " class="col_3"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140155321013504" scope="col">Field</th><th align="left" valign="top" id="idm140155321012416" scope="col">Description</th><th align="left" valign="top" id="idm140155321011328" scope="col">Required or optional</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">apiVersion</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> API version of the referent. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">kind</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> Kind of the referent. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">namespace</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> Namespace of the referent. If omitted, this defaults to the namespace of the object. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Optional </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">name</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> Name of the referent. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Do not use if you configure <code class="literal">selector</code>. </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">selector</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> Selector of the referents. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Do not use if you configure <code class="literal">name</code>. </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">selector.matchExpressions</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> A list of label selector requirements. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Only use one of either <code class="literal">matchExpressions</code> or <code class="literal">matchLabels</code>. </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">selector.matchExpressions.key</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> The label key that the selector applies to. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Required if using <code class="literal">matchExpressions</code>. </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">selector.matchExpressions.operator</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> Represents a key’s relationship to a set of values. Valid operators are <code class="literal">In</code>, <code class="literal">NotIn</code>, <code class="literal">Exists</code> and <code class="literal">DoesNotExist</code>. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Required if using <code class="literal">matchExpressions</code>. </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">selector.matchExpressions.values</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> An array of string values. If the <code class="literal">operator</code> parameter value is <code class="literal">In</code> or <code class="literal">NotIn</code>, the values array must be non-empty. If the <code class="literal">operator</code> parameter value is <code class="literal">Exists</code> or <code class="literal">DoesNotExist</code>, the values array must be empty. This array is replaced during a strategic merge patch. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Required if using <code class="literal">matchExpressions</code>. </p> </td></tr><tr><td align="left" valign="top" headers="idm140155321013504"> <p> <code class="literal">selector.matchLabels</code> </p> </td><td align="left" valign="top" headers="idm140155321012416"> <p> A map of key-value pairs. Each key-value pair in the <code class="literal">matchLabels</code> map is equivalent to an element of <code class="literal">matchExpressions</code>, where the key field is <code class="literal">matchLabels.<key></code>, the <code class="literal">operator</code> is <code class="literal">In</code>, and the <code class="literal">values</code> array contains only <code class="literal">matchLabels.<value></code>. </p> </td><td align="left" valign="top" headers="idm140155321011328"> <p> Only use one of either <code class="literal">matchExpressions</code> or <code class="literal">matchLabels</code>. </p> </td></tr></tbody></table></rh-table><div class="formalpara"><p class="title"><strong>Subject parameter examples</strong></p><p> Given the following YAML, the <code class="literal">Deployment</code> object named <code class="literal">mysubject</code> in the <code class="literal">default</code> namespace is selected: </p></div><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: bind-heartbeat spec: subject: apiVersion: apps/v1 kind: Deployment namespace: default name: mysubject ...</pre><p> Given the following YAML, any <code class="literal">Job</code> object with the label <code class="literal">working=example</code> in the <code class="literal">default</code> namespace is selected: </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: bind-heartbeat spec: subject: apiVersion: batch/v1 kind: Job namespace: default selector: matchLabels: working: example ...</pre><p> Given the following YAML, any <code class="literal">Pod</code> object with the label <code class="literal">working=example</code> or <code class="literal">working=sample</code> in the <code class="literal">default</code> namespace is selected: </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: bind-heartbeat spec: subject: apiVersion: v1 kind: Pod namespace: default selector: - matchExpression: key: working operator: In values: - example - sample ...</pre></section><section class="section" id="serverless-sinkbinding-reference-cloudevent-overrides_serverless-custom-event-sources"><div class="titlepage"><div><div><h5 class="title">5.10.1.4.2. CloudEvent overrides</h5></div></div></div><p> A <code class="literal">ceOverrides</code> definition provides overrides that control the CloudEvent’s output format and modifications sent to the sink. You can configure multiple fields for the <code class="literal">ceOverrides</code> definition. </p><p> A <code class="literal">ceOverrides</code> definition supports the following fields: </p><rh-table><table class="lt-4-cols lt-7-rows"><colgroup><col style="width: 33%; " class="col_1"><!--Empty--><col style="width: 33%; " class="col_2"><!--Empty--><col style="width: 33%; " class="col_3"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140155320918176" scope="col">Field</th><th align="left" valign="top" id="idm140155320917088" scope="col">Description</th><th align="left" valign="top" id="idm140155320916000" scope="col">Required or optional</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140155320918176"> <p> <code class="literal">extensions</code> </p> </td><td align="left" valign="top" headers="idm140155320917088"> <p> Specifies which attributes are added or overridden on the outbound event. Each <code class="literal">extensions</code> key-value pair is set independently on the event as an attribute extension. </p> </td><td align="left" valign="top" headers="idm140155320916000"> <p> Optional </p> </td></tr></tbody></table></rh-table><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Only valid <code class="literal">CloudEvent</code> attribute names are allowed as extensions. You cannot set the spec defined attributes from the extensions override configuration. For example, you can not modify the <code class="literal">type</code> attribute. </p></div></rh-alert><div class="formalpara"><p class="title"><strong>CloudEvent Overrides example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: bind-heartbeat spec: ... ceOverrides: extensions: extra: this is an extra attribute additional: 42</pre> <p></p></div><p> This sets the <code class="literal">K_CE_OVERRIDES</code> environment variable on the <code class="literal">subject</code>: </p><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }</pre> <p></p></div></section><section class="section" id="serverless-sinkbinding-reference-include-label_serverless-custom-event-sources"><div class="titlepage"><div><div><h5 class="title">5.10.1.4.3. The include label</h5></div></div></div><p> To use a sink binding, you need to do assign the <code class="literal">bindings.knative.dev/include: "true"</code> label to either the resource or the namespace that the resource is included in. If the resource definition does not include the label, a cluster administrator can attach it to the namespace by running: </p><pre class="programlisting language-terminal">$ oc label namespace <namespace> bindings.knative.dev/include=true</pre></section></section></section><section class="section" id="serverless-custom-event-sources-containersource"><div class="titlepage"><div><div><h3 class="title">5.10.2. Container source</h3></div></div></div><p> Container sources create a container image that generates events and sends events to a sink. You can use a container source to create a custom event source, by creating a container image and a <code class="literal">ContainerSource</code> object that uses your image URI. </p><section class="section" id="serverless-containersource-guidelines_serverless-custom-event-sources"><div class="titlepage"><div><div><h4 class="title">5.10.2.1. Guidelines for creating a container image</h4></div></div></div><p> Two environment variables are injected by the container source controller: <code class="literal">K_SINK</code> and <code class="literal">K_CE_OVERRIDES</code>. These variables are resolved from the <code class="literal">sink</code> and <code class="literal">ceOverrides</code> spec, respectively. Events are sent to the sink URI specified in the <code class="literal">K_SINK</code> environment variable. The message must be sent as a <code class="literal">POST</code> using the <a class="link" href="https://cloudevents.io/"><code class="literal">CloudEvent</code></a> HTTP format. </p><div class="formalpara"><p class="title"><strong>Example container images</strong></p><p> The following is an example of a heartbeats container image: </p></div><pre class="programlisting language-go">package main import ( "context" "encoding/json" "flag" "fmt" "log" "os" "strconv" "time" duckv1 "knative.dev/pkg/apis/duck/v1" cloudevents "github.com/cloudevents/sdk-go/v2" "github.com/kelseyhightower/envconfig" ) type Heartbeat struct { Sequence int `json:"id"` Label string `json:"label"` } var ( eventSource string eventType string sink string label string periodStr string ) func init() { flag.StringVar(&eventSource, "eventSource", "", "the event-source (CloudEvents)") flag.StringVar(&eventType, "eventType", "dev.knative.eventing.samples.heartbeat", "the event-type (CloudEvents)") flag.StringVar(&sink, "sink", "", "the host url to heartbeat to") flag.StringVar(&label, "label", "", "a special label") flag.StringVar(&periodStr, "period", "5", "the number of seconds between heartbeats") } type envConfig struct { // Sink URL where to send heartbeat cloud events Sink string `envconfig:"K_SINK"` // CEOverrides are the CloudEvents overrides to be applied to the outbound event. CEOverrides string `envconfig:"K_CE_OVERRIDES"` // Name of this pod. Name string `envconfig:"POD_NAME" required:"true"` // Namespace this pod exists in. Namespace string `envconfig:"POD_NAMESPACE" required:"true"` // Whether to run continuously or exit. OneShot bool `envconfig:"ONE_SHOT" default:"false"` } func main() { flag.Parse() var env envConfig if err := envconfig.Process("", &env); err != nil { log.Printf("[ERROR] Failed to process env var: %s", err) os.Exit(1) } if env.Sink != "" { sink = env.Sink } var ceOverrides *duckv1.CloudEventOverrides if len(env.CEOverrides) > 0 { overrides := duckv1.CloudEventOverrides{} err := json.Unmarshal([]byte(env.CEOverrides), &overrides) if err != nil { log.Printf("[ERROR] Unparseable CloudEvents overrides %s: %v", env.CEOverrides, err) os.Exit(1) } ceOverrides = &overrides } p, err := cloudevents.NewHTTP(cloudevents.WithTarget(sink)) if err != nil { log.Fatalf("failed to create http protocol: %s", err.Error()) } c, err := cloudevents.NewClient(p, cloudevents.WithUUIDs(), cloudevents.WithTimeNow()) if err != nil { log.Fatalf("failed to create client: %s", err.Error()) } var period time.Duration if p, err := strconv.Atoi(periodStr); err != nil { period = time.Duration(5) * time.Second } else { period = time.Duration(p) * time.Second } if eventSource == "" { eventSource = fmt.Sprintf("https://knative.dev/eventing-contrib/cmd/heartbeats/#%s/%s", env.Namespace, env.Name) log.Printf("Heartbeats Source: %s", eventSource) } if len(label) > 0 && label[0] == '"' { label, _ = strconv.Unquote(label) } hb := &Heartbeat{ Sequence: 0, Label: label, } ticker := time.NewTicker(period) for { hb.Sequence++ event := cloudevents.NewEvent("1.0") event.SetType(eventType) event.SetSource(eventSource) event.SetExtension("the", 42) event.SetExtension("heart", "yes") event.SetExtension("beats", true) if ceOverrides != nil && ceOverrides.Extensions != nil { for n, v := range ceOverrides.Extensions { event.SetExtension(n, v) } } if err := event.SetData(cloudevents.ApplicationJSON, hb); err != nil { log.Printf("failed to set cloudevents data: %s", err.Error()) } log.Printf("sending cloudevent to %s", sink) if res := c.Send(context.Background(), event); !cloudevents.IsACK(res) { log.Printf("failed to send cloudevent: %v", res) } if env.OneShot { return } // Wait for next tick <-ticker.C } }</pre><p> The following is an example of a container source that references the previous heartbeats container image: </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: ContainerSource metadata: name: test-heartbeats spec: template: spec: containers: # This corresponds to a heartbeats image URI that you have built and published - image: gcr.io/knative-releases/knative.dev/eventing/cmd/heartbeats name: heartbeats args: - --period=1 env: - name: POD_NAME value: "example-pod" - name: POD_NAMESPACE value: "event-test" sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: example-service ...</pre></section><section class="section" id="serverless-kn-containersource_serverless-custom-event-sources"><div class="titlepage"><div><div><h4 class="title">5.10.2.2. Creating and managing container sources by using the Knative CLI</h4></div></div></div><p> You can use the <code class="literal">kn source container</code> commands to create and manage container sources by using the Knative (<code class="literal">kn</code>) CLI. Using the Knative CLI to create event sources provides a more streamlined and intuitive user interface than modifying YAML files directly. </p><div class="formalpara"><p class="title"><strong>Create a container source</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source container create <container_source_name> --image <image_uri> --sink <sink></pre> <p></p></div><div class="formalpara"><p class="title"><strong>Delete a container source</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source container delete <container_source_name></pre> <p></p></div><div class="formalpara"><p class="title"><strong>Describe a container source</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source container describe <container_source_name></pre> <p></p></div><div class="formalpara"><p class="title"><strong>List existing container sources</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source container list</pre> <p></p></div><div class="formalpara"><p class="title"><strong>List existing container sources in YAML format</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source container list -o yaml</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Update a container source</strong></p><p> This command updates the image URI for an existing container source: </p></div><pre class="programlisting language-terminal">$ kn source container update <container_source_name> --image <image_uri></pre></section><section class="section" id="serverless-odc-create-containersource_serverless-custom-event-sources"><div class="titlepage"><div><div><h4 class="title">5.10.2.3. Creating a container source by using the web console</h4></div></div></div><p> After Knative Eventing is installed on your cluster, you can create a container source by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create an event source. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have logged in to the OpenShift Container Platform web console. </li><li class="listitem"> The OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>Event Source</strong></span>. The <span class="strong strong"><strong>Event Sources</strong></span> page is displayed. </li><li class="listitem"> Select <span class="strong strong"><strong>Container Source</strong></span> and then click <span class="strong strong"><strong>Create Event Source</strong></span>. The <span class="strong strong"><strong>Create Event Source</strong></span> page is displayed. </li><li class="listitem"><p class="simpara"> Configure the <span class="strong strong"><strong>Container Source</strong></span> settings by using the <span class="strong strong"><strong>Form view</strong></span> or <span class="strong strong"><strong>YAML view</strong></span>: </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> You can switch between the <span class="strong strong"><strong>Form view</strong></span> and <span class="strong strong"><strong>YAML view</strong></span>. The data is persisted when switching between the views. </p></div></rh-alert><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> In the <span class="strong strong"><strong>Image</strong></span> field, enter the URI of the image that you want to run in the container created by the container source. </li><li class="listitem"> In the <span class="strong strong"><strong>Name</strong></span> field, enter the name of the image. </li><li class="listitem"> Optional: In the <span class="strong strong"><strong>Arguments</strong></span> field, enter any arguments to be passed to the container. </li><li class="listitem"> Optional: In the <span class="strong strong"><strong>Environment variables</strong></span> field, add any environment variables to set in the container. </li><li class="listitem"><p class="simpara"> In the <span class="strong strong"><strong>Sink</strong></span> section, add a sink where events from the container source are routed to. If you are using the <span class="strong strong"><strong>Form</strong></span> view, you can choose from the following options: </p><div class="orderedlist"><ol class="orderedlist" type="i"><li class="listitem"> Select <span class="strong strong"><strong>Resource</strong></span> to use a channel, broker, or service as a sink for the event source. </li><li class="listitem"> Select <span class="strong strong"><strong>URI</strong></span> to specify where the events from the container source are routed to. </li></ol></div></li></ol></div></li><li class="listitem"> After you have finished configuring the container source, click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div></section><section class="section" id="serverless-containersource-reference_serverless-custom-event-sources"><div class="titlepage"><div><div><h4 class="title">5.10.2.4. Container source reference</h4></div></div></div><p> You can use a container as an event source, by creating a <code class="literal">ContainerSource</code> object. You can configure multiple parameters when creating a <code class="literal">ContainerSource</code> object. </p><p> <code class="literal">ContainerSource</code> objects support the following fields: </p><rh-table><table class="lt-4-cols lt-7-rows"><colgroup><col style="width: 33%; " class="col_1"><!--Empty--><col style="width: 33%; " class="col_2"><!--Empty--><col style="width: 33%; " class="col_3"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140155320807152" scope="col">Field</th><th align="left" valign="top" id="idm140155320806064" scope="col">Description</th><th align="left" valign="top" id="idm140155320804976" scope="col">Required or optional</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140155320807152"> <p> <code class="literal">apiVersion</code> </p> </td><td align="left" valign="top" headers="idm140155320806064"> <p> Specifies the API version, for example <code class="literal">sources.knative.dev/v1</code>. </p> </td><td align="left" valign="top" headers="idm140155320804976"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155320807152"> <p> <code class="literal">kind</code> </p> </td><td align="left" valign="top" headers="idm140155320806064"> <p> Identifies this resource object as a <code class="literal">ContainerSource</code> object. </p> </td><td align="left" valign="top" headers="idm140155320804976"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155320807152"> <p> <code class="literal">metadata</code> </p> </td><td align="left" valign="top" headers="idm140155320806064"> <p> Specifies metadata that uniquely identifies the <code class="literal">ContainerSource</code> object. For example, a <code class="literal">name</code>. </p> </td><td align="left" valign="top" headers="idm140155320804976"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155320807152"> <p> <code class="literal">spec</code> </p> </td><td align="left" valign="top" headers="idm140155320806064"> <p> Specifies the configuration information for this <code class="literal">ContainerSource</code> object. </p> </td><td align="left" valign="top" headers="idm140155320804976"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155320807152"> <p> <code class="literal">spec.sink</code> </p> </td><td align="left" valign="top" headers="idm140155320806064"> <p> A reference to an object that resolves to a URI to use as the sink. </p> </td><td align="left" valign="top" headers="idm140155320804976"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155320807152"> <p> <code class="literal">spec.template</code> </p> </td><td align="left" valign="top" headers="idm140155320806064"> <p> A <code class="literal">template</code> spec for the <code class="literal">ContainerSource</code> object. </p> </td><td align="left" valign="top" headers="idm140155320804976"> <p> Required </p> </td></tr><tr><td align="left" valign="top" headers="idm140155320807152"> <p> <code class="literal">spec.ceOverrides</code> </p> </td><td align="left" valign="top" headers="idm140155320806064"> <p> Defines overrides to control the output format and modifications to the event sent to the sink. </p> </td><td align="left" valign="top" headers="idm140155320804976"> <p> Optional </p> </td></tr></tbody></table></rh-table><div class="formalpara"><p class="title"><strong>Template parameter example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: ContainerSource metadata: name: test-heartbeats spec: template: spec: containers: - image: quay.io/openshift-knative/heartbeats:latest name: heartbeats args: - --period=1 env: - name: POD_NAME value: "mypod" - name: POD_NAMESPACE value: "event-test" ...</pre> <p></p></div><section class="section" id="serverless-containersource-reference-cloudevent-overrides_serverless-custom-event-sources"><div class="titlepage"><div><div><h5 class="title">5.10.2.4.1. CloudEvent overrides</h5></div></div></div><p> A <code class="literal">ceOverrides</code> definition provides overrides that control the CloudEvent’s output format and modifications sent to the sink. You can configure multiple fields for the <code class="literal">ceOverrides</code> definition. </p><p> A <code class="literal">ceOverrides</code> definition supports the following fields: </p><rh-table><table class="lt-4-cols lt-7-rows"><colgroup><col style="width: 33%; " class="col_1"><!--Empty--><col style="width: 33%; " class="col_2"><!--Empty--><col style="width: 33%; " class="col_3"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140155320746880" scope="col">Field</th><th align="left" valign="top" id="idm140155320745792" scope="col">Description</th><th align="left" valign="top" id="idm140155320744704" scope="col">Required or optional</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140155320746880"> <p> <code class="literal">extensions</code> </p> </td><td align="left" valign="top" headers="idm140155320745792"> <p> Specifies which attributes are added or overridden on the outbound event. Each <code class="literal">extensions</code> key-value pair is set independently on the event as an attribute extension. </p> </td><td align="left" valign="top" headers="idm140155320744704"> <p> Optional </p> </td></tr></tbody></table></rh-table><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Only valid <code class="literal">CloudEvent</code> attribute names are allowed as extensions. You cannot set the spec defined attributes from the extensions override configuration. For example, you can not modify the <code class="literal">type</code> attribute. </p></div></rh-alert><div class="formalpara"><p class="title"><strong>CloudEvent Overrides example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1 kind: ContainerSource metadata: name: test-heartbeats spec: ... ceOverrides: extensions: extra: this is an extra attribute additional: 42</pre> <p></p></div><p> This sets the <code class="literal">K_CE_OVERRIDES</code> environment variable on the <code class="literal">subject</code>: </p><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }</pre> <p></p></div></section></section></section></section><section class="section" id="serverless-creating-channels"><div class="titlepage"><div><div><h2 class="title">5.11. Creating channels</h2></div></div></div><p> Channels are custom resources that define a single event-forwarding and persistence layer. After events have been sent to a channel from an event source or producer, these events can be sent to multiple Knative services or other sinks by using a subscription. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/9ce9adab99987edf7ad6a566535d43ad/serverless-event-channel-workflow.png" alt="Channel workflow overview"></div></div><p> You can create channels by instantiating a supported <code class="literal">Channel</code> object, and configure re-delivery attempts by modifying the <code class="literal">delivery</code> spec in a <code class="literal">Subscription</code> object. </p><section class="section" id="serverless-create-channel-odc_serverless-creating-channels"><div class="titlepage"><div><div><h3 class="title">5.11.1. Creating a channel by using the web console</h3></div></div></div><p> Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create a channel. After Knative Eventing is installed on your cluster, you can create a channel by using the web console. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have logged in to the OpenShift Container Platform web console. </li><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>+Add</strong></span> <pf-icon aria-label="then" icon="greater-than" size="sm"></pf-icon> <span class="strong strong"><strong>Channel</strong></span>. </li><li class="listitem"> Select the type of <code class="literal">Channel</code> object that you want to create in the <span class="strong strong"><strong>Type</strong></span> list. </li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Confirm that the channel now exists by navigating to the <span class="strong strong"><strong>Topology</strong></span> page. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/371291d0883f2167382146550d85aedf/verify-channel-odc.png" alt="View the channel in the Topology view"></div></div></li></ul></div></section><section class="section" id="serverless-create-channel-kn_serverless-creating-channels"><div class="titlepage"><div><div><h3 class="title">5.11.2. Creating a channel by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to create channels provides a more streamlined and intuitive user interface than modifying YAML files directly. You can use the <code class="literal">kn channel create</code> command to create a channel. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on the cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Create a channel: </p><pre class="programlisting language-terminal">$ kn channel create <channel_name> --type <channel_type></pre><p class="simpara"> The channel type is optional, but where specified, must be given in the format <code class="literal">Group:Version:Kind</code>. For example, you can create an <code class="literal">InMemoryChannel</code> object: </p><pre class="programlisting language-terminal">$ kn channel create mychannel --type messaging.knative.dev:v1:InMemoryChannel</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Channel 'mychannel' created in namespace 'default'.</pre> <p></p></div></li></ul></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> To confirm that the channel now exists, list the existing channels and inspect the output: </p><pre class="programlisting language-terminal">$ kn channel list</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">kn channel list NAME TYPE URL AGE READY REASON mychannel InMemoryChannel http://mychannel-kn-channel.default.svc.cluster.local 93s True</pre> <p></p></div></li></ul></div><div class="itemizedlist"><p class="title"><strong>Deleting a channel</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Delete a channel: </p><pre class="programlisting language-terminal">$ kn channel delete <channel_name></pre></li></ul></div></section><section class="section" id="serverless-create-default-channel-yaml_serverless-creating-channels"><div class="titlepage"><div><div><h3 class="title">5.11.3. Creating a default implementation channel by using YAML</h3></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe channels declaratively and in a reproducible manner. To create a serverless channel by using YAML, you must create a YAML file that defines a <code class="literal">Channel</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on the cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a <code class="literal">Channel</code> object as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: default</pre></li><li class="listitem"><p class="simpara"> Apply the YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section><section class="section" id="serverless-create-kafka-channel-yaml_serverless-creating-channels"><div class="titlepage"><div><div><h3 class="title">5.11.4. Creating a Kafka channel by using YAML</h3></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe channels declaratively and in a reproducible manner. You can create a Knative Eventing channel that is backed by Kafka topics by creating a Kafka channel. To create a Kafka channel by using YAML, you must create a YAML file that defines a <code class="literal">KafkaChannel</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and the <code class="literal">KnativeKafka</code> custom resource are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a <code class="literal">KafkaChannel</code> object as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: messaging.knative.dev/v1beta1 kind: KafkaChannel metadata: name: example-channel namespace: default spec: numPartitions: 3 replicationFactor: 1</pre><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Only the <code class="literal">v1beta1</code> version of the API for <code class="literal">KafkaChannel</code> objects on OpenShift Serverless is supported. Do not use the <code class="literal">v1alpha1</code> version of this API, as this version is now deprecated. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">KafkaChannel</code> YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section><section class="section" id="next-steps_serverless-creating-channels"><div class="titlepage"><div><div><h3 class="title">5.11.5. Next steps</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> After you have created a channel, <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-subs">create a subscription</a> that allows event sinks to subscribe to channels and receive events. </li><li class="listitem"> Configure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. See <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-configuring-event-delivery-examples_serverless-event-delivery">Examples of configuring event delivery parameters</a>. </li></ul></div></section></section><section class="section" id="serverless-subs"><div class="titlepage"><div><div><h2 class="title">5.12. Creating and managing subscriptions</h2></div></div></div><p> After you have created a channel and an event sink, you can create a subscription to enable event delivery. Subscriptions are created by configuring a <code class="literal">Subscription</code> object, which specifies the channel and the sink (also known as a <span class="emphasis"><em>subscriber</em></span>) to deliver events to. </p><section class="section" id="serverless-creating-subscriptions-odc_serverless-subs"><div class="titlepage"><div><div><h3 class="title">5.12.1. Creating a subscription by using the web console</h3></div></div></div><p> After you have created a channel and an event sink, you can create a subscription to enable event delivery. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create a subscription. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have logged in to the web console. </li><li class="listitem"> You have created an event sink, such as a Knative service, and a channel. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to the <span class="strong strong"><strong>Topology</strong></span> page. </li><li class="listitem"><p class="simpara"> Create a subscription using one of the following methods: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Hover over the channel that you want to create a subscription for, and drag the arrow. The <span class="strong strong"><strong>Add Subscription</strong></span> option is displayed. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/4dacac4aff75bedb7c0aaf943976bd1c/create-sub-ODC.png" alt="Create a subscription for the channel"></div></div><div class="orderedlist"><ol class="orderedlist" type="i"><li class="listitem"> Select your sink in the <span class="strong strong"><strong>Subscriber</strong></span> list. </li><li class="listitem"> Click <span class="strong strong"><strong>Add</strong></span>. </li></ol></div></li><li class="listitem"> If the service is available in the <span class="strong strong"><strong>Topology</strong></span> view under the same namespace or project as the channel, click on the channel that you want to create a subscription for, and drag the arrow directly to a service to immediately create a subscription from the channel to that service. </li></ol></div></li></ol></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> After the subscription has been created, you can see it represented as a line that connects the channel to the service in the <span class="strong strong"><strong>Topology</strong></span> view: </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/7af6e5a6f9641a70a24b3079442666a8/verify-subscription-odc.png" alt="Subscription in the Topology view"></div></div></li></ul></div></section><section class="section" id="serverless-creating-subscriptions-yaml_serverless-subs"><div class="titlepage"><div><div><h3 class="title">5.12.2. Creating a subscription by using YAML</h3></div></div></div><p> After you have created a channel and an event sink, you can create a subscription to enable event delivery. Creating Knative resources by using YAML files uses a declarative API, which enables you to describe subscriptions declaratively and in a reproducible manner. To create a subscription by using YAML, you must create a YAML file that defines a <code class="literal">Subscription</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on the cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Create a <code class="literal">Subscription</code> object: </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p class="simpara"> Create a YAML file and copy the following sample code into it: </p><pre class="programlisting language-yaml">apiVersion: messaging.knative.dev/v1beta1 kind: Subscription metadata: name: my-subscription <span id="CO22-1"><!--Empty--></span><span class="callout">1</span> namespace: default spec: channel: <span id="CO22-2"><!--Empty--></span><span class="callout">2</span> apiVersion: messaging.knative.dev/v1beta1 kind: Channel name: example-channel delivery: <span id="CO22-3"><!--Empty--></span><span class="callout">3</span> deadLetterSink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: error-handler subscriber: <span id="CO22-4"><!--Empty--></span><span class="callout">4</span> ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO22-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Name of the subscription. </div></dd><dt><a href="#CO22-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Configuration settings for the channel that the subscription connects to. </div></dd><dt><a href="#CO22-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Configuration settings for event delivery. This tells the subscription what happens to events that cannot be delivered to the subscriber. When this is configured, events that failed to be consumed are sent to the <code class="literal">deadLetterSink</code>. The event is dropped, no re-delivery of the event is attempted, and an error is logged in the system. The <code class="literal">deadLetterSink</code> value must be a <a class="link" href="https://pkg.go.dev/knative.dev/pkg/apis/duck/v1?tab=doc#Destination">Destination</a>. </div></dd><dt><a href="#CO22-4"><span class="callout">4</span></a> </dt><dd><div class="para"> Configuration settings for the subscriber. This is the event sink that events are delivered to from the channel. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ul></div></li></ul></div></section><section class="section" id="serverless-creating-subscriptions-kn_serverless-subs"><div class="titlepage"><div><div><h3 class="title">5.12.3. Creating a subscription by using the Knative CLI</h3></div></div></div><p> After you have created a channel and an event sink, you can create a subscription to enable event delivery. Using the Knative (<code class="literal">kn</code>) CLI to create subscriptions provides a more streamlined and intuitive user interface than modifying YAML files directly. You can use the <code class="literal">kn subscription create</code> command with the appropriate flags to create a subscription. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Create a subscription to connect a sink to a channel: </p><pre class="programlisting language-terminal">$ kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \ <span id="CO23-1"><!--Empty--></span><span class="callout">1</span> --sink <sink_prefix>:<sink_name> \ <span id="CO23-2"><!--Empty--></span><span class="callout">2</span> --sink-dead-letter <sink_prefix>:<sink_name> <span id="CO23-3"><!--Empty--></span><span class="callout">3</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO23-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">--channel</code> specifies the source for cloud events that should be processed. You must provide the channel name. If you are not using the default <code class="literal">InMemoryChannel</code> channel that is backed by the <code class="literal">Channel</code> custom resource, you must prefix the channel name with the <code class="literal"><group:version:kind></code> for the specified channel type. For example, this will be <code class="literal">messaging.knative.dev:v1beta1:KafkaChannel</code> for a Kafka backed channel. </div></dd><dt><a href="#CO23-2"><span class="callout">2</span></a> </dt><dd><div class="para"> <code class="literal">--sink</code> specifies the target destination to which the event should be delivered. By default, the <code class="literal"><sink_name></code> is interpreted as a Knative service of this name, in the same namespace as the subscription. You can specify the type of the sink by using one of the following prefixes: </div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">ksvc</code></span></dt><dd> A Knative service. </dd><dt><span class="term"><code class="literal">channel</code></span></dt><dd> A channel that should be used as destination. Only default channel types can be referenced here. </dd><dt><span class="term"><code class="literal">broker</code></span></dt><dd> An Eventing broker. </dd></dl></div></dd><dt><a href="#CO23-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Optional: <code class="literal">--sink-dead-letter</code> is an optional flag that can be used to specify a sink which events should be sent to in cases where events fail to be delivered. For more information, see the OpenShift Serverless <span class="emphasis"><em>Event delivery</em></span> documentation. </div><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn subscription create mysubscription --channel mychannel --sink ksvc:event-display</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Subscription 'mysubscription' created in namespace 'default'.</pre> <p></p></div></dd></dl></div></li></ul></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> To confirm that the channel is connected to the event sink, or <span class="emphasis"><em>subscriber</em></span>, by a subscription, list the existing subscriptions and inspect the output: </p><pre class="programlisting language-terminal">$ kn subscription list</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display True</pre> <p></p></div></li></ul></div><div class="itemizedlist"><p class="title"><strong>Deleting a subscription</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Delete a subscription: </p><pre class="programlisting language-terminal">$ kn subscription delete <subscription_name></pre></li></ul></div></section><section class="section" id="serverless-describe-subs-kn_serverless-subs"><div class="titlepage"><div><div><h3 class="title">5.12.4. Describing subscriptions by using the Knative CLI</h3></div></div></div><p> You can use the <code class="literal">kn subscription describe</code> command to print information about a subscription in the terminal by using the Knative (<code class="literal">kn</code>) CLI. Using the Knative CLI to describe subscriptions provides a more streamlined and intuitive user interface than viewing YAML files directly. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a subscription in your cluster. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Describe a subscription: </p><pre class="programlisting language-terminal">$ kn subscription describe <subscription_name></pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: my-subscription Namespace: default Annotations: messaging.knative.dev/creator=openshift-user, messaging.knative.dev/lastModifier=min ... Age: 43s Channel: Channel:my-channel (messaging.knative.dev/v1) Subscriber: URI: http://edisplay.default.example.com Reply: Name: default Resource: Broker (eventing.knative.dev/v1) DeadLetterSink: Name: my-sink Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 43s ++ AddedToChannel 43s ++ ChannelReady 43s ++ ReferencesResolved 43s</pre> <p></p></div></li></ul></div></section><section class="section" id="serverless-list-subs-kn_serverless-subs"><div class="titlepage"><div><div><h3 class="title">5.12.5. Listing subscriptions by using the Knative CLI</h3></div></div></div><p> You can use the <code class="literal">kn subscription list</code> command to list existing subscriptions on your cluster by using the Knative (<code class="literal">kn</code>) CLI. Using the Knative CLI to list subscriptions provides a streamlined and intuitive user interface. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> List subscriptions on your cluster: </p><pre class="programlisting language-terminal">$ kn subscription list</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display True</pre> <p></p></div></li></ul></div></section><section class="section" id="serverless-update-subscriptions-kn_serverless-subs"><div class="titlepage"><div><div><h3 class="title">5.12.6. Updating subscriptions by using the Knative CLI</h3></div></div></div><p> You can use the <code class="literal">kn subscription update</code> command as well as the appropriate flags to update a subscription from the terminal by using the Knative (<code class="literal">kn</code>) CLI. Using the Knative CLI to update subscriptions provides a more streamlined and intuitive user interface than updating YAML files directly. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a subscription. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Update a subscription: </p><pre class="programlisting language-terminal">$ kn subscription update <subscription_name> \ --sink <sink_prefix>:<sink_name> \ <span id="CO24-1"><!--Empty--></span><span class="callout">1</span> --sink-dead-letter <sink_prefix>:<sink_name> <span id="CO24-2"><!--Empty--></span><span class="callout">2</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO24-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">--sink</code> specifies the updated target destination to which the event should be delivered. You can specify the type of the sink by using one of the following prefixes: </div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">ksvc</code></span></dt><dd> A Knative service. </dd><dt><span class="term"><code class="literal">channel</code></span></dt><dd> A channel that should be used as destination. Only default channel types can be referenced here. </dd><dt><span class="term"><code class="literal">broker</code></span></dt><dd> An Eventing broker. </dd></dl></div></dd><dt><a href="#CO24-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Optional: <code class="literal">--sink-dead-letter</code> is an optional flag that can be used to specify a sink which events should be sent to in cases where events fail to be delivered. For more information, see the OpenShift Serverless <span class="emphasis"><em>Event delivery</em></span> documentation. </div><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ kn subscription update mysubscription --sink ksvc:event-display</pre> <p></p></div></dd></dl></div></li></ul></div></section><section class="section" id="next-steps_serverless-subs"><div class="titlepage"><div><div><h3 class="title">5.12.7. Next steps</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Configure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. See <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-configuring-event-delivery-examples_serverless-event-delivery">Examples of configuring event delivery parameters</a>. </li></ul></div></section></section><section class="section" id="serverless-using-brokers"><div class="titlepage"><div><div><h2 class="title">5.13. Creating brokers</h2></div></div></div><p> Knative provides a default, channel-based broker implementation. This channel-based broker can be used for development and testing purposes, but does not provide adequate event delivery guarantees for production environments. </p><p> If a cluster administrator has configured your OpenShift Serverless deployment to use Kafka as the default broker type, creating a broker by using the default settings creates a Kafka-based broker. </p><p> If your OpenShift Serverless deployment is not configured to use Kafka broker as the default broker type, the channel-based broker is created when you use the default settings in the following procedures. </p><section class="section" id="serverless-create-broker-kn_serverless-using-brokers"><div class="titlepage"><div><div><h3 class="title">5.13.1. Creating a broker by using the Knative CLI</h3></div></div></div><p> Brokers can be used in combination with triggers to deliver events from an event source to an event sink. Using the Knative (<code class="literal">kn</code>) CLI to create brokers provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the <code class="literal">kn broker create</code> command to create a broker. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Create a broker: </p><pre class="programlisting language-terminal">$ kn broker create <broker_name></pre></li></ul></div><div class="orderedlist"><p class="title"><strong>Verification</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Use the <code class="literal">kn</code> command to list all existing brokers: </p><pre class="programlisting language-terminal">$ kn broker list</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional: If you are using the OpenShift Container Platform web console, you can navigate to the <span class="strong strong"><strong>Topology</strong></span> view in the <span class="strong strong"><strong>Developer</strong></span> perspective, and observe that the broker exists: </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/6f31d83abe7f0634c474aac99db75256/odc-view-broker.png" alt="View the broker in the web console Topology view"></div></div></li></ol></div></section><section class="section" id="serverless-creating-broker-annotation_serverless-using-brokers"><div class="titlepage"><div><div><h3 class="title">5.13.2. Creating a broker by annotating a trigger</h3></div></div></div><p> Brokers can be used in combination with triggers to deliver events from an event source to an event sink. You can create a broker by adding the <code class="literal">eventing.knative.dev/injection: enabled</code> annotation to a <code class="literal">Trigger</code> object. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> If you create a broker by using the <code class="literal">eventing.knative.dev/injection: enabled</code> annotation, you cannot delete this broker without cluster administrator permissions. If you delete the broker without having a cluster administrator remove this annotation first, the broker is created again after deletion. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a <code class="literal">Trigger</code> object as a YAML file that has the <code class="literal">eventing.knative.dev/injection: enabled</code> annotation: </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: annotations: eventing.knative.dev/injection: enabled name: <trigger_name> spec: broker: default subscriber: <span id="CO25-1"><!--Empty--></span><span class="callout">1</span> ref: apiVersion: serving.knative.dev/v1 kind: Service name: <service_name></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO25-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Specify details about the event sink, or <span class="emphasis"><em>subscriber</em></span>, that the trigger sends events to. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">Trigger</code> YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the broker has been created successfully by using the <code class="literal">oc</code> CLI, or by observing it in the <span class="strong strong"><strong>Topology</strong></span> view in the web console. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Enter the following <code class="literal">oc</code> command to get the broker: </p><pre class="programlisting language-terminal">$ oc -n <namespace> get broker default</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional: If you are using the OpenShift Container Platform web console, you can navigate to the <span class="strong strong"><strong>Topology</strong></span> view in the <span class="strong strong"><strong>Developer</strong></span> perspective, and observe that the broker exists: </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/6f31d83abe7f0634c474aac99db75256/odc-view-broker.png" alt="View the broker in the web console Topology view"></div></div></li></ol></div></section><section class="section" id="serverless-creating-broker-labeling_serverless-using-brokers"><div class="titlepage"><div><div><h3 class="title">5.13.3. Creating a broker by labeling a namespace</h3></div></div></div><p> Brokers can be used in combination with triggers to deliver events from an event source to an event sink. You can create the <code class="literal">default</code> broker automatically by labelling a namespace that you own or have write permissions for. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Brokers created using this method are not removed if you remove the label. You must manually delete them. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Label a namespace with <code class="literal">eventing.knative.dev/injection=enabled</code>: </p><pre class="programlisting language-terminal">$ oc label namespace <namespace> eventing.knative.dev/injection=enabled</pre></li></ul></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the broker has been created successfully by using the <code class="literal">oc</code> CLI, or by observing it in the <span class="strong strong"><strong>Topology</strong></span> view in the web console. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Use the <code class="literal">oc</code> command to get the broker: </p><pre class="programlisting language-terminal">$ oc -n <namespace> get broker <broker_name></pre><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ oc -n default get broker default</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional: If you are using the OpenShift Container Platform web console, you can navigate to the <span class="strong strong"><strong>Topology</strong></span> view in the <span class="strong strong"><strong>Developer</strong></span> perspective, and observe that the broker exists: </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/6f31d83abe7f0634c474aac99db75256/odc-view-broker.png" alt="View the broker in the web console Topology view"></div></div></li></ol></div></section><section class="section" id="serverless-deleting-broker-injection_serverless-using-brokers"><div class="titlepage"><div><div><h3 class="title">5.13.4. Deleting a broker that was created by injection</h3></div></div></div><p> If you create a broker by injection and later want to delete it, you must delete it manually. Brokers created by using a namespace label or trigger annotation are not deleted permanently if you remove the label or annotation. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Remove the <code class="literal">eventing.knative.dev/injection=enabled</code> label from the namespace: </p><pre class="programlisting language-terminal">$ oc label namespace <namespace> eventing.knative.dev/injection-</pre><p class="simpara"> Removing the annotation prevents Knative from recreating the broker after you delete it. </p></li><li class="listitem"><p class="simpara"> Delete the broker from the selected namespace: </p><pre class="programlisting language-terminal">$ oc -n <namespace> delete broker <broker_name></pre></li></ol></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Use the <code class="literal">oc</code> command to get the broker: </p><pre class="programlisting language-terminal">$ oc -n <namespace> get broker <broker_name></pre><div class="formalpara"><p class="title"><strong>Example command</strong></p><p> </p><pre class="programlisting language-terminal">$ oc -n default get broker default</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not found</pre> <p></p></div></li></ul></div></section><section class="section" id="serverless-using-brokers-kafka_serverless-using-brokers"><div class="titlepage"><div><div><h3 class="title">5.13.5. Creating a Kafka broker when it is not configured as the default broker type</h3></div></div></div><p> If your OpenShift Serverless deployment is not configured to use Kafka broker as the default broker type, you can use one of the following procedures to create a Kafka-based broker. </p><section class="section" id="serverless-kafka-broker_serverless-using-brokers"><div class="titlepage"><div><div><h4 class="title">5.13.5.1. Creating a Kafka broker by using YAML</h4></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe applications declaratively and in a reproducible manner. To create a Kafka broker by using YAML, you must create a YAML file that defines a <code class="literal">Broker</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and the <code class="literal">KnativeKafka</code> custom resource are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have installed the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a Kafka-based broker as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka <span id="CO26-1"><!--Empty--></span><span class="callout">1</span> name: example-kafka-broker spec: config: apiVersion: v1 kind: ConfigMap name: kafka-broker-config <span id="CO26-2"><!--Empty--></span><span class="callout">2</span> namespace: knative-eventing</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO26-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The broker class. If not specified, brokers use the default class as configured by cluster administrators. To use the Kafka broker, this value must be <code class="literal">Kafka</code>. </div></dd><dt><a href="#CO26-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The default config map for Knative Kafka brokers. This config map is created when the Kafka broker functionality is enabled on the cluster by a cluster administrator. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the Kafka-based broker YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section><section class="section" id="serverless-kafka-broker-with-kafka-topic_serverless-using-brokers"><div class="titlepage"><div><div><h4 class="title">5.13.5.2. Creating a Kafka broker that uses an externally managed Kafka topic</h4></div></div></div><p> If you want to use a Kafka broker without allowing it to create its own internal topic, you can use an externally managed Kafka topic instead. To do this, you must create a Kafka <code class="literal">Broker</code> object that uses the <code class="literal">kafka.eventing.knative.dev/external.topic</code> annotation. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and the <code class="literal">KnativeKafka</code> custom resource are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have access to a Kafka instance such as <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_amq/7.6/html/amq_streams_on_openshift_overview/kafka-concepts_str#kafka-concepts-key_str">Red Hat AMQ Streams</a>, and have created a Kafka topic. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have installed the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a Kafka-based broker as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka <span id="CO27-1"><!--Empty--></span><span class="callout">1</span> kafka.eventing.knative.dev/external.topic: <topic_name> <span id="CO27-2"><!--Empty--></span><span class="callout">2</span> ...</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO27-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The broker class. If not specified, brokers use the default class as configured by cluster administrators. To use the Kafka broker, this value must be <code class="literal">Kafka</code>. </div></dd><dt><a href="#CO27-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The name of the Kafka topic that you want to use. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the Kafka-based broker YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section></section><section class="section" id="serverless-using-brokers-managing-brokers"><div class="titlepage"><div><div><h3 class="title">5.13.6. Managing brokers</h3></div></div></div><p> The Knative (<code class="literal">kn</code>) CLI provides commands that can be used to describe and list existing brokers. </p><section class="section" id="serverless-list-broker-kn_serverless-using-brokers"><div class="titlepage"><div><div><h4 class="title">5.13.6.1. Listing existing brokers by using the Knative CLI</h4></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to list brokers provides a streamlined and intuitive user interface. You can use the <code class="literal">kn broker list</code> command to list existing brokers in your cluster by using the Knative CLI. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> List all existing brokers: </p><pre class="programlisting language-terminal">$ kn broker list</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True</pre> <p></p></div></li></ul></div></section><section class="section" id="serverless-describe-broker-kn_serverless-using-brokers"><div class="titlepage"><div><div><h4 class="title">5.13.6.2. Describing an existing broker by using the Knative CLI</h4></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to describe brokers provides a streamlined and intuitive user interface. You can use the <code class="literal">kn broker describe</code> command to print information about existing brokers in your cluster by using the Knative CLI. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Describe an existing broker: </p><pre class="programlisting language-terminal">$ kn broker describe <broker_name></pre><div class="formalpara"><p class="title"><strong>Example command using default broker</strong></p><p> </p><pre class="programlisting language-terminal">$ kn broker describe default</pre> <p></p></div><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: default Namespace: default Annotations: eventing.knative.dev/broker.class=MTChannelBasedBroker, eventing.knative.dev/creato ... Age: 22s Address: URL: http://broker-ingress.knative-eventing.svc.cluster.local/default/default Conditions: OK TYPE AGE REASON ++ Ready 22s ++ Addressable 22s ++ FilterReady 22s ++ IngressReady 22s ++ TriggerChannelReady 22s</pre> <p></p></div></li></ul></div></section></section><section class="section" id="next-steps_serverless-using-brokers"><div class="titlepage"><div><div><h3 class="title">5.13.7. Next steps</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Configure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. See <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-configuring-event-delivery-examples_serverless-event-delivery">Examples of configuring event delivery parameters</a>. </li></ul></div></section><section class="section _additional-resources" id="additional-resources_serverless-using-brokers"><div class="titlepage"><div><div><h3 class="title">5.13.8. Additional resources</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-global-config-broker-class-default_serverless-configuration">Configuring the default broker class</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-triggers">Triggers</a><a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#knative-event-sources">Event sources</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-event-delivery">Event delivery</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-kafka-developer-broker">Kafka broker</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-kafka-admin">Configuring Knative Kafka</a> </li></ul></div></section></section><section class="section" id="serverless-triggers"><div class="titlepage"><div><div><h2 class="title">5.14. Triggers</h2></div></div></div><p> Brokers can be used in combination with triggers to deliver events from an event source to an event sink. Events are sent from an event source to a broker as an HTTP <code class="literal">POST</code> request. After events have entered the broker, they can be filtered by <a class="link" href="https://github.com/cloudevents/spec/blob/v1.0/spec.md#context-attributes">CloudEvent attributes</a> using triggers, and sent as an HTTP <code class="literal">POST</code> request to an event sink. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/ea40932cc228a1b20e17c5252a49a2f2/serverless-event-broker-workflow.png" alt="Broker event delivery overview"></div></div><p> If you are using a Kafka broker, you can configure the delivery order of events from triggers to event sinks. See <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#trigger-event-delivery-config_serverless-triggers">Configuring event delivery ordering for triggers</a>. </p><section class="section" id="serverless-create-trigger-odc_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.1. Creating a trigger by using the web console</h3></div></div></div><p> Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create a trigger. After Knative Eventing is installed on your cluster and you have created a broker, you can create a trigger by using the web console. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have logged in to the web console. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have created a broker and a Knative service or other event sink to connect to the trigger. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to the <span class="strong strong"><strong>Topology</strong></span> page. </li><li class="listitem"> Hover over the broker that you want to create a trigger for, and drag the arrow. The <span class="strong strong"><strong>Add Trigger</strong></span> option is displayed. </li><li class="listitem"> Click <span class="strong strong"><strong>Add Trigger</strong></span>. </li><li class="listitem"> Select your sink in the <span class="strong strong"><strong>Subscriber</strong></span> list. </li><li class="listitem"> Click <span class="strong strong"><strong>Add</strong></span>. </li></ol></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> After the subscription has been created, you can view it in the <span class="strong strong"><strong>Topology</strong></span> page, where it is represented as a line that connects the broker to the event sink. </li></ul></div><div class="orderedlist"><p class="title"><strong>Deleting a trigger</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to the <span class="strong strong"><strong>Topology</strong></span> page. </li><li class="listitem"> Click on the trigger that you want to delete. </li><li class="listitem"> In the <span class="strong strong"><strong>Actions</strong></span> context menu, select <span class="strong strong"><strong>Delete Trigger</strong></span>. </li></ol></div></section><section class="section" id="serverless-create-kn-trigger_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.2. Creating a trigger by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to create triggers provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the <code class="literal">kn trigger create</code> command to create a trigger. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Create a trigger: </p><pre class="programlisting language-terminal">$ kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name></pre><p class="simpara"> Alternatively, you can create a trigger and simultaneously create the <code class="literal">default</code> broker using broker injection: </p><pre class="programlisting language-terminal">$ kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name></pre><p class="simpara"> By default, triggers forward all events sent to a broker to sinks that are subscribed to that broker. Using the <code class="literal">--filter</code> attribute for triggers allows you to filter events from a broker, so that subscribers will only receive a subset of events based on your defined criteria. </p></li></ul></div></section><section class="section" id="kn-trigger-list_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.3. Listing triggers by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to list triggers provides a streamlined and intuitive user interface. You can use the <code class="literal">kn trigger list</code> command to list existing triggers in your cluster. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Print a list of available triggers: </p><pre class="programlisting language-terminal">$ kn trigger list</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME BROKER SINK AGE CONDITIONS READY REASON email default ksvc:edisplay 4s 5 OK / 5 True ping default ksvc:edisplay 32s 5 OK / 5 True</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional: Print a list of triggers in JSON format: </p><pre class="programlisting language-terminal">$ kn trigger list -o json</pre></li></ol></div></section><section class="section" id="kn-trigger-describe_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.4. Describing a trigger by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to describe triggers provides a streamlined and intuitive user interface. You can use the <code class="literal">kn trigger describe</code> command to print information about existing triggers in your cluster by using the Knative CLI. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a trigger. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Enter the command: </p><pre class="programlisting language-terminal">$ kn trigger describe <trigger_name></pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: ping Namespace: default Labels: eventing.knative.dev/broker=default Annotations: eventing.knative.dev/creator=kube:admin, eventing.knative.dev/lastModifier=kube:admin Age: 2m Broker: default Filter: type: dev.knative.event Sink: Name: edisplay Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 2m ++ BrokerReady 2m ++ DependencyReady 2m ++ Subscribed 2m ++ SubscriberResolved 2m</pre> <p></p></div></li></ul></div></section><section class="section" id="kn-trigger-filtering_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.5. Filtering events with triggers by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to filter events by using triggers provides a streamlined and intuitive user interface. You can use the <code class="literal">kn trigger create</code> command, along with the appropriate flags, to filter events by using triggers. </p><p> In the following trigger example, only events with the attribute <code class="literal">type: dev.knative.samples.helloworld</code> are sent to the event sink: </p><pre class="programlisting language-terminal">$ kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name></pre><p> You can also filter events by using multiple attributes. The following example shows how to filter events using the type, source, and extension attributes: </p><pre class="programlisting language-terminal">$ kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \ --filter type=dev.knative.samples.helloworld \ --filter source=dev.knative.samples/helloworldsource \ --filter myextension=my-extension-value</pre></section><section class="section" id="kn-trigger-update_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.6. Updating a trigger by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to update triggers provides a streamlined and intuitive user interface. You can use the <code class="literal">kn trigger update</code> command with certain flags to update attributes for a trigger. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Update a trigger: </p><pre class="programlisting language-terminal">$ kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]</pre><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p class="simpara"> You can update a trigger to filter exact event attributes that match incoming events. For example, using the <code class="literal">type</code> attribute: </p><pre class="programlisting language-terminal">$ kn trigger update <trigger_name> --filter type=knative.dev.event</pre></li><li class="listitem"><p class="simpara"> You can remove a filter attribute from a trigger. For example, you can remove the filter attribute with key <code class="literal">type</code>: </p><pre class="programlisting language-terminal">$ kn trigger update <trigger_name> --filter type-</pre></li><li class="listitem"><p class="simpara"> You can use the <code class="literal">--sink</code> parameter to change the event sink of a trigger: </p><pre class="programlisting language-terminal">$ kn trigger update <trigger_name> --sink ksvc:my-event-sink</pre></li></ul></div></li></ul></div></section><section class="section" id="delete-kn-trigger_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.7. Deleting a trigger by using the Knative CLI</h3></div></div></div><p> Using the Knative (<code class="literal">kn</code>) CLI to delete a trigger provides a streamlined and intuitive user interface. You can use the <code class="literal">kn trigger delete</code> command to delete a trigger. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Delete a trigger: </p><pre class="programlisting language-terminal">$ kn trigger delete <trigger_name></pre></li></ul></div><div class="orderedlist"><p class="title"><strong>Verification</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> List existing triggers: </p><pre class="programlisting language-terminal">$ kn trigger list</pre></li><li class="listitem"><p class="simpara"> Verify that the trigger no longer exists: </p><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">No triggers found.</pre> <p></p></div></li></ol></div></section><section class="section" id="trigger-event-delivery-config_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.8. Configuring event delivery ordering for triggers</h3></div></div></div><p> If you are using a Kafka broker, you can configure the delivery order of events from triggers to event sinks. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and Knative Kafka are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> Kafka broker is enabled for use on your cluster, and you have created a Kafka broker. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have installed the OpenShift (<code class="literal">oc</code>) CLI. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create or modify a <code class="literal">Trigger</code> object and set the <code class="literal">kafka.eventing.knative.dev/delivery.order</code> annotation: </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: <trigger_name> annotations: kafka.eventing.knative.dev/delivery.order: ordered ...</pre><p class="simpara"> The supported consumer delivery guarantees are: </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">unordered</code></span></dt><dd> An unordered consumer is a non-blocking consumer that delivers messages unordered, while preserving proper offset management. </dd><dt><span class="term"><code class="literal">ordered</code></span></dt><dd><p class="simpara"> An ordered consumer is a per-partition blocking consumer that waits for a successful response from the CloudEvent subscriber before it delivers the next message of the partition. </p><p class="simpara"> The default ordering guarantee is <code class="literal">unordered</code>. </p></dd></dl></div></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">Trigger</code> object: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section><section class="section" id="next-steps_serverless-triggers"><div class="titlepage"><div><div><h3 class="title">5.14.9. Next steps</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Configure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. See <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-configuring-event-delivery-examples_serverless-event-delivery">Examples of configuring event delivery parameters</a>. </li></ul></div></section></section><section class="section" id="serverless-kafka-developer"><div class="titlepage"><div><div><h2 class="title">5.15. Using Knative Kafka</h2></div></div></div><p> Knative Kafka provides integration options for you to use supported versions of the Apache Kafka message streaming platform with OpenShift Serverless. Kafka provides options for event source, channel, broker, and event sink capabilities. </p><p> Knative Kafka functionality is available in an OpenShift Serverless installation <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-install-kafka-odc_serverless-kafka-admin">if a cluster administrator has installed the <code class="literal">KnativeKafka</code> custom resource</a>. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Knative Kafka is not currently supported for IBM Z and IBM Power Systems. </p></div></rh-alert><p> Knative Kafka provides additional options, such as: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Kafka source </li><li class="listitem"> Kafka channel </li><li class="listitem"> Kafka broker </li><li class="listitem"> Kafka sink </li></ul></div><section class="section" id="serverless-kafka-delivery-retries_serverless-kafka-developer"><div class="titlepage"><div><div><h3 class="title">5.15.1. Kafka event delivery and retries</h3></div></div></div><p> Using Kafka components in an event-driven architecture provides "at least once" event delivery. This means that operations are retried until a return code value is received. This makes applications more resilient to lost events; however, it might result in duplicate events being sent. </p><p> For the Kafka event source, there is a fixed number of retries for event delivery by default. For Kafka channels, retries are only performed if they are configured in the Kafka channel <code class="literal">Delivery</code> spec. </p><p> See the <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-event-delivery">Event delivery</a> documentation for more information about delivery guarantees. </p></section><section class="section" id="serverless-kafka-developer-source"><div class="titlepage"><div><div><h3 class="title">5.15.2. Kafka source</h3></div></div></div><p> You can create a Kafka source that reads events from an Apache Kafka cluster and passes these events to a sink. You can create a Kafka source by using the OpenShift Container Platform web console, the Knative (<code class="literal">kn</code>) CLI, or by creating a <code class="literal">KafkaSource</code> object directly as a YAML file and using the OpenShift CLI (<code class="literal">oc</code>) to apply it. </p><section class="section" id="serverless-kafka-source-odc_serverless-kafka-developer"><div class="titlepage"><div><div><h4 class="title">5.15.2.1. Creating a Kafka event source by using the web console</h4></div></div></div><p> After Knative Kafka is installed on your cluster, you can create a Kafka source by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create a Kafka source. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and the <code class="literal">KnativeKafka</code> custom resource are installed on your cluster. </li><li class="listitem"> You have logged in to the web console. </li><li class="listitem"> You have access to a Red Hat AMQ Streams (Kafka) cluster that produces the Kafka messages you want to import. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to the <span class="strong strong"><strong>+Add</strong></span> page and select <span class="strong strong"><strong>Event Source</strong></span>. </li><li class="listitem"> In the <span class="strong strong"><strong>Event Sources</strong></span> page, select <span class="strong strong"><strong>Kafka Source</strong></span> in the <span class="strong strong"><strong>Type</strong></span> section. </li><li class="listitem"><p class="simpara"> Configure the <span class="strong strong"><strong>Kafka Source</strong></span> settings: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Add a comma-separated list of <span class="strong strong"><strong>Bootstrap Servers</strong></span>. </li><li class="listitem"> Add a comma-separated list of <span class="strong strong"><strong>Topics</strong></span>. </li><li class="listitem"> Add a <span class="strong strong"><strong>Consumer Group</strong></span>. </li><li class="listitem"> Select the <span class="strong strong"><strong>Service Account Name</strong></span> for the service account that you created. </li><li class="listitem"> Select the <span class="strong strong"><strong>Sink</strong></span> for the event source. A <span class="strong strong"><strong>Sink</strong></span> can be either a <span class="strong strong"><strong>Resource</strong></span>, such as a channel, broker, or service, or a <span class="strong strong"><strong>URI</strong></span>. </li><li class="listitem"> Enter a <span class="strong strong"><strong>Name</strong></span> for the Kafka event source. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> You can verify that the Kafka event source was created and is connected to the sink by viewing the <span class="strong strong"><strong>Topology</strong></span> page. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> In the <span class="strong strong"><strong>Developer</strong></span> perspective, navigate to <span class="strong strong"><strong>Topology</strong></span>. </li><li class="listitem"><p class="simpara"> View the Kafka event source and sink. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/bcbda4539ad0b56280f6bd1158e23667/verify-kafka-ODC.png" alt="View the Kafka source and service in the Topology view"></div></div></li></ol></div></section><section class="section" id="serverless-kafka-source-kn_serverless-kafka-developer"><div class="titlepage"><div><div><h4 class="title">5.15.2.2. Creating a Kafka event source by using the Knative CLI</h4></div></div></div><p> You can use the <code class="literal">kn source kafka create</code> command to create a Kafka source by using the Knative (<code class="literal">kn</code>) CLI. Using the Knative CLI to create event sources provides a more streamlined and intuitive user interface than modifying YAML files directly. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, Knative Serving, and the <code class="literal">KnativeKafka</code> custom resource (CR) are installed on your cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have access to a Red Hat AMQ Streams (Kafka) cluster that produces the Kafka messages you want to import. </li><li class="listitem"> You have installed the Knative (<code class="literal">kn</code>) CLI. </li><li class="listitem"> Optional: You have installed the OpenShift CLI (<code class="literal">oc</code>) if you want to use the verification steps in this procedure. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> To verify that the Kafka event source is working, create a Knative service that dumps incoming events into the service logs: </p><pre class="programlisting language-terminal">$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display</pre></li><li class="listitem"><p class="simpara"> Create a <code class="literal">KafkaSource</code> CR: </p><pre class="programlisting language-terminal">$ kn source kafka create <kafka_source_name> \ --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \ --topics <topic_name> --consumergroup my-consumer-group \ --sink event-display</pre><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Replace the placeholder values in this command with values for your source name, bootstrap servers, and topics. </p></div></rh-alert><p class="simpara"> The <code class="literal">--servers</code>, <code class="literal">--topics</code>, and <code class="literal">--consumergroup</code> options specify the connection parameters to the Kafka cluster. The <code class="literal">--consumergroup</code> option is optional. </p></li><li class="listitem"><p class="simpara"> Optional: View details about the <code class="literal">KafkaSource</code> CR you created: </p><pre class="programlisting language-terminal">$ kn source kafka describe <kafka_source_name></pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: example-kafka-source Namespace: kafka Age: 1h BootstrapServers: example-cluster-kafka-bootstrap.kafka.svc:9092 Topics: example-topic ConsumerGroup: example-consumer-group Sink: Name: event-display Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 1h ++ Deployed 1h ++ SinkProvided 1h</pre> <p></p></div></li></ol></div><div class="orderedlist"><p class="title"><strong>Verification steps</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Trigger the Kafka instance to send a message to the topic: </p><pre class="programlisting language-terminal">$ oc -n kafka run kafka-producer \ -ti --image=quay.io/strimzi/kafka:latest-kafka-2.7.0 --rm=true \ --restart=Never -- bin/kafka-console-producer.sh \ --broker-list <cluster_kafka_bootstrap>:9092 --topic my-topic</pre><p class="simpara"> Enter the message in the prompt. This command assumes that: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The Kafka cluster is installed in the <code class="literal">kafka</code> namespace. </li><li class="listitem"> The <code class="literal">KafkaSource</code> object has been configured to use the <code class="literal">my-topic</code> topic. </li></ul></div></li><li class="listitem"><p class="simpara"> Verify that the message arrived by viewing the logs: </p><pre class="programlisting language-terminal">$ oc logs $(oc get pod -o name | grep event-display) -c user-container</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">☁️ cloudevents.Event Validation: valid Context Attributes, specversion: 1.0 type: dev.knative.kafka.event source: /apis/v1/namespaces/default/kafkasources/example-kafka-source#example-topic subject: partition:46#0 id: partition:46/offset:0 time: 2021-03-10T11:21:49.4Z Extensions, traceparent: 00-161ff3815727d8755848ec01c866d1cd-7ff3916c44334678-00 Data, Hello!</pre> <p></p></div></li></ol></div><section class="section" id="specifying-sink-flag-kn_serverless-kafka-developer"><div class="titlepage"><div><div><h5 class="title">5.15.2.2.1. Knative CLI sink flag</h5></div></div></div><p> When you create an event source by using the Knative (<code class="literal">kn</code>) CLI, you can specify a sink where events are sent to from that resource by using the <code class="literal">--sink</code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources. </p><p> The following example creates a sink binding that uses a service, <code class="literal">http://event-display.svc.cluster.local</code>, as the sink: </p><div class="formalpara"><p class="title"><strong>Example command using the sink flag</strong></p><p> </p><pre class="programlisting language-terminal">$ kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ <span id="CO28-1"><!--Empty--></span><span class="callout">1</span> --ce-override "sink=bound"</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO28-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">svc</code> in <code class="literal">http://event-display.svc.cluster.local</code> determines that the sink is a Knative service. Other default sink prefixes include <code class="literal">channel</code>, and <code class="literal">broker</code>. </div></dd></dl></div></section></section><section class="section" id="serverless-kafka-source-yaml_serverless-kafka-developer"><div class="titlepage"><div><div><h4 class="title">5.15.2.3. Creating a Kafka event source by using YAML</h4></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe applications declaratively and in a reproducible manner. To create a Kafka source by using YAML, you must create a YAML file that defines a <code class="literal">KafkaSource</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and the <code class="literal">KnativeKafka</code> custom resource are installed on your cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have access to a Red Hat AMQ Streams (Kafka) cluster that produces the Kafka messages you want to import. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a <code class="literal">KafkaSource</code> object as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1beta1 kind: KafkaSource metadata: name: <source_name> spec: consumerGroup: <group_name> <span id="CO29-1"><!--Empty--></span><span class="callout">1</span> bootstrapServers: - <list_of_bootstrap_servers> topics: - <list_of_topics> <span id="CO29-2"><!--Empty--></span><span class="callout">2</span> sink: - <list_of_sinks> <span id="CO29-3"><!--Empty--></span><span class="callout">3</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO29-1"><span class="callout">1</span></a> </dt><dd><div class="para"> A consumer group is a group of consumers that use the same group ID, and consume data from a topic. </div></dd><dt><a href="#CO29-2"><span class="callout">2</span></a> </dt><dd><div class="para"> A topic provides a destination for the storage of data. Each topic is split into one or more partitions. </div></dd><dt><a href="#CO29-3"><span class="callout">3</span></a> </dt><dd><div class="para"> A sink specifies where events are sent to from a source. </div></dd></dl></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Only the <code class="literal">v1beta1</code> version of the API for <code class="literal">KafkaSource</code> objects on OpenShift Serverless is supported. Do not use the <code class="literal">v1alpha1</code> version of this API, as this version is now deprecated. </p></div></rh-alert><div class="formalpara"><p class="title"><strong>Example <code class="literal">KafkaSource</code> object</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1beta1 kind: KafkaSource metadata: name: kafka-source spec: consumerGroup: knative-group bootstrapServers: - my-cluster-kafka-bootstrap.kafka:9092 topics: - knative-demo-topic sink: ref: apiVersion: serving.knative.dev/v1 kind: Service name: event-display</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">KafkaSource</code> YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div><div class="itemizedlist"><p class="title"><strong>Verification</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Verify that the Kafka event source was created by entering the following command: </p><pre class="programlisting language-terminal">$ oc get pods</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME READY STATUS RESTARTS AGE kafkasource-kafka-source-5ca0248f-... 1/1 Running 0 13m</pre> <p></p></div></li></ul></div></section></section><section class="section" id="serverless-kafka-developer-broker"><div class="titlepage"><div><div><h3 class="title">5.15.3. Kafka broker</h3></div></div></div><p> For production-ready Knative Eventing deployments, Red Hat recommends using the Knative Kafka broker implementation. The Kafka broker is an Apache Kafka native implementation of the Knative broker, which sends CloudEvents directly to the Kafka instance. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> The Federal Information Processing Standards (FIPS) mode is disabled for Kafka broker. </p></div></rh-alert><p> The Kafka broker has a native integration with Kafka for storing and routing events. This allows better integration with Kafka for the broker and trigger model over other broker types, and reduces network hops. Other benefits of the Kafka broker implementation include: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> At-least-once delivery guarantees </li><li class="listitem"> Ordered delivery of events, based on the CloudEvents partitioning extension </li><li class="listitem"> Control plane high availability </li><li class="listitem"> A horizontally scalable data plane </li></ul></div><p> The Knative Kafka broker stores incoming CloudEvents as Kafka records, using the binary content mode. This means that all CloudEvent attributes and extensions are mapped as headers on the Kafka record, while the <code class="literal">data</code> spec of the CloudEvent corresponds to the value of the Kafka record. </p><p> For information about using Kafka brokers, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-using-brokers">Creating brokers</a>. </p></section><section class="section" id="serverless-create-kafka-channel-yaml_serverless-kafka-developer"><div class="titlepage"><div><div><h3 class="title">5.15.4. Creating a Kafka channel by using YAML</h3></div></div></div><p> Creating Knative resources by using YAML files uses a declarative API, which enables you to describe channels declaratively and in a reproducible manner. You can create a Knative Eventing channel that is backed by Kafka topics by creating a Kafka channel. To create a Kafka channel by using YAML, you must create a YAML file that defines a <code class="literal">KafkaChannel</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and the <code class="literal">KnativeKafka</code> custom resource are installed on your OpenShift Container Platform cluster. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a <code class="literal">KafkaChannel</code> object as a YAML file: </p><pre class="programlisting language-yaml">apiVersion: messaging.knative.dev/v1beta1 kind: KafkaChannel metadata: name: example-channel namespace: default spec: numPartitions: 3 replicationFactor: 1</pre><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Only the <code class="literal">v1beta1</code> version of the API for <code class="literal">KafkaChannel</code> objects on OpenShift Serverless is supported. Do not use the <code class="literal">v1alpha1</code> version of this API, as this version is now deprecated. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Apply the <code class="literal">KafkaChannel</code> YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li></ol></div></section><section class="section" id="serverless-kafka-developer-sink"><div class="titlepage"><div><div><h3 class="title">5.15.5. Kafka sink</h3></div></div></div><p> Kafka sinks are a type of <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-event-sinks">event sink</a> that are available if a cluster administrator has enabled Kafka on your cluster. You can send events directly from an <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#knative-event-sources">event source</a> to a Kafka topic by using a Kafka sink. </p><section class="section" id="serverless-kafka-sink_serverless-kafka-developer"><div class="titlepage"><div><div><h4 class="title">5.15.5.1. Using a Kafka sink</h4></div></div></div><p> You can create an event sink called a Kafka sink that sends events to a Kafka topic. Creating Knative resources by using YAML files uses a declarative API, which enables you to describe applications declaratively and in a reproducible manner. By default, a Kafka sink uses the binary content mode, which is more efficient than the structured mode. To create a Kafka sink by using YAML, you must create a YAML file that defines a <code class="literal">KafkaSink</code> object, then apply it by using the <code class="literal">oc apply</code> command. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The OpenShift Serverless Operator, Knative Eventing, and the <code class="literal">KnativeKafka</code> custom resource (CR) are installed on your cluster. </li><li class="listitem"> You have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform. </li><li class="listitem"> You have access to a Red Hat AMQ Streams (Kafka) cluster that produces the Kafka messages you want to import. </li><li class="listitem"> Install the OpenShift CLI (<code class="literal">oc</code>). </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a <code class="literal">KafkaSink</code> object definition as a YAML file: </p><div class="formalpara"><p class="title"><strong>Kafka sink YAML</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink metadata: name: <sink-name> namespace: <namespace> spec: topic: <topic-name> bootstrapServers: - <bootstrap-server></pre> <p></p></div></li><li class="listitem"><p class="simpara"> To create the Kafka sink, apply the <code class="literal">KafkaSink</code> YAML file: </p><pre class="programlisting language-terminal">$ oc apply -f <filename></pre></li><li class="listitem"><p class="simpara"> Configure an event source so that the sink is specified in its spec: </p><div class="formalpara"><p class="title"><strong>Example of a Kafka sink connected to an API server source</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: sources.knative.dev/v1alpha2 kind: ApiServerSource metadata: name: <source-name> <span id="CO30-1"><!--Empty--></span><span class="callout">1</span> namespace: <namespace> <span id="CO30-2"><!--Empty--></span><span class="callout">2</span> spec: serviceAccountName: <service-account-name> <span id="CO30-3"><!--Empty--></span><span class="callout">3</span> mode: Resource resources: - apiVersion: v1 kind: Event sink: ref: apiVersion: eventing.knative.dev/v1alpha1 kind: KafkaSink name: <sink-name> <span id="CO30-4"><!--Empty--></span><span class="callout">4</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO30-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the event source. </div></dd><dt><a href="#CO30-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The namespace of the event source. </div></dd><dt><a href="#CO30-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The service account for the event source. </div></dd><dt><a href="#CO30-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The Kafka sink name. </div></dd></dl></div></li></ol></div></section></section><section class="section _additional-resources" id="additional-resources_serverless-kafka-developer"><div class="titlepage"><div><div><h3 class="title">5.15.6. Additional resources</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_amq/7.6/html/amq_streams_on_openshift_overview/kafka-concepts_str#kafka-concepts-key_str">Red Hat AMQ Streams documentation</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_amq/7.6/html-single/using_amq_streams_on_rhel/index#assembly-kafka-encryption-and-authentication-str">Red Hat AMQ Streams TLS and SASL on Kafka documentation</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-event-delivery">Event delivery</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-kafka-admin">Knative Kafka cluster administrator documentation</a> </li></ul></div></section></section></section></body></section><nav class="pagination" aria-label="pagination" data-v-8589d091 data-v-a6039582><rh-cta aria-disabled="false" class="previous-btn" variant="brick" data-v-a6039582><a href="/en/documentation/openshift_container_platform/4.8/html/serverless/knative-cli" data-v-a6039582>Previous</a></rh-cta><rh-cta aria-disabled="false" class="next-btn" variant="brick" data-v-a6039582><a href="/en/documentation/openshift_container_platform/4.8/html/serverless/administer" data-v-a6039582>Next</a></rh-cta></nav></div></article><aside id="layout" class="span-xs-12 span-sm-2 span-md-2 content-format-selectors" aria-label="Select page format" data-v-8589d091><div class="page-layout-options" data-v-8589d091><label for="page-format" data-v-8589d091>Format</label><select id="page-format" class="page-format-dropdown" data-v-8589d091><option selected class="page-type" value="html" data-v-8589d091>Multi-page</option><option class="page-type" value="html-single" data-v-8589d091>Single-page</option><option class="page-type" value="pdf" data-v-8589d091>View full doc as PDF</option></select></div><details open id="jump-links-details" class="sticky-top" data-v-8589d091><summary class="jump-links-heading" data-v-8589d091>Jump to section</summary><nav class="jump-links" id="right-navigation-links" data-v-8589d091 data-v-1d1b84c1><ul data-v-1d1b84c1><!--[--><li class="active_link jump-link-item" data-v-1d1b84c1><a href="#serverless-applications" id="right-sub-link-to-serverless-applications" data-v-1d1b84c1>Serverless applications</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-autoscaling-developer" id="right-sub-link-to-serverless-autoscaling-developer" data-v-1d1b84c1>Autoscaling</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-traffic-management" id="right-sub-link-to-serverless-traffic-management" data-v-1d1b84c1>Traffic management</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-configuring-routes" id="right-sub-link-to-serverless-configuring-routes" data-v-1d1b84c1>Routing</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-event-sinks" id="right-sub-link-to-serverless-event-sinks" data-v-1d1b84c1>Event sinks</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-event-delivery" id="right-sub-link-to-serverless-event-delivery" data-v-1d1b84c1>Event delivery</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-listing-event-sources" id="right-sub-link-to-serverless-listing-event-sources" data-v-1d1b84c1>Listing event sources and event source types</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-apiserversource" id="right-sub-link-to-serverless-apiserversource" data-v-1d1b84c1>Creating an API server source</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-pingsource" id="right-sub-link-to-serverless-pingsource" data-v-1d1b84c1>Creating a ping source</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-custom-event-sources" id="right-sub-link-to-serverless-custom-event-sources" data-v-1d1b84c1>Custom event sources</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-creating-channels" id="right-sub-link-to-serverless-creating-channels" data-v-1d1b84c1>Creating channels</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-subs" id="right-sub-link-to-serverless-subs" data-v-1d1b84c1>Creating and managing subscriptions</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-using-brokers" id="right-sub-link-to-serverless-using-brokers" data-v-1d1b84c1>Creating brokers</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-triggers" id="right-sub-link-to-serverless-triggers" data-v-1d1b84c1>Triggers</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#serverless-kafka-developer" id="right-sub-link-to-serverless-kafka-developer" data-v-1d1b84c1>Using Knative Kafka</a></li><!--]--></ul></nav></details></aside></div><div class="btn-container hidden" data-v-8589d091><pf-button class="top-scroll-btn" icon="angle-up" icon-set="fas" icon-position="right" data-v-8589d091>Back to top</pf-button></div><!--]--><!--]--></main><rh-footer data-analytics-region="page-footer" data-v-97dd2752><a slot="logo" href="/en" data-analytics-category="Footer" data-analytics-text="Logo" data-v-97dd2752><img alt="Red Hat logo" src="/Logo-Red_Hat-Documentation-A-Reverse-RGB.svg" loading="lazy" width="222" height="40" data-v-97dd2752></a><rh-footer-social-link slot="social-links" icon="github" data-v-97dd2752><a href="https://github.com/redhat-documentation" data-analytics-region="social-links-exit" data-analytics-category="Footer|social-links" data-analytics-text="LinkedIn" data-v-97dd2752>Github</a></rh-footer-social-link><rh-footer-social-link slot="social-links" icon="reddit" data-v-97dd2752><a href="https://www.reddit.com/r/redhat/" data-analytics-region="social-links-exit" data-analytics-category="Footer|social-links" data-analytics-text="YouTube" data-v-97dd2752>Reddit</a></rh-footer-social-link><rh-footer-social-link slot="social-links" icon="youtube" data-v-97dd2752><a href="https://www.youtube.com/@redhat" data-analytics-region="social-links-exit" data-analytics-category="Footer|social-links" data-analytics-text="Facebook" data-v-97dd2752>Youtube</a></rh-footer-social-link><rh-footer-social-link slot="social-links" icon="twitter" data-v-97dd2752><a href="https://twitter.com/RedHat" data-analytics-region="social-links-exit" data-analytics-category="Footer|social-links" data-analytics-text="Twitter" data-v-97dd2752>Twitter</a></rh-footer-social-link><h3 slot="links" data-analytics-text="Learn" data-v-97dd2752>Learn</h3><ul slot="links" data-v-97dd2752><li data-v-97dd2752><a href="https://developers.redhat.com/learn" data-analytics-category="Footer|Learn" data-analytics-text="Developer resources" data-v-97dd2752>Developer resources</a></li><li data-v-97dd2752><a href="https://cloud.redhat.com/learn" data-analytics-category="Footer|Learn" data-analytics-text="Cloud learning hub" data-v-97dd2752>Cloud learning hub</a></li><li data-v-97dd2752><a href="https://www.redhat.com/en/interactive-labs" data-analytics-category="Footer|Learn" data-analytics-text="Interactive labs" data-v-97dd2752>Interactive labs</a></li><li data-v-97dd2752><a href="https://www.redhat.com/services/training-and-certification" data-analytics-category="Footer|Learn" data-analytics-text="Training and certification" data-v-97dd2752>Training and certification</a></li><li data-v-97dd2752><a href="https://access.redhat.com/support" data-analytics-category="Footer|Learn" data-analytics-text="Customer support" data-v-97dd2752>Customer support</a></li><li data-v-97dd2752><a href="/products" data-analytics-category="Footer|Learn" data-analytics-text="See all documentation" data-v-97dd2752>See all documentation</a></li></ul><h3 slot="links" data-analytics-text="Try buy sell" data-v-97dd2752>Try, buy, & sell</h3><ul slot="links" data-v-97dd2752><li data-v-97dd2752><a href="https://redhat.com/en/products/trials" data-analytics-category="Footer|Try buy sell" data-analytics-text="Product trial center" data-v-97dd2752>Product trial center</a></li><li data-v-97dd2752><a href="https://marketplace.redhat.com" data-analytics-category="Footer|Try buy sell" data-analytics-text="Red Hat Marketplace" data-v-97dd2752>Red Hat Marketplace</a></li><li data-v-97dd2752><a href="https://catalog.redhat.com/" data-analytics-category="Footer|Try buy sell" data-analytics-text="Red Hat Ecosystem Catalog" data-v-97dd2752>Red Hat Ecosystem Catalog</a></li><li data-v-97dd2752><a href="https://www.redhat.com/en/store" data-analytics-category="Footer|Try buy sell" data-analytics-text="Red Hat Store" data-v-97dd2752>Red Hat Store</a></li><li data-v-97dd2752><a href="https://www.redhat.com/about/japan-buy" data-analytics-category="Footer|Try buy sell" data-analytics-text="Buy online (Japan)" data-v-97dd2752>Buy online (Japan)</a></li></ul><h3 slot="links" data-analytics-text="Communities" data-v-97dd2752>Communities</h3><ul slot="links" data-v-97dd2752><li data-v-97dd2752><a href="https://access.redhat.com/community" data-analytics-category="Footer|Communities" data-analytics-text="Customer Portal Community" data-v-97dd2752>Customer Portal Community</a></li><li data-v-97dd2752><a href="https://www.redhat.com/events" data-analytics-category="Footer|Communities" data-analytics-text="Events" data-v-97dd2752>Events</a></li><li data-v-97dd2752><a href="https://www.redhat.com/about/our-community-contributions" data-analytics-category="Footer|Communities" data-analytics-text="How we contribute" data-v-97dd2752>How we contribute</a></li></ul><rh-footer-block slot="main-secondary" data-v-97dd2752><h3 slot="header" data-analytics-text="About Red Hat Documentation" data-v-97dd2752>About Red Hat Documentation</h3><p data-v-97dd2752>We help Red Hat users innovate and achieve their goals with our products and services with content they can trust.</p></rh-footer-block><rh-footer-block slot="main-secondary" data-v-97dd2752><h3 slot="header" data-analytics-text="Making open source more inclusive" data-v-97dd2752>Making open source more inclusive</h3><p data-v-97dd2752>Red Hat is committed to replacing problematic language in our code, documentation, and web properties. For more details, see the <a href=" https://www.redhat.com/en/blog/making-open-source-more-inclusive-eradicating-problematic-language" data-analytics-category="Footer|Making open source more inclusive" data-analytics-text="Red Hat Blog" data-v-97dd2752>Red Hat Blog</a>.</p></rh-footer-block><rh-footer-block slot="main-secondary" data-v-97dd2752><h3 slot="header" data-analytics-text="About Red Hat" data-v-97dd2752>About Red Hat</h3><p data-v-97dd2752>We deliver hardened solutions that make it easier for enterprises to work across platforms and environments, from the core datacenter to the network edge.</p></rh-footer-block><rh-footer-universal slot="universal" data-v-97dd2752><h3 slot="links-primary" data-analytics-text="Red Hat legal and privacy links" hidden data-v-97dd2752>Red Hat legal and privacy links</h3><ul slot="links-primary" data-analytics-region="page-footer-bottom-primary" data-v-97dd2752><li data-v-97dd2752><a href="https://redhat.com/en/about/company" data-analytics-category="Footer|Corporate" data-analytics-text="About Red Hat" data-v-97dd2752>About Red Hat</a></li><li data-v-97dd2752><a href="https://redhat.com/en/jobs" data-analytics-category="Footer|Corporate" data-analytics-text="Jobs" data-v-97dd2752>Jobs</a></li><li data-v-97dd2752><a href="https://redhat.com/en/events" data-analytics-category="Footer|Corporate" data-analytics-text="Events" data-v-97dd2752>Events</a></li><li data-v-97dd2752><a href="https://redhat.com/en/about/office-locations" data-analytics-category="Footer|Corporate" data-analytics-text="Locations" data-v-97dd2752>Locations</a></li><li data-v-97dd2752><a href="https://redhat.com/en/contact" data-analytics-category="Footer|Corporate" data-analytics-text="Contact Red Hat" data-v-97dd2752>Contact Red Hat</a></li><li data-v-97dd2752><a href="https://redhat.com/en/blog" data-analytics-category="Footer|Corporate" data-analytics-text="Red Hat Blog" data-v-97dd2752>Red Hat Blog</a></li><li data-v-97dd2752><a href="https://redhat.com/en/about/our-culture/diversity-equity-inclusion" data-analytics-category="Footer|Corporate" data-analytics-text="Diversity equity and inclusion" data-v-97dd2752>Diversity, equity, and inclusion</a></li><li data-v-97dd2752><a href="https://coolstuff.redhat.com/" data-analytics-category="Footer|Corporate" data-analytics-text="Cool Stuff Store" data-v-97dd2752>Cool Stuff Store</a></li><li data-v-97dd2752><a href="https://www.redhat.com/en/summit" data-analytics-category="Footer|Corporate" data-analytics-text="Red Hat Summit" data-v-97dd2752>Red Hat Summit</a></li></ul><span data-v-97dd2752 data-v-5f538988></span><rh-footer-copyright slot="links-secondary" data-v-97dd2752>© 2024 Red Hat, Inc.</rh-footer-copyright><h3 slot="links-secondary" data-analytics-text="Red Hat legal and privacy links" hidden data-v-97dd2752>Red Hat legal and privacy links</h3><ul slot="links-secondary" data-analytics-region="page-footer-bottom-secondary" data-v-97dd2752><li data-v-97dd2752><a href="https://redhat.com/en/about/privacy-policy" data-analytics-category="Footer|Red Hat legal and privacy links" data-analytics-text="Privacy statement" data-v-97dd2752>Privacy statement</a></li><li data-v-97dd2752><a href="https://redhat.com/en/about/terms-use" data-analytics-category="Footer|Red Hat legal and privacy links" data-analytics-text="Terms of use" data-v-97dd2752>Terms of use</a></li><li data-v-97dd2752><a href="https://redhat.com/en/about/all-policies-guidelines" data-analytics-category="Footer|Red Hat legal and privacy links" data-analytics-text="All policies and guidelines" data-v-97dd2752>All policies and guidelines</a></li><li data-v-97dd2752><a href="https://redhat.com/en/about/digital-accessibility" data-analytics-category="Footer|Red Hat legal and privacy links" data-analytics-text="Digital accessibility" class="active" data-v-97dd2752>Digital accessibility</a></li><li data-v-97dd2752><span id="teconsent" data-v-97dd2752></span></li></ul></rh-footer-universal></rh-footer><div id="consent_blackbar" style="position:fixed;bottom:0;width:100%;z-index:5;padding:10px;"></div><!--]--><!--]--></div><div id="teleports"></div><script type="application/json" id="__NUXT_DATA__" data-ssr="true">[["ShallowReactive",1],{"data":2,"state":11912,"once":11916,"_errors":11917,"serverRendered":10,"path":11919},["ShallowReactive",3],{"uUstF4AIyn":4,"Pn02PlJOas":11835,"rFVLKcOK8e":11910},{"name":5,"html":6,"type":-1,"toc":7,"breadcrumbs":11228,"error":16,"title":11239,"productName":11230,"productVersions":11303,"pagination":11390,"redirect":11758,"canonicalLinks":11759,"openShiftProducts":11774,"tocFromVolume":10,"jumpLinks":11789},"Chapter 5. Develop","\u003Cbody>\u003Csection class=\"chapter\" id=\"develop\">\u003Csection class=\"section\" id=\"serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.1. Serverless applications\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tServerless applications are created and deployed as Kubernetes services, defined by a route and a configuration, and contained in a YAML file. To deploy a serverless application using OpenShift Serverless, you must create a Knative \u003Ccode class=\"literal\">Service\u003C/code> object.\n\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example Knative \u003Ccode class=\"literal\">Service\u003C/code> object YAML file\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: hello \u003Cspan id=\"CO6-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n namespace: default \u003Cspan id=\"CO6-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nspec:\n template:\n spec:\n containers:\n - image: docker.io/openshift/hello-openshift \u003Cspan id=\"CO6-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n env:\n - name: RESPONSE \u003Cspan id=\"CO6-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n value: \"Hello Serverless!\"\u003C/pre>\n\n\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO6-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe name of the application.\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO6-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe namespace the application uses.\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO6-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe image of the application.\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO6-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe environment variable printed out by the sample application.\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cp>\n\t\t\t\tYou can create a serverless application by using one of the following methods:\n\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\tCreate a Knative service from the OpenShift Container Platform web console. See the documentation about \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/building_applications/#odc-creating-applications-using-developer-perspective\">Creating applications using the Developer perspective\u003C/a>.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tCreate a Knative service by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tCreate and apply a Knative \u003Ccode class=\"literal\">Service\u003C/code> object as a YAML file, by using the \u003Ccode class=\"literal\">oc\u003C/code> CLI.\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"creating-serverless-apps-kn_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.1. Creating serverless applications by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to create serverless applications provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the \u003Ccode class=\"literal\">kn service create\u003C/code> command to create a basic serverless application.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a Knative service:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create <service-name> --image <image> --tag <tag-value>\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tWhere:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"circle\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--image\u003C/code> is the URI of the image for the application.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--tag\u003C/code> is an optional flag that can be used to add a tag to the initial revision that is created with the service.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service create event-display \\\n --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Creating service 'event-display' in namespace 'default':\n\n 0.271s The Route is still working to reflect the latest desired specification.\n 0.580s Configuration \"event-display\" is waiting for a Revision to become ready.\n 3.857s ...\n 3.861s Ingress has not yet been reconciled.\n 4.270s Ready to serve.\n\nService 'event-display' created with latest revision 'event-display-bxshg-1' and URL:\nhttp://event-display-default.apps-crc.testing\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"creating-an-offline-service_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.2. Creating a service using offline mode\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can execute \u003Ccode class=\"literal\">kn service\u003C/code> commands in offline mode, so that no changes happen on the cluster, and instead the service descriptor file is created on your local machine. After the descriptor file is created, you can modify the file before propagating changes to the cluster.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tThe offline mode of the Knative CLI is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tFor more information about the support scope of Red Hat Technology Preview features, see \u003Ca class=\"link\" href=\"https://access.redhat.com/support/offerings/techpreview/\">https://access.redhat.com/support/offerings/techpreview/\u003C/a>.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tIn offline mode, create a local Knative service descriptor file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create event-display \\\n --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \\\n --target ./ \\\n --namespace test\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Service 'event-display' created in namespace 'test'.\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">--target ./\u003C/code> flag enables offline mode and specifies \u003Ccode class=\"literal\">./\u003C/code> as the directory for storing the new directory tree.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tIf you do not specify an existing directory, but use a filename, such as \u003Ccode class=\"literal\">--target my-service.yaml\u003C/code>, then no directory tree is created. Instead, only the service descriptor file \u003Ccode class=\"literal\">my-service.yaml\u003C/code> is created in the current directory.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe filename can have the \u003Ccode class=\"literal\">.yaml\u003C/code>, \u003Ccode class=\"literal\">.yml\u003C/code>, or \u003Ccode class=\"literal\">.json\u003C/code> extension. Choosing \u003Ccode class=\"literal\">.json\u003C/code> creates the service descriptor file in the JSON format.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">--namespace test\u003C/code> option places the new service in the \u003Ccode class=\"literal\">test\u003C/code> namespace.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tIf you do not use \u003Ccode class=\"literal\">--namespace\u003C/code>, and you are logged in to an OpenShift Container Platform cluster, the descriptor file is created in the current namespace. Otherwise, the descriptor file is created in the \u003Ccode class=\"literal\">default\u003C/code> namespace.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tExamine the created directory structure:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ tree ./\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">./\n└── test\n └── ksvc\n └── event-display.yaml\n\n2 directories, 1 file\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tThe current \u003Ccode class=\"literal\">./\u003C/code> directory specified with \u003Ccode class=\"literal\">--target\u003C/code> contains the new \u003Ccode class=\"literal\">test/\u003C/code> directory that is named after the specified namespace.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">test/\u003C/code> directory contains the \u003Ccode class=\"literal\">ksvc\u003C/code> directory, named after the resource type.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">ksvc\u003C/code> directory contains the descriptor file \u003Ccode class=\"literal\">event-display.yaml\u003C/code>, named according to the specified service name.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tExamine the generated service descriptor file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ cat test/ksvc/event-display.yaml\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n creationTimestamp: null\n name: event-display\n namespace: test\nspec:\n template:\n metadata:\n annotations:\n client.knative.dev/user-image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest\n creationTimestamp: null\n spec:\n containers:\n - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest\n name: \"\"\n resources: {}\nstatus: {}\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tList information about the new service:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service describe event-display --target ./ --namespace test\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Name: event-display\nNamespace: test\nAge:\nURL:\n\nRevisions:\n\nConditions:\n OK TYPE AGE REASON\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">--target ./\u003C/code> option specifies the root directory for the directory structure containing namespace subdirectories.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tAlternatively, you can directly specify a YAML or JSON filename with the \u003Ccode class=\"literal\">--target\u003C/code> option. The accepted file extensions are \u003Ccode class=\"literal\">.yaml\u003C/code>, \u003Ccode class=\"literal\">.yml\u003C/code>, and \u003Ccode class=\"literal\">.json\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">--namespace\u003C/code> option specifies the namespace, which communicates to \u003Ccode class=\"literal\">kn\u003C/code> the subdirectory that contains the necessary service descriptor file.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tIf you do not use \u003Ccode class=\"literal\">--namespace\u003C/code>, and you are logged in to an OpenShift Container Platform cluster, \u003Ccode class=\"literal\">kn\u003C/code> searches for the service in the subdirectory that is named after the current namespace. Otherwise, \u003Ccode class=\"literal\">kn\u003C/code> searches in the \u003Ccode class=\"literal\">default/\u003C/code> subdirectory.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tUse the service descriptor file to create the service on the cluster:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create -f test/ksvc/event-display.yaml\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Creating service 'event-display' in namespace 'test':\n\n 0.058s The Route is still working to reflect the latest desired specification.\n 0.098s ...\n 0.168s Configuration \"event-display\" is waiting for a Revision to become ready.\n 23.377s ...\n 23.419s Ingress has not yet been reconciled.\n 23.534s Waiting for load balancer to be ready\n 23.723s Ready to serve.\n\nService 'event-display' created to latest revision 'event-display-00001' is available at URL:\nhttp://event-display-test.apps.example.com\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"creating-serverless-apps-yaml_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.3. Creating serverless applications using YAML\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe applications declaratively and in a reproducible manner. To create a serverless application by using YAML, you must create a YAML file that defines a Knative \u003Ccode class=\"literal\">Service\u003C/code> object, then apply it by using \u003Ccode class=\"literal\">oc apply\u003C/code>.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAfter the service is created and the application is deployed, Knative creates an immutable revision for this version of the application. Knative also performs network programming to create a route, ingress, service, and load balancer for your application and automatically scales your pods up and down based on traffic.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a YAML file containing the following sample code:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: event-delivery\n namespace: default\nspec:\n template:\n spec:\n containers:\n - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest\n env:\n - name: RESPONSE\n value: \"Hello Serverless!\"\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tNavigate to the directory where the YAML file is contained, and deploy the application by applying the YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"verifying-serverless-app-deployment_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.4. Verifying your serverless application deployment\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTo verify that your serverless application has been deployed successfully, you must get the application URL created by Knative, and then send a request to that URL and observe the output. OpenShift Serverless supports the use of both HTTP and HTTPS URLs, however the output from \u003Ccode class=\"literal\">oc get ksvc\u003C/code> always prints URLs using the \u003Ccode class=\"literal\">http://\u003C/code> format.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the \u003Ccode class=\"literal\">oc\u003C/code> CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a Knative service.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tFind the application URL:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get ksvc <service_name>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME URL LATESTCREATED LATESTREADY READY REASON\nevent-delivery http://event-delivery-default.example.com event-delivery-4wsd2 event-delivery-4wsd2 True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tMake a request to your cluster and observe the output.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example HTTP request\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ curl http://event-delivery-default.example.com\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example HTTPS request\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ curl https://event-delivery-default.example.com\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Hello Serverless!\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional. If you receive an error relating to a self-signed certificate in the certificate chain, you can add the \u003Ccode class=\"literal\">--insecure\u003C/code> flag to the curl command to ignore the error:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ curl https://event-delivery-default.example.com --insecure\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Hello Serverless!\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tSelf-signed certificates must not be used in a production deployment. This method is only for testing purposes.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional. If your OpenShift Container Platform cluster is configured with a certificate that is signed by a certificate authority (CA) but not yet globally configured for your system, you can specify this with the \u003Ccode class=\"literal\">curl\u003C/code> command. The path to the certificate can be passed to the curl command by using the \u003Ccode class=\"literal\">--cacert\u003C/code> flag:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ curl https://event-delivery-default.example.com --cacert <file>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Hello Serverless!\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"interacting-serverless-apps-http2-gRPC_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.5. Interacting with a serverless application using HTTP2 and gRPC\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Serverless supports only insecure or edge-terminated routes. Insecure or edge-terminated routes do not support HTTP2 on OpenShift Container Platform. These routes also do not support gRPC because gRPC is transported by HTTP2. If you use these protocols in your application, you must call the application using the ingress gateway directly. To do this you must find the ingress gateway’s public address and the application’s specific host.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tThis method needs to expose Kourier Gateway using the \u003Ccode class=\"literal\">LoadBalancer\u003C/code> service type. You can configure this by adding the following YAML to your \u003Ccode class=\"literal\">KnativeServing\u003C/code> custom resource definition (CRD):\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">...\nspec:\n ingress:\n kourier:\n service-type: LoadBalancer\n...\u003C/pre>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a Knative service.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tFind the application host. See the instructions in \u003Cspan class=\"emphasis\">\u003Cem>Verifying your serverless application deployment\u003C/em>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tFind the ingress gateway’s public address:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc -n knative-serving-ingress get svc kourier\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nkourier LoadBalancer 172.30.51.103 a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com 80:31380/TCP,443:31390/TCP 67m\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe public address is surfaced in the \u003Ccode class=\"literal\">EXTERNAL-IP\u003C/code> field, and in this case is \u003Ccode class=\"literal\">a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com\u003C/code>.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tManually set the host header of your HTTP request to the application’s host, but direct the request itself against the public address of the ingress gateway.\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ curl -H \"Host: hello-default.example.com\" a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Hello Serverless!\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tYou can also make a gRPC request by setting the authority to the application’s host, while directing the request against the ingress gateway directly:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">grpc.Dial(\n \"a83e86291bcdd11e993af02b7a65e514-33544245.us-east-1.elb.amazonaws.com:80\",\n grpc.WithAuthority(\"hello-default.example.com:80\"),\n grpc.WithInsecure(),\n)\u003C/pre>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tEnsure that you append the respective port, 80 by default, to both hosts as shown in the previous example.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-services-network-policies_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.6. Enabling communication with Knative applications on a cluster with restrictive network policies\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIf you are using a cluster that multiple users have access to, your cluster might use network policies to control which pods, services, and namespaces can communicate with each other over the network. If your cluster uses restrictive network policies, it is possible that Knative system pods are not able to access your Knative application. For example, if your namespace has the following network policy, which denies all requests, Knative system pods cannot access your Knative application:\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example NetworkPolicy object that denies all requests to the namespace\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">kind: NetworkPolicy\napiVersion: networking.k8s.io/v1\nmetadata:\n name: deny-by-default\n namespace: example-namespace\nspec:\n podSelector:\n ingress: []\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp>\n\t\t\t\t\tTo allow access to your applications from Knative system pods, you must add a label to each of the Knative system namespaces, and then create a \u003Ccode class=\"literal\">NetworkPolicy\u003C/code> object in your application namespace that allows access to the namespace for other namespaces that have this label.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tA network policy that denies requests to non-Knative services on your cluster still prevents access to these services. However, by allowing access from Knative system namespaces to your Knative application, you are allowing access to your Knative application from all namespaces in the cluster.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tIf you do not want to allow access to your Knative application from all namespaces on the cluster, you might want to use \u003Cspan class=\"emphasis\">\u003Cem>JSON Web Token authentication for Knative services\u003C/em>\u003C/span> instead. JSON Web Token authentication for Knative services requires Service Mesh.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAdd the \u003Ccode class=\"literal\">knative.openshift.io/system-namespace=true\u003C/code> label to each Knative system namespace that requires access to your application:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tLabel the \u003Ccode class=\"literal\">knative-serving\u003C/code> namespace:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc label namespace knative-serving knative.openshift.io/system-namespace=true\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tLabel the \u003Ccode class=\"literal\">knative-serving-ingress\u003C/code> namespace:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc label namespace knative-serving-ingress knative.openshift.io/system-namespace=true\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tLabel the \u003Ccode class=\"literal\">knative-eventing\u003C/code> namespace:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc label namespace knative-eventing knative.openshift.io/system-namespace=true\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tLabel the \u003Ccode class=\"literal\">knative-kafka\u003C/code> namespace:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc label namespace knative-kafka knative.openshift.io/system-namespace=true\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">NetworkPolicy\u003C/code> object in your application namespace to allow access from namespaces with the \u003Ccode class=\"literal\">knative.openshift.io/system-namespace\u003C/code> label:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example \u003Ccode class=\"literal\">NetworkPolicy\u003C/code> object\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: networking.k8s.io/v1\nkind: NetworkPolicy\nmetadata:\n name: <network_policy_name> \u003Cspan id=\"CO7-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n namespace: <namespace> \u003Cspan id=\"CO7-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nspec:\n ingress:\n - from:\n - namespaceSelector:\n matchLabels:\n knative.openshift.io/system-namespace: \"true\"\n podSelector: {}\n policyTypes:\n - Ingress\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO7-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tProvide a name for your network policy.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO7-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe namespace where your application exists.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-init-containers-apps_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.7. Configuring init containers\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\u003Ca class=\"link\" href=\"https://kubernetes.io/docs/concepts/workloads/pods/init-containers/\">Init containers\u003C/a> are specialized containers that are run before application containers in a pod. They are generally used to implement initialization logic for an application, which may include running setup scripts or downloading required configurations.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tInit containers may cause longer application start-up times and should be used with caution for serverless applications, which are expected to scale up and down frequently.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\tMultiple init containers are supported in a single Knative service spec. Knative provides a default, configurable naming template if a template name is not provided. The init containers template can be set by adding an appropriate value in a Knative \u003Ccode class=\"literal\">Service\u003C/code> object spec.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tBefore you can use init containers for Knative services, an administrator must add the \u003Ccode class=\"literal\">kubernetes.podspec-init-containers\u003C/code> flag to the \u003Ccode class=\"literal\">KnativeServing\u003C/code> custom resource (CR). See the OpenShift Serverless \"Global configuration\" documentation for more information.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAdd the \u003Ccode class=\"literal\">initContainers\u003C/code> spec to a Knative \u003Ccode class=\"literal\">Service\u003C/code> object:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service spec\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\n...\nspec:\n template:\n spec:\n initContainers:\n - imagePullPolicy: IfNotPresent \u003Cspan id=\"CO8-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n image: <image_uri> \u003Cspan id=\"CO8-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n volumeMounts: \u003Cspan id=\"CO8-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n - name: data\n mountPath: /data\n...\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO8-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe \u003Ca class=\"link\" href=\"https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy\">image pull policy\u003C/a> when the image is downloaded.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO8-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe URI for the init container image.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO8-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe location where volumes are mounted within the container file system.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-https-redirect-service_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.8. HTTPS redirection per service\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can enable or disable HTTPS redirection for a service by configuring the \u003Ccode class=\"literal\">networking.knative.dev/http-option\u003C/code> annotation. The following example shows how you can use this annotation in a Knative \u003Ccode class=\"literal\">Service\u003C/code> YAML object:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example\n namespace: default\n annotations:\n networking.knative.dev/http-option: \"redirected\"\nspec:\n ...\u003C/pre>\u003C/section>\u003Csection class=\"section _additional-resources\" id=\"additional-resources_serverless-applications\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1.9. Additional resources\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#kn-serving-ref\">Knative Serving CLI commands\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-ossm-with-kourier-jwt\">Configuring JSON Web Token authentication for Knative services\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.2. Autoscaling\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tKnative Serving provides automatic scaling, or \u003Cspan class=\"emphasis\">\u003Cem>autoscaling\u003C/em>\u003C/span>, for applications to match incoming demand. For example, if an application is receiving no traffic, and scale-to-zero is enabled, Knative Serving scales the application down to zero replicas. If scale-to-zero is disabled, the application is scaled down to the minimum number of replicas configured for applications on the cluster. Replicas can also be scaled up to meet demand if traffic to the application increases.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tAutoscaling settings for Knative services can be global settings that are configured by cluster administrators, or per-revision settings that are configured for individual services. You can modify per-revision settings for your services by using the OpenShift Container Platform web console, by modifying the YAML file for your service, or by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tAny limits or targets that you set for a service are measured against a single instance of your application. For example, setting the \u003Ccode class=\"literal\">target\u003C/code> annotation to \u003Ccode class=\"literal\">50\u003C/code> configures the autoscaler to scale the application so that each revision handles 50 requests at a time.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"serverless-autoscaling-developer-scale-bounds\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.2.1. Scale bounds\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tScale bounds determine the minimum and maximum numbers of replicas that can serve an application at any given time. You can set scale bounds for an application to help prevent cold starts or control computing costs.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-autoscaling-developer-minscale_serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.2.1.1. Minimum scale bounds\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe minimum number of replicas that can serve an application is determined by the \u003Ccode class=\"literal\">min-scale\u003C/code> annotation. If scale to zero is not enabled, the \u003Ccode class=\"literal\">min-scale\u003C/code> value defaults to \u003Ccode class=\"literal\">1\u003C/code>.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tThe \u003Ccode class=\"literal\">min-scale\u003C/code> value defaults to \u003Ccode class=\"literal\">0\u003C/code> replicas if the following conditions are met:\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">min-scale\u003C/code> annotation is not set\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tScaling to zero is enabled\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe class \u003Ccode class=\"literal\">KPA\u003C/code> is used\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service spec with \u003Ccode class=\"literal\">min-scale\u003C/code> annotation\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example-service\n namespace: default\nspec:\n template:\n metadata:\n annotations:\n autoscaling.knative.dev/min-scale: \"0\"\n...\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Csection class=\"section\" id=\"serverless-autoscaling-minscale-kn_serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.2.1.1.1. Setting the min-scale annotation by using the Knative CLI\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to set the \u003Ccode class=\"literal\">min-scale\u003C/code> annotation provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the \u003Ccode class=\"literal\">kn service\u003C/code> command with the \u003Ccode class=\"literal\">--scale-min\u003C/code> flag to create or modify the \u003Ccode class=\"literal\">min-scale\u003C/code> value for a service.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tKnative Serving is installed on the cluster.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tSet the minimum number of replicas for the service by using the \u003Ccode class=\"literal\">--scale-min\u003C/code> flag:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create <service_name> --image <image_uri> --scale-min <integer>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-min 2\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-autoscaling-developer-maxscale_serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.2.1.2. Maximum scale bounds\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe maximum number of replicas that can serve an application is determined by the \u003Ccode class=\"literal\">max-scale\u003C/code> annotation. If the \u003Ccode class=\"literal\">max-scale\u003C/code> annotation is not set, there is no upper limit for the number of replicas created.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service spec with \u003Ccode class=\"literal\">max-scale\u003C/code> annotation\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example-service\n namespace: default\nspec:\n template:\n metadata:\n annotations:\n autoscaling.knative.dev/max-scale: \"10\"\n...\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Csection class=\"section\" id=\"serverless-autoscaling-maxscale-kn_serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.2.1.2.1. Setting the max-scale annotation by using the Knative CLI\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to set the \u003Ccode class=\"literal\">max-scale\u003C/code> annotation provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the \u003Ccode class=\"literal\">kn service\u003C/code> command with the \u003Ccode class=\"literal\">--scale-max\u003C/code> flag to create or modify the \u003Ccode class=\"literal\">max-scale\u003C/code> value for a service.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tKnative Serving is installed on the cluster.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tSet the maximum number of replicas for the service by using the \u003Ccode class=\"literal\">--scale-max\u003C/code> flag:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create <service_name> --image <image_uri> --scale-max <integer>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --scale-max 10\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-about-concurrency_serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.2.2. Concurrency\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tConcurrency determines the number of simultaneous requests that can be processed by each replica of an application at any given time. Concurrency can be configured as a \u003Cspan class=\"emphasis\">\u003Cem>soft limit\u003C/em>\u003C/span> or a \u003Cspan class=\"emphasis\">\u003Cem>hard limit\u003C/em>\u003C/span>:\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tA soft limit is a targeted requests limit, rather than a strictly enforced bound. For example, if there is a sudden burst of traffic, the soft limit target can be exceeded.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tA hard limit is a strictly enforced upper bound requests limit. If concurrency reaches the hard limit, surplus requests are buffered and must wait until there is enough free capacity to execute the requests.\n\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tUsing a hard limit configuration is only recommended if there is a clear use case for it with your application. Having a low, hard limit specified may have a negative impact on the throughput and latency of an application, and might cause cold starts.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tAdding a soft target and a hard limit means that the autoscaler targets the soft target number of concurrent requests, but imposes a hard limit of the hard limit value for the maximum number of requests.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIf the hard limit value is less than the soft limit value, the soft limit value is tuned down, because there is no need to target more requests than the number that can actually be handled.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-concurrency-limits-configure-soft_serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.2.2.1. Configuring a soft concurrency target\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tA soft limit is a targeted requests limit, rather than a strictly enforced bound. For example, if there is a sudden burst of traffic, the soft limit target can be exceeded. You can specify a soft concurrency target for your Knative service by setting the \u003Ccode class=\"literal\">autoscaling.knative.dev/target\u003C/code> annotation in the spec, or by using the \u003Ccode class=\"literal\">kn service\u003C/code> command with the correct flags.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tOptional: Set the \u003Ccode class=\"literal\">autoscaling.knative.dev/target\u003C/code> annotation for your Knative service in the spec of the \u003Ccode class=\"literal\">Service\u003C/code> custom resource:\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service spec\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example-service\n namespace: default\nspec:\n template:\n metadata:\n annotations:\n autoscaling.knative.dev/target: \"200\"\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tOptional: Use the \u003Ccode class=\"literal\">kn service\u003C/code> command to specify the \u003Ccode class=\"literal\">--concurrency-target\u003C/code> flag:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create <service_name> --image <image_uri> --concurrency-target <integer>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command to create a service with a concurrency target of 50 requests\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-target 50\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-concurrency-limits-configure-hard_serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.2.2.2. Configuring a hard concurrency limit\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tA hard concurrency limit is a strictly enforced upper bound requests limit. If concurrency reaches the hard limit, surplus requests are buffered and must wait until there is enough free capacity to execute the requests. You can specify a hard concurrency limit for your Knative service by modifying the \u003Ccode class=\"literal\">containerConcurrency\u003C/code> spec, or by using the \u003Ccode class=\"literal\">kn service\u003C/code> command with the correct flags.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tOptional: Set the \u003Ccode class=\"literal\">containerConcurrency\u003C/code> spec for your Knative service in the spec of the \u003Ccode class=\"literal\">Service\u003C/code> custom resource:\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service spec\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example-service\n namespace: default\nspec:\n template:\n spec:\n containerConcurrency: 50\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tThe default value is \u003Ccode class=\"literal\">0\u003C/code>, which means that there is no limit on the number of simultaneous requests that are permitted to flow into one replica of the service at a time.\n\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tA value greater than \u003Ccode class=\"literal\">0\u003C/code> specifies the exact number of requests that are permitted to flow into one replica of the service at a time. This example would enable a hard concurrency limit of 50 requests.\n\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tOptional: Use the \u003Ccode class=\"literal\">kn service\u003C/code> command to specify the \u003Ccode class=\"literal\">--concurrency-limit\u003C/code> flag:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create <service_name> --image <image_uri> --concurrency-limit <integer>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command to create a service with a concurrency limit of 50 requests\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service create example-service --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest --concurrency-limit 50\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-target-utilization_serverless-autoscaling-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.2.2.3. Concurrency target utilization\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThis value specifies the percentage of the concurrency limit that is actually targeted by the autoscaler. This is also known as specifying the \u003Cspan class=\"emphasis\">\u003Cem>hotness\u003C/em>\u003C/span> at which a replica runs, which enables the autoscaler to scale up before the defined hard limit is reached.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tFor example, if the \u003Ccode class=\"literal\">containerConcurrency\u003C/code> value is set to 10, and the \u003Ccode class=\"literal\">target-utilization-percentage\u003C/code> value is set to 70 percent, the autoscaler creates a new replica when the average number of concurrent requests across all existing replicas reaches 7. Requests numbered 7 to 10 are still sent to the existing replicas, but additional replicas are started in anticipation of being required after the \u003Ccode class=\"literal\">containerConcurrency\u003C/code> value is reached.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service configured using the target-utilization-percentage annotation\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example-service\n namespace: default\nspec:\n template:\n metadata:\n annotations:\n autoscaling.knative.dev/target-utilization-percentage: \"70\"\n...\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.3. Traffic management\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tIn a Knative application, traffic can be managed by creating a traffic split. A traffic split is configured as part of a route, which is managed by a Knative service.\n\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/234e3aae5a480d45f77008f22617ce56/knative-service-architecture.png\" alt=\"Traffic management for a Knative application\"/>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tConfiguring a route allows requests to be sent to different revisions of a service. This routing is determined by the \u003Ccode class=\"literal\">traffic\u003C/code> spec of the \u003Ccode class=\"literal\">Service\u003C/code> object.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tA \u003Ccode class=\"literal\">traffic\u003C/code> spec declaration consists of one or more revisions, each responsible for handling a portion of the overall traffic. The percentages of traffic routed to each revision must add up to 100%, which is ensured by a Knative validation.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThe revisions specified in a \u003Ccode class=\"literal\">traffic\u003C/code> spec can either be a fixed, named revision, or can point to the “latest” revision, which tracks the head of the list of all revisions for the service. The \"latest\" revision is a type of floating reference that updates if a new revision is created. Each revision can have a tag attached that creates an additional access URL for that revision.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThe \u003Ccode class=\"literal\">traffic\u003C/code> spec can be modified by:\n\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\tEditing the YAML of a \u003Ccode class=\"literal\">Service\u003C/code> object directly.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI \u003Ccode class=\"literal\">--traffic\u003C/code> flag.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tUsing the OpenShift Container Platform web console.\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\tWhen you create a Knative service, it does not have any default \u003Ccode class=\"literal\">traffic\u003C/code> spec settings.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-traffic-management-spec-examples\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.3.1. Traffic spec examples\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe following example shows a \u003Ccode class=\"literal\">traffic\u003C/code> spec where 100% of traffic is routed to the latest revision of the service. Under \u003Ccode class=\"literal\">status\u003C/code>, you can see the name of the latest revision that \u003Ccode class=\"literal\">latestRevision\u003C/code> resolves to:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example-service\n namespace: default\nspec:\n...\n traffic:\n - latestRevision: true\n percent: 100\nstatus:\n ...\n traffic:\n - percent: 100\n revisionName: example-service\u003C/pre>\u003Cp>\n\t\t\t\t\tThe following example shows a \u003Ccode class=\"literal\">traffic\u003C/code> spec where 100% of traffic is routed to the revision tagged as \u003Ccode class=\"literal\">current\u003C/code>, and the name of that revision is specified as \u003Ccode class=\"literal\">example-service\u003C/code>. The revision tagged as \u003Ccode class=\"literal\">latest\u003C/code> is kept available, even though no traffic is routed to it:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example-service\n namespace: default\nspec:\n...\n traffic:\n - tag: current\n revisionName: example-service\n percent: 100\n - tag: latest\n latestRevision: true\n percent: 0\u003C/pre>\u003Cp>\n\t\t\t\t\tThe following example shows how the list of revisions in the \u003Ccode class=\"literal\">traffic\u003C/code> spec can be extended so that traffic is split between multiple revisions. This example sends 50% of traffic to the revision tagged as \u003Ccode class=\"literal\">current\u003C/code>, and 50% of traffic to the revision tagged as \u003Ccode class=\"literal\">candidate\u003C/code>. The revision tagged as \u003Ccode class=\"literal\">latest\u003C/code> is kept available, even though no traffic is routed to it:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: example-service\n namespace: default\nspec:\n...\n traffic:\n - tag: current\n revisionName: example-service-1\n percent: 50\n - tag: candidate\n revisionName: example-service-2\n percent: 50\n - tag: latest\n latestRevision: true\n percent: 0\u003C/pre>\u003C/section>\u003Csection class=\"section\" id=\"serverless-traffic-splitting-flags-kn_serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.3.2. Knative CLI traffic management flags\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI supports traffic operations on the traffic block of a service as part of the \u003Ccode class=\"literal\">kn service update\u003C/code> command.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe following table displays a summary of traffic splitting flags, value formats, and the operation the flag performs. The \u003Cspan class=\"strong strong\">\u003Cstrong>Repetition\u003C/strong>\u003C/span> column denotes whether repeating the particular value of flag is allowed in a \u003Ccode class=\"literal\">kn service update\u003C/code> command.\n\t\t\t\t\u003C/p>\u003Crh-table>\u003Ctable class=\"gt-4-cols lt-7-rows\">\u003Ccolgroup>\u003Ccol style=\"width: 25%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 25%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 25%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 25%; \" class=\"col_4\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155302457616\" scope=\"col\">Flag\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155302456528\" scope=\"col\">Value(s)\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155302455440\" scope=\"col\">Operation\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155302454352\" scope=\"col\">Repetition\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302457616\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--traffic\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302456528\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">RevisionName=Percent\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302455440\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tGives \u003Ccode class=\"literal\">Percent\u003C/code> traffic to \u003Ccode class=\"literal\">RevisionName\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302454352\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tYes\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302457616\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--traffic\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302456528\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">Tag=Percent\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302455440\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tGives \u003Ccode class=\"literal\">Percent\u003C/code> traffic to the revision having \u003Ccode class=\"literal\">Tag\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302454352\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tYes\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302457616\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--traffic\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302456528\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">@latest=Percent\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302455440\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tGives \u003Ccode class=\"literal\">Percent\u003C/code> traffic to the latest ready revision\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302454352\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tNo\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302457616\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--tag\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302456528\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">RevisionName=Tag\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302455440\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tGives \u003Ccode class=\"literal\">Tag\u003C/code> to \u003Ccode class=\"literal\">RevisionName\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302454352\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tYes\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302457616\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--tag\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302456528\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">@latest=Tag\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302455440\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tGives \u003Ccode class=\"literal\">Tag\u003C/code> to the latest ready revision\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302454352\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tNo\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302457616\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--untag\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302456528\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">Tag\u003C/code>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302455440\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tRemoves \u003Ccode class=\"literal\">Tag\u003C/code> from revision\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155302454352\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tYes\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Csection class=\"section\" id=\"serverless-traffic-splitting-flags-kn-precedence_serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.2.1. Multiple flags and order precedence\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAll traffic-related flags can be specified using a single \u003Ccode class=\"literal\">kn service update\u003C/code> command. \u003Ccode class=\"literal\">kn\u003C/code> defines the precedence of these flags. The order of the flags specified when using the command is not taken into account.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tThe precedence of the flags as they are evaluated by \u003Ccode class=\"literal\">kn\u003C/code> are:\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--untag\u003C/code>: All the referenced revisions with this flag are removed from the traffic block.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--tag\u003C/code>: Revisions are tagged as specified in the traffic block.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--traffic\u003C/code>: The referenced revisions are assigned a portion of the traffic split.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can add tags to revisions and then split traffic according to the tags you have set.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"serverless-custom-revision-urls_serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.2.2. Custom URLs for revisions\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAssigning a \u003Ccode class=\"literal\">--tag\u003C/code> flag to a service by using the \u003Ccode class=\"literal\">kn service update\u003C/code> command creates a custom URL for the revision that is created when you update the service. The custom URL follows the pattern \u003Ccode class=\"literal\">\u003Ca class=\"link\" href=\"https://<tag>-<service_name>-<namespace>.<domain>\">https://<tag>-<service_name>-<namespace>.<domain>\u003C/a>\u003C/code> or \u003Ccode class=\"literal\">\u003Ca class=\"link\" href=\"http://<tag>-<service_name>-<namespace>.<domain>\">http://<tag>-<service_name>-<namespace>.<domain>\u003C/a>\u003C/code>.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tThe \u003Ccode class=\"literal\">--tag\u003C/code> and \u003Ccode class=\"literal\">--untag\u003C/code> flags use the following syntax:\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tRequire one value.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tDenote a unique tag in the traffic block of the service.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tCan be specified multiple times in one command.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"serverless-custom-revision-urls-assign_serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.3.2.2.1. Example: Assign a tag to a revision\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tThe following example assigns the tag \u003Ccode class=\"literal\">latest\u003C/code> to a revision named \u003Ccode class=\"literal\">example-revision\u003C/code>:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service update <service_name> --tag @latest=example-tag\u003C/pre>\u003C/section>\u003Csection class=\"section\" id=\"serverless-custom-revision-urls-remove_serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.3.2.2.2. Example: Remove a tag from a revision\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tYou can remove a tag to remove the custom URL, by using the \u003Ccode class=\"literal\">--untag\u003C/code> flag.\n\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tIf a revision has its tags removed, and it is assigned 0% of the traffic, the revision is removed from the traffic block entirely.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\t\t\tThe following command removes all tags from the revision named \u003Ccode class=\"literal\">example-revision\u003C/code>:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service update <service_name> --untag example-tag\u003C/pre>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-create-traffic-split-kn_serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.3.3. Creating a traffic split by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to create traffic splits provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the \u003Ccode class=\"literal\">kn service update\u003C/code> command to split traffic between revisions of a service.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a Knative service.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tSpecify the revision of your service and what percentage of traffic you want to route to it by using the \u003Ccode class=\"literal\">--traffic\u003C/code> tag with a standard \u003Ccode class=\"literal\">kn service update\u003C/code> command:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service update <service_name> --traffic <revision>=<percentage>\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tWhere:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"circle\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\"><service_name>\u003C/code> is the name of the Knative service that you are configuring traffic routing for.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\"><revision>\u003C/code> is the revision that you want to configure to receive a percentage of traffic. You can either specify the name of the revision, or a tag that you assigned to the revision by using the \u003Ccode class=\"literal\">--tag\u003C/code> flag.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\"><percentage>\u003C/code> is the percentage of traffic that you want to send to the specified revision.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: The \u003Ccode class=\"literal\">--traffic\u003C/code> flag can be specified multiple times in one command. For example, if you have a revision tagged as \u003Ccode class=\"literal\">@latest\u003C/code> and a revision named \u003Ccode class=\"literal\">stable\u003C/code>, you can specify the percentage of traffic that you want to split to each revision as follows:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service update example-service --traffic @latest=20,stable=80\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tIf you have multiple revisions and do not specify the percentage of traffic that should be split to the last revision, the \u003Ccode class=\"literal\">--traffic\u003C/code> flag can calculate this automatically. For example, if you have a third revision named \u003Ccode class=\"literal\">example\u003C/code>, and you use the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service update example-service --traffic @latest=10,stable=60\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe remaining 30% of traffic is split to the \u003Ccode class=\"literal\">example\u003C/code> revision, even though it was not specified.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"odc-splitting-traffic-between-revisions-using-developer-perspective_serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.3.4. Managing traffic between revisions by using the OpenShift Container Platform web console\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter you create a serverless application, the application is displayed in the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view of the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective in the OpenShift Container Platform web console. The application revision is represented by the node, and the Knative service is indicated by a quadrilateral around the node.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAny new change in the code or the service configuration creates a new revision, which is a snapshot of the code at a given time. For a service, you can manage the traffic between the revisions of the service by splitting and routing it to the different revisions as required.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Serving are installed on your cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have logged in to the OpenShift Container Platform web console.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tTo split traffic between multiple revisions of an application in the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view:\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick the Knative service to see its overview in the side panel.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tClick the \u003Cspan class=\"strong strong\">\u003Cstrong>Resources\u003C/strong>\u003C/span> tab, to see a list of \u003Cspan class=\"strong strong\">\u003Cstrong>Revisions\u003C/strong>\u003C/span> and \u003Cspan class=\"strong strong\">\u003Cstrong>Routes\u003C/strong>\u003C/span> for the service.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"figure\" id=\"idm140155302326416\">\u003Cp class=\"title\">\u003Cstrong>Figure 5.1. Serverless application\u003C/strong>\u003C/p>\u003Cdiv class=\"figure-contents\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/dee36e4327463e13e0553f23d613a3c6/odc-serverless-app.png\" alt=\"odc serverless app\"/>\u003C/div>\u003C/div>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick the service, indicated by the \u003Cspan class=\"strong strong\">\u003Cstrong>S\u003C/strong>\u003C/span> icon at the top of the side panel, to see an overview of the service details.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick the \u003Cspan class=\"strong strong\">\u003Cstrong>YAML\u003C/strong>\u003C/span> tab and modify the service configuration in the YAML editor, and click \u003Cspan class=\"strong strong\">\u003Cstrong>Save\u003C/strong>\u003C/span>. For example, change the \u003Ccode class=\"literal\">timeoutseconds\u003C/code> from 300 to 301 . This change in the configuration triggers a new revision. In the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view, the latest revision is displayed and the \u003Cspan class=\"strong strong\">\u003Cstrong>Resources\u003C/strong>\u003C/span> tab for the service now displays the two revisions.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Resources\u003C/strong>\u003C/span> tab, click \u003Cspan class=\"guibutton\">Set Traffic Distribution\u003C/span> to see the traffic distribution dialog box:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tAdd the split traffic percentage portion for the two revisions in the \u003Cspan class=\"strong strong\">\u003Cstrong>Splits\u003C/strong>\u003C/span> field.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tAdd tags to create custom URLs for the two revisions.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Save\u003C/strong>\u003C/span> to see two nodes representing the two revisions in the Topology view.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"figure\" id=\"idm140155321974240\">\u003Cp class=\"title\">\u003Cstrong>Figure 5.2. Serverless application revisions\u003C/strong>\u003C/p>\u003Cdiv class=\"figure-contents\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/4e53cb5d8f3c0e1d6c00fb9e5a30b3bc/odc-serverless-revisions.png\" alt=\"odc serverless revisions\"/>\u003C/div>\u003C/div>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-blue-green-deploy_serverless-traffic-management\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.3.5. Routing and managing traffic by using a blue-green deployment strategy\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can safely reroute traffic from a production version of an app to a new version, by using a \u003Ca class=\"link\" href=\"https://en.wikipedia.org/wiki/Blue-green_deployment\">blue-green deployment strategy\u003C/a>.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Serving are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tCreate and deploy an app as a Knative service.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tFind the name of the first revision that was created when you deployed the service, by viewing the output from the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ oc get ksvc example-service -o=jsonpath='{.status.latestCreatedRevisionName}'\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ example-service-00001\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAdd the following YAML to the service \u003Ccode class=\"literal\">spec\u003C/code> to send inbound traffic to the revision:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">...\nspec:\n traffic:\n - revisionName: <first_revision_name>\n percent: 100 # All traffic goes to this revision\n...\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that you can view your app at the URL output you get from running the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get ksvc <service_name>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tDeploy a second revision of your app by modifying at least one field in the \u003Ccode class=\"literal\">template\u003C/code> spec of the service and redeploying it. For example, you can modify the \u003Ccode class=\"literal\">image\u003C/code> of the service, or an \u003Ccode class=\"literal\">env\u003C/code> environment variable. You can redeploy the service by applying the service YAML file, or by using the \u003Ccode class=\"literal\">kn service update\u003C/code> command if you have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tFind the name of the second, latest revision that was created when you redeployed the service, by running the command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get ksvc <service_name> -o=jsonpath='{.status.latestCreatedRevisionName}'\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAt this point, both the first and second revisions of the service are deployed and running.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tUpdate your existing service to create a new, test endpoint for the second revision, while still sending all other traffic to the first revision:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example of updated service spec with test endpoint\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">...\nspec:\n traffic:\n - revisionName: <first_revision_name>\n percent: 100 # All traffic is still being routed to the first revision\n - revisionName: <second_revision_name>\n percent: 0 # No traffic is routed to the second revision\n tag: v2 # A named route\n...\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAfter you redeploy this service by reapplying the YAML resource, the second revision of the app is now staged. No traffic is routed to the second revision at the main URL, and Knative creates a new service named \u003Ccode class=\"literal\">v2\u003C/code> for testing the newly deployed revision.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tGet the URL of the new service for the second revision, by running the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get ksvc <service_name> --output jsonpath=\"{.status.traffic[*].url}\"\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tYou can use this URL to validate that the new version of the app is behaving as expected before you route any traffic to it.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tUpdate your existing service again, so that 50% of traffic is sent to the first revision, and 50% is sent to the second revision:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example of updated service spec splitting traffic 50/50 between revisions\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">...\nspec:\n traffic:\n - revisionName: <first_revision_name>\n percent: 50\n - revisionName: <second_revision_name>\n percent: 50\n tag: v2\n...\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tWhen you are ready to route all traffic to the new version of the app, update the service again to send 100% of traffic to the second revision:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example of updated service spec sending all traffic to the second revision\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">...\nspec:\n traffic:\n - revisionName: <first_revision_name>\n percent: 0\n - revisionName: <second_revision_name>\n percent: 100\n tag: v2\n...\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Crh-alert class=\"admonition tip\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Tip\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\tYou can remove the first revision instead of setting it to 0% of traffic if you do not plan to roll back the revision. Non-routeable revision objects are then garbage-collected.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tVisit the URL of the first revision to verify that no more traffic is being sent to the old version of the app.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-configuring-routes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.4. Routing\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tKnative leverages OpenShift Container Platform TLS termination to provide routing for Knative services. When a Knative service is created, a OpenShift Container Platform route is automatically created for the service. This route is managed by the OpenShift Serverless Operator. The OpenShift Container Platform route exposes the Knative service through the same domain as the OpenShift Container Platform cluster.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tYou can disable Operator control of OpenShift Container Platform routing so that you can configure a Knative route to directly use your TLS certificates instead.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tKnative routes can also be used alongside the OpenShift Container Platform route to provide additional fine-grained routing capabilities, such as traffic splitting.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-customize-labels-annotations-routes_serverless-configuring-routes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.4.1. Customizing labels and annotations for OpenShift Container Platform routes\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform routes support the use of custom labels and annotations, which you can configure by modifying the \u003Ccode class=\"literal\">metadata\u003C/code> spec of a Knative service. Custom labels and annotations are propagated from the service to the Knative route, then to the Knative ingress, and finally to the OpenShift Container Platform route.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou must have the OpenShift Serverless Operator and Knative Serving installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a Knative service that contains the label or annotation that you want to propagate to the OpenShift Container Platform route:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tTo create a service by using YAML:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service created by using YAML\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: <service_name>\n labels:\n <label_name>: <label_value>\n annotations:\n <annotation_name>: <annotation_value>\n...\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tTo create a service by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI, enter:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service created by using a \u003Ccode class=\"literal\">kn\u003C/code> command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service create <service_name> \\\n --image=<image> \\\n --annotation <annotation_name>=<annotation_value> \\\n --label <label_value>=<label_value>\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the OpenShift Container Platform route has been created with the annotation or label that you added by inspecting the output from the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command for verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ oc get routes.route.openshift.io \\\n -l serving.knative.openshift.io/ingressName=<service_name> \\ \u003Cspan id=\"CO9-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n -l serving.knative.openshift.io/ingressNamespace=<service_namespace> \\ \u003Cspan id=\"CO9-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n -n knative-serving-ingress -o yaml \\\n | grep -e \"<label_name>: \\\"<label_value>\\\"\" -e \"<annotation_name>: <annotation_value>\" \u003Cspan id=\"CO9-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO9-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tUse the name of your service.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO9-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tUse the namespace where your service was created.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO9-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tUse your values for the label and annotation names and values.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-openshift-routes_serverless-configuring-routes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.4.2. Configuring OpenShift Container Platform routes for Knative services\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIf you want to configure a Knative service to use your TLS certificate on OpenShift Container Platform, you must disable the automatic creation of a route for the service by the OpenShift Serverless Operator and instead manually create a route for the service.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tWhen you complete the following procedure, the default OpenShift Container Platform route in the \u003Ccode class=\"literal\">knative-serving-ingress\u003C/code> namespace is not created. However, the Knative route for the application is still created in this namespace.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Serving component must be installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a Knative service that includes the \u003Ccode class=\"literal\">serving.knative.openshift.io/disableRoute=true\u003C/code> annotation:\n\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">serving.knative.openshift.io/disableRoute=true\u003C/code> annotation instructs OpenShift Serverless to not automatically create a route for you. However, the service still shows a URL and reaches a status of \u003Ccode class=\"literal\">Ready\u003C/code>. This URL does not work externally until you create your own route with the same hostname as the hostname in the URL.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCreate a Knative \u003Ccode class=\"literal\">Service\u003C/code> resource:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example resource\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: <service_name>\n annotations:\n serving.knative.openshift.io/disableRoute: \"true\"\nspec:\n template:\n spec:\n containers:\n - image: <image>\n...\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">Service\u003C/code> resource:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tOptional. Create a Knative service by using the \u003Ccode class=\"literal\">kn service create\u003C/code> command:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example \u003Ccode class=\"literal\">kn\u003C/code> command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn service create <service_name> \\\n --image=gcr.io/knative-samples/helloworld-go \\\n --annotation serving.knative.openshift.io/disableRoute=true\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that no OpenShift Container Platform route has been created for the service:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ $ oc get routes.route.openshift.io \\\n -l serving.knative.openshift.io/ingressName=$KSERVICE_NAME \\\n -l serving.knative.openshift.io/ingressNamespace=$KSERVICE_NAMESPACE \\\n -n knative-serving-ingress\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tYou will see the following output:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">No resources found in knative-serving-ingress namespace.\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">Route\u003C/code> resource in the \u003Ccode class=\"literal\">knative-serving-ingress\u003C/code> namespace:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: route.openshift.io/v1\nkind: Route\nmetadata:\n annotations:\n haproxy.router.openshift.io/timeout: 600s \u003Cspan id=\"CO10-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n name: <route_name> \u003Cspan id=\"CO10-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n namespace: knative-serving-ingress \u003Cspan id=\"CO10-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\nspec:\n host: <service_host> \u003Cspan id=\"CO10-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n port:\n targetPort: http2\n to:\n kind: Service\n name: kourier\n weight: 100\n tls:\n insecureEdgeTerminationPolicy: Allow\n termination: edge \u003Cspan id=\"CO10-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\n key: |-\n -----BEGIN PRIVATE KEY-----\n [...]\n -----END PRIVATE KEY-----\n certificate: |-\n -----BEGIN CERTIFICATE-----\n [...]\n -----END CERTIFICATE-----\n caCertificate: |-\n -----BEGIN CERTIFICATE-----\n [...]\n -----END CERTIFICATE----\n wildcardPolicy: None\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO10-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe timeout value for the OpenShift Container Platform route. You must set the same value as the \u003Ccode class=\"literal\">max-revision-timeout-seconds\u003C/code> setting (\u003Ccode class=\"literal\">600s\u003C/code> by default).\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO10-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe name of the OpenShift Container Platform route.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO10-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe namespace for the OpenShift Container Platform route. This must be \u003Ccode class=\"literal\">knative-serving-ingress\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO10-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe hostname for external access. You can set this to \u003Ccode class=\"literal\"><service_name>-<service_namespace>.<domain>\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO10-5\">\u003Cspan class=\"callout\">5\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe certificates you want to use. Currently, only \u003Ccode class=\"literal\">edge\u003C/code> termination is supported.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">Route\u003C/code> resource:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"knative-service-cluster-local_serverless-configuring-routes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.4.3. Setting cluster availability to cluster local\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tBy default, Knative services are published to a public IP address. Being published to a public IP address means that Knative services are public applications, and have a publicly accessible URL.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tPublicly accessible URLs are accessible from outside of the cluster. However, developers may need to build back-end services that are only be accessible from inside the cluster, known as \u003Cspan class=\"emphasis\">\u003Cem>private services\u003C/em>\u003C/span>. Developers can label individual services in the cluster with the \u003Ccode class=\"literal\">networking.knative.dev/visibility=cluster-local\u003C/code> label to make them private.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tFor OpenShift Serverless 1.15.0 and newer versions, the \u003Ccode class=\"literal\">serving.knative.dev/visibility\u003C/code> label is no longer available. You must update existing services to use the \u003Ccode class=\"literal\">networking.knative.dev/visibility\u003C/code> label instead.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Serving are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a Knative service.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tSet the visibility for your service by adding the \u003Ccode class=\"literal\">networking.knative.dev/visibility=cluster-local\u003C/code> label:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc label ksvc <service_name> networking.knative.dev/visibility=cluster-local\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCheck that the URL for your service is now in the format \u003Ccode class=\"literal\">http://<service_name>.<namespace>.svc.cluster.local\u003C/code>, by entering the following command and reviewing the output:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-termina\">$ oc get ksvc\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME URL LATESTCREATED LATESTREADY READY REASON\nhello http://hello.default.svc.cluster.local hello-tx2g7 hello-tx2g7 True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section _additional-resources\" id=\"additional-resources_serverless-configuring-routes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.4.4. Additional resources\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/networking/#nw-route-specific-annotations_route-configuration\">Route-specific annotations\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-event-sinks\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.5. Event sinks\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tWhen you create an event source, you can specify a sink where events are sent to from the source. A sink is an addressable or a callable resource that can receive incoming events from other resources. Knative services, channels and brokers are all examples of sinks.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tAddressable objects receive and acknowledge an event delivered over HTTP to an address defined in their \u003Ccode class=\"literal\">status.address.url\u003C/code> field. As a special case, the core Kubernetes \u003Ccode class=\"literal\">Service\u003C/code> object also fulfills the addressable interface.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tCallable objects are able to receive an event delivered over HTTP and transform the event, returning \u003Ccode class=\"literal\">0\u003C/code> or \u003Ccode class=\"literal\">1\u003C/code> new events in the HTTP response. These returned events may be further processed in the same way that events from an external event source are processed.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"specifying-sink-flag-kn_serverless-event-sinks\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.5.1. Knative CLI sink flag\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen you create an event source by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI, you can specify a sink where events are sent to from that resource by using the \u003Ccode class=\"literal\">--sink\u003C/code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe following example creates a sink binding that uses a service, \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code>, as the sink:\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command using the sink flag\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source binding create bind-heartbeat \\\n --namespace sinkbinding-example \\\n --subject \"Job:batch/v1:app=heartbeat-cron\" \\\n --sink http://event-display.svc.cluster.local \\ \u003Cspan id=\"CO11-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n --ce-override \"sink=bound\"\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO11-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\u003Ccode class=\"literal\">svc\u003C/code> in \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code> determines that the sink is a Knative service. Other default sink prefixes include \u003Ccode class=\"literal\">channel\u003C/code>, and \u003Ccode class=\"literal\">broker\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Crh-alert class=\"admonition tip\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Tip\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tYou can configure which CRs can be used with the \u003Ccode class=\"literal\">--sink\u003C/code> flag for Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI commands by \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#advanced-kn-config\">Customizing \u003Ccode class=\"literal\">kn\u003C/code>\u003C/a>.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"serverless-connect-sink-source-odc_serverless-event-sinks\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.5.2. Connect an event source to a sink using the Developer perspective\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen you create an event source by using the OpenShift Container Platform web console, you can specify a sink that events are sent to from that source. The sink can be any addressable or callable resource that can receive incoming events from other resources.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have logged in to the web console and are in the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a sink, such as a Knative service, channel or broker.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tCreate an event source of any type, by navigating to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>Event Source\u003C/strong>\u003C/span> and selecting the event source type that you want to create.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Sink\u003C/strong>\u003C/span> section of the \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span> form view, select your sink in the \u003Cspan class=\"strong strong\">\u003Cstrong>Resource\u003C/strong>\u003C/span> list.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tYou can verify that the event source was created and is connected to the sink by viewing the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tView the event source and click the connected sink to see the sink details in the right panel.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-connect-trigger-sink_serverless-event-sinks\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.5.3. Connecting a trigger to a sink\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can connect a trigger to a sink, so that events from a broker are filtered before they are sent to the sink. A sink that is connected to a trigger is configured as a \u003Ccode class=\"literal\">subscriber\u003C/code> in the \u003Ccode class=\"literal\">Trigger\u003C/code> object’s resource spec.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example of a \u003Ccode class=\"literal\">Trigger\u003C/code> object connected to a Kafka sink\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Trigger\nmetadata:\n name: <trigger_name> \u003Cspan id=\"CO12-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n...\n subscriber:\n ref:\n apiVersion: eventing.knative.dev/v1alpha1\n kind: KafkaSink\n name: <kafka_sink_name> \u003Cspan id=\"CO12-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO12-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe name of the trigger being connected to the sink.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO12-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe name of a \u003Ccode class=\"literal\">KafkaSink\u003C/code> object.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-event-delivery\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.6. Event delivery\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tYou can configure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. Configuring event delivery parameters, including a dead letter sink, ensures that any events that fail to be delivered to an event sink are retried. Otherwise, undelivered events are dropped.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-event-delivery-component-behaviors_serverless-event-delivery\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.6.1. Event delivery behavior patterns for channels and brokers\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tDifferent channel and broker types have their own behavior patterns that are followed for event delivery.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-event-delivery-component-behaviors-kafka_serverless-event-delivery\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.6.1.1. Knative Kafka channels and brokers\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tIf an event is successfully delivered to a Kafka channel or broker receiver, the receiver responds with a \u003Ccode class=\"literal\">202\u003C/code> status code, which means that the event has been safely stored inside a Kafka topic and is not lost.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tIf the receiver responds with any other status code, the event is not safely stored, and steps must be taken by the user to resolve the issue.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-event-delivery-parameters_serverless-event-delivery\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.6.2. Configurable event delivery parameters\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe following parameters can be configured for event delivery:\n\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">Dead letter sink\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tYou can configure the \u003Ccode class=\"literal\">deadLetterSink\u003C/code> delivery parameter so that if an event fails to be delivered, it is stored in the specified event sink. Undelivered events that are not stored in a dead letter sink are dropped. The dead letter sink be any addressable object that conforms to the Knative Eventing sink contract, such as a Knative service, a Kubernetes service, or a URI.\n\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Retries\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tYou can set a minimum number of times that the delivery must be retried before the event is sent to the dead letter sink, by configuring the \u003Ccode class=\"literal\">retry\u003C/code> delivery parameter with an integer value.\n\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Back off delay\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tYou can set the \u003Ccode class=\"literal\">backoffDelay\u003C/code> delivery parameter to specify the time delay before an event delivery retry is attempted after a failure. The duration of the \u003Ccode class=\"literal\">backoffDelay\u003C/code> parameter is specified using the \u003Ca class=\"link\" href=\"https://en.wikipedia.org/wiki/ISO_8601#Durations\">ISO 8601\u003C/a> format. For example, \u003Ccode class=\"literal\">PT1S\u003C/code> specifies a 1 second delay.\n\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Back off policy\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">backoffPolicy\u003C/code> delivery parameter can be used to specify the retry back off policy. The policy can be specified as either \u003Ccode class=\"literal\">linear\u003C/code> or \u003Ccode class=\"literal\">exponential\u003C/code>. When using the \u003Ccode class=\"literal\">linear\u003C/code> back off policy, the back off delay is equal to \u003Ccode class=\"literal\">backoffDelay * <numberOfRetries>\u003C/code>. When using the \u003Ccode class=\"literal\">exponential\u003C/code> backoff policy, the back off delay is equal to \u003Ccode class=\"literal\">backoffDelay*2^<numberOfRetries>\u003C/code>.\n\t\t\t\t\t\t\t\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-configuring-event-delivery-examples_serverless-event-delivery\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.6.3. Examples of configuring event delivery parameters\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can configure event delivery parameters for \u003Ccode class=\"literal\">Broker\u003C/code>, \u003Ccode class=\"literal\">Trigger\u003C/code>, \u003Ccode class=\"literal\">Channel\u003C/code>, and \u003Ccode class=\"literal\">Subscription\u003C/code> objects. If you configure event delivery parameters for a broker or channel, these parameters are propagated to triggers or subscriptions created for those objects. You can also set event delivery parameters for triggers or subscriptions to override the settings for the broker or channel.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example \u003Ccode class=\"literal\">Broker\u003C/code> object\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Broker\nmetadata:\n...\nspec:\n delivery:\n deadLetterSink:\n ref:\n apiVersion: eventing.knative.dev/v1alpha1\n kind: KafkaSink\n name: <sink_name>\n backoffDelay: <duration>\n backoffPolicy: <policy_type>\n retry: <integer>\n...\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example \u003Ccode class=\"literal\">Trigger\u003C/code> object\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Trigger\nmetadata:\n...\nspec:\n broker: <broker_name>\n delivery:\n deadLetterSink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: <sink_name>\n backoffDelay: <duration>\n backoffPolicy: <policy_type>\n retry: <integer>\n...\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example \u003Ccode class=\"literal\">Channel\u003C/code> object\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: messaging.knative.dev/v1\nkind: Channel\nmetadata:\n...\nspec:\n delivery:\n deadLetterSink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: <sink_name>\n backoffDelay: <duration>\n backoffPolicy: <policy_type>\n retry: <integer>\n...\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example \u003Ccode class=\"literal\">Subscription\u003C/code> object\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: messaging.knative.dev/v1\nkind: Subscription\nmetadata:\n...\nspec:\n channel:\n apiVersion: messaging.knative.dev/v1\n kind: Channel\n name: <channel_name>\n delivery:\n deadLetterSink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: <sink_name>\n backoffDelay: <duration>\n backoffPolicy: <policy_type>\n retry: <integer>\n...\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"trigger-event-delivery-config_serverless-event-delivery\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.6.4. Configuring event delivery ordering for triggers\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIf you are using a Kafka broker, you can configure the delivery order of events from triggers to event sinks.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and Knative Kafka are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tKafka broker is enabled for use on your cluster, and you have created a Kafka broker.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the OpenShift (\u003Ccode class=\"literal\">oc\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate or modify a \u003Ccode class=\"literal\">Trigger\u003C/code> object and set the \u003Ccode class=\"literal\">kafka.eventing.knative.dev/delivery.order\u003C/code> annotation:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Trigger\nmetadata:\n name: <trigger_name>\n annotations:\n kafka.eventing.knative.dev/delivery.order: ordered\n...\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe supported consumer delivery guarantees are:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">unordered\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\tAn unordered consumer is a non-blocking consumer that delivers messages unordered, while preserving proper offset management.\n\t\t\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">ordered\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tAn ordered consumer is a per-partition blocking consumer that waits for a successful response from the CloudEvent subscriber before it delivers the next message of the partition.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tThe default ordering guarantee is \u003Ccode class=\"literal\">unordered\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">Trigger\u003C/code> object:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-listing-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.7. Listing event sources and event source types\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tIt is possible to view a list of all event sources or event source types that exist or are available for use on your OpenShift Container Platform cluster. You can use the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI or the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective in the OpenShift Container Platform web console to list available event sources or event source types.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-list-source-types-kn_serverless-listing-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.7.1. Listing available event source types by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI provides a streamlined and intuitive user interface to view available event source types on your cluster. You can list event source types that can be created and used on your cluster by using the \u003Ccode class=\"literal\">kn source list-types\u003C/code> CLI command.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tList the available event source types in the terminal:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source list-types\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">TYPE NAME DESCRIPTION\nApiServerSource apiserversources.sources.knative.dev Watch and send Kubernetes API events to a sink\nPingSource pingsources.sources.knative.dev Periodically send ping events to a sink\nSinkBinding sinkbindings.sources.knative.dev Binding for connecting a PodSpecable to a sink\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: You can also list the available event source types in YAML format:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source list-types -o yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-list-source-types-odc_serverless-listing-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.7.2. Viewing available event source types within the Developer perspective\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIt is possible to view a list of all available event source types on your cluster. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to view available event source types.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have logged in to the OpenShift Container Platform web console.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tAccess the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Event Source\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tView the available event source types.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-list-source_serverless-listing-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.7.3. Listing available event sources by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI provides a streamlined and intuitive user interface to view existing event sources on your cluster. You can list existing event sources by using the \u003Ccode class=\"literal\">kn source list\u003C/code> command.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tList the existing event sources in the terminal:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source list\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME TYPE RESOURCE SINK READY\na1 ApiServerSource apiserversources.sources.knative.dev ksvc:eshow2 True\nb1 SinkBinding sinkbindings.sources.knative.dev ksvc:eshow3 False\np1 PingSource pingsources.sources.knative.dev ksvc:eshow1 True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: You can list event sources of a specific type only, by using the \u003Ccode class=\"literal\">--type\u003C/code> flag:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source list --type <event_source_type>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source list --type PingSource\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME TYPE RESOURCE SINK READY\np1 PingSource pingsources.sources.knative.dev ksvc:eshow1 True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-apiserversource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.8. Creating an API server source\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tThe API server source is an event source that can be used to connect an event sink, such as a Knative service, to the Kubernetes API server. The API server source watches for Kubernetes events and forwards them to the Knative Eventing broker.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"odc-creating-apiserversource_serverless-apiserversource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.8.1. Creating an API server source by using the web console\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter Knative Eventing is installed on your cluster, you can create an API server source by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create an event source.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have logged in to the OpenShift Container Platform web console.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Procedure\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tIf you want to re-use an existing service account, you can modify your existing \u003Ccode class=\"literal\">ServiceAccount\u003C/code> resource to include the required permissions instead of creating a new resource.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a service account, role, and role binding for the event source as a YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: events-sa\n namespace: default \u003Cspan id=\"CO13-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n name: event-watcher\n namespace: default \u003Cspan id=\"CO13-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nrules:\n - apiGroups:\n - \"\"\n resources:\n - events\n verbs:\n - get\n - list\n - watch\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: k8s-ra-event-watcher\n namespace: default \u003Cspan id=\"CO13-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: event-watcher\nsubjects:\n - kind: ServiceAccount\n name: events-sa\n namespace: default \u003Cspan id=\"CO13-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO13-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003Ca href=\"#CO13-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003Ca href=\"#CO13-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003Ca href=\"#CO13-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tChange this namespace to the namespace that you have selected for installing the event source.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>Event Source\u003C/strong>\u003C/span>. The \u003Cspan class=\"strong strong\">\u003Cstrong>Event Sources\u003C/strong>\u003C/span> page is displayed.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOptional: If you have multiple providers for your event sources, select the required provider from the \u003Cspan class=\"strong strong\">\u003Cstrong>Providers\u003C/strong>\u003C/span> list to filter the available event sources from the provider.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tSelect \u003Cspan class=\"strong strong\">\u003Cstrong>ApiServerSource\u003C/strong>\u003C/span> and then click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span>. The \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span> page is displayed.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tConfigure the \u003Cspan class=\"strong strong\">\u003Cstrong>ApiServerSource\u003C/strong>\u003C/span> settings by using the \u003Cspan class=\"strong strong\">\u003Cstrong>Form view\u003C/strong>\u003C/span> or \u003Cspan class=\"strong strong\">\u003Cstrong>YAML view\u003C/strong>\u003C/span>:\n\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tYou can switch between the \u003Cspan class=\"strong strong\">\u003Cstrong>Form view\u003C/strong>\u003C/span> and \u003Cspan class=\"strong strong\">\u003Cstrong>YAML view\u003C/strong>\u003C/span>. The data is persisted when switching between the views.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter \u003Ccode class=\"literal\">v1\u003C/code> as the \u003Cspan class=\"strong strong\">\u003Cstrong>APIVERSION\u003C/strong>\u003C/span> and \u003Ccode class=\"literal\">Event\u003C/code> as the \u003Cspan class=\"strong strong\">\u003Cstrong>KIND\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tSelect the \u003Cspan class=\"strong strong\">\u003Cstrong>Service Account Name\u003C/strong>\u003C/span> for the service account that you created.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tSelect the \u003Cspan class=\"strong strong\">\u003Cstrong>Sink\u003C/strong>\u003C/span> for the event source. A \u003Cspan class=\"strong strong\">\u003Cstrong>Sink\u003C/strong>\u003C/span> can be either a \u003Cspan class=\"strong strong\">\u003Cstrong>Resource\u003C/strong>\u003C/span>, such as a channel, broker, or service, or a \u003Cspan class=\"strong strong\">\u003Cstrong>URI\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAfter you have created the API server source, you will see it connected to the service it is sinked to in the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/db87be151908745bc9955ae14c339869/toplogy-odc-apiserver.png\" alt=\"ApiServerSource Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tIf a URI sink is used, modify the URI by right-clicking on \u003Cspan class=\"strong strong\">\u003Cstrong>URI sink\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>Edit URI\u003C/strong>\u003C/span>.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting the API server source\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tNavigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tRight-click the API server source and select \u003Cspan class=\"strong strong\">\u003Cstrong>Delete ApiServerSource\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/2efd3fc303c63556343fbe20d0d42bd7/delete-apiserversource-odc.png\" alt=\"Delete the ApiServerSource\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"apiserversource-kn_serverless-apiserversource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.8.2. Creating an API server source by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">kn source apiserver create\u003C/code> command to create an API server source by using the \u003Ccode class=\"literal\">kn\u003C/code> CLI. Using the \u003Ccode class=\"literal\">kn\u003C/code> CLI to create an API server source provides a more streamlined and intuitive user interface than modifying YAML files directly.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Procedure\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tIf you want to re-use an existing service account, you can modify your existing \u003Ccode class=\"literal\">ServiceAccount\u003C/code> resource to include the required permissions instead of creating a new resource.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a service account, role, and role binding for the event source as a YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: events-sa\n namespace: default \u003Cspan id=\"CO14-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n name: event-watcher\n namespace: default \u003Cspan id=\"CO14-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nrules:\n - apiGroups:\n - \"\"\n resources:\n - events\n verbs:\n - get\n - list\n - watch\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: k8s-ra-event-watcher\n namespace: default \u003Cspan id=\"CO14-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: event-watcher\nsubjects:\n - kind: ServiceAccount\n name: events-sa\n namespace: default \u003Cspan id=\"CO14-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO14-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003Ca href=\"#CO14-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003Ca href=\"#CO14-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003Ca href=\"#CO14-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tChange this namespace to the namespace that you have selected for installing the event source.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate an API server source that has an event sink. In the following example, the sink is a broker:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource \"event:v1\" --service-account <service_account_name> --mode Resource\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo check that the API server source is set up correctly, create a Knative service that dumps incoming messages to its log:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create <service_name> --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tIf you used a broker as an event sink, create a trigger to filter events from the \u003Ccode class=\"literal\">default\u003C/code> broker to the service:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger create <trigger_name> --sink ksvc:<service_name>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate events by launching a pod in the default namespace:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create deployment hello-node --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCheck that the controller is mapped correctly by inspecting the output generated by the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source apiserver describe <source_name>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Name: mysource\nNamespace: default\nAnnotations: sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer\nAge: 3m\nServiceAccountName: events-sa\nMode: Resource\nSink:\n Name: default\n Namespace: default\n Kind: Broker (eventing.knative.dev/v1)\nResources:\n Kind: event (v1)\n Controller: false\nConditions:\n OK TYPE AGE REASON\n ++ Ready 3m\n ++ Deployed 3m\n ++ SinkProvided 3m\n ++ SufficientPermissions 3m\n ++ EventTypesProvided 3m\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tYou can verify that the Kubernetes events were sent to Knative by looking at the message dumper function logs.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tGet the pods:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pods\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tView the message dumper function logs for the pods:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc logs $(oc get pod -o name | grep event-display) -c user-container\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">☁️ cloudevents.Event\nValidation: valid\nContext Attributes,\n specversion: 1.0\n type: dev.knative.apiserver.resource.update\n datacontenttype: application/json\n ...\nData,\n {\n \"apiVersion\": \"v1\",\n \"involvedObject\": {\n \"apiVersion\": \"v1\",\n \"fieldPath\": \"spec.containers{hello-node}\",\n \"kind\": \"Pod\",\n \"name\": \"hello-node\",\n \"namespace\": \"default\",\n .....\n },\n \"kind\": \"Event\",\n \"message\": \"Started container\",\n \"metadata\": {\n \"name\": \"hello-node.159d7608e3a3572c\",\n \"namespace\": \"default\",\n ....\n },\n \"reason\": \"Started\",\n ...\n }\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting the API server source\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the trigger:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger delete <trigger_name>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the event source:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source apiserver delete <source_name>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the service account, cluster role, and cluster binding:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete -f authentication.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Csection class=\"section\" id=\"specifying-sink-flag-kn_serverless-apiserversource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.8.2.1. Knative CLI sink flag\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tWhen you create an event source by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI, you can specify a sink where events are sent to from that resource by using the \u003Ccode class=\"literal\">--sink\u003C/code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tThe following example creates a sink binding that uses a service, \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code>, as the sink:\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command using the sink flag\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source binding create bind-heartbeat \\\n --namespace sinkbinding-example \\\n --subject \"Job:batch/v1:app=heartbeat-cron\" \\\n --sink http://event-display.svc.cluster.local \\ \u003Cspan id=\"CO15-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n --ce-override \"sink=bound\"\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO15-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">svc\u003C/code> in \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code> determines that the sink is a Knative service. Other default sink prefixes include \u003Ccode class=\"literal\">channel\u003C/code>, and \u003Ccode class=\"literal\">broker\u003C/code>.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"apiserversource-yaml_context\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.8.3. Creating an API server source by using YAML files\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe event sources declaratively and in a reproducible manner. To create an API server source by using YAML, you must create a YAML file that defines an \u003Ccode class=\"literal\">ApiServerSource\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created the \u003Ccode class=\"literal\">default\u003C/code> broker in the same namespace as the one defined in the API server source YAML file.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Procedure\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tIf you want to re-use an existing service account, you can modify your existing \u003Ccode class=\"literal\">ServiceAccount\u003C/code> resource to include the required permissions instead of creating a new resource.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a service account, role, and role binding for the event source as a YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: ServiceAccount\nmetadata:\n name: events-sa\n namespace: default \u003Cspan id=\"CO16-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n name: event-watcher\n namespace: default \u003Cspan id=\"CO16-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nrules:\n - apiGroups:\n - \"\"\n resources:\n - events\n verbs:\n - get\n - list\n - watch\n\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: k8s-ra-event-watcher\n namespace: default \u003Cspan id=\"CO16-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: event-watcher\nsubjects:\n - kind: ServiceAccount\n name: events-sa\n namespace: default \u003Cspan id=\"CO16-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO16-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003Ca href=\"#CO16-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003Ca href=\"#CO16-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003Ca href=\"#CO16-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tChange this namespace to the namespace that you have selected for installing the event source.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate an API server source as a YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1alpha1\nkind: ApiServerSource\nmetadata:\n name: testevents\nspec:\n serviceAccountName: events-sa\n mode: Resource\n resources:\n - apiVersion: v1\n kind: Event\n sink:\n ref:\n apiVersion: eventing.knative.dev/v1\n kind: Broker\n name: default\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">ApiServerSource\u003C/code> YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo check that the API server source is set up correctly, create a Knative service as a YAML file that dumps incoming messages to its log:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: event-display\n namespace: default\nspec:\n template:\n spec:\n containers:\n - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">Service\u003C/code> YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">Trigger\u003C/code> object as a YAML file that filters events from the \u003Ccode class=\"literal\">default\u003C/code> broker to the service created in the previous step:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Trigger\nmetadata:\n name: event-display-trigger\n namespace: default\nspec:\n broker: default\n subscriber:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: event-display\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">Trigger\u003C/code> YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate events by launching a pod in the default namespace:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create deployment hello-node --image=quay.io/openshift-knative/knative-eventing-sources-event-display\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCheck that the controller is mapped correctly, by entering the following command and inspecting the output:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get apiserversource.sources.knative.dev testevents -o yaml\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1alpha1\nkind: ApiServerSource\nmetadata:\n annotations:\n creationTimestamp: \"2020-04-07T17:24:54Z\"\n generation: 1\n name: testevents\n namespace: default\n resourceVersion: \"62868\"\n selfLink: /apis/sources.knative.dev/v1alpha1/namespaces/default/apiserversources/testevents2\n uid: 1603d863-bb06-4d1c-b371-f580b4db99fa\nspec:\n mode: Resource\n resources:\n - apiVersion: v1\n controller: false\n controllerSelector:\n apiVersion: \"\"\n kind: \"\"\n name: \"\"\n uid: \"\"\n kind: Event\n labelSelector: {}\n serviceAccountName: events-sa\n sink:\n ref:\n apiVersion: eventing.knative.dev/v1\n kind: Broker\n name: default\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tTo verify that the Kubernetes events were sent to Knative, you can look at the message dumper function logs.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tGet the pods by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pods\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tView the message dumper function logs for the pods by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc logs $(oc get pod -o name | grep event-display) -c user-container\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">☁️ cloudevents.Event\nValidation: valid\nContext Attributes,\n specversion: 1.0\n type: dev.knative.apiserver.resource.update\n datacontenttype: application/json\n ...\nData,\n {\n \"apiVersion\": \"v1\",\n \"involvedObject\": {\n \"apiVersion\": \"v1\",\n \"fieldPath\": \"spec.containers{hello-node}\",\n \"kind\": \"Pod\",\n \"name\": \"hello-node\",\n \"namespace\": \"default\",\n .....\n },\n \"kind\": \"Event\",\n \"message\": \"Started container\",\n \"metadata\": {\n \"name\": \"hello-node.159d7608e3a3572c\",\n \"namespace\": \"default\",\n ....\n },\n \"reason\": \"Started\",\n ...\n }\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting the API server source\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the trigger:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete -f trigger.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the event source:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete -f k8s-events.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the service account, cluster role, and cluster binding:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete -f authentication.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-pingsource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.9. Creating a ping source\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tA ping source is an event source that can be used to periodically send ping events with a constant payload to an event consumer. A ping source can be used to schedule sending events, similar to a timer.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-pingsource-odc_serverless-pingsource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.9.1. Creating a ping source by using the web console\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter Knative Eventing is installed on your cluster, you can create a ping source by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create an event source.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have logged in to the OpenShift Container Platform web console.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo verify that the ping source is working, create a simple Knative service that dumps incoming messages to the logs of the service.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>YAML\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCopy the example YAML:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: event-display\nspec:\n template:\n spec:\n containers:\n - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a ping source in the same namespace as the service created in the previous step, or any other sink that you want to send events to.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>Event Source\u003C/strong>\u003C/span>. The \u003Cspan class=\"strong strong\">\u003Cstrong>Event Sources\u003C/strong>\u003C/span> page is displayed.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tOptional: If you have multiple providers for your event sources, select the required provider from the \u003Cspan class=\"strong strong\">\u003Cstrong>Providers\u003C/strong>\u003C/span> list to filter the available event sources from the provider.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tSelect \u003Cspan class=\"strong strong\">\u003Cstrong>Ping Source\u003C/strong>\u003C/span> and then click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span>. The \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span> page is displayed.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\t\tYou can configure the \u003Cspan class=\"strong strong\">\u003Cstrong>PingSource\u003C/strong>\u003C/span> settings by using the \u003Cspan class=\"strong strong\">\u003Cstrong>Form view\u003C/strong>\u003C/span> or \u003Cspan class=\"strong strong\">\u003Cstrong>YAML view\u003C/strong>\u003C/span> and can switch between the views. The data is persisted when switching between the views.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter a value for \u003Cspan class=\"strong strong\">\u003Cstrong>Schedule\u003C/strong>\u003C/span>. In this example, the value is \u003Ccode class=\"literal\">*/2 * * * *\u003C/code>, which creates a PingSource that sends a message every two minutes.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tOptional: You can enter a value for \u003Cspan class=\"strong strong\">\u003Cstrong>Data\u003C/strong>\u003C/span>, which is the message payload.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tSelect a \u003Cspan class=\"strong strong\">\u003Cstrong>Sink\u003C/strong>\u003C/span>. This can be either a \u003Cspan class=\"strong strong\">\u003Cstrong>Resource\u003C/strong>\u003C/span> or a \u003Cspan class=\"strong strong\">\u003Cstrong>URI\u003C/strong>\u003C/span>. In this example, the \u003Ccode class=\"literal\">event-display\u003C/code> service created in the previous step is used as the \u003Cspan class=\"strong strong\">\u003Cstrong>Resource\u003C/strong>\u003C/span> sink.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tYou can verify that the ping source was created and is connected to the sink by viewing the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tView the ping source and sink.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/982b6f0a531fe66d6f99e70f962389a2/verify-pingsource-ODC.png\" alt=\"View the ping source and service in the Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting the ping source\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tNavigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tRight-click the API server source and select \u003Cspan class=\"strong strong\">\u003Cstrong>Delete Ping Source\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-pingsource-kn_serverless-pingsource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.9.2. Creating a ping source by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">kn source ping create\u003C/code> command to create a ping source by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI. Using the Knative CLI to create event sources provides a more streamlined and intuitive user interface than modifying YAML files directly.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOptional: If you want to use the verification steps for this procedure, install the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo verify that the ping source is working, create a simple Knative service that dumps incoming messages to the service logs:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create event-display \\\n --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tFor each set of ping events that you want to request, create a ping source in the same namespace as the event consumer:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source ping create test-ping-source \\\n --schedule \"*/2 * * * *\" \\\n --data '{\"message\": \"Hello world!\"}' \\\n --sink ksvc:event-display\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCheck that the controller is mapped correctly by entering the following command and inspecting the output:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source ping describe test-ping-source\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Name: test-ping-source\nNamespace: default\nAnnotations: sources.knative.dev/creator=developer, sources.knative.dev/lastModifier=developer\nAge: 15s\nSchedule: */2 * * * *\nData: {\"message\": \"Hello world!\"}\n\nSink:\n Name: event-display\n Namespace: default\n Resource: Service (serving.knative.dev/v1)\n\nConditions:\n OK TYPE AGE REASON\n ++ Ready 8s\n ++ Deployed 8s\n ++ SinkProvided 15s\n ++ ValidSchedule 15s\n ++ EventTypeProvided 15s\n ++ ResourcesCorrect 15s\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tYou can verify that the Kubernetes events were sent to the Knative event sink by looking at the logs of the sink pod.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp>\n\t\t\t\t\tBy default, Knative services terminate their pods if no traffic is received within a 60 second period. The example shown in this guide creates a ping source that sends a message every 2 minutes, so each message should be observed in a newly created pod.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tWatch for new pods created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ watch oc get pods\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCancel watching the pods using Ctrl+C, then look at the logs of the created pod:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc logs $(oc get pod -o name | grep event-display) -c user-container\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">☁️ cloudevents.Event\nValidation: valid\nContext Attributes,\n specversion: 1.0\n type: dev.knative.sources.ping\n source: /apis/v1/namespaces/default/pingsources/test-ping-source\n id: 99e4f4f6-08ff-4bff-acf1-47f61ded68c9\n time: 2020-04-07T16:16:00.000601161Z\n datacontenttype: application/json\nData,\n {\n \"message\": \"Hello world!\"\n }\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting the ping source\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the ping source:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn delete pingsources.sources.knative.dev <ping_source_name>\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"specifying-sink-flag-kn_serverless-pingsource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.9.2.1. Knative CLI sink flag\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tWhen you create an event source by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI, you can specify a sink where events are sent to from that resource by using the \u003Ccode class=\"literal\">--sink\u003C/code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tThe following example creates a sink binding that uses a service, \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code>, as the sink:\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command using the sink flag\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source binding create bind-heartbeat \\\n --namespace sinkbinding-example \\\n --subject \"Job:batch/v1:app=heartbeat-cron\" \\\n --sink http://event-display.svc.cluster.local \\ \u003Cspan id=\"CO17-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n --ce-override \"sink=bound\"\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO17-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">svc\u003C/code> in \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code> determines that the sink is a Knative service. Other default sink prefixes include \u003Ccode class=\"literal\">channel\u003C/code>, and \u003Ccode class=\"literal\">broker\u003C/code>.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-pingsource-yaml_serverless-pingsource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.9.3. Creating a ping source by using YAML\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe event sources declaratively and in a reproducible manner. To create a serverless ping source by using YAML, you must create a YAML file that defines a \u003Ccode class=\"literal\">PingSource\u003C/code> object, then apply it by using \u003Ccode class=\"literal\">oc apply\u003C/code>.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example \u003Ccode class=\"literal\">PingSource\u003C/code> object\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: PingSource\nmetadata:\n name: test-ping-source\nspec:\n schedule: \"*/2 * * * *\" \u003Cspan id=\"CO18-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n data: '{\"message\": \"Hello world!\"}' \u003Cspan id=\"CO18-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n sink: \u003Cspan id=\"CO18-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: event-display\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO18-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe schedule of the event specified using \u003Ca class=\"link\" href=\"https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/#schedule\">CRON expression\u003C/a>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO18-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe event message body expressed as a JSON encoded data string.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO18-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThese are the details of the event consumer. In this example, we are using a Knative service named \u003Ccode class=\"literal\">event-display\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo verify that the ping source is working, create a simple Knative service that dumps incoming messages to the service’s logs.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCreate a service YAML file:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: event-display\nspec:\n template:\n spec:\n containers:\n - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCreate the service:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tFor each set of ping events that you want to request, create a ping source in the same namespace as the event consumer.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCreate a YAML file for the ping source:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: PingSource\nmetadata:\n name: test-ping-source\nspec:\n schedule: \"*/2 * * * *\"\n data: '{\"message\": \"Hello world!\"}'\n sink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: event-display\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCreate the ping source:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCheck that the controller is mapped correctly by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pingsource.sources.knative.dev <ping_source_name> -oyaml\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">apiVersion: sources.knative.dev/v1\nkind: PingSource\nmetadata:\n annotations:\n sources.knative.dev/creator: developer\n sources.knative.dev/lastModifier: developer\n creationTimestamp: \"2020-04-07T16:11:14Z\"\n generation: 1\n name: test-ping-source\n namespace: default\n resourceVersion: \"55257\"\n selfLink: /apis/sources.knative.dev/v1/namespaces/default/pingsources/test-ping-source\n uid: 3d80d50b-f8c7-4c1b-99f7-3ec00e0a8164\nspec:\n data: '{ value: \"hello\" }'\n schedule: '*/2 * * * *'\n sink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: event-display\n namespace: default\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tYou can verify that the Kubernetes events were sent to the Knative event sink by looking at the sink pod’s logs.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp>\n\t\t\t\t\tBy default, Knative services terminate their pods if no traffic is received within a 60 second period. The example shown in this guide creates a PingSource that sends a message every 2 minutes, so each message should be observed in a newly created pod.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tWatch for new pods created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ watch oc get pods\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCancel watching the pods using Ctrl+C, then look at the logs of the created pod:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc logs $(oc get pod -o name | grep event-display) -c user-container\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">☁️ cloudevents.Event\nValidation: valid\nContext Attributes,\n specversion: 1.0\n type: dev.knative.sources.ping\n source: /apis/v1/namespaces/default/pingsources/test-ping-source\n id: 042ff529-240e-45ee-b40c-3a908129853e\n time: 2020-04-07T16:22:00.000791674Z\n datacontenttype: application/json\nData,\n {\n \"message\": \"Hello world!\"\n }\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting the ping source\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the ping source:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete -f <filename>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ oc delete -f ping-source.yaml\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.10. Custom event sources\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tIf you need to ingress events from an event producer that is not included in Knative, or from a producer that emits events which are not in the \u003Ccode class=\"literal\">CloudEvent\u003C/code> format, you can do this by creating a custom event source. You can create a custom event source by using one of the following methods:\n\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\tUse a \u003Ccode class=\"literal\">PodSpecable\u003C/code> object as an event source, by creating a sink binding.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tUse a container as an event source, by creating a container source.\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"serverless-sinkbinding-intro_context\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.10.1. Sink binding\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe \u003Ccode class=\"literal\">SinkBinding\u003C/code> object supports decoupling event production from delivery addressing. Sink binding is used to connect \u003Cspan class=\"emphasis\">\u003Cem>event producers\u003C/em>\u003C/span> to an event consumer, or \u003Cspan class=\"emphasis\">\u003Cem>sink\u003C/em>\u003C/span>. An event producer is a Kubernetes resource that embeds a \u003Ccode class=\"literal\">PodSpec\u003C/code> template and produces events. A sink is an addressable Kubernetes object that can receive events.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe \u003Ccode class=\"literal\">SinkBinding\u003C/code> object injects environment variables into the \u003Ccode class=\"literal\">PodTemplateSpec\u003C/code> of the sink, which means that the application code does not need to interact directly with the Kubernetes API to locate the event destination. These environment variables are as follows:\n\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">K_SINK\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tThe URL of the resolved sink.\n\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">K_CE_OVERRIDES\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tA JSON object that specifies overrides to the outbound event.\n\t\t\t\t\t\t\t\u003C/dd>\u003C/dl>\u003C/div>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tThe \u003Ccode class=\"literal\">SinkBinding\u003C/code> object currently does not support custom revision names for services.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"serverless-sinkbinding-yaml_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.1.1. Creating a sink binding by using YAML\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe event sources declaratively and in a reproducible manner. To create a sink binding by using YAML, you must create a YAML file that defines an \u003Ccode class=\"literal\">SinkBinding\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tTo check that sink binding is set up correctly, create a Knative event display service, or event sink, that dumps incoming messages to its log.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate a service YAML file:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service YAML file\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: event-display\nspec:\n template:\n spec:\n containers:\n - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate the service:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a sink binding instance that directs events to the service.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate a sink binding YAML file:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example service YAML file\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1alpha1\nkind: SinkBinding\nmetadata:\n name: bind-heartbeat\nspec:\n subject:\n apiVersion: batch/v1\n kind: Job \u003Cspan id=\"CO19-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n selector:\n matchLabels:\n app: heartbeat-cron\n\n sink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: event-display\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO19-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\t\t\tIn this example, any Job with the label \u003Ccode class=\"literal\">app: heartbeat-cron\u003C/code> will be bound to the event sink.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate the sink binding:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">CronJob\u003C/code> object.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate a cron job YAML file:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example cron job YAML file\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: batch/v1\nkind: CronJob\nmetadata:\n name: heartbeat-cron\nspec:\n # Run every minute\n schedule: \"* * * * *\"\n jobTemplate:\n metadata:\n labels:\n app: heartbeat-cron\n bindings.knative.dev/include: \"true\"\n spec:\n template:\n spec:\n restartPolicy: Never\n containers:\n - name: single-heartbeat\n image: quay.io/openshift-knative/heartbeats:latest\n args:\n - --period=1\n env:\n - name: ONE_SHOT\n value: \"true\"\n - name: POD_NAME\n valueFrom:\n fieldRef:\n fieldPath: metadata.name\n - name: POD_NAMESPACE\n valueFrom:\n fieldRef:\n fieldPath: metadata.namespace\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tTo use sink binding, you must manually add a \u003Ccode class=\"literal\">bindings.knative.dev/include=true\u003C/code> label to your Knative resources.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tFor example, to add this label to a \u003Ccode class=\"literal\">CronJob\u003C/code> resource, add the following lines to the \u003Ccode class=\"literal\">Job\u003C/code> resource YAML definition:\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\"> jobTemplate:\n metadata:\n labels:\n app: heartbeat-cron\n bindings.knative.dev/include: \"true\"\u003C/pre>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate the cron job:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCheck that the controller is mapped correctly by entering the following command and inspecting the output:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get sinkbindings.sources.knative.dev bind-heartbeat -oyaml\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">spec:\n sink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: event-display\n namespace: default\n subject:\n apiVersion: batch/v1\n kind: Job\n namespace: default\n selector:\n matchLabels:\n app: heartbeat-cron\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tYou can verify that the Kubernetes events were sent to the Knative event sink by looking at the message dumper function logs.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tEnter the command:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pods\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tEnter the command:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc logs $(oc get pod -o name | grep event-display) -c user-container\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">☁️ cloudevents.Event\nValidation: valid\nContext Attributes,\n specversion: 1.0\n type: dev.knative.eventing.samples.heartbeat\n source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod\n id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596\n time: 2019-10-18T15:23:20.809775386Z\n contenttype: application/json\nExtensions,\n beats: true\n heart: yes\n the: 42\nData,\n {\n \"id\": 1,\n \"label\": \"\"\n }\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-sinkbinding-kn_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.1.2. Creating a sink binding by using the Knative CLI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">kn source binding create\u003C/code> command to create a sink binding by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI. Using the Knative CLI to create event sources provides a more streamlined and intuitive user interface than modifying YAML files directly.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tInstall the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\tThe following procedure requires you to create YAML files.\n\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tIf you change the names of the YAML files from those used in the examples, you must ensure that you also update the corresponding CLI commands.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tTo check that sink binding is set up correctly, create a Knative event display service, or event sink, that dumps incoming messages to its log:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create event-display --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a sink binding instance that directs events to the service:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-display\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">CronJob\u003C/code> object.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate a cron job YAML file:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example cron job YAML file\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: batch/v1\nkind: CronJob\nmetadata:\n name: heartbeat-cron\nspec:\n # Run every minute\n schedule: \"* * * * *\"\n jobTemplate:\n metadata:\n labels:\n app: heartbeat-cron\n bindings.knative.dev/include: \"true\"\n spec:\n template:\n spec:\n restartPolicy: Never\n containers:\n - name: single-heartbeat\n image: quay.io/openshift-knative/heartbeats:latest\n args:\n - --period=1\n env:\n - name: ONE_SHOT\n value: \"true\"\n - name: POD_NAME\n valueFrom:\n fieldRef:\n fieldPath: metadata.name\n - name: POD_NAMESPACE\n valueFrom:\n fieldRef:\n fieldPath: metadata.namespace\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tTo use sink binding, you must manually add a \u003Ccode class=\"literal\">bindings.knative.dev/include=true\u003C/code> label to your Knative CRs.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tFor example, to add this label to a \u003Ccode class=\"literal\">CronJob\u003C/code> CR, add the following lines to the \u003Ccode class=\"literal\">Job\u003C/code> CR YAML definition:\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\"> jobTemplate:\n metadata:\n labels:\n app: heartbeat-cron\n bindings.knative.dev/include: \"true\"\u003C/pre>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate the cron job:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCheck that the controller is mapped correctly by entering the following command and inspecting the output:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source binding describe bind-heartbeat\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Name: bind-heartbeat\nNamespace: demo-2\nAnnotations: sources.knative.dev/creator=minikube-user, sources.knative.dev/lastModifier=minikub ...\nAge: 2m\nSubject:\n Resource: job (batch/v1)\n Selector:\n app: heartbeat-cron\nSink:\n Name: event-display\n Resource: Service (serving.knative.dev/v1)\n\nConditions:\n OK TYPE AGE REASON\n ++ Ready 2m\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tYou can verify that the Kubernetes events were sent to the Knative event sink by looking at the message dumper function logs.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tView the message dumper function logs by entering the following commands:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pods\u003C/pre>\u003Cpre class=\"programlisting language-terminal\">$ oc logs $(oc get pod -o name | grep event-display) -c user-container\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">☁️ cloudevents.Event\nValidation: valid\nContext Attributes,\n specversion: 1.0\n type: dev.knative.eventing.samples.heartbeat\n source: https://knative.dev/eventing-contrib/cmd/heartbeats/#event-test/mypod\n id: 2b72d7bf-c38f-4a98-a433-608fbcdd2596\n time: 2019-10-18T15:23:20.809775386Z\n contenttype: application/json\nExtensions,\n beats: true\n heart: yes\n the: 42\nData,\n {\n \"id\": 1,\n \"label\": \"\"\n }\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"specifying-sink-flag-kn_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.10.1.2.1. Knative CLI sink flag\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tWhen you create an event source by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI, you can specify a sink where events are sent to from that resource by using the \u003Ccode class=\"literal\">--sink\u003C/code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources.\n\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tThe following example creates a sink binding that uses a service, \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code>, as the sink:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command using the sink flag\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source binding create bind-heartbeat \\\n --namespace sinkbinding-example \\\n --subject \"Job:batch/v1:app=heartbeat-cron\" \\\n --sink http://event-display.svc.cluster.local \\ \u003Cspan id=\"CO20-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n --ce-override \"sink=bound\"\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO20-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">svc\u003C/code> in \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code> determines that the sink is a Knative service. Other default sink prefixes include \u003Ccode class=\"literal\">channel\u003C/code>, and \u003Ccode class=\"literal\">broker\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-sinkbinding-odc_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.1.3. Creating a sink binding by using the web console\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAfter Knative Eventing is installed on your cluster, you can create a sink binding by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create an event source.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have logged in to the OpenShift Container Platform web console.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a Knative service to use as a sink:\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>YAML\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCopy the example YAML:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: serving.knative.dev/v1\nkind: Service\nmetadata:\n name: event-display\nspec:\n template:\n spec:\n containers:\n - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">CronJob\u003C/code> resource that is used as an event source and sends an event every minute.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>YAML\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCopy the example YAML:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: batch/v1\nkind: CronJob\nmetadata:\n name: heartbeat-cron\nspec:\n # Run every minute\n schedule: \"*/1 * * * *\"\n jobTemplate:\n metadata:\n labels:\n app: heartbeat-cron\n bindings.knative.dev/include: true \u003Cspan id=\"CO21-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n spec:\n template:\n spec:\n restartPolicy: Never\n containers:\n - name: single-heartbeat\n image: quay.io/openshift-knative/heartbeats\n args:\n - --period=1\n env:\n - name: ONE_SHOT\n value: \"true\"\n - name: POD_NAME\n valueFrom:\n fieldRef:\n fieldPath: metadata.name\n - name: POD_NAMESPACE\n valueFrom:\n fieldRef:\n fieldPath: metadata.namespace\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO21-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\t\t\tEnsure that you include the \u003Ccode class=\"literal\">bindings.knative.dev/include: true\u003C/code> label. The default namespace selection behavior of OpenShift Serverless uses inclusion mode.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a sink binding in the same namespace as the service created in the previous step, or any other sink that you want to send events to.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>Event Source\u003C/strong>\u003C/span>. The \u003Cspan class=\"strong strong\">\u003Cstrong>Event Sources\u003C/strong>\u003C/span> page is displayed.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tOptional: If you have multiple providers for your event sources, select the required provider from the \u003Cspan class=\"strong strong\">\u003Cstrong>Providers\u003C/strong>\u003C/span> list to filter the available event sources from the provider.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tSelect \u003Cspan class=\"strong strong\">\u003Cstrong>Sink Binding\u003C/strong>\u003C/span> and then click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span>. The \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span> page is displayed.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tYou can configure the \u003Cspan class=\"strong strong\">\u003Cstrong>Sink Binding\u003C/strong>\u003C/span> settings by using the \u003Cspan class=\"strong strong\">\u003Cstrong>Form view\u003C/strong>\u003C/span> or \u003Cspan class=\"strong strong\">\u003Cstrong>YAML view\u003C/strong>\u003C/span> and can switch between the views. The data is persisted when switching between the views.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>apiVersion\u003C/strong>\u003C/span> field enter \u003Ccode class=\"literal\">batch/v1\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Kind\u003C/strong>\u003C/span> field enter \u003Ccode class=\"literal\">Job\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">CronJob\u003C/code> kind is not supported directly by OpenShift Serverless sink binding, so the \u003Cspan class=\"strong strong\">\u003Cstrong>Kind\u003C/strong>\u003C/span> field must target the \u003Ccode class=\"literal\">Job\u003C/code> objects created by the cron job, rather than the cron job object itself.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tSelect a \u003Cspan class=\"strong strong\">\u003Cstrong>Sink\u003C/strong>\u003C/span>. This can be either a \u003Cspan class=\"strong strong\">\u003Cstrong>Resource\u003C/strong>\u003C/span> or a \u003Cspan class=\"strong strong\">\u003Cstrong>URI\u003C/strong>\u003C/span>. In this example, the \u003Ccode class=\"literal\">event-display\u003C/code> service created in the previous step is used as the \u003Cspan class=\"strong strong\">\u003Cstrong>Resource\u003C/strong>\u003C/span> sink.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Match labels\u003C/strong>\u003C/span> section:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"i\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\t\t\tEnter \u003Ccode class=\"literal\">app\u003C/code> in the \u003Cspan class=\"strong strong\">\u003Cstrong>Name\u003C/strong>\u003C/span> field.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\t\t\tEnter \u003Ccode class=\"literal\">heartbeat-cron\u003C/code> in the \u003Cspan class=\"strong strong\">\u003Cstrong>Value\u003C/strong>\u003C/span> field.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\t\tThe label selector is required when using cron jobs with sink binding, rather than the resource name. This is because jobs created by a cron job do not have a predictable name, and contain a randomly generated string in their name. For example, \u003Ccode class=\"literal\">hearthbeat-cron-1cc23f\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tYou can verify that the sink binding, sink, and cron job have been created and are working correctly by viewing the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page and pod logs.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tView the sink binding, sink, and heartbeats cron job.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/9a0fa2c38d9fb02364dd78a7e817d45c/verify-sinkbinding-odc.png\" alt=\"View the sink binding and service in the Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tObserve that successful jobs are being registered by the cron job once the sink binding is added. This means that the sink binding is successfully reconfiguring the jobs created by the cron job.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tBrowse the logs of the \u003Ccode class=\"literal\">event-display\u003C/code> service pod to see events produced by the heartbeats cron job.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-sinkbinding-reference_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.1.4. Sink binding reference\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can use a \u003Ccode class=\"literal\">PodSpecable\u003C/code> object as an event source by creating a sink binding. You can configure multiple parameters when creating a \u003Ccode class=\"literal\">SinkBinding\u003C/code> object.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\u003Ccode class=\"literal\">SinkBinding\u003C/code> objects support the following parameters:\n\t\t\t\t\t\u003C/p>\u003Crh-table>\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccolgroup>\u003Ccol style=\"width: 33%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155321069840\" scope=\"col\">Field\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155321068752\" scope=\"col\">Description\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155321067664\" scope=\"col\">Required or optional\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321069840\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">apiVersion\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321068752\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tSpecifies the API version, for example \u003Ccode class=\"literal\">sources.knative.dev/v1\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321067664\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321069840\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kind\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321068752\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tIdentifies this resource object as a \u003Ccode class=\"literal\">SinkBinding\u003C/code> object.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321067664\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321069840\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">metadata\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321068752\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tSpecifies metadata that uniquely identifies the \u003Ccode class=\"literal\">SinkBinding\u003C/code> object. For example, a \u003Ccode class=\"literal\">name\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321067664\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321069840\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">spec\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321068752\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tSpecifies the configuration information for this \u003Ccode class=\"literal\">SinkBinding\u003C/code> object.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321067664\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321069840\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">spec.sink\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321068752\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tA reference to an object that resolves to a URI to use as the sink.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321067664\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321069840\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">spec.subject\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321068752\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tReferences the resources for which the runtime contract is augmented by binding implementations.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321067664\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321069840\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">spec.ceOverrides\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321068752\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tDefines overrides to control the output format and modifications to the event sent to the sink.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321067664\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tOptional\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Csection class=\"section\" id=\"serverless-sinkbinding-reference-subject-parameters_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.10.1.4.1. Subject parameter\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">Subject\u003C/code> parameter references the resources for which the runtime contract is augmented by binding implementations. You can configure multiple fields for a \u003Ccode class=\"literal\">Subject\u003C/code> definition.\n\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">Subject\u003C/code> definition supports the following fields:\n\t\t\t\t\t\t\u003C/p>\u003Crh-table>\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccolgroup>\u003Ccol style=\"width: 33%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155321013504\" scope=\"col\">Field\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155321012416\" scope=\"col\">Description\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155321011328\" scope=\"col\">Required or optional\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">apiVersion\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tAPI version of the referent.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kind\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tKind of the referent.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">namespace\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tNamespace of the referent. If omitted, this defaults to the namespace of the object.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tOptional\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">name\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tName of the referent.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tDo not use if you configure \u003Ccode class=\"literal\">selector\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">selector\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tSelector of the referents.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tDo not use if you configure \u003Ccode class=\"literal\">name\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">selector.matchExpressions\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tA list of label selector requirements.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tOnly use one of either \u003Ccode class=\"literal\">matchExpressions\u003C/code> or \u003Ccode class=\"literal\">matchLabels\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">selector.matchExpressions.key\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tThe label key that the selector applies to.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tRequired if using \u003Ccode class=\"literal\">matchExpressions\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">selector.matchExpressions.operator\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tRepresents a key’s relationship to a set of values. Valid operators are \u003Ccode class=\"literal\">In\u003C/code>, \u003Ccode class=\"literal\">NotIn\u003C/code>, \u003Ccode class=\"literal\">Exists\u003C/code> and \u003Ccode class=\"literal\">DoesNotExist\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tRequired if using \u003Ccode class=\"literal\">matchExpressions\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">selector.matchExpressions.values\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tAn array of string values. If the \u003Ccode class=\"literal\">operator\u003C/code> parameter value is \u003Ccode class=\"literal\">In\u003C/code> or \u003Ccode class=\"literal\">NotIn\u003C/code>, the values array must be non-empty. If the \u003Ccode class=\"literal\">operator\u003C/code> parameter value is \u003Ccode class=\"literal\">Exists\u003C/code> or \u003Ccode class=\"literal\">DoesNotExist\u003C/code>, the values array must be empty. This array is replaced during a strategic merge patch.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tRequired if using \u003Ccode class=\"literal\">matchExpressions\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321013504\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">selector.matchLabels\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321012416\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tA map of key-value pairs. Each key-value pair in the \u003Ccode class=\"literal\">matchLabels\u003C/code> map is equivalent to an element of \u003Ccode class=\"literal\">matchExpressions\u003C/code>, where the key field is \u003Ccode class=\"literal\">matchLabels.<key>\u003C/code>, the \u003Ccode class=\"literal\">operator\u003C/code> is \u003Ccode class=\"literal\">In\u003C/code>, and the \u003Ccode class=\"literal\">values\u003C/code> array contains only \u003Ccode class=\"literal\">matchLabels.<value>\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155321011328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tOnly use one of either \u003Ccode class=\"literal\">matchExpressions\u003C/code> or \u003Ccode class=\"literal\">matchLabels\u003C/code>.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Subject parameter examples\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\tGiven the following YAML, the \u003Ccode class=\"literal\">Deployment\u003C/code> object named \u003Ccode class=\"literal\">mysubject\u003C/code> in the \u003Ccode class=\"literal\">default\u003C/code> namespace is selected:\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: SinkBinding\nmetadata:\n name: bind-heartbeat\nspec:\n subject:\n apiVersion: apps/v1\n kind: Deployment\n namespace: default\n name: mysubject\n ...\u003C/pre>\u003Cp>\n\t\t\t\t\t\t\tGiven the following YAML, any \u003Ccode class=\"literal\">Job\u003C/code> object with the label \u003Ccode class=\"literal\">working=example\u003C/code> in the \u003Ccode class=\"literal\">default\u003C/code> namespace is selected:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: SinkBinding\nmetadata:\n name: bind-heartbeat\nspec:\n subject:\n apiVersion: batch/v1\n kind: Job\n namespace: default\n selector:\n matchLabels:\n working: example\n ...\u003C/pre>\u003Cp>\n\t\t\t\t\t\t\tGiven the following YAML, any \u003Ccode class=\"literal\">Pod\u003C/code> object with the label \u003Ccode class=\"literal\">working=example\u003C/code> or \u003Ccode class=\"literal\">working=sample\u003C/code> in the \u003Ccode class=\"literal\">default\u003C/code> namespace is selected:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: SinkBinding\nmetadata:\n name: bind-heartbeat\nspec:\n subject:\n apiVersion: v1\n kind: Pod\n namespace: default\n selector:\n - matchExpression:\n key: working\n operator: In\n values:\n - example\n - sample\n ...\u003C/pre>\u003C/section>\u003Csection class=\"section\" id=\"serverless-sinkbinding-reference-cloudevent-overrides_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.10.1.4.2. CloudEvent overrides\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tA \u003Ccode class=\"literal\">ceOverrides\u003C/code> definition provides overrides that control the CloudEvent’s output format and modifications sent to the sink. You can configure multiple fields for the \u003Ccode class=\"literal\">ceOverrides\u003C/code> definition.\n\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tA \u003Ccode class=\"literal\">ceOverrides\u003C/code> definition supports the following fields:\n\t\t\t\t\t\t\u003C/p>\u003Crh-table>\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccolgroup>\u003Ccol style=\"width: 33%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320918176\" scope=\"col\">Field\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320917088\" scope=\"col\">Description\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320916000\" scope=\"col\">Required or optional\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320918176\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">extensions\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320917088\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tSpecifies which attributes are added or overridden on the outbound event. Each \u003Ccode class=\"literal\">extensions\u003C/code> key-value pair is set independently on the event as an attribute extension.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320916000\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tOptional\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tOnly valid \u003Ccode class=\"literal\">CloudEvent\u003C/code> attribute names are allowed as extensions. You cannot set the spec defined attributes from the extensions override configuration. For example, you can not modify the \u003Ccode class=\"literal\">type\u003C/code> attribute.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>CloudEvent Overrides example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: SinkBinding\nmetadata:\n name: bind-heartbeat\nspec:\n ...\n ceOverrides:\n extensions:\n extra: this is an extra attribute\n additional: 42\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tThis sets the \u003Ccode class=\"literal\">K_CE_OVERRIDES\u003C/code> environment variable on the \u003Ccode class=\"literal\">subject\u003C/code>:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">{ \"extensions\": { \"extra\": \"this is an extra attribute\", \"additional\": \"42\" } }\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-sinkbinding-reference-include-label_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.10.1.4.3. The include label\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tTo use a sink binding, you need to do assign the \u003Ccode class=\"literal\">bindings.knative.dev/include: \"true\"\u003C/code> label to either the resource or the namespace that the resource is included in. If the resource definition does not include the label, a cluster administrator can attach it to the namespace by running:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc label namespace <namespace> bindings.knative.dev/include=true\u003C/pre>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-custom-event-sources-containersource\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.10.2. Container source\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tContainer sources create a container image that generates events and sends events to a sink. You can use a container source to create a custom event source, by creating a container image and a \u003Ccode class=\"literal\">ContainerSource\u003C/code> object that uses your image URI.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-containersource-guidelines_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.2.1. Guidelines for creating a container image\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tTwo environment variables are injected by the container source controller: \u003Ccode class=\"literal\">K_SINK\u003C/code> and \u003Ccode class=\"literal\">K_CE_OVERRIDES\u003C/code>. These variables are resolved from the \u003Ccode class=\"literal\">sink\u003C/code> and \u003Ccode class=\"literal\">ceOverrides\u003C/code> spec, respectively. Events are sent to the sink URI specified in the \u003Ccode class=\"literal\">K_SINK\u003C/code> environment variable. The message must be sent as a \u003Ccode class=\"literal\">POST\u003C/code> using the \u003Ca class=\"link\" href=\"https://cloudevents.io/\">\u003Ccode class=\"literal\">CloudEvent\u003C/code>\u003C/a> HTTP format.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example container images\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tThe following is an example of a heartbeats container image:\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cpre class=\"programlisting language-go\">package main\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"strconv\"\n\t\"time\"\n\n\tduckv1 \"knative.dev/pkg/apis/duck/v1\"\n\n\tcloudevents \"github.com/cloudevents/sdk-go/v2\"\n\t\"github.com/kelseyhightower/envconfig\"\n)\n\ntype Heartbeat struct {\n\tSequence int `json:\"id\"`\n\tLabel string `json:\"label\"`\n}\n\nvar (\n\teventSource string\n\teventType string\n\tsink string\n\tlabel string\n\tperiodStr string\n)\n\nfunc init() {\n\tflag.StringVar(&eventSource, \"eventSource\", \"\", \"the event-source (CloudEvents)\")\n\tflag.StringVar(&eventType, \"eventType\", \"dev.knative.eventing.samples.heartbeat\", \"the event-type (CloudEvents)\")\n\tflag.StringVar(&sink, \"sink\", \"\", \"the host url to heartbeat to\")\n\tflag.StringVar(&label, \"label\", \"\", \"a special label\")\n\tflag.StringVar(&periodStr, \"period\", \"5\", \"the number of seconds between heartbeats\")\n}\n\ntype envConfig struct {\n\t// Sink URL where to send heartbeat cloud events\n\tSink string `envconfig:\"K_SINK\"`\n\n\t// CEOverrides are the CloudEvents overrides to be applied to the outbound event.\n\tCEOverrides string `envconfig:\"K_CE_OVERRIDES\"`\n\n\t// Name of this pod.\n\tName string `envconfig:\"POD_NAME\" required:\"true\"`\n\n\t// Namespace this pod exists in.\n\tNamespace string `envconfig:\"POD_NAMESPACE\" required:\"true\"`\n\n\t// Whether to run continuously or exit.\n\tOneShot bool `envconfig:\"ONE_SHOT\" default:\"false\"`\n}\n\nfunc main() {\n\tflag.Parse()\n\n\tvar env envConfig\n\tif err := envconfig.Process(\"\", &env); err != nil {\n\t\tlog.Printf(\"[ERROR] Failed to process env var: %s\", err)\n\t\tos.Exit(1)\n\t}\n\n\tif env.Sink != \"\" {\n\t\tsink = env.Sink\n\t}\n\n\tvar ceOverrides *duckv1.CloudEventOverrides\n\tif len(env.CEOverrides) > 0 {\n\t\toverrides := duckv1.CloudEventOverrides{}\n\t\terr := json.Unmarshal([]byte(env.CEOverrides), &overrides)\n\t\tif err != nil {\n\t\t\tlog.Printf(\"[ERROR] Unparseable CloudEvents overrides %s: %v\", env.CEOverrides, err)\n\t\t\tos.Exit(1)\n\t\t}\n\t\tceOverrides = &overrides\n\t}\n\n\tp, err := cloudevents.NewHTTP(cloudevents.WithTarget(sink))\n\tif err != nil {\n\t\tlog.Fatalf(\"failed to create http protocol: %s\", err.Error())\n\t}\n\n\tc, err := cloudevents.NewClient(p, cloudevents.WithUUIDs(), cloudevents.WithTimeNow())\n\tif err != nil {\n\t\tlog.Fatalf(\"failed to create client: %s\", err.Error())\n\t}\n\n\tvar period time.Duration\n\tif p, err := strconv.Atoi(periodStr); err != nil {\n\t\tperiod = time.Duration(5) * time.Second\n\t} else {\n\t\tperiod = time.Duration(p) * time.Second\n\t}\n\n\tif eventSource == \"\" {\n\t\teventSource = fmt.Sprintf(\"https://knative.dev/eventing-contrib/cmd/heartbeats/#%s/%s\", env.Namespace, env.Name)\n\t\tlog.Printf(\"Heartbeats Source: %s\", eventSource)\n\t}\n\n\tif len(label) > 0 && label[0] == '\"' {\n\t\tlabel, _ = strconv.Unquote(label)\n\t}\n\thb := &Heartbeat{\n\t\tSequence: 0,\n\t\tLabel: label,\n\t}\n\tticker := time.NewTicker(period)\n\tfor {\n\t\thb.Sequence++\n\n\t\tevent := cloudevents.NewEvent(\"1.0\")\n\t\tevent.SetType(eventType)\n\t\tevent.SetSource(eventSource)\n\t\tevent.SetExtension(\"the\", 42)\n\t\tevent.SetExtension(\"heart\", \"yes\")\n\t\tevent.SetExtension(\"beats\", true)\n\n\t\tif ceOverrides != nil && ceOverrides.Extensions != nil {\n\t\t\tfor n, v := range ceOverrides.Extensions {\n\t\t\t\tevent.SetExtension(n, v)\n\t\t\t}\n\t\t}\n\n\t\tif err := event.SetData(cloudevents.ApplicationJSON, hb); err != nil {\n\t\t\tlog.Printf(\"failed to set cloudevents data: %s\", err.Error())\n\t\t}\n\n\t\tlog.Printf(\"sending cloudevent to %s\", sink)\n\t\tif res := c.Send(context.Background(), event); !cloudevents.IsACK(res) {\n\t\t\tlog.Printf(\"failed to send cloudevent: %v\", res)\n\t\t}\n\n\t\tif env.OneShot {\n\t\t\treturn\n\t\t}\n\n\t\t// Wait for next tick\n\t\t<-ticker.C\n\t}\n}\u003C/pre>\u003Cp>\n\t\t\t\t\t\tThe following is an example of a container source that references the previous heartbeats container image:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: ContainerSource\nmetadata:\n name: test-heartbeats\nspec:\n template:\n spec:\n containers:\n # This corresponds to a heartbeats image URI that you have built and published\n - image: gcr.io/knative-releases/knative.dev/eventing/cmd/heartbeats\n name: heartbeats\n args:\n - --period=1\n env:\n - name: POD_NAME\n value: \"example-pod\"\n - name: POD_NAMESPACE\n value: \"event-test\"\n sink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: example-service\n...\u003C/pre>\u003C/section>\u003Csection class=\"section\" id=\"serverless-kn-containersource_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.2.2. Creating and managing container sources by using the Knative CLI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">kn source container\u003C/code> commands to create and manage container sources by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI. Using the Knative CLI to create event sources provides a more streamlined and intuitive user interface than modifying YAML files directly.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Create a container source\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source container create <container_source_name> --image <image_uri> --sink <sink>\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Delete a container source\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source container delete <container_source_name>\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Describe a container source\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source container describe <container_source_name>\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>List existing container sources\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source container list\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>List existing container sources in YAML format\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source container list -o yaml\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Update a container source\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tThis command updates the image URI for an existing container source:\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cpre class=\"programlisting language-terminal\">$ kn source container update <container_source_name> --image <image_uri>\u003C/pre>\u003C/section>\u003Csection class=\"section\" id=\"serverless-odc-create-containersource_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.2.3. Creating a container source by using the web console\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAfter Knative Eventing is installed on your cluster, you can create a container source by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create an event source.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have logged in to the OpenShift Container Platform web console.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>Event Source\u003C/strong>\u003C/span>. The \u003Cspan class=\"strong strong\">\u003Cstrong>Event Sources\u003C/strong>\u003C/span> page is displayed.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tSelect \u003Cspan class=\"strong strong\">\u003Cstrong>Container Source\u003C/strong>\u003C/span> and then click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span>. The \u003Cspan class=\"strong strong\">\u003Cstrong>Create Event Source\u003C/strong>\u003C/span> page is displayed.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tConfigure the \u003Cspan class=\"strong strong\">\u003Cstrong>Container Source\u003C/strong>\u003C/span> settings by using the \u003Cspan class=\"strong strong\">\u003Cstrong>Form view\u003C/strong>\u003C/span> or \u003Cspan class=\"strong strong\">\u003Cstrong>YAML view\u003C/strong>\u003C/span>:\n\t\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\tYou can switch between the \u003Cspan class=\"strong strong\">\u003Cstrong>Form view\u003C/strong>\u003C/span> and \u003Cspan class=\"strong strong\">\u003Cstrong>YAML view\u003C/strong>\u003C/span>. The data is persisted when switching between the views.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Image\u003C/strong>\u003C/span> field, enter the URI of the image that you want to run in the container created by the container source.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Name\u003C/strong>\u003C/span> field, enter the name of the image.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tOptional: In the \u003Cspan class=\"strong strong\">\u003Cstrong>Arguments\u003C/strong>\u003C/span> field, enter any arguments to be passed to the container.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tOptional: In the \u003Cspan class=\"strong strong\">\u003Cstrong>Environment variables\u003C/strong>\u003C/span> field, add any environment variables to set in the container.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Sink\u003C/strong>\u003C/span> section, add a sink where events from the container source are routed to. If you are using the \u003Cspan class=\"strong strong\">\u003Cstrong>Form\u003C/strong>\u003C/span> view, you can choose from the following options:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"i\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\t\t\tSelect \u003Cspan class=\"strong strong\">\u003Cstrong>Resource\u003C/strong>\u003C/span> to use a channel, broker, or service as a sink for the event source.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\t\t\tSelect \u003Cspan class=\"strong strong\">\u003Cstrong>URI\u003C/strong>\u003C/span> to specify where the events from the container source are routed to.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tAfter you have finished configuring the container source, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-containersource-reference_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.2.4. Container source reference\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can use a container as an event source, by creating a \u003Ccode class=\"literal\">ContainerSource\u003C/code> object. You can configure multiple parameters when creating a \u003Ccode class=\"literal\">ContainerSource\u003C/code> object.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\u003Ccode class=\"literal\">ContainerSource\u003C/code> objects support the following fields:\n\t\t\t\t\t\u003C/p>\u003Crh-table>\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccolgroup>\u003Ccol style=\"width: 33%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320807152\" scope=\"col\">Field\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320806064\" scope=\"col\">Description\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320804976\" scope=\"col\">Required or optional\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320807152\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">apiVersion\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320806064\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tSpecifies the API version, for example \u003Ccode class=\"literal\">sources.knative.dev/v1\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320804976\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320807152\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kind\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320806064\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tIdentifies this resource object as a \u003Ccode class=\"literal\">ContainerSource\u003C/code> object.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320804976\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320807152\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">metadata\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320806064\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tSpecifies metadata that uniquely identifies the \u003Ccode class=\"literal\">ContainerSource\u003C/code> object. For example, a \u003Ccode class=\"literal\">name\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320804976\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320807152\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">spec\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320806064\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tSpecifies the configuration information for this \u003Ccode class=\"literal\">ContainerSource\u003C/code> object.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320804976\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320807152\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">spec.sink\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320806064\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tA reference to an object that resolves to a URI to use as the sink.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320804976\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320807152\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">spec.template\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320806064\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tA \u003Ccode class=\"literal\">template\u003C/code> spec for the \u003Ccode class=\"literal\">ContainerSource\u003C/code> object.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320804976\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tRequired\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320807152\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">spec.ceOverrides\u003C/code>\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320806064\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tDefines overrides to control the output format and modifications to the event sent to the sink.\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320804976\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\tOptional\n\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Template parameter example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: ContainerSource\nmetadata:\n name: test-heartbeats\nspec:\n template:\n spec:\n containers:\n - image: quay.io/openshift-knative/heartbeats:latest\n name: heartbeats\n args:\n - --period=1\n env:\n - name: POD_NAME\n value: \"mypod\"\n - name: POD_NAMESPACE\n value: \"event-test\"\n ...\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Csection class=\"section\" id=\"serverless-containersource-reference-cloudevent-overrides_serverless-custom-event-sources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.10.2.4.1. CloudEvent overrides\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tA \u003Ccode class=\"literal\">ceOverrides\u003C/code> definition provides overrides that control the CloudEvent’s output format and modifications sent to the sink. You can configure multiple fields for the \u003Ccode class=\"literal\">ceOverrides\u003C/code> definition.\n\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tA \u003Ccode class=\"literal\">ceOverrides\u003C/code> definition supports the following fields:\n\t\t\t\t\t\t\u003C/p>\u003Crh-table>\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccolgroup>\u003Ccol style=\"width: 33%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320746880\" scope=\"col\">Field\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320745792\" scope=\"col\">Description\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140155320744704\" scope=\"col\">Required or optional\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320746880\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">extensions\u003C/code>\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320745792\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tSpecifies which attributes are added or overridden on the outbound event. Each \u003Ccode class=\"literal\">extensions\u003C/code> key-value pair is set independently on the event as an attribute extension.\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140155320744704\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\t\tOptional\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tOnly valid \u003Ccode class=\"literal\">CloudEvent\u003C/code> attribute names are allowed as extensions. You cannot set the spec defined attributes from the extensions override configuration. For example, you can not modify the \u003Ccode class=\"literal\">type\u003C/code> attribute.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>CloudEvent Overrides example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1\nkind: ContainerSource\nmetadata:\n name: test-heartbeats\nspec:\n ...\n ceOverrides:\n extensions:\n extra: this is an extra attribute\n additional: 42\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tThis sets the \u003Ccode class=\"literal\">K_CE_OVERRIDES\u003C/code> environment variable on the \u003Ccode class=\"literal\">subject\u003C/code>:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">{ \"extensions\": { \"extra\": \"this is an extra attribute\", \"additional\": \"42\" } }\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/section>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-creating-channels\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.11. Creating channels\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tChannels are custom resources that define a single event-forwarding and persistence layer. After events have been sent to a channel from an event source or producer, these events can be sent to multiple Knative services or other sinks by using a subscription.\n\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/9ce9adab99987edf7ad6a566535d43ad/serverless-event-channel-workflow.png\" alt=\"Channel workflow overview\"/>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tYou can create channels by instantiating a supported \u003Ccode class=\"literal\">Channel\u003C/code> object, and configure re-delivery attempts by modifying the \u003Ccode class=\"literal\">delivery\u003C/code> spec in a \u003Ccode class=\"literal\">Subscription\u003C/code> object.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-create-channel-odc_serverless-creating-channels\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.11.1. Creating a channel by using the web console\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create a channel. After Knative Eventing is installed on your cluster, you can create a channel by using the web console.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have logged in to the OpenShift Container Platform web console.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> \u003Cpf-icon aria-label=\"then\" icon=\"greater-than\" size=\"sm\">\u003C/pf-icon> \u003Cspan class=\"strong strong\">\u003Cstrong>Channel\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tSelect the type of \u003Ccode class=\"literal\">Channel\u003C/code> object that you want to create in the \u003Cspan class=\"strong strong\">\u003Cstrong>Type\u003C/strong>\u003C/span> list.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tConfirm that the channel now exists by navigating to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/371291d0883f2167382146550d85aedf/verify-channel-odc.png\" alt=\"View the channel in the Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-create-channel-kn_serverless-creating-channels\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.11.2. Creating a channel by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to create channels provides a more streamlined and intuitive user interface than modifying YAML files directly. You can use the \u003Ccode class=\"literal\">kn channel create\u003C/code> command to create a channel.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a channel:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn channel create <channel_name> --type <channel_type>\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe channel type is optional, but where specified, must be given in the format \u003Ccode class=\"literal\">Group:Version:Kind\u003C/code>. For example, you can create an \u003Ccode class=\"literal\">InMemoryChannel\u003C/code> object:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn channel create mychannel --type messaging.knative.dev:v1:InMemoryChannel\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Channel 'mychannel' created in namespace 'default'.\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo confirm that the channel now exists, list the existing channels and inspect the output:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn channel list\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">kn channel list\nNAME TYPE URL AGE READY REASON\nmychannel InMemoryChannel http://mychannel-kn-channel.default.svc.cluster.local 93s True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting a channel\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete a channel:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn channel delete <channel_name>\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-create-default-channel-yaml_serverless-creating-channels\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.11.3. Creating a default implementation channel by using YAML\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe channels declaratively and in a reproducible manner. To create a serverless channel by using YAML, you must create a YAML file that defines a \u003Ccode class=\"literal\">Channel\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">Channel\u003C/code> object as a YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: messaging.knative.dev/v1\nkind: Channel\nmetadata:\n name: example-channel\n namespace: default\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-create-kafka-channel-yaml_serverless-creating-channels\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.11.4. Creating a Kafka channel by using YAML\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe channels declaratively and in a reproducible manner. You can create a Knative Eventing channel that is backed by Kafka topics by creating a Kafka channel. To create a Kafka channel by using YAML, you must create a YAML file that defines a \u003Ccode class=\"literal\">KafkaChannel\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">KafkaChannel\u003C/code> object as a YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: messaging.knative.dev/v1beta1\nkind: KafkaChannel\nmetadata:\n name: example-channel\n namespace: default\nspec:\n numPartitions: 3\n replicationFactor: 1\u003C/pre>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tOnly the \u003Ccode class=\"literal\">v1beta1\u003C/code> version of the API for \u003Ccode class=\"literal\">KafkaChannel\u003C/code> objects on OpenShift Serverless is supported. Do not use the \u003Ccode class=\"literal\">v1alpha1\u003C/code> version of this API, as this version is now deprecated.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">KafkaChannel\u003C/code> YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"next-steps_serverless-creating-channels\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.11.5. Next steps\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tAfter you have created a channel, \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-subs\">create a subscription\u003C/a> that allows event sinks to subscribe to channels and receive events.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tConfigure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. See \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-configuring-event-delivery-examples_serverless-event-delivery\">Examples of configuring event delivery parameters\u003C/a>.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-subs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.12. Creating and managing subscriptions\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tAfter you have created a channel and an event sink, you can create a subscription to enable event delivery. Subscriptions are created by configuring a \u003Ccode class=\"literal\">Subscription\u003C/code> object, which specifies the channel and the sink (also known as a \u003Cspan class=\"emphasis\">\u003Cem>subscriber\u003C/em>\u003C/span>) to deliver events to.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-creating-subscriptions-odc_serverless-subs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.12.1. Creating a subscription by using the web console\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter you have created a channel and an event sink, you can create a subscription to enable event delivery. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create a subscription.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have logged in to the web console.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created an event sink, such as a Knative service, and a channel.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a subscription using one of the following methods:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tHover over the channel that you want to create a subscription for, and drag the arrow. The \u003Cspan class=\"strong strong\">\u003Cstrong>Add Subscription\u003C/strong>\u003C/span> option is displayed.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/4dacac4aff75bedb7c0aaf943976bd1c/create-sub-ODC.png\" alt=\"Create a subscription for the channel\"/>\u003C/div>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"i\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\t\tSelect your sink in the \u003Cspan class=\"strong strong\">\u003Cstrong>Subscriber\u003C/strong>\u003C/span> list.\n\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Add\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tIf the service is available in the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view under the same namespace or project as the channel, click on the channel that you want to create a subscription for, and drag the arrow directly to a service to immediately create a subscription from the channel to that service.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAfter the subscription has been created, you can see it represented as a line that connects the channel to the service in the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/7af6e5a6f9641a70a24b3079442666a8/verify-subscription-odc.png\" alt=\"Subscription in the Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-creating-subscriptions-yaml_serverless-subs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.12.2. Creating a subscription by using YAML\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter you have created a channel and an event sink, you can create a subscription to enable event delivery. Creating Knative resources by using YAML files uses a declarative API, which enables you to describe subscriptions declaratively and in a reproducible manner. To create a subscription by using YAML, you must create a YAML file that defines a \u003Ccode class=\"literal\">Subscription\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">Subscription\u003C/code> object:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"circle\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCreate a YAML file and copy the following sample code into it:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: messaging.knative.dev/v1beta1\nkind: Subscription\nmetadata:\n name: my-subscription \u003Cspan id=\"CO22-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n namespace: default\nspec:\n channel: \u003Cspan id=\"CO22-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n apiVersion: messaging.knative.dev/v1beta1\n kind: Channel\n name: example-channel\n delivery: \u003Cspan id=\"CO22-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n deadLetterSink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: error-handler\n subscriber: \u003Cspan id=\"CO22-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: event-display\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO22-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\t\tName of the subscription.\n\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO22-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\t\tConfiguration settings for the channel that the subscription connects to.\n\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO22-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\t\tConfiguration settings for event delivery. This tells the subscription what happens to events that cannot be delivered to the subscriber. When this is configured, events that failed to be consumed are sent to the \u003Ccode class=\"literal\">deadLetterSink\u003C/code>. The event is dropped, no re-delivery of the event is attempted, and an error is logged in the system. The \u003Ccode class=\"literal\">deadLetterSink\u003C/code> value must be a \u003Ca class=\"link\" href=\"https://pkg.go.dev/knative.dev/pkg/apis/duck/v1?tab=doc#Destination\">Destination\u003C/a>.\n\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO22-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\t\tConfiguration settings for the subscriber. This is the event sink that events are delivered to from the channel.\n\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tApply the YAML file:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-creating-subscriptions-kn_serverless-subs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.12.3. Creating a subscription by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter you have created a channel and an event sink, you can create a subscription to enable event delivery. Using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to create subscriptions provides a more streamlined and intuitive user interface than modifying YAML files directly. You can use the \u003Ccode class=\"literal\">kn subscription create\u003C/code> command with the appropriate flags to create a subscription.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a subscription to connect a sink to a channel:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn subscription create <subscription_name> \\\n --channel <group:version:kind>:<channel_name> \\ \u003Cspan id=\"CO23-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n --sink <sink_prefix>:<sink_name> \\ \u003Cspan id=\"CO23-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n --sink-dead-letter <sink_prefix>:<sink_name> \u003Cspan id=\"CO23-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO23-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--channel\u003C/code> specifies the source for cloud events that should be processed. You must provide the channel name. If you are not using the default \u003Ccode class=\"literal\">InMemoryChannel\u003C/code> channel that is backed by the \u003Ccode class=\"literal\">Channel\u003C/code> custom resource, you must prefix the channel name with the \u003Ccode class=\"literal\"><group:version:kind>\u003C/code> for the specified channel type. For example, this will be \u003Ccode class=\"literal\">messaging.knative.dev:v1beta1:KafkaChannel\u003C/code> for a Kafka backed channel.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO23-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--sink\u003C/code> specifies the target destination to which the event should be delivered. By default, the \u003Ccode class=\"literal\"><sink_name>\u003C/code> is interpreted as a Knative service of this name, in the same namespace as the subscription. You can specify the type of the sink by using one of the following prefixes:\n\t\t\t\t\t\t\t\t\u003C/div>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">ksvc\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\t\t\tA Knative service.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">channel\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\t\t\tA channel that should be used as destination. Only default channel types can be referenced here.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">broker\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\t\t\tAn Eventing broker.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/dd>\u003C/dl>\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO23-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tOptional: \u003Ccode class=\"literal\">--sink-dead-letter\u003C/code> is an optional flag that can be used to specify a sink which events should be sent to in cases where events fail to be delivered. For more information, see the OpenShift Serverless \u003Cspan class=\"emphasis\">\u003Cem>Event delivery\u003C/em>\u003C/span> documentation.\n\t\t\t\t\t\t\t\t\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn subscription create mysubscription --channel mychannel --sink ksvc:event-display\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Subscription 'mysubscription' created in namespace 'default'.\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo confirm that the channel is connected to the event sink, or \u003Cspan class=\"emphasis\">\u003Cem>subscriber\u003C/em>\u003C/span>, by a subscription, list the existing subscriptions and inspect the output:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn subscription list\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON\nmysubscription Channel:mychannel ksvc:event-display True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting a subscription\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete a subscription:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn subscription delete <subscription_name>\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-describe-subs-kn_serverless-subs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.12.4. Describing subscriptions by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">kn subscription describe\u003C/code> command to print information about a subscription in the terminal by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI. Using the Knative CLI to describe subscriptions provides a more streamlined and intuitive user interface than viewing YAML files directly.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a subscription in your cluster.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDescribe a subscription:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn subscription describe <subscription_name>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Name: my-subscription\nNamespace: default\nAnnotations: messaging.knative.dev/creator=openshift-user, messaging.knative.dev/lastModifier=min ...\nAge: 43s\nChannel: Channel:my-channel (messaging.knative.dev/v1)\nSubscriber:\n URI: http://edisplay.default.example.com\nReply:\n Name: default\n Resource: Broker (eventing.knative.dev/v1)\nDeadLetterSink:\n Name: my-sink\n Resource: Service (serving.knative.dev/v1)\n\nConditions:\n OK TYPE AGE REASON\n ++ Ready 43s\n ++ AddedToChannel 43s\n ++ ChannelReady 43s\n ++ ReferencesResolved 43s\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-list-subs-kn_serverless-subs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.12.5. Listing subscriptions by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">kn subscription list\u003C/code> command to list existing subscriptions on your cluster by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI. Using the Knative CLI to list subscriptions provides a streamlined and intuitive user interface.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tList subscriptions on your cluster:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn subscription list\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON\nmysubscription Channel:mychannel ksvc:event-display True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-update-subscriptions-kn_serverless-subs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.12.6. Updating subscriptions by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">kn subscription update\u003C/code> command as well as the appropriate flags to update a subscription from the terminal by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI. Using the Knative CLI to update subscriptions provides a more streamlined and intuitive user interface than updating YAML files directly.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a subscription.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tUpdate a subscription:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn subscription update <subscription_name> \\\n --sink <sink_prefix>:<sink_name> \\ \u003Cspan id=\"CO24-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n --sink-dead-letter <sink_prefix>:<sink_name> \u003Cspan id=\"CO24-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO24-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">--sink\u003C/code> specifies the updated target destination to which the event should be delivered. You can specify the type of the sink by using one of the following prefixes:\n\t\t\t\t\t\t\t\t\u003C/div>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">ksvc\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\t\t\tA Knative service.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">channel\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\t\t\tA channel that should be used as destination. Only default channel types can be referenced here.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">broker\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\t\t\tAn Eventing broker.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/dd>\u003C/dl>\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO24-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tOptional: \u003Ccode class=\"literal\">--sink-dead-letter\u003C/code> is an optional flag that can be used to specify a sink which events should be sent to in cases where events fail to be delivered. For more information, see the OpenShift Serverless \u003Cspan class=\"emphasis\">\u003Cem>Event delivery\u003C/em>\u003C/span> documentation.\n\t\t\t\t\t\t\t\t\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn subscription update mysubscription --sink ksvc:event-display\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"next-steps_serverless-subs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.12.7. Next steps\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tConfigure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. See \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-configuring-event-delivery-examples_serverless-event-delivery\">Examples of configuring event delivery parameters\u003C/a>.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.13. Creating brokers\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tKnative provides a default, channel-based broker implementation. This channel-based broker can be used for development and testing purposes, but does not provide adequate event delivery guarantees for production environments.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tIf a cluster administrator has configured your OpenShift Serverless deployment to use Kafka as the default broker type, creating a broker by using the default settings creates a Kafka-based broker.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tIf your OpenShift Serverless deployment is not configured to use Kafka broker as the default broker type, the channel-based broker is created when you use the default settings in the following procedures.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-create-broker-kn_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.13.1. Creating a broker by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tBrokers can be used in combination with triggers to deliver events from an event source to an event sink. Using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to create brokers provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the \u003Ccode class=\"literal\">kn broker create\u003C/code> command to create a broker.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a broker:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn broker create <broker_name>\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tUse the \u003Ccode class=\"literal\">kn\u003C/code> command to list all existing brokers:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn broker list\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME URL AGE CONDITIONS READY REASON\ndefault http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: If you are using the OpenShift Container Platform web console, you can navigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view in the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, and observe that the broker exists:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/6f31d83abe7f0634c474aac99db75256/odc-view-broker.png\" alt=\"View the broker in the web console Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-creating-broker-annotation_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.13.2. Creating a broker by annotating a trigger\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tBrokers can be used in combination with triggers to deliver events from an event source to an event sink. You can create a broker by adding the \u003Ccode class=\"literal\">eventing.knative.dev/injection: enabled\u003C/code> annotation to a \u003Ccode class=\"literal\">Trigger\u003C/code> object.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tIf you create a broker by using the \u003Ccode class=\"literal\">eventing.knative.dev/injection: enabled\u003C/code> annotation, you cannot delete this broker without cluster administrator permissions. If you delete the broker without having a cluster administrator remove this annotation first, the broker is created again after deletion.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">Trigger\u003C/code> object as a YAML file that has the \u003Ccode class=\"literal\">eventing.knative.dev/injection: enabled\u003C/code> annotation:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Trigger\nmetadata:\n annotations:\n eventing.knative.dev/injection: enabled\n name: <trigger_name>\nspec:\n broker: default\n subscriber: \u003Cspan id=\"CO25-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: <service_name>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO25-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tSpecify details about the event sink, or \u003Cspan class=\"emphasis\">\u003Cem>subscriber\u003C/em>\u003C/span>, that the trigger sends events to.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">Trigger\u003C/code> YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tYou can verify that the broker has been created successfully by using the \u003Ccode class=\"literal\">oc\u003C/code> CLI, or by observing it in the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view in the web console.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tEnter the following \u003Ccode class=\"literal\">oc\u003C/code> command to get the broker:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc -n <namespace> get broker default\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME READY REASON URL AGE\ndefault True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: If you are using the OpenShift Container Platform web console, you can navigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view in the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, and observe that the broker exists:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/6f31d83abe7f0634c474aac99db75256/odc-view-broker.png\" alt=\"View the broker in the web console Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-creating-broker-labeling_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.13.3. Creating a broker by labeling a namespace\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tBrokers can be used in combination with triggers to deliver events from an event source to an event sink. You can create the \u003Ccode class=\"literal\">default\u003C/code> broker automatically by labelling a namespace that you own or have write permissions for.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tBrokers created using this method are not removed if you remove the label. You must manually delete them.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tLabel a namespace with \u003Ccode class=\"literal\">eventing.knative.dev/injection=enabled\u003C/code>:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc label namespace <namespace> eventing.knative.dev/injection=enabled\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tYou can verify that the broker has been created successfully by using the \u003Ccode class=\"literal\">oc\u003C/code> CLI, or by observing it in the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view in the web console.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tUse the \u003Ccode class=\"literal\">oc\u003C/code> command to get the broker:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc -n <namespace> get broker <broker_name>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ oc -n default get broker default\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME READY REASON URL AGE\ndefault True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: If you are using the OpenShift Container Platform web console, you can navigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> view in the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, and observe that the broker exists:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/6f31d83abe7f0634c474aac99db75256/odc-view-broker.png\" alt=\"View the broker in the web console Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-deleting-broker-injection_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.13.4. Deleting a broker that was created by injection\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIf you create a broker by injection and later want to delete it, you must delete it manually. Brokers created by using a namespace label or trigger annotation are not deleted permanently if you remove the label or annotation.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tRemove the \u003Ccode class=\"literal\">eventing.knative.dev/injection=enabled\u003C/code> label from the namespace:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc label namespace <namespace> eventing.knative.dev/injection-\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tRemoving the annotation prevents Knative from recreating the broker after you delete it.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete the broker from the selected namespace:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc -n <namespace> delete broker <broker_name>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tUse the \u003Ccode class=\"literal\">oc\u003C/code> command to get the broker:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc -n <namespace> get broker <broker_name>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ oc -n default get broker default\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">No resources found.\nError from server (NotFound): brokers.eventing.knative.dev \"default\" not found\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-using-brokers-kafka_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.13.5. Creating a Kafka broker when it is not configured as the default broker type\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIf your OpenShift Serverless deployment is not configured to use Kafka broker as the default broker type, you can use one of the following procedures to create a Kafka-based broker.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-kafka-broker_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.13.5.1. Creating a Kafka broker by using YAML\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe applications declaratively and in a reproducible manner. To create a Kafka broker by using YAML, you must create a YAML file that defines a \u003Ccode class=\"literal\">Broker\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have installed the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a Kafka-based broker as a YAML file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Broker\nmetadata:\n annotations:\n eventing.knative.dev/broker.class: Kafka \u003Cspan id=\"CO26-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n name: example-kafka-broker\nspec:\n config:\n apiVersion: v1\n kind: ConfigMap\n name: kafka-broker-config \u003Cspan id=\"CO26-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n namespace: knative-eventing\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO26-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe broker class. If not specified, brokers use the default class as configured by cluster administrators. To use the Kafka broker, this value must be \u003Ccode class=\"literal\">Kafka\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO26-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe default config map for Knative Kafka brokers. This config map is created when the Kafka broker functionality is enabled on the cluster by a cluster administrator.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tApply the Kafka-based broker YAML file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-kafka-broker-with-kafka-topic_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.13.5.2. Creating a Kafka broker that uses an externally managed Kafka topic\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tIf you want to use a Kafka broker without allowing it to create its own internal topic, you can use an externally managed Kafka topic instead. To do this, you must create a Kafka \u003Ccode class=\"literal\">Broker\u003C/code> object that uses the \u003Ccode class=\"literal\">kafka.eventing.knative.dev/external.topic\u003C/code> annotation.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have access to a Kafka instance such as \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_amq/7.6/html/amq_streams_on_openshift_overview/kafka-concepts_str#kafka-concepts-key_str\">Red Hat AMQ Streams\u003C/a>, and have created a Kafka topic.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have installed the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a Kafka-based broker as a YAML file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Broker\nmetadata:\n annotations:\n eventing.knative.dev/broker.class: Kafka \u003Cspan id=\"CO27-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n kafka.eventing.knative.dev/external.topic: <topic_name> \u003Cspan id=\"CO27-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n...\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO27-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe broker class. If not specified, brokers use the default class as configured by cluster administrators. To use the Kafka broker, this value must be \u003Ccode class=\"literal\">Kafka\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO27-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe name of the Kafka topic that you want to use.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tApply the Kafka-based broker YAML file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-using-brokers-managing-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.13.6. Managing brokers\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI provides commands that can be used to describe and list existing brokers.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-list-broker-kn_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.13.6.1. Listing existing brokers by using the Knative CLI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to list brokers provides a streamlined and intuitive user interface. You can use the \u003Ccode class=\"literal\">kn broker list\u003C/code> command to list existing brokers in your cluster by using the Knative CLI.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tList all existing brokers:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn broker list\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME URL AGE CONDITIONS READY REASON\ndefault http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-describe-broker-kn_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.13.6.2. Describing an existing broker by using the Knative CLI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to describe brokers provides a streamlined and intuitive user interface. You can use the \u003Ccode class=\"literal\">kn broker describe\u003C/code> command to print information about existing brokers in your cluster by using the Knative CLI.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tDescribe an existing broker:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn broker describe <broker_name>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command using default broker\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn broker describe default\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Name: default\nNamespace: default\nAnnotations: eventing.knative.dev/broker.class=MTChannelBasedBroker, eventing.knative.dev/creato ...\nAge: 22s\n\nAddress:\n URL: http://broker-ingress.knative-eventing.svc.cluster.local/default/default\n\nConditions:\n OK TYPE AGE REASON\n ++ Ready 22s\n ++ Addressable 22s\n ++ FilterReady 22s\n ++ IngressReady 22s\n ++ TriggerChannelReady 22s\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"next-steps_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.13.7. Next steps\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tConfigure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. See \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-configuring-event-delivery-examples_serverless-event-delivery\">Examples of configuring event delivery parameters\u003C/a>.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section _additional-resources\" id=\"additional-resources_serverless-using-brokers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.13.8. Additional resources\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-global-config-broker-class-default_serverless-configuration\">Configuring the default broker class\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-triggers\">Triggers\u003C/a>\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#knative-event-sources\">Event sources\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-event-delivery\">Event delivery\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-kafka-developer-broker\">Kafka broker\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-kafka-admin\">Configuring Knative Kafka\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.14. Triggers\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tBrokers can be used in combination with triggers to deliver events from an event source to an event sink. Events are sent from an event source to a broker as an HTTP \u003Ccode class=\"literal\">POST\u003C/code> request. After events have entered the broker, they can be filtered by \u003Ca class=\"link\" href=\"https://github.com/cloudevents/spec/blob/v1.0/spec.md#context-attributes\">CloudEvent attributes\u003C/a> using triggers, and sent as an HTTP \u003Ccode class=\"literal\">POST\u003C/code> request to an event sink.\n\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/ea40932cc228a1b20e17c5252a49a2f2/serverless-event-broker-workflow.png\" alt=\"Broker event delivery overview\"/>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tIf you are using a Kafka broker, you can configure the delivery order of events from triggers to event sinks. See \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#trigger-event-delivery-config_serverless-triggers\">Configuring event delivery ordering for triggers\u003C/a>.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-create-trigger-odc_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.1. Creating a trigger by using the web console\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create a trigger. After Knative Eventing is installed on your cluster and you have created a broker, you can create a trigger by using the web console.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Serving, and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have logged in to the web console.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a broker and a Knative service or other event sink to connect to the trigger.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tHover over the broker that you want to create a trigger for, and drag the arrow. The \u003Cspan class=\"strong strong\">\u003Cstrong>Add Trigger\u003C/strong>\u003C/span> option is displayed.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Add Trigger\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tSelect your sink in the \u003Cspan class=\"strong strong\">\u003Cstrong>Subscriber\u003C/strong>\u003C/span> list.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Add\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tAfter the subscription has been created, you can view it in the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page, where it is represented as a line that connects the broker to the event sink.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Deleting a trigger\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClick on the trigger that you want to delete.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Actions\u003C/strong>\u003C/span> context menu, select \u003Cspan class=\"strong strong\">\u003Cstrong>Delete Trigger\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-create-kn-trigger_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.2. Creating a trigger by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to create triggers provides a more streamlined and intuitive user interface over modifying YAML files directly. You can use the \u003Ccode class=\"literal\">kn trigger create\u003C/code> command to create a trigger.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a trigger:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAlternatively, you can create a trigger and simultaneously create the \u003Ccode class=\"literal\">default\u003C/code> broker using broker injection:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tBy default, triggers forward all events sent to a broker to sinks that are subscribed to that broker. Using the \u003Ccode class=\"literal\">--filter\u003C/code> attribute for triggers allows you to filter events from a broker, so that subscribers will only receive a subset of events based on your defined criteria.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"kn-trigger-list_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.3. Listing triggers by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to list triggers provides a streamlined and intuitive user interface. You can use the \u003Ccode class=\"literal\">kn trigger list\u003C/code> command to list existing triggers in your cluster.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tPrint a list of available triggers:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger list\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME BROKER SINK AGE CONDITIONS READY REASON\nemail default ksvc:edisplay 4s 5 OK / 5 True\nping default ksvc:edisplay 32s 5 OK / 5 True\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: Print a list of triggers in JSON format:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger list -o json\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"kn-trigger-describe_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.4. Describing a trigger by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to describe triggers provides a streamlined and intuitive user interface. You can use the \u003Ccode class=\"literal\">kn trigger describe\u003C/code> command to print information about existing triggers in your cluster by using the Knative CLI.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a trigger.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tEnter the command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger describe <trigger_name>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Name: ping\nNamespace: default\nLabels: eventing.knative.dev/broker=default\nAnnotations: eventing.knative.dev/creator=kube:admin, eventing.knative.dev/lastModifier=kube:admin\nAge: 2m\nBroker: default\nFilter:\n type: dev.knative.event\n\nSink:\n Name: edisplay\n Namespace: default\n Resource: Service (serving.knative.dev/v1)\n\nConditions:\n OK TYPE AGE REASON\n ++ Ready 2m\n ++ BrokerReady 2m\n ++ DependencyReady 2m\n ++ Subscribed 2m\n ++ SubscriberResolved 2m\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"kn-trigger-filtering_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.5. Filtering events with triggers by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to filter events by using triggers provides a streamlined and intuitive user interface. You can use the \u003Ccode class=\"literal\">kn trigger create\u003C/code> command, along with the appropriate flags, to filter events by using triggers.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIn the following trigger example, only events with the attribute \u003Ccode class=\"literal\">type: dev.knative.samples.helloworld\u003C/code> are sent to the event sink:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>\u003C/pre>\u003Cp>\n\t\t\t\t\tYou can also filter events by using multiple attributes. The following example shows how to filter events using the type, source, and extension attributes:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \\\n--filter type=dev.knative.samples.helloworld \\\n--filter source=dev.knative.samples/helloworldsource \\\n--filter myextension=my-extension-value\u003C/pre>\u003C/section>\u003Csection class=\"section\" id=\"kn-trigger-update_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.6. Updating a trigger by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to update triggers provides a streamlined and intuitive user interface. You can use the \u003Ccode class=\"literal\">kn trigger update\u003C/code> command with certain flags to update attributes for a trigger.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tUpdate a trigger:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]\u003C/pre>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"circle\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tYou can update a trigger to filter exact event attributes that match incoming events. For example, using the \u003Ccode class=\"literal\">type\u003C/code> attribute:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger update <trigger_name> --filter type=knative.dev.event\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tYou can remove a filter attribute from a trigger. For example, you can remove the filter attribute with key \u003Ccode class=\"literal\">type\u003C/code>:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger update <trigger_name> --filter type-\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">--sink\u003C/code> parameter to change the event sink of a trigger:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger update <trigger_name> --sink ksvc:my-event-sink\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"delete-kn-trigger_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.7. Deleting a trigger by using the Knative CLI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI to delete a trigger provides a streamlined and intuitive user interface. You can use the \u003Ccode class=\"literal\">kn trigger delete\u003C/code> command to delete a trigger.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator and Knative Eventing are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDelete a trigger:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger delete <trigger_name>\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tList existing triggers:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn trigger list\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the trigger no longer exists:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">No triggers found.\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"trigger-event-delivery-config_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.8. Configuring event delivery ordering for triggers\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIf you are using a Kafka broker, you can configure the delivery order of events from triggers to event sinks.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and Knative Kafka are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tKafka broker is enabled for use on your cluster, and you have created a Kafka broker.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the OpenShift (\u003Ccode class=\"literal\">oc\u003C/code>) CLI.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate or modify a \u003Ccode class=\"literal\">Trigger\u003C/code> object and set the \u003Ccode class=\"literal\">kafka.eventing.knative.dev/delivery.order\u003C/code> annotation:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1\nkind: Trigger\nmetadata:\n name: <trigger_name>\n annotations:\n kafka.eventing.knative.dev/delivery.order: ordered\n...\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe supported consumer delivery guarantees are:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">unordered\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\tAn unordered consumer is a non-blocking consumer that delivers messages unordered, while preserving proper offset management.\n\t\t\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">ordered\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tAn ordered consumer is a per-partition blocking consumer that waits for a successful response from the CloudEvent subscriber before it delivers the next message of the partition.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tThe default ordering guarantee is \u003Ccode class=\"literal\">unordered\u003C/code>.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">Trigger\u003C/code> object:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"next-steps_serverless-triggers\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.14.9. Next steps\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tConfigure event delivery parameters that are applied in cases where an event fails to be delivered to an event sink. See \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-configuring-event-delivery-examples_serverless-event-delivery\">Examples of configuring event delivery parameters\u003C/a>.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">5.15. Using Knative Kafka\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tKnative Kafka provides integration options for you to use supported versions of the Apache Kafka message streaming platform with OpenShift Serverless. Kafka provides options for event source, channel, broker, and event sink capabilities.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tKnative Kafka functionality is available in an OpenShift Serverless installation \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-install-kafka-odc_serverless-kafka-admin\">if a cluster administrator has installed the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource\u003C/a>.\n\t\t\t\u003C/p>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tKnative Kafka is not currently supported for IBM Z and IBM Power Systems.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\tKnative Kafka provides additional options, such as:\n\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\tKafka source\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tKafka channel\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tKafka broker\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tKafka sink\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"serverless-kafka-delivery-retries_serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.15.1. Kafka event delivery and retries\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsing Kafka components in an event-driven architecture provides \"at least once\" event delivery. This means that operations are retried until a return code value is received. This makes applications more resilient to lost events; however, it might result in duplicate events being sent.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFor the Kafka event source, there is a fixed number of retries for event delivery by default. For Kafka channels, retries are only performed if they are configured in the Kafka channel \u003Ccode class=\"literal\">Delivery\u003C/code> spec.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tSee the \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-event-delivery\">Event delivery\u003C/a> documentation for more information about delivery guarantees.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"serverless-kafka-developer-source\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.15.2. Kafka source\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can create a Kafka source that reads events from an Apache Kafka cluster and passes these events to a sink. You can create a Kafka source by using the OpenShift Container Platform web console, the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI, or by creating a \u003Ccode class=\"literal\">KafkaSource\u003C/code> object directly as a YAML file and using the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>) to apply it.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-kafka-source-odc_serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.15.2.1. Creating a Kafka event source by using the web console\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAfter Knative Kafka is installed on your cluster, you can create a Kafka source by using the web console. Using the OpenShift Container Platform web console provides a streamlined and intuitive user interface to create a Kafka source.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource are installed on your cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have logged in to the web console.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have access to a Red Hat AMQ Streams (Kafka) cluster that produces the Kafka messages you want to import.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to the \u003Cspan class=\"strong strong\">\u003Cstrong>+Add\u003C/strong>\u003C/span> page and select \u003Cspan class=\"strong strong\">\u003Cstrong>Event Source\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Event Sources\u003C/strong>\u003C/span> page, select \u003Cspan class=\"strong strong\">\u003Cstrong>Kafka Source\u003C/strong>\u003C/span> in the \u003Cspan class=\"strong strong\">\u003Cstrong>Type\u003C/strong>\u003C/span> section.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tConfigure the \u003Cspan class=\"strong strong\">\u003Cstrong>Kafka Source\u003C/strong>\u003C/span> settings:\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tAdd a comma-separated list of \u003Cspan class=\"strong strong\">\u003Cstrong>Bootstrap Servers\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tAdd a comma-separated list of \u003Cspan class=\"strong strong\">\u003Cstrong>Topics\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tAdd a \u003Cspan class=\"strong strong\">\u003Cstrong>Consumer Group\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tSelect the \u003Cspan class=\"strong strong\">\u003Cstrong>Service Account Name\u003C/strong>\u003C/span> for the service account that you created.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tSelect the \u003Cspan class=\"strong strong\">\u003Cstrong>Sink\u003C/strong>\u003C/span> for the event source. A \u003Cspan class=\"strong strong\">\u003Cstrong>Sink\u003C/strong>\u003C/span> can be either a \u003Cspan class=\"strong strong\">\u003Cstrong>Resource\u003C/strong>\u003C/span>, such as a channel, broker, or service, or a \u003Cspan class=\"strong strong\">\u003Cstrong>URI\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tEnter a \u003Cspan class=\"strong strong\">\u003Cstrong>Name\u003C/strong>\u003C/span> for the Kafka event source.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tYou can verify that the Kafka event source was created and is connected to the sink by viewing the \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span> page.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tIn the \u003Cspan class=\"strong strong\">\u003Cstrong>Developer\u003C/strong>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Topology\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tView the Kafka event source and sink.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"informalfigure\">\u003Cdiv class=\"mediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Serverless-en-US/images/bcbda4539ad0b56280f6bd1158e23667/verify-kafka-ODC.png\" alt=\"View the Kafka source and service in the Topology view\"/>\u003C/div>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-kafka-source-kn_serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.15.2.2. Creating a Kafka event source by using the Knative CLI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can use the \u003Ccode class=\"literal\">kn source kafka create\u003C/code> command to create a Kafka source by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI. Using the Knative CLI to create event sources provides a more streamlined and intuitive user interface than modifying YAML files directly.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, Knative Serving, and the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource (CR) are installed on your cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have access to a Red Hat AMQ Streams (Kafka) cluster that produces the Kafka messages you want to import.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have installed the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tOptional: You have installed the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>) if you want to use the verification steps in this procedure.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tTo verify that the Kafka event source is working, create a Knative service that dumps incoming events into the service logs:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn service create event-display \\\n --image quay.io/openshift-knative/knative-eventing-sources-event-display\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">KafkaSource\u003C/code> CR:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source kafka create <kafka_source_name> \\\n --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \\\n --topics <topic_name> --consumergroup my-consumer-group \\\n --sink event-display\u003C/pre>\u003Crh-alert class=\"admonition note\" state=\"info\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\tReplace the placeholder values in this command with values for your source name, bootstrap servers, and topics.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">--servers\u003C/code>, \u003Ccode class=\"literal\">--topics\u003C/code>, and \u003Ccode class=\"literal\">--consumergroup\u003C/code> options specify the connection parameters to the Kafka cluster. The \u003Ccode class=\"literal\">--consumergroup\u003C/code> option is optional.\n\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tOptional: View details about the \u003Ccode class=\"literal\">KafkaSource\u003C/code> CR you created:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ kn source kafka describe <kafka_source_name>\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">Name: example-kafka-source\nNamespace: kafka\nAge: 1h\nBootstrapServers: example-cluster-kafka-bootstrap.kafka.svc:9092\nTopics: example-topic\nConsumerGroup: example-consumer-group\n\nSink:\n Name: event-display\n Namespace: default\n Resource: Service (serving.knative.dev/v1)\n\nConditions:\n OK TYPE AGE REASON\n ++ Ready 1h\n ++ Deployed 1h\n ++ SinkProvided 1h\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification steps\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tTrigger the Kafka instance to send a message to the topic:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc -n kafka run kafka-producer \\\n -ti --image=quay.io/strimzi/kafka:latest-kafka-2.7.0 --rm=true \\\n --restart=Never -- bin/kafka-console-producer.sh \\\n --broker-list <cluster_kafka_bootstrap>:9092 --topic my-topic\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tEnter the message in the prompt. This command assumes that:\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tThe Kafka cluster is installed in the \u003Ccode class=\"literal\">kafka\u003C/code> namespace.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">KafkaSource\u003C/code> object has been configured to use the \u003Ccode class=\"literal\">my-topic\u003C/code> topic.\n\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tVerify that the message arrived by viewing the logs:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc logs $(oc get pod -o name | grep event-display) -c user-container\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">☁️ cloudevents.Event\nValidation: valid\nContext Attributes,\n specversion: 1.0\n type: dev.knative.kafka.event\n source: /apis/v1/namespaces/default/kafkasources/example-kafka-source#example-topic\n subject: partition:46#0\n id: partition:46/offset:0\n time: 2021-03-10T11:21:49.4Z\nExtensions,\n traceparent: 00-161ff3815727d8755848ec01c866d1cd-7ff3916c44334678-00\nData,\n Hello!\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Csection class=\"section\" id=\"specifying-sink-flag-kn_serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.15.2.2.1. Knative CLI sink flag\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\t\tWhen you create an event source by using the Knative (\u003Ccode class=\"literal\">kn\u003C/code>) CLI, you can specify a sink where events are sent to from that resource by using the \u003Ccode class=\"literal\">--sink\u003C/code> flag. The sink can be any addressable or callable resource that can receive incoming events from other resources.\n\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\tThe following example creates a sink binding that uses a service, \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code>, as the sink:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example command using the sink flag\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">$ kn source binding create bind-heartbeat \\\n --namespace sinkbinding-example \\\n --subject \"Job:batch/v1:app=heartbeat-cron\" \\\n --sink http://event-display.svc.cluster.local \\ \u003Cspan id=\"CO28-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n --ce-override \"sink=bound\"\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO28-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">svc\u003C/code> in \u003Ccode class=\"literal\">http://event-display.svc.cluster.local\u003C/code> determines that the sink is a Knative service. Other default sink prefixes include \u003Ccode class=\"literal\">channel\u003C/code>, and \u003Ccode class=\"literal\">broker\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-kafka-source-yaml_serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.15.2.3. Creating a Kafka event source by using YAML\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe applications declaratively and in a reproducible manner. To create a Kafka source by using YAML, you must create a YAML file that defines a \u003Ccode class=\"literal\">KafkaSource\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource are installed on your cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have access to a Red Hat AMQ Streams (Kafka) cluster that produces the Kafka messages you want to import.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">KafkaSource\u003C/code> object as a YAML file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1beta1\nkind: KafkaSource\nmetadata:\n name: <source_name>\nspec:\n consumerGroup: <group_name> \u003Cspan id=\"CO29-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n bootstrapServers:\n - <list_of_bootstrap_servers>\n topics:\n - <list_of_topics> \u003Cspan id=\"CO29-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n sink:\n - <list_of_sinks> \u003Cspan id=\"CO29-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO29-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tA consumer group is a group of consumers that use the same group ID, and consume data from a topic.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO29-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tA topic provides a destination for the storage of data. Each topic is split into one or more partitions.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO29-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tA sink specifies where events are sent to from a source.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\tOnly the \u003Ccode class=\"literal\">v1beta1\u003C/code> version of the API for \u003Ccode class=\"literal\">KafkaSource\u003C/code> objects on OpenShift Serverless is supported. Do not use the \u003Ccode class=\"literal\">v1alpha1\u003C/code> version of this API, as this version is now deprecated.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example \u003Ccode class=\"literal\">KafkaSource\u003C/code> object\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1beta1\nkind: KafkaSource\nmetadata:\n name: kafka-source\nspec:\n consumerGroup: knative-group\n bootstrapServers:\n - my-cluster-kafka-bootstrap.kafka:9092\n topics:\n - knative-demo-topic\n sink:\n ref:\n apiVersion: serving.knative.dev/v1\n kind: Service\n name: event-display\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">KafkaSource\u003C/code> YAML file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Verification\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tVerify that the Kafka event source was created by entering the following command:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pods\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME READY STATUS RESTARTS AGE\nkafkasource-kafka-source-5ca0248f-... 1/1 Running 0 13m\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"serverless-kafka-developer-broker\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.15.3. Kafka broker\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tFor production-ready Knative Eventing deployments, Red Hat recommends using the Knative Kafka broker implementation. The Kafka broker is an Apache Kafka native implementation of the Knative broker, which sends CloudEvents directly to the Kafka instance.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tThe Federal Information Processing Standards (FIPS) mode is disabled for Kafka broker.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\tThe Kafka broker has a native integration with Kafka for storing and routing events. This allows better integration with Kafka for the broker and trigger model over other broker types, and reduces network hops. Other benefits of the Kafka broker implementation include:\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tAt-least-once delivery guarantees\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOrdered delivery of events, based on the CloudEvents partitioning extension\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tControl plane high availability\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tA horizontally scalable data plane\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tThe Knative Kafka broker stores incoming CloudEvents as Kafka records, using the binary content mode. This means that all CloudEvent attributes and extensions are mapped as headers on the Kafka record, while the \u003Ccode class=\"literal\">data\u003C/code> spec of the CloudEvent corresponds to the value of the Kafka record.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFor information about using Kafka brokers, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-using-brokers\">Creating brokers\u003C/a>.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"serverless-create-kafka-channel-yaml_serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.15.4. Creating a Kafka channel by using YAML\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tCreating Knative resources by using YAML files uses a declarative API, which enables you to describe channels declaratively and in a reproducible manner. You can create a Knative Eventing channel that is backed by Kafka topics by creating a Kafka channel. To create a Kafka channel by using YAML, you must create a YAML file that defines a \u003Ccode class=\"literal\">KafkaChannel\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource are installed on your OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">KafkaChannel\u003C/code> object as a YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: messaging.knative.dev/v1beta1\nkind: KafkaChannel\nmetadata:\n name: example-channel\n namespace: default\nspec:\n numPartitions: 3\n replicationFactor: 1\u003C/pre>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\tOnly the \u003Ccode class=\"literal\">v1beta1\u003C/code> version of the API for \u003Ccode class=\"literal\">KafkaChannel\u003C/code> objects on OpenShift Serverless is supported. Do not use the \u003Ccode class=\"literal\">v1alpha1\u003C/code> version of this API, as this version is now deprecated.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tApply the \u003Ccode class=\"literal\">KafkaChannel\u003C/code> YAML file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"serverless-kafka-developer-sink\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.15.5. Kafka sink\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tKafka sinks are a type of \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-event-sinks\">event sink\u003C/a> that are available if a cluster administrator has enabled Kafka on your cluster. You can send events directly from an \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#knative-event-sources\">event source\u003C/a> to a Kafka topic by using a Kafka sink.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"serverless-kafka-sink_serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.15.5.1. Using a Kafka sink\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can create an event sink called a Kafka sink that sends events to a Kafka topic. Creating Knative resources by using YAML files uses a declarative API, which enables you to describe applications declaratively and in a reproducible manner. By default, a Kafka sink uses the binary content mode, which is more efficient than the structured mode. To create a Kafka sink by using YAML, you must create a YAML file that defines a \u003Ccode class=\"literal\">KafkaSink\u003C/code> object, then apply it by using the \u003Ccode class=\"literal\">oc apply\u003C/code> command.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe OpenShift Serverless Operator, Knative Eventing, and the \u003Ccode class=\"literal\">KnativeKafka\u003C/code> custom resource (CR) are installed on your cluster.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have created a project or have access to a project with the appropriate roles and permissions to create applications and other workloads in OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tYou have access to a Red Hat AMQ Streams (Kafka) cluster that produces the Kafka messages you want to import.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tInstall the OpenShift CLI (\u003Ccode class=\"literal\">oc\u003C/code>).\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">KafkaSink\u003C/code> object definition as a YAML file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Kafka sink YAML\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: eventing.knative.dev/v1alpha1\nkind: KafkaSink\nmetadata:\n name: <sink-name>\n namespace: <namespace>\nspec:\n topic: <topic-name>\n bootstrapServers:\n - <bootstrap-server>\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tTo create the Kafka sink, apply the \u003Ccode class=\"literal\">KafkaSink\u003C/code> YAML file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f <filename>\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tConfigure an event source so that the sink is specified in its spec:\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example of a Kafka sink connected to an API server source\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: sources.knative.dev/v1alpha2\nkind: ApiServerSource\nmetadata:\n name: <source-name> \u003Cspan id=\"CO30-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n namespace: <namespace> \u003Cspan id=\"CO30-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nspec:\n serviceAccountName: <service-account-name> \u003Cspan id=\"CO30-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n mode: Resource\n resources:\n - apiVersion: v1\n kind: Event\n sink:\n ref:\n apiVersion: eventing.knative.dev/v1alpha1\n kind: KafkaSink\n name: <sink-name> \u003Cspan id=\"CO30-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\u003C/pre>\n\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO30-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe name of the event source.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO30-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe namespace of the event source.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO30-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe service account for the event source.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO30-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe Kafka sink name.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section _additional-resources\" id=\"additional-resources_serverless-kafka-developer\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.15.6. Additional resources\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_amq/7.6/html/amq_streams_on_openshift_overview/kafka-concepts_str#kafka-concepts-key_str\">Red Hat AMQ Streams documentation\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_amq/7.6/html-single/using_amq_streams_on_rhel/index#assembly-kafka-encryption-and-authentication-str\">Red Hat AMQ Streams TLS and SASL on Kafka documentation\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-event-delivery\">Event delivery\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/serverless/#serverless-kafka-admin\">Knative Kafka cluster administrator documentation\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003C/section>\u003C/body>",[8,921,3451,3576,5076,5510,6066,6538,8283,9229,11224],{"title":9,"visible":10,"categoryName":10,"sections":11},"Getting Started",true,[12,75,376,480],{"title":13,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":17,"url":18,"docTitle":19,"sections":20},"About",1,"index",null,[],"/documentation/openshift_container_platform/4.8/html/about/index","about",[21,33,44,66],{"title":22,"visible":10,"weight":23,"urlFragment":24,"anchor":16,"singlePageAnchor":24,"subChapters":25,"url":32,"docTitle":19},"OpenShift Container Platform 4.8 Documentation",2,"welcome-index",[26,27,28,29,30,31],"cluster-installer-activities","developer-activities","cluster-administrator-activities","manage-cluster-components","change-cluster-components","monitor-the-cluster","/documentation/openshift_container_platform/4.8/html/about/welcome-index",{"title":34,"visible":10,"weight":35,"urlFragment":36,"anchor":16,"singlePageAnchor":36,"subChapters":37,"url":43,"docTitle":19},"Learn more about OpenShift Container Platform",3,"learn_more_about_openshift",[38,39,40,41,42],"architect","cluster-administrator","application_site_reliability_engineer","Developer","understanding-openshift_welcome-personas","/documentation/openshift_container_platform/4.8/html/about/learn_more_about_openshift",{"title":45,"visible":10,"weight":46,"urlFragment":47,"anchor":16,"singlePageAnchor":47,"subChapters":48,"url":65,"docTitle":19},"About OpenShift Kubernetes Engine",4,"oke-about",[49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],"about_oke_similarities_and_differences","about_oke_core_kubernetes_and_container_orchestration","about_oke_enterprise_ready_configurations","about_oke_standard_infrastructure_services","about_oke_core_user_experience","maintained-and-curated-content","openshift-container-storage-compatible","red-hat-middleware-compatible","openshift-serverless","quay-integration-compatible","openshift-virtualization","advanced-cluster-management","advanced-networking","developer-experience","feature-summary","subscription-limitations","/documentation/openshift_container_platform/4.8/html/about/oke-about",{"title":67,"visible":10,"weight":68,"urlFragment":69,"anchor":16,"singlePageAnchor":69,"subChapters":70,"url":74,"docTitle":19},"Kubernetes overview",5,"kubernetes-overview",[71,72,73],"kubernetes-components_kubernetes-overview","kubernetes-resources_kubernetes-overview","kubernetes-conceptual-guidelines_kubernetes-overview","/documentation/openshift_container_platform/4.8/html/about/kubernetes-overview",{"title":76,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":77,"url":78,"docTitle":79,"sections":80},"Release notes",[],"/documentation/openshift_container_platform/4.8/html/release_notes/index","release_notes",[81],{"title":82,"visible":10,"weight":23,"urlFragment":83,"anchor":16,"singlePageAnchor":83,"subChapters":84,"url":375,"docTitle":79},"OpenShift Container Platform 4.8 release notes","ocp-4-8-release-notes",[85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374],"ocp-4-8-about-this-release","ocp-4-8-inclusive-language","ocp-4-8-add-on-support-status","ocp-4-8-new-features-and-enhancements","ocp-4-8-rhcos","ocp-4-8-rhcos-rhel-8-4-packages","ocp-4-8-stream-metadata","ocp-4-8-rhcos-butane","ocp-4-8-rhcos-chrony-default","ocp-4-8-rhcos-multipath-install","ocp-4-8-installation-and-upgrade","ocp-4-8-installation-azure-empty-rg","ocp-4-8-installation-existing-iam-roles-aws","ocp-4-8-installation-pre-existing-hosted-zones-aws","ocp-4-8-installation-increase-gcp-subnets-within-machine-cidr","ocp-4-8-improved-upgrade-duration","ocp-4-8-mco-upgrade-complete","ocp-4-8-installation-fujitsu-irmc","ocp-4-8-installation-openstack-installer-provisioned-sr-iov","installation-ironic-agent-vlan-support","ocp-4-8-osus","ocp-4-8-web-console","ocp-4-8-custom-console-routes-use-custom-domains-cluster-api","ocp-4-8-access-code-snippet-from-quick-start","ocp-4-8-improved-presentation-quick-start-prereqs","ocp-4-8-web-console-developer-perspective","ocp-4-8-ibm-z","ocp-4-8-ibm-power","ocp-4-8-security","ocp-4-8-security-log-oauth-tokens","ocp-4-8-security-wildcard-subjects-headless-services","ocp-4-8-security-oc-compliance-plug-in","ocp-4-8-security-tls-security-profile-control-plane","ocp-4-8-security-tls-security-profile-kubelet","ocp-4-8-security-bcrypt-hashing","ocp-4-8-managed-secure-boot","ocp-4-8-networking","ocp-4-8-dual-stack-support-bare-metal-ovn-kubernetes-network-provider","ocp-4-8-migrate-openshift-sdn-ovn-kubernetes-user-provisioned","ocp-4-8-openshift-sdn-egress-ips-balance","ocp-4-8-network-policy-host-network-ingress-controllers","ocp-4-8-network-policy-host-network-policy-group","ocp-4-8-network-policy-audit-logs","ocp-4-8-macvlan-multi-network-policy","ocp-4-8-supported-hardware-sriov","ocp-4-8-enhancements-sriov-network-operator","ocp-4-8-tracking-network-flows","ocp-4-8-coredns-mdns","ocp-4-8-preparation-haproxy-2.2","ocp-4-8-stricter-http-head-validation-haproxy-2.2","ocp-4-8-ingress-configuring-global-access-gcp","ocp-4-8-setting-ingress-configuring-thread-count","ocp-4-8-ingress-configuring-proxy-protocol","ocp-4-8-networking-ntp-on-control-plane","ocp-4-8-enhancements-kuryr-kubernetes","ocp-4-8-networking-enabling-provisioning-network-day2","ocp-4-8-configure-vips-to-run-on-control-plane","ocp-4-8-networking-external-load-balancer","ocp-4-8-IPsec-support-dual-stack","ocp-4-8-egress-router-ovn-kubernetes","ocp-4-8-ip-failover-support","ocp-4-8-control-dns-pod-placement","ocp-4-8-networking-openstack-provider-networks","ocp-4-8-configurable-headerBufferMaxRewriteByte-headerBufferBytes-parameters","ocp-4-8-storage","ocp-4-8-storage-gcp-pd-csi-ga","ocp-4-8-storage-azure-csi-tp","ocp-4-8-storage-vsphere-csi-tp","ocp-4-8-storage-csi-migration","ocp-4-8-storage-aws-efs-removed-1st","ocp-4-8-storage-openstack-cinder-availability-zones","ocp-4-8-registry","ocp-4-8-olm","ocp-4-8-admin-error-reporting","ocp-4-8-installplan-errors","ocp-4-8-operatorgroup-errors","ocp-4-8-candidate-operator-errors","ocp-4-8-osdk","ocp-4-8-pkgman-to-bundle","ocp-4-8-catalog-build-push","ocp-4-8-bundle-upgrade","ocp-4-8-osdk-compat","ocp-4-8-builds-telemetry-metric","ocp-4-8-builds-mount-custom-pki-ca","ocp-4-8-images","ocp-4-8-machine-api","ocp-4-8-vsphere-machine-autoscaler-to-from-zero","ocp-4-8-mco-no-reboot-cert","ocp-4-8-machine-set-policy-enhancement","ocp-4-8-machine-set-hugepage-enhancement","ocp-4-8-machine-config-operator-image-content-source-object-enhancement","ocp-4-8-nodes","ocp-4-8-nodes-descheduler-apigroup","ocp-4-8-nodes-descheduler-metrics","ocp-4-8-nodes-huge-pages-downward-api","ocp-4-8-nodes-nfd-operator-new-labels_release-notes","ocp-4-8-poison-pill-operator","ocp-4-8-nodes-no-reboot-cert","ocp-4-8-nodes-vpa-ga","ocp-4-8-nodes-vpa-replicas","ocp-4-8-nodes-resources-configuring-auto_release-notes","ocp-4-8-nodes-registry-allowed-repo_release-notes","ocp-4-8-nodes-cronjob-qa_release-notes","ocp-4-8-logging","ocp-4-8-monitoring","ocp-4-8-monitoring-alerting-rule-changes","ocp-4-8-monitoring-removed-API-alerts","ocp-4-8-monitoring-stack-dependency-version-updates","ocp-4-8-monitoring-kube-state-metrics-v2.0.0-upgrade","ocp-4-8-monitoring-removed-grafana-alertmanager-ui-links","ocp-4-8-monitoring-dashboards-updates-web-console","ocp-4-8-metering","ocp-4-8-scale","ocp-4-8-scale-running-in-a-single-node-cluster","ocp-4-8-reducing-nic-queues-using-the-performance-addon-operator","ocp-4-8-scale-cluster-maximums","ocp-4-8-performance-creator-tool","ocp-4-8-nfd-operator","ocp-4-8-driver-toolkit","ocp-4-8-backup-and-restore","ocp-4-8-etcd-snapshot","ocp-4-8-insights-operator","ocp-4-8-insights-operator-restricted-network","ocp-4-8-insights-advisor-improvements","ocp-4-8-insights-operator-data-collection-enhancements","ocp-4-8-insights-operator-gathering-sap","ocp-4-8-gathering-sap-datahubs","ocp-4-8-auth","ocp-4-8-auth-tp-aws-sts","ocp-4.8-sandboxed-containers","ocp-4.8-sandboxed-containers-tp","ocp-4-8-notable-technical-changes","ocp-4-8-deprecated-removed-features","ocp-4-8-deprecated-features","ocp-4-8-descheduler-apigroup-deprecated","ocp-4-8-dhclient-deprecated","ocp-4-8-cluster-loader-deprecated","ocp-4-8-builds-lasttriggeredimageid-parameter","ocp-4-8-builds-jenkins-operator","ocp-4-8-instance_type_id-operator_rhv","ocp-4-8-removed-features","ocp-4-8-removed-feature-azure-mint-mode","ocp-4-8-images-removed-from-samples-imagestreams","ocp-4-8-pkgman-format","ocp-4-8-hpa-prometheus","ocp-4-8-oauth-secure-token-annotation","ocp-4-8-bug-fixes","ocp-4-8-technology-preview","ocp-4-8-known-issues","ocp-4-8-asynchronous-errata-updates","ocp-4-8-1-ga","ocp-4-8-3","ocp-4-8-3-updating","ocp-4-8-4","ocp-4-8-4-bug-fixes","ocp-4-8-4-updating","ocp-4-8-5","ocp-4-8-5-features","ocp-4-8-5-egress-ip-enhancement","ocp-4-8-5-bug-fixes","ocp-4-8-5-updating","ocp-4-8-9","ocp-4-8-9-bug-fixes","ocp-4-8-9-updating","ocp-4-8-10","ocp-4-8-10-updating","ocp-4-8-11","ocp-4-8-11-bug-fixes","ocp-4-8-11-updating","ocp-4-8-12","ocp-4-8-12-features","ocp-4-8-12-new-minimum-storage-requirement","ocp-4-8-12-bug-fixes","ocp-4-8-12-updating","ocp-4-8-13","ocp-4-8-13-features","ocp-kubernetes-1-21-4-updates","ocp-4-8-13-bug-fixes","ocp-4-8-13-updating","ocp-4-8-14","ocp-4-8-14-preparing-upgrade-next-release","ocp-4-8-14-bug-fixes","ocp-4-8-14-updating","ocp-4-8-15","ocp-4-8-15-known-issues","ocp-4-8-15-bug-fixes","ocp-4-8-15-updating","ocp-4-8-17","ocp-4-8-17-updating","ocp-4-8-18","ocp-4-8-18-bug-fixes","ocp-4-8-18-updating","ocp-4-8-19","ocp-4-8-19-updating","ocp-4-8-20","ocp-4-8-20-known-issues","ocp-4-8-20-updating","ocp-4-8-21","ocp-4-8-21-features","ocp-kubernetes-1-21-5-updates","ocp-4-8-21-updating","ocp-4-8-22","ocp-4-8-22-features","ocp-kubernetes-1-21-6-updates","ocp-4-8-22-updating","ocp-4-8-23","ocp-4-8-23-updating","ocp-4-8-24","ocp-4-8-24-updating","ocp-4-8-25","ocp-4-8-25-bug-fixes","ocp-4-8-25-updating","ocp-4-8-26","ocp-4-8-26-updating","ocp-4-8-27","ocp-4-8-27-updating","ocp-4-8-28","ocp-4-8-28-updating","ocp-4-8-29","ocp-4-8-29-bug-fixes","ocp-4-8-29-updating","ocp-4-8-31","ocp-4-8-31-features","ocp-4-8-31-features-ip-reconciler","ocp-4-8-31-bug-fixes","ocp-4-8-31-updating","ocp-4-8-32","ocp-4-8-32-updating","ocp-4-8-33","ocp-4-8-33-updating","ocp-4-8-34","ocp-4-8-34-features","ocp-kubernetes-1-21-8-updates","ocp-4-8-34-removed-feature-azure-mint-mode","ocp-4-8-34-known-issues","ocp-4-8-34-bug-fixes","ocp-4-8-34-updating","ocp-4-8-35","ocp-4-8-35-updating","ocp-4-8-36","ocp-4-8-36-bug-fixes","ocp-4-8-36-updating","ocp-4-8-37","ocp-4-8-37-bug-fixes","ocp-4-8-37-updating","ocp-4-8-39","ocp-4-8-39-known-issues","ocp-4-8-39-updating","ocp-4-8-41","ocp-4-8-41-features","ocp-kubernetes-1-21-11-updates","ocp-4-8-41-updating","ocp-4-8-42","ocp-4-8-42-updating","ocp-4-8-43","ocp-4-8-43-updating","ocp-4-8-44","ocp-4-8-44-bug-fixes","ocp-4-8-44-updating","ocp-4-8-45","ocp-4-8-45-bug-fixes","ocp-4-8-45-updating","ocp-4-8-46","updating","ocp-4-8-47","updating-2","ocp-4-8-48","ocp-4-8-48-bug-fixes","updating-3","ocp-4-8-49","ocp-4-8-49-updating","ocp-4-8-50","ocp-4-8-50-bug-fixes","ocp-4-8-50-updating","ocp-4-8-51","ocp-4-8-51-updating","ocp-4-8-52","ocp-4-8-52-bug-fixes","updating-4","ocp-4-8-53","updating-5","ocp-4-8-54","updating-6","ocp-4-8-55","ocp-kubernetes-1-21-14-updates","updating-7","ocp-4-8-56","ocp-4-8-56-updating","ocp-4-8-57","ocp-4-8-57-updating","/documentation/openshift_container_platform/4.8/html/release_notes/ocp-4-8-release-notes",{"title":377,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":378,"url":379,"docTitle":380,"sections":381},"Architecture",[],"/documentation/openshift_container_platform/4.8/html/architecture/index","architecture",[382,393,408,419,433,451,466],{"title":383,"visible":10,"weight":23,"urlFragment":384,"anchor":16,"singlePageAnchor":384,"subChapters":385,"url":392,"docTitle":380},"Architecture overview","architecture-overview",[386,387,388,389,390,391],"openshift-architecture-common-terms_architecture-overview","about-installation-and-updates","about-control-planes","about-containerized-applications-for-developers","coreos-and-ignition","about-admission-plug-ins","/documentation/openshift_container_platform/4.8/html/architecture/architecture-overview",{"title":394,"visible":10,"weight":35,"urlFragment":380,"anchor":16,"singlePageAnchor":380,"subChapters":395,"url":407,"docTitle":380},"OpenShift Container Platform architecture",[396,397,398,399,400,401,402,403,404,405,406],"architecture-platform-introduction_architecture","architecture-kubernetes-introduction_architecture","architecture-container-application-benefits_architecture","operating-system-benefits_architecture","deployment-scaling-benefits_architecture","architecture-platform-benefits_architecture","architecture-custom-os_architecture","architecture-platform-management_architecture","architecture-key-features_architecture","architecture-overview-image_architecture","cluster-entitlements_architecture","/documentation/openshift_container_platform/4.8/html/architecture/architecture",{"title":409,"visible":10,"weight":46,"urlFragment":410,"anchor":16,"singlePageAnchor":410,"subChapters":411,"url":418,"docTitle":380},"Installation and update","architecture-installation",[412,413,414,415,416,417],"installation-overview_architecture-installation","supported-platforms-for-openshift-clusters_architecture-installation","installation-process_architecture-installation","update-service-overview_architecture-installation","unmanaged-operators_architecture-installation","architecture-installation-next-steps","/documentation/openshift_container_platform/4.8/html/architecture/architecture-installation",{"title":420,"visible":10,"weight":68,"urlFragment":421,"anchor":16,"singlePageAnchor":421,"subChapters":422,"url":432,"docTitle":380},"Control plane architecture","control-plane",[423,424,425,426,427,428,429,430,431],"architecture-machine-config-pools_control-plane","architecture-machine-roles_control-plane","control-plane-and-node-host-compatibility","defining-workers_control-plane","defining-masters_control-plane","operators-overview_control-plane","cluster-operators_control-plane","olm-operators_control-plane","about-machine-config-operator_control-plane","/documentation/openshift_container_platform/4.8/html/architecture/control-plane",{"title":434,"visible":10,"weight":435,"urlFragment":436,"anchor":16,"singlePageAnchor":436,"subChapters":437,"url":450,"docTitle":380},"Understanding OpenShift Container Platform development",6,"understanding-development",[438,439,440,441,442,443,444,445,446,447,448,449],"developing-containerized-applications","building-simple-container","container-build-tool-options","base-image-options","understanding-development-registry-options","creating-kubernetes-manifest-openshift","understanding-kubernetes-pods","application-types","supporting-components","applying-manifest","manifest-next-steps","develop-for-operators","/documentation/openshift_container_platform/4.8/html/architecture/understanding-development",{"title":452,"visible":10,"weight":453,"urlFragment":454,"anchor":16,"singlePageAnchor":454,"subChapters":455,"url":465,"docTitle":380},"Red Hat Enterprise Linux CoreOS (RHCOS)",7,"architecture-rhcos",[456,457,458,459,460,461,462,463,464],"rhcos-about_architecture-rhcos","rhcos-key-features_architecture-rhcos","rhcos-configured_architecture-rhcos","rhcos-deployed_architecture-rhcos","rhcos-about-ignition_architecture-rhcos","about-ignition_architecture-rhcos","ignition-sequence_architecture-rhcos","ignition-config-viewing_architecture-rhcos","digging-into-machine-config_architecture-rhcos","/documentation/openshift_container_platform/4.8/html/architecture/architecture-rhcos",{"title":467,"visible":10,"weight":468,"urlFragment":469,"anchor":16,"singlePageAnchor":469,"subChapters":470,"url":479,"docTitle":380},"Admission plugins",8,"admission-plug-ins",[471,472,473,474,475,476,477,478],"admission-plug-ins-about_admission-plug-ins","admission-plug-ins-default_admission-plug-ins","admission-webhooks-about_admission-plug-ins","admission-webhook-types_admission-plug-ins","mutating-admission-plug-in_admission-plug-ins","validating-admission-plug-in_admission-plug-ins","configuring-dynamic-admission_admission-plug-ins","admission-plug-ins-additional-resources","/documentation/openshift_container_platform/4.8/html/architecture/admission-plug-ins",{"title":481,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":482,"url":483,"docTitle":484,"sections":485},"Security and compliance",[],"/documentation/openshift_container_platform/4.8/html/security_and_compliance/index","security_and_compliance",[486,494,579,602,673,803,857,867,875,886,897,904,913],{"title":487,"visible":10,"weight":23,"urlFragment":488,"anchor":16,"singlePageAnchor":488,"subChapters":489,"url":493,"docTitle":484},"OpenShift Container Platform security and compliance","security-compliance-overview",[490,491,492],"security-overview","compliance-overview","additional-resources_security-compliance-overview","/documentation/openshift_container_platform/4.8/html/security_and_compliance/security-compliance-overview",{"title":495,"visible":10,"weight":35,"urlFragment":496,"anchor":16,"singlePageAnchor":496,"subChapters":497,"url":578,"docTitle":484},"Container security","container-security-1",[498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577],"security-understanding","security-understanding-containers_security-understanding","security-understanding-openshift_security-understanding","security-hosts-vms","security-hosts-vms-rhcos_security-hosts-vms","security-hosts-vms-vs-containers_security-hosts-vms","security-hosts-vms-openshift_security-hosts-vms","security-hardening","security-hardening-what_security-hardening","security-hardening-how_security-hardening","security-harden-before-installation_security-hardening","security-harden-during-installation_security-hardening","security-harden-after-installation_security-hardening","security-container-signature","containers-signature-verify-enable_security-container-signature","containers-signature-verify-application_security-container-signature","additional-resources_security-container-signature","security-compliance","security-compliance-nist_security-compliance","security-container-content","security-container-content-inside_security-container-content","security-container-content-universal_security-container-content","security-container-content-scanning_security-container-content","quay-security-scan_security-container-content","security-container-content-external-scanning_security-container-content","security-image-metadata_security-container-content","security-example-annotation-keys_security-container-content","security-example-annotation-values_security-container-content","security-annotating-image-objects_security-container-content","security-example-annotate-CLI_security-container-content","controlling-pod-execution_security-container-content","security-controlling-pod-execution-example-annotation_security-container-content","security-integration-reference_security-container-content","security-integration-reference-example-api-call_security-container-content","security-registries","security-registries-where_security-registries","security-registries-immutable_security-registries","security-registries-ecosystem_security-registries","security-registries-openshift_security-registries","security-registries-quay_security-registries","security-build","security-build-once_security-build","security-build-management_security-build","security-build-inputs_security-build","security-build-designing_security-build","security-build-knative_security-build","additional-resources_security-build","security-deploy","security-deploy-trigger_security-deploy","security-deploy-image-sources_security-deploy","security-deploy-signature_security-deploy","security-deploy-secrets_security-deploy","security-deploy-continuous_security-deploy","security-platform","security-platform-multi-tenancy_security-platform","security-platform-admission_security-platform","security-deployment-sccs_security-platform","security-service-account_security-platform","security-platform-authentication_security-platform","security-platform-auth-controlling-access_security-platform","security-platform-api-access-control_security-platform","security-platform-red-hat-sso_security-platform","security-platform-auth-secure-self-service-web-console_security-platform","security-platform-certificates_security-platform","security-platform-config-custom-certs_security-platform","security-network","security-network-namespaces_security-network","security-network-policies_security-network","security-network-multiple-pod_security-network","security-network-isolating_security-network","security-network-ingress_security-network","security-network-egress_security-network","security-storage","security-network-storage-persistent_security-storage","security-network-storage-shared_security-storage","security-network-storage-block_security-storage","security-monitoring","security-monitoring-events_security-monitoring","security-monitoring-cluster-logging_security-monitoring","security-monitoring-audit-logs_security-monitoring","/documentation/openshift_container_platform/4.8/html/security_and_compliance/container-security-1",{"title":580,"visible":10,"weight":46,"urlFragment":581,"anchor":16,"singlePageAnchor":581,"subChapters":582,"url":601,"docTitle":484},"Configuring certificates","configuring-certificates",[583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600],"replacing-default-ingress","understanding-default-ingress_replacing-default-ingress","replacing-default-ingress_replacing-default-ingress","api-server-certificates","customize-certificates-api-add-named_api-server-certificates","add-service-serving","understanding-service-serving_service-serving-certificate","add-service-certificate_service-serving-certificate","add-service-certificate-configmap_service-serving-certificate","add-service-certificate-apiservice_service-serving-certificate","add-service-certificate-crd_service-serving-certificate","add-service-certificate-mutating-webhook_service-serving-certificate","add-service-certificate-validating-webhook_service-serving-certificate","rotate-service-serving_service-serving-certificate","manually-rotate-service-ca_service-serving-certificate","updating-ca-bundle","ca-bundle-understanding_updating-ca-bundle","ca-bundle-replacing_updating-ca-bundle","/documentation/openshift_container_platform/4.8/html/security_and_compliance/configuring-certificates",{"title":603,"visible":10,"weight":68,"urlFragment":604,"anchor":16,"singlePageAnchor":604,"subChapters":605,"url":672,"docTitle":484},"Certificate types and descriptions","certificate-types-and-descriptions",[606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671],"cert-types-user-provided-certificates-for-the-api-server","purpose","location","management","expiration","customization","cert-types-proxy-certificates","purpose-2","managing-proxy-certificates-during-installation","location-2","expiration-2","services","management-2","customization-2","renewal","cert-types-service-ca-certificates","purpose-3","expiration-3","management-3","services-2","cert-types-node-certificates","purpose-4","management-4","cert-types-bootstrap-certificates","purpose-5","management-5","expiration-4","customization-3","cert-types-etcd-certificates","purpose-6","expiration-5","management-6","services-3","cert-types-olm-certificates","management-7","cert-types-aggregated-api-client-certificates","purpose-7","management-8","expiration-6","customization-4","cert-types-machine-config-operator-certificates","purpose-8","management-9","expiration-7","customization-5","cert-types-user-provided-certificates-for-default-ingress","purpose-9","location-3","management-10","expiration-8","services-4","customization-6","cert-types-ingress-certificates","purpose-10","location-4","workflow","expiration-9","services-5","management-11","renewal-2","cert-types-monitoring-and-cluster-logging-operator-component-certificates","expiration-10","management-12","cert-types-control-plane-certificates","location-5","management-13","/documentation/openshift_container_platform/4.8/html/security_and_compliance/certificate-types-and-descriptions",{"title":674,"visible":10,"weight":435,"urlFragment":675,"anchor":16,"singlePageAnchor":675,"subChapters":676,"url":802,"docTitle":484},"Compliance Operator","compliance-operator",[677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801],"compliance-operator-release-notes","compliance-operator-release-notes-0-1-59","compliance-operator-0-1-59-new-features-and-enhancements","compliance-operator-0-1-59-bug-fixes","compliance-operator-release-notes-0-1-57","compliance-operator-0-1-57-new-features-and-enhancements","compliance-operator-0-1-57-bug-fixes","compliance-operator-0-1-57-deprecations","compliance-operator-release-notes-0-1-53","compliance-operator-0-1-53-bug-fixes","compliance-operator-0-1-53-known-issue","compliance-operator-release-notes-0-1-52","compliance-operator-0-1-52-new-features-and-enhancements","compliance-operator-0-1-52-bug-fixes","compliance-operator-0-1-52-known-issue","compliance-operator-release-notes-0-1-49","compliance-operator-0-1-49-bug-fixes","compliance-operator-release-notes-0-1-48","openshift-compliance-operator-0-1-48-bug-fixes","compliance-operator-release-notes-0-1-47","compliance-operator-0-1-47-new-features-and-enhancements","openshift-compliance-operator-0-1-47-bug-fixes","compliance-operator-release-notes-0-1-44","compliance-operator-0-1-44-new-features-and-enhancements","openshift-compliance-operator-0-1-44-templating","openshift-compliance-operator-0-1-44-bug-fixes","compliance-operator-release-notes-0-1-39","compliance-operator-0-1-39-new-features-and-enhancements","compliance-operator-release-notes_additional-resources","compliance-operator-supported-profiles","compliance-supported-profiles_compliance-operator-supported-profiles","additional-resources-compliance-operator-","compliance-operator-installation","installing-compliance-operator-web-console_compliance-operator-installation","installing-compliance-operator-cli_compliance-operator-installation","additional-resources-installing-the-compliance-operator","compliance-operator-updating","olm-preparing-upgrade_compliance-operator-updating","olm-changing-update-channel_compliance-operator-updating","olm-approving-pending-upgrade_compliance-operator-updating","compliance-operator-scans","running-compliance-scans_compliance-operator-scans","running-compliance-scans-worker-node_compliance-operator-scans","compliance-scansetting-cr_compliance-operator-scans","compliance-applying-resource-requests-and-limits_compliance-operator-scans","compliance-scheduling-pods-with-resource-requests_compliance-operator-scans","understanding-compliance-operator","compliance_profiles_understanding-compliance","compliance-operator-understanding","compliance-profilebundle_managing-compliance","compliance-update_managing-compliance","additional-resources_managing-the-compliance-operator","compliance-operator-tailor","compliance-new-tailored-profiles_compliance-tailor","compliance-tailored-profiles_compliance-tailor","compliance-operator-raw-results","compliance-results_compliance-raw-results","compliance-operator-remediation","filtering-compliance-check-results_compliance-remediation","compliance-review_compliance-remediation","compliance-operator-apply-remediation-for-customized-mcp","compliance-evaluate-kubeletconfig-rules_compliance-remediation","compliance-custom-node-pools_compliance-remediation","compliance-kubeletconfig-sub-pool-remediation_compliance-remediation","compliance-applying_compliance-remediation","compliance-manual_compliance-remediation","compliance-updating_compliance-remediation","compliance-unapplying_compliance-remediation","compliance-removing-kubeletconfig_compliance-remediation","compliance-inconsistent_compliance-remediation","additional-resources-9","compliance-operator-advanced","compliance-objects_compliance-advanced","compliance-priorityclass_compliance-advanced","compliance-raw-tailored_compliance-advanced","compliance-rescan_compliance-advanced","compliance-custom-storage_compliance-advanced","using-custom-result-storage-values_compliance-advanced","installing-compliance-operator-cli_compliance-advanced","automatically-update-remediations_compliance-advanced","compliance-custom-scc_compliance-advanced","additional-resources_compliance-operator-advanced","compliance-operator-troubleshooting","compliance-anatomy_compliance-troubleshooting","compliance-anatomy-compliance-sources_compliance-troubleshooting","compliance-anatomy-scan-setting-scan-binding-lifecycle_compliance-troubleshooting","compliance-suite-lifecycle-debugging_compliance-troubleshooting","compliance-scan-lifecycle-debugging_compliance-troubleshooting","compliance-scan-pending-phase_compliance-troubleshooting","compliance-scan-launching-phase_compliance-troubleshooting","compliance-scan-running-phase_compliance-troubleshooting","compliance-scan-aggregating-phase_compliance-troubleshooting","compliance-scan-done-phase_compliance-troubleshooting","compliance-remediation-lifecycle-debugging_compliance-troubleshooting","compliance-operator-useful-labels_compliance-troubleshooting","compliance-increasing-operator-limits_compliance-troubleshooting","operator-resource-constraints_compliance-troubleshooting","support_compliance-troubleshooting","compliance-operator-uninstallation_compliance-troubleshooting","compliance-operator-uninstall_compliance-operator-uninstallation","using-oc-compliance-plug-in","installing-oc-compliance_oc-compliance-plug-in-understanding","fetching-raw-results_oc-compliance-plug-in-understanding","re-running-scans_oc-compliance-plug-in-understanding","using-scan-setting-bindings_oc-compliance-plug-in-understanding","printing-controls_oc-compliance-plug-in-understanding","fetching-compliance-remediation-details_oc-compliance-plug-in-understanding","viewing-compliance-remediation-details_oc-compliance-plug-in-understanding","custom-resource-definitions","custom-resource-definitions-workflow_compliance-crd","defining-compliance-scan-requirements_compliance-crd","profile-bundle-object_compliance-crd","profile-object_compliance-crd","rule-object_compliance-crd","tailored-profile-object_compliance-crd","configure-compliance-scan-settings_compliance-crd","scan-setting-object_compliance-crd","process-compliance-requirements-with-compliance-settings_compliance-crd","scan-setting-binding-object_compliance-crd","track-compliance-scans_compliance-crd","compliance-suite-object_compliance-crd","advance-compliance-scan-object_compliance-crd","view-compliance-results_compliance-crd","compliance-check-result_compliance-crd","compliance-remediation-object_compliance-crd","/documentation/openshift_container_platform/4.8/html/security_and_compliance/compliance-operator",{"title":804,"visible":10,"weight":453,"urlFragment":805,"anchor":16,"singlePageAnchor":805,"subChapters":806,"url":856,"docTitle":484},"File Integrity Operator","file-integrity-operator",[807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855],"file-integrity-operator-release-notes","file-integrity-operator-release-notes-1-0-0","file-integrity-operator-release-notes-0-1-32","file-integrity-operator-0-1-32-bug-fixes","file-integrity-operator-release-notes-0-1-30","file-integrity-operator-0-1-30-bug-fixes","file-integrity-operator-release-notes-0-1-24","file-integrity-operator-0-1-24-new-features-and-enhancements","openshift-file-integrity-operator-0-1-24-bug-fixes","file-integrity-operator-release-notes-0-1-22","openshift-file-integrity-operator-0-1-22-bug-fixes","file-integrity-operator-release-notes-0-1-21","file-integrity-operator-0-1-21-new-features-and-enhancements","openshift-file-integrity-operator-0-1-21-bug-fixes","file-integrity-operator-release-notes_additional-resources","installing-file-integrity-operator","installing-file-integrity-operator-using-web-console_file-integrity-operator-installation","installing-file-integrity-operator-using-cli_file-integrity-operator-installation","additional-resources-installing-the-file-integrity-operator","file-integrity-operator-updating","olm-preparing-upgrade_file-integrity-operator-updating","olm-changing-update-channel_file-integrity-operator-updating","olm-approving-pending-upgrade_file-integrity-operator-updating","understanding-file-integrity-operator","understanding-file-integrity-custom-resource_file-integrity-operator","checking-the-file-integrity-CR-status_file-integrity-operator","file-integrity-CR-phases_file-integrity-operator","understanding-file-integrity-node-statuses-object_file-integrity-operator","file-integrity-node-status-types_file-integrity-operator","file-integrity-node-status-success_file-integrity-operator","file-integrity-node-status-failure_file-integrity-operator","file-integrity-events_file-integrity-operator","configuring-file-integrity-operator","viewing-file-integrity-object-attributes_file-integrity-operator","important-file-integrity-object-attributes_file-integrity-operator","file-integrity-examine-default-config_file-integrity-operator","file-integrity-understanding-default-config_file-integrity-operator","file-integrity-operator-supplying-custom-aide-config_file-integrity-operator","file-integrity-operator-defining-custom-config_file-integrity-operator","file-integrity-operator-changing-custom-config_file-integrity-operator","file-integrity-operator-advanced-usage","file-integrity-operator-reinitializing-database_file-integrity-operator","file-integrity-operator-machine-config-integration_file-integrity-operator","file-integrity-operator-exploring-daemon-sets_file-integrity-operator","troubleshooting-file-integrity-operator","general-troubleshooting","checking-the-aide-configuration","determining-the-fileintegrity-object-s-phase","determining-that-the-daemon-set-s-pods-are-running-on-the-expected-nodes","/documentation/openshift_container_platform/4.8/html/security_and_compliance/file-integrity-operator",{"title":858,"visible":10,"weight":468,"urlFragment":859,"anchor":16,"singlePageAnchor":859,"subChapters":860,"url":866,"docTitle":484},"Viewing audit logs","audit-log-view",[861,862,863,864,865],"nodes-pods-audit-log-basic_audit-log-view","nodes-nodes-audit-log-basic-viewing_audit-log-view","security-audit-log-basic-filtering_audit-log-view","gathering-data-audit-logs_audit-log-view","viewing-audit-logs-additional-resources","/documentation/openshift_container_platform/4.8/html/security_and_compliance/audit-log-view",{"title":868,"visible":10,"weight":869,"urlFragment":870,"anchor":16,"singlePageAnchor":870,"subChapters":871,"url":874,"docTitle":484},"Configuring the audit log policy",9,"audit-log-policy-config",[872,873],"about-audit-log-profiles_audit-log-policy-config","configuring-audit-policy_audit-log-policy-config","/documentation/openshift_container_platform/4.8/html/security_and_compliance/audit-log-policy-config",{"title":876,"visible":10,"weight":877,"urlFragment":878,"anchor":16,"singlePageAnchor":878,"subChapters":879,"url":885,"docTitle":484},"Configuring TLS security profiles",10,"tls-security-profiles",[880,881,882,883,884],"tls-profiles-understanding_tls-security-profiles","tls-profiles-view-details_tls-security-profiles","tls-profiles-ingress-configuring_tls-security-profiles","tls-profiles-kubernetes-configuring_tls-security-profiles","tls-profiles-kubelet-configuring_tls-security-profiles","/documentation/openshift_container_platform/4.8/html/security_and_compliance/tls-security-profiles",{"title":887,"visible":10,"weight":888,"urlFragment":889,"anchor":16,"singlePageAnchor":889,"subChapters":890,"url":896,"docTitle":484},"Configuring seccomp profiles",11,"seccomp-profiles",[891,892,893,894,895],"configuring-default-seccomp-profile_configuring-seccomp-profiles","custom-seccomp-profile","setting-custom-seccomp-profile_configuring-seccomp-profiles","applying-custom-seccomp-profile_configuring-seccomp-profiles","additional-resources_configuring-seccomp-profiles","/documentation/openshift_container_platform/4.8/html/security_and_compliance/seccomp-profiles",{"title":898,"visible":10,"weight":899,"urlFragment":900,"anchor":16,"singlePageAnchor":900,"subChapters":901,"url":903,"docTitle":484},"Allowing JavaScript-based access to the API server from additional hosts",12,"allowing-javascript-based-access-api-server",[902],"auth-allowing-javascript-access-api-server_auth-allowed-origins","/documentation/openshift_container_platform/4.8/html/security_and_compliance/allowing-javascript-based-access-api-server",{"title":905,"visible":10,"weight":906,"urlFragment":907,"anchor":16,"singlePageAnchor":907,"subChapters":908,"url":912,"docTitle":484},"Encrypting etcd data",13,"encrypting-etcd",[909,910,911],"about-etcd_encrypting-etcd","enabling-etcd-encryption_encrypting-etcd","disabling-etcd-encryption_encrypting-etcd","/documentation/openshift_container_platform/4.8/html/security_and_compliance/encrypting-etcd",{"title":914,"visible":10,"weight":915,"urlFragment":916,"anchor":16,"singlePageAnchor":916,"subChapters":917,"url":920,"docTitle":484},"Scanning pods for vulnerabilities",14,"pod-vulnerability-scan",[918,919],"security-pod-scan-cso_pod-vulnerability-scan","security-pod-scan-query-cli_pod-vulnerability-scan","/documentation/openshift_container_platform/4.8/html/security_and_compliance/pod-vulnerability-scan",{"title":922,"visible":10,"categoryName":10,"sections":923},"Install",[924],{"title":925,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":926,"url":927,"docTitle":928,"sections":929},"Installing",[],"/documentation/openshift_container_platform/4.8/html/installing/index","installing",[930,939,952,974,1273,1477,1794,1975,2059,2159,2267,2373,2676,2797,3062,3330,3386,3412,3427,3439],{"title":931,"visible":10,"weight":23,"urlFragment":932,"anchor":16,"singlePageAnchor":932,"subChapters":933,"url":938,"docTitle":928},"OpenShift Container Platform installation overview","ocp-installation-overview",[934,935,936,937],"installation-overview_ocp-installation-overview","installation-process_ocp-installation-overview","ipi-verifying-nodes-after-installation_ocp-installation-overview","supported-platforms-for-openshift-clusters_ocp-installation-overview","/documentation/openshift_container_platform/4.8/html/installing/ocp-installation-overview",{"title":940,"visible":10,"weight":35,"urlFragment":941,"anchor":16,"singlePageAnchor":941,"subChapters":942,"url":951,"docTitle":928},"Selecting a cluster installation method and preparing it for users","installing-preparing",[943,944,945,946,947,948,949,950],"installing-preparing-selecting-cluster-type","installing-preparing-install-manage","installing-preparing-migrate","installing-preparing-existing-components","installing-preparing-security","installing-preparing-cluster-for-users","installing-preparing-cluster-for-workloads","supported-installation-methods-for-different-platforms","/documentation/openshift_container_platform/4.8/html/installing/installing-preparing",{"title":953,"visible":10,"weight":46,"urlFragment":954,"anchor":16,"singlePageAnchor":954,"subChapters":955,"url":973,"docTitle":928},"Mirroring images for a disconnected installation","installing-mirroring-installation-images",[956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972],"prerequisites_installing-mirroring-installation-images","installation-about-mirror-registry_installing-mirroring-installation-images","installing-preparing-mirror","cli-installing-cli_installing-mirroring-installation-images","installation-adding-registry-pull-secret_installing-mirroring-installation-images","mirror-registry","mirror-registry-introduction_installing-mirroring-installation-images","mirror-registry-localhost_installing-mirroring-installation-images","mirror-registry-remote_installing-mirroring-installation-images","upgrading-mirror-registry_installing-mirroring-installation-images","uninstalling-mirror-registry_installing-mirroring-installation-images","mirror-registry-flags_installing-mirroring-installation-images","installation-mirror-repository_installing-mirroring-installation-images","installing-preparing-samples-operator","installation-images-samples-disconnected-mirroring-assist_installing-mirroring-installation-images","next-steps","restricted-networks-additional-resources","/documentation/openshift_container_platform/4.8/html/installing/installing-mirroring-installation-images",{"title":975,"visible":10,"weight":68,"urlFragment":976,"anchor":16,"singlePageAnchor":976,"subChapters":977,"url":1272,"docTitle":928},"Installing on AWS","installing-on-aws",[978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271],"preparing-to-install-on-aws","preparing-to-install-on-aws-prerequisites","requirements-for-installing-ocp-on-aws","choosing-an-method-to-install-ocp-on-aws","choosing-an-method-to-install-ocp-on-aws-installer-provisioned","choosing-an-method-to-install-ocp-on-aws-user-provisioned","preparing-to-install-on-aws-next-steps","installing-aws-account","installation-aws-route53_installing-aws-account","nw-endpoint-route53_installing-aws-account","installation-aws-limits_installing-aws-account","installation-aws-permissions_installing-aws-account","installation-aws-iam-user_installing-aws-account","iam-policies-and-aws-authentication_installing-aws-account","installation-aws-permissions-iam-roles_installing-aws-account","specify-an-existing-iam-role_installing-aws-account","create-custom-permissions-for-iam-instance-profiles_installing-aws-account","installation-aws-marketplace_installing-aws-account","installation-aws-regions_installing-aws-account","next-steps-2","manually-creating-iam-aws","alternatives-to-storing-admin-secrets-in-kube-system_manually-creating-iam-aws","manually-create-iam_manually-creating-iam-aws","manually-maintained-credentials-upgrade_manually-creating-iam-aws","mint-mode_manually-creating-iam-aws","mint-mode-with-removal-or-rotation-of-admin-credential_manually-creating-iam-aws","manually-creating-iam-aws-next-steps","installing-aws-default","prerequisites","cluster-entitlements_installing-aws-default","ssh-agent-using_installing-aws-default","installation-obtaining-installer_installing-aws-default","installation-launching-installer_installing-aws-default","cli-installing-cli_installing-aws-default","cli-logging-in-kubeadmin_installing-aws-default","logging-in-by-using-the-web-console_installing-aws-default","cluster-telemetry_installing-aws-default","next-steps-3","installing-aws-customizations","prerequisites-2","cluster-entitlements_installing-aws-customizations","ssh-agent-using_installing-aws-customizations","installation-aws-marketplace-subscribe_installing-aws-customizations","installation-obtaining-installer_installing-aws-customizations","installation-initializing_installing-aws-customizations","installation-configuration-parameters_installing-aws-customizations","installation-configuration-parameters-required_installing-aws-customizations","installation-configuration-parameters-network_installing-aws-customizations","installation-configuration-parameters-optional_installing-aws-customizations","installation-configuration-parameters-optional-aws_installing-aws-customizations","installation-supported-aws-machine-types_installing-aws-customizations","installation-aws-config-yaml_installing-aws-customizations","installation-configure-proxy_installing-aws-customizations","installation-launching-installer_installing-aws-customizations","cli-installing-cli_installing-aws-customizations","cli-logging-in-kubeadmin_installing-aws-customizations","logging-in-by-using-the-web-console_installing-aws-customizations","cluster-telemetry_installing-aws-customizations","next-steps-4","installing-aws-network-customizations","prerequisites-3","cluster-entitlements_installing-aws-network-customizations","ssh-agent-using_installing-aws-network-customizations","installation-obtaining-installer_installing-aws-network-customizations","nw-network-config_installing-aws-network-customizations","installation-initializing_installing-aws-network-customizations","installation-configuration-parameters_installing-aws-network-customizations","installation-configuration-parameters-required_installing-aws-network-customizations","installation-configuration-parameters-network_installing-aws-network-customizations","installation-configuration-parameters-optional_installing-aws-network-customizations","installation-configuration-parameters-optional-aws_installing-aws-network-customizations","installation-supported-aws-machine-types_installing-aws-network-customizations","installation-aws-config-yaml_installing-aws-network-customizations","installation-configure-proxy_installing-aws-network-customizations","nw-operator-cr_installing-aws-network-customizations","nw-operator-cr-cno-object_installing-aws-network-customizations","modifying-nwoperator-config-startup_installing-aws-network-customizations","nw-aws-nlb-new-cluster_installing-aws-network-customizations","configuring-hybrid-ovnkubernetes_installing-aws-network-customizations","installation-launching-installer_installing-aws-network-customizations","cli-installing-cli_installing-aws-network-customizations","cli-logging-in-kubeadmin_installing-aws-network-customizations","logging-in-by-using-the-web-console_installing-aws-network-customizations","cluster-telemetry_installing-aws-network-customizations","next-steps-5","installing-restricted-networks-aws-installer-provisioned","prerequisites_installing-restricted-networks-aws-installer-provisioned","installation-about-restricted-networks_installing-restricted-networks-aws-installer-provisioned","installation-restricted-network-limits_installing-restricted-networks-aws-installer-provisioned","installation-custom-aws-vpc_installing-restricted-networks-aws-installer-provisioned","installation-custom-aws-vpc-requirements_installing-restricted-networks-aws-installer-provisioned","installation-custom-aws-vpc-validation_installing-restricted-networks-aws-installer-provisioned","installation-about-custom-aws-permissions_installing-restricted-networks-aws-installer-provisioned","installation-custom-aws-vpc-isolation_installing-restricted-networks-aws-installer-provisioned","cluster-entitlements_installing-restricted-networks-aws-installer-provisioned","ssh-agent-using_installing-restricted-networks-aws-installer-provisioned","installation-initializing_installing-restricted-networks-aws-installer-provisioned","installation-configuration-parameters_installing-restricted-networks-aws-installer-provisioned","installation-configuration-parameters-required_installing-restricted-networks-aws-installer-provisioned","installation-configuration-parameters-network_installing-restricted-networks-aws-installer-provisioned","installation-configuration-parameters-optional_installing-restricted-networks-aws-installer-provisioned","installation-configuration-parameters-optional-aws_installing-restricted-networks-aws-installer-provisioned","installation-aws-config-yaml_installing-restricted-networks-aws-installer-provisioned","installation-configure-proxy_installing-restricted-networks-aws-installer-provisioned","installation-launching-installer_installing-restricted-networks-aws-installer-provisioned","cli-installing-cli_installing-restricted-networks-aws-installer-provisioned","cli-logging-in-kubeadmin_installing-restricted-networks-aws-installer-provisioned","olm-restricted-networks-operatorhub_installing-restricted-networks-aws-installer-provisioned","cluster-telemetry_installing-restricted-networks-aws-installer-provisioned","next-steps_installing-restricted-networks-aws-installer-provisioned","installing-aws-vpc","prerequisites-4","installation-custom-aws-vpc_installing-aws-vpc","installation-custom-aws-vpc-requirements_installing-aws-vpc","installation-custom-aws-vpc-validation_installing-aws-vpc","installation-about-custom-aws-permissions_installing-aws-vpc","installation-custom-aws-vpc-isolation_installing-aws-vpc","cluster-entitlements_installing-aws-vpc","ssh-agent-using_installing-aws-vpc","installation-obtaining-installer_installing-aws-vpc","installation-initializing_installing-aws-vpc","installation-configuration-parameters_installing-aws-vpc","installation-configuration-parameters-required_installing-aws-vpc","installation-configuration-parameters-network_installing-aws-vpc","installation-configuration-parameters-optional_installing-aws-vpc","installation-configuration-parameters-optional-aws_installing-aws-vpc","installation-supported-aws-machine-types_installing-aws-vpc","installation-aws-config-yaml_installing-aws-vpc","installation-configure-proxy_installing-aws-vpc","installation-launching-installer_installing-aws-vpc","cli-installing-cli_installing-aws-vpc","cli-logging-in-kubeadmin_installing-aws-vpc","logging-in-by-using-the-web-console_installing-aws-vpc","cluster-telemetry_installing-aws-vpc","next-steps-6","installing-aws-private","prerequisites-5","private-clusters-default_installing-aws-private","private-clusters-about-aws_installing-aws-private","private-clusters-limitations-aws_installing-aws-private","installation-custom-aws-vpc_installing-aws-private","installation-custom-aws-vpc-requirements_installing-aws-private","installation-custom-aws-vpc-validation_installing-aws-private","installation-about-custom-aws-permissions_installing-aws-private","installation-custom-aws-vpc-isolation_installing-aws-private","cluster-entitlements_installing-aws-private","ssh-agent-using_installing-aws-private","installation-obtaining-installer_installing-aws-private","installation-initializing-manual_installing-aws-private","installation-configuration-parameters_installing-aws-private","installation-configuration-parameters-required_installing-aws-private","installation-configuration-parameters-network_installing-aws-private","installation-configuration-parameters-optional_installing-aws-private","installation-configuration-parameters-optional-aws_installing-aws-private","installation-supported-aws-machine-types_installing-aws-private","installation-aws-config-yaml_installing-aws-private","installation-configure-proxy_installing-aws-private","installation-launching-installer_installing-aws-private","cli-installing-cli_installing-aws-private","cli-logging-in-kubeadmin_installing-aws-private","logging-in-by-using-the-web-console_installing-aws-private","cluster-telemetry_installing-aws-private","next-steps-7","installing-aws-government-region","prerequisites-6","installation-aws-about-government-region_installing-aws-government-region","private-clusters-default_installing-aws-government-region","private-clusters-about-aws_installing-aws-government-region","private-clusters-limitations-aws_installing-aws-government-region","installation-custom-aws-vpc_installing-aws-government-region","installation-custom-aws-vpc-requirements_installing-aws-government-region","installation-custom-aws-vpc-validation_installing-aws-government-region","installation-about-custom-aws-permissions_installing-aws-government-region","installation-custom-aws-vpc-isolation_installing-aws-government-region","cluster-entitlements_installing-aws-government-region","ssh-agent-using_installing-aws-government-region","installation-aws-marketplace-subscribe_installing-aws-government-region","installation-obtaining-installer_installing-aws-government-region","installation-initializing-manual_installing-aws-government-region","installation-configuration-parameters_installing-aws-government-region","installation-configuration-parameters-required_installing-aws-government-region","installation-configuration-parameters-network_installing-aws-government-region","installation-configuration-parameters-optional_installing-aws-government-region","installation-configuration-parameters-optional-aws_installing-aws-government-region","installation-supported-aws-machine-types_installing-aws-government-region","installation-aws-config-yaml_installing-aws-government-region","installation-aws-regions-with-no-ami_installing-aws-government-region","installation-aws-upload-custom-rhcos-ami_installing-aws-government-region","installation-configure-proxy_installing-aws-government-region","installation-launching-installer_installing-aws-government-region","cli-installing-cli_installing-aws-government-region","cli-logging-in-kubeadmin_installing-aws-government-region","logging-in-by-using-the-web-console_installing-aws-government-region","cluster-telemetry_installing-aws-government-region","next-steps-8","installing-aws-user-infra","prerequisites-7","cluster-entitlements_installing-aws-user-infra","installation-aws-user-infra-requirements_installing-aws-user-infra","installation-aws-user-infra-other-infrastructure_installing-aws-user-infra","installation-aws-user-infra-cluster-machines_installing-aws-user-infra","csr-management_installing-aws-user-infra","installation-supported-aws-machine-types_installing-aws-user-infra","installation-aws-permissions_installing-aws-user-infra","installation-aws-marketplace-subscribe_installing-aws-user-infra","installation-obtaining-installer_installing-aws-user-infra","ssh-agent-using_installing-aws-user-infra","installation-user-infra-generate_installing-aws-user-infra","installation-disk-partitioning-upi-templates_installing-aws-user-infra","installation-generate-aws-user-infra-install-config_installing-aws-user-infra","installation-configure-proxy_installing-aws-user-infra","installation-user-infra-generate-k8s-manifest-ignition_installing-aws-user-infra","installation-extracting-infraid_installing-aws-user-infra","installation-creating-aws-vpc_installing-aws-user-infra","installation-cloudformation-vpc_installing-aws-user-infra","installation-creating-aws-dns_installing-aws-user-infra","installation-cloudformation-dns_installing-aws-user-infra","installation-creating-aws-security_installing-aws-user-infra","installation-cloudformation-security_installing-aws-user-infra","installation-aws-ami-stream-metadata_installing-aws-user-infra","installation-aws-user-infra-rhcos-ami_installing-aws-user-infra","installation-aws-regions-with-no-ami_installing-aws-user-infra","installation-aws-upload-custom-rhcos-ami_installing-aws-user-infra","installation-creating-aws-bootstrap_installing-aws-user-infra","installation-cloudformation-bootstrap_installing-aws-user-infra","installation-creating-aws-control-plane_installing-aws-user-infra","installation-cloudformation-control-plane_installing-aws-user-infra","installation-creating-aws-worker_installing-aws-user-infra","installation-cloudformation-worker_installing-aws-user-infra","installation-aws-user-infra-bootstrap_installing-aws-user-infra","cli-installing-cli_installing-aws-user-infra","cli-logging-in-kubeadmin_installing-aws-user-infra","installation-approve-csrs_installing-aws-user-infra","installation-operators-config_installing-aws-user-infra","installation-registry-storage-config_installing-aws-user-infra","registry-configuring-storage-aws-user-infra_installing-aws-user-infra","installation-registry-storage-non-production_installing-aws-user-infra","installation-aws-user-infra-delete-bootstrap_installing-aws-user-infra","installation-create-ingress-dns-records_installing-aws-user-infra","installation-aws-user-infra-installation_installing-aws-user-infra","logging-in-by-using-the-web-console_installing-aws-user-infra","cluster-telemetry_installing-aws-user-infra","installing-aws-user-infra-additional-resources","installing-aws-user-infra-next-steps","installing-restricted-networks-aws","prerequisites-8","installation-about-restricted-networks_installing-restricted-networks-aws","installation-restricted-network-limits_installing-restricted-networks-aws","cluster-entitlements_installing-restricted-networks-aws","installation-aws-user-infra-requirements_installing-restricted-networks-aws","installation-aws-user-infra-other-infrastructure_installing-restricted-networks-aws","installation-aws-user-infra-cluster-machines_installing-restricted-networks-aws","csr-management_installing-restricted-networks-aws","installation-supported-aws-machine-types_installing-restricted-networks-aws","installation-aws-permissions_installing-restricted-networks-aws","ssh-agent-using_installing-restricted-networks-aws","installation-user-infra-generate_installing-restricted-networks-aws","installation-disk-partitioning-upi-templates_installing-restricted-networks-aws","installation-generate-aws-user-infra-install-config_installing-restricted-networks-aws","installation-configure-proxy_installing-restricted-networks-aws","installation-user-infra-generate-k8s-manifest-ignition_installing-restricted-networks-aws","installation-extracting-infraid_installing-restricted-networks-aws","installation-creating-aws-vpc_installing-restricted-networks-aws","installation-cloudformation-vpc_installing-restricted-networks-aws","installation-creating-aws-dns_installing-restricted-networks-aws","installation-cloudformation-dns_installing-restricted-networks-aws","installation-creating-aws-security_installing-restricted-networks-aws","installation-cloudformation-security_installing-restricted-networks-aws","installation-aws-ami-stream-metadata_installing-restricted-networks-aws","installation-aws-user-infra-rhcos-ami_installing-restricted-networks-aws","installation-creating-aws-bootstrap_installing-restricted-networks-aws","installation-cloudformation-bootstrap_installing-restricted-networks-aws","installation-creating-aws-control-plane_installing-restricted-networks-aws","installation-cloudformation-control-plane_installing-restricted-networks-aws","installation-creating-aws-worker_installing-restricted-networks-aws","installation-cloudformation-worker_installing-restricted-networks-aws","installation-aws-user-infra-bootstrap_installing-restricted-networks-aws","cli-logging-in-kubeadmin_installing-restricted-networks-aws","installation-approve-csrs_installing-restricted-networks-aws","installation-operators-config_installing-restricted-networks-aws","olm-restricted-networks-operatorhub_installing-restricted-networks-aws","installation-registry-storage-config_installing-restricted-networks-aws","registry-configuring-storage-aws-user-infra_installing-restricted-networks-aws","installation-registry-storage-non-production_installing-restricted-networks-aws","installation-aws-user-infra-delete-bootstrap_installing-restricted-networks-aws","installation-create-ingress-dns-records_installing-restricted-networks-aws","installation-aws-user-infra-installation_installing-restricted-networks-aws","logging-in-by-using-the-web-console_installing-restricted-networks-aws","cluster-telemetry_installing-restricted-networks-aws","installing-restricted-networks-aws-additional-resources","installing-restricted-networks-aws-next-steps","uninstalling-cluster-aws","installation-uninstall-clouds_uninstall-cluster-aws","cco-ccoctl-deleting-sts-resources_uninstall-cluster-aws","/documentation/openshift_container_platform/4.8/html/installing/installing-on-aws",{"title":1274,"visible":10,"weight":435,"urlFragment":1275,"anchor":16,"singlePageAnchor":1275,"subChapters":1276,"url":1476,"docTitle":928},"Installing on Azure","installing-on-azure",[1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475],"preparing-to-install-on-azure","preparing-to-install-on-azure-prerequisites","requirements-for-installing-ocp-on-azure","choosing-an-method-to-install-ocp-on-azure","choosing-an-method-to-install-ocp-on-azure-installer-provisioned","choosing-an-method-to-install-ocp-on-azure-user-provisioned","preparing-to-install-on-azure-next-steps","installing-azure-account","installation-azure-limits_installing-azure-account","installation-azure-network-config_installing-azure-account","installation-azure-increasing-limits_installing-azure-account","installation-azure-permissions_installing-azure-account","installation-azure-service-principal_installing-azure-account","installation-azure-marketplace_installing-azure-account","installation-azure-regions_installing-azure-account","next-steps-9","manually-creating-iam-azure","alternatives-to-storing-admin-secrets-in-kube-system_manually-creating-iam-azure","manually-create-iam_manually-creating-iam-azure","manually-maintained-credentials-upgrade_manually-creating-iam-azure","manually-creating-iam-azure-next-steps","installing-azure-default","prerequisites-9","cluster-entitlements_installing-azure-default","ssh-agent-using_installing-azure-default","installation-obtaining-installer_installing-azure-default","installation-launching-installer_installing-azure-default","cli-installing-cli_installing-azure-default","cli-logging-in-kubeadmin_installing-azure-default","cluster-telemetry_installing-azure-default","next-steps-10","installing-azure-customizations","prerequisites-10","cluster-entitlements_installing-azure-customizations","ssh-agent-using_installing-azure-customizations","installation-azure-marketplace-subscribe_installing-azure-customizations","installation-obtaining-installer_installing-azure-customizations","installation-initializing_installing-azure-customizations","installation-configuration-parameters_installing-azure-customizations","installation-configuration-parameters-required_installing-azure-customizations","installation-configuration-parameters-network_installing-azure-customizations","installation-configuration-parameters-optional_installing-azure-customizations","installation-configuration-parameters-additional-azure_installing-azure-customizations","installation-azure-config-yaml_installing-azure-customizations","installation-configure-proxy_installing-azure-customizations","installation-azure-marketplace-manifests_installing-azure-customizations","installation-launching-installer_installing-azure-customizations","cli-installing-cli_installing-azure-customizations","cli-logging-in-kubeadmin_installing-azure-customizations","cluster-telemetry_installing-azure-customizations","next-steps-11","installing-azure-network-customizations","prerequisites-11","cluster-entitlements_installing-azure-network-customizations","ssh-agent-using_installing-azure-network-customizations","installation-obtaining-installer_installing-azure-network-customizations","installation-initializing_installing-azure-network-customizations","installation-configuration-parameters_installing-azure-network-customizations","installation-configuration-parameters-required_installing-azure-network-customizations","installation-configuration-parameters-network_installing-azure-network-customizations","installation-configuration-parameters-optional_installing-azure-network-customizations","installation-configuration-parameters-additional-azure_installing-azure-network-customizations","installation-azure-config-yaml_installing-azure-network-customizations","installation-configure-proxy_installing-azure-network-customizations","nw-network-config_installing-azure-network-customizations","modifying-nwoperator-config-startup_installing-azure-network-customizations","nw-operator-cr_installing-azure-network-customizations","nw-operator-cr-cno-object_installing-azure-network-customizations","configuring-hybrid-ovnkubernetes_installing-azure-network-customizations","installation-launching-installer_installing-azure-network-customizations","cli-installing-cli_installing-azure-network-customizations","cli-logging-in-kubeadmin_installing-azure-network-customizations","cluster-telemetry_installing-azure-network-customizations","next-steps-12","installing-azure-vnet","prerequisites-12","installation-about-custom-azure-vnet_installing-azure-vnet","installation-about-custom-azure-vnet-requirements_installing-azure-vnet","installation-about-custom-azure-vnet-nsg-requirements_installing-azure-vnet","installation-about-custom-azure-permissions_installing-azure-vnet","installation-about-custom-azure-vnet-isolation_installing-azure-vnet","cluster-entitlements_installing-azure-vnet","ssh-agent-using_installing-azure-vnet","installation-obtaining-installer_installing-azure-vnet","installation-initializing_installing-azure-vnet","installation-configuration-parameters_installing-azure-vnet","installation-configuration-parameters-required_installing-azure-vnet","installation-configuration-parameters-network_installing-azure-vnet","installation-configuration-parameters-optional_installing-azure-vnet","installation-configuration-parameters-additional-azure_installing-azure-vnet","installation-azure-config-yaml_installing-azure-vnet","installation-configure-proxy_installing-azure-vnet","installation-launching-installer_installing-azure-vnet","cli-installing-cli_installing-azure-vnet","cli-logging-in-kubeadmin_installing-azure-vnet","cluster-telemetry_installing-azure-vnet","next-steps-13","installing-azure-private","prerequisites-13","private-clusters-default_installing-azure-private","private-clusters-about-azure_installing-azure-private","private-clusters-limitations-azure_installing-azure-private","installation-azure-user-defined-routing_installing-azure-private","installation-about-custom-azure-vnet_installing-azure-private","installation-about-custom-azure-vnet-requirements_installing-azure-private","installation-about-custom-azure-vnet-nsg-requirements_installing-azure-private","installation-about-custom-azure-permissions_installing-azure-private","installation-about-custom-azure-vnet-isolation_installing-azure-private","cluster-entitlements_installing-azure-private","ssh-agent-using_installing-azure-private","installation-obtaining-installer_installing-azure-private","installation-initializing-manual_installing-azure-private","installation-configuration-parameters_installing-azure-private","installation-configuration-parameters-required_installing-azure-private","installation-configuration-parameters-network_installing-azure-private","installation-configuration-parameters-optional_installing-azure-private","installation-configuration-parameters-additional-azure_installing-azure-private","installation-azure-config-yaml_installing-azure-private","installation-configure-proxy_installing-azure-private","installation-launching-installer_installing-azure-private","cli-installing-cli_installing-azure-private","cli-logging-in-kubeadmin_installing-azure-private","cluster-telemetry_installing-azure-private","next-steps-14","installing-azure-government-region","prerequisites-14","installation-azure-about-government-region_installing-azure-government-region","private-clusters-default_installing-azure-government-region","private-clusters-about-azure_installing-azure-government-region","private-clusters-limitations-azure_installing-azure-government-region","installation-azure-user-defined-routing_installing-azure-government-region","installation-about-custom-azure-vnet_installing-azure-government-region","installation-about-custom-azure-vnet-requirements_installing-azure-government-region","installation-about-custom-azure-vnet-nsg-requirements_installing-azure-government-region","installation-about-custom-azure-permissions_installing-azure-government-region","installation-about-custom-azure-vnet-isolation_installing-azure-government-region","cluster-entitlements_installing-azure-government-region","ssh-agent-using_installing-azure-government-region","installation-obtaining-installer_installing-azure-government-region","installation-initializing-manual_installing-azure-government-region","installation-configuration-parameters_installing-azure-government-region","installation-configuration-parameters-required_installing-azure-government-region","installation-configuration-parameters-network_installing-azure-government-region","installation-configuration-parameters-optional_installing-azure-government-region","installation-configuration-parameters-additional-azure_installing-azure-government-region","installation-azure-config-yaml_installing-azure-government-region","installation-configure-proxy_installing-azure-government-region","installation-launching-installer_installing-azure-government-region","cli-installing-cli_installing-azure-government-region","cli-logging-in-kubeadmin_installing-azure-government-region","cluster-telemetry_installing-azure-government-region","next-steps-15","installing-azure-user-infra","prerequisites-15","cluster-entitlements_installing-azure-user-infra","installation-azure-user-infra-config-project","installation-azure-limits_installing-azure-user-infra","installation-azure-network-config_installing-azure-user-infra","installation-azure-increasing-limits_installing-azure-user-infra","csr-management_installing-azure-user-infra","installation-azure-permissions_installing-azure-user-infra","installation-azure-service-principal_installing-azure-user-infra","installation-azure-regions_installing-azure-user-infra","installation-azure-marketplace-subscribe_installing-azure-user-infra","installation-obtaining-installer_installing-azure-user-infra","ssh-agent-using_installing-azure-user-infra","installation-user-infra-generate_installing-azure-user-infra","installation-disk-partitioning-upi-templates_installing-azure-user-infra","installation-initializing_installing-azure-user-infra","installation-configure-proxy_installing-azure-user-infra","installation-user-infra-exporting-common-variables-arm-templates_installing-azure-user-infra","installation-user-infra-generate-k8s-manifest-ignition_installing-azure-user-infra","installation-azure-create-resource-group-and-identity_installing-azure-user-infra","installation-azure-user-infra-uploading-rhcos_installing-azure-user-infra","installation-azure-create-dns-zones_installing-azure-user-infra","installation-creating-azure-vnet_installing-azure-user-infra","installation-arm-vnet_installing-azure-user-infra","installation-azure-user-infra-deploying-rhcos_installing-azure-user-infra","installation-arm-image-storage_installing-azure-user-infra","installation-network-user-infra_installing-azure-user-infra","installation-host-names-dhcp-user-infra_installing-azure-user-infra","installation-network-connectivity-user-infra_installing-azure-user-infra","installation-creating-azure-dns_installing-azure-user-infra","installation-arm-dns_installing-azure-user-infra","installation-creating-azure-bootstrap_installing-azure-user-infra","installation-arm-bootstrap_installing-azure-user-infra","installation-creating-azure-control-plane_installing-azure-user-infra","installation-arm-control-plane_installing-azure-user-infra","installation-azure-user-infra-wait-for-bootstrap_installing-azure-user-infra","installation-creating-azure-worker_installing-azure-user-infra","installation-arm-worker_installing-azure-user-infra","cli-installing-cli_installing-azure-user-infra","cli-logging-in-kubeadmin_installing-azure-user-infra","installation-approve-csrs_installing-azure-user-infra","installation-azure-create-ingress-dns-records_installing-azure-user-infra","installation-azure-user-infra-completing_installing-azure-user-infra","cluster-telemetry_installing-azure-user-infra","uninstalling-cluster-azure","installation-uninstall-clouds_uninstall-cluster-azure","/documentation/openshift_container_platform/4.8/html/installing/installing-on-azure",{"title":1478,"visible":10,"weight":453,"urlFragment":1479,"anchor":16,"singlePageAnchor":1479,"subChapters":1480,"url":1793,"docTitle":928},"Installing on GCP","installing-on-gcp",[1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792],"preparing-to-install-on-gcp","preparing-to-install-on-gcp-prerequisites","requirements-for-installing-ocp-on-gcp","choosing-an-method-to-install-ocp-on-gcp","choosing-an-method-to-install-ocp-on-gcp-installer-provisioned","choosing-an-method-to-install-ocp-on-gcp-user-provisioned","preparing-to-install-on-gcp-next-steps","installing-gcp-account","installation-gcp-project_installing-gcp-account","installation-gcp-enabling-api-services_installing-gcp-account","installation-gcp-dns_installing-gcp-account","installation-gcp-limits_installing-gcp-account","installation-gcp-service-account_installing-gcp-account","installation-gcp-permissions_installing-gcp-account","installation-gcp-regions_installing-gcp-account","next-steps-16","manually-creating-iam-gcp","alternatives-to-storing-admin-secrets-in-kube-system_manually-creating-iam-gcp","manually-create-iam_manually-creating-iam-gcp","manually-maintained-credentials-upgrade_manually-creating-iam-gcp","mint-mode_manually-creating-iam-gcp","mint-mode-with-removal-or-rotation-of-admin-credential_manually-creating-iam-gcp","manually-creating-iam-gcp-next-steps","installing-gcp-default","prerequisites-16","cluster-entitlements_installing-gcp-default","ssh-agent-using_installing-gcp-default","installation-obtaining-installer_installing-gcp-default","installation-launching-installer_installing-gcp-default","cli-installing-cli_installing-gcp-default","cli-logging-in-kubeadmin_installing-gcp-default","cluster-telemetry_installing-gcp-default","next-steps-17","installing-gcp-customizations","prerequisites-17","cluster-entitlements_installing-gcp-customizations","ssh-agent-using_installing-gcp-customizations","installation-obtaining-installer_installing-gcp-customizations","installation-initializing_installing-gcp-customizations","installation-configuration-parameters_installing-gcp-customizations","installation-configuration-parameters-required_installing-gcp-customizations","installation-configuration-parameters-network_installing-gcp-customizations","installation-configuration-parameters-optional_installing-gcp-customizations","installation-configuration-parameters-additional-gcp_installing-gcp-customizations","installation-gcp-config-yaml_installing-gcp-customizations","installation-custom-machine-types_installing-gcp-customizations","installation-configure-proxy_installing-gcp-customizations","installation-gcp-marketplace_installing-gcp-customizations","installation-launching-installer_installing-gcp-customizations","cli-installing-cli_installing-gcp-customizations","cli-logging-in-kubeadmin_installing-gcp-customizations","cluster-telemetry_installing-gcp-customizations","next-steps-18","installing-gcp-network-customizations","prerequisites-18","cluster-entitlements_installing-gcp-network-customizations","ssh-agent-using_installing-gcp-network-customizations","installation-obtaining-installer_installing-gcp-network-customizations","installation-initializing_installing-gcp-network-customizations","installation-configuration-parameters_installing-gcp-network-customizations","installation-configuration-parameters-required_installing-gcp-network-customizations","installation-configuration-parameters-network_installing-gcp-network-customizations","installation-configuration-parameters-optional_installing-gcp-network-customizations","installation-configuration-parameters-additional-gcp_installing-gcp-network-customizations","installation-gcp-config-yaml_installing-gcp-network-customizations","additional-resources","installation-custom-machine-types_installing-gcp-network-customizations","installation-configure-proxy_installing-gcp-network-customizations","nw-network-config_installing-gcp-network-customizations","modifying-nwoperator-config-startup_installing-gcp-network-customizations","nw-operator-cr_installing-gcp-network-customizations","nw-operator-cr-cno-object_installing-gcp-network-customizations","installation-launching-installer_installing-gcp-network-customizations","cli-installing-cli_installing-gcp-network-customizations","cli-logging-in-kubeadmin_installing-gcp-network-customizations","cluster-telemetry_installing-gcp-network-customizations","next-steps-19","installing-restricted-networks-gcp-installer-provisioned","prerequisites_installing-restricted-networks-gcp-installer-provisioned","installation-about-restricted-networks_installing-restricted-networks-gcp-installer-provisioned","installation-restricted-network-limits_installing-restricted-networks-gcp-installer-provisioned","cluster-entitlements_installing-restricted-networks-gcp-installer-provisioned","ssh-agent-using_installing-restricted-networks-gcp-installer-provisioned","installation-initializing_installing-restricted-networks-gcp-installer-provisioned","installation-configuration-parameters_installing-restricted-networks-gcp-installer-provisioned","installation-configuration-parameters-required_installing-restricted-networks-gcp-installer-provisioned","installation-configuration-parameters-network_installing-restricted-networks-gcp-installer-provisioned","installation-configuration-parameters-optional_installing-restricted-networks-gcp-installer-provisioned","installation-configuration-parameters-additional-gcp_installing-restricted-networks-gcp-installer-provisioned","installation-gcp-config-yaml_installing-restricted-networks-gcp-installer-provisioned","nw-gcp-global-access-configuration_installing-restricted-networks-gcp-installer-provisioned","installation-custom-machine-types_installing-restricted-networks-gcp-installer-provisioned","installation-configure-proxy_installing-restricted-networks-gcp-installer-provisioned","installation-launching-installer_installing-restricted-networks-gcp-installer-provisioned","cli-installing-cli_installing-restricted-networks-gcp-installer-provisioned","cli-logging-in-kubeadmin_installing-restricted-networks-gcp-installer-provisioned","olm-restricted-networks-operatorhub_installing-restricted-networks-gcp-installer-provisioned","cluster-telemetry_installing-restricted-networks-gcp-installer-provisioned","next-steps_installing-restricted-networks-gcp-installer-provisioned","installing-gcp-vpc","prerequisites-19","installation-custom-gcp-vpc_installing-gcp-vpc","installation-custom-gcp-vpc-requirements_installing-gcp-vpc","installation-custom-gcp-vpc-validation_installing-gcp-vpc","installation-about-custom-gcp-permissions_installing-gcp-vpc","installation-custom-gcp-vpc-isolation_installing-gcp-vpc","cluster-entitlements_installing-gcp-vpc","ssh-agent-using_installing-gcp-vpc","installation-obtaining-installer_installing-gcp-vpc","installation-initializing_installing-gcp-vpc","installation-configuration-parameters_installing-gcp-vpc","installation-configuration-parameters-required_installing-gcp-vpc","installation-configuration-parameters-network_installing-gcp-vpc","installation-configuration-parameters-optional_installing-gcp-vpc","installation-configuration-parameters-additional-gcp_installing-gcp-vpc","installation-gcp-config-yaml_installing-gcp-vpc","nw-gcp-global-access-configuration_installing-gcp-vpc","additional-resources-2","installation-custom-machine-types_installing-gcp-vpc","installation-configure-proxy_installing-gcp-vpc","installation-launching-installer_installing-gcp-vpc","cli-installing-cli_installing-gcp-vpc","cli-logging-in-kubeadmin_installing-gcp-vpc","cluster-telemetry_installing-gcp-vpc","next-steps-20","installing-gcp-private","prerequisites-20","private-clusters-default_installing-gcp-private","private-clusters-about-gcp_installing-gcp-private","private-clusters-limitations-gcp_installing-gcp-private","installation-about-custom-gcp-vpc_installing-gcp-private","installation-about-custom-gcp-vpcs-requirements_installing-gcp-private","installation-about-custom-gcp-permissions_installing-gcp-private","installation-about-custom-gcp-vpcs-isolation_installing-gcp-private","cluster-entitlements_installing-gcp-private","ssh-agent-using_installing-gcp-private","installation-obtaining-installer_installing-gcp-private","installation-initializing-manual_installing-gcp-private","installation-configuration-parameters_installing-gcp-private","installation-configuration-parameters-required_installing-gcp-private","installation-configuration-parameters-network_installing-gcp-private","installation-configuration-parameters-optional_installing-gcp-private","installation-configuration-parameters-additional-gcp_installing-gcp-private","installation-gcp-config-yaml_installing-gcp-private","nw-gcp-global-access-configuration_installing-gcp-private","additional-resources-3","installation-custom-machine-types_installing-gcp-private","installation-configure-proxy_installing-gcp-private","installation-launching-installer_installing-gcp-private","cli-installing-cli_installing-gcp-private","cli-logging-in-kubeadmin_installing-gcp-private","cluster-telemetry_installing-gcp-private","next-steps-21","installing-gcp-user-infra","prerequisites-21","csr-management_installing-gcp-user-infra","cluster-entitlements_installing-gcp-user-infra","installation-gcp-user-infra-config-project","installation-gcp-project_installing-gcp-user-infra","installation-gcp-enabling-api-services_installing-gcp-user-infra","installation-gcp-dns_installing-gcp-user-infra","installation-gcp-limits_installing-gcp-user-infra","installation-gcp-service-account_installing-gcp-user-infra","installation-gcp-permissions_installing-gcp-user-infra","installation-gcp-regions_installing-gcp-user-infra","installation-gcp-install-cli_installing-gcp-user-infra","installation-user-infra-generate_installing-gcp-user-infra","installation-disk-partitioning-upi-templates_installing-gcp-user-infra","installation-initializing_installing-gcp-user-infra","installation-custom-machine-types_installing-gcp-user-infra","installation-configure-proxy_installing-gcp-user-infra","installation-user-infra-generate-k8s-manifest-ignition_installing-gcp-user-infra","installation-gcp-user-infra-exporting-common-variables","installation-extracting-infraid_installing-gcp-user-infra","installation-user-infra-exporting-common-variables_installing-gcp-user-infra","installation-creating-gcp-vpc_installing-gcp-user-infra","installation-deployment-manager-vpc_installing-gcp-user-infra","installation-network-user-infra_installing-gcp-user-infra","installation-host-names-dhcp-user-infra_installing-gcp-user-infra","installation-network-connectivity-user-infra_installing-gcp-user-infra","installation-creating-gcp-lb_installing-gcp-user-infra","installation-deployment-manager-ext-lb_installing-gcp-user-infra","installation-deployment-manager-int-lb_installing-gcp-user-infra","installation-creating-gcp-private-dns_installing-gcp-user-infra","installation-deployment-manager-private-dns_installing-gcp-user-infra","installation-creating-gcp-firewall-rules-vpc_installing-gcp-user-infra","installation-deployment-manager-firewall-rules_installing-gcp-user-infra","installation-creating-gcp-iam-shared-vpc_installing-gcp-user-infra","installation-deployment-manager-iam-shared-vpc_installing-gcp-user-infra","installation-gcp-user-infra-rhcos_installing-gcp-user-infra","installation-creating-gcp-bootstrap_installing-gcp-user-infra","installation-deployment-manager-bootstrap_installing-gcp-user-infra","installation-creating-gcp-control-plane_installing-gcp-user-infra","installation-deployment-manager-control-plane_installing-gcp-user-infra","installation-gcp-user-infra-wait-for-bootstrap_installing-gcp-user-infra","installation-creating-gcp-worker_installing-gcp-user-infra","installation-deployment-manager-worker_installing-gcp-user-infra","cli-installing-cli_installing-gcp-user-infra","cli-logging-in-kubeadmin_installing-gcp-user-infra","installation-approve-csrs_installing-gcp-user-infra","installation-gcp-user-infra-adding-ingress_installing-gcp-user-infra","installation-gcp-user-infra-installation_installing-gcp-user-infra","cluster-telemetry_installing-gcp-user-infra","next-steps-22","installing-gcp-user-infra-vpc","prerequisites-22","csr-management_installing-gcp-user-infra-vpc","cluster-entitlements_installing-gcp-user-infra-vpc","installation-gcp-user-infra-config-project-vpc","installation-gcp-project_installing-gcp-user-infra-vpc","installation-gcp-enabling-api-services_installing-gcp-user-infra-vpc","installation-gcp-limits_installing-gcp-user-infra-vpc","installation-gcp-service-account_installing-gcp-user-infra-vpc","installation-gcp-permissions_installing-gcp-user-infra-vpc","installation-gcp-regions_installing-gcp-user-infra-vpc","installation-gcp-install-cli_installing-gcp-user-infra-vpc","installation-gcp-user-infra-config-host-project-vpc_installing-gcp-user-infra-vpc","installation-gcp-dns_installing-gcp-user-infra-vpc","installation-creating-gcp-vpc_installing-gcp-user-infra-vpc","installation-deployment-manager-vpc_installing-gcp-user-infra-vpc","installation-user-infra-generate_installing-gcp-user-infra-vpc","installation-initializing-manual_installing-gcp-user-infra-vpc","installation-gcp-user-infra-shared-vpc-config-yaml_installing-gcp-user-infra-vpc","installation-custom-machine-types_installing-gcp-user-infra-vpc","installation-configure-proxy_installing-gcp-user-infra-vpc","installation-user-infra-generate-k8s-manifest-ignition_installing-gcp-user-infra-vpc","installation-gcp-user-infra-exporting-common-variables-vpc","installation-extracting-infraid_installing-gcp-user-infra-vpc","installation-user-infra-exporting-common-variables_installing-gcp-user-infra-vpc","installation-network-user-infra_installing-gcp-user-infra-vpc","installation-host-names-dhcp-user-infra_installing-gcp-user-infra-vpc","installation-network-connectivity-user-infra_installing-gcp-user-infra-vpc","installation-creating-gcp-lb_installing-gcp-user-infra-vpc","installation-deployment-manager-ext-lb_installing-gcp-user-infra-vpc","installation-deployment-manager-int-lb_installing-gcp-user-infra-vpc","installation-creating-gcp-private-dns_installing-gcp-user-infra-vpc","installation-deployment-manager-private-dns_installing-gcp-user-infra-vpc","installation-creating-gcp-firewall-rules-vpc_installing-gcp-user-infra-vpc","installation-deployment-manager-firewall-rules_installing-gcp-user-infra-vpc","installation-creating-gcp-iam-shared-vpc_installing-gcp-user-infra-vpc","installation-deployment-manager-iam-shared-vpc_installing-gcp-user-infra-vpc","installation-gcp-user-infra-rhcos_installing-gcp-user-infra-vpc","installation-creating-gcp-bootstrap_installing-gcp-user-infra-vpc","installation-deployment-manager-bootstrap_installing-gcp-user-infra-vpc","installation-creating-gcp-control-plane_installing-gcp-user-infra-vpc","installation-deployment-manager-control-plane_installing-gcp-user-infra-vpc","installation-gcp-user-infra-wait-for-bootstrap_installing-gcp-user-infra-vpc","installation-creating-gcp-worker_installing-gcp-user-infra-vpc","installation-deployment-manager-worker_installing-gcp-user-infra-vpc","cli-installing-cli_installing-gcp-user-infra-vpc","cli-logging-in-kubeadmin_installing-gcp-user-infra-vpc","installation-approve-csrs_installing-gcp-user-infra-vpc","installation-gcp-user-infra-adding-ingress_installing-gcp-user-infra-vpc","installation-gcp-user-infra-vpc-adding-firewall-rules","installation-creating-gcp-shared-vpc-cluster-wide-firewall-rules_installing-gcp-user-infra-vpc","installation-gcp-user-infra-installation_installing-gcp-user-infra-vpc","cluster-telemetry_installing-gcp-user-infra-vpc","next-steps-23","installing-restricted-networks-gcp","prerequisites-23","installation-about-restricted-networks_installing-restricted-networks-gcp","installation-restricted-network-limits_installing-restricted-networks-gcp","cluster-entitlements_installing-restricted-networks-gcp","installation-restricted-networks-gcp-user-infra-config-project","installation-gcp-project_installing-restricted-networks-gcp","installation-gcp-enabling-api-services_installing-restricted-networks-gcp","installation-gcp-dns_installing-restricted-networks-gcp","installation-gcp-limits_installing-restricted-networks-gcp","installation-gcp-service-account_installing-restricted-networks-gcp","installation-gcp-permissions_installing-restricted-networks-gcp","installation-gcp-regions_installing-restricted-networks-gcp","installation-gcp-install-cli_installing-restricted-networks-gcp","installation-user-infra-generate_installing-restricted-networks-gcp","installation-disk-partitioning-upi-templates_installing-restricted-networks-gcp","installation-initializing_installing-restricted-networks-gcp","installation-custom-machine-types_installing-restricted-networks-gcp","installation-configure-proxy_installing-restricted-networks-gcp","installation-user-infra-generate-k8s-manifest-ignition_installing-restricted-networks-gcp","installation-restricted-networks-gcp-user-infra-exporting-common-variables","installation-extracting-infraid_installing-restricted-networks-gcp","installation-user-infra-exporting-common-variables_installing-restricted-networks-gcp","installation-creating-gcp-vpc_installing-restricted-networks-gcp","installation-deployment-manager-vpc_installing-restricted-networks-gcp","installation-network-user-infra_installing-restricted-networks-gcp","installation-host-names-dhcp-user-infra_installing-restricted-networks-gcp","installation-network-connectivity-user-infra_installing-restricted-networks-gcp","installation-creating-gcp-lb_installing-restricted-networks-gcp","installation-deployment-manager-ext-lb_installing-restricted-networks-gcp","installation-deployment-manager-int-lb_installing-restricted-networks-gcp","installation-creating-gcp-private-dns_installing-restricted-networks-gcp","installation-deployment-manager-private-dns_installing-restricted-networks-gcp","installation-creating-gcp-firewall-rules-vpc_installing-restricted-networks-gcp","installation-deployment-manager-firewall-rules_installing-restricted-networks-gcp","installation-creating-gcp-iam-shared-vpc_installing-restricted-networks-gcp","installation-deployment-manager-iam-shared-vpc_installing-restricted-networks-gcp","installation-gcp-user-infra-rhcos_installing-restricted-networks-gcp","installation-creating-gcp-bootstrap_installing-restricted-networks-gcp","installation-deployment-manager-bootstrap_installing-restricted-networks-gcp","installation-creating-gcp-control-plane_installing-restricted-networks-gcp","installation-deployment-manager-control-plane_installing-restricted-networks-gcp","installation-gcp-user-infra-wait-for-bootstrap_installing-restricted-networks-gcp","installation-creating-gcp-worker_installing-restricted-networks-gcp","installation-deployment-manager-worker_installing-restricted-networks-gcp","cli-logging-in-kubeadmin_installing-restricted-networks-gcp","olm-restricted-networks-operatorhub_installing-restricted-networks-gcp","installation-approve-csrs_installing-restricted-networks-gcp","installation-gcp-user-infra-adding-ingress_installing-restricted-networks-gcp","installation-gcp-user-infra-installation_installing-restricted-networks-gcp","cluster-telemetry_installing-restricted-networks-gcp","next-steps-24","uninstalling-cluster-gcp","installation-uninstall-clouds_uninstalling-cluster-gcp","/documentation/openshift_container_platform/4.8/html/installing/installing-on-gcp",{"title":1795,"visible":10,"weight":468,"urlFragment":1796,"anchor":16,"singlePageAnchor":1796,"subChapters":1797,"url":1974,"docTitle":928},"Installing on bare metal","installing-on-bare-metal",[1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973],"preparing-to-install-on-bare-metal","preparing_preparing-to-install-on-bare-metal","virt-planning-bare-metal-cluster-for-ocp-virt_preparing-to-install-on-bare-metal","choosing-a-method-to-install-ocp-on-bare-metal","choosing-a-method-to-install-ocp-on-bare-metal-installer-provisioned","choosing-a-method-to-install-ocp-on-bare-metal-user-provisioned","installing-bare-metal","prerequisites-24","cluster-entitlements_installing-bare-metal","installation-requirements-user-infra_installing-bare-metal","machine-requirements_installing-bare-metal","minimum-resource-requirements_installing-bare-metal","csr-management_installing-bare-metal","installation-network-user-infra_installing-bare-metal","installation-host-names-dhcp-user-infra_installing-bare-metal","installation-network-connectivity-user-infra_installing-bare-metal","installation-dns-user-infra_installing-bare-metal","installation-dns-user-infra-example_installing-bare-metal","installation-load-balancing-user-infra_installing-bare-metal","installation-load-balancing-user-infra-example_installing-bare-metal","installation-infrastructure-user-infra_installing-bare-metal","installation-user-provisioned-validating-dns_installing-bare-metal","ssh-agent-using_installing-bare-metal","installation-obtaining-installer_installing-bare-metal","cli-installing-cli_installing-bare-metal","installation-initializing-manual_installing-bare-metal","installation-configuration-parameters_installing-bare-metal","installation-configuration-parameters-required_installing-bare-metal","installation-configuration-parameters-network_installing-bare-metal","installation-configuration-parameters-optional_installing-bare-metal","installation-bare-metal-config-yaml_installing-bare-metal","installation-configure-proxy_installing-bare-metal","installation-three-node-cluster_installing-bare-metal","installation-user-infra-generate-k8s-manifest-ignition_installing-bare-metal","creating-machines-bare-metal_installing-bare-metal","installation-user-infra-machines-iso_installing-bare-metal","installation-user-infra-machines-pxe_installing-bare-metal","installation-user-infra-machines-advanced_installing-bare-metal","installation-user-infra-machines-advanced_network_installing-bare-metal","installation-user-infra-machines-advanced_disk_installing-bare-metal","installation-user-infra-machines-advanced_vardisk_installing-bare-metal","installation-user-infra-machines-advanced_retaindisk_installing-bare-metal","installation-user-infra-machines-advanced_ignition_installing-bare-metal","installation-user-infra-machines-advanced_embed_ignition_installing-bare-metal","installation-user-infra-machines-static-network_installing-bare-metal","installation-user-infra-machines-routing-bonding_installing-bare-metal","installation-user-infra-machines-coreos-installer-options_installing-bare-metal","installation-user-infra-machines-coreos-inst-options_installing-bare-metal","rhcos-enabling-multipath_installing-bare-metal","architecture-rhcos-updating-bootloader.adoc_installing-bare-metal","installation-installing-bare-metal_installing-bare-metal","cli-logging-in-kubeadmin_installing-bare-metal","installation-approve-csrs_installing-bare-metal","installation-operators-config_installing-bare-metal","registry-removed_installing-bare-metal","installation-registry-storage-config_installing-bare-metal","registry-configuring-storage-baremetal_installing-bare-metal","installation-registry-storage-non-production_installing-bare-metal","installation-registry-storage-block-recreate-rollout-bare-metal_installing-bare-metal","installation-complete-user-infra_installing-bare-metal","cluster-telemetry_installing-bare-metal","next-steps-25","installing-bare-metal-network-customizations","prerequisites-25","cluster-entitlements_installing-bare-metal-network-customizations","installation-requirements-user-infra_installing-bare-metal-network-customizations","machine-requirements_installing-bare-metal-network-customizations","minimum-resource-requirements_installing-bare-metal-network-customizations","csr-management_installing-bare-metal-network-customizations","installation-network-user-infra_installing-bare-metal-network-customizations","installation-host-names-dhcp-user-infra_installing-bare-metal-network-customizations","installation-network-connectivity-user-infra_installing-bare-metal-network-customizations","installation-dns-user-infra_installing-bare-metal-network-customizations","installation-dns-user-infra-example_installing-bare-metal-network-customizations","installation-load-balancing-user-infra_installing-bare-metal-network-customizations","installation-load-balancing-user-infra-example_installing-bare-metal-network-customizations","installation-infrastructure-user-infra_installing-bare-metal-network-customizations","installation-user-provisioned-validating-dns_installing-bare-metal-network-customizations","ssh-agent-using_installing-bare-metal-network-customizations","installation-obtaining-installer_installing-bare-metal-network-customizations","cli-installing-cli_installing-bare-metal-network-customizations","installation-initializing-manual_installing-bare-metal-network-customizations","installation-configuration-parameters_installing-bare-metal-network-customizations","installation-configuration-parameters-required_installing-bare-metal-network-customizations","installation-configuration-parameters-network_installing-bare-metal-network-customizations","installation-configuration-parameters-optional_installing-bare-metal-network-customizations","installation-bare-metal-config-yaml_installing-bare-metal-network-customizations","nw-network-config_installing-bare-metal-network-customizations","modifying-nwoperator-config-startup_installing-bare-metal-network-customizations","nw-operator-cr_installing-bare-metal-network-customizations","nw-operator-cr-cno-object_installing-bare-metal-network-customizations","installation-generate-ignition-configs_installing-bare-metal-network-customizations","creating-machines-bare-metal_installing-bare-metal-network-customizations","installation-user-infra-machines-iso_installing-bare-metal-network-customizations","installation-user-infra-machines-pxe_installing-bare-metal-network-customizations","installation-user-infra-machines-advanced_installing-bare-metal-network-customizations","installation-user-infra-machines-advanced_network_installing-bare-metal-network-customizations","installation-user-infra-machines-advanced_disk_installing-bare-metal-network-customizations","installation-user-infra-machines-advanced_vardisk_installing-bare-metal-network-customizations","installation-user-infra-machines-advanced_retaindisk_installing-bare-metal-network-customizations","installation-user-infra-machines-advanced_ignition_installing-bare-metal-network-customizations","installation-user-infra-machines-advanced_embed_ignition_installing-bare-metal-network-customizations","installation-user-infra-machines-static-network_installing-bare-metal-network-customizations","installation-user-infra-machines-routing-bonding_installing-bare-metal-network-customizations","installation-user-infra-machines-coreos-installer-options_installing-bare-metal-network-customizations","installation-user-infra-machines-coreos-inst-options_installing-bare-metal-network-customizations","rhcos-enabling-multipath_installing-bare-metal-network-customizations","architecture-rhcos-updating-bootloader.adoc_installing-bare-metal-network-customizations","installation-installing-bare-metal_installing-bare-metal-network-customizations","cli-logging-in-kubeadmin_installing-bare-metal-network-customizations","installation-approve-csrs_installing-bare-metal-network-customizations","installation-operators-config_installing-bare-metal-network-customizations","registry-removed_installing-bare-metal-network-customizations","installation-registry-storage-config_installing-bare-metal-network-customizations","installation-registry-storage-block-recreate-rollout-bare-metal_installing-bare-metal-network-customizations","installation-complete-user-infra_installing-bare-metal-network-customizations","cluster-telemetry_installing-bare-metal-network-customizations","next-steps-26","installing-restricted-networks-bare-metal","prerequisites-26","installation-about-restricted-networks_installing-restricted-networks-bare-metal","installation-restricted-network-limits_installing-restricted-networks-bare-metal","cluster-entitlements_installing-restricted-networks-bare-metal","installation-requirements-user-infra_installing-restricted-networks-bare-metal","machine-requirements_installing-restricted-networks-bare-metal","minimum-resource-requirements_installing-restricted-networks-bare-metal","csr-management_installing-restricted-networks-bare-metal","installation-network-user-infra_installing-restricted-networks-bare-metal","installation-host-names-dhcp-user-infra_installing-restricted-networks-bare-metal","installation-network-connectivity-user-infra_installing-restricted-networks-bare-metal","installation-dns-user-infra_installing-restricted-networks-bare-metal","installation-dns-user-infra-example_installing-restricted-networks-bare-metal","installation-load-balancing-user-infra_installing-restricted-networks-bare-metal","installation-load-balancing-user-infra-example_installing-restricted-networks-bare-metal","installation-infrastructure-user-infra_installing-restricted-networks-bare-metal","installation-user-provisioned-validating-dns_installing-restricted-networks-bare-metal","ssh-agent-using_installing-restricted-networks-bare-metal","installation-initializing-manual_installing-restricted-networks-bare-metal","installation-configuration-parameters_installing-restricted-networks-bare-metal","installation-configuration-parameters-required_installing-restricted-networks-bare-metal","installation-configuration-parameters-network_installing-restricted-networks-bare-metal","installation-configuration-parameters-optional_installing-restricted-networks-bare-metal","installation-bare-metal-config-yaml_installing-restricted-networks-bare-metal","installation-configure-proxy_installing-restricted-networks-bare-metal","installation-three-node-cluster_installing-restricted-networks-bare-metal","installation-user-infra-generate-k8s-manifest-ignition_installing-restricted-networks-bare-metal","installation-special-config-chrony_installing-restricted-networks-bare-metal","creating-machines-bare-metal_installing-restricted-networks-bare-metal","installation-user-infra-machines-iso_installing-restricted-networks-bare-metal","installation-user-infra-machines-pxe_installing-restricted-networks-bare-metal","installation-user-infra-machines-advanced_installing-restricted-networks-bare-metal","installation-user-infra-machines-advanced_network_installing-restricted-networks-bare-metal","installation-user-infra-machines-advanced_disk_installing-restricted-networks-bare-metal","installation-user-infra-machines-advanced_vardisk_installing-restricted-networks-bare-metal","installation-user-infra-machines-advanced_retaindisk_installing-restricted-networks-bare-metal","installation-user-infra-machines-advanced_ignition_installing-restricted-networks-bare-metal","installation-user-infra-machines-advanced_embed_ignition_installing-restricted-networks-bare-metal","installation-user-infra-machines-static-network_installing-restricted-networks-bare-metal","installation-user-infra-machines-routing-bonding_installing-restricted-networks-bare-metal","installation-user-infra-machines-coreos-installer-options_installing-restricted-networks-bare-metal","installation-user-infra-machines-coreos-inst-options_installing-restricted-networks-bare-metal","rhcos-enabling-multipath_installing-restricted-networks-bare-metal","architecture-rhcos-updating-bootloader.adoc_installing-restricted-networks-bare-metal","installation-installing-bare-metal_installing-restricted-networks-bare-metal","cli-logging-in-kubeadmin_installing-restricted-networks-bare-metal","installation-approve-csrs_installing-restricted-networks-bare-metal","installation-operators-config_installing-restricted-networks-bare-metal","olm-restricted-networks-operatorhub_installing-restricted-networks-bare-metal","installation-registry-storage-config_installing-restricted-networks-bare-metal","registry-change-management-state_installing-restricted-networks-bare-metal","registry-configuring-storage-baremetal_installing-restricted-networks-bare-metal","installation-registry-storage-non-production_installing-restricted-networks-bare-metal","installation-registry-storage-block-recreate-rollout-bare-metal_installing-restricted-networks-bare-metal","installation-complete-user-infra_installing-restricted-networks-bare-metal","cluster-telemetry_installing-restricted-networks-bare-metal","next-steps-27","/documentation/openshift_container_platform/4.8/html/installing/installing-on-bare-metal",{"title":1976,"visible":10,"weight":869,"urlFragment":1977,"anchor":16,"singlePageAnchor":1977,"subChapters":1978,"url":2058,"docTitle":928},"Deploying installer-provisioned clusters on bare metal","deploying-installer-provisioned-clusters-on-bare-metal",[1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057],"ipi-install-overview","ipi-install-prerequisites","node-requirements_ipi-install-prerequisites","virt-planning-bare-metal-cluster-for-ocp-virt_ipi-install-prerequisites","ipi-install-firmware-requirements-for-installing-with-virtual-media_ipi-install-prerequisites","network-requirements_ipi-install-prerequisites","network-requirements-increase-mtu_ipi-install-prerequisites","network-requirements-config-nics_ipi-install-prerequisites","network-requirements-dns_ipi-install-prerequisites","network-requirements-dhcp-reqs_ipi-install-prerequisites","network-requirements-reserving-ip-addresses_ipi-install-prerequisites","network-requirements-ntp_ipi-install-prerequisites","network-requirements-state-config_ipi-install-prerequisites","network-requirements-out-of-band_ipi-install-prerequisites","configuring-nodes_ipi-install-prerequisites","out-of-band-management_ipi-install-prerequisites","required-data-for-installation_ipi-install-prerequisites","validation-checklist-for-nodes_ipi-install-prerequisites","ipi-install-installation-workflow","installing-rhel-on-the-provisioner-node_ipi-install-installation-workflow","preparing-the-provisioner-node-for-openshift-install_ipi-install-installation-workflow","retrieving-the-openshift-installer_ipi-install-installation-workflow","extracting-the-openshift-installer_ipi-install-installation-workflow","ipi-install-creating-an-rhcos-images-cache_ipi-install-installation-workflow","ipi-install-configuration-files","configuring-the-install-config-file_ipi-install-installation-workflow","ipi-install-setting-proxy-settings-within-install-config_ipi-install-installation-workflow","modifying-install-config-for-no-provisioning-network_ipi-install-installation-workflow","modifying-install-config-for-dual-stack-network_ipi-install-installation-workflow","configuring-managed-secure-boot-in-the-install-config-file_ipi-install-installation-workflow","additional-install-config-parameters_ipi-install-installation-workflow","bmc-addressing_ipi-install-installation-workflow","bmc-addressing-for-dell-idrac_ipi-install-installation-workflow","bmc-addressing-for-hpe-ilo_ipi-install-installation-workflow","bmc-addressing-for-fujitsu-irmc_ipi-install-installation-workflow","root-device-hints_ipi-install-installation-workflow","creating-the-openshift-manifests_ipi-install-installation-workflow","configuring-ntp-for-disconnected-clusters_ipi-install-installation-workflow","configure-network-components-to-run-on-the-control-plane_ipi-install-installation-workflow","ipi-install-creating-a-disconnected-registry_ipi-install-installation-workflow","preparing-the-registry-node-to-host-the-mirrored-registry-optional","generating-the-self-signed-certificate-optional","creating-the-registry-podman-container-optional","copy-and-update-the-pull-secret-optional","mirroring-the-repository-optional","modify-the-literal-install-config-yaml-literal-file-to-use-the-disconnected-registry-optional","deploying-routers-on-worker-nodes_ipi-install-installation-workflow","validation-checklist-for-installation_ipi-install-installation-workflow","deploying-the-cluster-via-the-openshift-installer_ipi-install-installation-workflow","ipi-install-troubleshooting-following-the-installation_ipi-install-installation-workflow","verifying-static-ip-address-configuration_ipi-install-installation-workflow","ipi-preparing-reinstall-cluster-bare-metal_ipi-install-installation-workflow","ipi-install-post-installation-configuration","configuring-ntp-for-disconnected-clusters_ipi-install-post-installation-configuration","enabling-a-provisioning-network-after-installation_ipi-install-post-installation-configuration","nw-osp-configuring-external-load-balancer_ipi-install-post-installation-configuration","ipi-install-expanding-the-cluster","preparing-the-bare-metal-node_ipi-install-expanding","replacing-a-bare-metal-control-plane-node_ipi-install-expanding","ipi-install-diagnosing-duplicate-mac-address_ipi-install-expanding","provisioning-the-bare-metal-node_ipi-install-expanding","ipi-install-troubleshooting","troubleshooting-the-installer-workflow","ipi-install-troubleshooting-install-config_ipi-install-troubleshooting","ipi-install-troubleshooting-bootstrap-vm_ipi-install-troubleshooting","ipi-install-troubleshooting-bootstrap-vm-cannot-boot_ipi-install-troubleshooting","ipi-install-troubleshooting-bootstrap-vm-inspecting-logs_ipi-install-troubleshooting","ipi-install-troubleshooting-cluster-nodes-will-not-pxe_ipi-install-troubleshooting","ipi-install-troubleshooting-api-not-accessible_ipi-install-troubleshooting","ipi-install-troubleshooting-cleaning-up-previous-installations_ipi-install-troubleshooting","ipi-install-troubleshooting-registry-issues_ipi-install-troubleshooting","ipi-install-troubleshooting-misc-issues_ipi-install-troubleshooting","addressing-the-literal-runtime-network-not-ready-literal-error","cluster-nodes-not-getting-the-correct-ipv6-address-over-dhcp","cluster-nodes-not-getting-the-correct-hostname-over-dhcp","routes-do-not-reach-endpoints","ipi-install-troubleshooting-failed-ignition-during-firstboot_ipi-install-troubleshooting","ipi-install-troubleshooting-ntp-out-of-sync_ipi-install-troubleshooting","ipi-install-troubleshooting-reviewing-the-installation_ipi-install-troubleshooting","/documentation/openshift_container_platform/4.8/html/installing/deploying-installer-provisioned-clusters-on-bare-metal",{"title":2060,"visible":10,"weight":877,"urlFragment":2061,"anchor":16,"singlePageAnchor":2061,"subChapters":2062,"url":2158,"docTitle":928},"Installing with z/VM on IBM Z and LinuxONE","installing-with-z-vm-on-ibm-z-and-linuxone",[2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157],"preparing-to-install-on-ibm-z","preparing-to-install-on-ibm-z-prerequisites","choosing-an-method-to-install-ocp-on-ibm-z","installing-ibm-z","prerequisites-27","cluster-entitlements_installing-ibm-z","installation-requirements-user-infra_installing-ibm-z","machine-requirements_installing-ibm-z","minimum-resource-requirements_installing-ibm-z","minimum-ibm-z-system-requirements_installing-ibm-z","preferred-ibm-z-system-requirements_installing-ibm-z","csr-management_installing-ibm-z","installation-network-user-infra_installing-ibm-z","installation-network-connectivity-user-infra_installing-ibm-z","installation-dns-user-infra_installing-ibm-z","installation-dns-user-infra-example_installing-ibm-z","installation-load-balancing-user-infra_installing-ibm-z","installation-load-balancing-user-infra-example_installing-ibm-z","installation-infrastructure-user-infra_installing-ibm-z","installation-user-provisioned-validating-dns_installing-ibm-z","ssh-agent-using_installing-ibm-z","installation-obtaining-installer_installing-ibm-z","cli-installing-cli_installing-ibm-z","installation-initializing-manual_installing-ibm-z","installation-configuration-parameters_installing-ibm-z","installation-configuration-parameters-required_installing-ibm-z","installation-configuration-parameters-network_installing-ibm-z","installation-configuration-parameters-optional_installing-ibm-z","installation-bare-metal-config-yaml_installing-ibm-z","installation-configure-proxy_installing-ibm-z","installation-three-node-cluster_installing-ibm-z","nw-operator-cr_installing-ibm-z","nw-operator-cr-cno-object_installing-ibm-z","installation-user-infra-generate-k8s-manifest-ignition_installing-ibm-z","installation-user-infra-machines-iso-ibm-z_installing-ibm-z","installation-user-infra-machines-static-network_installing-ibm-z","installation-user-infra-machines-routing-bonding_installing-ibm-z","installation-installing-bare-metal_installing-ibm-z","cli-logging-in-kubeadmin_installing-ibm-z","installation-approve-csrs_installing-ibm-z","installation-operators-config_installing-ibm-z","installation-registry-storage-config_installing-ibm-z","registry-configuring-storage-baremetal_installing-ibm-z","installation-registry-storage-non-production_installing-ibm-z","installation-complete-user-infra_installing-ibm-z","cluster-telemetry_installing-ibm-z","installation-ibm-z-troubleshooting-and-debugging_installing-ibm-z","next-steps-28","installing-restricted-networks-ibm-z","prerequisites-28","installation-about-restricted-networks_installing-restricted-networks-ibm-z","installation-restricted-network-limits_installing-restricted-networks-ibm-z","cluster-entitlements_installing-restricted-networks-ibm-z","installation-requirements-user-infra_installing-restricted-networks-ibm-z","machine-requirements_installing-restricted-networks-ibm-z","minimum-resource-requirements_installing-restricted-networks-ibm-z","minimum-ibm-z-system-requirements_installing-restricted-networks-ibm-z","preferred-ibm-z-system-requirements_installing-restricted-networks-ibm-z","csr-management_installing-restricted-networks-ibm-z","installation-network-user-infra_installing-restricted-networks-ibm-z","installation-host-names-dhcp-user-infra_installing-restricted-networks-ibm-z","installation-network-connectivity-user-infra_installing-restricted-networks-ibm-z","installation-dns-user-infra_installing-restricted-networks-ibm-z","installation-dns-user-infra-example_installing-restricted-networks-ibm-z","installation-load-balancing-user-infra_installing-restricted-networks-ibm-z","installation-load-balancing-user-infra-example_installing-restricted-networks-ibm-z","installation-infrastructure-user-infra_installing-restricted-networks-ibm-z","installation-user-provisioned-validating-dns_installing-restricted-networks-ibm-z","ssh-agent-using_installing-restricted-networks-ibm-z","installation-initializing-manual_installing-restricted-networks-ibm-z","installation-configuration-parameters_installing-restricted-networks-ibm-z","installation-configuration-parameters-required_installing-restricted-networks-ibm-z","installation-configuration-parameters-network_installing-restricted-networks-ibm-z","installation-configuration-parameters-optional_installing-restricted-networks-ibm-z","installation-bare-metal-config-yaml_installing-restricted-networks-ibm-z","installation-configure-proxy_installing-restricted-networks-ibm-z","installation-three-node-cluster_installing-restricted-networks-ibm-z","nw-operator-cr_installing-restricted-networks-ibm-z","nw-operator-cr-cno-object_installing-restricted-networks-ibm-z","installation-user-infra-generate-k8s-manifest-ignition_installing-restricted-networks-ibm-z","installation-user-infra-machines-iso-ibm-z_installing-restricted-networks-ibm-z","installation-user-infra-machines-static-network_installing-restricted-networks-ibm-z","installation-user-infra-machines-routing-bonding_installing-restricted-networks-ibm-z","installation-installing-bare-metal_installing-restricted-networks-ibm-z","cli-logging-in-kubeadmin_installing-restricted-networks-ibm-z","installation-approve-csrs_installing-restricted-networks-ibm-z","installation-operators-config_installing-restricted-networks-ibm-z","olm-restricted-networks-operatorhub_installing-restricted-networks-ibm-z","installation-registry-storage-config_installing-restricted-networks-ibm-z","registry-configuring-storage-baremetal_installing-restricted-networks-ibm-z","installation-registry-storage-non-production_installing-restricted-networks-ibm-z","installation-complete-user-infra_installing-restricted-networks-ibm-z","cluster-telemetry_installing-restricted-networks-ibm-z","installation-ibm-z-troubleshooting-and-debugging_installing-restricted-networks-ibm-z","next-steps-29","/documentation/openshift_container_platform/4.8/html/installing/installing-with-z-vm-on-ibm-z-and-linuxone",{"title":2160,"visible":10,"weight":888,"urlFragment":2161,"anchor":16,"singlePageAnchor":2161,"subChapters":2162,"url":2266,"docTitle":928},"Installing with RHEL KVM on IBM Z and LinuxONE","installing-with-rhel-kvm-on-ibm-z-and-linuxone",[2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265],"preparing-to-install-on-ibm-z-kvm","preparing-to-install-on-ibm-z-kvm-prerequisites","choosing-an-method-to-install-ocp-on-ibm-z-kvm","installing-ibm-z-kvm","prerequisites-29","cluster-entitlements_installing-ibm-z-kvm","installation-requirements-user-infra_installing-ibm-z-kvm","machine-requirements_installing-ibm-z-kvm","network-connectivity_installing-ibm-z-kvm","ibm-z-network-connectivity_installing-ibm-z-kvm","host-machine-resource-requirements_installing-ibm-z-kvm","minimum-ibm-z-system-requirements_installing-ibm-z-kvm","minimum-resource-requirements_installing-ibm-z-kvm","preferred-ibm-z-system-requirements_installing-ibm-z-kvm","preferred-resource-requirements_installing-ibm-z-kvm","csr-management_installing-ibm-z-kvm","installation-network-user-infra_installing-ibm-z-kvm","installation-host-names-dhcp-user-infra_installing-ibm-z-kvm","installation-network-connectivity-user-infra_installing-ibm-z-kvm","installation-dns-user-infra_installing-ibm-z-kvm","installation-dns-user-infra-example_installing-ibm-z-kvm","installation-load-balancing-user-infra_installing-ibm-z-kvm","installation-load-balancing-user-infra-example_installing-ibm-z-kvm","installation-infrastructure-user-infra_installing-ibm-z-kvm","installation-user-provisioned-validating-dns_installing-ibm-z-kvm","ssh-agent-using_installing-ibm-z-kvm","installation-obtaining-installer_installing-ibm-z-kvm","cli-installing-cli_installing-ibm-z-kvm","installation-initializing-manual_installing-ibm-z-kvm","installation-configuration-parameters_installing-ibm-z-kvm","installation-configuration-parameters-required_installing-ibm-z-kvm","installation-configuration-parameters-network_installing-ibm-z-kvm","installation-configuration-parameters-optional_installing-ibm-z-kvm","installation-bare-metal-config-yaml_installing-ibm-z-kvm","installation-configure-proxy_installing-ibm-z-kvm","installation-three-node-cluster_installing-ibm-z-kvm","nw-operator-cr_installing-ibm-z-kvm","nw-operator-cr-cno-object_installing-ibm-z-kvm","installation-user-infra-generate-k8s-manifest-ignition_installing-ibm-z-kvm","installation-ibm-z-kvm-user-infra-installing-rhcos_installing-ibm-z-kvm","installation-user-infra-machines-iso-ibm-z_kvm_installing-ibm-z-kvm","installation-user-infra-machines-iso-ibm-z-kvm-full_installing-ibm-z-kvm","installation-installing-bare-metal_installing-ibm-z-kvm","cli-logging-in-kubeadmin_installing-ibm-z-kvm","installation-approve-csrs_installing-ibm-z-kvm","installation-operators-config_installing-ibm-z-kvm","installation-registry-storage-config_installing-ibm-z-kvm","registry-configuring-storage-baremetal_installing-ibm-z-kvm","installation-registry-storage-non-production_installing-ibm-z-kvm","installation-complete-user-infra_installing-ibm-z-kvm","cluster-telemetry_installing-ibm-z-kvm","installation-ibm-z-troubleshooting-and-debugging_installing-ibm-z-kvm","next-steps_ibmz-kvm","installing-restricted-networks-ibm-z-kvm","prerequisites-30","installation-about-restricted-networks_installing-restricted-networks-ibm-z-kvm","installation-restricted-network-limits_installing-restricted-networks-ibm-z-kvm","cluster-entitlements_installing-restricted-networks-ibm-z-kvm","installation-requirements-user-infra_installing-restricted-networks-ibm-z-kvm","machine-requirements_installing-restricted-networks-ibm-z-kvm","network-connectivity_installing-restricted-networks-ibm-z-kvm","ibm-z-network-connectivity_installing-restricted-networks-ibm-z-kvm","host-machine-resource-requirements_installing-restricted-networks-ibm-z-kvm","minimum-ibm-z-system-requirements_installing-restricted-networks-ibm-z-kvm","minimum-resource-requirements_installing-restricted-networks-ibm-z-kvm","preferred-ibm-z-system-requirements_installing-restricted-networks-ibm-z-kvm","preferred-resource-requirements_installing-restricted-networks-ibm-z-kvm","csr-management_installing-restricted-networks-ibm-z-kvm","installation-network-user-infra_installing-restricted-networks-ibm-z-kvm","installation-network-connectivity-user-infra_installing-restricted-networks-ibm-z-kvm","installation-dns-user-infra_installing-restricted-networks-ibm-z-kvm","installation-dns-user-infra-example_installing-restricted-networks-ibm-z-kvm","installation-load-balancing-user-infra_installing-restricted-networks-ibm-z-kvm","installation-load-balancing-user-infra-example_installing-restricted-networks-ibm-z-kvm","installation-infrastructure-user-infra_installing-restricted-networks-ibm-z-kvm","installation-user-provisioned-validating-dns_installing-restricted-networks-ibm-z-kvm","ssh-agent-using_installing-restricted-networks-ibm-z-kvm","installation-initializing-manual_installing-restricted-networks-ibm-z-kvm","installation-configuration-parameters_installing-restricted-networks-ibm-z-kvm","installation-configuration-parameters-required_installing-restricted-networks-ibm-z-kvm","installation-configuration-parameters-network_installing-restricted-networks-ibm-z-kvm","installation-configuration-parameters-optional_installing-restricted-networks-ibm-z-kvm","installation-bare-metal-config-yaml_installing-restricted-networks-ibm-z-kvm","installation-configure-proxy_installing-restricted-networks-ibm-z-kvm","installation-three-node-cluster_installing-restricted-networks-ibm-z-kvm","nw-operator-cr_installing-restricted-networks-ibm-z-kvm","nw-operator-cr-cno-object_installing-restricted-networks-ibm-z-kvm","installation-user-infra-generate-k8s-manifest-ignition_installing-restricted-networks-ibm-z-kvm","installation-ibm-z-kvm-user-infra-installing-rhcos_installing-restricted-networks-ibm-z-kvm","installation-user-infra-machines-iso-ibm-z_kvm_installing-restricted-networks-ibm-z-kvm","installation-user-infra-machines-iso-ibm-z-kvm-full_installing-restricted-networks-ibm-z-kvm","installation-installing-bare-metal_installing-restricted-networks-ibm-z-kvm","cli-logging-in-kubeadmin_installing-restricted-networks-ibm-z-kvm","installation-approve-csrs_installing-restricted-networks-ibm-z-kvm","installation-operators-config_installing-restricted-networks-ibm-z-kvm","olm-restricted-networks-operatorhub_installing-restricted-networks-ibm-z-kvm","installation-registry-storage-config_installing-restricted-networks-ibm-z-kvm","registry-configuring-storage-baremetal_installing-restricted-networks-ibm-z-kvm","installation-registry-storage-non-production_installing-restricted-networks-ibm-z-kvm","installation-complete-user-infra_installing-restricted-networks-ibm-z-kvm","cluster-telemetry_installing-restricted-networks-ibm-z-kvm","installation-ibm-z-troubleshooting-and-debugging_installing-restricted-networks-ibm-z-kvm","next-steps_ibmz-kvm-restricted","/documentation/openshift_container_platform/4.8/html/installing/installing-with-rhel-kvm-on-ibm-z-and-linuxone",{"title":2268,"visible":10,"weight":899,"urlFragment":2269,"anchor":16,"singlePageAnchor":2269,"subChapters":2270,"url":2372,"docTitle":928},"Installing on IBM Power Systems","installing-on-ibm-power-systems",[2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371],"preparing-to-install-on-ibm-power","preparing-to-install-on-ibm-power-prerequisites","choosing-an-method-to-install-ocp-on-ibm-power","installing-ibm-power","prerequisites-31","cluster-entitlements_installing-ibm-power","installation-requirements-user-infra_installing-ibm-power","machine-requirements_installing-ibm-power","minimum-resource-requirements_installing-ibm-power","minimum-ibm-power-system-requirements_installing-ibm-power","recommended-ibm-power-system-requirements_installing-ibm-power","csr-management_installing-ibm-power","installation-network-user-infra_installing-ibm-power","installation-network-connectivity-user-infra_installing-ibm-power","installation-dns-user-infra_installing-ibm-power","installation-dns-user-infra-example_installing-ibm-power","installation-load-balancing-user-infra_installing-ibm-power","installation-load-balancing-user-infra-example_installing-ibm-power","installation-infrastructure-user-infra_installing-ibm-power","installation-user-provisioned-validating-dns_installing-ibm-power","ssh-agent-using_installing-ibm-power","installation-obtaining-installer_installing-ibm-power","cli-installing-cli_installing-ibm-power","installation-initializing-manual_installing-ibm-power","installation-configuration-parameters_installing-ibm-power","installation-configuration-parameters-required_installing-ibm-power","installation-configuration-parameters-network_installing-ibm-power","installation-configuration-parameters-optional_installing-ibm-power","installation-bare-metal-config-yaml_installing-ibm-power","sample-install-config-yaml-file-for-ibm-power-systems","installation-configure-proxy_installing-ibm-power","installation-three-node-cluster_installing-ibm-power","nw-operator-cr_installing-ibm-power","nw-operator-cr-cno-object_installing-ibm-power","installation-user-infra-generate-k8s-manifest-ignition_installing-ibm-power","creating-machines-bare-metal-power","installation-user-infra-machines-iso_installing-ibm-power","installation-user-infra-machines-static-network_installing-ibm-power","installation-user-infra-machines-routing-bonding_installing-ibm-power","installation-user-infra-machines-pxe_installing-ibm-power","installation-installing-bare-metal_installing-ibm-power","cli-logging-in-kubeadmin_installing-ibm-power","installation-approve-csrs_installing-ibm-power","installation-operators-config_installing-ibm-power","installation-registry-storage-config_installing-ibm-power","registry-configuring-storage-baremetal_installing-ibm-power","configuring-registry-storage-for-ibm-power-systems","installation-registry-storage-non-production_installing-ibm-power","installation-complete-user-infra_installing-ibm-power","cluster-telemetry_installing-ibm-power","next-steps-30","installing-restricted-networks-ibm-power","prerequisites-32","installation-about-restricted-networks_installing-restricted-networks-ibm-power","installation-restricted-network-limits_installing-restricted-networks-ibm-power","cluster-entitlements_installing-restricted-networks-ibm-power","installation-requirements-user-infra_installing-restricted-networks-ibm-power","machine-requirements_installing-restricted-networks-ibm-power","minimum-resource-requirements_installing-restricted-networks-ibm-power","minimum-ibm-power-system-requirements_installing-restricted-networks-ibm-power","recommended-ibm-power-system-requirements_installing-restricted-networks-ibm-power","csr-management_installing-restricted-networks-ibm-power","installation-network-user-infra_installing-restricted-networks-ibm-power","installation-network-connectivity-user-infra_installing-restricted-networks-ibm-power","installation-dns-user-infra_installing-restricted-networks-ibm-power","installation-dns-user-infra-example_installing-restricted-networks-ibm-power","installation-load-balancing-user-infra_installing-restricted-networks-ibm-power","installation-load-balancing-user-infra-example_installing-restricted-networks-ibm-power","installation-infrastructure-user-infra_installing-restricted-networks-ibm-power","installation-user-provisioned-validating-dns_installing-restricted-networks-ibm-power","ssh-agent-using_installing-restricted-networks-ibm-power","installation-initializing-manual_installing-restricted-networks-ibm-power","installation-configuration-parameters_installing-restricted-networks-ibm-power","installation-configuration-parameters-required_installing-restricted-networks-ibm-power","installation-configuration-parameters-network_installing-restricted-networks-ibm-power","installation-configuration-parameters-optional_installing-restricted-networks-ibm-power","installation-bare-metal-config-yaml_installing-restricted-networks-ibm-power","sample-install-config-yaml-file-for-ibm-power-systems-2","installation-configure-proxy_installing-restricted-networks-ibm-power","installation-three-node-cluster_installing-restricted-networks-ibm-power","nw-operator-cr_installing-restricted-networks-ibm-power","nw-operator-cr-cno-object_installing-restricted-networks-ibm-power","installation-user-infra-generate-k8s-manifest-ignition_installing-restricted-networks-ibm-power","creating-machines-ibm-power-restricted-network","installation-user-infra-machines-iso_installing-restricted-networks-ibm-power","installation-user-infra-machines-static-network_installing-restricted-networks-ibm-power","installation-user-infra-machines-routing-bonding_installing-restricted-networks-ibm-power","installation-user-infra-machines-pxe_installing-restricted-networks-ibm-power","installation-installing-bare-metal_installing-restricted-networks-ibm-power","cli-logging-in-kubeadmin_installing-restricted-networks-ibm-power","installation-approve-csrs_installing-restricted-networks-ibm-power","installation-operators-config_installing-restricted-networks-ibm-power","olm-restricted-networks-operatorhub_installing-restricted-networks-ibm-power","installation-registry-storage-config_installing-restricted-networks-ibm-power","registry-change-management-state_installing-restricted-networks-ibm-power","registry-configuring-storage-baremetal_installing-restricted-networks-ibm-power","configuring-registry-storage-for-ibm-power-systems-2","installation-registry-storage-non-production_installing-restricted-networks-ibm-power","installation-complete-user-infra_installing-restricted-networks-ibm-power","cluster-telemetry_installing-restricted-networks-ibm-power","next-steps-31","/documentation/openshift_container_platform/4.8/html/installing/installing-on-ibm-power-systems",{"title":2374,"visible":10,"weight":906,"urlFragment":2375,"anchor":16,"singlePageAnchor":2375,"subChapters":2376,"url":2675,"docTitle":928},"Installing on OpenStack","installing-on-openstack",[2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674],"preparing-to-install-on-openstack","preparing-to-install-on-openstack-prerequisites","choosing-an-method-to-install-ocp-on-openstack","choosing-an-method-to-install-ocp-on-openstack-installer-provisioned","choosing-an-method-to-install-ocp-on-openstack-user-provisioned","installing-openstack-installer-custom","prerequisites-33","installation-osp-default-deployment_installing-openstack-installer-custom","installation-osp-control-machines_installing-openstack-installer-custom","installation-osp-compute-machines_installing-openstack-installer-custom","installation-osp-bootstrap-machine_installing-openstack-installer-custom","cluster-entitlements_installing-openstack-installer-custom","installation-osp-enabling-swift_installing-openstack-installer-custom","installation-registry-osp-creating-custom-pvc_installing-openstack-installer-custom","installation-osp-verifying-external-network_installing-openstack-installer-custom","installation-osp-describing-cloud-parameters_installing-openstack-installer-custom","installation-obtaining-installer_installing-openstack-installer-custom","installation-initializing_installing-openstack-installer-custom","installation-configure-proxy_installing-openstack-installer-custom","installation-configuration-parameters_installing-openstack-installer-custom","installation-configuration-parameters-required_installing-openstack-installer-custom","installation-configuration-parameters-network_installing-openstack-installer-custom","installation-configuration-parameters-optional_installing-openstack-installer-custom","installation-configuration-parameters-additional-osp_installing-openstack-installer-custom","installation-configuration-parameters-optional-osp_installing-openstack-installer-custom","installation-osp-custom-subnet_installing-openstack-installer-custom","installation-osp-deploying-bare-metal-machines_installing-openstack-installer-custom","installation-osp-provider-networks_installing-openstack-installer-custom","installation-osp-provider-network-preparation_installing-openstack-installer-custom","installation-osp-deploying-provider-networks-installer_installing-openstack-installer-custom","installation-osp-config-yaml_installing-openstack-installer-custom","installation-osp-setting-worker-affinity_installing-openstack-installer-custom","ssh-agent-using_installing-openstack-installer-custom","installation-osp-accessing-api_installing-openstack-installer-custom","installation-osp-accessing-api-floating_installing-openstack-installer-custom","installation-osp-accessing-api-no-floating_installing-openstack-installer-custom","installation-launching-installer_installing-openstack-installer-custom","installation-osp-verifying-cluster-status_installing-openstack-installer-custom","cli-logging-in-kubeadmin_installing-openstack-installer-custom","cluster-telemetry_installing-openstack-installer-custom","next-steps-32","installing-openstack-installer-kuryr","prerequisites-34","installation-osp-about-kuryr_installing-openstack-installer-kuryr","installation-osp-default-kuryr-deployment_installing-openstack-installer-kuryr","installation-osp-kuryr-increase-quota_installing-openstack-installer-kuryr","installation-osp-kuryr-neutron-configuration_installing-openstack-installer-kuryr","installation-osp-kuryr-octavia-configuration_installing-openstack-installer-kuryr","installation-osp-kuryr-octavia-driver_installing-openstack-installer-kuryr","installation-osp-kuryr-known-limitations_installing-openstack-installer-kuryr","installation-osp-control-machines_installing-openstack-installer-kuryr","installation-osp-compute-machines_installing-openstack-installer-kuryr","installation-osp-bootstrap-machine_installing-openstack-installer-kuryr","cluster-entitlements_installing-openstack-installer-kuryr","installation-osp-enabling-swift_installing-openstack-installer-kuryr","installation-osp-verifying-external-network_installing-openstack-installer-kuryr","installation-osp-describing-cloud-parameters_installing-openstack-installer-kuryr","installation-obtaining-installer_installing-openstack-installer-kuryr","installation-initializing_installing-openstack-installer-kuryr","installation-configure-proxy_installing-openstack-installer-kuryr","installation-configuration-parameters_installing-openstack-installer-kuryr","installation-configuration-parameters-required_installing-openstack-installer-kuryr","installation-configuration-parameters-network_installing-openstack-installer-kuryr","installation-configuration-parameters-optional_installing-openstack-installer-kuryr","installation-configuration-parameters-additional-osp_installing-openstack-installer-kuryr","installation-configuration-parameters-optional-osp_installing-openstack-installer-kuryr","installation-osp-custom-subnet_installing-openstack-installer-kuryr","installation-osp-kuryr-config-yaml_installing-openstack-installer-kuryr","installation-osp-provider-networks_installing-openstack-installer-kuryr","installation-osp-provider-network-preparation_installing-openstack-installer-kuryr","installation-osp-deploying-provider-networks-installer_installing-openstack-installer-kuryr","installation-osp-kuryr-port-pools_installing-openstack-installer-kuryr","installation-osp-kuryr-settings-installing_installing-openstack-installer-kuryr","installation-osp-setting-worker-affinity_installing-openstack-installer-kuryr","ssh-agent-using_installing-openstack-installer-kuryr","installation-osp-accessing-api_installing-openstack-installer-kuryr","installation-osp-accessing-api-floating_installing-openstack-installer-kuryr","installation-osp-accessing-api-no-floating_installing-openstack-installer-kuryr","installation-launching-installer_installing-openstack-installer-kuryr","installation-osp-verifying-cluster-status_installing-openstack-installer-kuryr","cli-logging-in-kubeadmin_installing-openstack-installer-kuryr","cluster-telemetry_installing-openstack-installer-kuryr","next-steps-33","installing-openstack-installer-sr-iov","prerequisites-35","installation-osp-default-deployment_installing-openstack-installer-sr-iov","installation-osp-control-machines_installing-openstack-installer-sr-iov","installation-osp-compute-machines_installing-openstack-installer-sr-iov","installation-osp-bootstrap-machine_installing-openstack-installer-sr-iov","cluster-entitlements_installing-openstack-installer-sr-iov","installation-osp-enabling-swift_installing-openstack-installer-sr-iov","installation-osp-verifying-external-network_installing-openstack-installer-sr-iov","installation-osp-describing-cloud-parameters_installing-openstack-installer-sr-iov","installation-obtaining-installer_installing-openstack-installer-sr-iov","installation-initializing_installing-openstack-installer-sr-iov","installation-configure-proxy_installing-openstack-installer-sr-iov","installation-configuration-parameters_installing-openstack-installer-sr-iov","installation-configuration-parameters-required_installing-openstack-installer-sr-iov","installation-configuration-parameters-network_installing-openstack-installer-sr-iov","installation-configuration-parameters-optional_installing-openstack-installer-sr-iov","installation-osp-custom-subnet_installing-openstack-installer-sr-iov","installation-osp-deploying-bare-metal-machines_installing-openstack-installer-sr-iov","installation-osp-config-yaml_installing-openstack-installer-sr-iov","ssh-agent-using_installing-openstack-installer-sr-iov","installation-osp-accessing-api_installing-openstack-installer-sr-iov","installation-osp-accessing-api-floating_installing-openstack-installer-sr-iov","installation-osp-accessing-api-no-floating_installing-openstack-installer-sr-iov","installation-osp-configuring-sr-iov_installing-openstack-installer-sr-iov","installation-launching-installer_installing-openstack-installer-sr-iov","installation-osp-verifying-cluster-status_installing-openstack-installer-sr-iov","cli-logging-in-kubeadmin_installing-openstack-installer-sr-iov","networking-osp-preparing-for-sr-iov_installing-openstack-installer-sr-iov","networking-osp-enabling-metadata_installing-openstack-installer-sr-iov","networking-osp-enabling-vfio-noiommu_installing-openstack-installer-sr-iov","cluster-telemetry_installing-openstack-installer-sr-iov","next-steps-34","installing-openstack-user","prerequisites-36","cluster-entitlements_installing-openstack-user","installation-osp-default-deployment_installing-openstack-user","installation-osp-control-machines_installing-openstack-user","installation-osp-compute-machines_installing-openstack-user","installation-osp-bootstrap-machine_installing-openstack-user","installation-osp-downloading-modules_installing-openstack-user","installation-osp-downloading-playbooks_installing-openstack-user","installation-obtaining-installer_installing-openstack-user","ssh-agent-using_installing-openstack-user","installation-osp-creating-image_installing-openstack-user","installation-osp-verifying-external-network_installing-openstack-user","installation-osp-accessing-api_installing-openstack-user","installation-osp-accessing-api-floating_installing-openstack-user","installation-osp-accessing-api-no-floating_installing-openstack-user","installation-osp-describing-cloud-parameters_installing-openstack-user","installation-initializing_installing-openstack-user","installation-configuration-parameters_installing-openstack-user","installation-configuration-parameters-required_installing-openstack-user","installation-configuration-parameters-network_installing-openstack-user","installation-configuration-parameters-optional_installing-openstack-user","installation-configuration-parameters-additional-osp_installing-openstack-user","installation-configuration-parameters-optional-osp_installing-openstack-user","installation-osp-custom-subnet_installing-openstack-user","installation-osp-config-yaml_installing-openstack-user","installation-osp-fixing-subnet_installing-openstack-user","installation-osp-emptying-worker-pools_installing-openstack-user","installation-osp-provider-networks_installing-openstack-user","installation-osp-provider-network-preparation_installing-openstack-user","installation-osp-deploying-provider-networks-installer_installing-openstack-user","installation-user-infra-generate-k8s-manifest-ignition_installing-openstack-user","installation-osp-converting-ignition-resources_installing-openstack-user","installation-osp-creating-control-plane-ignition_installing-openstack-user","installation-osp-creating-network-resources_installing-openstack-user","installation-osp-deploying-bare-metal-machines_installing-openstack-user","installation-osp-creating-bootstrap-machine_installing-openstack-user","installation-osp-creating-control-plane_installing-openstack-user","cli-logging-in-kubeadmin_installing-openstack-user","installation-osp-deleting-bootstrap-resources_installing-openstack-user","installation-osp-creating-compute-machines_installing-openstack-user","installation-approve-csrs_installing-openstack-user","installation-osp-verifying-installation_installing-openstack-user","cluster-telemetry_installing-openstack-user","next-steps-35","installing-openstack-user-kuryr","prerequisites-37","installation-osp-about-kuryr_installing-openstack-user-kuryr","installation-osp-default-kuryr-deployment_installing-openstack-user-kuryr","installation-osp-kuryr-increase-quota_installing-openstack-user-kuryr","installation-osp-kuryr-neutron-configuration_installing-openstack-user-kuryr","installation-osp-kuryr-octavia-configuration_installing-openstack-user-kuryr","installation-osp-kuryr-octavia-driver_installing-openstack-user-kuryr","installation-osp-kuryr-known-limitations_installing-openstack-user-kuryr","installation-osp-control-machines_installing-openstack-user-kuryr","installation-osp-compute-machines_installing-openstack-user-kuryr","installation-osp-bootstrap-machine_installing-openstack-user-kuryr","cluster-entitlements_installing-openstack-user-kuryr","installation-osp-downloading-modules_installing-openstack-user-kuryr","installation-osp-downloading-playbooks_installing-openstack-user-kuryr","installation-obtaining-installer_installing-openstack-user-kuryr","ssh-agent-using_installing-openstack-user-kuryr","installation-osp-creating-image_installing-openstack-user-kuryr","installation-osp-verifying-external-network_installing-openstack-user-kuryr","installation-osp-accessing-api_installing-openstack-user-kuryr","installation-osp-accessing-api-floating_installing-openstack-user-kuryr","installation-osp-accessing-api-no-floating_installing-openstack-user-kuryr","installation-osp-describing-cloud-parameters_installing-openstack-user-kuryr","installation-initializing_installing-openstack-user-kuryr","installation-configuration-parameters_installing-openstack-user-kuryr","installation-configuration-parameters-required_installing-openstack-user-kuryr","installation-configuration-parameters-network_installing-openstack-user-kuryr","installation-configuration-parameters-optional_installing-openstack-user-kuryr","installation-configuration-parameters-additional-osp_installing-openstack-user-kuryr","installation-configuration-parameters-optional-osp_installing-openstack-user-kuryr","installation-osp-custom-subnet_installing-openstack-user-kuryr","installation-osp-kuryr-config-yaml_installing-openstack-user-kuryr","installation-osp-provider-networks_installing-openstack-user-kuryr","installation-osp-provider-network-preparation_installing-openstack-user-kuryr","installation-osp-deploying-provider-networks-installer_installing-openstack-user-kuryr","installation-osp-kuryr-port-pools_installing-openstack-user-kuryr","installation-osp-kuryr-settings-installing_installing-openstack-user-kuryr","installation-osp-fixing-subnet_installing-openstack-user-kuryr","installation-osp-emptying-worker-pools_installing-openstack-user-kuryr","installation-osp-modifying-networktype_installing-openstack-user-kuryr","installation-user-infra-generate-k8s-manifest-ignition_installing-openstack-user-kuryr","installation-osp-converting-ignition-resources_installing-openstack-user-kuryr","installation-osp-creating-control-plane-ignition_installing-openstack-user-kuryr","installation-osp-creating-network-resources_installing-openstack-user-kuryr","installation-osp-creating-bootstrap-machine_installing-openstack-user-kuryr","installation-osp-creating-control-plane_installing-openstack-user-kuryr","cli-logging-in-kubeadmin_installing-openstack-user-kuryr","installation-osp-deleting-bootstrap-resources_installing-openstack-user-kuryr","installation-osp-creating-compute-machines_installing-openstack-user-kuryr","installation-approve-csrs_installing-openstack-user-kuryr","installation-osp-verifying-installation_installing-openstack-user-kuryr","cluster-telemetry_installing-openstack-user-kuryr","next-steps-36","installing-openstack-user-sr-iov","prerequisites-38","cluster-entitlements_installing-openstack-user-sr-iov","installation-osp-default-deployment_installing-openstack-user-sr-iov","installation-osp-control-machines_installing-openstack-user-sr-iov","installation-osp-compute-machines_installing-openstack-user-sr-iov","installation-osp-bootstrap-machine_installing-openstack-user-sr-iov","installation-osp-downloading-modules_installing-openstack-user-sr-iov","installation-osp-downloading-playbooks_installing-openstack-user-sr-iov","installation-obtaining-installer_installing-openstack-user-sr-iov","ssh-agent-using_installing-openstack-user-sr-iov","installation-osp-creating-image_installing-openstack-user-sr-iov","installation-osp-verifying-external-network_installing-openstack-user-sr-iov","installation-osp-accessing-api_installing-openstack-user-sr-iov","installation-osp-accessing-api-floating_installing-openstack-user-sr-iov","installation-osp-accessing-api-no-floating_installing-openstack-user-sr-iov","installation-osp-describing-cloud-parameters_installing-openstack-user-sr-iov","installation-initializing_installing-openstack-user-sr-iov","installation-configuration-parameters_installing-openstack-user-sr-iov","installation-configuration-parameters-required_installing-openstack-user-sr-iov","installation-configuration-parameters-network_installing-openstack-user-sr-iov","installation-configuration-parameters-optional_installing-openstack-user-sr-iov","installation-configuration-parameters-additional-osp_installing-openstack-user-sr-iov","installation-configuration-parameters-optional-osp_installing-openstack-user-sr-iov","installation-osp-config-yaml_installing-openstack-user-sr-iov","installation-osp-custom-subnet_installing-openstack-user-sr-iov","installation-osp-fixing-subnet_installing-openstack-user-sr-iov","installation-osp-emptying-worker-pools_installing-openstack-user-sr-iov","installation-user-infra-generate-k8s-manifest-ignition_installing-openstack-user-sr-iov","installation-osp-converting-ignition-resources_installing-openstack-user-sr-iov","installation-osp-creating-control-plane-ignition_installing-openstack-user-sr-iov","installation-osp-creating-network-resources_installing-openstack-user-sr-iov","installation-osp-deploying-bare-metal-machines_installing-openstack-user-sr-iov","installation-osp-creating-bootstrap-machine_installing-openstack-user-sr-iov","installation-osp-creating-control-plane_installing-openstack-user-sr-iov","cli-logging-in-kubeadmin_installing-openstack-user-sr-iov","installation-osp-deleting-bootstrap-resources_installing-openstack-user-sr-iov","installation-osp-configuring-sr-iov_installing-openstack-user-sr-iov","installation-osp-creating-sr-iov-compute-machines_installing-openstack-user-sr-iov","installation-approve-csrs_installing-openstack-user-sr-iov","installation-osp-verifying-installation_installing-openstack-user-sr-iov","networking-osp-preparing-for-sr-iov_installing-openstack-user-sr-iov","networking-osp-enabling-metadata_installing-openstack-user-sr-iov","networking-osp-enabling-vfio-noiommu_installing-openstack-user-sr-iov","cluster-telemetry_installing-openstack-user-sr-iov","additional-resources-4","next-steps-37","installing-openstack-installer-restricted","prerequisites-39","installation-about-restricted-networks_installing-openstack-installer-restricted","installation-restricted-network-limits_installing-openstack-installer-restricted","installation-osp-default-deployment_installing-openstack-installer-restricted","installation-osp-control-machines_installing-openstack-installer-restricted","installation-osp-compute-machines_installing-openstack-installer-restricted","installation-osp-bootstrap-machine_installing-openstack-installer-restricted","cluster-entitlements_installing-openstack-installer-restricted","installation-osp-enabling-swift_installing-openstack-installer-restricted","installation-osp-describing-cloud-parameters_installing-openstack-installer-restricted","installation-creating-image-restricted_installing-openstack-installer-restricted","installation-initializing_installing-openstack-installer-restricted","installation-configure-proxy_installing-openstack-installer-restricted","installation-configuration-parameters_installing-openstack-installer-restricted","installation-configuration-parameters-required_installing-openstack-installer-restricted","installation-configuration-parameters-network_installing-openstack-installer-restricted","installation-configuration-parameters-optional_installing-openstack-installer-restricted","installation-configuration-parameters-additional-osp_installing-openstack-installer-restricted","installation-configuration-parameters-optional-osp_installing-openstack-installer-restricted","installation-osp-restricted-config-yaml_installing-openstack-installer-restricted","installation-osp-setting-worker-affinity_installing-openstack-installer-restricted","ssh-agent-using_installing-openstack-installer-restricted","installation-osp-accessing-api_installing-openstack-installer-restricted","installation-osp-accessing-api-floating_installing-openstack-installer-restricted","installation-osp-accessing-api-no-floating_installing-openstack-installer-restricted","installation-launching-installer_installing-openstack-installer-restricted","installation-osp-verifying-cluster-status_installing-openstack-installer-restricted","cli-logging-in-kubeadmin_installing-openstack-installer-restricted","olm-restricted-networks-operatorhub_installing-openstack-installer-restricted","cluster-telemetry_installing-openstack-installer-restricted","next-steps-38","uninstalling-cluster-openstack","installation-uninstall-clouds_uninstalling-cluster-openstack","uninstalling-openstack-user","installation-osp-downloading-modules_uninstalling-openstack-user","installation-uninstall-infra_uninstalling-openstack-user","/documentation/openshift_container_platform/4.8/html/installing/installing-on-openstack",{"title":2677,"visible":10,"weight":915,"urlFragment":2678,"anchor":16,"singlePageAnchor":2678,"subChapters":2679,"url":2796,"docTitle":928},"Installing on RHV","installing-on-rhv",[2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795],"preparing-to-install-on-rhv","preparing-to-install-on-rhv-prerequisites","choosing-an-method-to-install-ocp-on-rhv","choosing-an-method-to-install-ocp-on-rhv-installer-provisioned","choosing-an-method-to-install-ocp-on-rhv-user-provisioned","installing-rhv-default","prerequisites-40","cluster-entitlements_installing-rhv-default","installing-rhv-requirements_installing-rhv-default","installing-rhv-verifying-rhv-environment_installing-rhv-default","installing-rhv-preparing-network-environment_installing-rhv-default","installing-rhv-insecure-mode_installing-rhv-default","ssh-agent-using_installing-rhv-default","installation-obtaining-installer_installing-rhv-default","installation-launching-installer_installing-rhv-default","cli-installing-cli_installing-rhv-default","cli-logging-in-kubeadmin_installing-rhv-default","installation-osp-verifying-cluster-status_installing-rhv-default","installing-rhv-accessing-ocp-web-console_installing-rhv-default","cluster-telemetry_installing-rhv-default","installation-common-issues_installing-rhv-default","cpu-load-increases-and-nodes-go-into-a-not-ready-state_installing-rhv-default","trouble-connecting-the-rhv-cluster-api_installing-rhv-default","post-installation-tasks","installing-rhv-customizations","prerequisites-41","cluster-entitlements_installing-rhv-customizations","installing-rhv-requirements_installing-rhv-customizations","installing-rhv-verifying-rhv-environment_installing-rhv-customizations","installing-rhv-preparing-network-environment_installing-rhv-customizations","installing-rhv-insecure-mode_installing-rhv-customizations","ssh-agent-using_installing-rhv-customizations","installation-obtaining-installer_installing-rhv-customizations","installation-initializing_installing-rhv-customizations","installing-rhv-example-install-config-yaml_installing-rhv-customizations","installation-configuration-parameters_installing-rhv-customizations","installation-configuration-parameters-required_installing-rhv-customizations","installation-configuration-parameters-network_installing-rhv-customizations","installation-configuration-parameters-optional_installing-rhv-customizations","installation-configuration-parameters-additional-rhv_installing-rhv-customizations","installation-configuration-parameters-additional-machine_installing-rhv-customizations","installation-launching-installer_installing-rhv-customizations","cli-installing-cli_installing-rhv-customizations","cli-logging-in-kubeadmin_installing-rhv-customizations","installation-osp-verifying-cluster-status_installing-rhv-customizations","installing-rhv-accessing-ocp-web-console_installing-rhv-customizations","cluster-telemetry_installing-rhv-customizations","installation-common-issues_installing-rhv-customizations","cpu-load-increases-and-nodes-go-into-a-not-ready-state_installing-rhv-customizations","trouble-connecting-the-rhv-cluster-api_installing-rhv-customizations","post-installation-tasks-2","next-steps-39","installing-rhv-user-infra","prerequisites-42","cluster-entitlements_installing-rhv-user-infra","installing-rhv-requirements_installing-rhv-user-infra","installing-rhv-verifying-rhv-environment_installing-rhv-user-infra","installation-network-user-infra_installing-rhv-user-infra","installation-network-connectivity-user-infra_installing-rhv-user-infra","installing-rhv-setting-up-installation-machine_installing-rhv-user-infra","installing-rhv-insecure-mode_installing-rhv-user-infra","ssh-agent-using_installing-rhv-user-infra","installation-obtaining-installer_installing-rhv-user-infra","installation-rhv-downloading-ansible-playbooks_installing-rhv-user-infra","installation-rhv-about-inventory-yml_installing-rhv-user-infra","installation-rhv-specifying-rhcos-image-settings_installing-rhv-user-infra","installation-rhv-creating-install-config-file_installing-rhv-user-infra","installation-rhv-customizing-install-config-yaml_installing-rhv-user-infra","installation-rhv-editing-mantifests_installing-rhv-user-infra","installation-rhv-making-control-plane-nodes-non-schedulable_installing-rhv-user-infra","installation-rhv-building-ignition-files_installing-rhv-user-infra","installation-rhv-creating-templates-virtual-machines_installing-rhv-user-infra","installation-rhv-creating-bootstrap-machine_installing-rhv-user-infra","installation-rhv-creating-control-plane-nodes_installing-rhv-user-infra","installation-osp-verifying-cluster-status_installing-rhv-user-infra","installation-rhv-removing-bootstrap-machine_installing-rhv-user-infra","installation-rhv-creating-worker-nodes-completing-installation_installing-rhv-user-infra","cluster-telemetry_installing-rhv-user-infra","installing-rhv-restricted-network","prerequisites-43","installation-about-restricted-networks_installing-rhv-restricted-network","installation-restricted-network-limits_installing-rhv-restricted-network","cluster-entitlements_installing-rhv-restricted-network","installing-rhv-requirements_installing-rhv-restricted-network","installing-rhv-verifying-rhv-environment_installing-rhv-restricted-network","installation-network-user-infra_installing-rhv-restricted-network","installation-network-connectivity-user-infra_installing-rhv-restricted-network","installation-dns-user-infra_installing-rhv-restricted-network","installation-dns-user-infra-example_installing-rhv-restricted-network","installation-load-balancing-user-infra_installing-rhv-restricted-network","installation-load-balancing-user-infra-example_installing-rhv-restricted-network","installing-rhv-setting-up-installation-machine_installing-rhv-restricted-network","installing-rhv-setting-up-ca-certificate_installing-rhv-restricted-network","ssh-agent-using_installing-rhv-restricted-network","installation-rhv-downloading-ansible-playbooks_installing-rhv-restricted-network","installation-rhv-about-inventory-yml_installing-rhv-restricted-network","installation-rhv-specifying-rhcos-image-settings_installing-rhv-restricted-network","installation-rhv-creating-install-config-file_installing-rhv-restricted-network","installation-bare-metal-config-yaml_installing-rhv-restricted-network","sample-install-config-yaml-file-for-rhv","installation-configure-proxy_installing-rhv-restricted-network","installation-rhv-customizing-install-config-yaml_installing-rhv-restricted-network","installation-rhv-editing-mantifests_installing-rhv-restricted-network","installation-rhv-making-control-plane-nodes-non-schedulable_installing-rhv-restricted-network","installation-rhv-building-ignition-files_installing-rhv-restricted-network","installation-rhv-creating-templates-virtual-machines_installing-rhv-restricted-network","installation-rhv-creating-bootstrap-machine_installing-rhv-restricted-network","installation-rhv-creating-control-plane-nodes_installing-rhv-restricted-network","installation-osp-verifying-cluster-status_installing-rhv-restricted-network","installation-rhv-removing-bootstrap-machine_installing-rhv-restricted-network","installation-rhv-creating-worker-nodes-completing-installation_installing-rhv-restricted-network","cluster-telemetry_installing-rhv-restricted-network","olm-restricted-networks-operatorhub_installing-rhv-restricted-network","uninstalling-cluster-rhv","installation-uninstall-clouds_uninstalling-cluster-rhv","installation-rhv-removing-cluster-upi_uninstalling-cluster-rhv","/documentation/openshift_container_platform/4.8/html/installing/installing-on-rhv",{"title":2798,"visible":10,"weight":2799,"urlFragment":2800,"anchor":16,"singlePageAnchor":2800,"subChapters":2801,"url":3061,"docTitle":928},"Installing on vSphere",15,"installing-on-vsphere",[2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060],"preparing-to-install-on-vsphere","preparing-to-install-on-vsphere-prerequisites","choosing-a-method-to-install-ocp-on-vsphere","installer-provisioned-infrastructure-installation-of-openshift-container-platform-on-vsphere","user-provisioned-infrastructure-installation-of-openshift-container-platform-on-vsphere","installation-vsphere-infrastructure_preparing-to-install-on-vsphere","uninstalling-an-installer-provisioned-infrastructure-installation-of-openshift-container-platform-on-vsphere","installing-vsphere-installer-provisioned","prerequisites-44","cluster-entitlements_installing-vsphere-installer-provisioned","installation-vsphere-infrastructure_installing-vsphere-installer-provisioned","installation-vsphere-installer-network-requirements_installing-vsphere-installer-provisioned","installation-vsphere-installer-infra-requirements_installing-vsphere-installer-provisioned","ssh-agent-using_installing-vsphere-installer-provisioned","installation-obtaining-installer_installing-vsphere-installer-provisioned","installation-adding-vcenter-root-certificates_installing-vsphere-installer-provisioned","installation-launching-installer_installing-vsphere-installer-provisioned","cli-installing-cli_installing-vsphere-installer-provisioned","cli-logging-in-kubeadmin_installing-vsphere-installer-provisioned","installing-vsphere-installer-provisioned-registry","registry-removed_installing-vsphere-installer-provisioned","installation-registry-storage-config_installing-vsphere-installer-provisioned","registry-configuring-storage-vsphere_installing-vsphere-installer-provisioned","installation-registry-storage-block-recreate-rollout_installing-vsphere-installer-provisioned","vsphere-pv-backup_installing-vsphere-installer-provisioned","installation-vsphere-steal-clock-accounting_installing-vsphere-installer-provisioned","cluster-telemetry_installing-vsphere-installer-provisioned","next-steps-40","installing-vsphere-installer-provisioned-customizations","prerequisites-45","cluster-entitlements_installing-vsphere-installer-provisioned-customizations","installation-vsphere-infrastructure_installing-vsphere-installer-provisioned-customizations","installation-vsphere-installer-network-requirements_installing-vsphere-installer-provisioned-customizations","installation-vsphere-installer-infra-requirements_installing-vsphere-installer-provisioned-customizations","ssh-agent-using_installing-vsphere-installer-provisioned-customizations","installation-obtaining-installer_installing-vsphere-installer-provisioned-customizations","installation-adding-vcenter-root-certificates_installing-vsphere-installer-provisioned-customizations","installation-initializing_installing-vsphere-installer-provisioned-customizations","installation-configuration-parameters_installing-vsphere-installer-provisioned-customizations","installation-configuration-parameters-required_installing-vsphere-installer-provisioned-customizations","installation-configuration-parameters-network_installing-vsphere-installer-provisioned-customizations","installation-configuration-parameters-optional_installing-vsphere-installer-provisioned-customizations","installation-configuration-parameters-additional-vsphere_installing-vsphere-installer-provisioned-customizations","installation-configuration-parameters-optional-vsphere_installing-vsphere-installer-provisioned-customizations","installation-installer-provisioned-vsphere-config-yaml_installing-vsphere-installer-provisioned-customizations","installation-configure-proxy_installing-vsphere-installer-provisioned-customizations","installation-launching-installer_installing-vsphere-installer-provisioned-customizations","cli-installing-cli_installing-vsphere-installer-provisioned-customizations","cli-logging-in-kubeadmin_installing-vsphere-installer-provisioned-customizations","installing-vsphere-installer-provisioned-customizations-registry","registry-removed_installing-vsphere-installer-provisioned-customizations","installation-registry-storage-config_installing-vsphere-installer-provisioned-customizations","registry-configuring-storage-vsphere_installing-vsphere-installer-provisioned-customizations","installation-registry-storage-block-recreate-rollout_installing-vsphere-installer-provisioned-customizations","vsphere-pv-backup_installing-vsphere-installer-provisioned-customizations","installation-vsphere-steal-clock-accounting_installing-vsphere-installer-provisioned-customizations","cluster-telemetry_installing-vsphere-installer-provisioned-customizations","next-steps-41","installing-vsphere-installer-provisioned-network-customizations","prerequisites-46","cluster-entitlements_installing-vsphere-installer-provisioned-network-customizations","installation-vsphere-infrastructure_installing-vsphere-installer-provisioned-network-customizations","installation-vsphere-installer-network-requirements_installing-vsphere-installer-provisioned-network-customizations","installation-vsphere-installer-infra-requirements_installing-vsphere-installer-provisioned-network-customizations","ssh-agent-using_installing-vsphere-installer-provisioned-network-customizations","installation-obtaining-installer_installing-vsphere-installer-provisioned-network-customizations","installation-adding-vcenter-root-certificates_installing-vsphere-installer-provisioned-network-customizations","installation-initializing_installing-vsphere-installer-provisioned-network-customizations","installation-configuration-parameters_installing-vsphere-installer-provisioned-network-customizations","installation-configuration-parameters-required_installing-vsphere-installer-provisioned-network-customizations","installation-configuration-parameters-network_installing-vsphere-installer-provisioned-network-customizations","installation-configuration-parameters-optional_installing-vsphere-installer-provisioned-network-customizations","installation-configuration-parameters-additional-vsphere_installing-vsphere-installer-provisioned-network-customizations","installation-configuration-parameters-optional-vsphere_installing-vsphere-installer-provisioned-network-customizations","installation-installer-provisioned-vsphere-config-yaml_installing-vsphere-installer-provisioned-network-customizations","installation-configure-proxy_installing-vsphere-installer-provisioned-network-customizations","nw-network-config_installing-vsphere-installer-provisioned-network-customizations","modifying-nwoperator-config-startup_installing-vsphere-installer-provisioned-network-customizations","nw-operator-cr_installing-vsphere-installer-provisioned-network-customizations","nw-operator-cr-cno-object_installing-vsphere-installer-provisioned-network-customizations","installation-launching-installer_installing-vsphere-installer-provisioned-network-customizations","cli-installing-cli_installing-vsphere-installer-provisioned-network-customizations","cli-logging-in-kubeadmin_installing-vsphere-installer-provisioned-network-customizations","installing-vsphere-installer-provisioned-network-customizations-registry","registry-removed_installing-vsphere-installer-provisioned-network-customizations","installation-registry-storage-config_installing-vsphere-installer-provisioned-network-customizations","registry-configuring-storage-vsphere_installing-vsphere-installer-provisioned-network-customizations","installation-registry-storage-block-recreate-rollout_installing-vsphere-installer-provisioned-network-customizations","vsphere-pv-backup_installing-vsphere-installer-provisioned-network-customizations","installation-vsphere-steal-clock-accounting_installing-vsphere-installer-provisioned-network-customizations","cluster-telemetry_installing-vsphere-installer-provisioned-network-customizations","next-steps-42","installing-vsphere","prerequisites-47","cluster-entitlements_installing-vsphere","installation-vsphere-infrastructure_installing-vsphere","installation-requirements-user-infra_installing-vsphere","machine-requirements_installing-vsphere","minimum-resource-requirements_installing-vsphere","csr-management_installing-vsphere","installation-network-user-infra_installing-vsphere","installation-network-connectivity-user-infra_installing-vsphere","installation-dns-user-infra_installing-vsphere","installation-dns-user-infra-example_installing-vsphere","installation-load-balancing-user-infra_installing-vsphere","installation-load-balancing-user-infra-example_installing-vsphere","installation-infrastructure-user-infra_installing-vsphere","installation-user-provisioned-validating-dns_installing-vsphere","ssh-agent-using_installing-vsphere","installation-obtaining-installer_installing-vsphere","installation-initializing-manual_installing-vsphere","installation-vsphere-config-yaml_installing-vsphere","installation-configure-proxy_installing-vsphere","installation-user-infra-generate-k8s-manifest-ignition_installing-vsphere","installation-extracting-infraid_installing-vsphere","installation-vsphere-machines_installing-vsphere","machine-vsphere-machines_installing-vsphere","installation-disk-partitioning_installing-vsphere","architecture-rhcos-updating-bootloader.adoc_installing-vsphere","cli-installing-cli_installing-vsphere","installation-installing-bare-metal_installing-vsphere","cli-logging-in-kubeadmin_installing-vsphere","installation-approve-csrs_installing-vsphere","installation-operators-config_installing-vsphere","registry-removed_installing-vsphere","installation-registry-storage-config_installing-vsphere","registry-configuring-storage-vsphere_installing-vsphere","installation-registry-storage-non-production_installing-vsphere","installation-registry-storage-block-recreate-rollout_installing-vsphere","installation-complete-user-infra_installing-vsphere","vsphere-pv-backup_installing-vsphere","cluster-telemetry_installing-vsphere","next-steps-43","installing-vsphere-network-customizations","prerequisites-48","cluster-entitlements_installing-vsphere-network-customizations","installation-vsphere-infrastructure_installing-vsphere-network-customizations","installation-requirements-user-infra_installing-vsphere-network-customizations","machine-requirements_installing-vsphere-network-customizations","minimum-resource-requirements_installing-vsphere-network-customizations","csr-management_installing-vsphere-network-customizations","installation-network-user-infra_installing-vsphere-network-customizations","installation-network-connectivity-user-infra_installing-vsphere-network-customizations","installation-dns-user-infra_installing-vsphere-network-customizations","installation-dns-user-infra-example_installing-vsphere-network-customizations","installation-load-balancing-user-infra_installing-vsphere-network-customizations","installation-load-balancing-user-infra-example_installing-vsphere-network-customizations","installation-infrastructure-user-infra_installing-vsphere-network-customizations","installation-user-provisioned-validating-dns_installing-vsphere-network-customizations","ssh-agent-using_installing-vsphere-network-customizations","installation-obtaining-installer_installing-vsphere-network-customizations","installation-initializing-manual_installing-vsphere-network-customizations","installation-vsphere-config-yaml_installing-vsphere-network-customizations","installation-configure-proxy_installing-vsphere-network-customizations","nw-network-config_installing-vsphere-network-customizations","modifying-nwoperator-config-startup_installing-vsphere-network-customizations","nw-operator-cr_installing-vsphere-network-customizations","nw-operator-cr-cno-object_installing-vsphere-network-customizations","installation-generate-ignition-configs_installing-vsphere-network-customizations","installation-extracting-infraid_installing-vsphere-network-customizations","installation-vsphere-machines_installing-vsphere-network-customizations","machine-vsphere-machines_installing-vsphere-network-customizations","installation-disk-partitioning_installing-vsphere-network-customizations","architecture-rhcos-updating-bootloader.adoc_installing-vsphere-network-customizations","installation-installing-bare-metal_installing-vsphere-network-customizations","cli-logging-in-kubeadmin_installing-vsphere-network-customizations","installation-approve-csrs_installing-vsphere-network-customizations","installation-operators-config_installing-vsphere-network-customizations","registry-removed_installing-vsphere-network-customizations","installation-registry-storage-config_installing-vsphere-network-customizations","installation-registry-storage-block-recreate-rollout_installing-vsphere-network-customizations","installation-complete-user-infra_installing-vsphere-network-customizations","vsphere-pv-backup_installing-vsphere-network-customizations","cluster-telemetry_installing-vsphere-network-customizations","next-steps-44","installing-restricted-networks-installer-provisioned-vsphere","prerequisites_installing-restricted-networks-installer-provisioned-vsphere","installation-about-restricted-networks_installing-restricted-networks-installer-provisioned-vsphere","installation-restricted-network-limits_installing-restricted-networks-installer-provisioned-vsphere","cluster-entitlements_installing-restricted-networks-installer-provisioned-vsphere","installation-vsphere-infrastructure_installing-restricted-networks-installer-provisioned-vsphere","installation-vsphere-installer-network-requirements_installing-restricted-networks-installer-provisioned-vsphere","installation-vsphere-installer-infra-requirements_installing-restricted-networks-installer-provisioned-vsphere","ssh-agent-using_installing-restricted-networks-installer-provisioned-vsphere","installation-adding-vcenter-root-certificates_installing-restricted-networks-installer-provisioned-vsphere","installation-creating-image-restricted_installing-restricted-networks-installer-provisioned-vsphere","installation-initializing_installing-restricted-networks-installer-provisioned-vsphere","installation-configuration-parameters_installing-restricted-networks-installer-provisioned-vsphere","installation-configuration-parameters-required_installing-restricted-networks-installer-provisioned-vsphere","installation-configuration-parameters-network_installing-restricted-networks-installer-provisioned-vsphere","installation-configuration-parameters-optional_installing-restricted-networks-installer-provisioned-vsphere","installation-configuration-parameters-additional-vsphere_installing-restricted-networks-installer-provisioned-vsphere","installation-configuration-parameters-optional-vsphere_installing-restricted-networks-installer-provisioned-vsphere","installation-installer-provisioned-vsphere-config-yaml_installing-restricted-networks-installer-provisioned-vsphere","installation-configure-proxy_installing-restricted-networks-installer-provisioned-vsphere","installation-launching-installer_installing-restricted-networks-installer-provisioned-vsphere","cli-installing-cli_installing-restricted-networks-installer-provisioned-vsphere","cli-logging-in-kubeadmin_installing-restricted-networks-installer-provisioned-vsphere","olm-restricted-networks-operatorhub_installing-restricted-networks-installer-provisioned-vsphere","installing-vsphere-restricted-networks-installer-provisioned-customizations-registry","registry-removed_installing-restricted-networks-installer-provisioned-vsphere","installation-registry-storage-config_installing-restricted-networks-installer-provisioned-vsphere","registry-configuring-storage-vsphere_installing-restricted-networks-installer-provisioned-vsphere","installation-vsphere-steal-clock-accounting_installing-restricted-networks-installer-provisioned-vsphere","cluster-telemetry_installing-restricted-networks-installer-provisioned-vsphere","next-steps_installing-restricted-networks-installer-provisioned-vsphere","installing-restricted-networks-vsphere","prerequisites-49","installation-about-restricted-networks_installing-restricted-networks-vsphere","installation-restricted-network-limits_installing-restricted-networks-vsphere","cluster-entitlements_installing-restricted-networks-vsphere","installation-vsphere-infrastructure_installing-restricted-networks-vsphere","installation-requirements-user-infra_installing-restricted-networks-vsphere","machine-requirements_installing-restricted-networks-vsphere","minimum-resource-requirements_installing-restricted-networks-vsphere","csr-management_installing-restricted-networks-vsphere","installation-network-user-infra_installing-restricted-networks-vsphere","installation-network-connectivity-user-infra_installing-restricted-networks-vsphere","installation-dns-user-infra_installing-restricted-networks-vsphere","installation-dns-user-infra-example_installing-restricted-networks-vsphere","installation-load-balancing-user-infra_installing-restricted-networks-vsphere","installation-load-balancing-user-infra-example_installing-restricted-networks-vsphere","installation-infrastructure-user-infra_installing-restricted-networks-vsphere","installation-user-provisioned-validating-dns_installing-restricted-networks-vsphere","ssh-agent-using_installing-restricted-networks-vsphere","installation-initializing-manual_installing-restricted-networks-vsphere","installation-vsphere-config-yaml_installing-restricted-networks-vsphere","installation-configure-proxy_installing-restricted-networks-vsphere","installation-user-infra-generate-k8s-manifest-ignition_installing-restricted-networks-vsphere","installation-special-config-chrony_installing-restricted-networks-vsphere","installation-extracting-infraid_installing-restricted-networks-vsphere","installation-vsphere-machines_installing-restricted-networks-vsphere","machine-vsphere-machines_installing-restricted-networks-vsphere","installation-disk-partitioning_installing-restricted-networks-vsphere","architecture-rhcos-updating-bootloader.adoc_installing-restricted-networks-vsphere","installation-installing-bare-metal_installing-restricted-networks-vsphere","cli-logging-in-kubeadmin_installing-restricted-networks-vsphere","installation-approve-csrs_installing-restricted-networks-vsphere","installation-operators-config_installing-restricted-networks-vsphere","olm-restricted-networks-operatorhub_installing-restricted-networks-vsphere","installation-registry-storage-config_installing-restricted-networks-vsphere","registry-configuring-storage-vsphere_installing-restricted-networks-vsphere","installation-registry-storage-non-production_installing-restricted-networks-vsphere","installation-registry-storage-block-recreate-rollout_installing-restricted-networks-vsphere","installation-complete-user-infra_installing-restricted-networks-vsphere","vsphere-pv-backup_installing-restricted-networks-vsphere","cluster-telemetry_installing-restricted-networks-vsphere","next-steps-45","uninstalling-cluster-vsphere-installer-provisioned","installation-uninstall-clouds_uninstalling-cluster-vsphere-installer-provisioned","using-vsphere-problem-detector-operator","vsphere-problem-detector-about_vsphere-problem-detector","vsphere-problem-detector-running_vsphere-problem-detector","vsphere-problem-detector-viewing-events_vsphere-problem-detector","vsphere-problem-detector-viewing-logs_vsphere-problem-detector","vsphere-problem-detector-config-checks_vsphere-problem-detector","vsphere-problem-detector-storage-class-config-check_vsphere-problem-detector","vsphere-problem-detector-operator-metrics_vsphere-problem-detector","additional-resources-5","/documentation/openshift_container_platform/4.8/html/installing/installing-on-vsphere",{"title":3063,"visible":10,"weight":3064,"urlFragment":3065,"anchor":16,"singlePageAnchor":3065,"subChapters":3066,"url":3329,"docTitle":928},"Installing on VMC",16,"installing-on-vmc",[3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311,3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327,3328],"preparing-to-install-on-vmc","preparing-to-install-on-vmc-prerequisites","choosing-a-method-to-install-ocp-on-vmc","installer-provisioned-method-to-install-ocp-on-vmc","user-provisioned-method-to-install-ocp-on-vmc","installation-vsphere-infrastructure_preparing-to-install-on-vmc","method-to-uninstall-ocp-on-vmc","installing-vmc","setting-up-vmc-for-vsphere_installing-vmc","vmc-sizer-tool_installing-vmc","vsphere-prerequisites","cluster-entitlements_installing-vmc","installation-vsphere-infrastructure_installing-vmc","installation-vsphere-installer-network-requirements_installing-vmc","installation-vsphere-installer-infra-requirements_installing-vmc","ssh-agent-using_installing-vmc","installation-obtaining-installer_installing-vmc","installation-adding-vcenter-root-certificates_installing-vmc","installation-launching-installer_installing-vmc","cli-installing-cli_installing-vmc","cli-logging-in-kubeadmin_installing-vmc","installing-vmc-registry","registry-removed_installing-vmc","installation-registry-storage-config_installing-vmc","registry-configuring-storage-vsphere_installing-vmc","installation-registry-storage-block-recreate-rollout_installing-vmc","vsphere-pv-backup_installing-vmc","installation-vsphere-steal-clock-accounting_installing-vmc","cluster-telemetry_installing-vmc","next-steps-46","installing-vmc-customizations","setting-up-vmc-for-vsphere_installing-vmc-customizations","vmc-sizer-tool_installing-vmc-customizations","vsphere-prerequisites-2","cluster-entitlements_installing-vmc-customizations","installation-vsphere-infrastructure_installing-vmc-customizations","installation-vsphere-installer-network-requirements_installing-vmc-customizations","installation-vsphere-installer-infra-requirements_installing-vmc-customizations","ssh-agent-using_installing-vmc-customizations","installation-obtaining-installer_installing-vmc-customizations","installation-adding-vcenter-root-certificates_installing-vmc-customizations","installation-initializing_installing-vmc-customizations","installation-configuration-parameters_installing-vmc-customizations","installation-configuration-parameters-required_installing-vmc-customizations","installation-configuration-parameters-network_installing-vmc-customizations","installation-configuration-parameters-optional_installing-vmc-customizations","installation-configuration-parameters-additional-vsphere_installing-vmc-customizations","installation-configuration-parameters-optional-vsphere_installing-vmc-customizations","installation-installer-provisioned-vsphere-config-yaml_installing-vmc-customizations","installation-configure-proxy_installing-vmc-customizations","installation-launching-installer_installing-vmc-customizations","cli-installing-cli_installing-vmc-customizations","cli-logging-in-kubeadmin_installing-vmc-customizations","installing-vmc-customizations-registry","registry-removed_installing-vmc-customizations","installation-registry-storage-config_installing-vmc-customizations","registry-configuring-storage-vsphere_installing-vmc-customizations","installation-registry-storage-block-recreate-rollout_installing-vmc-customizations","vsphere-pv-backup_installing-vmc-customizations","installation-vsphere-steal-clock-accounting_installing-vmc-customizations","cluster-telemetry_installing-vmc-customizations","next-steps-47","installing-vmc-network-customizations","setting-up-vmc-for-vsphere_installing-vmc-network-customizations","vmc-sizer-tool_installing-vmc-network-customizations","vsphere-prerequisites-3","cluster-entitlements_installing-vmc-network-customizations","installation-vsphere-infrastructure_installing-vmc-network-customizations","installation-vsphere-installer-network-requirements_installing-vmc-network-customizations","installation-vsphere-installer-infra-requirements_installing-vmc-network-customizations","ssh-agent-using_installing-vmc-network-customizations","installation-obtaining-installer_installing-vmc-network-customizations","installation-adding-vcenter-root-certificates_installing-vmc-network-customizations","installation-initializing_installing-vmc-network-customizations","installation-configuration-parameters_installing-vmc-network-customizations","installation-configuration-parameters-required_installing-vmc-network-customizations","installation-configuration-parameters-network_installing-vmc-network-customizations","installation-configuration-parameters-optional_installing-vmc-network-customizations","installation-configuration-parameters-additional-vsphere_installing-vmc-network-customizations","installation-configuration-parameters-optional-vsphere_installing-vmc-network-customizations","installation-installer-provisioned-vsphere-config-yaml_installing-vmc-network-customizations","installation-configure-proxy_installing-vmc-network-customizations","nw-network-config_installing-vmc-network-customizations","modifying-nwoperator-config-startup_installing-vmc-network-customizations","nw-operator-cr_installing-vmc-network-customizations","nw-operator-cr-cno-object_installing-vmc-network-customizations","installation-launching-installer_installing-vmc-network-customizations","cli-installing-cli_installing-vmc-network-customizations","cli-logging-in-kubeadmin_installing-vmc-network-customizations","installing-vmc-network-customizations-registry","registry-removed_installing-vmc-network-customizations","installation-registry-storage-config_installing-vmc-network-customizations","registry-configuring-storage-vsphere_installing-vmc-network-customizations","installation-registry-storage-block-recreate-rollout_installing-vmc-network-customizations","vsphere-pv-backup_installing-vmc-network-customizations","installation-vsphere-steal-clock-accounting_installing-vmc-network-customizations","cluster-telemetry_installing-vmc-network-customizations","next-steps-48","installing-restricted-networks-vmc","setting-up-vmc-for-vsphere_installing-restricted-networks-vmc","vmc-sizer-tool_installing-restricted-networks-vmc","vsphere-prerequisites_installing-restricted-networks-vmc","installation-about-restricted-networks_installing-restricted-networks-vmc","installation-restricted-network-limits_installing-restricted-networks-vmc","cluster-entitlements_installing-restricted-networks-vmc","installation-vsphere-infrastructure_installing-restricted-networks-vmc","installation-vsphere-installer-network-requirements_installing-restricted-networks-vmc","installation-vsphere-installer-infra-requirements_installing-restricted-networks-vmc","ssh-agent-using_installing-restricted-networks-vmc","installation-adding-vcenter-root-certificates_installing-restricted-networks-vmc","installation-creating-image-restricted_installing-restricted-networks-vmc","installation-initializing_installing-restricted-networks-vmc","installation-configuration-parameters_installing-restricted-networks-vmc","installation-configuration-parameters-required_installing-restricted-networks-vmc","installation-configuration-parameters-network_installing-restricted-networks-vmc","installation-configuration-parameters-optional_installing-restricted-networks-vmc","installation-configuration-parameters-additional-vsphere_installing-restricted-networks-vmc","installation-configuration-parameters-optional-vsphere_installing-restricted-networks-vmc","installation-installer-provisioned-vsphere-config-yaml_installing-restricted-networks-vmc","installation-configure-proxy_installing-restricted-networks-vmc","installation-launching-installer_installing-restricted-networks-vmc","cli-installing-cli_installing-restricted-networks-vmc","cli-logging-in-kubeadmin_installing-restricted-networks-vmc","olm-restricted-networks-operatorhub_installing-restricted-networks-vmc","installing-vmc-restricted-networks-installer-provisioned-customizations-registry","registry-removed_installing-restricted-networks-vmc","installation-registry-storage-config_installing-restricted-networks-vmc","registry-configuring-storage-vsphere_installing-restricted-networks-vmc","installation-vsphere-steal-clock-accounting_installing-restricted-networks-vmc","cluster-telemetry_installing-restricted-networks-vmc","next-steps_installing-restricted-networks-vmc","installing-vmc-user-infra","setting-up-vmc-for-vsphere_installing-vmc-user-infra","vmc-sizer-tool_installing-vmc-user-infra","vsphere-prerequisites-4","cluster-entitlements_installing-vmc-user-infra","installation-vsphere-infrastructure_installing-vmc-user-infra","installation-requirements-user-infra_installing-vmc-user-infra","machine-requirements_installing-vmc-user-infra","minimum-resource-requirements_installing-vmc-user-infra","csr-management_installing-vmc-user-infra","installation-network-user-infra_installing-vmc-user-infra","installation-network-connectivity-user-infra_installing-vmc-user-infra","installation-dns-user-infra_installing-vmc-user-infra","installation-dns-user-infra-example_installing-vmc-user-infra","installation-load-balancing-user-infra_installing-vmc-user-infra","installation-load-balancing-user-infra-example_installing-vmc-user-infra","installation-infrastructure-user-infra_installing-vmc-user-infra","installation-user-provisioned-validating-dns_installing-vmc-user-infra","ssh-agent-using_installing-vmc-user-infra","installation-obtaining-installer_installing-vmc-user-infra","installation-initializing-manual_installing-vmc-user-infra","installation-vsphere-config-yaml_installing-vmc-user-infra","installation-configure-proxy_installing-vmc-user-infra","installation-user-infra-generate-k8s-manifest-ignition_installing-vmc-user-infra","installation-extracting-infraid_installing-vmc-user-infra","installation-vsphere-machines_installing-vmc-user-infra","machine-vsphere-machines_installing-vmc-user-infra","installation-disk-partitioning_installing-vmc-user-infra","architecture-rhcos-updating-bootloader.adoc_installing-vmc-user-infra","cli-installing-cli_installing-vmc-user-infra","installation-installing-bare-metal_installing-vmc-user-infra","cli-logging-in-kubeadmin_installing-vmc-user-infra","installation-approve-csrs_installing-vmc-user-infra","installation-operators-config_installing-vmc-user-infra","registry-removed_installing-vmc-user-infra","installation-registry-storage-config_installing-vmc-user-infra","registry-configuring-storage-vsphere_installing-vmc-user-infra","installation-registry-storage-non-production_installing-vmc-user-infra","installation-registry-storage-block-recreate-rollout_installing-vmc-user-infra","installation-complete-user-infra_installing-vmc-user-infra","vsphere-pv-backup_installing-vmc-user-infra","cluster-telemetry_installing-vmc-user-infra","next-steps-49","installing-vmc-network-customizations-user-infra","setting-up-vmc-for-vsphere_installing-vmc-network-customizations-user-infra","vmc-sizer-tool_installing-vmc-network-customizations-user-infra","vsphere-prerequisites-5","cluster-entitlements_installing-vmc-network-customizations-user-infra","installation-vsphere-infrastructure_installing-vmc-network-customizations-user-infra","installation-requirements-user-infra_installing-vmc-network-customizations-user-infra","machine-requirements_installing-vmc-network-customizations-user-infra","minimum-resource-requirements_installing-vmc-network-customizations-user-infra","csr-management_installing-vmc-network-customizations-user-infra","installation-network-user-infra_installing-vmc-network-customizations-user-infra","installation-network-connectivity-user-infra_installing-vmc-network-customizations-user-infra","installation-dns-user-infra_installing-vmc-network-customizations-user-infra","installation-dns-user-infra-example_installing-vmc-network-customizations-user-infra","installation-load-balancing-user-infra_installing-vmc-network-customizations-user-infra","installation-load-balancing-user-infra-example_installing-vmc-network-customizations-user-infra","installation-infrastructure-user-infra_installing-vmc-network-customizations-user-infra","installation-user-provisioned-validating-dns_installing-vmc-network-customizations-user-infra","ssh-agent-using_installing-vmc-network-customizations-user-infra","installation-obtaining-installer_installing-vmc-network-customizations-user-infra","installation-initializing-manual_installing-vmc-network-customizations-user-infra","installation-vsphere-config-yaml_installing-vmc-network-customizations-user-infra","installation-configure-proxy_installing-vmc-network-customizations-user-infra","modifying-nwoperator-config-startup_installing-vmc-network-customizations-user-infra","nw-operator-cr_installing-vmc-network-customizations-user-infra","nw-operator-cr-cno-object_installing-vmc-network-customizations-user-infra","installation-generate-ignition-configs_installing-vmc-network-customizations-user-infra","installation-extracting-infraid_installing-vmc-network-customizations-user-infra","installation-vsphere-machines_installing-vmc-network-customizations-user-infra","machine-vsphere-machines_installing-vmc-network-customizations-user-infra","installation-disk-partitioning_installing-vmc-network-customizations-user-infra","architecture-rhcos-updating-bootloader.adoc_installing-vmc-network-customizations-user-infra","installation-installing-bare-metal_installing-vmc-network-customizations-user-infra","cli-logging-in-kubeadmin_installing-vmc-network-customizations-user-infra","installation-approve-csrs_installing-vmc-network-customizations-user-infra","installation-operators-config_installing-vmc-network-customizations-user-infra","registry-removed_installing-vmc-network-customizations-user-infra","installation-registry-storage-config_installing-vmc-network-customizations-user-infra","installation-registry-storage-block-recreate-rollout_installing-vmc-network-customizations-user-infra","installation-complete-user-infra_installing-vmc-network-customizations-user-infra","vsphere-pv-backup_installing-vmc-network-customizations-user-infra","cluster-telemetry_installing-vmc-network-customizations-user-infra","next-steps-50","installing-restricted-networks-vmc-user-infra","setting-up-vmc-for-vsphere_installing-restricted-networks-vmc-user-infra","vmc-sizer-tool_installing-restricted-networks-vmc-user-infra","vsphere-prerequisites-6","installation-about-restricted-networks_installing-restricted-networks-vmc-user-infra","installation-restricted-network-limits_installing-restricted-networks-vmc-user-infra","cluster-entitlements_installing-restricted-networks-vmc-user-infra","installation-vsphere-infrastructure_installing-restricted-networks-vmc-user-infra","installation-requirements-user-infra_installing-restricted-networks-vmc-user-infra","machine-requirements_installing-restricted-networks-vmc-user-infra","minimum-resource-requirements_installing-restricted-networks-vmc-user-infra","csr-management_installing-restricted-networks-vmc-user-infra","installation-network-user-infra_installing-restricted-networks-vmc-user-infra","installation-network-connectivity-user-infra_installing-restricted-networks-vmc-user-infra","installation-dns-user-infra_installing-restricted-networks-vmc-user-infra","installation-dns-user-infra-example_installing-restricted-networks-vmc-user-infra","installation-load-balancing-user-infra_installing-restricted-networks-vmc-user-infra","installation-load-balancing-user-infra-example_installing-restricted-networks-vmc-user-infra","installation-infrastructure-user-infra_installing-restricted-networks-vmc-user-infra","installation-user-provisioned-validating-dns_installing-restricted-networks-vmc-user-infra","ssh-agent-using_installing-restricted-networks-vmc-user-infra","installation-initializing-manual_installing-restricted-networks-vmc-user-infra","installation-vsphere-config-yaml_installing-restricted-networks-vmc-user-infra","installation-configure-proxy_installing-restricted-networks-vmc-user-infra","installation-user-infra-generate-k8s-manifest-ignition_installing-restricted-networks-vmc-user-infra","installation-extracting-infraid_installing-restricted-networks-vmc-user-infra","installation-vsphere-machines_installing-restricted-networks-vmc-user-infra","machine-vsphere-machines_installing-restricted-networks-vmc-user-infra","installation-disk-partitioning_installing-restricted-networks-vmc-user-infra","architecture-rhcos-updating-bootloader.adoc_installing-restricted-networks-vmc-user-infra","installation-installing-bare-metal_installing-restricted-networks-vmc-user-infra","cli-logging-in-kubeadmin_installing-restricted-networks-vmc-user-infra","installation-approve-csrs_installing-restricted-networks-vmc-user-infra","installation-operators-config_installing-restricted-networks-vmc-user-infra","olm-restricted-networks-operatorhub_installing-restricted-networks-vmc-user-infra","installation-registry-storage-config_installing-restricted-networks-vmc-user-infra","registry-configuring-storage-vsphere_installing-restricted-networks-vmc-user-infra","installation-registry-storage-non-production_installing-restricted-networks-vmc-user-infra","installation-registry-storage-block-recreate-rollout_installing-restricted-networks-vmc-user-infra","installation-complete-user-infra_installing-restricted-networks-vmc-user-infra","vsphere-pv-backup_installing-restricted-networks-vmc-user-infra","cluster-telemetry_installing-restricted-networks-vmc-user-infra","next-steps-51","uninstalling-cluster-vmc","installation-uninstall-clouds_uninstalling-cluster-vmc","/documentation/openshift_container_platform/4.8/html/installing/installing-on-vmc",{"title":3331,"visible":10,"weight":3332,"urlFragment":3333,"anchor":16,"singlePageAnchor":3333,"subChapters":3334,"url":3385,"docTitle":928},"Installing on any platform",17,"installing-on-any-platform",[3335,3336,3337,3338,3339,3340,3341,3342,3343,3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359,3360,3361,3362,3363,3364,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374,3375,3376,3377,3378,3379,3380,3381,3382,3383,3384],"installing-platform-agnostic","prerequisites-50","cluster-entitlements_installing-platform-agnostic","installation-requirements-user-infra_installing-platform-agnostic","machine-requirements_installing-platform-agnostic","minimum-resource-requirements_installing-platform-agnostic","csr-management_installing-platform-agnostic","installation-network-user-infra_installing-platform-agnostic","installation-network-connectivity-user-infra_installing-platform-agnostic","installation-dns-user-infra_installing-platform-agnostic","installation-dns-user-infra-example_installing-platform-agnostic","installation-load-balancing-user-infra_installing-platform-agnostic","installation-load-balancing-user-infra-example_installing-platform-agnostic","installation-infrastructure-user-infra_installing-platform-agnostic","installation-user-provisioned-validating-dns_installing-platform-agnostic","ssh-agent-using_installing-platform-agnostic","installation-obtaining-installer_installing-platform-agnostic","cli-installing-cli_installing-platform-agnostic","installation-initializing-manual_installing-platform-agnostic","installation-bare-metal-config-yaml_installing-platform-agnostic","sample-install-config-yaml-file-for-other-platforms","installation-configure-proxy_installing-platform-agnostic","installation-three-node-cluster_installing-platform-agnostic","installation-user-infra-generate-k8s-manifest-ignition_installing-platform-agnostic","creating-machines-bare-metal_installing-platform-agnostic","installation-user-infra-machines-iso_installing-platform-agnostic","installation-user-infra-machines-pxe_installing-platform-agnostic","installation-user-infra-machines-advanced_installing-platform-agnostic","installation-user-infra-machines-advanced_network_installing-platform-agnostic","installation-user-infra-machines-advanced_disk_installing-platform-agnostic","installation-user-infra-machines-advanced_vardisk_installing-platform-agnostic","installation-user-infra-machines-advanced_retaindisk_installing-platform-agnostic","installation-user-infra-machines-advanced_ignition_installing-platform-agnostic","installation-user-infra-machines-advanced_embed_ignition_installing-platform-agnostic","installation-user-infra-machines-static-network_installing-platform-agnostic","installation-user-infra-machines-routing-bonding_installing-platform-agnostic","architecture-rhcos-updating-bootloader.adoc_installing-platform-agnostic","installation-installing-bare-metal_installing-platform-agnostic","cli-logging-in-kubeadmin_installing-platform-agnostic","installation-approve-csrs_installing-platform-agnostic","installation-operators-config_installing-platform-agnostic","olm-restricted-networks-operatorhub_installing-platform-agnostic","registry-removed_installing-platform-agnostic","installation-registry-storage-config_installing-platform-agnostic","registry-configuring-storage-baremetal_installing-platform-agnostic","installation-registry-storage-non-production_installing-platform-agnostic","installation-registry-storage-block-recreate-rollout-bare-metal_installing-platform-agnostic","installation-complete-user-infra_installing-platform-agnostic","cluster-telemetry_installing-platform-agnostic","next-steps-52","/documentation/openshift_container_platform/4.8/html/installing/installing-on-any-platform",{"title":3387,"visible":10,"weight":3388,"urlFragment":3389,"anchor":16,"singlePageAnchor":3389,"subChapters":3390,"url":3411,"docTitle":928},"Installation configuration",18,"installation-configuration",[3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409,3410],"installing-customizing","installation-special-config-butane_installing-customizing","installation-special-config-butane-about_installing-customizing","installation-special-config-butane-install_installing-customizing","installation-special-config-butane-create_installing-customizing","installation-special-config-kargs_installing-customizing","installation-special-config-kmod_installing-customizing","building-testing-kernel-module-container_installing-customizing","provisioning-kernel-module-to-ocp_installing-customizing","provision-kernel-modules-via-machineconfig_installing-customizing","installation-special-config-storage_installing-customizing","installation-special-config-encrypt-disk_installing-customizing","installation-special-config-encryption-threshold_installing-customizing","installation-special-config-mirrored-disk_installing-customizing","installation-special-config-storage-procedure_installing-customizing","installation-special-config-raid_installing-customizing","installation-special-config-chrony_installing-customizing","additional-resources-6","configuring-firewall","configuring-firewall_configuring-firewall","/documentation/openshift_container_platform/4.8/html/installing/installation-configuration",{"title":3413,"visible":10,"weight":3414,"urlFragment":3415,"anchor":16,"singlePageAnchor":3415,"subChapters":3416,"url":3426,"docTitle":928},"Validating an installation",19,"validating-an-installation",[3417,3418,3419,3420,3421,3422,3423,3424,3425],"reviewing-the-installation-log_validating-an-installation","viewing-the-image-pull-source_validating-an-installation","getting-cluster-version-and-update-details_validating-an-installation","querying-the-status-of-cluster-nodes-using-the-cli_validating-an-installation","reviewing-cluster-status-from-the-openshift-web-console_validating-an-installation","reviewing-cluster-status-from-the-openshift-cluster-manager_validating-an-installation","checking-cluster-resource-availability-and-utilization_validating-an-installation","listing-alerts-that-are-firing_validating-an-installation","validating-an-installation-next-steps","/documentation/openshift_container_platform/4.8/html/installing/validating-an-installation",{"title":3428,"visible":10,"weight":3429,"urlFragment":3430,"anchor":16,"singlePageAnchor":3430,"subChapters":3431,"url":3438,"docTitle":928},"Troubleshooting installation issues",20,"installing-troubleshooting",[3432,3433,3434,3435,3436,3437],"prerequisites-51","installation-bootstrap-gather_installing-troubleshooting","installation-manually-gathering-logs-with-SSH_installing-troubleshooting","installation-manually-gathering-logs-without-SSH_installing-troubleshooting","installing-getting-debug-information_installing-troubleshooting","restarting-installation_installing-troubleshooting","/documentation/openshift_container_platform/4.8/html/installing/installing-troubleshooting",{"title":3440,"visible":10,"weight":3441,"urlFragment":3442,"anchor":16,"singlePageAnchor":3442,"subChapters":3443,"url":3450,"docTitle":928},"Support for FIPS cryptography",21,"installing-fips",[3444,3445,3446,3447,3448,3449],"installation-about-fips-validation_installing-fips","installation-about-fips-components_installing-fips","installation-about-fips-components-etcd_installing-fips","installation-about-fips-components-storage_installing-fips","installation-about-fips-components-runtimes_installing-fips","installing-fips-mode_installing-fips","/documentation/openshift_container_platform/4.8/html/installing/installing-fips",{"title":3452,"visible":10,"categoryName":10,"sections":3453},"Upgrade",[3454],{"title":3455,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":3456,"url":3457,"docTitle":3458,"sections":3459},"Updating clusters",[],"/documentation/openshift_container_platform/4.8/html/updating_clusters/index","updating_clusters",[3460,3466,3480,3494,3500,3508,3515,3528,3539],{"title":3461,"visible":10,"weight":23,"urlFragment":3462,"anchor":16,"singlePageAnchor":3462,"subChapters":3463,"url":3465,"docTitle":3458},"Understanding OpenShift Container Platform updates","understanding-openshift-updates",[3464],"update-common-terms_understanding-openshift-updates","/documentation/openshift_container_platform/4.8/html/updating_clusters/understanding-openshift-updates",{"title":3467,"visible":10,"weight":35,"urlFragment":3468,"anchor":16,"singlePageAnchor":3468,"subChapters":3469,"url":3479,"docTitle":3458},"Updating clusters overview","updating-clusters-overview",[3470,3471,3472,3473,3474,3475,3476,3477,3478],"updating-clusters-overview-understanding-container-platform-updates","updating-clusters-overview-upgrade-channels-and-releases","Understanding_clusteroperator_conditiontypes_updating-clusters-overview","updating-clusters-overview-prepare-eus-to-eus-update","updating-clusters-overview-update-cluster-using-web-console","updating-clusters-overview-update-cluster-using-cli","updating-clusters-overview-perform-canary-rollout-update","updating-clusters-overview-update-cluster-with-rhel-compute-machines","updating-clusters-overview-update-restricted-network-cluster","/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-clusters-overview",{"title":3481,"visible":10,"weight":46,"urlFragment":3482,"anchor":16,"singlePageAnchor":3482,"subChapters":3483,"url":3493,"docTitle":3458},"Understanding upgrade channels and releases","understanding-upgrade-channels-releases",[3484,3485,3486,3487,3488,3489,3490,3491,3492],"understanding-upgrade-channels_understanding-upgrade-channels-releases","candidate-version-channel_understanding-upgrade-channels-releases","fast-version-channel_understanding-upgrade-channels-releases","stable-version-channel_understanding-upgrade-channels-releases","eus-4y-channel_understanding-upgrade-channels-releases","upgrade-version-paths_understanding-upgrade-channels-releases","fast-stable-channel-strategies_understanding-upgrade-channels-releases","restricted-network-clusters_understanding-upgrade-channels-releases","switching-between-channels_understanding-upgrade-channels-releases","/documentation/openshift_container_platform/4.8/html/updating_clusters/understanding-upgrade-channels-releases",{"title":3495,"visible":10,"weight":68,"urlFragment":3496,"anchor":16,"singlePageAnchor":3496,"subChapters":3497,"url":3499,"docTitle":3458},"Preparing to perform an EUS-to-EUS update","preparing-eus-eus-upgrade",[3498],"updating-eus-to-eus-upgrade_eus-to-eus-upgrade","/documentation/openshift_container_platform/4.8/html/updating_clusters/preparing-eus-eus-upgrade",{"title":3501,"visible":10,"weight":435,"urlFragment":3502,"anchor":16,"singlePageAnchor":3502,"subChapters":3503,"url":3507,"docTitle":3458},"Updating a cluster using the web console","updating-cluster-within-minor",[1006,3504,3505,3506],"update-using-custom-machine-config-pools-canary_updating-cluster-within-minor","update-upgrading-web_updating-cluster-within-minor","update-changing-update-server-web_updating-cluster-within-minor","/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-cluster-within-minor",{"title":3509,"visible":10,"weight":453,"urlFragment":3510,"anchor":16,"singlePageAnchor":3510,"subChapters":3511,"url":3514,"docTitle":3458},"Updating a cluster using the CLI","updating-cluster-cli",[1017,3512,3513],"update-upgrading-cli_updating-cluster-cli","update-changing-update-server-cli_updating-cluster-cli","/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-cluster-cli",{"title":3516,"visible":10,"weight":468,"urlFragment":3517,"anchor":16,"singlePageAnchor":3517,"subChapters":3518,"url":3527,"docTitle":3458},"Performing a canary rollout update","update-using-custom-machine-config-pools",[3519,3520,3521,3522,3523,3524,3525,3526],"update-using-custom-machine-config-pools-about-mcp_update-using-custom-machine-config-pools","update-using-custom-machine-config-pools-about_update-using-custom-machine-config-pools","update-using-custom-machine-config-pools-mcp_update-using-custom-machine-config-pools","update-using-custom-machine-config-pools-pause_update-using-custom-machine-config-pools","update-using-custom-machine-config-pools-update_update-using-custom-machine-config-pools","update-using-custom-machine-config-pools-unpause_update-using-custom-machine-config-pools","update-using-custom-machine-config-pools-fail_update-using-custom-machine-config-pools","update-using-custom-machine-config-pools-mcp-remove_update-using-custom-machine-config-pools","/documentation/openshift_container_platform/4.8/html/updating_clusters/update-using-custom-machine-config-pools",{"title":3529,"visible":10,"weight":869,"urlFragment":3530,"anchor":16,"singlePageAnchor":3530,"subChapters":3531,"url":3538,"docTitle":3458},"Updating a cluster that includes RHEL compute machines","updating-cluster-rhel-compute",[1038,3532,3533,3534,3535,3536,3537],"update-upgrading-web_updating-cluster-rhel-compute","updating-cluster-rhel-compute-hooks","rhel-compute-about-hooks_updating-cluster-rhel-compute","rhel-compute-using-hooks_updating-cluster-rhel-compute","rhel-compute-available-hooks_updating-cluster-rhel-compute","rhel-compute-updating-minor_updating-cluster-rhel-compute","/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-cluster-rhel-compute",{"title":3540,"visible":10,"weight":877,"urlFragment":3541,"anchor":16,"singlePageAnchor":3541,"subChapters":3542,"url":3575,"docTitle":3458},"Updating a cluster in a disconnected environment","updating-a-cluster-in-a-disconnected-environment",[3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557,3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,1089,3572,3573,3574,514],"about-restricted-network-updates","about-disconnected-updates-mirroring","about-disconnected-updates-update","mirroring-ocp-image-repository","prerequisites_mirroring-ocp-image-repository","updating-restricted-network-mirror-host","cli-installing-cli_mirroring-ocp-image-repository","installation-adding-registry-pull-secret_mirroring-ocp-image-repository","update-mirror-repository_mirroring-ocp-image-repository","updating-restricted-network-cluster-OSUS","update-service-overview_updating-restricted-network-cluster-osus","update-service-prereqs","registry-configuration-for-update-service","images-update-global-pull-secret_updating-restricted-network-cluster-osus","update-service-install","update-service-install-web-console_updating-restricted-network-cluster-osus","update-service-install-cli_updating-restricted-network-cluster-osus","update-service-graph-data_updating-restricted-network-cluster-osus","update-service-create-service","update-service-create-service-web-console_updating-restricted-network-cluster-osus","update-service-create-service-cli_updating-restricted-network-cluster-osus","update-service-configure-cvo","update-service-delete-service","update-service-delete-service-web-console_updating-restricted-network-cluster-osus","update-service-delete-service-cli_updating-restricted-network-cluster-osus","update-service-uninstall","update-service-uninstall-web-console_updating-restricted-network-cluster-osus","update-service-uninstall-cli_updating-restricted-network-cluster-osus","updating-restricted-network-cluster","update-restricted_updating-restricted-network-cluster","images-configuration-registry-mirror_updating-restricted-network-cluster","generating-icsp-object-scoped-to-a-registry_updating-restricted-network-cluster","/documentation/openshift_container_platform/4.8/html/updating_clusters/updating-a-cluster-in-a-disconnected-environment",{"title":3577,"visible":10,"categoryName":10,"sections":3578},"Configure",[3579,3804,4113,4681,4768],{"title":3580,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":3581,"url":3582,"docTitle":3583,"sections":3584},"Storage",[],"/documentation/openshift_container_platform/4.8/html/storage/index","storage",[3585,3596,3605,3633,3709,3775,3785],{"title":3586,"visible":10,"weight":23,"urlFragment":3587,"anchor":16,"singlePageAnchor":3587,"subChapters":3588,"url":3595,"docTitle":3583},"OpenShift Container Platform storage overview","storage-overview",[3589,3590,3591,3592,3593,3594],"openshift-storage-common-terms_storage-overview","storage-types","ephemeral-storage","persistent-storage","container-storage-interface","dynamic-provisioning-overview","/documentation/openshift_container_platform/4.8/html/storage/storage-overview",{"title":3597,"visible":10,"weight":35,"urlFragment":3598,"anchor":16,"singlePageAnchor":3598,"subChapters":3599,"url":3604,"docTitle":3583},"Understanding ephemeral storage","understanding-ephemeral-storage",[3600,3601,3602,3603],"storage-ephemeral-storage-overview_understanding-ephemeral-storage","storage-ephemeral-storage-types_understanding-ephemeral-storage","storage-ephemeral-storage-manage_understanding-ephemeral-storage","storage-ephemeral-storage-monitoring_understanding-ephemeral-storage","/documentation/openshift_container_platform/4.8/html/storage/understanding-ephemeral-storage",{"title":3606,"visible":10,"weight":46,"urlFragment":3607,"anchor":16,"singlePageAnchor":3607,"subChapters":3608,"url":3632,"docTitle":3583},"Understanding persistent storage","understanding-persistent-storage",[3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631],"persistent-storage-overview_understanding-persistent-storage","lifecycle-volume-claim_understanding-persistent-storage","provisioning_understanding-persistent-storage","binding_understanding-persistent-storage","using-pods_understanding-persistent-storage","pvcprotection_understanding-persistent-storage","releasing_understanding-persistent-storage","reclaiming_understanding-persistent-storage","reclaim-manual_understanding-persistent-storage","reclaim-policy_understanding-persistent-storage","persistent-volumes_understanding-persistent-storage","types-of-persistent-volumes_understanding-persistent-storage","pv-capacity_understanding-persistent-storage","pv-access-modes_understanding-persistent-storage","pv-phase_understanding-persistent-storage","pv-mount-options_understanding-persistent-storage","persistent-volume-claims_understanding-persistent-storage","pvc-storage-class_understanding-persistent-storage","pvc-access-modes_understanding-persistent-storage","pvc-resources_understanding-persistent-storage","pvc-claims-as-volumes_understanding-persistent-storage","block-volume-support_understanding-persistent-storage","block-volume-examples_understanding-persistent-storage","/documentation/openshift_container_platform/4.8/html/storage/understanding-persistent-storage",{"title":3634,"visible":10,"weight":68,"urlFragment":3635,"anchor":16,"singlePageAnchor":3635,"subChapters":3636,"url":3708,"docTitle":3583},"Configuring persistent storage","configuring-persistent-storage",[3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679,3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695,3696,3697,3698,3699,3700,3701,3702,3703,1006,3704,3705,3706,3707],"persistent-storage-aws","storage-create-EBS-storage-class_persistent-storage-aws","creating-the-persistent-volume-claim","volume-format-AWS_persistent-storage-aws","maximum-number-of-ebs-volumes-on-a-node_persistent-storage-aws","additional-resources_persistent-storage-aws","persistent-storage-using-azure","storage-create-azure-storage-class_persistent-storage-azure","creating-the-persistent-volume-claim-2","volume-format-azure_persistent-storage-azure","persistent-storage-using-azure-file","create-azure-file-secret_persistent-storage-azure-file","create-azure-file-pod_persistent-storage-azure-file","persistent-storage-cinder","persistent-storage-cinder-provisioning_persistent-storage-cinder","persistent-storage-cinder-creating-pv_persistent-storage-cinder","persistent-storage-cinder-pv-format_persistent-storage-cinder","persistent-storage-cinder-volume-security_persistent-storage-cinder","persistent-storage-cinder-maximum-volume_persistent-storage-cinder","persistent-storage-using-fibre","provisioning-fibre_persistent-storage-fibre","enforcing-disk-quota_persistent-storage-fibre","fibre-volume-security_persistent-storage-fibre","persistent-storage-using-flexvolume","flexvolume-drivers_persistent-storage-flexvolume","flexvolume-driver-example_persistent-storage-flexvolume","flexvolume-installing_persistent-storage-flexvolume","flexvolume-driver-consuming_persistent-storage-flexvolume","persistent-storage-using-gce","storage-create-GCE-storage-class_persistent-storage-gce","creating-the-persistent-volume-claim-3","volume-format-GCE_persistent-storage-gce","persistent-storage-using-hostpath","persistent-storage-hostpath-about_persistent-storage-hostpath","hostpath-static-provisioning_persistent-storage-hostpath","persistent-storage-hostpath-pod_persistent-storage-hostpath","persistent-storage-using-iscsi","persistent-storage-iscsi-provisioning_persistent-storage-iscsi","enforcing-disk-quotas-iscsi_persistent-storage-iscsi","volume-security-iscsi_persistent-storage-iscsi","challenge-handshake-authentication-protocol-chap-configuration","iscsi-multipath_persistent-storage-iscsi","iscsi-custom-iqn_persistent-storage-iscsi","persistent-storage-using-local-volume","local-storage-install_persistent-storage-local","local-volume-cr_persistent-storage-local","local-create-cr-manual_persistent-storage-local","create-local-pvc_persistent-storage-local","local-pod_persistent-storage-local","local-storage-discovery_persistent-storage-local","local-tolerations_persistent-storage-local","deleting-the-local-storage-operator-resources","local-removing-device_persistent-storage-local","local-storage-uninstall_persistent-storage-local","persistent-storage-using-nfs","persistent-storage-nfs-provisioning_persistent-storage-nfs","nfs-enforcing-disk-quota_persistent-storage-nfs","nfs-volume-security_persistent-storage-nfs","storage-persistent-storage-nfs-group-ids_persistent-storage-nfs","nfs-user-id_persistent-storage-nfs","nfs-selinux_persistent-storage-nfs","export-settings","nfs-reclaiming-resources_persistent-storage-nfs","additional-configuration-and-troubleshooting","red-hat-openshift-container-storage","persistent-storage-using-vsphere","dynamically-provisioning-vmware-vsphere-volumes","vsphere-dynamic-provisioning_persistent-storage-efs","vsphere-dynamic-provisioning-cli_persistent-storage-efs","vsphere-static-provisioning_persistent-storage-efs","vsphere-formatting-volumes_persistent-storage-efs","/documentation/openshift_container_platform/4.8/html/storage/configuring-persistent-storage",{"title":3710,"visible":10,"weight":435,"urlFragment":3711,"anchor":16,"singlePageAnchor":3711,"subChapters":3712,"url":3774,"docTitle":3583},"Using Container Storage Interface (CSI)","using-container-storage-interface-csi",[3713,3714,3715,3716,3717,3718,3719,3720,3721,3722,3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738,3739,3740,3741,3742,3743,1546,3744,3745,3746,3747,3748,3749,3750,3751,3752,3753,3754,3755,3756,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,3767,3768,3769,3770,3771,3772,3773,1598],"persistent-storage-csi","persistent-storage-csi-architecture_persistent-storage-csi","external-csi-contollers_persistent-storage-csi","csi-driver-daemonset_persistent-storage-csi","csi-drivers-supported_persistent-storage-csi","csi-dynamic-provisioning_persistent-storage-csi","csi-example-usage_persistent-storage-csi","ephemeral-storage-csi-inline","ephemeral-storage-csi-inline-overview_ephemeral-storage-csi-inline","support-limitations","ephemeral-storage-csi-inline-pod_ephemeral-storage-csi-inline","persistent-storage-csi-snapshots","persistent-storage-csi-snapshots-overview_persistent-storage-csi-snapshots","persistent-storage-csi-snapshots-controller-sidecar_persistent-storage-csi-snapshots","external-controller","external-sidecar","persistent-storage-csi-snapshots-operator_persistent-storage-csi-snapshots","volume-snapshot-crds","persistent-storage-csi-snapshots-provision_persistent-storage-csi-snapshots","snapshots-dynamic-provisioning_persistent-storage-csi-snapshots","snapshots-manual-provisioning_persistent-storage-csi-snapshots","persistent-storage-csi-snapshots-create_persistent-storage-csi-snapshots","persistent-storage-csi-snapshots-delete_persistent-storage-csi-snapshots","persistent-storage-csi-snapshots-restore_persistent-storage-csi-snapshots","persistent-storage-csi-cloning","persistent-storage-csi-cloning-overview_persistent-storage-csi-cloning","support-limitations-2","persistent-storage-csi-cloning-provisioning_persistent-storage-csi-cloning","persistent-storage-csi-migration","persistent-storage-csi-migration-overview_persistent-storage-csi-migration","persistent-storage-csi-migration-enable_persistent-storage-csi-migration","persistent-storage-csi-ebs","overview","csi-about_persistent-storage-csi-ebs","persistent-storage-csi-azure-disk","overview-2","csi-about_persistent-storage-csi-azure","csi-tp-enable_persistent-storage-csi-azure","persistent-storage-csi-gcp-pd","overview-3","csi-about_persistent-storage-csi-gcp-pd","persistent-storage-csi-gcp-pd-storage-class-ref_persistent-storage-csi-gcp-pd","persistent-storage-csi-gcp-pd-encrypted-pv_persistent-storage-csi-gcp-pd","persistent-storage-csi-cinder","overview-4","csi-about_persistent-storage-csi-cinder","persistent-storage-csi-cinder_persistent-storage-csi-cinder","persistent-storage-csi-manila","overview-5","csi-about_persistent-storage-csi-manila","persistent-storage-csi-manila-limitations_persistent-storage-csi-manila","persistent-storage-csi-manila-dynamic-provisioning_persistent-storage-csi-manila","persistent-storage-csi-ovirt","overview-6","csi-about_persistent-storage-csi-ovirt","ovirt-csi-driver-storage-class_persistent-storage-csi-ovirt","persistent-storage-rhv_persistent-storage-csi-ovirt","persistent-storage-vsphere","overview-7","csi-about_persistent-storage-csi-vsphere","csi-tp-enable_persistent-storage-csi-vsphere","/documentation/openshift_container_platform/4.8/html/storage/using-container-storage-interface-csi",{"title":3776,"visible":10,"weight":453,"urlFragment":3777,"anchor":16,"singlePageAnchor":3777,"subChapters":3778,"url":3784,"docTitle":3583},"Expanding persistent volumes","expanding-persistent-volumes",[3779,3780,3781,3782,3783],"add-volume-expansion_expanding-persistent-volumes","expanding-csi-volumes_expanding-persistent-volumes","expanding-flexvolume_expanding-persistent-volumes","expanding-pvc-filesystem_expanding-persistent-volumes","expanding-recovering-from-failure_expanding-persistent-volumes","/documentation/openshift_container_platform/4.8/html/storage/expanding-persistent-volumes",{"title":3786,"visible":10,"weight":468,"urlFragment":3787,"anchor":16,"singlePageAnchor":3787,"subChapters":3788,"url":3803,"docTitle":3583},"Dynamic provisioning","dynamic-provisioning",[3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801,3802],"about_dynamic-provisioning","available-plug-ins_dynamic-provisioning","defining-storage-classes_dynamic-provisioning","basic-storage-class-definition_dynamic-provisioning","storage-class-annotations_dynamic-provisioning","openstack-cinder-storage-class_dynamic-provisioning","openstack-manila-csi-definition_dynamic-provisioning","aws-definition_dynamic-provisioning","azure-disk-definition_dynamic-provisioning","azure-file-definition_dynamic-provisioning","azure-file-considerations_dynamic-provisioning","gce-persistentdisk-storage-class_dynamic-provisioning","vsphere-definition_dynamic-provisioning","change-default-storage-class_dynamic-provisioning","/documentation/openshift_container_platform/4.8/html/storage/dynamic-provisioning",{"title":3805,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":3806,"url":3807,"docTitle":3808,"sections":3809},"Authentication and authorization",[],"/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/index","authentication_and_authorization",[3810,3818,3830,3844,3852,3860,3870,3946,3965,3972,3980,3991,3998,4006,4013,4034,4042,4071],{"title":3811,"visible":10,"weight":23,"urlFragment":3812,"anchor":16,"singlePageAnchor":3812,"subChapters":3813,"url":3817,"docTitle":3808},"Overview of authentication and authorization","overview-of-authentication-authorization",[3814,3815,3816],"openshift-auth-common-terms_overview-of-authentication-authorization","authentication-overview","authorization-overview","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/overview-of-authentication-authorization",{"title":3819,"visible":10,"weight":35,"urlFragment":3820,"anchor":16,"singlePageAnchor":3820,"subChapters":3821,"url":3829,"docTitle":3808},"Understanding authentication","understanding-authentication",[3822,3823,3824,3825,3826,3827,3828],"rbac-users_understanding-authentication","rbac-groups_understanding-authentication","rbac-api-authentication_understanding-authentication","oauth-server-overview_understanding-authentication","oauth-token-requests_understanding-authentication","authentication-api-impersonation_understanding-authentication","authentication-prometheus-system-metrics_understanding-authentication","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/understanding-authentication",{"title":3831,"visible":10,"weight":46,"urlFragment":3832,"anchor":16,"singlePageAnchor":3832,"subChapters":3833,"url":3843,"docTitle":3808},"Configuring the internal OAuth server","configuring-internal-oauth",[3834,3835,3836,3837,3838,3839,3840,3841,3842],"oauth-server-overview_configuring-internal-oauth","oauth-token-request-flows_configuring-internal-oauth","oauth-internal-options_configuring-internal-oauth","oauth-token-duration_configuring-internal-oauth","oauth-grant-options_configuring-internal-oauth","oauth-configuring-internal-oauth_configuring-internal-oauth","oauth-token-inactivity-timeout_configuring-internal-oauth","oauth-server-metadata_configuring-internal-oauth","oauth-troubleshooting-api-events_configuring-internal-oauth","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/configuring-internal-oauth",{"title":3845,"visible":10,"weight":68,"urlFragment":3846,"anchor":16,"singlePageAnchor":3846,"subChapters":3847,"url":3851,"docTitle":3808},"Configuring OAuth clients","configuring-oauth-clients",[3848,3849,3850,1546],"oauth-default-clients_configuring-oauth-clients","oauth-register-additional-client_configuring-oauth-clients","oauth-token-inactivity-timeout_configuring-oauth-clients","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/configuring-oauth-clients",{"title":3853,"visible":10,"weight":435,"urlFragment":3854,"anchor":16,"singlePageAnchor":3854,"subChapters":3855,"url":3859,"docTitle":3808},"Managing user-owned OAuth access tokens","managing-oauth-access-tokens",[3856,3857,3858],"oauth-list-tokens_managing-oauth-access-tokens","oauth-view-details-tokens_managing-oauth-access-tokens","oauth-delete-tokens_managing-oauth-access-tokens","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/managing-oauth-access-tokens",{"title":3861,"visible":10,"weight":453,"urlFragment":3862,"anchor":16,"singlePageAnchor":3862,"subChapters":3863,"url":3869,"docTitle":3808},"Understanding identity provider configuration","understanding-identity-provider",[3864,3865,3866,3867,3868],"identity-provider-overview_understanding-identity-provider","supported-identity-providers","removing-kubeadmin_understanding-identity-provider","identity-provider-parameters_understanding-identity-provider","identity-provider-default-CR_understanding-identity-provider","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/understanding-identity-provider",{"title":3871,"visible":10,"weight":468,"urlFragment":3872,"anchor":16,"singlePageAnchor":3872,"subChapters":3873,"url":3945,"docTitle":3808},"Configuring identity providers","configuring-identity-providers",[3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944],"configuring-htpasswd-identity-provider","identity-provider-overview_configuring-htpasswd-identity-provider","identity-provider-htpasswd-about_configuring-htpasswd-identity-provider","creating-htpasswd-file","identity-provider-creating-htpasswd-file-linux_configuring-htpasswd-identity-provider","identity-provider-creating-htpasswd-file-windows_configuring-htpasswd-identity-provider","identity-provider-creating-htpasswd-secret_configuring-htpasswd-identity-provider","identity-provider-htpasswd-CR_configuring-htpasswd-identity-provider","add-identity-provider_configuring-htpasswd-identity-provider","identity-provider-htpasswd-update-users_configuring-htpasswd-identity-provider","identity-provider-configuring-using-the-web-console_configuring-htpasswd-identity-provider","configuring-keystone-identity-provider","identity-provider-overview_configuring-keystone-identity-provider","identity-provider-keystone-about_configuring-keystone-identity-provider","identity-provider-creating-secret-tls_configuring-keystone-identity-provider","identity-provider-creating-configmap_configuring-keystone-identity-provider","identity-provider-keystone-CR_configuring-keystone-identity-provider","add-identity-provider_configuring-keystone-identity-provider","configuring-ldap-identity-provider","identity-provider-overview_configuring-ldap-identity-provider","identity-provider-about-ldap_configuring-ldap-identity-provider","identity-provider-creating-ldap-secret_configuring-ldap-identity-provider","identity-provider-creating-configmap_configuring-ldap-identity-provider","identity-provider-ldap-CR_configuring-ldap-identity-provider","add-identity-provider_configuring-ldap-identity-provider","configuring-basic-authentication-identity-provider","identity-provider-overview_configuring-basic-authentication-identity-provider","identity-provider-about-basic-authentication_configuring-basic-authentication-identity-provider","identity-provider-creating-secret-tls_configuring-basic-authentication-identity-provider","identity-provider-creating-configmap_configuring-basic-authentication-identity-provider","identity-provider-basic-authentication-CR_configuring-basic-authentication-identity-provider","add-identity-provider_configuring-basic-authentication-identity-provider","example-apache-httpd-configuration_configuring-basic-authentication-identity-provider","file-requirements","identity-provider-basic-authentication-troubleshooting_configuring-basic-authentication-identity-provider","configuring-request-header-identity-provider","identity-provider-overview_configuring-request-header-identity-provider","identity-provider-about-request-header_configuring-request-header-identity-provider","sspi-windows_configuring-request-header-identity-provider","identity-provider-creating-configmap_configuring-request-header-identity-provider","identity-provider-request-header-CR_configuring-request-header-identity-provider","add-identity-provider_configuring-request-header-identity-provider","example-apache-auth-config-using-request-header","configuring-github-identity-provider","identity-provider-overview_configuring-github-identity-provider","identity-provider-github-about_configuring-github-identity-provider","identity-provider-registering-github_configuring-github-identity-provider","identity-provider-creating-secret_configuring-github-identity-provider","identity-provider-creating-configmap_configuring-github-identity-provider","identity-provider-github-CR_configuring-github-identity-provider","add-identity-provider_configuring-github-identity-provider","configuring-gitlab-identity-provider","identity-provider-overview_configuring-gitlab-identity-provider","identity-provider-gitlab-about_configuring-gitlab-identity-provider","identity-provider-creating-secret_configuring-gitlab-identity-provider","identity-provider-creating-configmap_configuring-gitlab-identity-provider","identity-provider-gitlab-CR_configuring-gitlab-identity-provider","add-identity-provider_configuring-gitlab-identity-provider","configuring-google-identity-provider","identity-provider-overview_configuring-google-identity-provider","identity-provider-google-about_configuring-google-identity-provider","identity-provider-creating-secret_configuring-google-identity-provider","identity-provider-google-CR_configuring-google-identity-provider","add-identity-provider_configuring-google-identity-provider","configuring-oidc-identity-provider","identity-provider-overview_configuring-oidc-identity-provider","identity-provider-creating-secret_configuring-oidc-identity-provider","identity-provider-creating-configmap_configuring-oidc-identity-provider","identity-provider-oidc-CR_configuring-oidc-identity-provider","add-identity-provider_configuring-oidc-identity-provider","identity-provider-configuring-using-the-web-console_configuring-oidc-identity-provider","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/configuring-identity-providers",{"title":3947,"visible":10,"weight":869,"urlFragment":3948,"anchor":16,"singlePageAnchor":3948,"subChapters":3949,"url":3964,"docTitle":3808},"Using RBAC to define and apply permissions","using-rbac",[3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963],"authorization-overview_using-rbac","default-roles_using-rbac","evaluating-authorization_using-rbac","cluster-role-aggregations_using-rbac","rbac-projects-namespaces_using-rbac","rbac-default-projects_using-rbac","viewing-cluster-roles_using-rbac","viewing-local-roles_using-rbac","adding-roles_using-rbac","creating-local-role_using-rbac","creating-cluster-role_using-rbac","local-role-binding-commands_using-rbac","cluster-role-binding-commands_using-rbac","creating-cluster-admin_using-rbac","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/using-rbac",{"title":3966,"visible":10,"weight":877,"urlFragment":3967,"anchor":16,"singlePageAnchor":3967,"subChapters":3968,"url":3971,"docTitle":3808},"Removing the kubeadmin user","removing-kubeadmin",[3969,3970],"understanding-kubeadmin_removing-kubeadmin","removing-kubeadmin_removing-kubeadmin","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/removing-kubeadmin",{"title":3973,"visible":10,"weight":888,"urlFragment":3974,"anchor":16,"singlePageAnchor":3974,"subChapters":3975,"url":3979,"docTitle":3808},"Understanding and creating service accounts","understanding-and-creating-service-accounts",[3976,3977,3978],"service-accounts-overview_understanding-service-accounts","service-accounts-managing_understanding-service-accounts","service-accounts-granting-roles_understanding-service-accounts","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/understanding-and-creating-service-accounts",{"title":3981,"visible":10,"weight":899,"urlFragment":3982,"anchor":16,"singlePageAnchor":3982,"subChapters":3983,"url":3990,"docTitle":3808},"Using service accounts in applications","using-service-accounts",[3984,3985,3986,3987,3988,3989],"service-accounts-overview_using-service-accounts","service-accounts-default_using-service-accounts","default-cluster-service-accounts_using-service-accounts","default-service-accounts-and-roles_using-service-accounts","service-accounts-managing_using-service-accounts","service-accounts-using-credentials-externally_using-service-accounts","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/using-service-accounts",{"title":3992,"visible":10,"weight":906,"urlFragment":3993,"anchor":16,"singlePageAnchor":3993,"subChapters":3994,"url":3997,"docTitle":3808},"Using a service account as an OAuth client","using-service-accounts-as-oauth-client",[3995,3996],"service-accounts-as-oauth-clients_using-service-accounts-as-oauth-client","redirect-uris-for-service-accounts_using-service-accounts-as-oauth-client","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/using-service-accounts-as-oauth-client",{"title":3999,"visible":10,"weight":915,"urlFragment":4000,"anchor":16,"singlePageAnchor":4000,"subChapters":4001,"url":4005,"docTitle":3808},"Scoping tokens","tokens-scoping",[4002,4003,4004],"tokens-scoping-about_configuring-internal-oauth","scoping-tokens-user-scopes_configuring-internal-oauth","scoping-tokens-role-scope_configuring-internal-oauth","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/tokens-scoping",{"title":4007,"visible":10,"weight":2799,"urlFragment":4008,"anchor":16,"singlePageAnchor":4008,"subChapters":4009,"url":4012,"docTitle":3808},"Using bound service account tokens","bound-service-account-tokens",[4010,4011],"bound-sa-tokens-about_bound-service-account-tokens","bound-sa-tokens-configuring_bound-service-account-tokens","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/bound-service-account-tokens",{"title":4014,"visible":10,"weight":3064,"urlFragment":4015,"anchor":16,"singlePageAnchor":4015,"subChapters":4016,"url":4033,"docTitle":3808},"Managing security context constraints","managing-pod-security-policies",[4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032],"security-context-constraints-about_configuring-internal-oauth","default-sccs_configuring-internal-oauth","scc-settings_configuring-internal-oauth","authorization-SCC-strategies_configuring-internal-oauth","authorization-controlling-volumes_configuring-internal-oauth","admission_configuring-internal-oauth","scc-prioritization_configuring-internal-oauth","security-context-constraints-pre-allocated-values_configuring-internal-oauth","security-context-constraints-example_configuring-internal-oauth","security-context-constraints-creating_configuring-internal-oauth","role-based-access-to-ssc_configuring-internal-oauth","security-context-constraints-command-reference_configuring-internal-oauth","listing-security-context-constraints_configuring-internal-oauth","examining-a-security-context-constraints-object_configuring-internal-oauth","deleting-security-context-constraints_configuring-internal-oauth","updating-security-context-constraints_configuring-internal-oauth","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/managing-pod-security-policies",{"title":4035,"visible":10,"weight":3332,"urlFragment":4036,"anchor":16,"singlePageAnchor":4036,"subChapters":4037,"url":4041,"docTitle":3808},"Impersonating the system:admin user","impersonating-system-admin",[4038,4039,4040],"authentication-api-impersonation_impersonating-system-admin","impersonation-system-admin-user_impersonating-system-admin","impersonation-system-admin-group_impersonating-system-admin","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/impersonating-system-admin",{"title":4043,"visible":10,"weight":3388,"urlFragment":4044,"anchor":16,"singlePageAnchor":4044,"subChapters":4045,"url":4070,"docTitle":3808},"Syncing LDAP groups","ldap-syncing",[4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069],"ldap-syncing-about_ldap-syncing-groups","ldap-syncing-config-rfc2307_ldap-syncing-groups","ldap-syncing-config-activedir_ldap-syncing-groups","ldap-syncing-config-augmented-activedir_ldap-syncing-groups","ldap-syncing-running_ldap-syncing-groups","ldap-syncing-running-all-ldap_ldap-syncing-groups","ldap-syncing-running-openshift_ldap-syncing-groups","ldap-syncing-running-subset_ldap-syncing-groups","ldap-syncing-pruning_ldap-syncing-groups","ldap-auto-syncing_ldap-syncing-groups","ldap-syncing-examples_ldap-syncing-groups","ldap-syncing-rfc2307_ldap-syncing-groups","ldap-syncing-rfc2307-user-defined_ldap-syncing-groups","ldap-syncing-rfc2307-user-defined-error_ldap-syncing-groups","ldap-syncing-activedir_ldap-syncing-groups","ldap-syncing-augmented-activedir_ldap-syncing-groups","ldap-syncing-nesting_ldap-syncing-groups","ldap-syncing-spec_ldap-syncing-groups","sync-ldap-v1-ldapsyncconfig","sync-ldap-v1-stringsource","sync-ldap-v1-ldapquery","sync-ldap-v1-rfc2307config","sync-ldap-v1-activedirectoryconfig","sync-ldap-v1-augmentedactivedirectoryconfig","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/ldap-syncing",{"title":4072,"visible":10,"weight":3414,"urlFragment":4073,"anchor":16,"singlePageAnchor":4073,"subChapters":4074,"url":4112,"docTitle":3808},"Managing cloud provider credentials","managing-cloud-provider-credentials",[4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,1598,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,1626,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111],"about-cloud-credential-operator","about-cloud-credential-operator-modes","about-cloud-credential-operator-default","additional-resources_about-cloud-credential-operator","cco-mode-mint","mint-mode-permissions","mint-mode-permissions-aws","mint-mode-permissions-gcp","admin-credentials-root-secret-formats_cco-mode-mint","mint-mode-with-removal-or-rotation-of-admin-credential_cco-mode-mint","manually-rotating-cloud-creds_cco-mode-mint","manually-removing-cloud-creds_cco-mode-mint","cco-mode-passthrough","passthrough-mode-permissions","passthrough-mode-permissions-aws","passthrough-mode-permissions-azure","passthrough-mode-permissions-gcp","passthrough-mode-permissions-rhosp","passthrough-mode-permissions-rhv","passthrough-mode-permissions-vsware","admin-credentials-root-secret-formats_cco-mode-passthrough","passthrough-mode-maintenance","manually-rotating-cloud-creds_cco-mode-passthrough","passthrough-mode-reduce-permissions","cco-mode-manual","manual-mode-sts-blurb","manually-maintained-credentials-upgrade_cco-mode-manual","additional-resources_cco-mode-manual","cco-mode-sts","sts-mode-about","sts-mode-installing","cco-ccoctl-configuring_cco-mode-sts","sts-mode-create-aws-resources-ccoctl","cco-ccoctl-creating-individually_cco-mode-sts","cco-ccoctl-creating-at-once_cco-mode-sts","sts-mode-installing-manual-run-installer_cco-mode-sts","sts-mode-installing-verifying_cco-mode-sts","/documentation/openshift_container_platform/4.8/html/authentication_and_authorization/managing-cloud-provider-credentials",{"title":4114,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":4115,"url":4116,"docTitle":4117,"sections":4118},"Networking",[],"/documentation/openshift_container_platform/4.8/html/networking/index","networking",[4119,4128,4134,4142,4155,4166,4201,4210,4218,4231,4240,4251,4287,4340,4412,4479,4554,4576,4615,4644,4651,4660,4672],{"title":4120,"visible":10,"weight":23,"urlFragment":4121,"anchor":16,"singlePageAnchor":4121,"subChapters":4122,"url":4127,"docTitle":4117},"Understanding networking","understanding-networking",[4123,4124,4125,4126],"nw-ne-openshift-dns_understanding-networking","nw-ne-openshift-ingress_understanding-networking","nw-ne-comparing-ingress-route_understanding-networking","nw-networking-glossary-terms_understanding-networking","/documentation/openshift_container_platform/4.8/html/networking/understanding-networking",{"title":4129,"visible":10,"weight":35,"urlFragment":4130,"anchor":16,"singlePageAnchor":4130,"subChapters":4131,"url":4133,"docTitle":4117},"Accessing hosts","accessing-hosts",[4132],"accessing-hosts-on-aws_accessing-hosts","/documentation/openshift_container_platform/4.8/html/networking/accessing-hosts",{"title":4135,"visible":10,"weight":46,"urlFragment":4136,"anchor":16,"singlePageAnchor":4136,"subChapters":4137,"url":4141,"docTitle":4117},"Networking Operators overview","networking-operators-overview",[4138,4139,4140],"networking-operators-overview-cluster-network-operator","networking-operators-overview-dns-operator","networking-operators-overview-ingress-operator","/documentation/openshift_container_platform/4.8/html/networking/networking-operators-overview",{"title":4143,"visible":10,"weight":68,"urlFragment":4144,"anchor":16,"singlePageAnchor":4144,"subChapters":4145,"url":4154,"docTitle":4117},"Cluster Network Operator in OpenShift Container Platform","cluster-network-operator",[4146,4147,4148,4149,4150,4151,4152,4153],"nw-cluster-network-operator_cluster-network-operator","nw-cno-view_cluster-network-operator","nw-cno-status_cluster-network-operator","nw-cno-logs_cluster-network-operator","nw-operator-cr_cluster-network-operator","nw-operator-cr-cno-object_cluster-network-operator","nw-operator-example-cr_cluster-network-operator","cluster-network-operator-additional-resources","/documentation/openshift_container_platform/4.8/html/networking/cluster-network-operator",{"title":4156,"visible":10,"weight":435,"urlFragment":4157,"anchor":16,"singlePageAnchor":4157,"subChapters":4158,"url":4165,"docTitle":4117},"DNS Operator in OpenShift Container Platform","dns-operator",[4159,4160,4161,4162,4163,4164],"dns-operator_dns-operator","nw-controlling-dns-pod-placement_dns-operator","nw-dns-view_dns-operator","nw-dns-forward_dns-operator","nw-dns-operator-status_dns-operator","nw-dns-operator-logs_dns-operator","/documentation/openshift_container_platform/4.8/html/networking/dns-operator",{"title":4167,"visible":10,"weight":453,"urlFragment":4168,"anchor":16,"singlePageAnchor":4168,"subChapters":4169,"url":4200,"docTitle":4117},"Ingress Operator in OpenShift Container Platform","configuring-ingress",[4170,4171,4172,4173,4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189,4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,1546],"nw-ne-openshift-ingress_configuring-ingress","nw-installation-ingress-config-asset_configuring-ingress","nw-ingress-controller-configuration-parameters_configuring-ingress","configuring-ingress-controller-tls","tls-profiles-understanding_configuring-ingress","tls-profiles-ingress-configuring_configuring-ingress","nw-ingress-controller-endpoint-publishing-strategies_configuring-ingress","nw-ingress-view_configuring-ingress","nw-ingress-operator-status_configuring-ingress","nw-ingress-operator-logs_configuring-ingress","nw-ingress-controller-status_configuring-ingress","configuring-ingress-controller","nw-ingress-setting-a-custom-default-certificate_configuring-ingress","nw-ingress-custom-default-certificate-remove_configuring-ingress","nw-ingress-controller-configuration_configuring-ingress","nw-configure-ingress-access-logging_configuring-ingress","nw-ingress-setting-thread-count_configuring-ingress","nw-ingress-sharding_configuring-ingress","nw-ingress-sharding-route-labels_configuring-ingress","nw-ingress-sharding-namespace-labels_configuring-ingress","nw-ingress-setting-internal-lb_configuring-ingress","nw-ingress-controller-configuration-gcp-global-access_configuring-ingress","nw-ingress-default-internal_configuring-ingress","nw-route-admission-policy_configuring-ingress","using-wildcard-routes_configuring-ingress","nw-using-ingress-forwarded_configuring-ingress","nw-http2-haproxy_configuring-ingress","nw-ingress-controller-configuration-proxy-protocol_configuring-ingress","nw-ingress-configuring-application-domain_configuring-ingress","nw-ingress-converting-http-header-case_configuring-ingress","/documentation/openshift_container_platform/4.8/html/networking/configuring-ingress",{"title":4202,"visible":10,"weight":468,"urlFragment":4203,"anchor":16,"singlePageAnchor":4203,"subChapters":4204,"url":4209,"docTitle":4117},"Verifying connectivity to an endpoint","verifying-connectivity-endpoint",[4205,4206,4207,4208],"nw-pod-network-connectivity-checks_verifying-connectivity-endpoint","nw-pod-network-connectivity-implementation_verifying-connectivity-endpoint","nw-pod-network-connectivity-check-object_verifying-connectivity-endpoint","nw-pod-network-connectivity-verify_verifying-connectivity-endpoint","/documentation/openshift_container_platform/4.8/html/networking/verifying-connectivity-endpoint",{"title":4211,"visible":10,"weight":869,"urlFragment":4212,"anchor":16,"singlePageAnchor":4212,"subChapters":4213,"url":4217,"docTitle":4117},"Configuring the node port service range","configuring-node-port-service-range",[4214,4215,4216],"configuring-node-port-service-range-prerequisites","nw-nodeport-service-range-edit_configuring-node-port-service-range","configuring-node-port-service-range-additional-resources","/documentation/openshift_container_platform/4.8/html/networking/configuring-node-port-service-range",{"title":4219,"visible":10,"weight":877,"urlFragment":4220,"anchor":16,"singlePageAnchor":4220,"subChapters":4221,"url":4230,"docTitle":4117},"Configuring IP failover","configuring-ipfailover",[4222,4223,4224,4225,4226,4227,4228,4229],"nw-ipfailover-environment-variables_configuring-ipfailover","nw-ipfailover-configuration_configuring-ipfailover","nw-ipfailover-virtual-ip-addresses-concept_configuring-ipfailover","nw-ipfailover-configuring-check-notify-scripts_configuring-ipfailover","nw-ipfailover-configuring-vrrp-preemption_configuring-ipfailover","nw-ipfailover-vrrp-ip-offset_configuring-ipfailover","nw-ipfailover-configuring-more-than-254_configuring-ipfailover","nw-ipfailover-cluster-ha-ingress_configuring-ipfailover","/documentation/openshift_container_platform/4.8/html/networking/configuring-ipfailover",{"title":4232,"visible":10,"weight":888,"urlFragment":4233,"anchor":16,"singlePageAnchor":4233,"subChapters":4234,"url":4239,"docTitle":4117},"Using the Stream Control Transmission Protocol (SCTP) on a bare metal cluster","using-sctp",[4235,4236,4237,4238],"nw-sctp-about_using-sctp","example_configurations_using-sctp","nw-sctp-enabling_using-sctp","nw-sctp-verifying_using-sctp","/documentation/openshift_container_platform/4.8/html/networking/using-sctp",{"title":4241,"visible":10,"weight":899,"urlFragment":4242,"anchor":16,"singlePageAnchor":4242,"subChapters":4243,"url":4250,"docTitle":4117},"Configuring PTP hardware","configuring-ptp",[4244,4245,4246,4247,4248,4249],"about-using-ptp-hardware","discover-ptp-devices_configuring-ptp","installing-ptp-operator_configuring-ptp","install-ptp-operator-cli_configuring-ptp","install-ptp-operator-web-console_configuring-ptp","configuring-linuxptp_configuring-ptp","/documentation/openshift_container_platform/4.8/html/networking/configuring-ptp",{"title":4252,"visible":10,"weight":906,"urlFragment":4253,"anchor":16,"singlePageAnchor":4253,"subChapters":4254,"url":4286,"docTitle":4117},"Network policy","network-policy",[4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265,4266,4267,4268,4269,4270,4271,4272,4273,4274,4275,4276,4277,4278,4279,4280,4281,4282,4283,4284,4285],"about-network-policy","nw-networkpolicy-about_about-network-policy","nw-networkpolicy-optimize_about-network-policy","about-network-policy-next-steps","about-network-policy-additional-resources","logging-network-policy","nw-networkpolicy-audit-concept_logging-network-policy","network-policy-audit-configuration","nw-networkpolicy-audit-configure_logging-network-policy","nw-networkpolicy-audit-enable_logging-network-policy","nw-networkpolicy-audit-disable_logging-network-policy","logging-network-policy-additional-resources","creating-network-policy","nw-networkpolicy-create_creating-network-policy","nw-networkpolicy-object_creating-network-policy","viewing-network-policy","nw-networkpolicy-view_viewing-network-policy","nw-networkpolicy-object_viewing-network-policy","editing-network-policy","nw-networkpolicy-edit_editing-network-policy","nw-networkpolicy-object_editing-network-policy","editing-network-policy-additional-resources","deleting-network-policy","nw-networkpolicy-delete_deleting-network-policy","default-network-policy","modifying-template-for-new-projects_default-network-policy","nw-networkpolicy-project-defaults_default-network-policy","multitenant-network-policy","nw-networkpolicy-multitenant-isolation_multitenant-network-policy","multitenant-network-policy-next-steps","multitenant-network-policy-additional-resources","/documentation/openshift_container_platform/4.8/html/networking/network-policy",{"title":4288,"visible":10,"weight":915,"urlFragment":4289,"anchor":16,"singlePageAnchor":4289,"subChapters":4290,"url":4339,"docTitle":4117},"Multiple networks","multiple-networks",[4291,4292,4293,4294,4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310,4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326,4327,4328,4329,4330,4331,4332,4333,4334,4335,4336,4337,4338],"understanding-multiple-networks","additional-network-considerations","additional-networks-provided","configuring-additional-network","configuring-additional-network_approaches-managing-additional-network","configuring-additional-network_configuration-additional-network-attachment","configuring-additional-network_configuration-additional-network-cno","configuring-additional-network_configuration-additional-network-yaml","configuring-additional-network_configuration-additional-network-types","nw-multus-bridge-object_configuring-additional-network","nw-multus-bridge-config-example_configuring-additional-network","nw-multus-host-device-object_configuring-additional-network","nw-multus-hostdev-config-example_configuring-additional-network","nw-multus-ipvlan-object_configuring-additional-network","nw-multus-ipvlan-config-example_configuring-additional-network","nw-multus-macvlan-object_configuring-additional-network","nw-multus-macvlan-config-example_configuring-additional-network","nw-multus-ipam-object_configuring-additional-network","nw-multus-static_configuring-additional-network","nw-multus-dhcp_configuring-additional-network","nw-multus-whereabouts_configuring-additional-network","nw-multus-create-network_configuring-additional-network","nw-multus-create-network-apply_configuring-additional-network","about-virtual-routing-and-forwarding","cnf-about-virtual-routing-and-forwarding_about-virtual-routing-and-forwarding","cnf-benefits-secondary-networks-telecommunications-operators_about-virtual-routing-and-forwarding","configuring-multi-network-policy","nw-multi-network-policy-differences_configuring-multi-network-policy","nw-multi-network-policy-enable_configuring-multi-network-policy","configuring-multi-network-policy_working-with-multi-network-policy","configuring-multi-network-policy_prerequisites","nw-networkpolicy-create_configuring-multi-network-policy","nw-networkpolicy-edit_configuring-multi-network-policy","nw-networkpolicy-view_configuring-multi-network-policy","nw-networkpolicy-delete_configuring-multi-network-policy","configuring-multi-network-policy_additional-resources","attaching-pod","nw-multus-add-pod_attaching-pod","nw-multus-advanced-annotations_attaching-pod","removing-pod","nw-multus-remove-pod_removing-pod","edit-additional-network","nw-multus-edit-network_edit-additional-network","remove-additional-network","nw-multus-delete-network_remove-additional-network","assigning-a-secondary-network-to-a-vrf","cnf-assigning-a-secondary-network-to-a-vrf_assigning-a-secondary-network-to-a-vrf","cnf-creating-an-additional-network-attachment-with-the-cni-vrf-plug-in_assigning-a-secondary-network-to-a-vrf","/documentation/openshift_container_platform/4.8/html/networking/multiple-networks",{"title":4341,"visible":10,"weight":2799,"urlFragment":4342,"anchor":16,"singlePageAnchor":4342,"subChapters":4343,"url":4411,"docTitle":4117},"Hardware networks","hardware-networks",[4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357,4358,4359,4360,4361,4362,4363,4364,4365,4366,4367,4368,4369,4370,4371,4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387,4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408,4409,4410],"about-sriov","components-sr-iov-network-devices","nw-sriov-supported-platforms_about-sriov","supported-devices_about-sriov","discover-sr-iov-devices_about-sriov","example-sriovnetworknodestate_about-sriov","example-vf-use-in-pod_about-sriov","nw-sriov-app-netutil_about-sriov","nw-sriov-hugepages_about-sriov","about-sriov-next-steps","installing-sriov-operator","installing-sr-iov-operator_installing-sriov-operator","install-operator-cli_installing-sriov-operator","install-operator-web-console_installing-sriov-operator","installing-sriov-operator-next-steps","configuring-sriov-operator","nw-sriov-configuring-operator_configuring-sriov-operator","about-network-resource-injector_configuring-sriov-operator","about-sr-iov-operator-admission-control-webhook_configuring-sriov-operator","about-custom-node-selectors_configuring-sriov-operator","disable-enable-network-resource-injector_configuring-sriov-operator","disable-enable-sr-iov-operator-admission-control-webhook_configuring-sriov-operator","configuring-custom-nodeselector_configuring-sriov-operator","configuring-sriov-operator-next-steps","configuring-sriov-device","nw-sriov-networknodepolicy-object_configuring-sriov-device","sr-iov-network-node-configuration-examples_configuring-sriov-device","nw-sriov-nic-partitioning_configuring-sriov-device","nw-sriov-configuring-device_configuring-sriov-device","nw-sriov-troubleshooting_configuring-sriov-device","cnf-assigning-a-sriov-network-to-a-vrf_configuring-sriov-device","cnf-creating-an-additional-sriov-network-with-vrf-plug-in_configuring-sriov-device","configuring-sriov-device-next-steps","configuring-sriov-net-attach","nw-sriov-network-object_configuring-sriov-net-attach","nw-multus-ipam-object_configuring-sriov-net-attach","nw-multus-static_configuring-sriov-net-attach","nw-multus-dhcp_configuring-sriov-net-attach","nw-multus-whereabouts_configuring-sriov-net-attach","nw-sriov-network-attachment_configuring-sriov-net-attach","configuring-sriov-net-attach-next-steps","configuring-sriov-net-attach-additional-resources","configuring-sriov-ib-attach","nw-sriov-ibnetwork-object_configuring-sriov-ib-attach","nw-multus-ipam-object_configuring-sriov-ib-attach","nw-multus-static_configuring-sriov-ib-attach","nw-multus-dhcp_configuring-sriov-ib-attach","nw-multus-whereabouts_configuring-sriov-ib-attach","nw-sriov-network-attachment_configuring-sriov-ib-attach","configuring-sriov-ib-attach-next-steps","configuring-sriov-ib-attach-additional-resources","add-pod","nw-sriov-runtime-config_configuring-sr-iov","runtime-config-ethernet_configuring-sr-iov","runtime-config-infiniband_configuring-sr-iov","nw-multus-add-pod_configuring-sr-iov","nw-sriov-topology-manager_configuring-sr-iov","add-pod-additional-resources","using-sriov-multicast","nw-high-performance-multicast_using-sriov-multicast","nw-using-an-sriov-interface-for-multicast_using-sriov-multicast","using-dpdk-and-rdma","example-vf-use-in-dpdk-mode-intel_using-dpdk-and-rdma","example-vf-use-in-dpdk-mode-mellanox_using-dpdk-and-rdma","example-vf-use-in-rdma-mode-mellanox_using-dpdk-and-rdma","uninstalling-sriov-operator","nw-sriov-operator-uninstall_uninstalling-sr-iov-operator","/documentation/openshift_container_platform/4.8/html/networking/hardware-networks",{"title":4413,"visible":10,"weight":3064,"urlFragment":4414,"anchor":16,"singlePageAnchor":4414,"subChapters":4415,"url":4478,"docTitle":4117},"OpenShift SDN default CNI network provider","openshift-sdn-default-cni-network-provider",[4416,4417,4418,4419,4420,4421,4422,4423,4424,4425,4426,4427,4428,4429,4430,4431,4432,4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,4443,4444,4445,4446,4447,4448,4449,4450,4451,4452,4453,4454,4455,4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,1006,4471,4472,4473,4474,4475,4476,4477],"about-openshift-sdn","nw-openshift-sdn-modes_about-openshift-sdn","nw-ovn-kubernetes-matrix_about-openshift-sdn","assigning-egress-ips","nw-egress-ips-about_egress-ips","considerations-automatic-egress-ips","considerations-manual-egress-ips","nw-egress-ips-automatic_egress-ips","nw-egress-ips-static_egress-ips","configuring-egress-firewall","nw-egressnetworkpolicy-about_openshift-sdn-egress-firewall","limitations-of-an-egress-firewall_openshift-sdn-egress-firewall","policy-rule-order_openshift-sdn-egress-firewall","domain-name-server-resolution_openshift-sdn-egress-firewall","nw-egressnetworkpolicy-object_openshift-sdn-egress-firewall","egressnetworkpolicy-rules_openshift-sdn-egress-firewall","egressnetworkpolicy-example_openshift-sdn-egress-firewall","nw-networkpolicy-create_openshift-sdn-egress-firewall","openshift-sdn-viewing-egress-firewall","nw-egressnetworkpolicy-view_openshift-sdn-viewing-egress-firewall","editing-egress-firewall","nw-egressnetworkpolicy-edit_openshift-sdn-egress-firewall","removing-egress-firewall","nw-egressnetworkpolicy-delete_openshift-sdn-egress-firewall","using-an-egress-router","nw-egress-router-about_using-an-egress-router","nw-egress-router-about-modes_using-an-egress-router","nw-egress-router-about-router-pod-implementation_using-an-egress-router","nw-egress-router-about-deployments_using-an-egress-router","nw-egress-router-about-failover_using-an-egress-router","using-an-egress-router-additional-resources","deploying-egress-router-layer3-redirection","nw-egress-router-pod_deploying-egress-router-layer3-redirection","nw-egress-router-dest-var_deploying-egress-router-layer3-redirection","nw-egress-router-redirect-mode_deploying-egress-router-layer3-redirection","deploying-egress-router-layer3-redirection-additional-resources","deploying-egress-router-http-redirection","nw-egress-router-pod_deploying-egress-router-http-redirection","nw-egress-router-dest-var_deploying-egress-router-http-redirection","nw-egress-router-http-proxy-mode_deploying-egress-router-http-redirection","deploying-egress-router-http-redirection-additional-resources","deploying-egress-router-dns-redirection","nw-egress-router-pod_deploying-egress-router-dns-redirection","nw-egress-router-dest-var_deploying-egress-router-dns-redirection","nw-egress-router-dns-mode_deploying-egress-router-dns-redirection","deploying-egress-router-dns-redirection-additional-resources","configuring-egress-router-configmap","configuring-egress-router-configmap_configuring-egress-router-configmap","configuring-egress-router-configmap-additional-resources","enabling-multicast","nw-about-multicast_openshift-sdn-enabling-multicast","nw-enabling-multicast_openshift-sdn-enabling-multicast","disabling-multicast","nw-disabling-multicast_openshift-sdn-disabling-multicast","configuring-multitenant-isolation","nw-multitenant-joining_multitenant-isolation","nw-multitenant-isolation_multitenant-isolation","nw-multitenant-global_multitenant-isolation","configuring-kube-proxy","nw-kube-proxy-sync_configuring-kube-proxy","nw-kube-proxy-config_configuring-kube-proxy","nw-kube-proxy-configuring_configuring-kube-proxy","/documentation/openshift_container_platform/4.8/html/networking/openshift-sdn-default-cni-network-provider",{"title":4480,"visible":10,"weight":3332,"urlFragment":4481,"anchor":16,"singlePageAnchor":4481,"subChapters":4482,"url":4553,"docTitle":4117},"OVN-Kubernetes default CNI network provider","ovn-kubernetes-default-cni-network-provider",[4483,4484,4485,4486,4487,4488,4489,4490,4491,4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507,4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,4519,4520,4521,4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,4536,4537,4538,4539,4540,4541,4542,4543,4544,4545,4546,4547,4548,4549,4550,4551,4552],"about-ovn-kubernetes","nw-ovn-kubernetes-features_about-ovn-kubernetes","nw-ovn-kubernetes-matrix_about-ovn-kubernetes","nw-ovn-kubernetes-limitations_about-ovn-kubernetes","migrate-from-openshift-sdn","nw-ovn-kubernetes-migration-about_migrate-from-openshift-sdn","considerations-migrating-ovn-kubernetes-network-provider_migrate-from-openshift-sdn","how-the-migration-process-works_migrate-from-openshift-sdn","nw-ovn-kubernetes-migration_migrate-from-openshift-sdn","migrate-from-openshift-sdn-additional-resources","rollback-to-openshift-sdn","nw-ovn-kubernetes-rollback_rollback-to-openshift-sdn","converting-to-dual-stack","nw-dual-stack-convert_converting-to-dual-stack","about-ipsec-ovn","nw-ovn-ipsec-traffic_about-ipsec-ovn","network-connectivity-requirements-when-ipsec-is-enabled","nw-ovn-ipsec-encryption_about-ipsec-ovn","nw-ovn-ipsec-certificates_about-ipsec-ovn","configuring-egress-firewall-ovn","nw-egressnetworkpolicy-about_configuring-egress-firewall-ovn","limitations-of-an-egress-firewall_configuring-egress-firewall-ovn","policy-rule-order_configuring-egress-firewall-ovn","domain-name-server-resolution_configuring-egress-firewall-ovn","nw-egressnetworkpolicy-object_configuring-egress-firewall-ovn","egressnetworkpolicy-rules_configuring-egress-firewall-ovn","egressnetworkpolicy-example_configuring-egress-firewall-ovn","nw-networkpolicy-create_configuring-egress-firewall-ovn","viewing-egress-firewall-ovn","nw-egressnetworkpolicy-view_viewing-egress-firewall-ovn","editing-egress-firewall-ovn","nw-egressnetworkpolicy-edit_editing-egress-firewall-ovn","removing-egress-firewall-ovn","nw-egressnetworkpolicy-delete_removing-egress-firewall-ovn","configuring-egress-ips-ovn","nw-egress-ips-about_configuring-egress-ips-ovn","nw-egress-ips-platform-support_configuring-egress-ips-ovn","nw-egress-ips-considerations_configuring-egress-ips-ovn","nw-egress-ips-node-assignment_configuring-egress-ips-ovn","nw-egress-ips-node-architecture_configuring-egress-ips-ovn","nw-egress-ips-object_configuring-egress-ips-ovn","nw-egress-ips-node_configuring-egress-ips-ovn","configuring-egress-ips-next-steps","configuring-egress-ips-additional-resources","assigning-egress-ips-ovn","nw-egress-ips-assign_assigning-egress-ips-ovn","assigning-egress-ips-additional-resources","using-an-egress-router-ovn","nw-egress-router-about_using-an-egress-router-ovn","nw-egress-router-about-modes_using-an-egress-router-ovn","nw-egress-router-about-router-pod-implementation_using-an-egress-router-ovn","nw-egress-router-about-deployments_using-an-egress-router-ovn","nw-egress-router-about-failover_using-an-egress-router-ovn","using-an-egress-router-ovn-additional-resources","deploying-egress-router-ovn-redirection","nw-egress-router-ovn-cr_deploying-egress-router-ovn-redirection","nw-egress-router-redirect-mode-ovn_deploying-egress-router-ovn-redirection","nw-ovn-kubernetes-enabling-multicast","nw-about-multicast_ovn-kubernetes-enabling-multicast","nw-enabling-multicast_ovn-kubernetes-enabling-multicast","nw-ovn-kubernetes-disabling-multicast","nw-disabling-multicast_ovn-kubernetes-disabling-multicast","tracking-network-flows","nw-network-flows-object_tracking-network-flows","nw-network-flows-create_tracking-network-flows","nw-network-flows-delete_tracking-network-flows","additional-resources_tracking-network-flows","configuring-hybrid-networking","configuring-hybrid-ovnkubernetes_configuring-hybrid-networking","configuring-hybrid-networking-additional-resources","/documentation/openshift_container_platform/4.8/html/networking/ovn-kubernetes-default-cni-network-provider",{"title":4555,"visible":10,"weight":3388,"urlFragment":4556,"anchor":16,"singlePageAnchor":4556,"subChapters":4557,"url":4575,"docTitle":4117},"Configuring Routes","configuring-routes",[4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573,4574],"route-configuration","nw-creating-a-route_route-configuration","nw-configuring-route-timeouts_route-configuration","nw-enabling-hsts_route-configuration","nw-throughput-troubleshoot_route-configuration","nw-using-cookies-keep-route-statefulness_route-configuration","nw-annotating-a-route-with-a-cookie-name_route-configuration","nw-path-based-routes_route-configuration","nw-route-specific-annotations_route-configuration","nw-route-admission-policy_route-configuration","nw-ingress-creating-a-route-via-an-ingress_route-configuration","creating-edge-route-with-default-certificate_route-configuration","nw-router-configuring-dual-stack_route-configuration","configuring-default-certificate","nw-ingress-creating-a-reencrypt-route-with-a-custom-certificate_secured-routes","nw-ingress-creating-an-edge-route-with-a-custom-certificate_secured-routes","nw-ingress-creating-a-passthrough-route_secured-routes","/documentation/openshift_container_platform/4.8/html/networking/configuring-routes",{"title":4577,"visible":10,"weight":3414,"urlFragment":4578,"anchor":16,"singlePageAnchor":4578,"subChapters":4579,"url":4614,"docTitle":4117},"Configuring ingress cluster traffic","configuring-ingress-cluster-traffic",[4580,4581,1017,4582,4583,4584,4585,4586,4587,4588,4589,4590,1038,4591,4592,4593,4594,1598,4595,4596,1089,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,1114,4611,4612,4613],"overview-traffic","configuring-externalip","nw-externalip-about_configuring-externalip","configuration-externalip_configuring-externalip","restrictions-on-ip-assignment_configuring-externalip","example-policy-objects_configuring-externalip","nw-externalip-object_configuring-externalip","nw-externalip-configuring_configuring-externalip","configuring-externalip-next-steps","configuring-ingress-cluster-traffic-ingress-controller","nw-using-ingress-and-routes_configuring-ingress-cluster-traffic-ingress-controller","nw-creating-project-and-service_configuring-ingress-cluster-traffic-ingress-controller","nw-exposing-service_configuring-ingress-cluster-traffic-ingress-controller","nw-ingress-sharding-route-labels_configuring-ingress-cluster-traffic-ingress-controller","nw-ingress-sharding-namespace-labels_configuring-ingress-cluster-traffic-ingress-controller","configuring-ingress-cluster-traffic-load-balancer","nw-using-load-balancer-getting-traffic_configuring-ingress-cluster-traffic-load-balancer","nw-creating-project-and-service_configuring-ingress-cluster-traffic-load-balancer","nw-exposing-service_configuring-ingress-cluster-traffic-load-balancer","nw-create-load-balancer-service_configuring-ingress-cluster-traffic-load-balancer","configuring-ingress-cluster-traffic-aws-network-load-balancer","nw-aws-replacing-clb-with-nlb_configuring-ingress-cluster-traffic-aws-network-load-balancer","nw-aws-nlb-existing-cluster_configuring-ingress-cluster-traffic-aws-network-load-balancer","nw-aws-nlb-new-cluster_configuring-ingress-cluster-traffic-aws-network-load-balancer","configuring-ingress-cluster-traffic-aws-network-load-balancer-addtl-resources","configuring-ingress-cluster-traffic-service-external-ip","configuring-ingress-cluster-traffic-service-external-ip-prerequisites","nw-service-externalip-create_configuring-ingress-cluster-traffic-service-external-ip","configuring-ingress-cluster-traffic-service-external-ip-additional-resources","configuring-ingress-cluster-traffic-nodeport","nw-using-nodeport_configuring-ingress-cluster-traffic-nodeport","nw-creating-project-and-service_configuring-ingress-cluster-traffic-nodeport","nw-exposing-service_configuring-ingress-cluster-traffic-nodeport","configuring-ingress-cluster-traffic-nodeport-additional-resources","/documentation/openshift_container_platform/4.8/html/networking/configuring-ingress-cluster-traffic",{"title":4616,"visible":10,"weight":3429,"urlFragment":4617,"anchor":16,"singlePageAnchor":4617,"subChapters":4618,"url":4643,"docTitle":4117},"Kubernetes NMState","kubernetes-nmstate",[4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642],"k8s-nmstate-about-the-k8s-nmstate-operator","installing-the-kubernetes-nmstate-operator_k8s-nmstate-operator","k8s-nmstate-observing-node-network-state","virt-about-nmstate_k8s-nmstate-observing-node-network-state","virt-viewing-network-state-of-node_k8s-nmstate-observing-node-network-state","k8s-nmstate-updating-node-network-config","virt-about-nmstate_k8s_nmstate-updating-node-network-config","virt-creating-interface-on-nodes_k8s_nmstate-updating-node-network-config","virt-confirming-policy-updates-on-nodes_k8s_nmstate-updating-node-network-config","virt-removing-interface-from-nodes_k8s_nmstate-updating-node-network-config","virt-nmstate-example-policy-configurations","virt-example-bridge-nncp_k8s_nmstate-updating-node-network-config","virt-example-vlan-nncp_k8s_nmstate-updating-node-network-config","virt-example-bond-nncp_k8s_nmstate-updating-node-network-config","virt-example-ethernet-nncp_k8s_nmstate-updating-node-network-config","virt-example-nmstate-multiple-interfaces_k8s_nmstate-updating-node-network-config","virt-example-nmstate-IP-management_k8s_nmstate-updating-node-network-config","virt-example-nmstate-IP-management-static_k8s_nmstate-updating-node-network-config","virt-example-nmstate-IP-management-no-ip_k8s_nmstate-updating-node-network-config","virt-example-nmstate-IP-management-dhcp_k8s_nmstate-updating-node-network-config","virt-example-nmstate-IP-management-dns_k8s_nmstate-updating-node-network-config","virt-example-nmstate-IP-management-static-routing_k8s_nmstate-updating-node-network-config","k8s-nmstate-troubleshooting-node-network","virt-troubleshooting-incorrect-policy-config_k8s-nmstate-troubleshooting-node-network","/documentation/openshift_container_platform/4.8/html/networking/kubernetes-nmstate",{"title":4645,"visible":10,"weight":3441,"urlFragment":4646,"anchor":16,"singlePageAnchor":4646,"subChapters":4647,"url":4650,"docTitle":4117},"Configuring the cluster-wide proxy","enable-cluster-wide-proxy",[1142,4648,4649],"nw-proxy-configure-object_config-cluster-wide-proxy","nw-proxy-remove_config-cluster-wide-proxy","/documentation/openshift_container_platform/4.8/html/networking/enable-cluster-wide-proxy",{"title":4652,"visible":10,"weight":4653,"urlFragment":4654,"anchor":16,"singlePageAnchor":4654,"subChapters":4655,"url":4659,"docTitle":4117},"Configuring a custom PKI",22,"configuring-a-custom-pki",[4656,4657,4658],"installation-configure-proxy_configuring-a-custom-pki","nw-proxy-configure-object_configuring-a-custom-pki","certificate-injection-using-operators_configuring-a-custom-pki","/documentation/openshift_container_platform/4.8/html/networking/configuring-a-custom-pki",{"title":4661,"visible":10,"weight":4662,"urlFragment":4663,"anchor":16,"singlePageAnchor":4663,"subChapters":4664,"url":4671,"docTitle":4117},"Load balancing on RHOSP",23,"load-balancing-openstack",[4665,4666,4667,4668,4669,4670],"installation-osp-kuryr-octavia-configure_load-balancing-openstack","installation-osp-api-octavia_load-balancing-openstack","installation-osp-api-scaling_load-balancing-openstack","installation-osp-kuryr-api-scaling_load-balancing-openstack","installation-osp-kuryr-octavia-scale_load-balancing-openstack","nw-osp-configuring-external-load-balancer_load-balancing-openstack","/documentation/openshift_container_platform/4.8/html/networking/load-balancing-openstack",{"title":4673,"visible":10,"weight":4674,"urlFragment":4675,"anchor":16,"singlePageAnchor":4675,"subChapters":4676,"url":4680,"docTitle":4117},"Associating secondary interfaces metrics to network attachments",24,"associating-secondary-interfaces-metrics-to-network-attachments",[4677,4678,4679],"cnf-associating-secondary-interfaces-metrics-to-network-attachments_secondary-interfaces-metrics","cnf-associating-secondary-interfaces-metrics-to-network-attachments-network-metrics-daemon_secondary-interfaces-metrics","cnf-associating-secondary-interfaces-metrics-with-network-name_secondary-interfaces-metrics","/documentation/openshift_container_platform/4.8/html/networking/associating-secondary-interfaces-metrics-to-network-attachments",{"title":4682,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":4683,"url":4684,"docTitle":4685,"sections":4686},"Registry",[],"/documentation/openshift_container_platform/4.8/html/registry/index","registry",[4687,4699,4711,4751,4761],{"title":4688,"visible":10,"weight":23,"urlFragment":4689,"anchor":16,"singlePageAnchor":4689,"subChapters":4690,"url":4698,"docTitle":4685},"OpenShift Container Platform registry overview","registry-overview",[4691,4692,4693,4694,4695,4696,4697],"openshift-registry-common-terms_registry-overview","registry-integrated-openshift-registry_registry-overview","registry-third-party-registries_registry-overview","authentication_registry-overview","registry-authentication_registry-overview","registry-quay-overview_registry-overview","registry-authentication-enabled-registry-overview_registry-overview","/documentation/openshift_container_platform/4.8/html/registry/registry-overview",{"title":4700,"visible":10,"weight":35,"urlFragment":4701,"anchor":16,"singlePageAnchor":4701,"subChapters":4702,"url":4710,"docTitle":4685},"Image Registry Operator in OpenShift Container Platform","configuring-registry-operator",[4703,4704,4705,4706,4707,4708,4709,1546],"image-registry-on-cloud","image-registry-on-bare-metal-vsphere","registry-removed_configuring-registry-operator","registry-operator-configuration-resource-overview_configuring-registry-operator","registry-operator-default-crd_configuring-registry-operator","images-configuration-cas_configuring-registry-operator","registry-operator-config-resources-storage-credentials_configuring-registry-operator","/documentation/openshift_container_platform/4.8/html/registry/configuring-registry-operator",{"title":4712,"visible":10,"weight":46,"urlFragment":4713,"anchor":16,"singlePageAnchor":4713,"subChapters":4714,"url":4750,"docTitle":4685},"Setting up and configuring the registry","setting-up-and-configuring-the-registry",[4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749],"configuring-registry-storage-aws-user-infrastructure","registry-operator-config-resources-secret-aws_configuring-registry-storage-aws-user-infrastructure","registry-configuring-storage-aws-user-infra_configuring-registry-storage-aws-user-infrastructure","registry-operator-configuration-resource-overview-aws-s3_configuring-registry-storage-aws-user-infrastructure","configuring-registry-storage-gcp-user-infrastructure","registry-operator-config-resources-secret-gcp_configuring-registry-storage-gcp-user-infrastructure","registry-configuring-storage-gcp-user-infra_configuring-registry-storage-gcp-user-infrastructure","registry-operator-configuration-resource-overview-gcp-gcs_configuring-registry-storage-gcp-user-infrastructure","configuring-registry-storage-openstack-user-infrastructure","registry-configuring-registry-storage-swift-trust_configuring-registry-storage-openstack-user-infrastructure","registry-operator-config-resources-secret-openstack_configuring-registry-storage-openstack-user-infrastructure","registry-configuring-storage-openstack-user-infra_configuring-registry-storage-openstack-user-infrastructure","registry-operator-configuration-resource-overview-openstack-swift_configuring-registry-storage-openstack-user-infrastructure","configuring-registry-storage-azure-user-infrastructure","registry-operator-config-resources-secret-azure_configuring-registry-storage-azure-user-infrastructure","registry-configuring-storage-azure-user-infra_configuring-registry-storage-azure-user-infrastructure","registry-configuring-storage-azure-gov-cloud_configuring-registry-storage-azure-user-infrastructure","configuring-registry-storage-openstack","installation-registry-osp-creating-custom-pvc_configuring-registry-storage-openstack","configuring-registry-storage-baremetal","registry-removed_configuring-registry-storage-baremetal","registry-change-management-state_configuring-registry-storage-baremetal","installation-registry-storage-config_configuring-registry-storage-baremetal","registry-configuring-storage-baremetal_configuring-registry-storage-baremetal","installation-registry-storage-non-production_configuring-registry-storage-baremetal","installation-registry-storage-block-recreate-rollout-bare-metal_configuring-registry-storage-baremetal","configuring-registry-storage-baremetal-addtl-resources","configuring-registry-storage-vsphere","registry-removed_configuring-registry-storage-vsphere","registry-change-management-state_configuring-registry-storage-vsphere","installation-registry-storage-config_configuring-registry-storage-vsphere","registry-configuring-storage-vsphere_configuring-registry-storage-vsphere","installation-registry-storage-non-production_configuring-registry-storage-vsphere","installation-registry-storage-block-recreate-rollout_configuring-registry-storage-vsphere","configuring-registry-storage-vsphere-addtl-resources","/documentation/openshift_container_platform/4.8/html/registry/setting-up-and-configuring-the-registry",{"title":4752,"visible":10,"weight":68,"urlFragment":4753,"anchor":16,"singlePageAnchor":4753,"subChapters":4754,"url":4760,"docTitle":4685},"Accessing the registry","accessing-the-registry",[1006,4755,4756,4757,4758,4759],"registry-accessing-directly_accessing-the-registry","checking-the-status-of-registry-pods_accessing-the-registry","registry-viewing-logs_accessing-the-registry","registry-accessing-metrics_accessing-the-registry","accessing-the-registry-additional-resources","/documentation/openshift_container_platform/4.8/html/registry/accessing-the-registry",{"title":4762,"visible":10,"weight":435,"urlFragment":4763,"anchor":16,"singlePageAnchor":4763,"subChapters":4764,"url":4767,"docTitle":4685},"Exposing the registry","securing-exposing-registry",[4765,4766],"registry-exposing-default-registry-manually_securing-exposing-registry","registry-exposing-secure-registry-manually_securing-exposing-registry","/documentation/openshift_container_platform/4.8/html/registry/securing-exposing-registry",{"title":4769,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":4770,"url":4771,"docTitle":4772,"sections":4773},"Post-installation configuration",[],"/documentation/openshift_container_platform/4.8/html/post-installation_configuration/index","post-installation_configuration",[4774,4780,4789,4812,4868,4954,4991,5020,5055,5063],{"title":4775,"visible":10,"weight":23,"urlFragment":4776,"anchor":16,"singlePageAnchor":4776,"subChapters":4777,"url":4779,"docTitle":4772},"Post-installation configuration overview","post-install-configuration-overview",[4778],"post-install-tasks","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-configuration-overview",{"title":4781,"visible":10,"weight":35,"urlFragment":4782,"anchor":16,"singlePageAnchor":4782,"subChapters":4783,"url":4788,"docTitle":4772},"Configuring a private cluster","configuring-private-cluster",[4784,4785,4786,4787],"private-clusters-about_configuring-private-cluster","private-clusters-setting-dns-private_configuring-private-cluster","private-clusters-setting-ingress-private_configuring-private-cluster","private-clusters-setting-api-private_configuring-private-cluster","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/configuring-private-cluster",{"title":4790,"visible":10,"weight":46,"urlFragment":4791,"anchor":16,"singlePageAnchor":4791,"subChapters":4792,"url":4811,"docTitle":4772},"Post-installation machine configuration tasks","post-install-machine-configuration-tasks",[4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809,4810],"understanding-the-machine-config-operator","machine-config-operator_post-install-machine-configuration-tasks","machine-config-overview-post-install-machine-configuration-tasks","what-can-you-change-with-machine-configs","project-2","checking-mco-status_post-install-machine-configuration-tasks","using-machineconfigs-to-change-machines","installation-special-config-chrony_post-install-machine-configuration-tasks","nodes-nodes-kernel-arguments_post-install-machine-configuration-tasks","rhcos-enabling-multipath-day-2_post-install-machine-configuration-tasks","nodes-nodes-rtkernel-arguments_post-install-machine-configuration-tasks","machineconfig-modify-journald_post-install-machine-configuration-tasks","rhcos-add-extensions_post-install-machine-configuration-tasks","rhcos-load-firmware-blobs_post-install-machine-configuration-tasks","configuring-machines-with-custom-resources","create-a-kubeletconfig-crd-to-edit-kubelet-parameters_post-install-machine-configuration-tasks","create-a-containerruntimeconfig_post-install-machine-configuration-tasks","set-the-default-max-container-root-partition-size-for-overlay-with-crio_post-install-machine-configuration-tasks","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-machine-configuration-tasks",{"title":4813,"visible":10,"weight":68,"urlFragment":4814,"anchor":16,"singlePageAnchor":4814,"subChapters":4815,"url":4867,"docTitle":4772},"Post-installation cluster tasks","post-install-cluster-tasks",[4816,4817,4818,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832,4833,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847,4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863,4864,4865,4866],"available_cluster_customizations","configuration-resources_post-install-cluster-tasks","operator-configuration-resources_post-install-cluster-tasks","additional-configuration-resources_post-install-cluster-tasks","informational-resources_post-install-cluster-tasks","images-update-global-pull-secret_post-install-cluster-tasks","post-install-adjust-worker-nodes","differences-between-machinesets-and-machineconfigpool_post-install-cluster-tasks","machineset-manually-scaling_post-install-cluster-tasks","machineset-delete-policy_post-install-cluster-tasks","nodes-scheduler-node-selectors-cluster_post-install-cluster-tasks","post-install-creating-infrastructure-machinesets-production","machineset-creating_post-install-cluster-tasks","creating-an-infra-node_post-install-cluster-tasks","creating-infra-machines_post-install-cluster-tasks","assigning-machine-set-resources-to-infra-nodes","binding-infra-node-workloads-using-taints-tolerations_post-install-cluster-tasks","moving-resources-to-infrastructure-machinesets","infrastructure-moving-router_post-install-cluster-tasks","infrastructure-moving-registry_post-install-cluster-tasks","infrastructure-moving-monitoring_post-install-cluster-tasks","infrastructure-moving-logging_post-install-cluster-tasks","cluster-autoscaler-about_post-install-cluster-tasks","cluster-autoscaler-cr_post-install-cluster-tasks","ClusterAutoscaler-deploying_post-install-cluster-tasks","machine-autoscaler-about_post-install-cluster-tasks","machine-autoscaler-cr_post-install-cluster-tasks","MachineAutoscaler-deploying_post-install-cluster-tasks","post-install-tp-tasks","nodes-cluster-enabling-features-about_post-install-cluster-tasks","nodes-cluster-enabling-features-console_post-install-cluster-tasks","nodes-cluster-enabling-features-cli_post-install-cluster-tasks","post-install-etcd-tasks","about-etcd_post-install-cluster-tasks","enabling-etcd-encryption_post-install-cluster-tasks","disabling-etcd-encryption_post-install-cluster-tasks","backing-up-etcd-data_post-install-cluster-tasks","etcd-defrag_post-install-cluster-tasks","dr-scenario-2-restoring-cluster-state_post-install-cluster-tasks","dr-scenario-cluster-state-issues_post-install-cluster-tasks","post-install-pod-disruption-budgets","nodes-pods-configuring-pod-distruption-about_post-install-cluster-tasks","nodes-pods-pod-disruption-configuring_post-install-cluster-tasks","post-install-rotate-remove-cloud-creds","manually-rotating-cloud-creds_post-install-cluster-tasks","manually-removing-cloud-creds_post-install-cluster-tasks","post-install-must-gather-disconnected","installation-images-samples-disconnected-mirroring-assist_post-install-cluster-tasks","installation-restricted-network-samples_post-install-cluster-tasks","installation-preparing-restricted-cluster-to-gather-support-data_post-install-cluster-tasks","images-cluster-sample-imagestream-import_post-install-cluster-tasks","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-cluster-tasks",{"title":4869,"visible":10,"weight":435,"urlFragment":4870,"anchor":16,"singlePageAnchor":4870,"subChapters":4871,"url":4953,"docTitle":4772},"Post-installation node tasks","post-install-node-tasks",[4872,4873,4874,4875,4876,4877,4878,4879,4880,4881,1006,4882,4883,4884,4885,4886,4887,4888,4889,4890,4891,4892,4893,4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909,4910,4911,4912,4913,4914,4915,4916,4917,4918,4919,4920,4921,4922,4923,4924,4925,4926,4927,4928,4929,4930,4931,4932,4933,4934,4935,4936,4937,4938,4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952],"post-install-config-adding-rhel-compute","rhel-compute-overview_post-install-node-tasks","rhel-compute-requirements_post-install-node-tasks","csr-management_post-install-node-tasks","rhel-preparing-playbook-machine_post-install-node-tasks","rhel-preparing-node_post-install-node-tasks","rhel-adding-node_post-install-node-tasks","rhel-ansible-parameters_post-install-node-tasks","rhel-removing-rhcos_post-install-node-tasks","post-install-config-adding-fcos-compute","machine-user-infra-machines-iso_post-install-node-tasks","machine-user-infra-machines-pxe_post-install-node-tasks","installation-approve-csrs_post-install-node-tasks","post-installation-config-deploying-machine-health-checks","machine-health-checks-about_post-install-node-tasks","machine-health-checks-limitations_post-install-node-tasks","machine-health-checks-resource_post-install-node-tasks","machine-health-checks-short-circuiting_post-install-node-tasks","setting-literal-maxunhealthy-literal-by-using-an-absolute-value","setting-literal-maxunhealthy-literal-by-using-percentages","machine-health-checks-creating_post-install-node-tasks","machineset-manually-scaling_post-install-node-tasks","differences-between-machinesets-and-machineconfigpool_post-install-node-tasks","recommended-node-host-practices_post-install-node-tasks","create-a-kubeletconfig-crd-to-edit-kubelet-parameters_post-install-node-tasks","modify-unavailable-workers_post-install-node-tasks","master-node-sizing_post-install-node-tasks","seting_up_cpu_manager_post-install-node-tasks","post-install-huge-pages","what-huge-pages-do_post-install-node-tasks","how-huge-pages-are-consumed-by-apps_post-install-node-tasks","configuring-huge-pages_post-install-node-tasks","at-boot-time","nodes-pods-plugins-about_post-install-node-tasks","methods-for-deploying-a-device-plugin_post-install-node-tasks","nodes-pods-plugins-device-mgr_post-install-node-tasks","nodes-pods-plugins-install_post-install-node-tasks","post-install-taints-tolerations","nodes-scheduler-taints-tolerations-about_post-install-node-tasks","nodes-scheduler-taints-tolerations-about-seconds_post-install-node-tasks","nodes-scheduler-taints-tolerations-about-multiple_post-install-node-tasks","nodes-scheduler-taints-tolerations-about-taintNodesByCondition_post-install-node-tasks","nodes-scheduler-taints-tolerations-about-taintBasedEvictions_post-install-node-tasks","nodes-scheduler-taints-tolerations-all_post-install-node-tasks","nodes-scheduler-taints-tolerations-adding_post-install-node-tasks","nodes-scheduler-taints-tolerations-adding-machineset_post-install-node-tasks","nodes-scheduler-taints-tolerations-bindings_post-install-node-tasks","nodes-scheduler-taints-tolerations-special_post-install-node-tasks","nodes-scheduler-taints-tolerations-removing_post-install-node-tasks","post-install-topology-manager","topology_manager_policies_post-install-node-tasks","seting_up_topology_manager_post-install-node-tasks","pod-interactions-with-topology-manager_post-install-node-tasks","nodes-cluster-overcommit-resource-requests_post-install-node-tasks","nodes-cluster-resource-override_post-install-node-tasks","nodes-cluster-resource-override-deploy-console_post-install-node-tasks","nodes-cluster-resource-override-deploy-cli_post-install-node-tasks","nodes-cluster-resource-configure_post-install-node-tasks","nodes-cluster-node-overcommit_post-install-node-tasks","nodes-cluster-overcommit-reserving-memory_post-install-node-tasks","understanding-container-CPU-requests_post-install-node-tasks","understanding-memory-requests-container_post-install-node-tasks","nodes-cluster-overcommit-qos-about_post-install-node-tasks","qos-about-reserve_post-install-node-tasks","nodes-qos-about-swap_post-install-node-tasks","nodes-cluster-overcommit-configure-nodes_post-install-node-tasks","nodes-cluster-overcommit-node-enforcing_post-install-node-tasks","nodes-cluster-overcommit-node-resources_post-install-node-tasks","nodes-cluster-overcommit-node-disable_post-install-node-tasks","nodes-cluster-project-overcommit_post-install-node-tasks","nodes-cluster-overcommit-project-disable_post-install-node-tasks","post-install-garbage-collection","nodes-nodes-garbage-collection-containers_post-install-node-tasks","nodes-nodes-garbage-collection-images_post-install-node-tasks","nodes-nodes-garbage-collection-configuring_post-install-node-tasks","post-using-node-tuning-operator","accessing-an-example-node-tuning-operator-specification_post-install-node-tasks","custom-tuning-specification_post-install-node-tasks","custom-tuning-default-profiles-set_post-install-node-tasks","supported-tuned-daemon-plug-ins_post-install-node-tasks","nodes-nodes-managing-max-pods-about_post-install-node-tasks","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-node-tasks",{"title":4955,"visible":10,"weight":453,"urlFragment":4956,"anchor":16,"singlePageAnchor":4956,"subChapters":4957,"url":4990,"docTitle":4772},"Post-installation network configuration","post-install-network-configuration",[4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970,4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,4981,4982,4983,4984,4985,4986,4987,4988,4989],"nw-operator-cr_post-install-network-configuration","nw-proxy-configure-object_post-install-network-configuration","private-clusters-setting-dns-private_post-install-network-configuration","post-install-configuring_ingress_cluster_traffic","post-install-configuring-node-port-service-range","post-install-configuring-node-port-service-range-prerequisites","nw-nodeport-service-range-edit_post-install-network-configuration","post-install-configuring-network-policy","nw-networkpolicy-about_post-install-network-configuration","nw-networkpolicy-object_post-install-network-configuration","nw-networkpolicy-create_post-install-network-configuration","nw-networkpolicy-multitenant-isolation_post-install-network-configuration","post-install-nw-networkpolicy-creating-default-networkpolicy-objects-for-a-new-project","modifying-template-for-new-projects_post-install-network-configuration","nw-networkpolicy-project-defaults_post-install-network-configuration","ossm-supported-configurations_post-install-network-configuration","ossm-supported-platforms_post-install-network-configuration","ossm-unsupported-configurations_post-install-network-configuration","ossm-supported-configurations-networks_post-install-network-configuration","ossm-supported-configurations-sm_post-install-network-configuration","ossm-supported-configurations-kiali_post-install-network-configuration","ossm-supported-configurations-jaeger_post-install-network-configuration","ossm-supported-configurations-webassembly_post-install-network-configuration","ossm-installation-activities_post-install-network-configuration","post-installationrouting-optimization","baseline-router-performance_post-install-network-configuration","router-performance-optimizations_post-install-network-configuration","post-installation-osp-fips","installation-osp-configuring-api-floating-ip_post-install-network-configuration","installation-osp-kuryr-port-pools_post-install-network-configuration","installation-osp-kuryr-settings-active_post-install-network-configuration","nw-osp-configure-octavia-load-balancing-services_post-install-network-configuration","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-network-configuration",{"title":4992,"visible":10,"weight":468,"urlFragment":4993,"anchor":16,"singlePageAnchor":4993,"subChapters":4994,"url":5019,"docTitle":4772},"Post-installation storage configuration","post-install-storage-configuration",[4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,5012,4685,5013,5014,5015,5016,5017,5018],"post-install-dynamic-provisioning","about_post-install-storage-configuration","available-plug-ins_post-install-storage-configuration","defining-storage-classes_post-install-storage-configuration","basic-storage-class-definition_post-install-storage-configuration","storage-class-annotations_post-install-storage-configuration","openstack-cinder-storage-class_post-install-storage-configuration","aws-definition_post-install-storage-configuration","azure-disk-definition_post-install-storage-configuration","azure-file-definition_post-install-storage-configuration","azure-file-considerations_post-install-storage-configuration","gce-persistentdisk-storage-class_post-install-storage-configuration","vsphere-definition_post-install-storage-configuration","change-default-storage-class_post-install-storage-configuration","post-install-optimizing-storage","available-persistent-storage-options_post-install-storage-configuration","recommended-configurable-storage-technology_post-install-storage-configuration","specific-application-storage-recommendations","scaled-registry","metrics","logging","applications","other-specific-application-storage-recommendations","post-install-deploy-OCS","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-storage-configuration",{"title":5021,"visible":10,"weight":869,"urlFragment":5022,"anchor":16,"singlePageAnchor":5022,"subChapters":5023,"url":5054,"docTitle":4772},"Preparing for users","post-install-preparing-for-users",[5024,5025,5026,5027,5028,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,5040,5041,5042,5043,5044,5045,5046,5047,5048,5049,5050,5051,5052,5053],"post-install-understanding-identity-provider","identity-provider-overview_post-install-preparing-for-users","post-install-supported-identity-providers","identity-provider-parameters_post-install-preparing-for-users","identity-provider-default-CR_post-install-preparing-for-users","post-install-using-rbac-to-define-and-apply-permissions","authorization-overview_post-install-preparing-for-users","default-roles_post-install-preparing-for-users","evaluating-authorization_post-install-preparing-for-users","cluster-role-aggregations_post-install-preparing-for-users","rbac-projects-namespaces_post-install-preparing-for-users","rbac-default-projects_post-install-preparing-for-users","viewing-cluster-roles_post-install-preparing-for-users","viewing-local-roles_post-install-preparing-for-users","adding-roles_post-install-preparing-for-users","creating-local-role_post-install-preparing-for-users","creating-cluster-role_post-install-preparing-for-users","local-role-binding-commands_post-install-preparing-for-users","cluster-role-binding-commands_post-install-preparing-for-users","creating-cluster-admin_post-install-preparing-for-users","understanding-kubeadmin_post-install-preparing-for-users","removing-kubeadmin_post-install-preparing-for-users","post-install-image-configuration-resources","images-configuration-parameters_post-install-preparing-for-users","images-configuration-file_post-install-preparing-for-users","images-configuration-cas_post-install-preparing-for-users","images-configuration-registry-mirror_post-install-preparing-for-users","olm-installing-operators-from-operatorhub_post-install-preparing-for-users","olm-installing-from-operatorhub-using-web-console_post-install-preparing-for-users","olm-installing-operator-from-operatorhub-using-cli_post-install-preparing-for-users","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-preparing-for-users",{"title":5056,"visible":10,"weight":877,"urlFragment":5057,"anchor":16,"singlePageAnchor":5057,"subChapters":5058,"url":5062,"docTitle":4772},"Configuring alert notifications","configuring-alert-notifications",[5059,5060,5061],"sending-notifications-to-external-systems_configuring-alert-notifications","configuring-alert-receivers_configuring-alert-notifications","configuring-alert-notifications-additional-resources","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/configuring-alert-notifications",{"title":5064,"visible":10,"weight":888,"urlFragment":5065,"anchor":16,"singlePageAnchor":5065,"subChapters":5066,"url":5075,"docTitle":4772},"Configuring additional devices in an IBM Z or LinuxONE environment","post-install-configure-additional-devices-ibmz",[5067,5068,5069,5070,5071,5072,5073,5074],"configure-additional-devices-using-mco_post-install-configure-additional-devices-ibmz","configuring-fcp-host","configuring-fcp-lun","configuring-dasd","configuring-qeth","configure-additional-devices-manually_post-install-configure-additional-devices-ibmz","roce-network-cards","enabling-multipathing-fcp-luns_post-install-configure-additional-devices-ibmz","/documentation/openshift_container_platform/4.8/html/post-installation_configuration/post-install-configure-additional-devices-ibmz",{"title":5077,"visible":10,"categoryName":10,"sections":5078},"Migrate",[5079,5309],{"title":5080,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5081,"url":5082,"docTitle":5083,"sections":5084},"Migrating from version 3 to 4",[],"/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/index","migrating_from_version_3_to_4",[5085,5100,5105,5118,5127,5138,5168,5195,5203,5212,5224,5262],{"title":5086,"visible":10,"weight":23,"urlFragment":5087,"anchor":16,"singlePageAnchor":5087,"subChapters":5088,"url":5099,"docTitle":5083},"Migration from OpenShift Container Platform 3 to 4 overview","migration-from-version-3-to-4-overview",[5089,5090,5091,5092,5093,5094,5095,5096,5097,5098],"mtc-3-to-4-overview-differences-mtc","mtc-3-to-4-overview-planning-network-considerations-mtc","mtc-overview-install-mtc","mtc-overview-upgrade-mtc","mtc-overview-mtc-checklists","mtc-overview-migrate-mtc-applications","mtc-overview-advanced-migration-options","mtc-overview-troubleshooting-mtc","mtc-overview-roll-back-mtc","mtc-overview-uninstall-mtc","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/migration-from-version-3-to-4-overview",{"title":5101,"visible":10,"weight":35,"urlFragment":5102,"anchor":16,"singlePageAnchor":5102,"subChapters":5103,"url":5104,"docTitle":5083},"About migrating from OpenShift Container Platform 3 to 4","about-migrating-from-3-to-4",[],"/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/about-migrating-from-3-to-4",{"title":5106,"visible":10,"weight":46,"urlFragment":5107,"anchor":16,"singlePageAnchor":5107,"subChapters":5108,"url":5117,"docTitle":5083},"Differences between OpenShift Container Platform 3 and 4","planning-migration-3-4",[5109,5110,5111,5112,5113,5114,5115,5116],"migration-differences-architecture","migration-differences-install","migration-considerations","migration-preparing-storage","migration-preparing-networking","migration-preparing-logging","migration-preparing-security","migration-preparing-monitoring","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/planning-migration-3-4",{"title":5119,"visible":10,"weight":68,"urlFragment":5120,"anchor":16,"singlePageAnchor":5120,"subChapters":5121,"url":5126,"docTitle":5083},"Network considerations","planning-considerations-3-4",[5122,5123,5124,5125],"dns-considerations_planning-considerations-3-4","migration-isolating-dns-domain-of-target-cluster-from-clients_planning-considerations-3-4","migration-setting-up-target-cluster-to-accept-source-dns-domain_planning-considerations-3-4","migration-network-traffic-redirection-strategies_planning-considerations-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/planning-considerations-3-4",{"title":5128,"visible":10,"weight":435,"urlFragment":5129,"anchor":16,"singlePageAnchor":5129,"subChapters":5130,"url":5137,"docTitle":5083},"About the Migration Toolkit for Containers","about-mtc-3-4",[5131,5132,5133,5134,5135,5136],"migration-terminology_about-mtc-3-4","migration-mtc-workflow_about-mtc-3-4","migration-understanding-data-copy-methods_about-mtc-3-4","file-system-copy-method_about-mtc-3-4","snapshot-copy-method_about-mtc-3-4","migration-direct-volume-migration-and-direct-image-migration_about-mtc-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/about-mtc-3-4",{"title":5139,"visible":10,"weight":453,"urlFragment":5140,"anchor":16,"singlePageAnchor":5140,"subChapters":5141,"url":5167,"docTitle":5083},"Installing the Migration Toolkit for Containers","installing-3-4",[5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165,5166],"migration-compatibility-guidelines_installing-3-4","migration-installing-legacy-operator_installing-3-4","migration-installing-mtc-on-ocp-4_installing-3-4","migration-about-configuring-proxies_installing-3-4","direct-volume-migration_installing-3-4","tcp-proxy-setup-for-dvm_installing-3-4","why-tcp-proxy-instead-of-an-http-https-proxy_installing-3-4","dvm-known-issues_installing-3-4","tuning-network-policies-for-migrations_installing-3-4","dvm-network-policy-configuration_installing-3-4","egress-traffic-from-rsync-pods_installing-3-4","ingress-traffic-to-rsync-pods_installing-3-4","egressnetworkpolicy-config_installing-3-4","configuring-supplemental-groups-for-rsync-podsinstalling-3-4","migration-configuring-proxies_installing-3-4","configuring-replication-repository_installing-3-4","replication-repository-prerequisites_installing-3-4","migration-configuring-mcg_installing-3-4","installing-the-ocs-operator_installing-3-4","configuring-mcg-storage-bucket_installing-3-4","migration-configuring-aws-s3_installing-3-4","migration-configuring-gcp_installing-3-4","migration-configuring-azure_installing-3-4","installing-3-4_configuring-replication-repository-additional-resources","migration-uninstalling-mtc-clean-up_installing-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/installing-3-4",{"title":5169,"visible":10,"weight":468,"urlFragment":5170,"anchor":16,"singlePageAnchor":5170,"subChapters":5171,"url":5194,"docTitle":5083},"Installing the Migration Toolkit for Containers in a restricted network environment","installing-restricted-3-4",[5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192,5193],"migration-compatibility-guidelines_installing-restricted-3-4","migration-installing-mtc-on-ocp-4_installing-restricted-3-4","migration-installing-legacy-operator_installing-restricted-3-4","migration-about-configuring-proxies_installing-restricted-3-4","direct-volume-migration_installing-restricted-3-4","tcp-proxy-setup-for-dvm_installing-restricted-3-4","why-tcp-proxy-instead-of-an-http-https-proxy_installing-restricted-3-4","dvm-known-issues_installing-restricted-3-4","tuning-network-policies-for-migrations_installing-restricted-3-4","dvm-network-policy-configuration_installing-restricted-3-4","egress-traffic-from-rsync-pods_installing-restricted-3-4","ingress-traffic-to-rsync-pods_installing-restricted-3-4","egressnetworkpolicy-config_installing-restricted-3-4","configuring-supplemental-groups-for-rsync-podsinstalling-restricted-3-4","migration-configuring-proxies_installing-restricted-3-4","configuring-replication-repository_installing-restricted-3-4","replication-repository-prerequisites_installing-restricted-3-4","migration-configuring-mcg_installing-restricted-3-4","installing-the-ocs-operator_installing-restricted-3-4","configuring-mcg-storage-bucket_installing-restricted-3-4","installing-restricted-3-4_configuring-replication-repository-additional-resources","migration-uninstalling-mtc-clean-up_installing-restricted-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/installing-restricted-3-4",{"title":5196,"visible":10,"weight":869,"urlFragment":5197,"anchor":16,"singlePageAnchor":5197,"subChapters":5198,"url":5202,"docTitle":5083},"Upgrading the Migration Toolkit for Containers","upgrading-3-4",[5199,5200,5201],"migration-upgrading-mtc-on-ocp-4_upgrading-3-4","migration-upgrading-mtc-with-legacy-operator_upgrading-3-4","migration-upgrading-from-mtc-1-3_upgrading-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/upgrading-3-4",{"title":5204,"visible":10,"weight":877,"urlFragment":5205,"anchor":16,"singlePageAnchor":5205,"subChapters":5206,"url":5211,"docTitle":5083},"Premigration checklists","premigration-checklists-3-4",[5207,5208,5209,5210],"resources_premigration-checklists-3-4","source-cluster_premigration-checklists-3-4","target-cluster_premigration-checklists-3-4","performance_premigration-checklists-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/premigration-checklists-3-4",{"title":5213,"visible":10,"weight":888,"urlFragment":5214,"anchor":16,"singlePageAnchor":5214,"subChapters":5215,"url":5223,"docTitle":5083},"Migrating your applications","migrating-applications-3-4",[5216,5217,5218,5219,5220,5221,5222],"migration-prerequisites_migrating-applications-3-4","migrating-applications-mtc-web-console_migrating-applications-3-4","migration-launching-cam_migrating-applications-3-4","migration-adding-cluster-to-cam_migrating-applications-3-4","migration-adding-replication-repository-to-cam_migrating-applications-3-4","migration-creating-migration-plan-cam_migrating-applications-3-4","migration-running-migration-plan-cam_migrating-applications-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/migrating-applications-3-4",{"title":5225,"visible":10,"weight":899,"urlFragment":5226,"anchor":16,"singlePageAnchor":5226,"subChapters":5227,"url":5261,"docTitle":5083},"Advanced migration options","advanced-migration-options-3-4",[5228,5229,5230,5231,5232,5233,5234,5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,5248,5249,5250,5251,5252,5253,5254,5255,5256,5257,5258,5259,5260],"migration-terminology_advanced-migration-options-3-4","migrating-applications-cli_advanced-migration-options-3-4","migration-prerequisites_advanced-migration-options-3-4","migration-creating-registry-route-for-dim_advanced-migration-options-3-4","migration-about-configuring-proxies_advanced-migration-options-3-4","direct-volume-migration_advanced-migration-options-3-4","tcp-proxy-setup-for-dvm_advanced-migration-options-3-4","why-tcp-proxy-instead-of-an-http-https-proxy_advanced-migration-options-3-4","dvm-known-issues_advanced-migration-options-3-4","tuning-network-policies-for-migrations_advanced-migration-options-3-4","dvm-network-policy-configuration_advanced-migration-options-3-4","egress-traffic-from-rsync-pods_advanced-migration-options-3-4","ingress-traffic-to-rsync-pods_advanced-migration-options-3-4","egressnetworkpolicy-config_advanced-migration-options-3-4","configuring-supplemental-groups-for-rsync-podsadvanced-migration-options-3-4","migration-configuring-proxies_advanced-migration-options-3-4","migration-migrating-applications-api_advanced-migration-options-3-4","migration-state-migration-cli_advanced-migration-options-3-4","migration-hooks_advanced-migration-options-3-4","migration-writing-ansible-playbook-hook_advanced-migration-options-3-4","migration-writing-ansible-playbook-hook-ansible-modules_advanced-migration-options-3-4","migration-writing-ansible-playbook-hook-environment-variables_advanced-migration-options-3-4","migration-plan-options_advanced-migration-options-3-4","migration-excluding-resources_advanced-migration-options-3-4","migration-mapping-destination-namespaces-in-the-migplan-cr_advanced-migration-options-3-4","migration-excluding-pvcs_advanced-migration-options-3-4","migration-mapping-pvcs_advanced-migration-options-3-4","migration-editing-pvs-in-migplan_advanced-migration-options-3-4","migration-kubernetes-objects_advanced-migration-options-3-4","migration-controller-options_advanced-migration-options-3-4","migration-changing-migration-plan-limits_advanced-migration-options-3-4","migration-enabling-pv-resizing-dvm_advanced-migration-options-3-4","migration-enabling-cached-kubernetes-clients_advanced-migration-options-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/advanced-migration-options-3-4",{"title":5263,"visible":10,"weight":906,"urlFragment":5264,"anchor":16,"singlePageAnchor":5264,"subChapters":5265,"url":5308,"docTitle":5083},"Troubleshooting","troubleshooting-3-4",[5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299,5300,5301,5302,5303,5304,5305,5306,5307],"migration-mtc-workflow_troubleshooting-3-4","migration-mtc-cr-manifests_troubleshooting-3-4","directimagemigration_troubleshooting-3-4","directimagestreammigration_troubleshooting-3-4","directvolumemigration_troubleshooting-3-4","directvolumemigrationprogress_troubleshooting-3-4","miganalytic_troubleshooting-3-4","migcluster_troubleshooting-3-4","mighook_troubleshooting-3-4","migmigration_troubleshooting-3-4","migplan_troubleshooting-3-4","migstorage_troubleshooting-3-4","logs-and-debugging-tools_troubleshooting-3-4","migration-viewing-migration-plan-resources_troubleshooting-3-4","migration-viewing-migration-plan-log_troubleshooting-3-4","migration-using-mig-log-reader_troubleshooting-3-4","migration-accessing-performance-metrics_troubleshooting-3-4","migration-provided-metrics_troubleshooting-3-4","cam_app_workload_migrations-metric_troubleshooting-3-4","mtc_client_request_count-metric_troubleshooting-3-4","mtc_client_request_elapsed-metric_troubleshooting-3-4","useful-queries_troubleshooting-3-4","migration-using-must-gather_troubleshooting-3-4","migration-debugging-velero-resources_troubleshooting-3-4","migration-partial-failure-velero_troubleshooting-3-4","migration-using-mtc-crs-for-troubleshooting_troubleshooting-3-4","common-issues-and-concerns_troubleshooting-3-4","migration-updating-deprecated-internal-images_troubleshooting-3-4","migration-dvm-error-node-selectors_troubleshooting-3-4","migration-error-messages_troubleshooting-3-4","ca-certificate-error-displayed-when-accessing-console-for-first-time_troubleshooting-3-4","oauth-timeout-error-in-console_troubleshooting-3-4","certificate-signed-by-unknown-authority-error_troubleshooting-3-4","backup-storage-location-errors-in-velero-pod-log_troubleshooting-3-4","pod-volume-backup-timeout-error-in-velero-pod-log_troubleshooting-3-4","restic-verification-errors-in-migmigration-custom-resource_troubleshooting-3-4","restic-permission-error-when-migrating-from-nfs-storage-with-root-squash-enabled_troubleshooting-3-4","migration-known-issues_troubleshooting-3-4","rolling-back-migration_troubleshooting-3-4","migration-rolling-back-migration-web-console_troubleshooting-3-4","migration-rolling-back-migration-cli_troubleshooting-3-4","migration-rolling-back-migration-manually_troubleshooting-3-4","/documentation/openshift_container_platform/4.8/html/migrating_from_version_3_to_4/troubleshooting-3-4",{"title":5310,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5311,"url":5312,"docTitle":5313,"sections":5314},"Migration Toolkit for Containers",[],"/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/index","migration_toolkit_for_containers",[5315,5325,5341,5370,5396,5403,5410,5418,5429,5466],{"title":5128,"visible":10,"weight":23,"urlFragment":5316,"anchor":16,"singlePageAnchor":5316,"subChapters":5317,"url":5324,"docTitle":5313},"about-mtc",[5318,5319,5320,5321,5322,5323],"migration-terminology_about-mtc","migration-mtc-workflow_about-mtc","migration-understanding-data-copy-methods_about-mtc","file-system-copy-method_about-mtc","snapshot-copy-method_about-mtc","migration-direct-volume-migration-and-direct-image-migration_about-mtc","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/about-mtc",{"title":5326,"visible":10,"weight":35,"urlFragment":5327,"anchor":16,"singlePageAnchor":5327,"subChapters":5328,"url":5340,"docTitle":5313},"Migration Toolkit for Containers release notes","mtc-release-notes",[5329,5330,5331,5332,5333,5334,5335,5336,5337,5338,5339],"migration-mtc-release-notes-1-6_mtc-release-notes","new-features-and-enhancements-1-6_mtc-release-notes","deprecated-features-1-6_mtc-release-notes","known-issues-1-6_mtc-release-notes","migration-mtc-release-notes-1-5_mtc-release-notes","new-features-and-enhancements-1-5_mtc-release-notes","deprecated-features-1-5_mtc-release-notes","known-issues-1-5_mtc-release-notes","technical-changes-1-5_mtc-release-notes","migration-mtc-release-notes-1-4_mtc-release-notes","known-issues-1-4_mtc-release-notes","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/mtc-release-notes",{"title":5139,"visible":10,"weight":46,"urlFragment":5342,"anchor":16,"singlePageAnchor":5342,"subChapters":5343,"url":5369,"docTitle":5313},"installing-mtc",[5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368],"migration-compatibility-guidelines_installing-mtc","migration-installing-legacy-operator_installing-mtc","migration-installing-mtc-on-ocp-4_installing-mtc","migration-about-configuring-proxies_installing-mtc","direct-volume-migration_installing-mtc","tcp-proxy-setup-for-dvm_installing-mtc","why-tcp-proxy-instead-of-an-http-https-proxy_installing-mtc","dvm-known-issues_installing-mtc","tuning-network-policies-for-migrations_installing-mtc","dvm-network-policy-configuration_installing-mtc","egress-traffic-from-rsync-pods_installing-mtc","ingress-traffic-to-rsync-pods_installing-mtc","egressnetworkpolicy-config_installing-mtc","configuring-supplemental-groups-for-rsync-podsinstalling-mtc","migration-configuring-proxies_installing-mtc","configuring-replication-repository_installing-mtc","replication-repository-prerequisites_installing-mtc","migration-configuring-mcg_installing-mtc","installing-the-ocs-operator_installing-mtc","configuring-mcg-storage-bucket_installing-mtc","migration-configuring-aws-s3_installing-mtc","migration-configuring-gcp_installing-mtc","migration-configuring-azure_installing-mtc","installing-mtc_configuring-replication-repository-additional-resources","migration-uninstalling-mtc-clean-up_installing-mtc","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/installing-mtc",{"title":5169,"visible":10,"weight":68,"urlFragment":5371,"anchor":16,"singlePageAnchor":5371,"subChapters":5372,"url":5395,"docTitle":5313},"installing-mtc-restricted",[5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393,5394],"migration-compatibility-guidelines_installing-mtc-restricted","migration-installing-mtc-on-ocp-4_installing-mtc-restricted","migration-installing-legacy-operator_installing-mtc-restricted","migration-about-configuring-proxies_installing-mtc-restricted","direct-volume-migration_installing-mtc-restricted","tcp-proxy-setup-for-dvm_installing-mtc-restricted","why-tcp-proxy-instead-of-an-http-https-proxy_installing-mtc-restricted","dvm-known-issues_installing-mtc-restricted","tuning-network-policies-for-migrations_installing-mtc-restricted","dvm-network-policy-configuration_installing-mtc-restricted","egress-traffic-from-rsync-pods_installing-mtc-restricted","ingress-traffic-to-rsync-pods_installing-mtc-restricted","egressnetworkpolicy-config_installing-mtc-restricted","configuring-supplemental-groups-for-rsync-podsinstalling-mtc-restricted","migration-configuring-proxies_installing-mtc-restricted","configuring-replication-repository_installing-mtc-restricted","replication-repository-prerequisites_installing-mtc-restricted","migration-configuring-mcg_installing-mtc-restricted","installing-the-ocs-operator_installing-mtc-restricted","configuring-mcg-storage-bucket_installing-mtc-restricted","installing-mtc-restricted_configuring-replication-repository-additional-resources","migration-uninstalling-mtc-clean-up_installing-mtc-restricted","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/installing-mtc-restricted",{"title":5196,"visible":10,"weight":435,"urlFragment":5397,"anchor":16,"singlePageAnchor":5397,"subChapters":5398,"url":5402,"docTitle":5313},"upgrading-mtc",[5399,5400,5401],"migration-upgrading-mtc-on-ocp-4_upgrading-mtc","migration-upgrading-mtc-with-legacy-operator_upgrading-mtc","migration-upgrading-from-mtc-1-3_upgrading-mtc","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/upgrading-mtc",{"title":5204,"visible":10,"weight":453,"urlFragment":5404,"anchor":16,"singlePageAnchor":5404,"subChapters":5405,"url":5409,"docTitle":5313},"premigration-checklists-mtc",[5406,5407,5408],"cluster-health-checklist_premigration-checklists-mtc","source-cluster-checklist_premigration-checklists-mtc","target-cluster-checklist_premigration-checklists-mtc","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/premigration-checklists-mtc",{"title":5119,"visible":10,"weight":468,"urlFragment":5411,"anchor":16,"singlePageAnchor":5411,"subChapters":5412,"url":5417,"docTitle":5313},"network-considerations-mtc",[5413,5414,5415,5416],"dns-considerations_network-considerations-mtc","migration-isolating-dns-domain-of-target-cluster-from-clients_network-considerations-mtc","migration-setting-up-target-cluster-to-accept-source-dns-domain_network-considerations-mtc","migration-network-traffic-redirection-strategies_network-considerations-mtc","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/network-considerations-mtc",{"title":5213,"visible":10,"weight":869,"urlFragment":5419,"anchor":16,"singlePageAnchor":5419,"subChapters":5420,"url":5428,"docTitle":5313},"migrating-applications-with-mtc",[5421,5422,5423,5424,5425,5426,5427],"migration-prerequisites_migrating-applications-with-mtc","migrating-applications-mtc-web-console_migrating-applications-with-mtc","migration-launching-cam_migrating-applications-with-mtc","migration-adding-cluster-to-cam_migrating-applications-with-mtc","migration-adding-replication-repository-to-cam_migrating-applications-with-mtc","migration-creating-migration-plan-cam_migrating-applications-with-mtc","migration-running-migration-plan-cam_migrating-applications-with-mtc","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/migrating-applications-with-mtc",{"title":5225,"visible":10,"weight":877,"urlFragment":5430,"anchor":16,"singlePageAnchor":5430,"subChapters":5431,"url":5465,"docTitle":5313},"advanced-migration-options-mtc",[5432,5433,5434,5435,5436,5437,5438,5439,5440,5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461,5462,5463,5464],"migration-terminology_advanced-migration-options-mtc","migrating-applications-cli_advanced-migration-options-mtc","migration-prerequisites_advanced-migration-options-mtc","migration-creating-registry-route-for-dim_advanced-migration-options-mtc","migration-about-configuring-proxies_advanced-migration-options-mtc","direct-volume-migration_advanced-migration-options-mtc","tcp-proxy-setup-for-dvm_advanced-migration-options-mtc","why-tcp-proxy-instead-of-an-http-https-proxy_advanced-migration-options-mtc","dvm-known-issues_advanced-migration-options-mtc","tuning-network-policies-for-migrations_advanced-migration-options-mtc","dvm-network-policy-configuration_advanced-migration-options-mtc","egress-traffic-from-rsync-pods_advanced-migration-options-mtc","ingress-traffic-to-rsync-pods_advanced-migration-options-mtc","egressnetworkpolicy-config_advanced-migration-options-mtc","configuring-supplemental-groups-for-rsync-podsadvanced-migration-options-mtc","migration-configuring-proxies_advanced-migration-options-mtc","migration-migrating-applications-api_advanced-migration-options-mtc","migration-state-migration-cli_advanced-migration-options-mtc","migration-hooks_advanced-migration-options-mtc","migration-writing-ansible-playbook-hook_advanced-migration-options-mtc","migration-writing-ansible-playbook-hook-ansible-modules_advanced-migration-options-mtc","migration-writing-ansible-playbook-hook-environment-variables_advanced-migration-options-mtc","migration-plan-options_advanced-migration-options-mtc","migration-excluding-resources_advanced-migration-options-mtc","migration-mapping-destination-namespaces-in-the-migplan-cr_advanced-migration-options-mtc","migration-excluding-pvcs_advanced-migration-options-mtc","migration-mapping-pvcs_advanced-migration-options-mtc","migration-editing-pvs-in-migplan_advanced-migration-options-mtc","migration-kubernetes-objects_advanced-migration-options-mtc","migration-controller-options_advanced-migration-options-mtc","migration-changing-migration-plan-limits_advanced-migration-options-mtc","migration-enabling-pv-resizing-dvm_advanced-migration-options-mtc","migration-enabling-cached-kubernetes-clients_advanced-migration-options-mtc","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/advanced-migration-options-mtc",{"title":5263,"visible":10,"weight":888,"urlFragment":5467,"anchor":16,"singlePageAnchor":5467,"subChapters":5468,"url":5509,"docTitle":5313},"troubleshooting-mtc",[5469,5470,5471,5472,5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507,5508],"migration-mtc-workflow_troubleshooting-mtc","migration-mtc-cr-manifests_troubleshooting-mtc","directimagemigration_troubleshooting-mtc","directimagestreammigration_troubleshooting-mtc","directvolumemigration_troubleshooting-mtc","directvolumemigrationprogress_troubleshooting-mtc","miganalytic_troubleshooting-mtc","migcluster_troubleshooting-mtc","mighook_troubleshooting-mtc","migmigration_troubleshooting-mtc","migplan_troubleshooting-mtc","migstorage_troubleshooting-mtc","logs-and-debugging-tools_troubleshooting-mtc","migration-viewing-migration-plan-resources_troubleshooting-mtc","migration-viewing-migration-plan-log_troubleshooting-mtc","migration-using-mig-log-reader_troubleshooting-mtc","migration-accessing-performance-metrics_troubleshooting-mtc","migration-provided-metrics_troubleshooting-mtc","cam_app_workload_migrations-metric_troubleshooting-mtc","mtc_client_request_count-metric_troubleshooting-mtc","mtc_client_request_elapsed-metric_troubleshooting-mtc","useful-queries_troubleshooting-mtc","migration-using-must-gather_troubleshooting-mtc","migration-debugging-velero-resources_troubleshooting-mtc","migration-partial-failure-velero_troubleshooting-mtc","migration-using-mtc-crs-for-troubleshooting_troubleshooting-mtc","common-issues-and-concerns_troubleshooting-mtc","migration-dvm-error-node-selectors_troubleshooting-mtc","migration-error-messages_troubleshooting-mtc","ca-certificate-error-displayed-when-accessing-console-for-first-time_troubleshooting-mtc","oauth-timeout-error-in-console_troubleshooting-mtc","certificate-signed-by-unknown-authority-error_troubleshooting-mtc","backup-storage-location-errors-in-velero-pod-log_troubleshooting-mtc","pod-volume-backup-timeout-error-in-velero-pod-log_troubleshooting-mtc","restic-verification-errors-in-migmigration-custom-resource_troubleshooting-mtc","restic-permission-error-when-migrating-from-nfs-storage-with-root-squash-enabled_troubleshooting-mtc","rolling-back-migration_troubleshooting-mtc","migration-rolling-back-migration-web-console_troubleshooting-mtc","migration-rolling-back-migration-cli_troubleshooting-mtc","migration-rolling-back-migration-manually_troubleshooting-mtc","/documentation/openshift_container_platform/4.8/html/migration_toolkit_for_containers/troubleshooting-mtc",{"title":5511,"visible":10,"categoryName":10,"sections":5512},"Manage",[5513,5652,5835,5965],{"title":5514,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5515,"url":5516,"docTitle":5517,"sections":5518},"Backup and restore",[],"/documentation/openshift_container_platform/4.8/html/backup_and_restore/index","backup_and_restore",[5519,5527,5533,5539,5630],{"title":5514,"visible":10,"weight":23,"urlFragment":5520,"anchor":16,"singlePageAnchor":5520,"subChapters":5521,"url":5526,"docTitle":5517},"backup-restore-overview",[5522,5523,5524,5525],"backup-restore-operations-overview","application-backup-restore-operations-overview","oadp-requirements","backing-up-and-restoring-applications","/documentation/openshift_container_platform/4.8/html/backup_and_restore/backup-restore-overview",{"title":5528,"visible":10,"weight":35,"urlFragment":5529,"anchor":16,"singlePageAnchor":5529,"subChapters":5530,"url":5532,"docTitle":5517},"Shutting down the cluster gracefully","graceful-shutdown-cluster",[1006,5531],"graceful-shutdown_graceful-shutdown-cluster","/documentation/openshift_container_platform/4.8/html/backup_and_restore/graceful-shutdown-cluster",{"title":5534,"visible":10,"weight":46,"urlFragment":5535,"anchor":16,"singlePageAnchor":5535,"subChapters":5536,"url":5538,"docTitle":5517},"Restarting the cluster gracefully","graceful-restart-cluster",[1017,5537],"graceful-restart_graceful-restart-cluster","/documentation/openshift_container_platform/4.8/html/backup_and_restore/graceful-restart-cluster",{"title":5540,"visible":10,"weight":68,"urlFragment":5541,"anchor":16,"singlePageAnchor":5541,"subChapters":5542,"url":5629,"docTitle":5517},"Application backup and restore","application-backup-and-restore",[5543,5544,5545,5546,5547,5548,5549,5550,5551,5552,5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628],"oadp-features-plugins","oadp-features_oadp-features-plugins","oadp-plugins_oadp-features-plugins","oadp-configuring-velero-plugins_oadp-features-plugins","default-velero-cloud-provider-plugins","custom-velero-plugins","installing-and-configuring-oadp","about-installing-oadp","installing-oadp-aws","oadp-installing-operator_installing-oadp-aws","migration-configuring-aws-s3_installing-oadp-aws","oadp-creating-secret_installing-oadp-aws","oadp-secrets-for-different-credentials_installing-oadp-aws","configuring-dpa-aws","oadp-setting-resource-limits-and-requests_installing-oadp-aws","oadp-self-signed-certificate_installing-oadp-aws","oadp-installing-dpa_installing-oadp-aws","oadp-enabling-csi-dpa_installing-oadp-aws","installing-oadp-azure","oadp-installing-operator_installing-oadp-azure","migration-configuring-azure_installing-oadp-azure","oadp-creating-secret_installing-oadp-azure","oadp-secrets-for-different-credentials_installing-oadp-azure","configuring-dpa-azure","oadp-setting-resource-limits-and-requests_installing-oadp-azure","oadp-self-signed-certificate_installing-oadp-azure","oadp-installing-dpa_installing-oadp-azure","oadp-enabling-csi-dpa_installing-oadp-azure","installing-oadp-gcp","oadp-installing-operator_installing-oadp-gcp","migration-configuring-gcp_installing-oadp-gcp","oadp-creating-secret_installing-oadp-gcp","oadp-secrets-for-different-credentials_installing-oadp-gcp","configuring-dpa-gcp","oadp-setting-resource-limits-and-requests_installing-oadp-gcp","oadp-self-signed-certificate_installing-oadp-gcp","oadp-installing-dpa_installing-oadp-gcp","oadp-enabling-csi-dpa_installing-oadp-gcp","installing-oadp-mcg","oadp-installing-operator_installing-oadp-mcg","migration-configuring-mcg_installing-oadp-mcg","installing-the-ocs-operator_installing-oadp-mcg","configuring-mcg-storage-bucket_installing-oadp-mcg","oadp-creating-secret_installing-oadp-mcg","oadp-secrets-for-different-credentials_installing-oadp-mcg","configuring-dpa-mcg","oadp-setting-resource-limits-and-requests_installing-oadp-mcg","oadp-self-signed-certificate_installing-oadp-mcg","oadp-installing-dpa_installing-oadp-mcg","oadp-enabling-csi-dpa_installing-oadp-mcg","installing-oadp-ocs","oadp-installing-operator_installing-oadp-ocs","oadp-creating-secret_installing-oadp-ocs","oadp-secrets-for-different-credentials_installing-oadp-ocs","configuring-dpa-ocs","oadp-setting-resource-limits-and-requests_installing-oadp-ocs","oadp-self-signed-certificate_installing-oadp-ocs","oadp-installing-dpa_installing-oadp-ocs","oadp-enabling-csi-dpa_installing-oadp-ocs","uninstalling-oadp","backing-up-and-restoring","backing-up-applications","oadp-creating-backup-cr_backing-up-applications","oadp-backing-up-pvs-csi_backing-up-applications","oadp-backing-up-applications-restic_backing-up-applications","oadp-creating-backup-hooks_backing-up-applications","oadp-scheduling-backups_backing-up-applications","restoring-applications","oadp-creating-restore-cr_restoring-applications","oadp-creating-restore-hooks_restoring-applications","troubleshooting","velero-obtaining-by-downloading_oadp-troubleshooting","velero-obtaining-by-accessing-binary_oadp-troubleshooting","oadp-debugging-oc-cli_oadp-troubleshooting","migration-debugging-velero-resources_oadp-troubleshooting","oadp-installation-issues_oadp-troubleshooting","oadp-backup-location-contains-invalid-directories_oadp-troubleshooting","oadp-incorrect-aws-credentials_oadp-troubleshooting","oadp-backup-restore-cr-issues_oadp-troubleshooting","backup-cannot-retrieve-volume_oadp-troubleshooting","backup-cr-remains-in-progress_oadp-troubleshooting","oadp-restic-issues_oadp-troubleshooting","restic-permission-error-nfs-root-squash-enabled_oadp-troubleshooting","restic-restore-deploymentconfig-issue_oadp-troubleshooting","restic-backup-cannot-be-recreated-after-s3-bucket-emptied_oadp-troubleshooting","migration-using-must-gather_oadp-troubleshooting","/documentation/openshift_container_platform/4.8/html/backup_and_restore/application-backup-and-restore",{"title":5631,"visible":10,"weight":435,"urlFragment":5632,"anchor":16,"singlePageAnchor":5632,"subChapters":5633,"url":5651,"docTitle":5517},"Control plane backup and restore","control-plane-backup-and-restore",[5634,5635,5636,1038,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649,5650],"backup-etcd","backing-up-etcd-data_backup-etcd","replacing-unhealthy-etcd-member","restore-identify-unhealthy-etcd-member_replacing-unhealthy-etcd-member","restore-determine-state-etcd-member_replacing-unhealthy-etcd-member","replacing-the-unhealthy-etcd-member","restore-replace-stopped-etcd-member_replacing-unhealthy-etcd-member","restore-replace-crashlooping-etcd-member_replacing-unhealthy-etcd-member","restore-replace-stopped-baremetal-etcd-member_replacing-unhealthy-etcd-member","disaster-recovery","about-dr","dr-restoring-cluster-state","dr-scenario-2-restoring-cluster-state-about_dr-restoring-cluster-state","dr-scenario-2-restoring-cluster-state_dr-restoring-cluster-state","dr-scenario-cluster-state-issues_dr-restoring-cluster-state","dr-recovering-expired-certs","dr-scenario-3-recovering-expired-certs_dr-recovering-expired-certs","/documentation/openshift_container_platform/4.8/html/backup_and_restore/control-plane-backup-and-restore",{"title":5653,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5654,"url":5655,"docTitle":5656,"sections":5657},"Machine management",[],"/documentation/openshift_container_platform/4.8/html/machine_management/index","machine_management",[5658,5663,5705,5712,5721,5728,5741,5764,5782,5798,5821],{"title":5659,"visible":10,"weight":23,"urlFragment":5660,"anchor":16,"singlePageAnchor":5660,"subChapters":5661,"url":5662,"docTitle":5656},"Overview of machine management","overview-of-machine-management",[],"/documentation/openshift_container_platform/4.8/html/machine_management/overview-of-machine-management",{"title":5664,"visible":10,"weight":35,"urlFragment":5665,"anchor":16,"singlePageAnchor":5665,"subChapters":5666,"url":5704,"docTitle":5656},"Creating machine sets","creating-machine-sets",[5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,5699,5700,5701,5702,5703],"creating-machineset-aws","machine-api-overview_creating-machineset-aws","machineset-yaml-aws_creating-machineset-aws","machineset-creating_creating-machineset-aws","machineset-non-guaranteed-instance_creating-machineset-aws","machineset-creating-non-guaranteed-instance_creating-machineset-aws","machineset-dedicated-instance_creating-machineset-aws","machineset-creating-dedicated-instance_creating-machineset-aws","creating-machineset-azure","machine-api-overview_creating-machineset-azure","machineset-yaml-azure_creating-machineset-azure","machineset-creating_creating-machineset-azure","installation-azure-marketplace-subscribe_creating-machineset-azure","machineset-non-guaranteed-instance_creating-machineset-azure","machineset-creating-non-guaranteed-instance_creating-machineset-azure","machineset-enabling-customer-managed-encryption-azure_creating-machineset-azure","creating-machineset-gcp","machine-api-overview_creating-machineset-gcp","machineset-yaml-gcp_creating-machineset-gcp","machineset-creating_creating-machineset-gcp","machineset-non-guaranteed-instance_creating-machineset-gcp","machineset-creating-non-guaranteed-instance_creating-machineset-gcp","machineset-enabling-customer-managed-encryption_creating-machineset-gcp","creating-machineset-osp","machine-api-overview_creating-machineset-osp","machineset-yaml-osp_creating-machineset-osp","machineset-yaml-osp-sr-iov_creating-machineset-osp","machineset-yaml-osp-sr-iov-port-security_creating-machineset-osp","machineset-creating_creating-machineset-osp","creating-machineset-rhv","machine-api-overview_creating-machineset-rhv","machineset-yaml-rhv_creating-machineset-rhv","machineset-creating_creating-machineset-rhv","creating-machineset-vsphere","machine-api-overview_creating-machineset-vsphere","machineset-yaml-vsphere_creating-machineset-vsphere","machineset-creating_creating-machineset-vsphere","/documentation/openshift_container_platform/4.8/html/machine_management/creating-machine-sets",{"title":5706,"visible":10,"weight":46,"urlFragment":5707,"anchor":16,"singlePageAnchor":5707,"subChapters":5708,"url":5711,"docTitle":5656},"Manually scaling a machine set","manually-scaling-machineset",[1006,5709,5710],"machineset-manually-scaling_manually-scaling-machineset","machineset-delete-policy_manually-scaling-machineset","/documentation/openshift_container_platform/4.8/html/machine_management/manually-scaling-machineset",{"title":5713,"visible":10,"weight":68,"urlFragment":5714,"anchor":16,"singlePageAnchor":5714,"subChapters":5715,"url":5720,"docTitle":5656},"Modifying a machine set","modifying-machineset",[5716,5717,5718,5719],"machineset-modifying_modifying-machineset","migrating-nodes-to-a-different-storage-domain-rhv_modifying-machineset","machineset-migrating-compute-nodes-to-diff-sd-rhv_modifying-machineset","machineset-migrating-control-plane-nodes-to-diff-sd-rhv_modifying-machineset","/documentation/openshift_container_platform/4.8/html/machine_management/modifying-machineset",{"title":5722,"visible":10,"weight":435,"urlFragment":5723,"anchor":16,"singlePageAnchor":5723,"subChapters":5724,"url":5727,"docTitle":5656},"Deleting a machine","deleting-machine",[5725,5726],"machine-delete_deleting-machine","additional-resources_unhealthy-etcd-member","/documentation/openshift_container_platform/4.8/html/machine_management/deleting-machine",{"title":5729,"visible":10,"weight":453,"urlFragment":5730,"anchor":16,"singlePageAnchor":5730,"subChapters":5731,"url":5740,"docTitle":5656},"Applying autoscaling to an OpenShift Container Platform cluster","applying-autoscaling",[5732,5733,5734,5735,5736,971,5737,5738,5739,1546],"cluster-autoscaler-about_applying-autoscaling","machine-autoscaler-about_applying-autoscaling","configuring-clusterautoscaler","cluster-autoscaler-cr_applying-autoscaling","ClusterAutoscaler-deploying_applying-autoscaling","configuring-machineautoscaler","machine-autoscaler-cr_applying-autoscaling","MachineAutoscaler-deploying_applying-autoscaling","/documentation/openshift_container_platform/4.8/html/machine_management/applying-autoscaling",{"title":5742,"visible":10,"weight":468,"urlFragment":5743,"anchor":16,"singlePageAnchor":5743,"subChapters":5744,"url":5763,"docTitle":5656},"Creating infrastructure machine sets","creating-infrastructure-machinesets",[5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,4833,5759,5760,5761,5762],"infrastructure-components_creating-infrastructure-machinesets","creating-infrastructure-machinesets-production","creating-infrastructure-machinesets-clouds","machineset-yaml-aws_creating-infrastructure-machinesets","machineset-yaml-azure_creating-infrastructure-machinesets","machineset-yaml-gcp_creating-infrastructure-machinesets","machineset-yaml-osp_creating-infrastructure-machinesets","machineset-yaml-rhv_creating-infrastructure-machinesets","machineset-yaml-vsphere_creating-infrastructure-machinesets","machineset-creating_creating-infrastructure-machinesets","creating-an-infra-node_creating-infrastructure-machinesets","creating-infra-machines_creating-infrastructure-machinesets","assigning-machineset-resources-to-infra-nodes","binding-infra-node-workloads-using-taints-tolerations_creating-infrastructure-machinesets","infrastructure-moving-router_creating-infrastructure-machinesets","infrastructure-moving-registry_creating-infrastructure-machinesets","infrastructure-moving-monitoring_creating-infrastructure-machinesets","infrastructure-moving-logging_creating-infrastructure-machinesets","/documentation/openshift_container_platform/4.8/html/machine_management/creating-infrastructure-machinesets",{"title":5765,"visible":10,"weight":869,"urlFragment":5766,"anchor":16,"singlePageAnchor":5766,"subChapters":5767,"url":5781,"docTitle":5656},"Adding RHEL compute machines to an OpenShift Container Platform cluster","adding-rhel-compute",[5768,5769,5770,5771,5772,5773,5774,5775,5776,5777,5778,5779,5780],"rhel-compute-overview_adding-rhel-compute","rhel-compute-requirements_adding-rhel-compute","csr-management_adding-rhel-compute","adding-rhel-compute-preparing-image-cloud","rhel-images-aws_adding-rhel-compute","rhel-preparing-playbook-machine_adding-rhel-compute","rhel-preparing-node_adding-rhel-compute","rhel-attaching-instance-aws_adding-rhel-compute","rhel-worker-tag_adding-rhel-compute","rhel-adding-node_adding-rhel-compute","installation-approve-csrs_adding-rhel-compute","rhel-ansible-parameters_adding-rhel-compute","rhel-removing-rhcos_adding-rhel-compute","/documentation/openshift_container_platform/4.8/html/machine_management/adding-rhel-compute",{"title":5783,"visible":10,"weight":877,"urlFragment":5784,"anchor":16,"singlePageAnchor":5784,"subChapters":5785,"url":5797,"docTitle":5656},"Adding more RHEL compute machines to an OpenShift Container Platform cluster","more-rhel-compute",[5786,5787,5788,5789,5790,5791,5792,5793,5794,5795,5796],"rhel-compute-overview_more-rhel-compute","rhel-compute-requirements_more-rhel-compute","csr-management_more-rhel-compute","more-rhel-compute-preparing-image-cloud","rhel-images-aws_more-rhel-compute","rhel-preparing-node_more-rhel-compute","rhel-attaching-instance-aws_more-rhel-compute","rhel-worker-tag_more-rhel-compute","rhel-adding-more-nodes_more-rhel-compute","installation-approve-csrs_more-rhel-compute","rhel-ansible-parameters_more-rhel-compute","/documentation/openshift_container_platform/4.8/html/machine_management/more-rhel-compute",{"title":5799,"visible":10,"weight":888,"urlFragment":5800,"anchor":16,"singlePageAnchor":5800,"subChapters":5801,"url":5820,"docTitle":5656},"User-provisioned infrastructure","user-provisioned-infrastructure-2",[5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,5812,1017,5813,5814,5815,1038,5816,5817,5818,5819],"adding-compute-user-infra-general","upi-adding-compute-aws","upi-adding-compute-azure","upi-adding-compute-gcp","upi-adding-compute-vsphere","upi-adding-compute-bare-metal","adding-aws-compute-user-infra","prerequisites_adding-aws-compute-user-infra","machine-adding-aws-compute-cloudformation_adding-aws-compute-user-infra","installation-approve-csrs_adding-aws-compute-user-infra","adding-vsphere-compute-user-infra","machine-vsphere-machines_adding-vsphere-compute-user-infra","installation-approve-csrs_adding-vsphere-compute-user-infra","adding-bare-metal-compute-user-infra","creating-rhcos-machines-bare-metal","machine-user-infra-machines-iso_adding-bare-metal-compute-user-infra","machine-user-infra-machines-pxe_adding-bare-metal-compute-user-infra","installation-approve-csrs_adding-bare-metal-compute-user-infra","/documentation/openshift_container_platform/4.8/html/machine_management/user-provisioned-infrastructure-2",{"title":5822,"visible":10,"weight":899,"urlFragment":5823,"anchor":16,"singlePageAnchor":5823,"subChapters":5824,"url":5834,"docTitle":5656},"Deploying machine health checks","deploying-machine-health-checks",[5825,5826,5827,5828,4890,4891,5829,5830,5831,5832,5833],"machine-health-checks-about_deploying-machine-health-checks","machine-health-checks-limitations_deploying-machine-health-checks","machine-health-checks-resource_deploying-machine-health-checks","machine-health-checks-short-circuiting_deploying-machine-health-checks","machine-health-checks-creating_deploying-machine-health-checks","mgmt-power-remediation-baremetal-about_deploying-machine-health-checks","machine-health-checks-bare-metal_deploying-machine-health-checks","mgmt-understanding-remediation-process_deploying-machine-health-checks","mgmt-creating-mhc-baremetal_deploying-machine-health-checks","/documentation/openshift_container_platform/4.8/html/machine_management/deploying-machine-health-checks",{"title":5836,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5837,"url":5838,"docTitle":5839,"sections":5840},"Metering",[],"/documentation/openshift_container_platform/4.8/html/metering/index","metering",[5841,5854,5866,5871,5901,5923,5930,5938,5957],{"title":5842,"visible":10,"weight":23,"urlFragment":5843,"anchor":16,"singlePageAnchor":5843,"subChapters":5844,"url":5853,"docTitle":5839},"About Metering","about-metering",[5845,5846,5847,5848,5849,5850,5851,5852],"metering-overview_about-metering","metering-overview-install-metering","metering-overview-upgrade-metering","metering-overview-use-metering","metering-overview-troubleshoot-metering","metering-overview-debug-metering","metering-overview-uninstall-metering","metering-resources_about-metering","/documentation/openshift_container_platform/4.8/html/metering/about-metering",{"title":5855,"visible":10,"weight":35,"urlFragment":5856,"anchor":16,"singlePageAnchor":5856,"subChapters":5857,"url":5865,"docTitle":5839},"Installing metering","installing-metering",[5858,5859,5860,5861,5862,1006,5863,5864],"metering-install-prerequisites_installing-metering","metering-install-operator_installing-metering","metering-install-web-console_installing-metering","metering-install-cli_installing-metering","metering-install-metering-stack_installing-metering","metering-install-verify_installing-metering","metering-install-additional-resources_installing-metering","/documentation/openshift_container_platform/4.8/html/metering/installing-metering",{"title":5867,"visible":10,"weight":46,"urlFragment":5868,"anchor":16,"singlePageAnchor":5868,"subChapters":5869,"url":5870,"docTitle":5839},"Upgrading metering","upgrading-metering",[1017],"/documentation/openshift_container_platform/4.8/html/metering/upgrading-metering",{"title":5872,"visible":10,"weight":68,"urlFragment":5873,"anchor":16,"singlePageAnchor":5873,"subChapters":5874,"url":5900,"docTitle":5839},"Configuring metering","configuring-metering",[5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899],"metering-about-configuring","metering-common-config-options","resource-requests-and-limits","node-selectors","metering-configure-persistent-storage","metering-store-data-in-s3_metering-configure-persistent-storage","metering-store-data-in-s3-compatible_metering-configure-persistent-storage","metering-store-data-in-azure_metering-configure-persistent-storage","metering-store-data-in-gcp_metering-configure-persistent-storage","metering-store-data-in-shared-volumes_metering-configure-persistent-storage","metering-configure-hive-metastore","metering-configure-persistentvolumes_metering-configure-hive-metastore","metering-configure-persistentvolumes-storage-class-hive_metering-configure-hive-metastore","metering-configure-persistentvolumes-volume-size-hive_metering-configure-hive-metastore","metering-use-mysql-or-postgresql-for-hive_metering-configure-hive-metastore","metering-configure-reporting-operator","metering-prometheus-connection_metering-configure-reporting-operator","metering-exposing-the-reporting-api_metering-configure-reporting-operator","metering-openshift-authentication_metering-configure-reporting-operator","metering-authenticate-using-service-account_metering-configure-reporting-operator","metering-authenticate-using-username-password_metering-configure-reporting-operator","metering-manually-configure-authentication_metering-configure-reporting-operator","metering-token-authentication_metering-configure-reporting-operator","metering-basic-authentication_metering-configure-reporting-operator","metering-configure-aws-billing-correlation","/documentation/openshift_container_platform/4.8/html/metering/configuring-metering",{"title":5902,"visible":10,"weight":435,"urlFragment":5903,"anchor":16,"singlePageAnchor":5903,"subChapters":5904,"url":5922,"docTitle":5839},"Reports","reports",[5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921],"metering-about-reports","metering-reports_metering-about-reports","metering-example-report-with-schedule_metering-about-reports","metering-example-report-without-schedule_metering-about-reports","metering-query_metering-about-reports","metering-schedule_metering-about-reports","metering-period_metering-about-reports","metering-reportingStart_metering-about-reports","metering-reportingEnd_metering-about-reports","metering-expiration_metering-about-reports","metering-runImmediately_metering-about-reports","metering-inputs_metering-about-reports","metering-roll-up-reports_metering-about-reports","metering-report-status_metering-about-reports","metering-storage-locations","storage-location-examples","default-storage-location","/documentation/openshift_container_platform/4.8/html/metering/reports",{"title":5924,"visible":10,"weight":453,"urlFragment":5925,"anchor":16,"singlePageAnchor":5925,"subChapters":5926,"url":5929,"docTitle":5839},"Using Metering","using-metering",[1038,5927,5928],"metering-writing-reports_using-metering","metering-viewing-report-results_using-metering","/documentation/openshift_container_platform/4.8/html/metering/using-metering",{"title":5931,"visible":10,"weight":468,"urlFragment":5932,"anchor":16,"singlePageAnchor":5932,"subChapters":5933,"url":5937,"docTitle":5839},"Examples of using metering","metering-usage-examples",[1089,5934,5935,5936],"metering-cluster-capacity-examples_metering-usage-examples","metering-cluster-usage-examples_metering-usage-examples","metering-cluster-utilization-examples_metering-usage-examples","/documentation/openshift_container_platform/4.8/html/metering/metering-usage-examples",{"title":5939,"visible":10,"weight":869,"urlFragment":5940,"anchor":16,"singlePageAnchor":5940,"subChapters":5941,"url":5956,"docTitle":5839},"Troubleshooting and debugging metering","metering-troubleshooting-debugging",[5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955],"metering-troubleshooting_metering-troubleshooting-debugging","metering-not-enough-compute-resources_metering-troubleshooting-debugging","metering-storageclass-not-configured_metering-troubleshooting-debugging","metering-secret-not-configured-correctly_metering-troubleshooting-debugging","metering-debugging_metering-troubleshooting-debugging","metering-get-reporting-operator-logs_metering-troubleshooting-debugging","metering-query-presto-using-presto-cli_metering-troubleshooting-debugging","metering-query-hive-using-beeline_metering-troubleshooting-debugging","metering-port-forward-hive-web-ui_metering-troubleshooting-debugging","metering-port-forward-hdfs_metering-troubleshooting-debugging","metering-ansible-operator_metering-troubleshooting-debugging","metering-accessing-ansible-logs_metering-troubleshooting-debugging","metering-checking-meteringconfig-status_metering-troubleshooting-debugging","metering-checking-meteringconfig-events_metering-troubleshooting-debugging","/documentation/openshift_container_platform/4.8/html/metering/metering-troubleshooting-debugging",{"title":5958,"visible":10,"weight":877,"urlFragment":5959,"anchor":16,"singlePageAnchor":5959,"subChapters":5960,"url":5964,"docTitle":5839},"Uninstalling metering","metering-uninstall",[5961,5962,5963],"metering-remove","metering-uninstall_metering-uninstall","metering-uninstall-crds_metering-uninstall","/documentation/openshift_container_platform/4.8/html/metering/metering-uninstall",{"title":5966,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5967,"url":5968,"docTitle":5969,"sections":5970},"Web console",[],"/documentation/openshift_container_platform/4.8/html/web_console/index","web_console",[5971,5980,5986,5992,5998,6013,6023,6029],{"title":5972,"visible":10,"weight":23,"urlFragment":5973,"anchor":16,"singlePageAnchor":5973,"subChapters":5974,"url":5979,"docTitle":5969},"Web Console Overview","web-console-overview",[5975,5976,5977,5978],"about-administrator-perspective_web-console-overview","accessing-the-administrator-perspective_web-console-overview","about-developer-perspective_web-console-overview","accessing-developer-perspective_web-console-overview","/documentation/openshift_container_platform/4.8/html/web_console/web-console-overview",{"title":5981,"visible":10,"weight":35,"urlFragment":5982,"anchor":16,"singlePageAnchor":5982,"subChapters":5983,"url":5985,"docTitle":5969},"Accessing the web console","web-console",[1006,5984],"web-console-overview_web-console","/documentation/openshift_container_platform/4.8/html/web_console/web-console",{"title":5987,"visible":10,"weight":46,"urlFragment":5988,"anchor":16,"singlePageAnchor":5988,"subChapters":5989,"url":5991,"docTitle":5969},"Using the OpenShift Container Platform dashboard to get cluster information","using-dashboard-to-get-cluster-info",[5990],"virt-about-the-overview-dashboard_using-dashboard-to-get-cluster-info","/documentation/openshift_container_platform/4.8/html/web_console/using-dashboard-to-get-cluster-info",{"title":5993,"visible":10,"weight":68,"urlFragment":5994,"anchor":16,"singlePageAnchor":5994,"subChapters":5995,"url":5997,"docTitle":5969},"Configuring the web console in OpenShift Container Platform","configuring-web-console",[1017,5996],"web-console-configuration_configuring-web-console","/documentation/openshift_container_platform/4.8/html/web_console/configuring-web-console",{"title":5999,"visible":10,"weight":435,"urlFragment":6000,"anchor":16,"singlePageAnchor":6000,"subChapters":6001,"url":6012,"docTitle":5969},"Customizing the web console in OpenShift Container Platform","customizing-web-console",[6002,6003,6004,6005,6006,6007,6008,6009,6010,6011],"adding-a-custom-logo_customizing-web-console","creating-custom-links_customizing-web-console","customizing-the-web-console-url_customizing-web-console","customizing-the-console-route_customizing-web-console","customizing-the-download-route_customizing-web-console","customizing-the-login-page_customizing-web-console","defining-template-for-external-log-links_customizing-web-console","creating-custom-notification-banners_customizing-web-console","creating-custom-CLI-downloads_customizing-web-console","adding-yaml-examples-to-kube-resources_customizing-web-console","/documentation/openshift_container_platform/4.8/html/web_console/customizing-web-console",{"title":6014,"visible":10,"weight":453,"urlFragment":6015,"anchor":16,"singlePageAnchor":6015,"subChapters":6016,"url":6022,"docTitle":5969},"About the web terminal in the web console","odc-about-web-terminal",[6017,6018,6019,6020,6021],"odc-installing-web-terminal_odc-about-web-terminal","odc-using-web-terminal_odc-about-web-terminal","odc-uninstalling-web-terminal_odc-about-web-terminal","removing-the-web-terminal-operator-and-the-custom-resources-that-support-it","deleting-the-devworkspace-operator-dependency","/documentation/openshift_container_platform/4.8/html/web_console/odc-about-web-terminal",{"title":6024,"visible":10,"weight":468,"urlFragment":6025,"anchor":16,"singlePageAnchor":6025,"subChapters":6026,"url":6028,"docTitle":5969},"Disabling the web console in OpenShift Container Platform","disabling-web-console",[1038,6027],"web-console-disable_disabling-web-console","/documentation/openshift_container_platform/4.8/html/web_console/disabling-web-console",{"title":6030,"visible":10,"weight":869,"urlFragment":6031,"anchor":16,"singlePageAnchor":6031,"subChapters":6032,"url":6065,"docTitle":5969},"Creating quick start tutorials in the web console","creating-quick-start-tutorials",[6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064],"understanding-quick-starts_creating-quick-start-tutorials","quick-start-user-workflow_creating-quick-start-tutorials","quick-start-components_creating-quick-start-tutorials","contributing-quick-starts_creating-quick-start-tutorials","viewing-quick-start-api-documentation_creating-quick-start-tutorials","understanding-quick-start-elements_creating-quick-start-tutorials","conclusion-quick-start-element_creating-quick-start-tutorials","description-quick-start-element_creating-quick-start-tutorials","displayName-quick-start-element_creating-quick-start-tutorials","duration-minutes-quick-start-element_creating-quick-start-tutorials","icon-quick-start-element_creating-quick-start-tutorials","introduction-quick-start-element_creating-quick-start-tutorials","adding-custom-icon-to-quick-start_creating-quick-start-tutorials","limiting-access-to-quick-starts_creating-quick-start-tutorials","linking-to-other-quick-starts_creating-quick-start-tutorials","supported-tags-for-quick-starts_creating-quick-start-tutorials","quick-start-highlighting-reference_creating-quick-start-tutorials","quick-start-highlighting-perspective-switcher_creating-quick-start-tutorials","quick-start-highlighting-admin-perspective_creating-quick-start-tutorials","quick-start-highlighting-dev-perspective_creating-quick-start-tutorials","quick-start-highlighting-common-nav_creating-quick-start-tutorials","quick-start-highlighting-masthead-links_creating-quick-start-tutorials","quick-starts-accessing-and-executing-code-snippets_creating-quick-start-tutorials","quick-starts-syntax-for-inline-code-snippets_creating-quick-start-tutorials","quick-starts-syntax-for-multi-line-code-snippets_creating-quick-start-tutorials","quick-start-content-guidelines_creating-quick-start-tutorials","quick-start-content-guidelines-card-copy_creating-quick-start-tutorials","quick-start-content-guidelines-introduction_creating-quick-start-tutorials","quick-start-content-guidelines-task-steps_creating-quick-start-tutorials","quick-start-content-guidelines-check-your-work-module_creating-quick-start-tutorials","quick-start-content-guidelines-formatting-UI-elements_creating-quick-start-tutorials","quick-start-tutorials-additional-resources","/documentation/openshift_container_platform/4.8/html/web_console/creating-quick-start-tutorials",{"title":6067,"visible":10,"categoryName":10,"sections":6068},"Reference",[6069],{"title":6070,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":6071,"url":6072,"docTitle":6073,"sections":6074},"CLI tools",[],"/documentation/openshift_container_platform/4.8/html/cli_tools/index","cli_tools",[6075,6081,6326,6409,6416,6507,6515],{"title":6076,"visible":10,"weight":23,"urlFragment":6077,"anchor":16,"singlePageAnchor":6077,"subChapters":6078,"url":6080,"docTitle":6073},"OpenShift Container Platform CLI tools overview","cli-tools-overview",[6079],"cli-tools-list","/documentation/openshift_container_platform/4.8/html/cli_tools/cli-tools-overview",{"title":6082,"visible":10,"weight":35,"urlFragment":6083,"anchor":16,"singlePageAnchor":6083,"subChapters":6084,"url":6325,"docTitle":6073},"OpenShift CLI (oc)","openshift-cli-oc",[6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180,6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212,6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259,6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287,6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317,6318,6319,6320,6321,6322,6323,6324],"cli-getting-started","cli-about-cli_cli-developer-commands","installing-openshift-cli","cli-installing-cli_cli-developer-commands","cli-installing-cli-web-console_cli-developer-commands","cli-installing-cli-web-console-macos-linux_cli-developer-commands","cli-installing-cli-web-console-macos-windows_cli-developer-commands","cli-installing-cli-web-console-macos_cli-developer-commands","cli-installing-cli-rpm_cli-developer-commands","cli-installing-cli-brew_cli-developer-commands","cli-logging-in_cli-developer-commands","cli-using-cli_cli-developer-commands","creating-a-project","creating-a-new-app","viewing-pods","viewing-pod-logs","viewing-the-current-project","viewing-the-status-for-the-current-project","listing-supported-api-resources","cli-getting-help_cli-developer-commands","cli-logging-out_cli-developer-commands","cli-configuring-cli","cli-enabling-tab-completion","cli-enabling-tab-completion_cli-configuring-cli","cli-enabling-tab-completion-zsh_cli-configuring-cli","managing-cli-profiles","about-switches-between-cli-profiles_managing-cli-profiles","manual-configuration-of-cli-profiles_managing-cli-profiles","load-and-merge-rules_managing-cli-profiles","cli-extend-plugins","cli-writing-plugins_cli-extend-plugins","cli-installing-plugins_cli-extend-plugins","cli-developer-commands","openshift-cli-developer_cli-developer-commands","oc-annotate","oc-api-resources","oc-api-versions","oc-apply","oc-apply-edit-last-applied","oc-apply-set-last-applied","oc-apply-view-last-applied","oc-attach","oc-auth-can-i","oc-auth-reconcile","oc-autoscale","oc-cancel-build","oc-cluster-info","oc-cluster-info-dump","oc-completion","oc-config-current-context","oc-config-delete-cluster","oc-config-delete-context","oc-config-delete-user","oc-config-get-clusters","oc-config-get-contexts","oc-config-get-users","oc-config-rename-context","oc-config-set","oc-config-set-cluster","oc-config-set-context","oc-config-set-credentials","oc-config-unset","oc-config-use-context","oc-config-view","oc-cp","oc-create","oc-create-build","oc-create-clusterresourcequota","oc-create-clusterrole","oc-create-clusterrolebinding","oc-create-configmap","oc-create-cronjob","oc-create-deployment","oc-create-deploymentconfig","oc-create-identity","oc-create-imagestream","oc-create-imagestreamtag","oc-create-ingress","oc-create-job","oc-create-namespace","oc-create-poddisruptionbudget","oc-create-priorityclass","oc-create-quota","oc-create-role","oc-create-rolebinding","oc-create-route-edge","oc-create-route-passthrough","oc-create-route-reencrypt","oc-create-secret-docker-registry","oc-create-secret-generic","oc-create-secret-tls","oc-create-service-clusterip","oc-create-service-externalname","oc-create-service-loadbalancer","oc-create-service-nodeport","oc-create-serviceaccount","oc-create-user","oc-create-useridentitymapping","oc-debug","oc-delete","oc-describe","oc-diff","oc-edit","oc-ex-dockergc","oc-exec","oc-explain","oc-expose","oc-extract","oc-get","oc-idle","oc-image-append","oc-image-extract","oc-image-info","oc-image-mirror","oc-import-image","oc-kustomize","oc-label","oc-login","oc-logout","oc-logs","oc-new-app","oc-new-build","oc-new-project","oc-observe","oc-patch","oc-policy-add-role-to-user","oc-policy-scc-review","oc-policy-scc-subject-review","oc-port-forward","oc-process","oc-project","oc-projects","oc-proxy","oc-registry-info","oc-registry-login","oc-replace","oc-rollback","oc-rollout-cancel","oc-rollout-history","oc-rollout-latest","oc-rollout-pause","oc-rollout-restart","oc-rollout-resume","oc-rollout-retry","oc-rollout-status","oc-rollout-undo","oc-rsh","oc-rsync","oc-run","oc-scale","oc-secrets-link","oc-secrets-unlink","oc-serviceaccounts-create-kubeconfig","oc-serviceaccounts-get-token","oc-serviceaccounts-new-token","oc-set-build-hook","oc-set-build-secret","oc-set-data","oc-set-deployment-hook","oc-set-env","oc-set-image","oc-set-image-lookup","oc-set-probe","oc-set-resources","oc-set-route-backends","oc-set-selector","oc-set-serviceaccount","oc-set-subject","oc-set-triggers","oc-set-volumes","oc-start-build","oc-status","oc-tag","oc-version","oc-wait","oc-whoami","additional-resources_cli-developer-commands","cli-administrator-commands","openshift-cli-admin_cli-administrator-commands","oc-adm-build-chain","oc-adm-catalog-mirror","oc-adm-completion","oc-adm-config-current-context","oc-adm-config-delete-cluster","oc-adm-config-delete-context","oc-adm-config-delete-user","oc-adm-config-get-clusters","oc-adm-config-get-contexts","oc-adm-config-get-users","oc-adm-config-rename-context","oc-adm-config-set","oc-adm-config-set-cluster","oc-adm-config-set-context","oc-adm-config-set-credentials","oc-adm-config-unset","oc-adm-config-use-context","oc-adm-config-view","oc-adm-cordon","oc-adm-create-bootstrap-project-template","oc-adm-create-error-template","oc-adm-create-login-template","oc-adm-create-provider-selection-template","oc-adm-drain","oc-adm-groups-add-users","oc-adm-groups-new","oc-adm-groups-prune","oc-adm-groups-remove-users","oc-adm-groups-sync","oc-adm-inspect","oc-adm-migrate-template-instances","oc-adm-must-gather","oc-adm-new-project","oc-adm-node-logs","oc-adm-pod-network-isolate-projects","oc-adm-pod-network-join-projects","oc-adm-pod-network-make-projects-global","oc-adm-policy-add-role-to-user","oc-adm-policy-add-scc-to-group","oc-adm-policy-add-scc-to-user","oc-adm-policy-scc-review","oc-adm-policy-scc-subject-review","oc-adm-prune-builds","oc-adm-prune-deployments","oc-adm-prune-groups","oc-adm-prune-images","oc-adm-release-extract","oc-adm-release-info","oc-adm-release-mirror","oc-adm-release-new","oc-adm-taint","oc-adm-top-images","oc-adm-top-imagestreams","oc-adm-top-node","oc-adm-top-pod","oc-adm-uncordon","oc-adm-verify-image-signature","additional-resources_cli-administrator-commands","usage-oc-kubectl","the-oc-binary","the-kubectl-binary","/documentation/openshift_container_platform/4.8/html/cli_tools/openshift-cli-oc",{"title":6327,"visible":10,"weight":46,"urlFragment":6328,"anchor":16,"singlePageAnchor":6328,"subChapters":6329,"url":6408,"docTitle":6073},"Developer CLI (odo)","developer-cli-odo",[6330,6331,6332,6333,6334,6335,6336,6337,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349,6350,6351,6352,6353,6354,6355,6356,617,6357,6358,6359,6360,6361,6362,6363,6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407],"odo-release-notes","odo-notable-improvements_odo-release-notes","odo-fixed-issues_odo-release-notes","odo-getting-support_odo-release-notes","understanding-odo","odo-features_understanding-odo","odo-core-concepts_understanding-odo","odo-listing-components_understanding-odo","odo-telemetry_understanding-odo","installing-odo","installing-odo-on-linux_installing-odo","installing-odo-on-windows_installing-odo","installing-odo-on-macos_installing-odo","installing-odo-on-vs-code_installing-odo","installing-odo-on-linux-rpm_installing-odo","configuring-the-odo-cli","developer-cli-odo-view-config_configuring-the-odo-cli","developer-cli-odo-set-config_configuring-the-odo-cli","developer-cli-odo-unset-config_configuring-the-odo-cli","developer-cli-odo-preference-table_configuring-the-odo-cli","ignoring-files-or-patterns_configuring-the-odo-cli","odo-cli-reference","odo-build-images_odo-cli-reference","odo-catalog_odo-cli-reference","components","listing-components","getting-information-about-a-component","listing-services","searching-services","getting-information-about-a-service","odo-create_odo-cli-reference","creating-a-component","starter-projects","using-an-existing-devfile","interactive-creation","odo-delete_odo-cli-reference","deleting-a-component","undeploying-devfile-kubernetes-components","delete-all","available-flags","odo-deploy_odo-cli-reference","odo-link_odo-cli-reference","various-linking-options","default-behavior","the-literal-inlined-literal-flag","the-literal-map-literal-flag","the-literal-bind-as-files-literal-flag","examples","default-literal-odo-link-literal","using-odo-link-with-the-inlined-flag","custom-bindings","to-inline-or-not","binding-as-files","bind-as-files-examples","using-the-default-odo-link","using-literal-inlined-literal","custom-bindings-2","odo-registry_odo-cli-reference","listing-the-registries","adding-a-registry","deleting-a-registry","updating-a-registry","odo-service_odo-cli-reference","creating-a-new-service","inlining-the-manifest","configuring-the-service","using-command-line-arguments","using-a-file","deleting-a-service","listing-services-2","getting-information-about-a-service-2","odo-storage_odo-cli-reference","adding-a-storage-volume","listing-the-storage-volumes","deleting-a-storage-volume","adding-storage-to-specific-container","odo-flags_odo-cli-reference","odo-json-output_odo-cli-reference","/documentation/openshift_container_platform/4.8/html/cli_tools/developer-cli-odo",{"title":6410,"visible":10,"weight":68,"urlFragment":6411,"anchor":16,"singlePageAnchor":6411,"subChapters":6412,"url":6415,"docTitle":6073},"Knative CLI for use with OpenShift Serverless","kn-cli-tools",[6413,6414],"kn-cli-tools-key-features","kn-cli-tools-installing-kn","/documentation/openshift_container_platform/4.8/html/cli_tools/kn-cli-tools",{"title":6417,"visible":10,"weight":435,"urlFragment":6418,"anchor":16,"singlePageAnchor":6418,"subChapters":6419,"url":6506,"docTitle":6073},"Pipelines CLI (tkn)","pipelines-cli-tkn",[6420,6421,6422,6423,6424,6425,6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456,6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,6504,6505],"installing-tkn","installing-tkn-on-linux","installing-tkn-on-linux-using-rpm","installing-tkn-on-windows","installing-tkn-on-macos","op-configuring-tkn","op-tkn-enabling-tab-completion_configuring-tkn","op-tkn-reference","basic-syntax","global-options","op-tkn-utility-commands_op-tkn-reference","tkn","completion-shell","version","op-tkn-pipeline-management_op-tkn-reference","pipeline","pipeline-delete","pipeline-describe","pipeline-list","pipeline-logs","pipeline-start","op-tkn-pipeline-run_op-tkn-reference","pipelinerun","pipelinerun-cancel","pipelinerun-delete","pipelinerun-describe","pipelinerun-list","pipelinerun-logs","op-tkn-task-management_op-tkn-reference","task","task-delete","task-describe","task-list","task-logs","task-start","op-tkn-task-run_op-tkn-reference","taskrun","taskrun-cancel","taskrun-delete","taskrun-describe","taskrun-list","taskrun-logs","op-tkn-condition-management_op-tkn-reference","condition","condition-delete","condition-describe","condition-list","op-tkn-pipeline-resource-management_op-tkn-reference","resource","resource-create","resource-delete","resource-describe","resource-list","op-tkn-clustertask-management-commands_op-tkn-reference","clustertask","clustertask-delete","clustertask-describe","clustertask-list","clustertask-start","op-tkn-trigger-management_op-tkn-reference","eventlistener","eventlistener-delete","eventlistener-describe","eventlistener-list","eventlistener-logs","triggerbinding","triggerbinding-delete","triggerbinding-describe","triggerbinding-list","triggertemplate","triggertemplate-delete","triggertemplate-describe","triggertemplate-list","clustertriggerbinding","clustertriggerbinding-delete","clustertriggerbinding-describe","clustertriggerbinding-list","op-tkn-hub-interaction_op-tkn-reference","hub","hub-downgrade","hub-get","hub-info","hub-install","hub-reinstall","hub-search","hub-upgrade","/documentation/openshift_container_platform/4.8/html/cli_tools/pipelines-cli-tkn",{"title":6508,"visible":10,"weight":453,"urlFragment":6509,"anchor":16,"singlePageAnchor":6509,"subChapters":6510,"url":6514,"docTitle":6073},"opm CLI","opm-cli",[6511,6512,6513],"olm-about-opm_opm-cli","olm-installing-opm_opm-cli","opm-addtl-resources","/documentation/openshift_container_platform/4.8/html/cli_tools/opm-cli",{"title":6516,"visible":10,"weight":468,"urlFragment":6517,"anchor":16,"singlePageAnchor":6517,"subChapters":6518,"url":6537,"docTitle":6073},"Operator SDK","operator-sdk",[6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535,6536],"cli-osdk-install","osdk-installing-cli-linux-macos_cli-osdk-install","cli-osdk-ref","osdk-cli-ref-bundle_cli-osdk-ref","osdk-cli-ref-bundle-validate_cli-osdk-ref","osdk-cli-ref-cleanup_cli-osdk-ref","osdk-cli-ref-completion_cli-osdk-ref","osdk-cli-ref-create_cli-osdk-ref","osdk-cli-ref-create-api_cli-osdk-ref","osdk-cli-ref-generate_cli-osdk-ref","osdk-cli-ref-generate-bundle_cli-osdk-ref","osdk-cli-ref-generate-kustomize_cli-osdk-ref","osdk-cli-ref-generate-kustomize-manifests_cli-osdk-ref","osdk-cli-ref-init_cli-osdk-ref","osdk-cli-ref-run_cli-osdk-ref","osdk-cli-ref-run-bundle_cli-osdk-ref","osdk-cli-ref-run-bundle-upgrade_cli-osdk-ref","osdk-cli-ref-scorecard_cli-osdk-ref","/documentation/openshift_container_platform/4.8/html/cli_tools/operator-sdk",{"title":6539,"visible":10,"categoryName":10,"sections":6540},"Develop",[6541,6811,7226,7434,7815,7877],{"title":6542,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":6543,"url":6544,"docTitle":6545,"sections":6546},"Building Applications",[],"/documentation/openshift_container_platform/4.8/html/building_applications/index","building_applications",[6547,6558,6584,6621,6637,6663,6715,6735,6745,6752,6763,6770,6787,6796,6802],{"title":6548,"visible":10,"weight":23,"urlFragment":6549,"anchor":16,"singlePageAnchor":6549,"subChapters":6550,"url":6557,"docTitle":6545},"Building applications overview","building-applications-overview",[6551,6552,6553,6554,6555,6556],"working-on-a-project","working-on-application","creating-application","maintaining-application","deploying-application","redhat-marketplace","/documentation/openshift_container_platform/4.8/html/building_applications/building-applications-overview",{"title":6559,"visible":10,"weight":35,"urlFragment":6560,"anchor":16,"singlePageAnchor":6560,"subChapters":6561,"url":6583,"docTitle":6545},"Projects","projects",[6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581,6582],"working-with-projects","creating-a-project-using-the-web-console_projects","odc-creating-projects-using-developer-perspective_projects","creating-a-project-using-the-CLI_projects","viewing-a-project-using-the-web-console_projects","viewing-a-project-using-the-CLI_projects","odc-providing-project-permissions-using-developer-perspective_projects","odc-customizing-available-cluster-roles-using-developer-perspective_projects","adding-to-a-project_projects","checking-project-status-using-the-web-console_projects","checking-project-status-using-the-CLI_projects","deleting-a-project-using-the-web-console_projects","deleting-a-project-using-the-CLI_projects","creating-project-other-user","authentication-api-impersonation_creating-project-other-user","impersonation-project-creation_creating-project-other-user","configuring-project-creation","about-project-creation_configuring-project-creation","modifying-template-for-new-projects_configuring-project-creation","disabling-project-self-provisioning_configuring-project-creation","customizing-project-request-message_configuring-project-creation","/documentation/openshift_container_platform/4.8/html/building_applications/projects",{"title":6585,"visible":10,"weight":46,"urlFragment":6586,"anchor":16,"singlePageAnchor":6586,"subChapters":6587,"url":6620,"docTitle":6545},"Creating Applications","creating-applications",[6588,6589,6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613,6614,6615,6616,6617,6618,6619],"odc-creating-applications-using-developer-perspective","prerequisites_odc-creating-applications-using-developer-perspective","odc-creating-sample-applications_odc-creating-applications-using-developer-perspective","odc-using-quickstarts_odc-creating-applications-using-developer-perspective","odc-importing-codebase-from-git-to-create-application_odc-creating-applications-using-developer-perspective","odc-deploying-java-applications_odc-creating-applications-using-developer-perspective","odc-using-the-developer-catalog-to-add-services-or-components_odc-creating-applications-using-developer-perspective","additional-resources_odc-creating-applications-using-developer-perspective","creating-apps-from-installed-operators","olm-creating-etcd-cluster-from-operator_creating-apps-from-installed-operators","creating-applications-using-cli","applications-create-using-cli-source-code_creating-applications-using-cli","local","remote","build-strategy-detection","language-detection","applications-create-using-cli-image_creating-applications-using-cli","docker-hub-mysql-image","image-in-a-private-registry","existing-image-stream-and-optional-image-stream-tag","applications-create-using-cli-template_creating-applications-using-cli","template-parameters","applications-create-using-cli-modify_creating-applications-using-cli","specifying-environment-variables","specifying-build-environment-variables","specifying-labels","viewing-the-output-without-creation","creating-objects-with-different-names","creating-objects-in-a-different-project","creating-multiple-objects","grouping-images-and-source-in-a-single-pod","searching-for-images-templates-and-other-inputs","/documentation/openshift_container_platform/4.8/html/building_applications/creating-applications",{"title":6622,"visible":10,"weight":68,"urlFragment":6623,"anchor":16,"singlePageAnchor":6623,"subChapters":6624,"url":6636,"docTitle":6545},"Viewing application composition using the Topology view","odc-viewing-application-composition-using-topology-view",[1006,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,6635,1546],"odc-viewing-application-topology_viewing-application-composition-using-topology-view","odc-interacting-with-applications-and-components_viewing-application-composition-using-topology-view","odc-scaling-application-pods-and-checking-builds-and-routes_viewing-application-composition-using-topology-view","odc-adding-components-to-an-existing-project_viewing-application-composition-using-topology-view","odc-grouping-multiple-components_viewing-application-composition-using-topology-view","odc-adding-services-to-your-application_viewing-application-composition-using-topology-view","odc-removing-services-from-your-application_viewing-application-composition-using-topology-view","odc-connecting-components_viewing-application-composition-using-topology-view","creating-a-visual-connection-between-components","creating-a-binding-connection-between-components","odc-labels-and-annotations-used-for-topology-view_viewing-application-composition-using-topology-view","/documentation/openshift_container_platform/4.8/html/building_applications/odc-viewing-application-composition-using-topology-view",{"title":6638,"visible":10,"weight":435,"urlFragment":6639,"anchor":16,"singlePageAnchor":6639,"subChapters":6640,"url":6662,"docTitle":6545},"Working with Helm charts","working-with-helm-charts",[6641,6642,6643,1598,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,1017,6659,6660,6661],"understanding-helm","key-features","red-hat-certification-of-helm-charts-for-openshift","installing-helm","on-linux","on-windows-7-8","on-windows-10","on-macos","configuring-custom-helm-chart-repositories","installing-a-helm-chart-on-an-openshift-cluster_configuring-custom-helm-chart-repositories","odc-installing-helm-charts-using-developer-perspective_configuring-custom-helm-chart-repositories","using-helm-in-the-web-terminal","creating-a-custom-helm-chart-on-openshift_configuring-custom-helm-chart-repositories","adding-helm-chart-repositories_configuring-custom-helm-chart-repositories","creating-credentials-and-certificates-to-add-helm-repositories_configuring-custom-helm-chart-repositories","filtering-helm-charts-by-certification-level_configuring-custom-helm-chart-repositories","helm-disabling-helm-chart-repositories_configuring-custom-helm-chart-repositories","odc-working-with-helm-releases","odc-upgrading-helm-release_working-with-helm-releases","odc-rolling-back-helm-release_working-with-helm-releases","odc-uninstalling-helm-release_working-with-helm-releases","/documentation/openshift_container_platform/4.8/html/building_applications/working-with-helm-charts",{"title":6664,"visible":10,"weight":453,"urlFragment":6665,"anchor":16,"singlePageAnchor":6665,"subChapters":6666,"url":6714,"docTitle":6545},"Deployments","deployments",[6667,6668,6669,6670,6671,6672,6673,6674,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713],"what-deployments-are","what-deployments-are-build-blocks","deployments-replicationcontrollers_what-deployments-are","deployments-repliasets_what-deployments-are","deployments-and-deploymentconfigs_what-deployments-are","deployments-kube-deployments_what-deployments-are","deployments-comparing-deploymentconfigs_what-deployments-are","deployments-design_what-deployments-are","delpoymentconfigs-specific-features_what-deployments-are","delpoyments-specific-features_what-deployments-are","deployment-operations","deploymentconfig-operations","deployments-starting-a-deployment_deployment-operations","deployments-viewing-a-deployment_deployment-operations","deployments-retrying-deployment_deployment-operations","deployments-rolling-back_deployment-operations","deployments-exe-cmd-in-container_deployment-operations","deployments-viewing-logs_deployment-operations","deployments-triggers_deployment-operations","deployments-setting-triggers_deployment-operations","deployments-setting-resources_deployment-operations","deployments-scaling-manually_deployment-operations","deployments-accessing-private-repos_deployment-operations","deployments-assigning-pods-to-nodes_deployment-operations","deployments-running-pod-svc-acct_deployment-operations","deployment-strategies","deployments-rolling-strategy_deployment-strategies","deployments-canary-deployments_deployment-strategies","deployments-creating-rolling-deployment_deployment-strategies","odc-starting-rolling-deployment_deployment-strategies","deployments-recreate-strategy_deployment-strategies","odc-starting-recreate-deployment_deployment-strategies","deployments-custom-strategy_deployment-strategies","deployments-lifecycle-hooks_deployment-strategies","deployments-setting-lifecycle-hooks_deployment-strategies","route-based-deployment-strategies","deployments-proxy-shard_route-based-deployment-strategies","deployments-n1-compatibility_route-based-deployment-strategies","deployments-graceful-termination_route-based-deployment-strategies","deployments-blue-green_route-based-deployment-strategies","deployments-blue-green-setting-up_route-based-deployment-strategies","deployments-ab-testing_route-based-deployment-strategies","deployments-ab-testing-lb_route-based-deployment-strategies","deployments-ab-testing-lb-web_route-based-deployment-strategies","deployments-ab-testing-lb-web-new-route_route-based-deployment-strategies","deployments-ab-testing-lb-cli_route-based-deployment-strategies","deployments-ab-one-service-multi-dc_route-based-deployment-strategies","/documentation/openshift_container_platform/4.8/html/building_applications/deployments",{"title":6716,"visible":10,"weight":468,"urlFragment":6717,"anchor":16,"singlePageAnchor":6717,"subChapters":6718,"url":6734,"docTitle":6545},"Quotas","quotas",[6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732,6733],"quotas-setting-per-project","quotas-resources-managed_quotas-setting-per-project","quotas-scopes_quotas-setting-per-project","quota-enforcement_quotas-setting-per-project","quotas-requests-vs-limits_quotas-setting-per-project","quotas-sample-resource-quota-definitions_quotas-setting-per-project","quotas-creating-a-quota_quotas-setting-per-project","quota-creating-object-count-quotas_quotas-setting-per-project","setting-resource-quota-for-extended-resources_quotas-setting-per-project","quota-viewing-quotas_quotas-setting-per-project","configuring-explicit-resource-quotas_quotas-setting-per-project","setting-quotas-across-multiple-projects","quotas-setting-projects_setting-quotas-across-multiple-projects","quotas-viewing-clusterresourcequotas_setting-quotas-across-multiple-projects","quotas-selection-granularity_setting-quotas-across-multiple-projects","/documentation/openshift_container_platform/4.8/html/building_applications/quotas",{"title":6736,"visible":10,"weight":869,"urlFragment":6737,"anchor":16,"singlePageAnchor":6737,"subChapters":6738,"url":6744,"docTitle":6545},"Using config maps with applications","config-maps",[6739,6740,6741,6742,6743],"nodes-pods-configmap-overview_config-maps","nodes-pods-config-maps-consuming-configmap-in-pods","nodes-pods-configmaps-use-case-consuming-in-env-vars_config-maps","nodes-pods-configmaps-use-case-setting-command-line-arguments_config-maps","nodes-pods-configmaps-use-case-consuming-in-volumes_config-maps","/documentation/openshift_container_platform/4.8/html/building_applications/config-maps",{"title":6746,"visible":10,"weight":877,"urlFragment":6747,"anchor":16,"singlePageAnchor":6747,"subChapters":6748,"url":6751,"docTitle":6545},"Monitoring project and application metrics using the Developer perspective","odc-monitoring-project-and-application-metrics-using-developer-perspective",[1038,6749,6750,1626],"odc-monitoring-your-project-metrics_monitoring-project-and-application-metrics-using-developer-perspective","odc-monitoring-your-application-metrics_monitoring-project-and-application-metrics-using-developer-perspective","/documentation/openshift_container_platform/4.8/html/building_applications/odc-monitoring-project-and-application-metrics-using-developer-perspective",{"title":6753,"visible":10,"weight":888,"urlFragment":6754,"anchor":16,"singlePageAnchor":6754,"subChapters":6755,"url":6762,"docTitle":6545},"Monitoring application health by using health checks","application-health",[6756,6757,6758,6759,6760,6761],"application-health-about_application-health","application-health-configuring_application-health","odc-monitoring-application-health-using-developer-perspective","odc-adding-health-checks","odc-editing-health-checks","odc-monitoring-health-checks","/documentation/openshift_container_platform/4.8/html/building_applications/application-health",{"title":6764,"visible":10,"weight":899,"urlFragment":6765,"anchor":16,"singlePageAnchor":6765,"subChapters":6766,"url":6769,"docTitle":6545},"Editing applications","odc-editing-applications",[1089,6767,6768],"odc-editing-source-code-using-developer-perspective_odc-editing-applications","odc-editing-application-configuration-using-developer-perspective_odc-editing-applications","/documentation/openshift_container_platform/4.8/html/building_applications/odc-editing-applications",{"title":6771,"visible":10,"weight":906,"urlFragment":6772,"anchor":16,"singlePageAnchor":6772,"subChapters":6773,"url":6786,"docTitle":6545},"Pruning objects to reclaim resources","pruning-objects",[6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785],"pruning-basic-operations_pruning-objects","pruning-groups_pruning-objects","pruning-deployments_pruning-objects","pruning-builds_pruning-objects","pruning-images_pruning-objects","pruning-images-manual_pruning-objects","pruning-images-conditions_pruning-objects","pruning-images-running-operation_pruning-objects","pruning-images-secure-insecure_pruning-objects","pruning-images-problems_pruning-objects","pruning-hard-pruning-registry_pruning-objects","pruning-cronjobs_pruning-objects","/documentation/openshift_container_platform/4.8/html/building_applications/pruning-objects",{"title":6788,"visible":10,"weight":915,"urlFragment":6789,"anchor":16,"singlePageAnchor":6789,"subChapters":6790,"url":6795,"docTitle":6545},"Idling applications","idling-applications",[6791,6792,6793,6794],"idle-idling-applications_idling-applications","idle-idling-applications-single_idling-applications","idle-idling-applications-multiple_idling-applications","idle-unidling-applications_idling-applications","/documentation/openshift_container_platform/4.8/html/building_applications/idling-applications",{"title":6797,"visible":10,"weight":2799,"urlFragment":6798,"anchor":16,"singlePageAnchor":6798,"subChapters":6799,"url":6801,"docTitle":6545},"Deleting applications","odc-deleting-applications",[6800],"odc-deleting-applications-using-developer-perspective_odc-deleting-applications","/documentation/openshift_container_platform/4.8/html/building_applications/odc-deleting-applications",{"title":6803,"visible":10,"weight":3064,"urlFragment":6804,"anchor":16,"singlePageAnchor":6804,"subChapters":6805,"url":6810,"docTitle":6545},"Using the Red Hat Marketplace","red-hat-marketplace",[6806,6807,6808,6809],"red-hat-marketplace-features_red-hat-marketplace","marketplace-clusters_red-hat-marketplace","marketplace-install-applications_red-hat-marketplace","marketplace-deploy_red-hat-marketplace","/documentation/openshift_container_platform/4.8/html/building_applications/red-hat-marketplace",{"title":6812,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":6813,"url":6814,"docTitle":6815,"sections":6816},"CI/CD",[],"/documentation/openshift_container_platform/4.8/html/cicd/index","cicd",[6817,6826,6976,6992,7101],{"title":6818,"visible":10,"weight":23,"urlFragment":6819,"anchor":16,"singlePageAnchor":6819,"subChapters":6820,"url":6825,"docTitle":6815},"OpenShift Container Platform CI/CD overview","ci-cd-overview",[6821,6822,6823,6824],"openshift-builds","openshift-pipelines","openshift-gitops","jenkins-ci-cd","/documentation/openshift_container_platform/4.8/html/cicd/ci-cd-overview",{"title":6827,"visible":10,"weight":35,"urlFragment":6828,"anchor":16,"singlePageAnchor":6828,"subChapters":6829,"url":6975,"docTitle":6815},"Builds","builds",[6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,6905,6906,6907,6908,6909,6910,6911,6912,6913,1006,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934,6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950,6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,1546,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,6974,1598],"understanding-image-builds","builds-about_understanding-image-builds","builds-strategy-docker-build_understanding-image-builds","builds-strategy-s2i-build_understanding-image-builds","builds-strategy-custom-build_understanding-image-builds","builds-strategy-pipeline-build_understanding-image-builds","understanding-buildconfigs","builds-buildconfig_understanding-builds","creating-build-inputs","builds-define-build-inputs_creating-build-inputs","builds-dockerfile-source_creating-build-inputs","builds-image-source_creating-build-inputs","builds-source-code_creating-build-inputs","builds-using-proxy-git-cloning_creating-build-inputs","builds-adding-source-clone-secrets_creating-build-inputs","builds-automatically-add-source-clone-secrets_creating-build-inputs","builds-manually-add-source-clone-secrets_creating-build-inputs","builds-gitconfig-file_creating-build-inputs","builds-gitconfig-file-secured-git_creating-build-inputs","builds-source-secret-basic-auth_creating-build-inputs","builds-source-secret-ssh-key-auth_creating-build-inputs","builds-source-secret-trusted-ca_creating-build-inputs","builds-source-secret-combinations_creating-build-inputs","builds-source-secret-combinations-ssh-gitconfig_creating-build-inputs","builds-source-secret-combinations-gitconfig-ca_creating-build-inputs","builds-source-secret-combinations-basic-auth-ca_creating-build-inputs","builds-source-secret-combinations-basic-auth-gitconfig_creating-build-inputs","builds-source-secret-combinations-basic-auth-gitconfig-ca_creating-build-inputs","builds-binary-source_creating-build-inputs","builds-input-secrets-configmaps_creating-build-inputs","builds-secrets-overview_creating-build-inputs","builds-secrets-overview-properties_creating-build-inputs","builds-secrets-overview-types_creating-build-inputs","builds-secrets-overview-updates_creating-build-inputs","builds-creating-secrets_creating-build-inputs","builds-using-secrets_creating-build-inputs","builds-adding-input-secrets-configmaps_creating-build-inputs","builds-source-to-image_creating-build-inputs","builds-docker-strategy_creating-build-inputs","builds-custom-strategy_creating-build-inputs","builds-using-external-artifacts_creating-build-inputs","builds-docker-credentials-private-registries_creating-build-inputs","builds-build-environment_creating-build-inputs","builds-using-build-fields-as-environment-variables_creating-build-inputs","builds-using-secrets-as-environment-variables_creating-build-inputs","builds-service-serving-certificate-secrets_creating-build-inputs","builds-secrets-restrictions_creating-build-inputs","managing-build-output","builds-docker-source-build-output_managing-build-output","builds-output-image-environment-variables_managing-build-output","builds-output-image-labels_managing-build-output","build-strategies","builds-strategy-docker-build_build-strategies","builds-strategy-docker-from-image_build-strategies","builds-strategy-dockerfile-path_build-strategies","builds-strategy-docker-environment-variables_build-strategies","builds-strategy-docker-build-arguments_build-strategies","builds-strategy-docker-squash-layers_build-strategies","builds-strategy-s2i-build_build-strategies","builds-strategy-s2i-incremental-builds_build-strategies","builds-strategy-s2i-override-builder-image-scripts_build-strategies","builds-strategy-s2i-environment-variables_build-strategies","builds-strategy-s2i-environment-files_build-strategies","builds-strategy-s2i-buildconfig-environment_build-strategies","builds-strategy-s2i-ignore-source-files_build-strategies","images-create-s2i_build-strategies","images-create-s2i-build_build-strategies","images-create-s2i-scripts_build-strategies","builds-strategy-custom-build_build-strategies","builds-strategy-custom-from-image_build-strategies","builds-strategy-custom-secrets_build-strategies","builds-strategy-custom-environment-variables_build-strategies","images-custom_build-strategies","images-custom-builder-image-ref_build-strategies","images-custom-builder-flow_build-strategies","builds-strategy-pipeline-build_build-strategies","builds-understanding-openshift-pipeline_build-strategies","builds-strategy-pipeline-providing-jenkinsfile_build-strategies","builds-strategy-pipeline-environment-variables_build-strategies","builds-strategy-pipeline-mapping-buildconfig-jenkins_build-strategies","builds-tutorial-pipeline_build-strategies","builds-strategy-secrets-web-console_build-strategies","builds-strategy-enable-pulling-pushing_build-strategies","custom-builds-buildah","builds-create-custom-build-artifacts_custom-builds-buildah","builds-build-custom-builder-image_custom-builds-buildah","builds-use-custom-builder-image_custom-builds-buildah","basic-build-operations","builds-basic-start-build_basic-build-operations","builds-basic-start-re-run_basic-build-operations","builds-basic-start-logs_basic-build-operations","builds-basic-start-environment-variable_basic-build-operations","builds-basic-start-source_basic-build-operations","builds-basic-cancel-build_basic-build-operations","builds-basic-cancel-multiple_basic-build-operations","builds-basic-cancel-all_basic-build-operations","builds-basic-cancel-all-state_basic-build-operations","builds-basic-delete-buildconfig_basic-build-operations","builds-basic-view-build-details_basic-build-operations","builds-basic-access-build-logs_basic-build-operations","builds-basic-access-buildconfig-logs_basic-build-operations","builds-basic-access-buildconfig-version-logs_basic-build-operations","builds-basic-access-build-verbosity_basic-build-operations","triggering-builds-build-hooks","builds-triggers_triggering-builds-build-hooks","builds-webhook-triggers_triggering-builds-build-hooks","builds-using-github-webhooks_triggering-builds-build-hooks","builds-using-gitlab-webhooks_triggering-builds-build-hooks","builds-using-bitbucket-webhooks_triggering-builds-build-hooks","builds-using-generic-webhooks_triggering-builds-build-hooks","builds-displaying-webhook-urls_triggering-builds-build-hooks","builds-using-image-change-triggers_triggering-builds-build-hooks","builds-image-change-trigger-identification_triggering-builds-build-hooks","builds-configuration-change-triggers_triggering-builds-build-hooks","builds-setting-triggers-manually_triggering-builds-build-hooks","builds-build-hooks_triggering-builds-build-hooks","builds-configuring-post-commit-build-hooks_triggering-builds-build-hooks","builds-using-cli-post-commit-build-hooks_triggering-builds-build-hooks","advanced-build-operations","builds-setting-build-resources_advanced-build-operations","builds-setting-maximum-duration_advanced-build-operations","builds-assigning-builds-to-nodes_advanced-build-operations","builds-chaining-builds_advanced-build-operations","builds-build-pruning_advanced-build-operations","builds-build-run-policy_advanced-build-operations","running-entitled-builds","builds-create-imagestreamtag_running-entitled-builds","builds-source-secrets-entitlements_running-entitled-builds","running-builds-with-subscription-manager","builds-strategy-docker-entitled-subman_running-entitled-builds","running-builds-with-red-hat-satellite-subscriptions","builds-source-input-satellite-config_running-entitled-builds","builds-strategy-docker-entitled-satellite_running-entitled-builds","securing-builds-by-strategy","builds-disabling-build-strategy-globally_securing-builds-by-strategy","builds-restricting-build-strategy-globally_securing-builds-by-strategy","builds-restricting-build-strategy-to-user_securing-builds-by-strategy","build-configuration","builds-configuration-parameters_build-configuration","builds-configuration-file_build-configuration","troubleshooting-builds_build-configuration","builds-troubleshooting-access-resources_troubleshooting-builds","builds-troubleshooting-service-certificate-generation_troubleshooting-builds","setting-up-trusted-ca","configmap-adding-ca_setting-up-trusted-ca","/documentation/openshift_container_platform/4.8/html/cicd/builds",{"title":6977,"visible":10,"weight":46,"urlFragment":6978,"anchor":16,"singlePageAnchor":6978,"subChapters":6979,"url":6991,"docTitle":6815},"Migrating from Jenkins to Tekton","migrating-from-jenkins-to-tekton",[6980,6981,6982,6983,6984,6985,6986,6987,6988,6989,6990],"migrating-from-jenkins-to-tekton_setting-up-trusted-ca","jt-comparison-of-jenkins-and-tekton-concepts_migrating-from-jenkins-to-tekton","jenkins-terminology","tekton-terminology","mapping-of-concepts","jt-migrating-a-sample-pipeline-from-jenkins-to-tekton_migrating-from-jenkins-to-tekton","jenkins-pipeline","tekton-pipeline","jt-migrating-from-jenkins-plugins-to-tekton-hub-tasks_migrating-from-jenkins-to-tekton","jt-extending-tekton-capabilities-using-custom-tasks-and-scripts_migrating-from-jenkins-to-tekton","jt-comparison-of-jenkins-tekton-execution-models_migrating-from-jenkins-to-tekton","/documentation/openshift_container_platform/4.8/html/cicd/migrating-from-jenkins-to-tekton",{"title":6993,"visible":10,"weight":68,"urlFragment":6994,"anchor":16,"singlePageAnchor":6994,"subChapters":6995,"url":7100,"docTitle":6815},"Pipelines","pipelines",[6996,6997,6998,6999,7000,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042,7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,1626,7053,7054,7055,7056,2636,7057,7058,7059,7060,1038,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074,7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090,7091,7092,7093,7094,7095,7096,7097,7098,7099],"op-release-notes","making-open-source-more-inclusive_op-release-notes","op-release-notes-1-5_op-release-notes","compatibility-support-matrix-1-5_op-release-notes","new-features-1-5_op-release-notes","deprecated-features-1-5_op-release-notes","known-issues-1-5_op-release-notes","fixed-issues-1-5_op-release-notes","op-release-notes-1-4_op-release-notes","compatibility-support-matrix-1-4_op-release-notes","new-features-1-4_op-release-notes","deprecated-features-1-4_op-release-notes","known-issues-1-4_op-release-notes","fixed-issues-1-4_op-release-notes","op-release-notes-1-3_op-release-notes","new-features-1-3_op-release-notes","pipeline-new-features-1-3_op-release-notes","cli-new-features-1-3_op-release-notes","triggers-new-features-1-3_op-release-notes","deprecated-features-1-3_op-release-notes","known-issues-1-3_op-release-notes","fixed-issues-1-3_op-release-notes","op-release-notes-1-2_op-release-notes","new-features-1-2_op-release-notes","pipeline-new-features-1-2_op-release-notes","cli-new-features-1-2_op-release-notes","triggers-new-features-1-2_op-release-notes","deprecated-features-1-2_op-release-notes","known-issues-1-2_op-release-notes","fixed-issues-1-2_op-release-notes","op-release-notes-1-1_op-release-notes","new-features-1-1_op-release-notes","pipeline-new-features-1-1_op-release-notes","cli-new-features-1-1_op-release-notes","triggers-new-features-1-1_op-release-notes","deprecated-features-1-1_op-release-notes","known-issues-1-1_op-release-notes","fixed-issues-1-1_op-release-notes","op-release-notes-1-0_op-release-notes","new-features-1-0_op-release-notes","pipeline-new-features-1-0_op-release-notes","cli-new-features-1-0_op-release-notes","triggers-new-features-1-0_op-release-notes","deprecated-features-1-0_op-release-notes","known-issues-1-4-0_op-release-notes","fixed-issues-1-0_op-release-notes","understanding-openshift-pipelines","op-key-features","op-detailed-concepts","about-tasks_understanding-openshift-pipelines","about-whenexpression_understanding-openshift-pipelines","about-finally_tasks_understanding-openshift-pipelines","about-taskrun_understanding-openshift-pipelines","about-pipelines_understanding-openshift-pipelines","about-pipelinerun_understanding-openshift-pipelines","about-workspaces_understanding-openshift-pipelines","about-triggers_understanding-openshift-pipelines","installing-pipelines","op-installing-pipelines-operator-in-web-console_installing-pipelines","op-installing-pipelines-operator-using-the-cli_installing-pipelines","op-pipelines-operator-in-restricted-environment_installing-pipelines","uninstalling-pipelines","op-deleting-the-pipelines-component-and-custom-resources_uninstalling-pipelines","op-uninstalling-the-pipelines-operator_uninstalling-pipelines","creating-applications-with-cicd-pipelines","creating-project-and-checking-pipeline-service-account_creating-applications-with-cicd-pipelines","creating-pipeline-tasks_creating-applications-with-cicd-pipelines","assembling-a-pipeline_creating-applications-with-cicd-pipelines","op-mirroring-images-to-run-pipelines-in-restricted-environment_creating-applications-with-cicd-pipelines","running-a-pipeline_creating-applications-with-cicd-pipelines","adding-triggers_creating-applications-with-cicd-pipelines","creating-webhooks_creating-applications-with-cicd-pipelines","triggering-a-pipeline_creating-applications-with-cicd-pipelines","pipeline-addtl-resources","working-with-pipelines-using-the-developer-perspective","op-constructing-pipelines-using-pipeline-builder_working-with-pipelines-using-the-developer-perspective","creating-applications-with-openshift-pipelines","op-interacting-with-pipelines-using-the-developer-perspective_working-with-pipelines-using-the-developer-perspective","using-custom-pipeline-template-for-git-import","op-starting-pipelines_using-custom-pipeline-template-for-git-import","op-editing-pipelines_using-custom-pipeline-template-for-git-import","op-deleting-pipelines_using-custom-pipeline-template-for-git-import","reducing-pipelines-resource-consumption","op-understanding-pipelines-resource-consumption_reducing-pipelines-resource-consumption","op-mitigating-extra-pipeline-resource-consumption_reducing-pipelines-resource-consumption","additional-resources_reducing-pipelines-resource-consumption","using-pods-in-a-privileged-security-context","op-running-pipeline-and-task-run-pods-with-privileged-security-context","op-running-pipeline-run-and-task-run-with-custom-scc-and-service-account_op-running-pipeline-and-task-run-pods-with-privileged-security-context","additional-references_using-pods-in-a-privileged-security-context","securing-webhooks-with-event-listeners","op-providing-secure-connection_securing-webhooks-with-event-listeners","op-sample-eventlistener-resource_securing-webhooks-with-event-listeners","authenticating-pipelines-using-git-secret","op-understanding-credential-selection_authenticating-pipelines-using-git-secret","op-configuring-basic-authentication-for-git_authenticating-pipelines-using-git-secret","op-configuring-ssh-authentication-for-git_authenticating-pipelines-using-git-secret","op-using-ssh-authentication-in-git-type-tasks_authenticating-pipelines-using-git-secret","op-using-secrets-as-a-nonroot-user_authenticating-pipelines-using-git-secret","op-limiting-secret-access-to-specific-steps_authenticating-pipelines-using-git-secret","viewing-pipeline-logs-using-the-openshift-logging-operator","prerequisites_viewing-pipeline-logs-using-the-openshift-logging-operator","op-viewing-pipeline-logs-in-kibana_viewing-pipeline-logs-using-the-openshift-logging-operator","additional-resources_viewing-pipeline-logs-using-the-openshift-logging-operator","/documentation/openshift_container_platform/4.8/html/cicd/pipelines",{"title":7102,"visible":10,"weight":435,"urlFragment":7103,"anchor":16,"singlePageAnchor":7103,"subChapters":7104,"url":7225,"docTitle":6815},"GitOps","gitops",[7105,7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138,7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186,7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213,7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224],"gitops-release-notes","compatibility-and-support-matrix","making-open-source-more-inclusive_gitops-release-notes","gitops-release-notes-1-6-6_gitops-release-notes","fixed-issues-1-6-6_gitops-release-notes","gitops-release-notes-1-6-7_gitops-release-notes","fixed-issues-1-6-7_gitops-release-notes","gitops-release-notes-1-6-2_gitops-release-notes","fixed-issues-1-6-2_gitops-release-notes","gitops-release-notes-1-6-1_gitops-release-notes","fixed-issues-1-6-1_gitops-release-notes","gitops-release-notes-1-6-0_gitops-release-notes","new-features-1-6-0_gitops-release-notes","fixed-issues-1-6-0_gitops-release-notes","known-issues-1-6-0_gitops-release-notes","gitops-release-notes-1-5-7_gitops-release-notes","fixed-issues-1-5-7_gitops-release-notes","gitops-release-notes-1-5-6_gitops-release-notes","fixed-issues-1-5-6_gitops-release-notes","gitops-release-notes-1-5-5_gitops-release-notes","new-features-1-5-5_gitops-release-notes","fixed-issues-1-5-5_gitops-release-notes","known-issues-1-5-5_gitops-release-notes","gitops-release-notes-1-5-4_gitops-release-notes","fixed-issues-1-5-4_gitops-release-notes","gitops-release-notes-1-5-3_gitops-release-notes","fixed-issues-1-5-3_gitops-release-notes","gitops-release-notes-1-5-2_gitops-release-notes","fixed-issues-1-5-2_gitops-release-notes","gitops-release-notes-1-5-1_gitops-release-notes","fixed-issues-1-5-1_gitops-release-notes","gitops-release-notes-1-5-0_gitops-release-notes","new-features-1-5-0_gitops-release-notes","fixed-issues-1-5-0_gitops-release-notes","known-issues-1-5-0_gitops-release-notes","gitops-release-notes-1-4-13_gitops-release-notes","fixed-issues-1-4-13_gitops-release-notes","gitops-release-notes-1-4-12_gitops-release-notes","fixed-issues-1-4-12_gitops-release-notes","gitops-release-notes-1-4-5_gitops-release-notes","fixed-issues-1-4-5_gitops-release-notes","gitops-release-notes-1-4-3_gitops-release-notes","fixed-issues-1-4-3_gitops-release-notes","gitops-release-notes-1-4-2_gitops-release-notes","fixed-issues-1-4-2_gitops-release-notes","gitops-release-notes-1-4-1_gitops-release-notes","fixed-issues-1-4-1_gitops-release-notes","gitops-release-notes-1-4-0_gitops-release-notes","new-features-1-4-0_gitops-release-notes","fixed-issues-1-4-0_gitops-release-notes","known-issues-1-4-0_gitops-release-notes","gitops-release-notes-1-3-7_gitops-release-notes","fixed-issues-1-3-7_gitops-release-notes","gitops-release-notes-1-3-6_gitops-release-notes","fixed-issues-1-3-6_gitops-release-notes","gitops-release-notes-1-3-2_gitops-release-notes","new-features-1-3-2_gitops-release-notes","fixed-issues-1-3-2_gitops-release-notes","gitops-release-notes-1-3-1_gitops-release-notes","fixed-issues-1-3-1_gitops-release-notes","gitops-release-notes-1-3_gitops-release-notes","new-features-1-3_gitops-release-notes","fixed-issues-1-3_gitops-release-notes","known-issues-1-3_gitops-release-notes","gitops-release-notes-1-2-2_gitops-release-notes","fixed-issues-1-2-2_gitops-release-notes","gitops-release-notes-1-2-1_gitops-release-notes","support-matrix-1-2-1_gitops-release-notes","fixed-issues-1-2-1_gitops-release-notes","gitops-release-notes-1-2_gitops-release-notes","support-matrix-1-2_gitops-release-notes","new-features-1-2_gitops-release-notes","fixed-issues-1-2_gitops-release-notes","known-issues-1-2_gitops-release-notes","gitops-release-notes-1-1_gitops-release-notes","support-matrix-1-1_gitops-release-notes","new-features-1-1_gitops-release-notes","fixed-issues-1-1_gitops-release-notes","known-issues-1-1_gitops-release-notes","breaking-change-1-1_gitops-release-notes","upgrading-from-red-hat-openshift-gitops-v1-0-1","understanding-openshift-gitops","about-gitops_understanding-openshift-gitops","about-redhat-openshift-gitops_understanding-openshift-gitops","key-features_understanding-openshift-gitops","getting-started-with-openshift-gitops","installing-gitops-operator-in-web-console_installing-openshift-gitops","logging-in-to-the-argo-cd-instance-by-using-the-argo-cd-admin-account_installing-openshift-gitops","uninstalling-openshift-gitops","go-deleting-argocd-instance_uninstalling-openshift-gitops","go-uninstalling-gitops-operator_uninstalling-openshift-gitops","configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","using-argo-cd-instance-to-manage-cluster-scoped-resourcesconfiguring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","default-permissions-of-an-argocd-instance.adocconfiguring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","run-argo-cd-instance-on-cluster_configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","creating-an-application-by-using-the-argo-cd-dashboard_configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","creating-an-application-by-using-the-oc-tool_configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","synchronizing-your-application-application-with-your-git-repository_configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","gitops-inbuilt-permissions-for-cluster-config_configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","gitops-additional-permissions-for-cluster-config_configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","gitops-installing-olm-operators-using-gitops_configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations","installing-cluster-scoped-operators","installing-namepace-scoped-operators","deploying-a-spring-boot-application-with-argo-cd","creating-an-application-by-using-the-argo-cd-dashboard_deploying-a-spring-boot-application-with-argo-cd","creating-an-application-by-using-the-oc-tool_deploying-a-spring-boot-application-with-argo-cd","verifying-argo-cd-self-healing-behavior_deploying-a-spring-boot-application-with-argo-cd","configuring-sso-for-argo-cd-using-dex","gitops-creating-a-new-client-in-dex_configuring-sso-for-argo-cd-using-dex","gitops-dex-role-mappings_configuring-sso-for-argo-cd-using-dex","gitops-disable-dex_configuring-sso-for-argo-cd-using-dex","configuring-sso-for-argo-cd-using-keycloak","gitops-creating-a-new-client-in-keycloak_configuring-sso-for-argo-cd-using-keycloak","gitops-logging-into-keycloak_configuring-sso-for-argo-cd-using-keycloak","gitops-additional-steps-disconnected-clusters_configuring-sso-for-argo-cd-using-keycloak","gitops-uninstalling-keycloak_configuring-sso-for-argo-cd-using-keycloak","run-gitops-control-plane-workload-on-infra-nodes","add-infra-nodes_run-gitops-control-plane-workload-on-infra-nodes","about-sizing-requirements-gitops","sizing-requirements-for-gitops_about-sizing-requirements-gitops","/documentation/openshift_container_platform/4.8/html/cicd/gitops",{"title":7227,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":7228,"url":7229,"docTitle":7230,"sections":7231},"Images",[],"/documentation/openshift_container_platform/4.8/html/images/index","images",[7232,7251,7267,7279,7298,7318,7338,7344,7352,7365,7390,7404],{"title":7233,"visible":10,"weight":23,"urlFragment":7234,"anchor":16,"singlePageAnchor":7234,"subChapters":7235,"url":7250,"docTitle":7230},"Overview of images","overview-of-images",[7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248,7249],"about-containers-images-and-image-streams","images-about_overview-of-images","images-image-registry-about_overview-of-images","images-container-repository-about_overview-of-images","images-tag_overview-of-images","images-id_overview-of-images","containers-about_overview-of-images","images-imagestream-use_overview-of-images","images-imagestream-tag_overview-of-images","images-imagestream-image_overview-of-images","images-imagestream-trigger_overview-of-images","how-you-can-use-the-cluster-samples-operator","about-templates","how-you-can-use-ruby-on-rails","/documentation/openshift_container_platform/4.8/html/images/overview-of-images",{"title":7252,"visible":10,"weight":35,"urlFragment":7253,"anchor":16,"singlePageAnchor":7253,"subChapters":7254,"url":7266,"docTitle":7230},"Configuring the Cluster Samples Operator","configuring-samples-operator",[7255,7256,7257,7258,7259,7260,7261,7262,7263,7264,7265],"samples-operator-overview_configuring-samples-operator","samples-operator-bootstrapped","samples-operator-restricted-network-install","samples-operator-restricted-network-install-with-access","samples-operator-retries","installation-images-samples-disconnected-mirroring-assist_configuring-samples-operator","samples-operator-configuration_configuring-samples-operator","configuration-restrictions","conditions","samples-operator-crd_configuring-samples-operator","images-samples-operator-deprecated-image-stream_configuring-samples-operator","/documentation/openshift_container_platform/4.8/html/images/configuring-samples-operator",{"title":7268,"visible":10,"weight":46,"urlFragment":7269,"anchor":16,"singlePageAnchor":7269,"subChapters":7270,"url":7278,"docTitle":7230},"Using the Cluster Samples Operator with an alternate registry","samples-operator-alt-registry",[7271,7272,7273,7274,7275,7276,7277],"installation-about-mirror-registry_samples-operator-alt-registry","samples-preparing-bastion","cli-installing-cli_samples-operator-alt-registry","installation-adding-registry-pull-secret_samples-operator-alt-registry","installation-mirror-repository_samples-operator-alt-registry","installation-restricted-network-samples_samples-operator-alt-registry","installation-images-samples-disconnected-mirroring-assist_samples-operator-alt-registry","/documentation/openshift_container_platform/4.8/html/images/samples-operator-alt-registry",{"title":7280,"visible":10,"weight":68,"urlFragment":7281,"anchor":16,"singlePageAnchor":7281,"subChapters":7282,"url":7297,"docTitle":7230},"Creating images","creating-images",[7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296],"images-create-guidelines_create-images","images-create-guide-general_create-images","images-create-guide-openshift_create-images","images-create-metadata_create-images","defining-image-metadata","images-create-s2i_create-images","images-create-s2i-build_create-images","images-create-s2i-scripts_create-images","images-test-s2i_create-images","images-test-s2i-testing-requirements_create-images","images-test-s2i-generating-scripts-and-tools_create-images","images-test-s21-testing-locally_create-images","images-test-s21-basic-testing-workflow_create-images","images-test-s21-using-openshift-for-building-the-image_create-images","/documentation/openshift_container_platform/4.8/html/images/creating-images",{"title":7299,"visible":10,"weight":435,"urlFragment":7300,"anchor":16,"singlePageAnchor":7300,"subChapters":7301,"url":7317,"docTitle":7230},"Managing images","managing-images",[7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315,7316],"managing-images-overview","images-managing-overview_managing-images-overview","tagging-images","images-tag_tagging-images","images-tagging-conventions_tagging-images","images-add-tags-to-imagestreams_tagging-images","images-remove-tag-imagestream_tagging-images","images-referencing-images-imagestreams_tagging-images","image-pull-policy","images-image-pull-policy-overview_image-pull-policy","using-image-pull-secrets","images-allow-pods-to-reference-images-across-projects_using-image-pull-secrets","images-allow-pods-to-reference-images-from-secure-registries_using-image-pull-secrets","images-pulling-from-private-registries_using-image-pull-secrets","images-update-global-pull-secret_using-image-pull-secrets","/documentation/openshift_container_platform/4.8/html/images/managing-images",{"title":7319,"visible":10,"weight":453,"urlFragment":7320,"anchor":16,"singlePageAnchor":7320,"subChapters":7321,"url":7337,"docTitle":7230},"Managing image streams","managing-image-streams",[7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336],"images-imagestream-use_image-streams-managing","images-imagestream-configure_image-streams-managing","images-using-imagestream-images_image-streams-managing","images-using-imagestream-tags_image-streams-managing","images-using-imagestream-change-triggers_image-streams-managing","images-imagestream-mapping_image-streams-managing","working-with-image-streams","images-getting-info-about-imagestreams_image-streams-managing","images-imagestream-adding-tags_image-streams-managing","images-imagestream-external-image-tags_image-streams-managing","images-imagestream-update-tag_image-streams-managing","images-imagestream-remove-tag_image-streams-managing","images-imagestream-import_image-streams-managing","images-imagestream-import-images-private-registry_image-streams-managing","images-allow-pods-to-reference-images-from-secure-registries_image-streams-managing","/documentation/openshift_container_platform/4.8/html/images/managing-image-streams",{"title":7339,"visible":10,"weight":468,"urlFragment":7340,"anchor":16,"singlePageAnchor":7340,"subChapters":7341,"url":7343,"docTitle":7230},"Using image streams with Kubernetes resources","using-imagestreams-with-kube-resources",[7342],"images-managing-images-enabling-imagestreams-kube_using-imagestreams-with-kube-resources","/documentation/openshift_container_platform/4.8/html/images/using-imagestreams-with-kube-resources",{"title":7345,"visible":10,"weight":869,"urlFragment":7346,"anchor":16,"singlePageAnchor":7346,"subChapters":7347,"url":7351,"docTitle":7230},"Triggering updates on image stream changes","triggering-updates-on-imagestream-changes",[7348,7349,7350],"openshift-resources","images-triggering-updates-imagestream-changes-kubernetes-about_triggering-updates-on-imagestream-changes","images-triggering-updates-imagestream-changes-kubernetes-cli_triggering-updates-on-imagestream-changes","/documentation/openshift_container_platform/4.8/html/images/triggering-updates-on-imagestream-changes",{"title":7353,"visible":10,"weight":877,"urlFragment":7354,"anchor":16,"singlePageAnchor":7354,"subChapters":7355,"url":7364,"docTitle":7230},"Image configuration resources","image-configuration",[7356,7357,7358,7359,7360,7361,7362,7363],"images-configuration-parameters_image-configuration","images-configuration-file_image-configuration","images-configuration-allowed_image-configuration","images-configuration-blocked_image-configuration","images-configuration-insecure_image-configuration","images-configuration-shortname_image-configuration","images-configuration-cas_image-configuration","images-configuration-registry-mirror_image-configuration","/documentation/openshift_container_platform/4.8/html/images/image-configuration",{"title":7366,"visible":10,"weight":888,"urlFragment":7367,"anchor":16,"singlePageAnchor":7367,"subChapters":7368,"url":7389,"docTitle":7230},"Using templates","using-templates",[7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388],"templates-overview_using-templates","templates-uploading_using-templates","templates-creating-from-console_using-templates","templates-using-the-cli_using-templates","templates-cli-labels_using-templates","templates-cli-parameters_using-templates","templates-cli-generating-list-of-objects_using-templates","templates-modifying-uploaded-template_using-templates","templates-using-instant-app-quickstart_using-templates","templates-quickstart_using-templates","templates-quickstart-web-framework_using-templates","templates-writing_using-templates","templates-writing-description_using-templates","templates-writing-labels_using-templates","templates-writing-parameters_using-templates","templates-writing-object-list_using-templates","templates-marking-as-bindable_using-templates","templates-exposing-object-fields_using-templates","templates-waiting-for-readiness_using-templates","templates-create-from-existing-object_using-templates","/documentation/openshift_container_platform/4.8/html/images/using-templates",{"title":7391,"visible":10,"weight":899,"urlFragment":7392,"anchor":16,"singlePageAnchor":7392,"subChapters":7393,"url":7403,"docTitle":7230},"Using Ruby on Rails","templates-using-ruby-on-rails",[1006,7394,7395,7396,7397,7398,7399,7400,7401,7402],"templates-rails-setting-up-database_templates-ruby-on-rails","templates-rails-writing-application_templates-ruby-on-rails","templates-rails-creating-welcome-page_templates-ruby-on-rails","templates-rails-configuring-application_templates-ruby-on-rails","templates-rails-storing-application-in-git_templates-ruby-on-rails","templates-rails-deploying-application_templates-ruby-on-rails","templates-rails-creating-database-service_templates-ruby-on-rails","templates-rails-creating-frontend-service_templates-ruby-on-rails","templates-rails-creating-route-for-application_templates-ruby-on-rails","/documentation/openshift_container_platform/4.8/html/images/templates-using-ruby-on-rails",{"title":7405,"visible":10,"weight":906,"urlFragment":7406,"anchor":16,"singlePageAnchor":7406,"subChapters":7407,"url":7433,"docTitle":7230},"Using images","using-images",[7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,1626,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431,7432],"using-images-overview","images-other-jenkins","images-other-jenkins-config-customization_images-other-jenkins","images-other-jenkins-oauth-auth_images-other-jenkins","images-other-jenkins-auth_images-other-jenkins","images-other-jenkins-env-var_images-other-jenkins","images-other-jenkins-cross-project_images-other-jenkins","images-other-jenkins-cross-volume-mount_images-other-jenkins","images-other-jenkins-customize-s2i_images-other-jenkins","images-other-jenkins-config-kubernetes_images-other-jenkins","images-other-jenkins-permissions_images-other-jenkins","images-other-jenkins-create-service_images-other-jenkins","images-other-jenkins-kubernetes-plugin_images-other-jenkins","images-other-jenkins-memory_images-other-jenkins","images-other-jenkins-agent","images-other-jenkins-agent-images_images-other-jenkins-agent","images-other-jenkins-agent-env-var_images-other-jenkins-agent","images-other-jenkins-agent-memory_images-other-jenkins-agent","images-other-jenkins-agent-gradle_images-other-jenkins-agent","images-other-jenkins-agent-pod-retention_images-other-jenkins-agent","using-s21-images","images-s2i-build-process-overview_using-s21-images","additional-resources_using-s21-images","customizing-s2i-images","images-using-customizing-s2i-images-scripts-embedded_customizing-s2i-images","/documentation/openshift_container_platform/4.8/html/images/using-images",{"title":7435,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":7436,"url":7437,"docTitle":7438,"sections":7439},"Nodes",[],"/documentation/openshift_container_platform/4.8/html/nodes/index","nodes",[7440,7448,7529,7612,7629,7696,7748,7806],{"title":7441,"visible":10,"weight":23,"urlFragment":7442,"anchor":16,"singlePageAnchor":7442,"subChapters":7443,"url":7447,"docTitle":7438},"Overview of nodes","overview-of-nodes",[7444,7445,7446],"nodes-overview","pods-overview","containers-overview","/documentation/openshift_container_platform/4.8/html/nodes/overview-of-nodes",{"title":7449,"visible":10,"weight":35,"urlFragment":7450,"anchor":16,"singlePageAnchor":7450,"subChapters":7451,"url":7528,"docTitle":7438},"Working with pods","working-with-pods",[7452,7453,7454,1546,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,1598,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527],"nodes-pods-using-pp","nodes-pods-using-about_nodes-pods-using-ssy","nodes-pods-using-example_nodes-pods-using-ssy","nodes-pods-viewing","nodes-pods-about_nodes-pods-viewing","nodes-pods-viewing-project_nodes-pods-viewing","nodes-pods-viewing-usage_nodes-pods-viewing","viewing-resource-logs-cli-console_nodes-pods-viewing","nodes-pods-configuring","nodes-pods-configuring-restart_nodes-pods-configuring","nodes-pods-configuring-bandwidth_nodes-pods-configuring","nodes-pods-configuring-pod-distruption-about_nodes-pods-configuring","nodes-pods-pod-disruption-configuring_nodes-pods-configuring","nodes-pods-configuring-critical_nodes-pods-configuring","nodes-pods-autoscaling","nodes-pods-autoscaling-about_nodes-pods-autoscaling","supported-metrics","nodes-pods-autoscaling-policies_nodes-pods-autoscaling","nodes-pods-autoscaling-creating-web-console_nodes-pods-autoscaling","nodes-pods-autoscaling-creating-cpu_nodes-pods-autoscaling","nodes-pods-autoscaling-creating-memory_nodes-pods-autoscaling","nodes-pods-autoscaling-status-about_nodes-pods-autoscaling","nodes-pods-autoscaling-status-viewing_nodes-pods-autoscaling","nodes-pods-vpa","nodes-pods-vertical-autoscaler-about_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-install_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-using-about_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-using-one-pod_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-using-auto_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-using-pod_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-using-manual_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-using-exempt_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-configuring_nodes-pods-vertical-autoscaler","nodes-pods-vertical-autoscaler-uninstall_nodes-pods-vertical-autoscaler","nodes-pods-secrets","nodes-pods-secrets-about_nodes-pods-secrets","nodes-pods-secrets-about-types_nodes-pods-secrets","nodes-pods-secrets-about-keys_nodes-pods-secrets","nodes-pods-secrets-creating_nodes-pods-secrets","secret-creation-restrictions","nodes-pods-secrets-creating-opaque_nodes-pods-secrets","nodes-pods-secrets-creating-sa_nodes-pods-secrets","nodes-pods-secrets-creating-basic_nodes-pods-secrets","nodes-pods-secrets-creating-ssh_nodes-pods-secrets","nodes-pods-secrets-creating-docker_nodes-pods-secrets","nodes-pods-secrets-updating_nodes-pods-secrets","nodes-pods-secrets-certificates-about_nodes-pods-secrets","nodes-pods-secrets-certificates-creating_nodes-pods-secrets","nodes-pods-secrets-troubleshooting_nodes-pods-secrets","configmaps","nodes-pods-configmap-overview_configmaps","nodes-pods-configmap-create-from-console_configmaps","nodes-pods-configmap-create_configmaps","nodes-pods-configmap-creating-from-directories_configmaps","nodes-pods-configmap-creating-from-files_configmaps","nodes-pods-configmap-creating-from-literal-values_configmaps","nodes-pods-configmaps-consuming-configmap-in-pods","nodes-pods-configmaps-use-case-consuming-in-env-vars_configmaps","nodes-pods-configmaps-use-case-setting-command-line-arguments_configmaps","nodes-pods-configmaps-use-case-consuming-in-volumes_configmaps","nodes-pods-device","nodes-pods-plugins-about_nodes-pods-device","methods-for-deploying-a-device-plugin_nodes-pods-device","nodes-pods-plugins-device-mgr_nodes-pods-device","nodes-pods-plugins-install_nodes-pods-device","nodes-pods-priority","nodes-pods-priority-about_nodes-pods-priority","admin-guide-priority-preemption-priority-class_nodes-pods-priority","admin-guide-priority-preemption-names_nodes-pods-priority","nodes-pods-priority-preempt-about_nodes-pods-priority","non-preempting-priority-class_nodes-pods-priority","priority-preemption-other_nodes-pods-priority","priority-preemption-graceful_nodes-pods-priority","nodes-pods-priority-configuring_nodes-pods-priority","nodes-pods-node-selectors","nodes-scheduler-node-selectors-pod_nodes-pods-node-selectors","/documentation/openshift_container_platform/4.8/html/nodes/working-with-pods",{"title":7530,"visible":10,"weight":46,"urlFragment":7531,"anchor":16,"singlePageAnchor":7531,"subChapters":7532,"url":7611,"docTitle":7438},"Controlling pod placement onto nodes (scheduling)","controlling-pod-placement-onto-nodes-scheduling",[7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551,7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,1626,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610],"nodes-scheduler-about","nodes-scheduler-about-use-cases_nodes-scheduler-about","infrastructure-topological-levels_nodes-scheduler-about","affinity_nodes-scheduler-about","anti-affinity_nodes-scheduler-about","nodes-scheduler-default","nodes-scheduler-default-about_nodes-scheduler-default","nodes-scheduler-default-about-understanding_nodes-scheduler-default","nodes-scheduler-default-creating_nodes-scheduler-default","nodes-scheduler-default-modifying_nodes-scheduler-default","nodes-scheduler-default-predicates_nodes-scheduler-default","static-predicates_nodes-scheduler-default","default-predicates_nodes-scheduler-default","other-predicates_nodes-scheduler-default","admin-guide-scheduler-general-predicates_nodes-scheduler-default","nodes-scheduler-default-priorities_nodes-scheduler-default","static-priority-functions_nodes-scheduler-default","default-priorities_nodes-scheduler-default","other-priorities_nodes-scheduler-default","configurable-priority-functions_nodes-scheduler-default","nodes-scheduler-default-sample_nodes-scheduler-default","nodes-scheduler-profiles","nodes-scheduler-profiles-about_nodes-scheduler-profiles","nodes-scheduler-profiles-configuring_nodes-scheduler-profiles","nodes-scheduler-pod-affinity","nodes-scheduler-pod-affinity-about_nodes-scheduler-pod-affinity","nodes-scheduler-pod-affinity-configuring_nodes-scheduler-pod-affinity","nodes-scheduler-pod-anti-affinity-configuring_nodes-scheduler-pod-affinity","nodes-scheduler-pod-affinity-example_nodes-scheduler-pod-affinity","nodes-scheduler-pod-affinity-example-affinity_nodes-scheduler-pod-affinity","nodes-scheduler-pod-affinity-example-antiaffinity_nodes-scheduler-pod-affinity","nodes-scheduler-pod-affinity-example-no-labels_nodes-scheduler-pod-affinity","nodes-scheduler-node-affinity","nodes-scheduler-node-affinity-about_nodes-scheduler-node-affinity","nodes-scheduler-node-affinity-configuring-required_nodes-scheduler-node-affinity","nodes-scheduler-node-affinity-configuring-preferred_nodes-scheduler-node-affinity","nodes-scheduler-node-affinity-examples_nodes-scheduler-node-affinity","admin-guide-sched-affinity-examples1_nodes-scheduler-node-affinity","admin-guide-sched-affinity-examples2_nodes-scheduler-node-affinity","nodes-scheduler-node-affinity-addtl-resources_nodes-scheduler-node-affinity","nodes-scheduler-overcommit","nodes-cluster-overcommit-about_nodes-scheduler-overcommit","nodes-cluster-overcommit-configure-nodes_nodes-scheduler-overcommit","nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-about_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-about-seconds_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-about-multiple_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-about-taintNodesByCondition_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-about-taintBasedEvictions_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-all_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-adding_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-adding-machineset_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-bindings_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-projects_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-special_nodes-scheduler-taints-tolerations","nodes-scheduler-taints-tolerations-removing_nodes-scheduler-taints-tolerations","nodes-scheduler-node-selectors","nodes-scheduler-node-selectors-about_nodes-scheduler-node-selectors","nodes-scheduler-node-selectors-pod_nodes-scheduler-node-selectors","nodes-scheduler-node-selectors-cluster_nodes-scheduler-node-selectors","nodes-scheduler-node-selectors-project_nodes-scheduler-node-selectors","nodes-scheduler-pod-topology-spread-constraints","nodes-scheduler-pod-topology-spread-constraints-about_nodes-scheduler-pod-topology-spread-constraints","nodes-scheduler-pod-topology-spread-constraints-configuring_nodes-scheduler-pod-topology-spread-constraints","nodes-scheduler-pod-topology-spread-constraints-examples_nodes-scheduler-pod-topology-spread-constraints","nodes-scheduler-pod-topology-spread-constraints-example-single_nodes-scheduler-pod-topology-spread-constraints","nodes-scheduler-pod-topology-spread-constraints-example-multiple_nodes-scheduler-pod-topology-spread-constraints","nodes-custom-scheduler","nodes-custom-scheduler-deploying_nodes-custom-scheduler","nodes-custom-scheduler-deploying-pods_nodes-custom-scheduler","additional-resources_nodes-custom-scheduler","nodes-descheduler","nodes-descheduler-about_nodes-descheduler","nodes-descheduler-profiles_nodes-descheduler","nodes-descheduler-installing_nodes-descheduler","nodes-descheduler-configuring-profiles_nodes-descheduler","nodes-descheduler-configuring-interval_nodes-descheduler","nodes-descheduler-uninstalling_nodes-descheduler","/documentation/openshift_container_platform/4.8/html/nodes/controlling-pod-placement-onto-nodes-scheduling",{"title":7613,"visible":10,"weight":68,"urlFragment":7614,"anchor":16,"singlePageAnchor":7614,"subChapters":7615,"url":7628,"docTitle":7438},"Using Jobs and DaemonSets","using-jobs-and-daemonsets",[7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627],"nodes-pods-daemonsets","scheduled-by-default-scheduler","nodes-pods-daemonsets-creating_nodes-pods-daemonsets","nodes-nodes-jobs","nodes-nodes-jobs-about_nodes-nodes-jobs","jobs-create_nodes-nodes-jobs","jobs-set-max_nodes-nodes-jobs","jobs-set-backoff_nodes-nodes-jobs","jobs-artifacts_nodes-nodes-jobs","jobs-limits_nodes-nodes-jobs","nodes-nodes-jobs-creating_nodes-nodes-jobs","nodes-nodes-jobs-creating-cron_nodes-nodes-jobs","/documentation/openshift_container_platform/4.8/html/nodes/using-jobs-and-daemonsets",{"title":7630,"visible":10,"weight":435,"urlFragment":7631,"anchor":16,"singlePageAnchor":7631,"subChapters":7632,"url":7695,"docTitle":7438},"Working with nodes","working-with-nodes",[7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694],"nodes-nodes-viewing","nodes-nodes-viewing-listing_nodes-nodes-viewing","nodes-nodes-viewing-listing-pods_nodes-nodes-viewing","nodes-nodes-viewing-memory_nodes-nodes-viewing","nodes-nodes-working","nodes-nodes-working-evacuating_nodes-nodes-working","nodes-nodes-working-updating_nodes-nodes-working","nodes-nodes-working-marking_nodes-nodes-working","deleting-nodes","nodes-nodes-working-deleting_nodes-nodes-working","nodes-nodes-working-deleting-bare-metal_nodes-nodes-working","nodes-nodes-managing","nodes-nodes-managing-about_nodes-nodes-managing","nodes-nodes-working-master-schedulable_nodes-nodes-managing","nodes-nodes-working-setting-booleans","nodes-nodes-kernel-arguments_nodes-nodes-managing","nodes-nodes-managing-max-pods","nodes-nodes-managing-max-pods-about_nodes-nodes-managing-max-pods","nodes-node-tuning-operator","accessing-an-example-node-tuning-operator-specification_nodes-node-tuning-operator","custom-tuning-specification_nodes-node-tuning-operator","custom-tuning-default-profiles-set_nodes-node-tuning-operator","supported-tuned-daemon-plug-ins_nodes-node-tuning-operator","poison-pill-operator-remediate-nodes","about-poison-pill-operator_poison-pill-operator-remediate-nodes","understanding-poison-pill-operator-config_poison-pill-operator-remediate-nodes","installing-poison-pill-operator-using-web-console_poison-pill-operator-remediate-nodes","installing-poison-pill-operator-using-cli_poison-pill-operator-remediate-nodes","configuring-machine-health-check-with-poison-pill_poison-pill-operator-remediate-nodes","troubleshooting-poison-pill-operator_poison-pill-operator-remediate-nodes","general-troubleshooting-poison-pill-operator_poison-pill-operator-remediate-nodes","checking-daemon-set_poison-pill-operator-remediate-nodes","unsuccessful_remediationpoison-pill-operator-remediate-nodes","daemon-set-exists_poison-pill-operator-remediate-nodes","additional-resources-poison-pill-operator-installation","nodes-nodes-rebooting","nodes-nodes-rebooting-infrastructure_nodes-nodes-rebooting","nodes-nodes-rebooting-affinity_nodes-nodes-rebooting","nodes-nodes-rebooting-router_nodes-nodes-rebooting","nodes-nodes-rebooting-gracefully_nodes-nodes-rebooting","nodes-nodes-garbage-collection","nodes-nodes-garbage-collection-containers_nodes-nodes-configuring","nodes-nodes-garbage-collection-images_nodes-nodes-configuring","nodes-nodes-garbage-collection-configuring_nodes-nodes-configuring","nodes-nodes-resources-configuring","nodes-nodes-resources-configuring-about_nodes-nodes-resources-configuring","computing-allocated-resources_nodes-nodes-resources-configuring","allocate-node-enforcement_nodes-nodes-resources-configuring","allocate-eviction-thresholds_nodes-nodes-resources-configuring","allocate-scheduler-policy_nodes-nodes-resources-configuring","nodes-nodes-resources-configuring-auto_nodes-nodes-resources-configuring","nodes-nodes-resources-configuring-setting_nodes-nodes-resources-configuring","nodes-nodes-resources-cpus","nodes-nodes-resources-cpus-reserve_nodes-nodes-resources-cpus","nodes-nodes-tls","tls-profiles-understanding_nodes-nodes-tls","tls-profiles-kubelet-configuring_nodes-nodes-tls","machine-config-daemon-metrics","machine-config-daemon-metrics_machine-config-operator","nodes-nodes-creating-infrastructure-nodes","infrastructure-components_creating-infrastructure-nodes","creating-an-infra-node_creating-infrastructure-nodes","/documentation/openshift_container_platform/4.8/html/nodes/working-with-nodes",{"title":7697,"visible":10,"weight":453,"urlFragment":7698,"anchor":16,"singlePageAnchor":7698,"subChapters":7699,"url":7747,"docTitle":7438},"Working with containers","working-with-containers",[7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711,7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746],"nodes-containers-using","nodes-containers-init","nodes-containers-init-about_nodes-containers-init","nodes-containers-init-creating_nodes-containers-init","nodes-containers-volumes","nodes-containers-volumes-about_nodes-containers-volumes","nodes-containers-volumes-cli_nodes-containers-volumes","nodes-containers-volumes-listing_nodes-containers-volumes","nodes-containers-volumes-adding_nodes-containers-volumes","nodes-containers-volumes-updating_nodes-containers-volumes","nodes-containers-volumes-removing_nodes-containers-volumes","nodes-containers-volumes-subpath_nodes-containers-volumes","nodes-containers-projected-volumes","nodes-containers-projected-volumes-about_nodes-containers-projected-volumes","projected-volumes-examples_nodes-containers-projected-volumes","projected-volumes-pathing_nodes-containers-projected-volumes","nodes-containers-projected-volumes-creating_nodes-containers-projected-volumes","nodes-containers-downward-api","nodes-containers-projected-volumes-about_nodes-containers-downward-api","nodes-containers-downward-api-container-values_nodes-containers-downward-api","nodes-containers-downward-api-container-values-envars_nodes-containers-downward-api","nodes-containers-downward-api-container-values-plugin_nodes-containers-downward-api","nodes-containers-downward-api-container-resources-api_nodes-containers-downward-api","nodes-containers-downward-api-container-resources-envars_nodes-containers-downward-api","nodes-containers-downward-api-container-resources-plugin_nodes-containers-downward-api","nodes-containers-downward-api-container-secrets_nodes-containers-downward-api","nodes-containers-downward-api-container-configmaps_nodes-containers-downward-api","nodes-containers-downward-api-container-envars_nodes-containers-downward-api","nodes-containers-downward-api-container-escaping_nodes-containers-downward-api","nodes-containers-copying-files","nodes-containers-copying-files-about_nodes-containers-copying-files","requirements","nodes-containers-copying-files-procedure_nodes-containers-copying-files","nodes-containers-copying-files-rsync_nodes-containers-copying-files","nodes-containers-remote-commands","nodes-containers-remote-commands-about_nodes-containers-remote-commands","nodes-containers-remote-commands-protocol_nodes-containers-remote-commands","nodes-containers-port-forwarding","nodes-containers-port-forwarding-about_nodes-containers-port-forwarding","nodes-containers-port-forwarding-using_nodes-containers-port-forwarding","nodes-containers-port-forwarding-protocol_nodes-containers-port-forwarding","nodes-containers-sysctls","nodes-containers-sysctls-about_nodes-containers-using","namespaced-vs-node-level-sysctls","safe-vs-unsafe-sysclts","nodes-containers-sysctls-setting_nodes-containers-using","nodes-containers-sysctls-unsafe_nodes-containers-using","/documentation/openshift_container_platform/4.8/html/nodes/working-with-containers",{"title":7749,"visible":10,"weight":468,"urlFragment":7750,"anchor":16,"singlePageAnchor":7750,"subChapters":7751,"url":7805,"docTitle":7438},"Working with clusters","working-with-clusters",[7752,7753,7754,7755,7756,7757,7758,7759,7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804],"nodes-containers-events","nodes-containers-events-about_nodes-containers-events","nodes-containers-events-viewing-cli_nodes-containers-events","nodes-containers-events-list_nodes-containers-events","nodes-cluster-resource-levels","nodes-cluster-resource-levels-about_nodes-cluster-resource-levels","nodes-cluster-resource-levels-command_nodes-cluster-resource-levels","nodes-cluster-resource-levels-job_nodes-cluster-resource-levels","nodes-cluster-limit-ranges","nodes-cluster-limit-ranges-about_nodes-cluster-limit-ranges","nodes-cluster-limit-ranges-limits_nodes-cluster-limit-ranges","nodes-cluster-limit-container-limits","nodes-cluster-limit-pod-limits","nodes-cluster-limit-image-limits","nodes-cluster-limit-stream-limits","nodes-cluster-limit-pvc-limits","nodes-cluster-limit-creating_nodes-cluster-limit-ranges","nodes-cluster-limit-viewing_nodes-cluster-limit-ranges","nodes-cluster-limit-ranges-deleting_nodes-cluster-limit-ranges","nodes-cluster-resource-configure","nodes-cluster-resource-configure-about_nodes-cluster-resource-configure","nodes-cluster-resource-configure-about-memory_nodes-cluster-resource-configure","nodes-cluster-resource-configure-jdk_nodes-cluster-resource-configure","nodes-cluster-resource-configure-jdk-heap_nodes-cluster-resource-configure","nodes-cluster-resource-configure-jdk-unused_nodes-cluster-resource-configure","nodes-cluster-resource-configure-jdk-proc_nodes-cluster-resource-configure","nodes-cluster-resource-configure-request-limit_nodes-cluster-resource-configure","nodes-cluster-resource-configure-oom_nodes-cluster-resource-configure","nodes-cluster-resource-configure-evicted_nodes-cluster-resource-configure","nodes-cluster-overcommit","nodes-cluster-overcommit-resource-requests_nodes-cluster-overcommit","nodes-cluster-resource-override_nodes-cluster-overcommit","nodes-cluster-resource-override-deploy-console_nodes-cluster-overcommit","nodes-cluster-resource-override-deploy-cli_nodes-cluster-overcommit","nodes-cluster-resource-configure_nodes-cluster-overcommit","nodes-cluster-node-overcommit_nodes-cluster-overcommit","nodes-cluster-overcommit-reserving-memory_nodes-cluster-overcommit","understanding-container-CPU-requests_nodes-cluster-overcommit","understanding-memory-requests-container_nodes-cluster-overcommit","nodes-cluster-overcommit-qos-about_nodes-cluster-overcommit","qos-about-reserve_nodes-cluster-overcommit","nodes-qos-about-swap_nodes-cluster-overcommit","nodes-cluster-overcommit-configure-nodes_nodes-cluster-overcommit","nodes-cluster-overcommit-node-enforcing_nodes-cluster-overcommit","nodes-cluster-overcommit-node-resources_nodes-cluster-overcommit","nodes-cluster-overcommit-node-disable_nodes-cluster-overcommit","nodes-cluster-project-overcommit_nodes-cluster-overcommit","nodes-cluster-overcommit-project-disable_nodes-cluster-overcommit","nodes-cluster-overcommit-addtl-resources","nodes-cluster-enabling","nodes-cluster-enabling-features-about_nodes-cluster-enabling","nodes-cluster-enabling-features-console_nodes-cluster-enabling","nodes-cluster-enabling-features-cli_nodes-cluster-enabling","/documentation/openshift_container_platform/4.8/html/nodes/working-with-clusters",{"title":7807,"visible":10,"weight":869,"urlFragment":7808,"anchor":16,"singlePageAnchor":7808,"subChapters":7809,"url":7814,"docTitle":7438},"Remote worker nodes on the network edge","remote-worker-nodes-on-the-network-edge",[7810,7811,7812,7813],"nodes-edge-remote-workers","nodes-edge-remote-workers-network_nodes-edge-remote-workers","nodes-edge-remote-workers-power_nodes-edge-remote-workers","nodes-edge-remote-workers-strategies_nodes-edge-remote-workers","/documentation/openshift_container_platform/4.8/html/nodes/remote-worker-nodes-on-the-network-edge",{"title":7816,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":7817,"url":7818,"docTitle":7819,"sections":7820},"Sandboxed Containers Support for OpenShift",[],"/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/index","sandboxed_containers_support_for_openshift",[7821,7834,7842,7858,7870],{"title":7822,"visible":10,"weight":23,"urlFragment":7823,"anchor":16,"singlePageAnchor":7823,"subChapters":7824,"url":7833,"docTitle":7819},"{sandboxed-containers-first} 1.0 release notes","sandboxed-containers-4-8-release-notes",[7825,7826,7827,7828,7829,7830,7831,7832],"ocp-1-0-about-this-release","sandboxed-containers-1-0-new-features-and-enhancements","sandboxed-containers-support-in-tech-preview","sandboxed-containers-1-0-known-issues","sandboxed-containers-1-0-asynchronous-errata-updates","sandboxed-containers-1-0-2","sandboxed-containers-1-0-1","sandboxed-containers-1-0-0","/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/sandboxed-containers-4-8-release-notes",{"title":7835,"visible":10,"weight":35,"urlFragment":7836,"anchor":16,"singlePageAnchor":7836,"subChapters":7837,"url":7841,"docTitle":7819},"Understanding OpenShift sandboxed containers","understanding-sandboxed-containers",[7838,7839,7840],"sandboxed-containers-common-terms_understanding-sandboxed-containers","sandboxed-containers-building-blocks_understanding-sandboxed-containers","sandboxed-containers-rhcos-extensions_understanding-sandboxed-containers","/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/understanding-sandboxed-containers",{"title":7843,"visible":10,"weight":46,"urlFragment":7844,"anchor":16,"singlePageAnchor":7844,"subChapters":7845,"url":7857,"docTitle":7819},"Deploying OpenShift sandboxed containers workloads","deploying-sandboxed-containers-workloads",[7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856],"sandboxed-containers-preparing-openshift-cluster_deploying-sandboxed-containers","sandboxed-containers-additional-resource-requirements_deploying-sandboxed-containers","deploying-openshift-sandboxed-containers-operator-using-the-web-console","sandboxed-containers-installing-operator-web-console_deploying-sandboxed-containers","sandboxed-containers-viewing-workloads-from-web-console_deploying-sandboxed-containers","deploying-openshift-sandboxed-containers-operator-using-the-cli","sandboxed-containers-installing-operator-cli_deploying-sandboxed-containers","sandboxed-containers-triggering-installation-kata-runtime_deploying-sandboxed-containers","sandboxed-containers-selecting-nodes_deploying-sandboxed-containers","sandboxed-containers-scheduling-workloads_deploying-sandboxed-containers","sandboxed-containers-viewing-workloads-from-cli_deploying-sandboxed-containers","/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/deploying-sandboxed-containers-workloads",{"title":7859,"visible":10,"weight":68,"urlFragment":7860,"anchor":16,"singlePageAnchor":7860,"subChapters":7861,"url":7869,"docTitle":7819},"Uninstalling OpenShift sandboxed containers","uninstalling-sandboxed-containers",[7862,7863,7864,7865,7866,7867,7868],"uninstalling-openshift-sandboxed-containers-using-the-web-console","sandboxed-containers-deleting-operator-deployment-cr_uninstalling-sandboxed-containers","sandboxed-containers-deleting-namespace-web-console_uninstalling-sandboxed-containers","sandboxed-containers-deleting-operator-web-console_uninstalling-sandboxed-containers","uninstalling-kata-runtime-from-the-cli","sandboxed-containers-deleting-resources_uninstalling-sandboxed-containers","sandboxed-containers-deleting-operator_uninstalling-sandboxed-containers","/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/uninstalling-sandboxed-containers",{"title":7871,"visible":10,"weight":435,"urlFragment":7872,"anchor":16,"singlePageAnchor":7872,"subChapters":7873,"url":7876,"docTitle":7819},"Upgrade OpenShift sandboxed containers","upgrade-sandboxed-containers",[7874,7875],"sandboxed-containers-upgrade-operator","sandboxed-containers-upgrade-artifacts","/documentation/openshift_container_platform/4.8/html/sandboxed_containers_support_for_openshift/upgrade-sandboxed-containers",{"title":7878,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":7879,"url":7880,"docTitle":7881,"sections":7882},"Operators",[],"/documentation/openshift_container_platform/4.8/html/operators/index","operators",[7883,7891,7997,8010,8065,8248],{"title":7884,"visible":10,"weight":23,"urlFragment":7885,"anchor":16,"singlePageAnchor":7885,"subChapters":7886,"url":7890,"docTitle":7881},"Operators overview","operators-overview",[7887,7888,7889],"operators-overview-developer-tasks","operators-overview-administrator-tasks","operators-overview-next-steps","/documentation/openshift_container_platform/4.8/html/operators/operators-overview",{"title":7892,"visible":10,"weight":35,"urlFragment":7893,"anchor":16,"singlePageAnchor":7893,"subChapters":7894,"url":7996,"docTitle":7881},"Understanding Operators","understanding-operators",[7895,7896,7897,7898,7899,7900,7901,7902,7903,7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,1546,7967,7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983,7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995],"olm-what-operators-are","olm-why-use-operators_olm-what-operators-are","olm-operator-framework_olm-what-operators-are","olm-maturity-model_olm-what-operators-are","olm-packaging-format","olm-bundle-format_olm-packaging-format","olm-bundle-format-manifests_olm-packaging-format","olm-bundle-format-annotations_olm-packaging-format","olm-bundle-format-dependencies_olm-packaging-format","olm-about-opm_olm-packaging-format","olm-common-terms","olm-common-terms-glossary_olm-common-terms","olm-common-terms-bundle_olm-common-terms","olm-common-terms-bundle-image_olm-common-terms","olm-common-terms-catalogsource_olm-common-terms","olm-common-terms-channel_olm-common-terms","olm-common-terms-channel-head_olm-common-terms","olm-common-terms-csv_olm-common-terms","olm-common-terms-dependency_olm-common-terms","olm-common-terms-index-image_olm-common-terms","olm-common-terms-installplan_olm-common-terms","olm-common-terms-operatorgroup_olm-common-terms","olm-common-terms-package_olm-common-terms","olm-common-terms-registry_olm-common-terms","olm-common-terms-subscription_olm-common-terms","olm-common-terms-update-graph_olm-common-terms","operator-lifecycle-manager-olm","olm-understanding-olm","olm-overview_olm-understanding-olm","olm-resources_olm-understanding-olm","olm-csv_olm-understanding-olm","olm-catalogsource_olm-understanding-olm","olm-subscription_olm-understanding-olm","olm-installplan_olm-understanding-olm","olm-operatorgroups-about_olm-understanding-olm","olm-about-operatorconditions_olm-understanding-olm","olm-arch","olm-architecture_olm-arch","olm-arch-olm-operator_olm-arch","olm-arch-catalog-operator_olm-arch","olm-arch-catalog-registry_olm-arch","olm-workflow","olm-upgrades_olm-workflow","olm-upgrades-example-upgrade-path_olm-workflow","olm-upgrades-skipping_olm-workflow","olm-upgrades-replacing-multiple_olm-workflow","olm-upgrades-z-stream_olm-workflow","olm-understanding-dependency-resolution","olm-dependency-resolution-about_olm-understanding-dependency-resolution","olm-bundle-format-dependencies_olm-understanding-dependency-resolution","olm-dependency-resolution-preferences_olm-understanding-dependency-resolution","olm-dependency-catalog-priority_olm-understanding-dependency-resolution","olm-dependency-catalog-ordering_olm-understanding-dependency-resolution","olm-dependency-order-winthin-channel_olm-understanding-dependency-resolution","olm-dependency-preferences-other_olm-understanding-dependency-resolution","olm-dependency-sub-constraint_olm-understanding-dependency-resolution","olm-dependency-package-constraint_olm-understanding-dependency-resolution","olm-dependency-resolution-crd-upgrades_olm-understanding-dependency-resolution","olm-dependency-best-practices_olm-understanding-dependency-resolution","olm-dependency-caveats_olm-understanding-dependency-resolution","olm-dependency-resolution-examples_olm-understanding-dependency-resolution","olm-understanding-operatorgroups","olm-operatorgroups-about_olm-understanding-operatorgroups","olm-operatorgroups-membership_olm-understanding-operatorgroups","olm-operatorgroups-target-namespace_olm-understanding-operatorgroups","olm-operatorgroups-csv-annotations_olm-understanding-operatorgroups","olm-operatorgroups-provided-apis-annotation_olm-understanding-operatorgroups","olm-operatorgroups-rbac_olm-understanding-operatorgroups","olm-operatorgroups-copied-csvs_olm-understanding-operatorgroups","olm-operatorgroups-static_olm-understanding-operatorgroups","olm-operatorgroups-intersection_olm-understanding-operatorgroups","olm-operatorgroups-limitations","olm-operatorgroups-troubleshooting_olm-understanding-operatorgroups","olm-operatorconditions","olm-about-operatorconditions_olm-operatorconditions","olm-supported-operatorconditions_olm-operatorconditions","olm-upgradeable-operatorcondition_olm-operatorconditions","olm-operatorconditions-addtl-resources","olm-understanding-metrics","olm-metrics_olm-understanding-metrics","olm-webhooks","olm-webhooks-additional-resources","olm-understanding-operatorhub","olm-operatorhub-overview_olm-understanding-operatorhub","olm-operatorhub-arch_olm-understanding-operatorhub","olm-operatorhub-arch-operatorhub_crd_olm-understanding-operatorhub","olm-understanding-operatorhub-resources","olm-rh-catalogs","olm-about-catalogs_olm-rh-catalogs","olm-rh-catalogs_olm-rh-catalogs","crds","crd-extending-api-with-crds","crd-custom-resource-definitions_crd-extending-api-with-crds","crd-creating-custom-resources-definition_crd-extending-api-with-crds","crd-creating-aggregated-cluster-role_crd-extending-api-with-crds","crd-creating-custom-resources-from-file_crd-extending-api-with-crds","crd-inspecting-custom-resources_crd-extending-api-with-crds","crd-managing-resources-from-crds","crd-custom-resource-definitions_crd-managing-resources-from-crds","crd-creating-custom-resources-from-file_crd-managing-resources-from-crds","crd-inspecting-custom-resources_crd-managing-resources-from-crds","/documentation/openshift_container_platform/4.8/html/operators/understanding-operators",{"title":7998,"visible":10,"weight":46,"urlFragment":7999,"anchor":16,"singlePageAnchor":7999,"subChapters":8000,"url":8009,"docTitle":7881},"User tasks","user-tasks",[8001,8002,8003,8004,8005,8006,8007,8008],"olm-creating-apps-from-installed-operators","olm-creating-etcd-cluster-from-operator_olm-creating-apps-from-installed-operators","olm-installing-operators-in-namespace","olm-installing-operators-in-namespace-prereqs","olm-installing-operators-from-operatorhub_olm-installing-operators-in-namespace","olm-installing-from-operatorhub-using-web-console_olm-installing-operators-in-namespace","olm-installing-operator-from-operatorhub-using-cli_olm-installing-operators-in-namespace","olm-installing-specific-version-cli_olm-installing-operators-in-namespace","/documentation/openshift_container_platform/4.8/html/operators/user-tasks",{"title":8011,"visible":10,"weight":68,"urlFragment":8012,"anchor":16,"singlePageAnchor":8012,"subChapters":8013,"url":8064,"docTitle":7881},"Administrator tasks","administrator-tasks",[8014,8015,8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047,8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063],"olm-adding-operators-to-a-cluster","olm-installing-operators-from-operatorhub_olm-adding-operators-to-a-cluster","olm-installing-from-operatorhub-using-web-console_olm-adding-operators-to-a-cluster","olm-installing-operator-from-operatorhub-using-cli_olm-adding-operators-to-a-cluster","olm-installing-specific-version-cli_olm-adding-operators-to-a-cluster","olm-pod-placement_olm-adding-operators-to-a-cluster","olm-upgrading-operators","olm-preparing-upgrade_olm-upgrading-operators","olm-changing-update-channel_olm-upgrading-operators","olm-approving-pending-upgrade_olm-upgrading-operators","olm-deleting-operators-from-a-cluster","olm-deleting-operators-from-a-cluster-using-web-console_olm-deleting-operators-from-a-cluster","olm-deleting-operator-from-a-cluster-using-cli_olm-deleting-operators-from-a-cluster","olm-refresh-subs_olm-deleting-operators-from-a-cluster","olm-configuring-proxy-support","olm-overriding-proxy-settings_olm-configuring-proxy-support","olm-inject-custom-ca_olm-configuring-proxy-support","olm-status","olm-status-conditions_olm-status","olm-status-viewing-cli_olm-status","olm-cs-status-cli_olm-status","olm-managing-operatorconditions","olm-supported-operatorconditions_olm-managing-operatorconditions","olm-updating-use-operatorconditions_olm-managing-operatorconditions","olm-updating-use-operatorconditions-defaults_olm-managing-operatorconditions","olm-managing-operatorconditions-addtl-resources","olm-creating-policy","olm-policy-understanding_olm-creating-policy","olm-policy-scenarios_olm-creating-policy","olm-policy-workflow_olm-creating-policy","olm-policy-scoping-operator-install_olm-creating-policy","olm-policy-fine-grained-permissions_olm-creating-policy","olm-policy-catalog-access_olm-creating-policy","olm-policy-troubleshooting_olm-creating-policy","olm-managing-custom-catalogs","olm-managing-custom-catalogs-bundle-format-prereqs","olm-creating-index-image_olm-managing-custom-catalogs","olm-creating-catalog-from-index_olm-managing-custom-catalogs","olm-updating-index-image_olm-managing-custom-catalogs","olm-pruning-index-image_olm-managing-custom-catalogs","olm-accessing-images-private-registries_olm-managing-custom-catalogs","olm-restricted-networks-operatorhub_olm-managing-custom-catalogs","olm-removing-catalogs_olm-managing-custom-catalogs","olm-restricted-networks","olm-restricted-network-prereqs","olm-restricted-networks-operatorhub_olm-restricted-networks","olm-pruning-index-image_olm-restricted-networks","olm-mirror-catalog_olm-restricted-networks","olm-creating-catalog-from-index_olm-restricted-networks","olm-updating-index-image_olm-restricted-networks","/documentation/openshift_container_platform/4.8/html/operators/administrator-tasks",{"title":8066,"visible":10,"weight":435,"urlFragment":8067,"anchor":16,"singlePageAnchor":8067,"subChapters":8068,"url":8247,"docTitle":7881},"Developing Operators","developing-operators",[8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246],"osdk-about","osdk-about-what-are-operators","osdk-workflow_osdk-about","osdk-about-addtl-resources","osdk-installing-cli","osdk-installing-cli-linux-macos_osdk-installing-cli","osdk-upgrading-projects","osdk-upgrading-v130-to-v180_osdk-upgrading-projects","additional-resources_osdk-upgrading-projects","go-based-operators","osdk-golang-quickstart","osdk-common-prereqs_osdk-golang-quickstart","osdk-quickstart_osdk-golang-quickstart","osdk-golang-quickstart-next-steps","osdk-golang-tutorial","osdk-common-prereqs_osdk-golang-tutorial","osdk-create-project_osdk-golang-tutorial","osdk-project-file_osdk-golang-tutorial","osdk-golang-manager_osdk-golang-tutorial","osdk-golang-multi-group-apis_osdk-golang-tutorial","osdk-golang-create-api-controller_osdk-golang-tutorial","osdk-golang-define-api_osdk-golang-tutorial","osdk-golang-generate-crd_osdk-golang-tutorial","osdk-about-openapi-validation_osdk-golang-tutorial","osdk-golang-implement-controller_osdk-golang-tutorial","osdk-golang-controller-resources_osdk-golang-tutorial","osdk-golang-controller-configs_osdk-golang-tutorial","osdk-golang-controller-reconcile-loop_osdk-golang-tutorial","osdk-golang-controller-rbac-markers_osdk-golang-tutorial","osdk-run-operator_osdk-golang-tutorial","osdk-run-locally_osdk-golang-tutorial","osdk-run-deployment_osdk-golang-tutorial","osdk-bundle-deploy-olm_osdk-golang-tutorial","osdk-bundle-operator_osdk-golang-tutorial","osdk-deploy-olm_osdk-golang-tutorial","osdk-create-cr_osdk-golang-tutorial","osdk-golang-tutorial-addtl-resources","osdk-golang-project-layout","osdk-golang-project-layout_osdk-golang-project-layout","ansible-based-operators","osdk-ansible-quickstart","osdk-common-prereqs_osdk-ansible-quickstart","osdk-quickstart_osdk-ansible-quickstart","osdk-ansible-quickstart-next-steps","osdk-ansible-tutorial","osdk-common-prereqs_osdk-ansible-tutorial","osdk-create-project_osdk-ansible-tutorial","osdk-project-file_osdk-ansible-tutorial","osdk-ansible-create-api-controller_osdk-ansible-tutorial","osdk-ansible-modify-manager_osdk-ansible-tutorial","osdk-run-operator_osdk-ansible-tutorial","osdk-run-locally_osdk-ansible-tutorial","osdk-run-deployment_osdk-ansible-tutorial","osdk-bundle-deploy-olm_osdk-ansible-tutorial","osdk-bundle-operator_osdk-ansible-tutorial","osdk-deploy-olm_osdk-ansible-tutorial","osdk-create-cr_osdk-ansible-tutorial","osdk-ansible-tutorial-addtl-resources","osdk-ansible-project-layout","osdk-ansible-project-layout_osdk-ansible-project-layout","osdk-ansible-support","osdk-ansible-custom-resource-files_osdk-ansible-support","osdk-ansible-watches-file_osdk-ansible-support","osdk-ansible-watches-file-advanced_osdk-ansible-support","osdk-ansible-extra-variables_osdk-ansible-support","osdk-ansible-runner-directory_osdk-ansible-support","osdk-ansible-k8s-collection","osdk-ansible-installing-k8s-collection_osdk-ansible-k8s-collection","osdk-ansible-k8s-local_osdk-ansible-k8s-collection","osdk-ansible-k8s-collection-next-steps","osdk-ansible-inside-operator","osdk-ansible-custom-resource-files_osdk-ansible-inside-operator","osdk-ansible-inside-operator-local_osdk-ansible-inside-operator","osdk-run-deployment_osdk-ansible-inside-operator","osdk-ansible-inside-operator-logs_osdk-ansible-inside-operator","osdk-ansible-inside-operator-logs-view_osdk-ansible-inside-operator","osdk-ansible-inside-operator-logs-full-result_osdk-ansible-inside-operator","osdk-ansible-inside-operator-logs-verbose_osdk-ansible-inside-operator","osdk-ansible-cr-status","osdk-ansible-cr-status-about_osdk-ansible-cr-mgmt","osdk-ansible-cr-status-manual_osdk-ansible-cr-mgmt","helm-based-operators","osdk-helm-quickstart","osdk-common-prereqs_osdk-helm-quickstart","osdk-quickstart_osdk-helm-quickstart","osdk-helm-quickstart-next-steps","osdk-helm-tutorial","osdk-common-prereqs_osdk-helm-tutorial","osdk-create-project_osdk-helm-tutorial","osdk-helm-existing-chart_osdk-helm-tutorial","osdk-project-file_osdk-helm-tutorial","osdk-helm-logic_osdk-helm-tutorial","osdk-helm-sample-chart_osdk-helm-tutorial","osdk-helm-modify-cr_osdk-helm-tutorial","osdk-run-operator_osdk-helm-tutorial","osdk-run-locally_osdk-helm-tutorial","osdk-run-deployment_osdk-helm-tutorial","osdk-bundle-deploy-olm_osdk-helm-tutorial","osdk-bundle-operator_osdk-helm-tutorial","osdk-deploy-olm_osdk-helm-tutorial","osdk-create-cr_osdk-helm-tutorial","osdk-helm-tutorial-addtl-resources","osdk-helm-project-layout","osdk-helm-project-layout_osdk-helm-project-layout","osdk-helm-support","osdk-helm-charts_osdk-helm-support","osdk-generating-csvs","osdk-how-csv-gen-works_osdk-generating-csvs","osdk-csv-bundle-files_osdk-generating-csvs","osdk-csv-ver_osdk-generating-csvs","osdk-manually-defined-csv-fields_osdk-generating-csvs","osdk-csv-manual-annotations_osdk-generating-csvs","olm-enabling-operator-for-restricted-network_osdk-generating-csvs","olm-enabling-operator-for-multi-arch_osdk-generating-csvs","olm-arch-os-support_osdk-generating-csvs","osdk-suggested-namespace_osdk-generating-csvs","osdk-operatorconditions_osdk-generating-csvs","olm-defining-csv-webhook_osdk-generating-csvs","olm-webhook-considerations_osdk-generating-csvs","osdk-crds_osdk-generating-csvs","osdk-crds-owned_osdk-generating-csvs","osdk-crds-required_osdk-generating-csvs","olm-dependency-resolution-crd-upgrades_osdk-generating-csvs","olm-dependency-resolution-adding-new-crd-version_osdk-generating-csvs","olm-dependency-resolution-removing-crd-version_osdk-generating-csvs","osdk-crds-templates_osdk-generating-csvs","osdk-hiding-internal-objects_osdk-generating-csvs","osdk-init-resource_osdk-generating-csvs","osdk-apiservices_osdk-generating-csvs","osdk-apiservices-owned_osdk-generating-csvs","osdk-apiservices-resource-creation_osdk-generating-csvs","osdk-apiservices-service-certs_osdk-generating-csvs","osdk-apiservice-required_osdk-generating-csvs","osdk-working-bundle-images","osdk-bundle-operator_osdk-working-bundle-images","osdk-deploy-olm_osdk-working-bundle-images","osdk-publish-catalog_osdk-working-bundle-images","osdk-bundle-upgrade-olm_osdk-working-bundle-images","osdk-control-compat_osdk-working-bundle-images","osdk-working-bundle-images-additional-resources","osdk-scorecard","osdk-about-scorecard_osdk-scorecard","osdk-scorecard-config_osdk-scorecard","osdk-scorecard-tests_osdk-scorecard","osdk-scorecard-run_osdk-scorecard","osdk-scorecard-output_osdk-scorecard","osdk-scorecard-select-tests_osdk-scorecard","osdk-scorecard-parallel_osdk-scorecard","osdk-scorecard-custom-tests_osdk-scorecard","osdk-monitoring-prometheus","osdk-monitoring-prometheus-operator-support_osdk-monitoring-prometheus","osdk-monitoring-prometheus-metrics-helper_osdk-monitoring-prometheus","osdk-monitoring-prometheus-metrics-helper-modifying-port_osdk-monitoring-prometheus","osdk-monitoring-prometheus-servicemonitor_osdk-monitoring-prometheus","osdk-monitoring-prometheus-servicemonitor-creating_osdk-monitoring-prometheus","osdk-leader-election","osdk-leader-election-types_osdk-leader-election","osdk-leader-for-life-election_osdk-leader-election","osdk-leader-with-lease-election_osdk-leader-election","osdk-pkgman-to-bundle","osdk-about-pkg-format-migration_osdk-pkgman-to-bundle","osdk-migrating-pkgman_osdk-pkgman-to-bundle","osdk-cli-ref","osdk-cli-ref-bundle_osdk-cli-ref","osdk-cli-ref-bundle-validate_osdk-cli-ref","osdk-cli-ref-cleanup_osdk-cli-ref","osdk-cli-ref-completion_osdk-cli-ref","osdk-cli-ref-create_osdk-cli-ref","osdk-cli-ref-create-api_osdk-cli-ref","osdk-cli-ref-generate_osdk-cli-ref","osdk-cli-ref-generate-bundle_osdk-cli-ref","osdk-cli-ref-generate-kustomize_osdk-cli-ref","osdk-cli-ref-generate-kustomize-manifests_osdk-cli-ref","osdk-cli-ref-init_osdk-cli-ref","osdk-cli-ref-run_osdk-cli-ref","osdk-cli-ref-run-bundle_osdk-cli-ref","osdk-cli-ref-run-bundle-upgrade_osdk-cli-ref","osdk-cli-ref-scorecard_osdk-cli-ref","/documentation/openshift_container_platform/4.8/html/operators/developing-operators",{"title":8249,"visible":10,"weight":453,"urlFragment":8250,"anchor":16,"singlePageAnchor":8250,"subChapters":8251,"url":8282,"docTitle":7881},"Cluster Operators reference","cluster-operators-ref",[8252,8253,8254,8255,8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277,8278,8279,8280,8281],"cloud-credential-operator_cluster-operators-ref","cluster-authentication-operator_cluster-operators-ref","cluster-autoscaler-operator_cluster-operators-ref","cluster-config-operator_cluster-operators-ref","cluster-csi-snapshot-controller-operator_cluster-operators-ref","cluster-image-registry-operator_cluster-operators-ref","cluster-machine-approver-operator_cluster-operators-ref","cluster-monitoring-operator_cluster-operators-ref","cluster-network-operator_cluster-operators-ref","cluster-openshift-controller-manager-operator_cluster-operators-ref","cluster-samples-operator_cluster-operators-ref","cluster-storage-operator_cluster-operators-ref","cluster-version-operator_cluster-operators-ref","console-operator_cluster-operators-ref","dns-operator_cluster-operators-ref","etcd-cluster-operator_cluster-operators-ref","ingress-operator_cluster-operators-ref","insights-operator_cluster-operators-ref","kube-apiserver-operator_cluster-operators-ref","kube-controller-manager-operator_cluster-operators-ref","cluster-kube-scheduler-operator_cluster-operators-ref","cluster-kube-storage-version-migrator-operator_cluster-operators-ref","machine-api-operator_cluster-operators-ref","machine-config-operator_cluster-operators-ref","marketplace-operator_cluster-operators-ref","about-node-tuning-operator_cluster-operators-ref","openshift-apiserver-operator_cluster-operators-ref","cluster-operators-ref-olm","openshift-service-ca-operator_cluster-operators-ref","vsphere-problem-detector-operator_cluster-operators-ref","/documentation/openshift_container_platform/4.8/html/operators/cluster-operators-ref",{"title":8284,"visible":10,"categoryName":10,"sections":8285},"Monitor",[8286,8699,8808,9064],{"title":8287,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":8288,"url":8289,"docTitle":5015,"sections":8290},"Logging",[],"/documentation/openshift_container_platform/4.8/html/logging/index",[8291,8420,8440,8449,8493,8499,8506,8533,8541,8547,8554,8562,8595,8601,8606,8610,8614,8619,8623,8627,8631,8635,8639,8643,8648,8653,8658,8692],{"title":8292,"visible":10,"weight":23,"urlFragment":8293,"anchor":16,"singlePageAnchor":8293,"subChapters":8294,"url":8419,"docTitle":5015},"Release notes for Logging","release-notes",[8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418],"cluster-logging-release-notes-5-4-9_cluster-logging-release-notes-v5x","openshift-logging-5-4-9-bug-fixes","openshift-logging-5-4-9-CVEs","cluster-logging-release-notes-5-4-8_cluster-logging-release-notes-v5x","openshift-logging-5-4-8-bug-fixes","openshift-logging-5-4-8-CVEs","cluster-logging-release-notes-5-4-6_cluster-logging-release-notes-v5x","openshift-logging-5-4-6-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-4-6-cves_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-4-5_cluster-logging-release-notes-v5x","openshift-logging-5-4-5-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-4-5-cves_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-4-4","openshift-logging-5-4-4-bug-fixes","openshift-logging-5-4-4-cves","cluster-logging-release-notes-5-4-3","openshift-logging-elasticsearch-dep","openshift-logging-5-4-3-bug-fixes","openshift-logging-5-4-3-CVEs","cluster-logging-release-notes-5-4-2","openshift-logging-5-4-2-bug-fixes","openshift-logging-5-4-2-CVEs","cluster-logging-release-notes-5-4-1_cluster-logging-release-notes-v5x","openshift-logging-5-4-1-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-4-1-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-4-0_cluster-logging-release-notes-v5x","openshift-logging-5-4-0-tech-prev_cluster-logging-release-notes-v5x","cluster-logging-about-vector","cluster-logging-enabling-vector","cluster-logging-about-loki","deploying-the-lokistack","openshift-logging-5-4-0-bug-fixes_cluster-logging-release-notes-v5x","cves","cluster-logging-release-notes-5-3-13_cluster-logging-release-notes-v5x","openshift-logging-5-3-13-bug-fixes","openshift-logging-5-3-13-CVEs","cluster-logging-release-notes-5-3-12_cluster-logging-release-notes-v5x","openshift-logging-5-3-12-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-3-12-cves_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-3-11_cluster-logging-release-notes-v5x","openshift-logging-5-3-11-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-3-11-cves_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-3-10","openshift-logging-5-3-10-bug-fixes","openshift-logging-5-3-10-cves","cluster-logging-release-notes-5-3-9","openshift-logging-5-3-9-bug-fixes","openshift-logging-5-3-9-CVEs","cluster-logging-release-notes-5-3-8","openshift-logging-5-3-8-bug-fixes","openshift-logging-5-3-8-CVEs","cluster-logging-release-notes-5-3-7_cluster-logging-release-notes-v5x","openshift-logging-5-3-7-bug-fixes_cluster-logging-release-notes-v5x","cves-2","cluster-logging-release-notes-5-3-6_cluster-logging-release-notes-v5x","openshift-logging-5-3-6-bug-fixes_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-3-5_cluster-logging-release-notes-v5x","openshift-logging-5-3-5-bug-fixes_cluster-logging-release-notes-v5x","cves-3","cluster-logging-release-notes-5-3-4_cluster-logging-release-notes-v5x","openshift-logging-5-3-4-bug-fixes_cluster-logging-release-notes-v5x","cves-4","cluster-logging-release-notes-5-3-3_cluster-logging-release-notes-v5x","openshift-logging-5-3-3-bug-fixes","cves-5","cluster-logging-release-notes-5-3-2_cluster-logging-release-notes-v5x","openshift-logging-5-3-2-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-3-2-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-3-1_cluster-logging-release-notes-v5x","openshift-logging-5-3-1-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-3-1-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-3-0_cluster-logging-release-notes-v5x","openshift-logging-5-3-0-new-features-and-enhancements_cluster-logging-release-notes-v5x","openshift-logging-5-3-0-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-3-0-known-issues_cluster-logging-release-notes-v5x","openshift-logging-5-3-0-deprecated-removed-features_cluster-logging-release-notes-v5x","openshift-logging-5-3-0-legacy-forwarding_cluster-logging-release-notes-v5x","openshift-logging-5-3-0-legacy-forwarding-config_cluster-logging-release-notes-v5x","openshift-logging-5-3-0-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-13","openshift-logging-5-2-13-bug-fixes","openshift-logging-5-2-13-cves","cluster-logging-release-notes-5-2-12","openshift-logging-5-2-12-bug-fixes","openshift-logging-5-2-12-CVEs","cluster-logging-release-notes-5-2-11","openshift-logging-5-2-11-bug-fixes","openshift-logging-5-2-11-CVEs","cluster-logging-release-notes-5-2-10_cluster-logging-release-notes-v5x","openshift-logging-5-2-10-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-10-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-9_cluster-logging-release-notes-v5x","openshift-logging-5-2-9-bug-fixes_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-8_cluster-logging-release-notes-v5x","openshift-logging-5-2-8-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-8-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-7_cluster-logging-release-notes-v5x","openshift-logging-5-2-7-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-7-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-6_cluster-logging-release-notes-v5x","openshift-logging-5-2-6-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-6-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-5_cluster-logging-release-notes-v5x","openshift-logging-5-2-5-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-5-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-4_cluster-logging-release-notes-v5x","openshift-logging-5-2-4-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-4-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-3_cluster-logging-release-notes-v5x","openshift-logging-5-2-3-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-3-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-2_cluster-logging-release-notes-v5x","openshift-logging-5-2-2-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-2-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-1_cluster-logging-release-notes-v5x","openshift-logging-5-2-1-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-1-CVEs_cluster-logging-release-notes-v5x","cluster-logging-release-notes-5-2-0_cluster-logging-release-notes-v5x","openshift-logging-5-2-0-new-features-and-enhancements_cluster-logging-release-notes-v5x","openshift-logging-5-2-0-bug-fixes_cluster-logging-release-notes-v5x","openshift-logging-5-2-0-known-issues_cluster-logging-release-notes-v5x","openshift-logging-5-2-0-deprecated-removed-features_cluster-logging-release-notes-v5x","openshift-logging-5-2-0-legacy-forwarding_cluster-logging-release-notes-v5x","openshift-logging-5-2-0-CVEs_cluster-logging-release-notes-v5x","/documentation/openshift_container_platform/4.8/html/logging/release-notes",{"title":8421,"visible":10,"weight":35,"urlFragment":8422,"anchor":16,"singlePageAnchor":8422,"subChapters":8423,"url":8439,"docTitle":5015},"Understanding Red Hat OpenShift Logging","cluster-logging",[8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437,8438],"openshift-logging-common-terms_cluster-logging","cluster-logging-about_cluster-logging","cluster-logging-json-logging-about_cluster-logging","cluster-logging-collecting-storing-kubernetes-events-about_cluster-logging","cluster-logging-update-logging-about_cluster-logging","cluster-logging-view-cluster-dashboards-about_cluster-logging","cluster-logging-troubleshoot-logging-about_cluster-logging","cluster-logging-uninstall-logging-about_cluster-logging","cluster-logging-export-fields-about_cluster-logging","cluster-logging-about-components_cluster-logging","cluster-logging-about-collector_cluster-logging","cluster-logging-about-logstore_cluster-logging","cluster-logging-about-visualizer_cluster-logging","cluster-logging-eventrouter-about_cluster-logging","cluster-logging-forwarding-about_cluster-logging","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging",{"title":8441,"visible":10,"weight":46,"urlFragment":8442,"anchor":16,"singlePageAnchor":8442,"subChapters":8443,"url":8448,"docTitle":5015},"Installing OpenShift Logging","cluster-logging-deploying",[8444,2703,8445,2730,8446,8447],"cluster-logging-deploy-console_cluster-logging-deploying","cluster-logging-deploy-cli_cluster-logging-deploying","cluster-logging-visualizer-indices_cluster-logging-deploying","cluster-logging-deploy-multitenant_cluster-logging-deploying","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-deploying",{"title":8450,"visible":10,"weight":68,"urlFragment":8451,"anchor":16,"singlePageAnchor":8451,"subChapters":8452,"url":8492,"docTitle":5015},"Configuring your Logging deployment","configuring-your-logging-deployment",[8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491],"cluster-logging-configuring-cr","cluster-logging-configuring-crd_cluster-logging-configuring-cr","cluster-logging-collector","cluster-logging-maintenance-support-about_cluster-logging-collector","cluster-logging-collector-pod-location_cluster-logging-collector","cluster-logging-collector-limits_cluster-logging-collector","cluster-logging-collector-tuning_cluster-logging-collector","cluster-logging-removing-unused-components-if-no-elasticsearch_cluster-logging-collector","cluster-logging-store","cluster-logging-elasticsearch-audit_cluster-logging-store","cluster-logging-elasticsearch-retention_cluster-logging-store","cluster-logging-logstore-limits_cluster-logging-store","cluster-logging-elasticsearch-ha_cluster-logging-store","cluster-logging-elasticsearch-scaledown_cluster-logging-store","cluster-logging-elasticsearch-storage_cluster-logging-store","cluster-logging-elasticsearch-persistent-storage-empty_cluster-logging-store","cluster-logging-manual-rollout-rolling_cluster-logging-store","cluster-logging-elasticsearch-exposing_cluster-logging-store","cluster-logging-visualizer","cluster-logging-memory-limits_cluster-logging-visualizer","cluster-logging-kibana-scaling_cluster-logging-visualizer","cluster-logging-storage","cluster-logging-deploy-storage-considerations_cluster-logging-storage","cluster-logging-storage-considerations-addtl-resources","cluster-logging-memory","cluster-logging-memory-limits_cluster-logging-memory","cluster-logging-tolerations","cluster-logging-elasticsearch-tolerations_cluster-logging-tolerations","cluster-logging-kibana-tolerations_cluster-logging-tolerations","cluster-logging-collector-tolerations_cluster-logging-tolerations","cluster-logging-tolerations-addtl-resources","cluster-logging-moving","infrastructure-moving-logging_cluster-logging-moving","cluster-logging-systemd","cluster-logging-systemd-scaling_cluster-logging-systemd","cluster-logging-maintenance-and-support","cluster-logging-maintenance-support-about_cluster-logging-unsupported","cluster-logging-maintenance-support-list_cluster-logging-unsupported","unmanaged-operators_cluster-logging-unsupported","/documentation/openshift_container_platform/4.8/html/logging/configuring-your-logging-deployment",{"title":8494,"visible":10,"weight":435,"urlFragment":8495,"anchor":16,"singlePageAnchor":8495,"subChapters":8496,"url":8498,"docTitle":5015},"Viewing logs for a resource","vewing-resource-logs",[8497],"viewing-resource-logs-cli-console_viewing-resource-logs","/documentation/openshift_container_platform/4.8/html/logging/vewing-resource-logs",{"title":8500,"visible":10,"weight":453,"urlFragment":8501,"anchor":16,"singlePageAnchor":8501,"subChapters":8502,"url":8505,"docTitle":5015},"Viewing cluster logs by using Kibana","cluster-logging-visualizer-using",[8503,8504],"cluster-logging-visualizer-indices_cluster-logging-visualizer","cluster-logging-visualizer-kibana_cluster-logging-visualizer","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-visualizer-using",{"title":8507,"visible":10,"weight":468,"urlFragment":8508,"anchor":16,"singlePageAnchor":8508,"subChapters":8509,"url":8532,"docTitle":5015},"Forwarding logs to external third-party logging systems","cluster-logging-external",[8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531],"cluster-logging-collector-log-forwarding-about_cluster-logging-external","creating-a-secret","cluster-logging-collector-log-forwarding-supported-plugins-5-1_cluster-logging-external","cluster-logging-collector-log-forwarding-supported-plugins-5-2_cluster-logging-external","cluster-logging-collector-log-forwarding-supported-plugins-5-3_cluster-logging-external","cluster-logging-collector-log-forwarding-supported-plugins-5-4_cluster-logging-external","cluster-logging-collector-log-forwarding-supported-plugins-5-5_cluster-logging-external","cluster-logging-collector-log-forwarding-supported-plugins-5-6_cluster-logging-external","cluster-logging-collector-log-forward-es_cluster-logging-external","cluster-logging-collector-log-forward-fluentd_cluster-logging-external","cluster-logging-collector-log-forward-nano-precision","cluster-logging-collector-log-forward-syslog_cluster-logging-external","cluster-logging-collector-log-forward-examples-syslog-log-source","cluster-logging-collector-log-forward-examples-syslog-parms","cluster-logging-collector-log-forward-examples-syslog-5424","cluster-logging-collector-log-forward-cloudwatch_cluster-logging-external","cluster-logging-collector-log-forward-loki_cluster-logging-external","cluser-logging-troubleshooting-loki-entry-out-of-order-messages_cluster-logging-external","cluster-logging-collector-log-forward-project_cluster-logging-external","cluster-logging-collector-log-forward-logs-from-application-pods_cluster-logging-external","cluster-logging-collecting-ovn-audit-logs_cluster-logging-external","cluster-logging-troubleshooting-log-forwarding_cluster-logging-external","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-external",{"title":8534,"visible":10,"weight":869,"urlFragment":8535,"anchor":16,"singlePageAnchor":8535,"subChapters":8536,"url":8540,"docTitle":5015},"Enabling JSON logging","cluster-logging-enabling-json-logging",[8537,8538,8539],"cluster-logging-json-log-forwarding_cluster-logging-enabling-json-logging","cluster-logging-configuration-of-json-log-data-for-default-elasticsearch_cluster-logging-enabling-json-logging","cluster-logging-forwarding-json-logs-to-the-default-elasticsearch_cluster-logging-enabling-json-logging","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-enabling-json-logging",{"title":8542,"visible":10,"weight":877,"urlFragment":8543,"anchor":16,"singlePageAnchor":8543,"subChapters":8544,"url":8546,"docTitle":5015},"Collecting and storing Kubernetes events","cluster-logging-eventrouter",[8545],"cluster-logging-eventrouter-deploy_cluster-logging-eventrouter","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-eventrouter",{"title":8548,"visible":10,"weight":888,"urlFragment":8549,"anchor":16,"singlePageAnchor":8549,"subChapters":8550,"url":8553,"docTitle":5015},"Updating OpenShift Logging","cluster-logging-upgrading",[8551,8552],"cluster-logging-updating-logging-to-5-0_cluster-logging-upgrading","cluster-logging-updating-logging-to-5-1_cluster-logging-upgrading","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-upgrading",{"title":8555,"visible":10,"weight":899,"urlFragment":8556,"anchor":16,"singlePageAnchor":8556,"subChapters":8557,"url":8561,"docTitle":5015},"Viewing cluster dashboards","cluster-logging-dashboards",[8558,8559,8560],"cluster-logging-dashboards-access_cluster-logging-dashboards","cluster-logging-dashboards-logging_cluster-logging-dashboards","cluster-logging-dashboards-es_cluster-logging-dashboards","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-dashboards",{"title":8563,"visible":10,"weight":906,"urlFragment":8564,"anchor":16,"singlePageAnchor":8564,"subChapters":8565,"url":8594,"docTitle":5015},"Troubleshooting Logging","troubleshooting-logging",[8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593],"cluster-logging-cluster-status","cluster-logging-clo-status_cluster-logging-cluster-status","cluster-logging-clo-status-message_cluster-logging-cluster-status","cluster-logging-clo-status-example_cluster-logging-cluster-status","cluster-logging-log-store-status","cluster-logging-log-store-comp-viewing_cluster-logging-elasticsearch","cluster-logging-elasticsearch-status-message_cluster-logging-elasticsearch","cluster-logging-elasticsearch-status-comp_cluster-logging-elasticsearch","ref_cluster-logging-elasticsearch-cluster-status_cluster-logging-elasticsearch","cluster-logging-alerts","cluster-logging-collector-alerts-viewing_cluster-logging-alerts","cluster-logging-collector-alerts_cluster-logging-alerts","cluster-logging-elasticsearch-rules_cluster-logging-alerts","cluster-logging-must-gather","about-must-gather_cluster-logging-must-gather","cluster-logging-must-gather-prereqs","cluster-logging-must-gather-collecting_cluster-logging-must-gather","cluster-logging-troubleshooting-for-critical-alerts","elasticsearch-cluster-health-is-red","elasticsearch-cluster-health-is-yellow","elasticsearch-node-disk-low-watermark-reached","elasticsearch-node-disk-high-watermark-reached","elasticsearch-node-disk-flood-watermark-reached","elasticsearch-jvm-heap-use-is-high","aggregated-logging-system-cpu-is-high","elasticsearch-process-cpu-is-high","elasticsearch-disk-space-is-running-low","elasticsearch-filedescriptor-usage-is-high","/documentation/openshift_container_platform/4.8/html/logging/troubleshooting-logging",{"title":8596,"visible":10,"weight":915,"urlFragment":8597,"anchor":16,"singlePageAnchor":8597,"subChapters":8598,"url":8600,"docTitle":5015},"Uninstalling OpenShift Logging","cluster-logging-uninstall",[8599],"cluster-logging-uninstall_cluster-logging-uninstall","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-uninstall",{"title":8602,"visible":10,"weight":2799,"urlFragment":8603,"anchor":16,"singlePageAnchor":8603,"subChapters":8604,"url":8605,"docTitle":5015},"Log Record Fields","cluster-logging-exported-fields",[],"/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-exported-fields",{"title":8607,"visible":10,"weight":3064,"urlFragment":8607,"anchor":16,"singlePageAnchor":8607,"subChapters":8608,"url":8609,"docTitle":5015},"message",[],"/documentation/openshift_container_platform/4.8/html/logging/message",{"title":8611,"visible":10,"weight":3332,"urlFragment":8611,"anchor":16,"singlePageAnchor":8611,"subChapters":8612,"url":8613,"docTitle":5015},"structured",[],"/documentation/openshift_container_platform/4.8/html/logging/structured",{"title":8615,"visible":10,"weight":3388,"urlFragment":8616,"anchor":16,"singlePageAnchor":8616,"subChapters":8617,"url":8618,"docTitle":5015},"@timestamp","timestamp",[],"/documentation/openshift_container_platform/4.8/html/logging/timestamp",{"title":8620,"visible":10,"weight":3414,"urlFragment":8620,"anchor":16,"singlePageAnchor":8620,"subChapters":8621,"url":8622,"docTitle":5015},"hostname",[],"/documentation/openshift_container_platform/4.8/html/logging/hostname",{"title":8624,"visible":10,"weight":3429,"urlFragment":8624,"anchor":16,"singlePageAnchor":8624,"subChapters":8625,"url":8626,"docTitle":5015},"ipaddr4",[],"/documentation/openshift_container_platform/4.8/html/logging/ipaddr4",{"title":8628,"visible":10,"weight":3441,"urlFragment":8628,"anchor":16,"singlePageAnchor":8628,"subChapters":8629,"url":8630,"docTitle":5015},"ipaddr6",[],"/documentation/openshift_container_platform/4.8/html/logging/ipaddr6",{"title":8632,"visible":10,"weight":4653,"urlFragment":8632,"anchor":16,"singlePageAnchor":8632,"subChapters":8633,"url":8634,"docTitle":5015},"level",[],"/documentation/openshift_container_platform/4.8/html/logging/level",{"title":8636,"visible":10,"weight":4662,"urlFragment":8636,"anchor":16,"singlePageAnchor":8636,"subChapters":8637,"url":8638,"docTitle":5015},"pid",[],"/documentation/openshift_container_platform/4.8/html/logging/pid",{"title":8640,"visible":10,"weight":4674,"urlFragment":8640,"anchor":16,"singlePageAnchor":8640,"subChapters":8641,"url":8642,"docTitle":5015},"service",[],"/documentation/openshift_container_platform/4.8/html/logging/service",{"title":8644,"visible":10,"weight":8645,"urlFragment":8644,"anchor":16,"singlePageAnchor":8644,"subChapters":8646,"url":8647,"docTitle":5015},"tags",25,[],"/documentation/openshift_container_platform/4.8/html/logging/tags",{"title":8649,"visible":10,"weight":8650,"urlFragment":8649,"anchor":16,"singlePageAnchor":8649,"subChapters":8651,"url":8652,"docTitle":5015},"file",26,[],"/documentation/openshift_container_platform/4.8/html/logging/file",{"title":8654,"visible":10,"weight":8655,"urlFragment":8654,"anchor":16,"singlePageAnchor":8654,"subChapters":8656,"url":8657,"docTitle":5015},"offset",27,[],"/documentation/openshift_container_platform/4.8/html/logging/offset",{"title":8659,"visible":10,"weight":8660,"urlFragment":8661,"anchor":16,"singlePageAnchor":8661,"subChapters":8662,"url":8691,"docTitle":5015},"kubernetes",28,"cluster-logging-exported-fields-kubernetes_cluster-logging-exported-fields",[8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690],"kubernetes-pod_name","kubernetes-pod_id","kubernetes-namespace_name","kubernetes-namespace_id","kubernetes-host","kubernetes-container_name","kubernetes-annotations","kubernetes-labels","kubernetes-event","kubernetes-event-verb","kubernetes-event-metadata","kubernetes-event-metadata-name","kubernetes-event-metadata-namespace","kubernetes-event-metadata-selflink","kubernetes-event-metadata-uid","kubernetes-event-metadata-resourceversion","kubernetes-event-involvedobject","kubernetes-event-involvedobject-kind","kubernetes-event-involvedobject-namespace","kubernetes-event-involvedobject-name","kubernetes-event-involvedobject-uid","kubernetes-event-involvedobject-apiversion","kubernetes-event-involvedobject-resourceversion","kubernetes-event-reason","kubernetes-event-source_component","kubernetes-event-firsttimestamp","kubernetes-event-count","kubernetes-event-type","/documentation/openshift_container_platform/4.8/html/logging/cluster-logging-exported-fields-kubernetes_cluster-logging-exported-fields",{"title":8693,"visible":10,"weight":8694,"urlFragment":8695,"anchor":16,"singlePageAnchor":8695,"subChapters":8696,"url":8698,"docTitle":5015},"OpenShift",29,"openshift",[8697],"openshift-labels","/documentation/openshift_container_platform/4.8/html/logging/openshift",{"title":8700,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":8701,"url":8702,"docTitle":8703,"sections":8704},"Monitoring",[],"/documentation/openshift_container_platform/4.8/html/monitoring/index","monitoring",[8705,8717,8740,8752,8765,8787,8794,8801],{"title":8706,"visible":10,"weight":23,"urlFragment":8707,"anchor":16,"singlePageAnchor":8707,"subChapters":8708,"url":8716,"docTitle":8703},"Monitoring overview","monitoring-overview",[8709,8710,8711,8712,8713,8714,8715,1546,971],"about-openshift-monitoring","understanding-the-monitoring-stack_monitoring-overview","default-monitoring-components_monitoring-overview","default-monitoring-targets_monitoring-overview","components-for-monitoring-user-defined-projects_monitoring-overview","monitoring-targets-for-user-defined-projects_monitoring-overview","openshift-monitoring-common-terms_monitoring-overview","/documentation/openshift_container_platform/4.8/html/monitoring/monitoring-overview",{"title":8718,"visible":10,"weight":35,"urlFragment":8719,"anchor":16,"singlePageAnchor":8719,"subChapters":8720,"url":8739,"docTitle":8703},"Configuring the monitoring stack","configuring-the-monitoring-stack",[1006,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,3635,8731,8732,8733,8734,8735,8736,8737,8738,997],"maintenance-and-support_configuring-the-monitoring-stack","support-considerations_configuring-the-monitoring-stack","unmanaged-monitoring-operators_configuring-the-monitoring-stack","preparing-to-configure-the-monitoring-stack","creating-cluster-monitoring-configmap_configuring-the-monitoring-stack","creating-user-defined-workload-monitoring-configmap_configuring-the-monitoring-stack","configuring-the-monitoring-stack_configuring-the-monitoring-stack","configurable-monitoring-components_configuring-the-monitoring-stack","moving-monitoring-components-to-different-nodes_configuring-the-monitoring-stack","assigning-tolerations-to-monitoring-components_configuring-the-monitoring-stack","persistent-storage-prerequisites","configuring-a-local-persistent-volume-claim_configuring-the-monitoring-stack","modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack","controlling-the-impact-of-unbound-attributes-in-user-defined-projects_configuring-the-monitoring-stack","setting-a-scrape-sample-limit-for-user-defined-projects_configuring-the-monitoring-stack","creating-scrape-sample-alerts_configuring-the-monitoring-stack","attaching-additional-labels-to-your-time-series-and-alerts_configuring-the-monitoring-stack","setting-log-levels-for-monitoring-components_configuring-the-monitoring-stack","/documentation/openshift_container_platform/4.8/html/monitoring/configuring-the-monitoring-stack",{"title":8741,"visible":10,"weight":46,"urlFragment":8742,"anchor":16,"singlePageAnchor":8742,"subChapters":8743,"url":8751,"docTitle":8703},"Enabling monitoring for user-defined projects","enabling-monitoring-for-user-defined-projects",[8744,8745,8746,8747,8748,8749,8750,1015],"enabling-monitoring-for-user-defined-projects_enabling-monitoring-for-user-defined-projects","granting-users-permission-to-monitor-user-defined-projects_enabling-monitoring-for-user-defined-projects","granting-user-permissions-using-the-web-console_enabling-monitoring-for-user-defined-projects","granting-user-permissions-using-the-cli_enabling-monitoring-for-user-defined-projects","granting-users-permission-to-configure-monitoring-for-user-defined-projects_enabling-monitoring-for-user-defined-projects","accessing-metrics-from-outside-cluster_enabling-monitoring-for-user-defined-projects","disabling-monitoring-for-user-defined-projects_enabling-monitoring-for-user-defined-projects","/documentation/openshift_container_platform/4.8/html/monitoring/enabling-monitoring-for-user-defined-projects",{"title":8753,"visible":10,"weight":68,"urlFragment":8754,"anchor":16,"singlePageAnchor":8754,"subChapters":8755,"url":8764,"docTitle":8703},"Managing metrics","managing-metrics",[8756,8757,8758,8759,8760,8761,8762,8763,1036],"understanding-metrics_managing-metrics","setting-up-metrics-collection-for-user-defined-projects_managing-metrics","deploying-a-sample-service_managing-metrics","specifying-how-a-service-is-monitored_managing-metrics","querying-metrics_managing-metrics","querying-metrics-for-all-projects-as-an-administrator_managing-metrics","querying-metrics-for-user-defined-projects-as-a-developer_managing-metrics","exploring-the-visualized-metrics_managing-metrics","/documentation/openshift_container_platform/4.8/html/monitoring/managing-metrics",{"title":8766,"visible":10,"weight":435,"urlFragment":8767,"anchor":16,"singlePageAnchor":8767,"subChapters":8768,"url":8786,"docTitle":8703},"Managing alerts","managing-alerts",[8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,8785,1062],"accessing_the_alerting_ui_managing-alerts","searching-alerts-silences-and-alerting-rules_managing-alerts","getting-information-about-alerts-silences-and-alerting-rules_managing-alerts","managing-alerting-rules_managing-alerts","Optimizing-alerting-for-user-defined-projects_managing-alerts","creating-alerting-rules-for-user-defined-projects_managing-alerts","reducing-latency-for-alerting-rules-that-do-not-query-platform-metrics_managing-alerts","accessing-alerting-rules-for-your-project_managing-alerts","listing-alerting-rules-for-all-projects-in-a-single-view_managing-alerts","removing-alerting-rules-for-user-defined-projects_managing-alerts","managing-silences_managing-alerts","silencing-alerts_managing-alerts","editing-silences_managing-alerts","expiring-silences_managing-alerts","sending-notifications-to-external-systems_managing-alerts","configuring-alert-receivers_managing-alerts","applying-custom-alertmanager-configuration_managing-alerts","/documentation/openshift_container_platform/4.8/html/monitoring/managing-alerts",{"title":8788,"visible":10,"weight":453,"urlFragment":8789,"anchor":16,"singlePageAnchor":8789,"subChapters":8790,"url":8793,"docTitle":8703},"Reviewing monitoring dashboards","reviewing-monitoring-dashboards",[8791,8792,1112],"reviewing-monitoring-dashboards-admin_reviewing-monitoring-dashboards","reviewing-monitoring-dashboards-developer_reviewing-monitoring-dashboards","/documentation/openshift_container_platform/4.8/html/monitoring/reviewing-monitoring-dashboards",{"title":8795,"visible":10,"weight":468,"urlFragment":8796,"anchor":16,"singlePageAnchor":8796,"subChapters":8797,"url":8800,"docTitle":8703},"Accessing third-party UIs","accessing-third-party-uis",[8798,8799],"accessing-third-party-uis-using-the-web-console_accessing-third-party-uis","accessing-third-party-uis-using-the-cli_accessing-third-party-uis","/documentation/openshift_container_platform/4.8/html/monitoring/accessing-third-party-uis",{"title":8802,"visible":10,"weight":869,"urlFragment":8803,"anchor":16,"singlePageAnchor":8803,"subChapters":8804,"url":8807,"docTitle":8703},"Troubleshooting monitoring issues","troubleshooting-monitoring-issues",[8805,8806],"investigating-why-user-defined-metrics-are-unavailable_troubleshooting-monitoring-issues","determining-why-prometheus-is-consuming-disk-space_troubleshooting-monitoring-issues","/documentation/openshift_container_platform/4.8/html/monitoring/troubleshooting-monitoring-issues",{"title":8809,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":8810,"url":8811,"docTitle":8812,"sections":8813},"Scalability and performance",[],"/documentation/openshift_container_platform/4.8/html/scalability_and_performance/index","scalability_and_performance",[8814,8831,8852,8864,8876,8887,8893,8901,8908,8923,8934,8944,8952,8959,8967,8978,8988,9038,9052],{"title":8815,"visible":10,"weight":23,"urlFragment":8816,"anchor":16,"singlePageAnchor":8816,"subChapters":8817,"url":8830,"docTitle":8812},"Recommended host practices","recommended-host-practices",[8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,8829,1546],"recommended-node-host-practices_recommended-host-practices","create-a-kubeletconfig-crd-to-edit-kubelet-parameters_recommended-host-practices","modify-unavailable-workers_recommended-host-practices","master-node-sizing_recommended-host-practices","increasing-aws-flavor-size_recommended-host-practices","recommended-etcd-practices_recommended-host-practices","etcd-defrag_recommended-host-practices","infrastructure-components_recommended-host-practices","infrastructure-moving-monitoring_recommended-host-practices","infrastructure-moving-registry_recommended-host-practices","infrastructure-moving-router_recommended-host-practices","infrastructure-node-sizing_recommended-host-practices","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/recommended-host-practices",{"title":8832,"visible":10,"weight":35,"urlFragment":8833,"anchor":16,"singlePageAnchor":8833,"subChapters":8834,"url":8851,"docTitle":8812},"Recommended host practices for IBM Z & LinuxONE environments","ibm-z-recommended-host-practices",[8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849,8850],"ibm-z-managing-cpu-overcommitment_ibm-z-recommended-host-practices","ibm-z-disable-thp_ibm-z-recommended-host-practices","ibm-z-boost-networking-performance-with-rfs_ibm-z-recommended-host-practices","use-the-mco-to-activate-rfs_ibm-z-recommended-host-practices","ibm-z-choose-networking-setup_ibm-z-recommended-host-practices","ibm-z-ensure-high-disk-performance-hyperpav_ibm-z-recommended-host-practices","use-the-mco-to-activate-hyperpav-aliases-in-nodes-using-zvm-full-pack-minidisks_ibm-z-recommended-host-practices","ibm-z-rhel-kvm-host-recommendations_ibm-z-recommended-host-practices","use-multiple-queues-for-your-virtio-network-interfaces_ibm-z-recommended-host-practices","use-io-threads-for-your-virtual-block-devices_ibm-z-recommended-host-practices","avoid-virtual-scsi-devices_ibm-z-recommended-host-practices","configure-guest-caching-for-disk_ibm-z-recommended-host-practices","exclude-the-memory-ballon-device_ibm-z-recommended-host-practices","tune-the-cpu-migration-algorithm-of-the-host-scheduler_ibm-z-recommended-host-practices","disable-the-cpuset-cgroup-controller_ibm-z-recommended-host-practices","tune-the-polling-period-for-idle-virtual-cpus_ibm-z-recommended-host-practices","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/ibm-z-recommended-host-practices",{"title":8853,"visible":10,"weight":46,"urlFragment":8854,"anchor":16,"singlePageAnchor":8854,"subChapters":8855,"url":8863,"docTitle":8812},"Recommended cluster scaling practices","recommended-cluster-scaling-practices",[8856,8857,8858,8859,8860,8861,4890,4891,8862],"recommended-scale-practices_cluster-scaling","machineset-modifying_cluster-scaling","machine-health-checks-about_cluster-scaling","machine-health-checks-limitations_cluster-scaling","machine-health-checks-resource_cluster-scaling","machine-health-checks-short-circuiting_cluster-scaling","machine-health-checks-creating_cluster-scaling","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/recommended-cluster-scaling-practices",{"title":8865,"visible":10,"weight":68,"urlFragment":8866,"anchor":16,"singlePageAnchor":8866,"subChapters":8867,"url":8875,"docTitle":8812},"Using the Node Tuning Operator","using-node-tuning-operator",[8868,8869,8870,8871,8872,8873,8874],"about-node-tuning-operator_node-tuning-operator","accessing-an-example-node-tuning-operator-specification_node-tuning-operator","custom-tuning-default-profiles-set_node-tuning-operator","verifying-tuned-profiles-are-applied_node-tuning-operator","custom-tuning-specification_node-tuning-operator","custom-tuning-example_node-tuning-operator","supported-tuned-daemon-plug-ins_node-tuning-operator","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/using-node-tuning-operator",{"title":8877,"visible":10,"weight":435,"urlFragment":8878,"anchor":16,"singlePageAnchor":8878,"subChapters":8879,"url":8886,"docTitle":8812},"Using Cluster Loader","using_cluster_loader_node-tuning-operator",[8880,8881,8882,8883,8884,8885],"installing-cluster-loader_using_cluster_loader","running_cluster_loader_using_cluster_loader","configuring_cluster_loader_using_cluster_loader","example-cluster-loader-configuration-file","configuration-fields","known-issues","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/using_cluster_loader_node-tuning-operator",{"title":8888,"visible":10,"weight":453,"urlFragment":8889,"anchor":16,"singlePageAnchor":8889,"subChapters":8890,"url":8892,"docTitle":8812},"Using CPU Manager","using-cpu-manager",[8891],"seting_up_cpu_manager_using-cpu-manager","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/using-cpu-manager",{"title":8894,"visible":10,"weight":468,"urlFragment":8895,"anchor":16,"singlePageAnchor":8895,"subChapters":8896,"url":8900,"docTitle":8812},"Using Topology Manager","using-topology-manager",[8897,8898,8899],"topology_manager_policies_using-topology-manager","seting_up_topology_manager_using-topology-manager","pod-interactions-with-topology-manager_using-topology-manager","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/using-topology-manager",{"title":8902,"visible":10,"weight":869,"urlFragment":8903,"anchor":16,"singlePageAnchor":8903,"subChapters":8904,"url":8907,"docTitle":8812},"Scaling the Cluster Monitoring Operator","scaling-cluster-monitoring-operator",[8905,8906],"prometheus-database-storage-requirements_cluster-monitoring-operator","configuring-cluster-monitoring_cluster-monitoring-operator","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/scaling-cluster-monitoring-operator",{"title":8909,"visible":10,"weight":877,"urlFragment":8910,"anchor":16,"singlePageAnchor":8910,"subChapters":8911,"url":8922,"docTitle":8812},"The Node Feature Discovery Operator","node-feature-discovery-operator",[8912,8913,8914,8915,8916,8917,8918,8919,8920,8921],"about-node-feature-discovery-operator_node-feature-discovery-operator","installing-the-node-feature-discovery-operator_node-feature-discovery-operator","install-operator-cli_node-feature-discovery-operator","install-operator-web-console_node-feature-discovery-operator","using-the-node-feature-discovery-operator_node-feature-discovery-operator","create-cd-cli_node-feature-discovery-operator","create-nfd-cr-web-console_node-feature-discovery-operator","configuring-the-node-feature-discovery_node-feature-discovery-operator","configuring-node-feature-discovery-operator-core_node-feature-discovery-operator","configuring-node-feature-discovery-operator-sources_node-feature-discovery-operator","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/node-feature-discovery-operator",{"title":8924,"visible":10,"weight":888,"urlFragment":8925,"anchor":16,"singlePageAnchor":8925,"subChapters":8926,"url":8933,"docTitle":8812},"The Driver Toolkit","driver-toolkit",[8927,8928,8929,8930,8931,8932],"about-driver-toolkit","pulling-the-driver-toolkit","pulling-the-driver-toolkit-from-registry","pulling-the-driver-toolkit-from-payload","using-the-driver-toolkit","create-simple-kmod-image","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/driver-toolkit",{"title":8935,"visible":10,"weight":899,"urlFragment":8936,"anchor":16,"singlePageAnchor":8936,"subChapters":8937,"url":8943,"docTitle":8812},"Planning your environment according to object maximums","planning-your-environment-according-to-object-maximums",[8938,8939,8940,8941,8942],"cluster-maximums-major-releases_object-limits","cluster-maximums-environment_object-limits","ibm-z-platform","how-to-plan-according-to-cluster-maximums_object-limits","how-to-plan-according-to-application-requirements_object-limits","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/planning-your-environment-according-to-object-maximums",{"title":8945,"visible":10,"weight":906,"urlFragment":8946,"anchor":16,"singlePageAnchor":8946,"subChapters":8947,"url":8951,"docTitle":8812},"Optimizing storage","optimizing-storage",[8948,8949,5012,4685,5013,5014,5015,5016,5017,8950],"available-persistent-storage-options_persistent-storage","recommended-configurable-storage-technology_persistent-storage","data-storage-management_persistent-storage","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/optimizing-storage",{"title":8953,"visible":10,"weight":915,"urlFragment":8954,"anchor":16,"singlePageAnchor":8954,"subChapters":8955,"url":8958,"docTitle":8812},"Optimizing routing","routing-optimization",[8956,8957],"baseline-router-performance_routing-optimization","router-performance-optimizations_routing-optimization","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/routing-optimization",{"title":8960,"visible":10,"weight":2799,"urlFragment":8961,"anchor":16,"singlePageAnchor":8961,"subChapters":8962,"url":8966,"docTitle":8812},"Optimizing networking","optimizing-networking",[8963,8964,8965],"optimizing-mtu_optimizing-networking","recommended-install-practices_optimizing-networking","ipsec-impact_optimizing-networking","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/optimizing-networking",{"title":8968,"visible":10,"weight":3064,"urlFragment":8969,"anchor":16,"singlePageAnchor":8969,"subChapters":8970,"url":8977,"docTitle":8812},"Managing bare metal hosts","managing-bare-metal-hosts",[8971,8972,8973,8974,8975,8976],"about-bare-metal-hosts-and-nodes_managing-bare-metal-hosts","maintaining-bare-metal-hosts_managing-bare-metal-hosts","adding-bare-metal-host-to-cluster-using-web-console_managing-bare-metal-hosts","adding-bare-metal-host-to-cluster-using-yaml_managing-bare-metal-hosts","automatically-scaling-machines-to-available-bare-metal-hosts_managing-bare-metal-hosts","removing-bare-metal-hosts-from-provisioner_managing-bare-metal-hosts","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/managing-bare-metal-hosts",{"title":8979,"visible":10,"weight":3332,"urlFragment":8980,"anchor":16,"singlePageAnchor":8980,"subChapters":8981,"url":8987,"docTitle":8812},"What huge pages do and how they are consumed by applications","what-huge-pages-do-and-how-they-are-consumed",[8982,8983,8984,8985,4904,8986],"what-huge-pages-do_huge-pages","how-huge-pages-are-consumed-by-apps_huge-pages","consuming-huge-pages-resource-using-the-downward-api_huge-pages","configuring-huge-pages_huge-pages","disable-thp_huge-pages","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/what-huge-pages-do-and-how-they-are-consumed",{"title":8989,"visible":10,"weight":3388,"urlFragment":8990,"anchor":16,"singlePageAnchor":8990,"subChapters":8991,"url":9037,"docTitle":8812},"Performance Addon Operator for low latency nodes","cnf-performance-addon-operator-for-low-latency-nodes",[8992,8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008,9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,9022,9023,9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036],"cnf-understanding-low-latency_cnf-master","about_hyperthreading_for_low_latency_and_real_time_applications_cnf-master","installing-the-performance-addon-operator_cnf-master","install-operator-cli_cnf-master","install-operator-web-console_cnf-master","upgrading-performance-addon-operator_cnf-master","about-upgrading-performance-addon-operator_cnf-master","how-performance-addon-operator-upgrades-affect-your-cluster_cnf-master","upgrading-performance-addon-operator-to-minor-version_cnf-master","upgrading-performance-addon-operator-configured-for-a-specific-namespace_cnf-master","performance-addon-operator-monitoring-upgrade-status_cnf-master","cnf-provisioning-real-time-and-low-latency-workloads_cnf-master","performance-addon-operator-known-limitations-for-real-time_cnf-master","performance-addon-operator-provisioning-worker-with-real-time-capabilities_cnf-master","performance-addon-operator-verifying-real-time-kernel-installation_cnf-master","performance-addon-operator-creating-workload-that-works-in-real-time_cnf-master","performance-addon-operator-creating-pod-with-guaranteed-qos-class_cnf-master","performance-addon-operator-disabling-cpu-load-balancing-for-dpdk_cnf-master","performance-addon-operator-assigning-proper-node-selector_cnf-master","performance-addon-operator-scheduling-workload-onto-worker-with-real-time-capabilities_cnf-master","managing-device-interrupt-processing-for-guaranteed-pod-isolated-cpus_cnf-master","disabling-cpu-cfs-quota_cnf-master","configuring-global-device-interrupts-handling-for-isolated-cpus_cnf-master","disabling_interrupt_processing_for_individual_pods_cnf-master","use-device-interrupt-processing-for-isolated-cpus_cnf-master","pao_supported_api_versions_cnf-master","upgrading_pao_api_from_v1alpha1_to_v1_cnf-master","upgrading_pao_api_from_v1alpha1_to_v1_or_v2_cnf-master","configuring_for_irq_dynamic_load_balancing_cnf-master","configuring_hyperthreading_for_a_cluster_cnf-master","disabling_hyperthreading_for_low_latency_applications_cnf-master","cnf-tuning-nodes-for-low-latency-via-performanceprofile_cnf-master","cnf-configuring-huge-pages_cnf-master","cnf-allocating-multiple-huge-page-sizes_cnf-master","cnf-cpu-infra-container_cnf-master","reducing-nic-queues-using-the-performance-addon-operator_cnf-master","adjusting-nic-queues-with-the-performance-profile_cnf-master","verifying-queue-status_cnf-master","logging-associated-with-adjusting-nic-queues_cnf-master","cnf-debugging-low-latency-cnf-tuning-status_cnf-master","cnf-debugging-low-latency-cnf-tuning-status-machineconfigpools_cnf-master","cnf-collecting-low-latency-tuning-debugging-data-for-red-hat-support_cnf-master","cnf-about-must-gather_cnf-master","cnf-about-collecting-low-latency-data_cnf-master","cnf-about-gathering-data_cnf-master","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/cnf-performance-addon-operator-for-low-latency-nodes",{"title":9039,"visible":10,"weight":3414,"urlFragment":9040,"anchor":16,"singlePageAnchor":9040,"subChapters":9041,"url":9051,"docTitle":8812},"Performing latency tests for platform verification","cnf-performing-platform-verification-latency-tests",[9042,9043,9044,9045,9046,9047,9048,9049,9050],"cnf-latency-tests-prerequisites_cnf-latency-tests","discovery-mode_cnf-latency-tests","cnf-measuring-latency_cnf-latency-tests","cnf-performing-end-to-end-tests-running-the-tests_cnf-latency-tests","cnf-performing-end-to-end-tests-running-oslat_cnf-latency-tests","cnf-performing-end-to-end-tests-test-failure-report_cnf-latency-tests","cnf-performing-end-to-end-tests-junit-test-output_cnf-latency-tests","cnf-performing-end-to-end-tests-disconnected-mode_cnf-latency-tests","cnf-performing-end-to-end-tests-troubleshooting_cnf-latency-tests","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/cnf-performing-platform-verification-latency-tests",{"title":9053,"visible":10,"weight":3429,"urlFragment":9054,"anchor":16,"singlePageAnchor":9054,"subChapters":9055,"url":9063,"docTitle":8812},"Creating a performance profile","cnf-create-performance-profiles",[9056,9057,9058,9059,9060,9061,9062],"cnf-about-the-profile-creator-tool_cnf-create-performance-profiles","gathering-data-about-your-cluster-using-must-gather_cnf-create-performance-profiles","running-the-performance-profile-profile-cluster-using-podman_cnf-create-performance-profiles","how-to-run-podman-to-create-a-profile_cnf-create-performance-profiles","running-the-performance-profile-creator-wrapper-script_cnf-create-performance-profiles","performance-profile-creator-arguments_cnf-create-performance-profiles","cnf-create-performance-profiles-additional-resources","/documentation/openshift_container_platform/4.8/html/scalability_and_performance/cnf-create-performance-profiles",{"title":9065,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":9066,"url":9067,"docTitle":9068,"sections":9069},"Support",[],"/documentation/openshift_container_platform/4.8/html/support/index","support",[9070,9079,9085,9095,9129,9146,9152],{"title":9071,"visible":10,"weight":23,"urlFragment":9072,"anchor":16,"singlePageAnchor":9072,"subChapters":9073,"url":9078,"docTitle":9068},"Support overview","support-overview",[9074,9075,9076,9077],"support-overview-get-support","support-overview-remote-health-monitoring","support-overview-gather-data-cluster","support-overview-troubleshooting-issues","/documentation/openshift_container_platform/4.8/html/support/support-overview",{"title":9080,"visible":10,"weight":35,"urlFragment":9081,"anchor":16,"singlePageAnchor":9081,"subChapters":9082,"url":9084,"docTitle":9068},"Managing your cluster resources","managing-cluster-resources",[9083],"support-cluster-resources_managing-cluster-resources","/documentation/openshift_container_platform/4.8/html/support/managing-cluster-resources",{"title":9086,"visible":10,"weight":46,"urlFragment":9087,"anchor":16,"singlePageAnchor":9087,"subChapters":9088,"url":9094,"docTitle":9068},"Getting support","getting-support",[9089,9090,9091,9092,9093],"support_getting-support","support-knowledgebase-about_getting-support","support-knowledgebase-search_getting-support","support-submitting-a-case_getting-support","getting-support-additional-resources","/documentation/openshift_container_platform/4.8/html/support/getting-support",{"title":9096,"visible":10,"weight":68,"urlFragment":9097,"anchor":16,"singlePageAnchor":9097,"subChapters":9098,"url":9128,"docTitle":9068},"Remote health monitoring with connected clusters","remote-health-monitoring-with-connected-clusters",[9099,9100,9101,9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117,9118,9119,9120,9121,9122,9123,9124,9125,9126,9127],"about-remote-health-monitoring","telemetry-about-telemetry_about-remote-health-monitoring","what-information-is-collected_about-remote-health-monitoring","insights-operator-about_about-remote-health-monitoring","insights-operator-what-information-is-collected_about-remote-health-monitoring","understanding-telemetry-and-insights-operator-data-flow_about-remote-health-monitoring","additional-details-about-how-remote-health-monitoring-data-is-used","showing-data-collected-by-remote-health-monitoring","showing-data-collected-from-the-cluster_showing-data-collected-by-remote-health-monitoring","insights-operator-showing-data-collected-from-the-cluster_showing-data-collected-by-remote-health-monitoring","opting-out-remote-health-reporting","telemetry-consequences-of-disabling-telemetry_opting-out-remote-health-reporting","insights-operator-new-pull-secret_opting-out-remote-health-reporting","images-update-global-pull-secret_opting-out-remote-health-reporting","using-insights-to-identify-issues-with-your-cluster","insights-operator-advisor-overview_using-insights-to-identify-issues-with-your-cluster","insights-operator-advisor-recommendations_using-insights-to-identify-issues-with-your-cluster","displaying-potential-issues-with-your-cluster_using-insights-to-identify-issues-with-your-cluster","displaying-all-insights-advisor-recommendations_using-insights-to-identify-issues-with-your-cluster","disabling-insights-advisor-recommendations_using-insights-to-identify-issues-with-your-cluster","enabling-insights-advisor-recommendations_using-insights-to-identify-issues-with-your-cluster","displaying-the-insights-status-in-the-web-console_using-insights-to-identify-issues-with-your-cluster","using-insights-operator","insights-operator-downloading-archive_using-insights-operator","insights-operator-gather-duration_using-insights-operator","remote-health-reporting-from-restricted-network","insights-operator-one-time-gather_remote-health-reporting-from-restricted-network","insights-operator-manual-upload_remote-health-reporting-from-restricted-network","insights-operator-enable-obfuscation_remote-health-reporting-from-restricted-network","/documentation/openshift_container_platform/4.8/html/support/remote-health-monitoring-with-connected-clusters",{"title":9130,"visible":10,"weight":435,"urlFragment":9131,"anchor":16,"singlePageAnchor":9131,"subChapters":9132,"url":9145,"docTitle":9068},"Gathering data about your cluster","gathering-cluster-data",[9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143,9144],"about-must-gather_gathering-cluster-data","support_gathering_data_gathering-cluster-data","gathering-data-specific-features_gathering-cluster-data","gathering-data-audit-logs_gathering-cluster-data","support-get-cluster-id_gathering-cluster-data","about-sosreport_gathering-cluster-data","support-generating-a-sosreport-archive_gathering-cluster-data","querying-bootstrap-node-journal-logs_gathering-cluster-data","querying-cluster-node-journal-logs_gathering-cluster-data","support-collecting-network-trace_gathering-cluster-data","support-providing-diagnostic-data-to-red-hat_gathering-cluster-data","about-toolbox_gathering-cluster-data","/documentation/openshift_container_platform/4.8/html/support/gathering-cluster-data",{"title":9147,"visible":10,"weight":453,"urlFragment":9148,"anchor":16,"singlePageAnchor":9148,"subChapters":9149,"url":9151,"docTitle":9068},"Summarizing cluster specifications","summarizing-cluster-specifications",[9150],"summarizing-cluster-specifications-through-clusterversion_summarizing-cluster-specifications","/documentation/openshift_container_platform/4.8/html/support/summarizing-cluster-specifications",{"title":5263,"visible":10,"weight":468,"urlFragment":5613,"anchor":16,"singlePageAnchor":5613,"subChapters":9153,"url":9228,"docTitle":9068},[9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,9167,1546,9168,9169,9170,9171,9172,9173,9174,9175,9176,9177,9178,9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194,9195,9196,9197,9198,9199,9200,9201,9202,9203,9204,9205,9206,9207,9208,9209,9210,1598,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,1626,9222,9223,9224,9225,9226,9227],"troubleshooting-installations","determining-where-installation-issues-occur_troubleshooting-installations","upi-installation-considerations_troubleshooting-installations","checking-load-balancer-configuration_troubleshooting-installations","specifying-openshift-installer-log-levels_troubleshooting-installations","troubleshooting-openshift-install-command-issues_troubleshooting-installations","monitoring-installation-progress_troubleshooting-installations","gathering-bootstrap-diagnostic-data_troubleshooting-installations","investigating-master-node-installation-issues_troubleshooting-installations","investigating-etcd-installation-issues_troubleshooting-installations","investigating-kubelet-api-installation-issues_troubleshooting-installations","investigating-worker-node-installation-issues_troubleshooting-installations","querying-operator-status-after-installation_troubleshooting-installations","installation-bootstrap-gather_troubleshooting-installations","verifying-node-health","reviewing-node-status-use-and-configuration_verifying-node-health","querying-kubelet-status-on-a-node_verifying-node-health","querying-cluster-node-journal-logs_verifying-node-health","troubleshooting-crio-issues","about-crio_troubleshooting-crio-issues","verifying-crio-status_troubleshooting-crio-issues","gathering-crio-logs_troubleshooting-crio-issues","cleaning-crio-storage_troubleshooting-crio-issues","troubleshooting-operating-system-issues","investigating-kernel-crashes","enabling-kdump_troubleshooting-operating-system-issues","enabling-kdump-day-one_troubleshooting-operating-system-issues","testing-kdump-configuration","analyzing-core-dumps","debugging-ignition_troubleshooting-operating-system-issues","troubleshooting-network-issues","nw-how-nw-iface-selected_troubleshooting-network-issues","nw-troubleshoot-ovs_troubleshooting-network-issues","configuring-ovs-log-level-temp_troubleshooting-network-issues","configuring-ovs-log-level-permanently_troubleshooting-network-issues","displaying-ovs-logs_troubleshooting-network-issues","troubleshooting-operator-issues","olm-status-conditions_troubleshooting-operator-issues","olm-status-viewing-cli_troubleshooting-operator-issues","olm-cs-status-cli_troubleshooting-operator-issues","querying-operator-pod-status_troubleshooting-operator-issues","gathering-operator-logs_troubleshooting-operator-issues","troubleshooting-disabling-autoreboot-mco_troubleshooting-operator-issues","troubleshooting-disabling-autoreboot-mco-console_troubleshooting-operator-issues","troubleshooting-disabling-autoreboot-mco-cli_troubleshooting-operator-issues","olm-refresh-subs_troubleshooting-operator-issues","investigating-pod-issues","understanding-pod-error-states_investigating-pod-issues","reviewing-pod-status_investigating-pod-issues","inspecting-pod-and-container-logs_investigating-pod-issues","accessing-running-pods_investigating-pod-issues","starting-debug-pods-with-root-access_investigating-pod-issues","copying-files-pods-and-containers_investigating-pod-issues","troubleshooting-s2i","strategies-for-s2i-troubleshooting_troubleshooting-s2i","gathering-s2i-diagnostic-data_troubleshooting-s2i","gathering-application-diagnostic-data_troubleshooting-s2i","troubleshooting-storage-issues","storage-multi-attach-error_troubleshooting-storage-issues","troubleshooting-windows-container-workload-issues","wmco-does-not-install_troubleshooting-windows-container-workload-issues","investigating-why-windows-machine-compute-node_troubleshooting-windows-container-workload-issues","accessing-windows-node","accessing-windows-node-using-ssh_troubleshooting-windows-container-workload-issues","accessing-windows-node-using-rdp_troubleshooting-windows-container-workload-issues","collecting-kube-node-logs-windows_troubleshooting-windows-container-workload-issues","collecting-windows-application-event-logs_troubleshooting-windows-container-workload-issues","collecting-docker-logs-windows_troubleshooting-windows-container-workload-issues","investigating-monitoring-issues","investigating-why-user-defined-metrics-are-unavailable_investigating-monitoring-issues","determining-why-prometheus-is-consuming-disk-space_investigating-monitoring-issues","diagnosing-oc-issues","understanding-oc-log-levels_diagnosing-oc-issues","specifying-oc-log-levels_diagnosing-oc-issues","/documentation/openshift_container_platform/4.8/html/support/troubleshooting",{"title":9230,"visible":10,"categoryName":10,"sections":9231},"Integration",[9232,9869,9957,10503,11108],{"title":9233,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":9234,"url":9235,"docTitle":9236,"sections":9237},"Service Mesh",[],"/documentation/openshift_container_platform/4.8/html/service_mesh/index","service_mesh",[9238,9671],{"title":9239,"visible":10,"weight":23,"urlFragment":9240,"anchor":16,"singlePageAnchor":9240,"subChapters":9241,"url":9670,"docTitle":9236},"Service Mesh 2.x","service-mesh-2-x",[9242,9243,9244,9245,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255,9256,9257,9258,9259,9260,9261,9262,9263,9264,9265,9266,9267,9268,9269,9270,9271,9272,9273,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283,9284,9285,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298,9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,9332,9333,9334,9335,9336,9337,9338,971,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,1006,9371,9372,9373,9374,9375,9376,9377,9378,997,9379,9380,9381,1015,9382,9383,9384,9385,9386,9387,9388,9389,9390,1546,1036,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,1062,9405,1017,9406,9407,9408,9409,1112,9410,9411,9412,9413,9414,9415,9416,9417,9418,9419,9420,9421,9422,9423,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9450,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461,9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599,9600,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628,9629,9630,9631,9632,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658,9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669],"ossm-about","ossm-servicemesh-overview_ossm-about","ossm-core-features_ossm-about","service-mesh-release-notes","making-open-source-more-inclusive_ossm-release-notes","ossm-rn-new-features_ossm-release-notes","new-features-red-hat-openshift-service-mesh-version-2-2-3","component-versions-included-in-red-hat-openshift-service-mesh-version-2-2-3","new-features-red-hat-openshift-service-mesh-version-2-2-2","component-versions-included-in-red-hat-openshift-service-mesh-version-2-2-2","copy-route-labels","new-features-red-hat-openshift-service-mesh-version-2-2-1","component-versions-included-in-red-hat-openshift-service-mesh-version-2-2-1","new-features-red-hat-openshift-service-mesh-2-2","component-versions-included-in-red-hat-openshift-service-mesh-version-2-2","literal-wasmplugin-literal-api","rosa-support","literal-istio-node-literal-daemonset-renamed","envoy-sidecar-networking-changes","service-mesh-control-plane-1-1","istio-1-12-support","kubernetes-gateway-api","new-features-red-hat-openshift-service-mesh-2-1-5-1","component-versions-included-in-red-hat-openshift-service-mesh-version-2-1-5-1","new-features-red-hat-openshift-service-mesh-2-1-5","component-versions-included-in-red-hat-openshift-service-mesh-version-2-1-5","new-features-red-hat-openshift-service-mesh-2-1-4","component-versions-included-in-red-hat-openshift-service-mesh-version-2-1-4","new-features-red-hat-openshift-service-mesh-2-1-3","component-versions-included-in-red-hat-openshift-service-mesh-version-2-1-3","new-features-red-hat-openshift-service-mesh-2-1-2-1","component-versions-included-in-red-hat-openshift-service-mesh-version-2-1-2-1","new-features-red-hat-openshift-service-mesh-2-1-2","component-versions-included-in-red-hat-openshift-service-mesh-version-2-1-2","new-features-red-hat-openshift-service-mesh-2-1-1","component-versions-included-in-red-hat-openshift-service-mesh-version-2-1-1","ossm-config-disable-networkpolicy_ossm-release-notes","new-features-and-enhancements-red-hat-openshift-service-mesh-2-1","component-versions-included-in-red-hat-openshift-service-mesh-version-2-1","service-mesh-federation","ovn-kubernetes-container-network-interface-cni-generally-available","service-mesh-webassembly-wasm-extensions","threescale-webassembly-adapter-wasm","istio-1-9-support","improved-service-mesh-operator-performance","kiali-updates","new-features-red-hat-openshift-service-mesh-2-0-11-1","component-versions-included-in-red-hat-openshift-service-mesh-version-2-0-11-1","new-features-red-hat-openshift-service-mesh-2-0-11","component-versions-included-in-red-hat-openshift-service-mesh-version-2-0-11","new-features-red-hat-openshift-service-mesh-2-0-10","component-versions-included-in-red-hat-openshift-service-mesh-version-2-0-10","new-features-red-hat-openshift-service-mesh-2-0-9","component-versions-included-in-red-hat-openshift-service-mesh-version-2-0-9","new-features-red-hat-openshift-service-mesh-2-0-8","new-features-red-hat-openshift-service-mesh-2-0-7-1","change-in-how-red-hat-openshift-service-mesh-handles-uri-fragments","required-update-for-authorization-policies","new-features-red-hat-openshift-service-mesh-2-0-7","red-hat-openshift-service-mesh-on-red-hat-openshift-dedicated-and-microsoft-azure-red-hat-openshift","new-features-red-hat-openshift-service-mesh-2-0-6","new-features-red-hat-openshift-service-mesh-2-0-5","new-features-red-hat-openshift-service-mesh-2-0-4","manual-updates-cve-2021-29492_ossm-release-notes","updating-the-path-normalization-configuration","path-normalization-configuration-examples","configuring-your-smcp-for-path-normalization","configuring-for-case-normalization","new-features-red-hat-openshift-service-mesh-2-0-3","new-features-red-hat-openshift-service-mesh-2-0-2","new-features-red-hat-openshift-service-mesh-2-0-1","new-features-red-hat-openshift-service-mesh-2-0","ossm-rn-tech-preview_ossm-release-notes","istio-compatibility-support-matrix_ossm-release-notes","ossm-deprecated-features_ossm-release-notes","deprecated-features-red-hat-openshift-service-mesh-2-2","removed-features-red-hat-openshift-service-mesh-2-2","removed-features-red-hat-openshift-service-mesh-2-1","deprecated-features-red-hat-openshift-service-mesh-2-0","ossm-rn-known-issues_ossm-release-notes","ossm-rn-known-issues-ossm_ossm-release-notes","ossm-rn-known-issues-kiali_ossm-release-notes","distr-tracing-rn-known-issues_ossm-release-notes","ossm-rn-fixed-issues_ossm-release-notes","ossm-rn-fixed-issues-ossm_ossm-release-notes","distr-tracing-rn-fixed-issues_ossm-release-notes","ossm-architecture","ossm-understanding-service-mesh_ossm-architecture","ossm-architecture_ossm-architecture","understanding-kiali","ossm-kiali-overview_ossm-architecture","ossm-kiali-architecture_ossm-architecture","ossm-kiali-features_ossm-architecture","understanding-distributed-tracing","distr-tracing-product-overview_ossm-architecture","distr-tracing-architecture_ossm-architecture","distr-tracing-features_ossm-architecture","ossm-deployment-models","ossm-deploy-single-mesh_ossm-deployment-models","ossm-deploy-single-tenant_ossm-deployment-models","ossm-deploy-multitenant_ossm-deployment-models","ossm-deploy-multi-mesh_ossm-deployment-models","ossm-vs-community","ossm-vs-istio_ossm-vs-istio","ossm-cli-tool_ossm-vs-istio","ossm-installation-upgrade_ossm-vs-istio","ossm-automatic-injection_ossm-vs-istio","ossm-rbac_ossm-vs-istio","ossm-openssl_ossm-vs-istio","ossm-external-workloads_ossm-vs-istio","ossm-virtual-machine-support_ossm-vs-istio","ossm-component-modifications_ossm-vs-istio","ossm-envoy-filters_ossm-vs-istio","ossm-envoy-services_ossm-vs-istio","ossm-cni_ossm-vs-istio","ossm-global-mtls_ossm-vs-istio","ossm-gateways_ossm-vs-istio","ossm-multicluster-configuration_ossm-vs-istio","ossm-certificate-signing-request_ossm-vs-istio","ossm-routes-gateways_ossm-vs-istio","ossm-catch-all-domains_ossm-vs-istio","ossm-subdomains_ossm-vs-istio","ossm-tls_ossm-vs-istio","ossm-multitenant-install_ossm-vs-istio","ossm-mt-vs-clusterwide_ossm-vs-istio","ossm-cluster-scoped-resources_ossm-vs-istio","ossm-kiali-service-mesh_ossm-vs-istio","ossm-jaeger-service-mesh_ossm-vs-istio","preparing-ossm-installation","ossm-supported-configurations_preparing-ossm-installation","ossm-supported-platforms_preparing-ossm-installation","ossm-unsupported-configurations_preparing-ossm-installation","ossm-supported-configurations-networks_preparing-ossm-installation","ossm-supported-configurations-sm_preparing-ossm-installation","ossm-supported-configurations-kiali_preparing-ossm-installation","ossm-supported-configurations-jaeger_preparing-ossm-installation","ossm-supported-configurations-webassembly_preparing-ossm-installation","installing-ossm","ossm-installation-activities_installing-ossm","ossm-install-ossm-operator_installing-ossm","ossm-create-smcp","ossm-control-plane-deploy-operatorhub_ossm-create-smcp","ossm-control-plane-deploy-cli_ossm-create-smcp","ossm-validate-control-plane-cli_ossm-create-smcp","ossm-validate-control-plane-kiali_ossm-create-smcp","ossm-install-rosa_ossm-create-smcp","ossm-install-rosa-location_ossm-create-smcp","ossm-install-rosa-smcp_ossm-create-smcp","ossm-install-rosa-kiali-config_ossm-create-smcp","ossm-create-mesh","ossm-member-roll-create_ossm-create-mesh","ossm-member-roll-create-console_ossm-create-mesh","ossm-member-roll-create-cli_ossm-create-mesh","ossm-member-roll-modify_ossm-create-mesh","ossm-member-roll-modify-console_ossm-create-mesh","ossm-member-roll-modify-cli_ossm-create-mesh","ossm-tutorial-bookinfo-overview_ossm-create-mesh","ossm-tutorial-bookinfo-install_ossm-create-mesh","ossm-tutorial-bookinfo-adding-destination-rules_ossm-create-mesh","ossm-tutorial-bookinfo-verify-install_ossm-create-mesh","ossm-tutorial-bookinfo-removing_ossm-create-mesh","ossm-delete-bookinfo-project_ossm-create-mesh","ossm-remove-bookinfo-smmr_ossm-create-mesh","deploying-applications-ossm","ossm-automatic-sidecar-injection_deploying-applications-ossm","ossm-validating-sidecar_deploying-applications-ossm","ossm-sidecar-injection-env-var_deploying-applications-ossm","ossm-update-app-sidecar_deploying-applications-ossm","upgrading-ossm","ossm-versioning_ossm-upgrade","how-versioning-affects-service-mesh-upgrades","ossm-versions_ossm-upgrade","ossm-upgrade-considerations_ossm-upgrade","ossm-upgrade-known-issues_ossm-upgrade","ossm-upgrading-operator_ossm-upgrade","upgrading-control-plane","ossm-upgrade-21-22-changes_ossm-upgrade","ossm-upgrade-20-21-changes_ossm-upgrade","ossm-upgrading-smcp_ossm-upgrade","ossm-migrating-to-20_ossm-upgrade","ossm-migrating_ossm-upgrade","ossm-migrating-smcp_ossm-upgrade","ossm-migrating-differences-arch_ossm-upgrade","ossm-migrating-differences-annotation_ossm-upgrade","ossm-migrating-differences-behavior_ossm-upgrade","ossm-migrating-unsupported-resources_ossm-upgrade","ossm-migrating-mixer_ossm-upgrade","ossm-migrating-mtls_ossm-upgrade","other-mtls-examples","ossm-migrating-config-recipes_ossm-upgrade","ossm-migrating-config-mtls_ossm-upgrade","ossm-migrating-config-sign-key_ossm-upgrade","ossm-migrating-config-tracing_ossm-upgrade","ossm-migrating-config-vis_ossm-upgrade","resource-utilization-and-scheduling","ossm-migrrating-apps_ossm-upgrade","upgrading-data-plane","ossm-upgrading-apps-workloads_ossm-upgrade","ossm-profiles-users","ossm-members_ossm-profiles-users","ossm-control-plane-profiles_ossm-profiles-users","ossm-create-configmap_ossm-profiles-users","ossm-config-network-policy_ossm-profiles-users","ossm-security","ossm-security-mtls_ossm-security","ossm-security-enabling-strict-mtls_ossm-security","ossm-security-mtls-sidecars-incoming-services_ossm-security","ossm-security-mtls-sidecars-outgoing_ossm-security","ossm-security-min-max-tls_ossm-security","ossm-validating-sidecar_ossm-security","ossm-vs-istio_ossm-security","configure-intra-project-communication","restrict-access-to-services-outside-a-namespace","creating-allow-all-and-default-deny-all-authorization-policies","allow-or-deny-access-to-the-ingress-gateway","restrict-access-with-json-web-token","ossm-security-cipher_ossm-security","ossm-cert-manage_ossm-security","ossm-cert-manage-add-cert-key_ossm-security","ossm-cert-manage-verify-cert_ossm-security","ossm-cert-cleanup_ossm-security","ossm-routing-traffic","ossm-gateways_traffic-management","ossm-routing-ingress_traffic-management","ossm-routing-determine-ingress_traffic-management","ossm-routing-config-ig-lb_traffic-management","ossm-routing-config-ig-no-lb_traffic-management","ossm-routing-ingress-gateway_traffic-management","ossm-auto-route_traffic-management","ossm-auto-route-subdomains_traffic-management","ossm-auto-route-create-subdomains_traffic-management","ossm-auto-route-annotations_traffic-management","ossm-auto-route-enable_traffic-management","disabling-automatic-route-creation-specific-cases_traffic-management","disabling-automatic-route-creation-all-cases_traffic-management","ossm-routing-service-entries_traffic-management","ossm-routing-virtual-services_traffic-management","ossm-routing-vs_traffic-management","virtualservice-configuration-reference","ossm-routing-destination-rules_traffic-management","ossm-understanding-networkpolicy_traffic-management","ossm-config-disable-networkpolicy_traffic-management","ossm-routing-sidecar_traffic-management","routing-tutorial","ossm-routing-bookinfo_traffic-management","ossm-routing-bookinfo-applying_traffic-management","ossm-routing-bookinfo-test_traffic-management","ossm-routing-bookinfo-route_traffic-management","ossm-observability","ossm-observability-addresses_observability","ossm-accessing-kiali-console_observability","ossm-observability-visual_observability","ossm-observability-topology_observability","ossm-viewing-logs_observability","ossm-viewing-metrics_observability","ossm-overview-distr-tracing_observability","ossm-config-external-jaeger_observability","ossm-config-sampling_observability","ossm-accessing-jaeger-console_observability","ossm-access-grafana_observability","ossm-access-prometheus_observability","ossm-performance-scalability","ossm-recommended-resources_performance-scalability","ossm-load-test-results_performance-scalability","service-mesh-control-plane-performance","data-plane-performance","cpu-and-memory-consumption","additional-latency","ossm-production","ossm-smcp-prod_ossm-architecture","additional-resources_ossm-production","ossm-federation","ossm-federation-overview_federation","ossm-federation-features_federation","ossm-federation-security_federation","ossm-federation-limitations_federation","ossm-federation-prerequisites_federation","ossm-federation-planning_federation","ossm-federation-across-clusters_federation","exposing-the-federation-ingress-on-clusters-running-on-bare-metal","exposing-the-federation-ingress-on-clusters-running-on-ibm-power-and-ibm-z","exposing-the-federation-ingress-on-amazon-web-services-aws","exposing-the-federation-ingress-on-azure","exposing-the-federation-ingress-on-google-cloud-platform-gcp","con-my-concept-module-a_federation","ossm-federation-config-smcp_federation","understanding-federation-gateways","understanding-federation-trust-domain-parameters","ossm-federation-joining_federation","ossm-federation-create-peer_federation","ossm-federation-config-export_federation","ossm-federation-create-export_federation","ossm-federation-config-import_federation","ossm-federation-create-import_federation","ossm-federation-config-failover-overview_federation","ossm-federation-config-importedserviceset-failover_federation","ossm-federation-config-destinationrule-failover_federation","ossm-federation-remove-service_federation","to-remove-a-service-from-a-single-mesh","to-remove-a-service-from-the-entire-federated-mesh","ossm-federation-remove-mesh_federation","ossm-extensions","ossm-extensions-overview_ossm-extensions","ossm-extensions-wasmplugin-format_ossm-extensions","ossm-wasm-ref-wasmplugin_ossm-extensions","ossm-wasmplugin-deploy_ossm-extensions","ossm-extensions-smextension-format_ossm-extensions","ossm-wasm-ref-smextension_ossm-extensions","ossm-smextensions-deploy_ossm-extensions","ossm-extensions-migration-overview_ossm-extensions","ossm-extensions-migration-api-changes_ossm-extensions","ossm-extensions-migration-format-changes_ossm-extensions","ossm-extensions-migrating-to-wasmplugin_ossm-extensions","ossm-threescale-webassembly-module","compatibility_ossm-threescale-webassembly-module","usage-as-a-stand-alone-module_ossm-threescale-webassembly-module","prerequisites_ossm-threescale-webassembly-module","ossm-configuring-the-threescale-wasm-auth-module_ossm-threescale-webassembly-module","the-service-mesh-extension_ossm-threescale-webassembly-module","ossm-threescale-applying-external-service-entry-objects_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-configuration_ossm-threescale-webassembly-module","threescale-configuring-the-threescale-webassembly-module_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-api-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-system-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-upstream-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-backend-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-services-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-credentials-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-lookup-queries_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-source-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-operations-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-mapping-rules-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-mapping-rule-object_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-examples-for-credentials-use-cases_ossm-threescale-webassembly-module","api-key-in-query-string-parameters_ossm-threescale-webassembly-module","application-id-and-key_ossm-threescale-webassembly-module","authorization-header_ossm-threescale-webassembly-module","openid-connect-use-case_ossm-threescale-webassembly-module","picking-up-the-jwt-token-from-a-header_ossm-threescale-webassembly-module","ossm-threescale-webassembly-module-minimal-working-configuration_ossm-threescale-webassembly-module","threescale-adapter","ossm-threescale-integrate_threescale-adapter","ossm-threescale-cr_threescale-adapter","ossm-threescale-templates_threescale-adapter","ossm-threescale-manifests_threescale-adapter","ossm-threescale-routing_threescale-adapter","ossm-threescale-integration-settings_threescale-adapter","ossm-threescale-caching_threescale-adapter","ossm-threescale-authentication_threescale-adapter","ossm-threescale-authentication-patterns_threescale-adapter","ossm-threescale-apikey-authentication_threescale-adapter","ossm-threescale-appidapikey-authentication_threescale-adapter","ossm-threescale-openid-authentication_threescale-adapter","ossm-threescale-hybrid-authentication_threescale-adapter","ossm-threescale-metrics_threescale-adapter","threescale-backend-cache_threescale-adapter","advantages-of-enabling-backend-cache","trade-offs-for-having-lower-latencies","backend-cache-configuration-settings","threescale-istio-adapter-apicast_threescale-adapter","ossm-threescale-istio-adapter-verification_threescale-adapter","ossm-threescale-istio-adapter-troubleshooting-checklist_threescale-adapter","ossm-troubleshooting","ossm-versions_troubleshooting-ossm","troubleshooting-operator-installation","ossm-validating-operators_troubleshooting-ossm","ossm-troubleshooting-operators_troubleshooting-ossm","viewing-operator-pod-logs","troubleshooting-the-control-plane","ossm-validating-smcp_troubleshooting-ossm","ossm-accessing-kiali-console_troubleshooting-ossm","ossm-accessing-jaeger-console_troubleshooting-ossm","ossm-troubleshooting-smcp_troubleshooting-ossm","troubleshooting-the-data-plane","ossm-troubleshooting-injection_troubleshooting-ossm","troubleshooting-istio-sidecar-injection","troubleshooting-jaeger-agent-sidecar-injection","ossm-troubleshooting-proxy_troubleshooting-ossm","enabling-envoy-access-logs","support_troubleshooting-ossm","support-knowledgebase-about_troubleshooting-ossm","support-knowledgebase-search_troubleshooting-ossm","about-must-gather_troubleshooting-ossm","ossm-about-collecting-ossm-data_troubleshooting-ossm","support-submitting-a-case_troubleshooting-ossm","ossm-reference","ossm-cr-example_ossm-reference","spec-parameters","ossm-cr-general_ossm-reference","ossm-cr-profiles_ossm-reference","ossm-cr-techPreview_ossm-reference","ossm-cr-tracing_ossm-reference","ossm-cr-version_ossm-reference","ossm-cr-threescale_ossm-reference","ossm-cr-status_ossm-reference","additional-resources_ossm-reference","kiali-config-ref","ossm-smcp-kiali_kiali-config-ref","ossm-specifying-external-kiali_kiali-config-ref","jaeger-config-ref","ossm-enabling-tracing_jaeger-config-reference","ossm-specifying-jaeger-configuration_jaeger-config-reference","ossm-deploying-jaeger_jaeger-config-reference","ossm-deploying-jaeger-default_jaeger-config-reference","ossm-deploying-jaeger-production-min_jaeger-config-reference","ossm-deploying-jaeger-production_jaeger-config-reference","ossm-deploying-jaeger-streaming_jaeger-config-reference","ossm-specifying-external-jaeger_jaeger-config-reference","distr-tracing-deployment-best-practices_jaeger-config-reference","distr-tracing-config-security-ossm_jaeger-config-reference","distr-tracing-config-security-ossm-web_jaeger-config-reference","distr-tracing-config-security-ossm-cli_jaeger-config-reference","distr-tracing-config-default_jaeger-config-reference","distr-tracing-config-jaeger-collector_jaeger-config-reference","distr-tracing-config-sampling_jaeger-config-reference","distr-tracing-config-storage_jaeger-config-reference","distributed-tracing-config-auto-provisioning-es_jaeger-config-reference","distributed-tracing-config-external-es_jaeger-config-reference","distr-tracing-manage-es-certificates_jaeger-config-reference","distr-tracing-config-query_jaeger-config-reference","distr-tracing-config-ingester_jaeger-config-reference","removing-ossm","ossm-control-plane-remove_removing-ossm","ossm-control-plane-remove-operatorhub_removing-ossm","ossm-control-plane-remove-cli_removing-ossm","ossm-operatorhub-remove-operators_removing-ossm","ossm-remove-operator-servicemesh_removing-ossm","ossm-remove-cleanup_removing-ossm","/documentation/openshift_container_platform/4.8/html/service_mesh/service-mesh-2-x",{"title":9672,"visible":10,"weight":35,"urlFragment":9673,"anchor":16,"singlePageAnchor":9673,"subChapters":9674,"url":9868,"docTitle":9236},"Service Mesh 1.x","service-mesh-1-x",[9675,9676,9677,9678,9679,1038,9680,9681,9682,9683,9684,9685,9686,9687,9688,9689,9690,9691,9692,9693,9694,9695,9696,9697,9698,9699,9700,9701,9702,9703,9704,9705,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715,9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731,9732,9733,9734,9735,9736,9737,9738,9739,1140,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,1089,9759,9760,9761,9762,1172,9763,1114,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,9778,1292,9779,9780,9781,9782,9783,9784,9785,9786,9787,9788,9789,9790,9791,9792,9793,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806,9807,9808,1598,9809,1142,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,9828,1174,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838,9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854,9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867],"service-mesh-release-notes-v1x","making-open-source-more-inclusive","ossm-servicemesh-overview_ossm-release-notes-v1x","support_ossm-release-notes-v1x","about-must-gather_ossm-release-notes-v1x","ossm-about-collecting-ossm-data_ossm-release-notes-v1x","ossm-supported-configurations-v1x_ossm-release-notes-v1x","ossm-supported-configurations-kiali_ossm-release-notes-v1x","ossm-supported-configurations-adapters_ossm-release-notes-v1x","ossm-rn-new-features-1x_ossm-release-notes-v1x","new-features-red-hat-openshift-service-mesh-1-1-18-2","component-versions-included-in-red-hat-openshift-service-mesh-version-1-1-18-2","new-features-red-hat-openshift-service-mesh-1-1-18-1","component-versions-included-in-red-hat-openshift-service-mesh-version-1-1-18-1","new-features-red-hat-openshift-service-mesh-1-1-18","component-versions-included-in-red-hat-openshift-service-mesh-version-1-1-18","new-features-red-hat-openshift-service-mesh-1-1-17-1","change-in-how-red-hat-openshift-service-mesh-handles-uri-fragments-2","required-update-for-authorization-policies-2","new-features-red-hat-openshift-service-mesh-1-1-17","new-features-red-hat-openshift-service-mesh-1-1-16","new-features-red-hat-openshift-service-mesh-1-1-15","new-features-red-hat-openshift-service-mesh-1-1-14","manual-updates-cve-2021-29492_ossm-release-notes-v1x","updating-the-path-normalization-configuration-2","path-normalization-configuration-examples-2","configuring-your-smcp-for-path-normalization-2","new-features-red-hat-openshift-service-mesh-1-1-13","new-features-red-hat-openshift-service-mesh-1-1-12","new-features-red-hat-openshift-service-mesh-1-1-11","new-features-red-hat-openshift-service-mesh-1-1-10","new-features-red-hat-openshift-service-mesh-1-1-9","new-features-red-hat-openshift-service-mesh-1-1-8","new-features-red-hat-openshift-service-mesh-1-1-7","new-features-red-hat-openshift-service-mesh-1-1-6","new-features-red-hat-openshift-service-mesh-1-1-5","new-features-red-hat-openshift-service-mesh-1-1-4","manual-updates-cve-2020-8663_ossm-release-notes-v1x","upgrading_es5_es6_ossm-release-notes-v1x","new-features-red-hat-openshift-service-mesh-1-1-3","new-features-red-hat-openshift-service-mesh-1-1-2","new-features-red-hat-openshift-service-mesh-1-1-1","new-features-red-hat-openshift-service-mesh-1-1-0","ossm-manual-updates-1.0-1.1_ossm-release-notes-v1x","ossm-deprecated-features-1x_ossm-release-notes-v1x","deprecated-features-red-hat-openshift-service-mesh-1-1-5","ossm-rn-known-issues-1x_ossm-release-notes-v1x","ossm-rn-known-issues-ossm_ossm-release-notes-v1x","ossm-rn-known-issues-kiali_ossm-release-notes-v1x","distr-tracing-rn-known-issues_ossm-release-notes-v1x","ossm-rn-fixed-issues-1x_ossm-release-notes-v1x","ossm-rn-fixed-issues-ossm_ossm-release-notes-v1x","ossm-rn-fixed-issues-kiali_ossm-release-notes-v1x","distr-tracing-rn-fixed-issues_ossm-release-notes-v1x","ossm-architecture-v1x","ossm-understanding-service-mesh_ossm-architecture-v1x","ossm-architecture-1x_ossm-architecture-v1x","understanding-kiali-2","ossm-kiali-overview_ossm-architecture-v1x","ossm-kiali-architecture_ossm-architecture-v1x","ossm-kiali-features_ossm-architecture-v1x","understanding-jaeger","distr-tracing-product-overview_ossm-architecture-v1x","jaeger-architecture_ossm-architecture-v1x","distr-tracing-features_ossm-architecture-v1x","ossm-vs-community-v1x","ossm-multitenant-install_ossm-vs-istio-v1x","ossm-mt-vs-clusterwide_ossm-vs-istio-v1x","ossm-cluster-scoped-resources_ossm-vs-istio-v1x","ossm-vs-istio_ossm-vs-istio-v1x","ossm-cli-tool_ossm-vs-istio-v1x","ossm-automatic-injection_ossm-vs-istio-v1x","ossm-rbac_ossm-vs-istio-v1x","ossm-openssl_ossm-vs-istio-v1x","ossm-component-modifications_ossm-vs-istio-v1x","ossm-envoy-sds-ca_ossm-vs-istio-v1x","ossm-cni_ossm-vs-istio-v1x","ossm-routes-gateways_ossm-vs-istio-v1x","ossm-catch-all-domains_ossm-vs-istio-v1x","ossm-subdomains_ossm-vs-istio-v1x","ossm-tls_ossm-vs-istio-v1x","ossm-kiali-service-mesh_ossm-vs-istio-v1x","ossm-jaeger-service-mesh_ossm-vs-istio-v1x","preparing-ossm-installation-v1x","ossm-supported-configurations-v1x_preparing-ossm-installation-v1x","ossm-supported-configurations-kiali_preparing-ossm-installation-v1x","ossm-supported-configurations-adapters_preparing-ossm-installation-v1x","ossm-installation-activities_preparing-ossm-installation-v1x","installing-ossm-v1x","distr-tracing-operator-install-elasticsearch_installing-ossm-v1x","distr-tracing-jaeger-operator-install_installing-ossm-v1x","ossm-install-kiali_installing-ossm-v1x","ossm-install-ossm-operator_installing-ossm-v1x","ossm-control-plane-deploy-1x_installing-ossm-v1x","ossm-control-plane-deploy-operatorhub_installing-ossm-v1x","ossm-control-plane-deploy-cli_installing-ossm-v1x","ossm-member-roll-create_installing-ossm-v1x","ossm-member-roll-create-console_installing-ossm-v1x","ossm-member-roll-create-cli_installing-ossm-v1x","ossm-member-roll-modify_installing-ossm-v1x","ossm-member-roll-modify-console_installing-ossm-v1x","ossm-member-roll-modify-cli_installing-ossm-v1x","manual-updates","ossm-update-app-sidecar_installing-ossm-v1x","ossm-security-v1x","ossm-security-mtls_ossm-security-v1x","ossm-security-enabling-strict-mtls_ossm-security-v1x","ossm-security-mtls-sidecars-incoming-services_ossm-security-v1x","ossm-security-mtls-sidecars-outgoing_ossm-security-v1x","ossm-security-min-max-tls_ossm-security-v1x","ossm-security-cipher-1x_ossm-security-v1x","ossm-cert-manage-1x_ossm-security-v1x","ossm-cert-manage-add-cert-key-1x_ossm-security-v1x","ossm-cert-manage-verify-cert-1x_ossm-security-v1x","ossm-cert-cleanup-1x_ossm-security-v1x","ossm-routing-traffic-v1x","ossm-gateways_routing-traffic-v1x","ossm-routing-ingress-gateway_routing-traffic-v1x","ossm-routing-ingress_routing-traffic-v1x","ossm-routing-determine-ingress_routing-traffic-v1x","ossm-routing-config-ig-lb_routing-traffic-v1x","ossm-routing-config-ig-no-lb_routing-traffic-v1x","ossm-auto-route-1x_routing-traffic-v1x","ossm-auto-route-enable_routing-traffic-v1x","ossm-auto-route-subdomains_routing-traffic-v1x","ossm-routing-service-entries_routing-traffic-v1x","ossm-routing-virtual-services_routing-traffic-v1x","ossm-routing-vs_routing-traffic-v1x","virtualservice-configuration-reference-2","ossm-routing-destination-rules_routing-traffic-v1x","ossm-routing-bookinfo_routing-traffic-v1x","ossm-routing-bookinfo-applying_routing-traffic-v1x","ossm-routing-bookinfo-test_routing-traffic-v1x","ossm-routing-bookinfo-route_routing-traffic-v1x","deploying-applications-ossm-v1x","ossm-control-plane-templates-1x_deploying-applications-ossm-v1x","ossm-create-configmap_deploying-applications-ossm-v1x","ossm-automatic-sidecar-injection_deploying-applications-ossm-v1x","ossm-sidecar-injection-env-var_deploying-applications-ossm-v1x","ossm-mixer-policy-1x_deploying-applications-ossm-v1x","ossm-config-network-policy_deploying-applications-ossm-v1x","ossm-tutorial-bookinfo-overview_deploying-applications-ossm-v1x","ossm-tutorial-bookinfo-install_deploying-applications-ossm-v1x","ossm-tutorial-bookinfo-adding-destination-rules_deploying-applications-ossm-v1x","ossm-tutorial-bookinfo-verify-install_deploying-applications-ossm-v1x","ossm-tutorial-bookinfo-removing_deploying-applications-ossm-v1x","ossm-delete-bookinfo-project_deploying-applications-ossm-v1x","ossm-remove-bookinfo-smmr_deploying-applications-ossm-v1x","generating-sample-traces-analyzing-trace-data_deploying-applications-ossm-v1x","ossm-observability-v1x","ossm-observability-access-console_observability-v1x","ossm-observability-visual_observability-v1x","ossm-observability-topology_observability-v1x","ossm-custom-resources-v1x","ossm-cr-example-1x_ossm-controler-items-v1x","ossm-cr-parameters_ossm-controler-items-v1x","ossm-cr-istio-global_ossm-controler-items-v1x","ossm-cr-gateway_ossm-controler-items-v1x","ossm-cr-mixer_ossm-controler-items-v1x","ossm-cr-pilot_ossm-controler-items-v1x","configuring-kiali_ossm-controler-items-v1x","configuring-kiali-grafana_ossm-controler-items-v1x","configuring-kiali-jaeger_ossm-controler-items-v1x","ossm-configuring-jaeger_ossm-controler-items-v1x","ossm-configuring-jaeger-elasticsearch_ossm-controler-items-v1x","ossm-configuring-jaeger-existing-v1x_ossm-controler-items-v1x","ossm-jaeger-config-elasticsearch-v1x_ossm-controler-items-v1x","ossm-jaeger-config-es-cleaner-v1x_ossm-controler-items-v1x","ossm-cr-threescale_ossm-controler-items-v1x","threescale-adapter-v1x","ossm-threescale-integrate-1x_threescale-adapter-v1x","ossm-threescale-cr_threescale-adapter-v1x","ossm-threescale-templates_threescale-adapter-v1x","ossm-threescale-manifests_threescale-adapter-v1x","ossm-threescale-routing_threescale-adapter-v1x","ossm-threescale-integration-settings_threescale-adapter-v1x","ossm-threescale-caching_threescale-adapter-v1x","ossm-threescale-authentication_threescale-adapter-v1x","ossm-threescale-authentication-patterns_threescale-adapter-v1x","ossm-threescale-apikey-authentication_threescale-adapter-v1x","ossm-threescale-appidapikey-authentication_threescale-adapter-v1x","ossm-threescale-openid-authentication_threescale-adapter-v1x","ossm-threescale-hybrid-authentication_threescale-adapter-v1x","ossm-threescale-metrics-1x_threescale-adapter-v1x","ossm-threescale-istio-adapter-verification_threescale-adapter-v1x","ossm-threescale-istio-adapter-troubleshooting-checklist_threescale-adapter-v1x","removing-ossm-v1x","ossm-control-plane-remove_removing-ossm-v1x","ossm-control-plane-remove-operatorhub_removing-ossm-v1x","ossm-control-plane-remove-cli_removing-ossm-v1x","ossm-operatorhub-remove-operators_removing-ossm-v1x","ossm-remove-operator-servicemesh_removing-ossm-v1x","ossm-remove-cleanup-1x_removing-ossm-v1x","/documentation/openshift_container_platform/4.8/html/service_mesh/service-mesh-1-x",{"title":9870,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":9871,"url":9872,"docTitle":9873,"sections":9874},"Distributed tracing",[],"/documentation/openshift_container_platform/4.8/html/distributed_tracing/index","distributed_tracing",[9875,9905,9914],{"title":9876,"visible":10,"weight":23,"urlFragment":9877,"anchor":16,"singlePageAnchor":9877,"subChapters":9878,"url":9904,"docTitle":9873},"Distributed tracing release notes","distr-tracing-release-notes",[9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902,9903],"distr-tracing-product-overview_distributed-tracing-release-notes","making-open-source-more-inclusive_distributed-tracing-release-notes","support_distributed-tracing-release-notes","distr-tracing-rn-new-features_distributed-tracing-release-notes","new-features-and-enhancements-red-hat-openshift-distributed-tracing-2-5","component-versions-supported-in-red-hat-openshift-distributed-tracing-version-2-5","new-features-and-enhancements-red-hat-openshift-distributed-tracing-2-4","component-versions-supported-in-red-hat-openshift-distributed-tracing-version-2-4","new-features-and-enhancements-red-hat-openshift-distributed-tracing-2-3-1","component-versions-supported-in-red-hat-openshift-distributed-tracing-version-2-3-1","new-features-and-enhancements-red-hat-openshift-distributed-tracing-2-3-0","component-versions-supported-in-red-hat-openshift-distributed-tracing-version-2-3-0","new-features-and-enhancements-red-hat-openshift-distributed-tracing-2-2-0","component-versions-supported-in-red-hat-openshift-distributed-tracing-version-2-2-0","new-features-and-enhancements-red-hat-openshift-distributed-tracing-2-1-0","component-versions-supported-in-red-hat-openshift-distributed-tracing-version-2-1-0","new-features-and-enhancements-red-hat-openshift-distributed-tracing-2-0-0","component-versions-supported-in-red-hat-openshift-distributed-tracing-version-2-0-0","distr-tracing-rn-technology-preview_distributed-tracing-release-notes","red-hat-openshift-distributed-tracing-2-4-0-technology-preview","red-hat-openshift-distributed-tracing-2-2-0-technology-preview","red-hat-openshift-distributed-tracing-2-1-0-technology-preview","red-hat-openshift-distributed-tracing-2-0-0-technology-preview","distr-tracing-rn-known-issues_distributed-tracing-release-notes","distr-tracing-rn-fixed-issues_distributed-tracing-release-notes","/documentation/openshift_container_platform/4.8/html/distributed_tracing/distr-tracing-release-notes",{"title":9906,"visible":10,"weight":35,"urlFragment":9907,"anchor":16,"singlePageAnchor":9907,"subChapters":9908,"url":9913,"docTitle":9873},"Distributed tracing architecture","distributed-tracing-architecture",[9909,9910,9911,9912],"distr-tracing-architecture","distr-tracing-product-overview_distributed-tracing-architecture","distr-tracing-features_distributed-tracing-architecture","distr-tracing-architecture_distributed-tracing-architecture","/documentation/openshift_container_platform/4.8/html/distributed_tracing/distributed-tracing-architecture",{"title":9915,"visible":10,"weight":46,"urlFragment":9916,"anchor":16,"singlePageAnchor":9916,"subChapters":9917,"url":9956,"docTitle":9873},"Distributed tracing installation","distributed-tracing-installation",[9918,1006,9919,9920,9921,9922,9923,9924,9925,9926,9927,9928,9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944,9945,9946,9947,9948,9949,9950,9951,9952,9953,9954,9955],"installing-distributed-tracing","distr-tracing-install-overview_install-distributed-tracing","distr-tracing-operator-install-elasticsearch_install-distributed-tracing","distr-tracing-jaeger-operator-install_install-distributed-tracing","distr-tracing-install-otel-operator_install-distributed-tracing","distr-tracing-deploying","distr-tracing-deploy-default_deploying-distr-tracing-platform","distr-tracing-deploy-default-cli_deploying-distr-tracing-platform","distr-tracing-deploy-production_deploying-distr-tracing-platform","distr-tracing-deploy-production-cli_deploying-distr-tracing-platform","distr-tracing-deploy-streaming_deploying-distr-tracing-platform","distr-tracing-deploy-streaming-cli_deploying-distr-tracing-platform","validating-your-jaeger-deployment","distr-tracing-accessing-jaeger-console_deploying-distr-tracing-platform","customizing-your-deployment","distr-tracing-deployment-best-practices_deploying-distr-tracing-platform","distr-tracing-config-default_deploying-distr-tracing-platform","distr-tracing-config-jaeger-collector_deploying-distr-tracing-platform","distr-tracing-config-sampling_deploying-distr-tracing-platform","distr-tracing-config-storage_deploying-distr-tracing-platform","distributed-tracing-config-auto-provisioning-es_deploying-distr-tracing-platform","distributed-tracing-config-external-es_deploying-distr-tracing-platform","distr-tracing-manage-es-certificates_deploying-distr-tracing-platform","distr-tracing-config-query_deploying-distr-tracing-platform","distr-tracing-config-ingester_deploying-distr-tracing-platform","injecting-sidecars","dist-tracing-sidecar-automatic_deploying-distr-tracing-platform","distr-tracing-sidecar-manual_deploying-distr-tracing-platform","distr-tracing-deploying-otel","distr-tracing-config-otel-collector_deploying-distr-tracing-data-collection","validating-your-otel-deployment","distr-tracing-accessing-jaeger-console_deploying-distr-tracing-data-collection","upgrading-distributed-tracing","distr-tracing-changing-operator-channel_upgrading-distributed-tracing","removing-distributed-tracing","distr-tracing-removing-instance_removing-distributed-tracing","distr-tracing-removing-instance-cli_removing-distributed-tracing","removing-the-red-hat-openshift-distributed-tracing-operators","/documentation/openshift_container_platform/4.8/html/distributed_tracing/distributed-tracing-installation",{"title":9958,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":9959,"url":9960,"docTitle":9961,"sections":9962},"Serverless",[],"/documentation/openshift_container_platform/4.8/html/serverless/index","serverless",[9963,10016,10040,10068,10123,10251,10329,10348,10357,10368,10386,10491],{"title":76,"visible":10,"weight":23,"urlFragment":9964,"anchor":16,"singlePageAnchor":9964,"subChapters":9965,"url":10015,"docTitle":9961},"serverless-release-notes",[9966,9967,9968,9969,9970,9971,9972,9973,9974,9975,9976,9977,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003,10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014],"serverless-api-versions_serverless-release-notes","serverless-tech-preview-features_serverless-release-notes","serverless-deprecated-removed-features_serverless-release-notes","serverless-rn-1-28-0_serverless-release-notes","new-features-1-28-0_serverless-release-notes","known-issues-1-28-0_serverless-release-notes","serverless-rn-1-27_serverless-release-notes","new-features-1-27_serverless-release-notes","fixed-issues-1-27_serverless-release-notes","known-issues-1-27_serverless-release-notes","serverless-rn-1-26_serverless-release-notes","new-features-1.26_serverless-release-notes","fixed-issues-1.26_serverless-release-notes","known-issues-1.26_serverless-release-notes","serverless-rn-1-25-0_serverless-release-notes","new-features-1.25.0_serverless-release-notes","fixed-issues-1.25.0_serverless-release-notes","known-issues-1.25.0_serverless-release-notes","serverless-rn-1-24-0_serverless-release-notes","new-features-1.24.0_serverless-release-notes","fixed-issues-1.24.0_serverless-release-notes","known-issues-1-24-0_serverless-release-notes","serverless-rn-1-23-0_serverless-release-notes","new-features-1-23-0_serverless-release-notes","known-issues-1-23-0_serverless-release-notes","serverless-rn-1-22-0_serverless-release-notes","new-features-1-22-0_serverless-release-notes","known-issues-1-22-0_serverless-release-notes","serverless-rn-1-21-0_serverless-release-notes","new-features-1-21-0_serverless-release-notes","fixed-issues-1-21-0_serverless-release-notes","known-issues-1-21-0_serverless-release-notes","serverless-rn-1-20-0_serverless-release-notes","new-features-1-20-0_serverless-release-notes","known-issues-1-20-0_serverless-release-notes","serverless-rn-1-19-0_serverless-release-notes","new-features-1-19-0_serverless-release-notes","fixed-issues-1-19-0_serverless-release-notes","known-issues-1-19-0_serverless-release-notes","serverless-rn-1-18-0_serverless-release-notes","new-features-1-18-0_serverless-release-notes","fixed-issues-1-18-0_serverless-release-notes","known-issues-1-18-0_serverless-release-notes","serverless-rn-1-17-0_serverless-release-notes","new-features-1-17-0_serverless-release-notes","known-issues-1-17-0_serverless-release-notes","serverless-rn-1-16-0_serverless-release-notes","new-features-1-16-0_serverless-release-notes","known-issues-1-16-0_serverless-release-notes","/documentation/openshift_container_platform/4.8/html/serverless/serverless-release-notes",{"title":10017,"visible":10,"weight":35,"urlFragment":10018,"anchor":16,"singlePageAnchor":10018,"subChapters":10019,"url":10039,"docTitle":9961},"Discover","discover",[10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037,10038],"about-serverless","about-knative-serving_about-serverless","about-knative-serving-resources_about-serverless","about-knative-eventing_about-serverless","about-serverless-supported-configs","about-serverless-scalability-performance","additional-resources_about-serverless","serverless-functions-about","serverless-functions-about-runtimes","next-steps_serverless-functions-about","knative-event-sources","serverless-brokers","serverless-broker-types_serverless-brokers","serverless-broker-types-default_serverless-brokers","serverless-broker-types-production_serverless-brokers","next-steps_serverless-brokers","serverless-channels","serverless-channels-implementations","next-steps_serverless-channels","/documentation/openshift_container_platform/4.8/html/serverless/discover",{"title":922,"visible":10,"weight":46,"urlFragment":10041,"anchor":16,"singlePageAnchor":10041,"subChapters":10042,"url":10067,"docTitle":9961},"install",[10043,10044,10045,10046,10047,10048,10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064,10065,10066],"install-serverless-operator","install-serverless-operator-before-you-begin","serverless-cluster-sizing-req_install-serverless-operator","install-serverless-operator-scaling-with-machinesets","serverless-install-web-console_install-serverless-operator","serverless-install-cli_install-serverless-operator","additional-resources_install-serverless-operator","next-steps_install-serverless-operator","installing-knative-serving","serverless-install-serving-web-console_installing-knative-serving","serverless-install-serving-yaml_installing-knative-serving","next-steps_installing-knative-serving","installing-knative-eventing","serverless-install-eventing-web-console_installing-knative-eventing","serverless-install-eventing-yaml_installing-knative-eventing","next-steps_installing-knative-eventing","removing-openshift-serverless","serverless-uninstalling-knative-serving_removing-openshift-serverless","serverless-uninstalling-knative-eventing_removing-openshift-serverless","removing-openshift-serverless-removing-the-operator","olm-deleting-operators-from-a-cluster-using-web-console_removing-openshift-serverless","olm-deleting-operator-from-a-cluster-using-cli_removing-openshift-serverless","olm-refresh-subs_removing-openshift-serverless","serverless-deleting-crds_removing-openshift-serverless","/documentation/openshift_container_platform/4.8/html/serverless/install",{"title":10069,"visible":10,"weight":68,"urlFragment":10070,"anchor":16,"singlePageAnchor":10070,"subChapters":10071,"url":10122,"docTitle":9961},"Knative CLI","knative-cli",[10072,10073,10074,10075,10076,10077,10078,10079,10080,10081,10082,10083,10084,10085,10086,10087,10088,10089,10090,10091,10092,10093,10094,10095,10096,10097,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110,10111,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121],"installing-kn","installing-cli-web-console_installing-kn","serverless-installing-cli-linux-rpm-package-manager_installing-kn","installing-cli-linux_installing-kn","serverless-installing-cli-macos_installing-kn","installing-cli-windows_installing-kn","advanced-kn-config","kn-plugins","serverless-build-events-kn_kn-plugins","serverless-send-events-kn_kn-plugins","kn-serving-ref","kn-serving-ref-kn-service","creating-serverless-apps-kn_kn-serving-ref","kn-service-update_kn-serving-ref","kn-service-apply_kn-serving-ref","kn-service-describe_kn-serving-ref","kn-service-offline-about_kn-serving-ref","creating-an-offline-service_kn-serving-ref","kn-serving-ref-kn-container","serverless-kn-container_kn-serving-ref","kn-serving-ref-domain-mapping","serverless-create-domain-mapping-kn_kn-serving-ref","serverless-manage-domain-mapping-kn_kn-serving-ref","kn-eventing-ref","kn-eventing-ref-kn-sources","serverless-list-source-types-kn_kn-eventing-ref","specifying-sink-flag-kn_kn-eventing-ref","serverless-kn-containersource_kn-eventing-ref","apiserversource-kn_kn-eventing-ref","serverless-pingsource-kn_kn-eventing-ref","serverless-kafka-source-kn_kn-eventing-ref","kn-func-ref","serverless-create-func-kn_kn-func-ref","serverless-kn-func-run_kn-func-ref","serverless-build-func-kn_kn-func-ref","serverless-build-func-kn-image-containers_kn-func-ref","serverless-build-func-kn-image-registries_kn-func-ref","serverless-build-func-kn-push_kn-func-ref","serverless-build-func-kn-help_kn-func-ref","serverless-deploy-func-kn_kn-func-ref","functions-list-kn_kn-func-ref","describe-function-kn_kn-func-ref","serverless-kn-func-invoke_kn-func-ref","serverless-kn-func-invoke-reference_kn-func-ref","serverless-kn-func-invoke-main-parameters_kn-func-ref","serverless-kn-func-invoke-example-commands_kn-func-ref","serverless-kn-func-invoke-example-commands-specifying-file-with-data_kn-func-ref","serverless-kn-func-invoke-example-commands-specifying-function-project_kn-func-ref","serverless-kn-func-invoke-example-commands-specifying-where-function-is-deployed_kn-func-ref","serverless-kn-func-delete_kn-func-ref","/documentation/openshift_container_platform/4.8/html/serverless/knative-cli",{"title":6539,"visible":10,"weight":435,"urlFragment":10124,"anchor":16,"singlePageAnchor":10124,"subChapters":10125,"url":10250,"docTitle":9961},"develop",[10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,10141,10142,10143,10144,10145,10146,10147,10148,10149,10150,10151,10152,10153,10154,10155,10156,10157,10158,10159,10160,10161,10162,10163,10164,10165,10166,10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182,10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200,10201,10202,10203,10204,10205,10206,10207,10208,10209,10210,10211,10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227,10228,10229,10230,10231,10232,10233,10234,10235,10236,10237,10238,10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249],"serverless-applications","creating-serverless-apps-kn_serverless-applications","creating-an-offline-service_serverless-applications","creating-serverless-apps-yaml_serverless-applications","verifying-serverless-app-deployment_serverless-applications","interacting-serverless-apps-http2-gRPC_serverless-applications","serverless-services-network-policies_serverless-applications","serverless-init-containers-apps_serverless-applications","serverless-https-redirect-service_serverless-applications","additional-resources_serverless-applications","serverless-autoscaling-developer","serverless-autoscaling-developer-scale-bounds","serverless-autoscaling-developer-minscale_serverless-autoscaling-developer","serverless-autoscaling-minscale-kn_serverless-autoscaling-developer","serverless-autoscaling-developer-maxscale_serverless-autoscaling-developer","serverless-autoscaling-maxscale-kn_serverless-autoscaling-developer","serverless-about-concurrency_serverless-autoscaling-developer","serverless-concurrency-limits-configure-soft_serverless-autoscaling-developer","serverless-concurrency-limits-configure-hard_serverless-autoscaling-developer","serverless-target-utilization_serverless-autoscaling-developer","serverless-traffic-management","serverless-traffic-management-spec-examples","serverless-traffic-splitting-flags-kn_serverless-traffic-management","serverless-traffic-splitting-flags-kn-precedence_serverless-traffic-management","serverless-custom-revision-urls_serverless-traffic-management","serverless-custom-revision-urls-assign_serverless-traffic-management","serverless-custom-revision-urls-remove_serverless-traffic-management","serverless-create-traffic-split-kn_serverless-traffic-management","odc-splitting-traffic-between-revisions-using-developer-perspective_serverless-traffic-management","serverless-blue-green-deploy_serverless-traffic-management","serverless-configuring-routes","serverless-customize-labels-annotations-routes_serverless-configuring-routes","serverless-openshift-routes_serverless-configuring-routes","knative-service-cluster-local_serverless-configuring-routes","additional-resources_serverless-configuring-routes","serverless-event-sinks","specifying-sink-flag-kn_serverless-event-sinks","serverless-connect-sink-source-odc_serverless-event-sinks","serverless-connect-trigger-sink_serverless-event-sinks","serverless-event-delivery","serverless-event-delivery-component-behaviors_serverless-event-delivery","serverless-event-delivery-component-behaviors-kafka_serverless-event-delivery","serverless-event-delivery-parameters_serverless-event-delivery","serverless-configuring-event-delivery-examples_serverless-event-delivery","trigger-event-delivery-config_serverless-event-delivery","serverless-listing-event-sources","serverless-list-source-types-kn_serverless-listing-event-sources","serverless-list-source-types-odc_serverless-listing-event-sources","serverless-list-source_serverless-listing-event-sources","serverless-apiserversource","odc-creating-apiserversource_serverless-apiserversource","apiserversource-kn_serverless-apiserversource","specifying-sink-flag-kn_serverless-apiserversource","apiserversource-yaml_context","serverless-pingsource","serverless-pingsource-odc_serverless-pingsource","serverless-pingsource-kn_serverless-pingsource","specifying-sink-flag-kn_serverless-pingsource","serverless-pingsource-yaml_serverless-pingsource","serverless-custom-event-sources","serverless-sinkbinding-intro_context","serverless-sinkbinding-yaml_serverless-custom-event-sources","serverless-sinkbinding-kn_serverless-custom-event-sources","specifying-sink-flag-kn_serverless-custom-event-sources","serverless-sinkbinding-odc_serverless-custom-event-sources","serverless-sinkbinding-reference_serverless-custom-event-sources","serverless-sinkbinding-reference-subject-parameters_serverless-custom-event-sources","serverless-sinkbinding-reference-cloudevent-overrides_serverless-custom-event-sources","serverless-sinkbinding-reference-include-label_serverless-custom-event-sources","serverless-custom-event-sources-containersource","serverless-containersource-guidelines_serverless-custom-event-sources","serverless-kn-containersource_serverless-custom-event-sources","serverless-odc-create-containersource_serverless-custom-event-sources","serverless-containersource-reference_serverless-custom-event-sources","serverless-containersource-reference-cloudevent-overrides_serverless-custom-event-sources","serverless-creating-channels","serverless-create-channel-odc_serverless-creating-channels","serverless-create-channel-kn_serverless-creating-channels","serverless-create-default-channel-yaml_serverless-creating-channels","serverless-create-kafka-channel-yaml_serverless-creating-channels","next-steps_serverless-creating-channels","serverless-subs","serverless-creating-subscriptions-odc_serverless-subs","serverless-creating-subscriptions-yaml_serverless-subs","serverless-creating-subscriptions-kn_serverless-subs","serverless-describe-subs-kn_serverless-subs","serverless-list-subs-kn_serverless-subs","serverless-update-subscriptions-kn_serverless-subs","next-steps_serverless-subs","serverless-using-brokers","serverless-create-broker-kn_serverless-using-brokers","serverless-creating-broker-annotation_serverless-using-brokers","serverless-creating-broker-labeling_serverless-using-brokers","serverless-deleting-broker-injection_serverless-using-brokers","serverless-using-brokers-kafka_serverless-using-brokers","serverless-kafka-broker_serverless-using-brokers","serverless-kafka-broker-with-kafka-topic_serverless-using-brokers","serverless-using-brokers-managing-brokers","serverless-list-broker-kn_serverless-using-brokers","serverless-describe-broker-kn_serverless-using-brokers","next-steps_serverless-using-brokers","additional-resources_serverless-using-brokers","serverless-triggers","serverless-create-trigger-odc_serverless-triggers","serverless-create-kn-trigger_serverless-triggers","kn-trigger-list_serverless-triggers","kn-trigger-describe_serverless-triggers","kn-trigger-filtering_serverless-triggers","kn-trigger-update_serverless-triggers","delete-kn-trigger_serverless-triggers","trigger-event-delivery-config_serverless-triggers","next-steps_serverless-triggers","serverless-kafka-developer","serverless-kafka-delivery-retries_serverless-kafka-developer","serverless-kafka-developer-source","serverless-kafka-source-odc_serverless-kafka-developer","serverless-kafka-source-kn_serverless-kafka-developer","specifying-sink-flag-kn_serverless-kafka-developer","serverless-kafka-source-yaml_serverless-kafka-developer","serverless-kafka-developer-broker","serverless-create-kafka-channel-yaml_serverless-kafka-developer","serverless-kafka-developer-sink","serverless-kafka-sink_serverless-kafka-developer","additional-resources_serverless-kafka-developer","/documentation/openshift_container_platform/4.8/html/serverless/develop",{"title":10252,"visible":10,"weight":453,"urlFragment":10253,"anchor":16,"singlePageAnchor":10253,"subChapters":10254,"url":10328,"docTitle":9961},"Administer","administer",[10255,10256,10257,10258,10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287,10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303,10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319,10320,10321,10322,10323,10324,10325,10326,10327],"serverless-configuration","serverless-channel-default_serverless-configuration","serverless-broker-backing-channel-default_serverless-configuration","serverless-global-config-broker-class-default_serverless-configuration","serverless-enable-scale-to-zero_serverless-configuration","serverless-scale-to-zero-grace-period_serverless-configuration","serverless-configuration-CR-system-deployments","knative-serving-CR-system-deployments_serverless-configuration","knative-eventing-CR-system-deployments_serverless-configuration","serverless-config-emptydir_serverless-configuration","serverless-https-redirect-global_serverless-configuration","serverless-url-scheme-external-routes_serverless-configuration","serverless-kourier-gateway-service-type_serverless-configuration","serverless-enabling-pvc-support_serverless-configuration","serverless-admin-init-containers_serverless-configuration","serverless-tag-to-digest-resolution_serverless-configuration","knative-serving-controller-custom-certs-secrets_serverless-configuration","additional-resources_knative-serving-CR-config","serverless-kafka-admin","serverless-install-kafka-odc_serverless-kafka-admin","serverless-kafka-admin-security","serverless-kafka-broker-tls-default-config_serverless-kafka-admin","serverless-kafka-broker-sasl-default-config_serverless-kafka-admin","serverless-kafka-tls-channels_serverless-kafka-admin","serverless-kafka-sasl-channels_serverless-kafka-admin","serverless-kafka-sasl-source_serverless-kafka-admin","serverless-kafka-sink-security-config_serverless-kafka-admin","serverless-kafka-broker-configmap_serverless-kafka-admin","additional-resources_serverless-kafka-admin","serverless-admin-perspective","creating-serverless-apps-admin-console_serverless-admin-perspective","serverless-creating-event-source-admin-web-console_serverless-admin-perspective","serverless-creating-broker-admin-web-console_serverless-admin-perspective","serverless-creating-trigger-admin-web-console_serverless-admin-perspective","serverless-creating-channel-admin-web-console_serverless-admin-perspective","serverless-creating-subscription-admin-web-console_serverless-admin-perspective","additional-resources_serverless-cluster-admin-eventing","serverless-ossm-setup","prerequsites_serverless-ossm-setup","serverlesss-ossm-external-certs_serverless-ossm-setup","serverless-ossm-setup_serverless-ossm-setup","serverless-ossm-enabling-serving-metrics_serverless-ossm-setup","serverless-ossm-setup-with-kourier_serverless-ossm-setup","serverless-ossm-secret-filtering_serverless-ossm-setup","serverless-admin-metrics","prerequisites_serverless-admin-metrics","serverless-controller-metrics_serverless-admin-metrics","serverless-webhook-metrics_serverless-admin-metrics","serverless-admin-metrics-eventing","serverless-broker-ingress-metrics_serverless-admin-metrics","serverless-broker-filter-metrics_serverless-admin-metrics","serverless-inmemory-dispatch-metrics_serverless-admin-metrics","serverless-event-source-metrics_serverless-admin-metrics","serverless-admin-metrics-serving","serverless-activator-metrics_serverless-admin-metrics","serverless-autoscaler-metrics_serverless-admin-metrics","serverless-go-metrics_serverless-admin-metrics","metering-serverless","installing-metering-serverless","datasources-metering-serverless_metering-serverless","knative-service-cpu-usage-ds_metering-serverless","knative-service-memory-usage-ds_metering-serverless","applying-datasources-knative_metering-serverless","queries-metering-serverless_metering-serverless","knative-service-cpu-usage-query_metering-serverless","knative-service-memory-usage-query_metering-serverless","applying-queries-knative_metering-serverless","reports-metering-serverless_metering-serverless","reports-metering-serverless-run_metering-serverless","serverless-ha","serverless-config-replicas-serving_serverless-ha","serverless-config-replicas-eventing_serverless-ha","serverless-config-replicas-kafka_serverless-ha","/documentation/openshift_container_platform/4.8/html/serverless/administer",{"title":8284,"visible":10,"weight":468,"urlFragment":10330,"anchor":16,"singlePageAnchor":10330,"subChapters":10331,"url":10347,"docTitle":9961},"monitor",[10332,10333,10334,10335,10336,10337,10338,10339,10340,10341,10342,10343,10344,10345,10346],"cluster-logging-serverless","cluster-logging-about_cluster-logging-serverless","cluster-logging-deploying-about_cluster-logging-serverless","cluster-logging-deploy-about-config_cluster-logging-serverless","cluster-logging-deploy-about-sample_cluster-logging-serverless","using-cluster-logging-to-find-logs-for-knative-serving-components_cluster-logging-serverless","using-cluster-logging-to-find-logs-for-services-deployed-with-knative-serving_cluster-logging-serverless","serverless-developer-metrics","serverless-monitoring-services-default-metrics_serverless-developer-metrics","serverless-monitoring-services-custom-metrics_serverless-developer-metrics","serverless-monitoring-services-configuration-scraping_serverless-developer-metrics","serverless-monitoring-services-examining-metrics_serverless-developer-metrics","serverless-queue-proxy-metrics_serverless-developer-metrics","serverless-monitoring-services-examining-metrics-dashboard_serverless-developer-metrics","additional-resources_serverless-service-monitoring","/documentation/openshift_container_platform/4.8/html/serverless/monitor",{"title":10349,"visible":10,"weight":869,"urlFragment":10350,"anchor":16,"singlePageAnchor":10350,"subChapters":10351,"url":10356,"docTitle":9961},"Tracing requests","serverless-tracing",[10352,10353,10354,10355],"distr-tracing-product-overview_serverless-tracing","serverless-open-telemetry_serverless-tracing","serverless-jaeger-config_serverless-tracing","additional-resources_serverless-tracing","/documentation/openshift_container_platform/4.8/html/serverless/serverless-tracing",{"title":10358,"visible":10,"weight":877,"urlFragment":10359,"anchor":16,"singlePageAnchor":10359,"subChapters":10360,"url":10367,"docTitle":9961},"OpenShift Serverless support","serverless-support",[10361,10362,10363,10364,10365,10366],"support-knowledgebase-about_serverless-support","support-knowledgebase-search_serverless-support","support-submitting-a-case_serverless-support","serverless-support-gather-info","about-must-gather_serverless-support","serverless-about-collecting-data_serverless-support","/documentation/openshift_container_platform/4.8/html/serverless/serverless-support",{"title":10369,"visible":10,"weight":888,"urlFragment":10370,"anchor":16,"singlePageAnchor":10370,"subChapters":10371,"url":10385,"docTitle":9961},"Security","security",[10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383,10384],"serverless-config-tls","serverless-enabling-tls-internal-traffic_serverless-config-tls","serverless-enabling-tls-local-services_serverless-config-tls","serverless-domain-mapping-custom-tls-cert_serverless-config-tls","serverless-kafka-broker-tls-default-config_serverless-config-tls","serverless-kafka-tls-channels_serverless-config-tls","serverless-ossm-with-kourier-jwt","serverless-ossm-v2x-jwt_serverless-ossm-with-kourier-jwt","serverless-ossm-v1x-jwt_serverless-ossm-with-kourier-jwt","serverless-custom-domains","serverless-create-domain-mapping_serverless-custom-domains","serverless-create-domain-mapping-kn_serverless-custom-domains","serverless-domain-mapping-custom-tls-cert_serverless-custom-domains","/documentation/openshift_container_platform/4.8/html/serverless/security",{"title":10387,"visible":10,"weight":899,"urlFragment":10388,"anchor":16,"singlePageAnchor":10388,"subChapters":10389,"url":10490,"docTitle":9961},"Functions","functions",[10390,10391,10392,10393,10394,10395,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407,10408,10409,10410,10411,10412,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422,10423,10424,10425,10426,10427,10428,10429,10430,10431,10432,10433,10434,10435,10436,10437,10438,10439,10440,10441,10442,10443,10444,10445,10446,10447,10448,10449,10450,10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466,10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482,10483,10484,10485,10486,10487,10488,10489],"serverless-functions-setup","prerequisites_serverless-functions-setup","serverless-functions-podman_serverless-functions-setup","serverless-functions-podman-macos_serverless-functions-setup","next-steps_serverless-functions-setup","serverless-functions-getting-started","prerequisites_serverless-functions-getting-started","serverless-create-func-kn_serverless-functions-getting-started","serverless-kn-func-run_serverless-functions-getting-started","serverless-build-func-kn_serverless-functions-getting-started","serverless-build-func-kn-image-containers_serverless-functions-getting-started","serverless-build-func-kn-image-registries_serverless-functions-getting-started","serverless-build-func-kn-push_serverless-functions-getting-started","serverless-build-func-kn-help_serverless-functions-getting-started","serverless-deploy-func-kn_serverless-functions-getting-started","serverless-kn-func-invoke_serverless-functions-getting-started","serverless-kn-func-delete_serverless-functions-getting-started","additional-resources_serverless-functions-getting-started","next-steps_serverless-functions-getting-started","serverless-functions-on-cluster-builds","serverless-functions-creating-on-cluster-builds_serverless-functions-on-cluster-builds","serverless-functions-specifying-function-revision_serverless-functions-on-cluster-builds","serverless-developing-quarkus-functions","prerequisites_serverless-developing-quarkus-functions","serverless-quarkus-template_serverless-developing-quarkus-functions","serverless-invoking-quarkus-functions_serverless-developing-quarkus-functions","serverless-invoking-quarkus-functions-examples_serverless-developing-quarkus-functions","serverless-quarkus-cloudevent-attributes_serverless-developing-quarkus-functions","serverless-quarkus-function-return-values_serverless-developing-quarkus-functions","serverless-functions-quarkus-return-value-types_serverless-developing-quarkus-functions","serverless-testing-quarkus-functions_serverless-developing-quarkus-functions","next-steps_serverless-developing-quarkus-functions","serverless-developing-nodejs-functions","prerequisites_serverless-developing-nodejs-functions","serverless-nodejs-template_serverless-developing-nodejs-functions","serverless-developing-nodejs-functions-about-invoking","serverless-nodejs-functions-context-objects_serverless-developing-nodejs-functions","serverless-nodejs-functions-context-objects-methods_serverless-developing-nodejs-functions","serverless-nodejs-functions-context-objects-cloudevent-data_serverless-developing-nodejs-functions","serverless-nodejs-function-return-values_serverless-developing-nodejs-functions","serverless-nodejs-function-return-values-headers_serverless-developing-nodejs-functions","serverless-nodejs-function-return-values-status-codes_serverless-developing-nodejs-functions","serverless-testing-nodejs-functions_serverless-developing-nodejs-functions","next-steps_serverless-developing-nodejs-functions","serverless-developing-typescript-functions","prerequisites_serverless-developing-typescript-functions","serverless-typescript-template_serverless-developing-typescript-functions","serverless-developing-typescript-functions-about-invoking","serverless-typescript-functions-context-objects_serverless-developing-typescript-functions","serverless-typescript-functions-context-objects-methods_serverless-developing-typescript-functions","serverless-typescript-functions-context-types_serverless-developing-typescript-functions","serverless-typescript-functions-context-objects-cloudevent-data_serverless-developing-typescript-functions","serverless-typescript-function-return-values_serverless-developing-typescript-functions","serverless-typescript-function-return-values-headers_serverless-developing-typescript-functions","serverless-typescript-function-return-values-status-codes_serverless-developing-typescript-functions","serverless-testing-typescript-functions_serverless-developing-typescript-functions","next-steps_serverless-developing-typescript-functions","serverless-functions-eventing","serverless-connect-func-source-odc_serverless-functions-eventing","serverless-functions-project-configuration","serverless-functions-func-yaml_serverless-functions-yaml","serverless-functions-func-yaml-buildenvs_serverless-functions-yaml","serverless-functions-func-yaml-envs_serverless-functions-yaml","serverless-functions-func-yaml-builder_serverless-functions-yaml","serverless-functions-func-yaml-build_serverless-functions-yaml","serverless-functions-func-yaml-volumes_serverless-functions-yaml","serverless-functions-func-yaml-options_serverless-functions-yaml","serverless-functions-func-yaml-image_serverless-functions-yaml","serverless-functions-func-yaml-imagedigest_serverless-functions-yaml","serverless-functions-func-yaml-labels_serverless-functions-yaml","serverless-functions-func-yaml-name_serverless-functions-yaml","serverless-functions-func-yaml-namespace_serverless-functions-yaml","serverless-functions-func-yaml-runtime_serverless-functions-yaml","serverless-functions-func-yaml-environment-variables_serverless-functions-yaml","additional-resources_serverless-functions-project-configuration","serverless-functions-accessing-secrets-configmaps","serverless-functions-secrets-configmaps-interactively_serverless-functions-secrets","serverless-functions-secrets-configmaps-interactively-specialized_serverless-functions-secrets","serverless-functions-secrets-configmaps-manually_serverless-functions-secrets","serverless-functions-mounting-secret-as-volume_serverless-functions-secrets","serverless-functions-mounting-configmap-as-volume_serverless-functions-secrets","serverless-functions-key-value-in-secret-to-env-variable_serverless-functions-secrets","serverless-functions-key-value-in-configmap-to-env-variable_serverless-functions-secrets","serverless-functions-all-values-in-secret-to-env-variables_serverless-functions-secrets","serverless-functions-all-values-in-configmap-to-env-variables_serverless-functions-secrets","serverless-functions-attributes","serverless-functions-adding-annotations_serverless-functions-annotations","serverless-functions-reference-guide","serverless-nodejs-context-object-reference_serverless-functions-reference-guide","serverless-nodejs-context-object-reference-log_serverless-functions-reference-guide","serverless-nodejs-context-object-reference-query_serverless-functions-reference-guide","serverless-nodejs-context-object-reference-body_serverless-functions-reference-guide","serverless-nodejs-context-object-reference-headers_serverless-functions-reference-guide","serverless-nodejs-context-object-reference-http-requests_serverless-functions-reference-guide","serverless-typescript-context-object-reference_serverless-functions-reference-guide","serverless-typescript-context-object-reference-log_serverless-functions-reference-guide","serverless-typescript-context-object-reference-query_serverless-functions-reference-guide","serverless-typescript-context-object-reference-body_serverless-functions-reference-guide","serverless-typescript-context-object-reference-headers_serverless-functions-reference-guide","serverless-typescript-context-object-reference-http-requests_serverless-functions-reference-guide","/documentation/openshift_container_platform/4.8/html/serverless/functions",{"title":10492,"visible":10,"weight":906,"urlFragment":10493,"anchor":16,"singlePageAnchor":10493,"subChapters":10494,"url":10502,"docTitle":9961},"Integrations","integrations",[10495,10496,10497,10498,10499,10500,10501],"serverless-cost-management-integration","prerequisites_serverless-cost-management-integration","serverless-cost-management-labels_serverless-cost-management-integration","additional-resources_serverless-cost-management-integration","gpu-resources","serverless-gpu-resources-kn_gpu-resources","additional-requirements_gpu-resources","/documentation/openshift_container_platform/4.8/html/serverless/integrations",{"title":10504,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":10505,"url":10506,"docTitle":10507,"sections":10508},"OpenShift Virtualization",[],"/documentation/openshift_container_platform/4.8/html/openshift_virtualization/index","openshift_virtualization",[10509,10516,10524,10542,10594,10605,10614,10621,10947,10977,10999,11025,11051],{"title":10510,"visible":10,"weight":23,"urlFragment":10511,"anchor":16,"singlePageAnchor":10511,"subChapters":10512,"url":10515,"docTitle":10507},"About OpenShift Virtualization","about-virt",[10513,10514],"virt-what-you-can-do-with-virt_about-virt","virt-supported-cluster-version_about-virt","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/about-virt",{"title":10517,"visible":10,"weight":35,"urlFragment":10518,"anchor":16,"singlePageAnchor":10518,"subChapters":10519,"url":10523,"docTitle":10507},"Start here with OpenShift Virtualization","start-here-with-openshift-virtualization",[10520,10521,10522],"virt-learn-more-cluster-administrator","virt-learn-more-virtualization-administrator","virt-learn-more-developer","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/start-here-with-openshift-virtualization",{"title":10525,"visible":10,"weight":46,"urlFragment":10526,"anchor":16,"singlePageAnchor":10526,"subChapters":10527,"url":10541,"docTitle":10507},"OpenShift Virtualization release notes","openshift-virtualization-release-notes",[10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540],"about-red-hat-openshift-virtualization","virt-supported-cluster-version_virt-4-8-release-notes","virt-guest-os","virt-4-8-inclusive-language","virt-4-8-new","virt-4-8-quick-starts","virt-4-8-networking-new","virt-4-8-storage-new","virt-4-8-deprecated-removed","virt-4-8-deprecated","virt-4-8-changes","virt-4-8-technology-preview","virt-4-8-known-issues","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/openshift-virtualization-release-notes",{"title":10543,"visible":10,"weight":68,"urlFragment":10544,"anchor":16,"singlePageAnchor":10544,"subChapters":10545,"url":10593,"docTitle":10507},"Installing OpenShift Virtualization","installing-openshift-virtualization",[10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557,10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,10568,10569,10570,10571,10572,10573,10574,10575,10576,10577,10578,10579,10580,971,10581,10582,10583,10584,10585,10586,1006,10587,10588,10589,10590,10591,10592],"preparing-cluster-for-virt","virt-hardware-os-requirements_preparing-cluster-for-virt","virt-cluster-resource-requirements_preparing-cluster-for-virt","memory-overhead_preparing-cluster-for-virt","CPU-overhead_preparing-cluster-for-virt","storage-overhead_preparing-cluster-for-virt","example-scenario_preparing-cluster-for-virt","object-maximums_preparing-cluster-for-virt","restricted-networks-environments_preparing-cluster-for-virt","live-migration_preparing-cluster-for-virt","snapshots-and-cloning_preparing-cluster-for-virt","cluster-high-availability-options_preparing-cluster-for-virt","virt-specifying-nodes-for-virtualization-components","virt-about-node-placement-virtualization-components_virt-specifying-nodes-for-virtualization-components","how-to-apply-node-placement-rules-virt-components","node-placement-olm-subscription_virt-specifying-nodes-for-virtualization-components","node-placement-hco_virt-specifying-nodes-for-virtualization-components","node-placement-hpp_virt-specifying-nodes-for-virtualization-components","additional-resources_virt-specifying-nodes-for-virtualization-components","example-manifests_virt-specifying-nodes-for-virtualization-components","olm-subscription-examples_virt-specifying-nodes-for-virtualization-components","virt-example-node-placement-node-selector-olm-subscription_virt-specifying-nodes-for-virtualization-components","virt-example-node-placement-tolerations-olm-subscription_virt-specifying-nodes-for-virtualization-components","hyperconverged-cluster-cr-examples_virt-specifying-nodes-for-virtualization-components","virt-example-node-placement-node-selector-hyperconverged-cr_virt-specifying-nodes-for-virtualization-components","virt-example-node-placement-affinity-hyperconverged-cr_virt-specifying-nodes-for-virtualization-components","virt-example-node-placement-tolerations-hyperconverged-cr_virt-specifying-nodes-for-virtualization-components","hpp-object-examples_virt-specifying-nodes-for-virtualization-components","virt-example-node-placement-node-selector-hpp_virt-specifying-nodes-for-virtualization-components","installing-virt-web","virt-installing-virt-operator_installing-virt-web","installing-virt-web-next-steps","prerequisites_installing-virt-cli","virt-subscribing-cli_installing-virt-cli","virt-deploying-operator-cli_installing-virt-cli","virt-installing-virtctl","virt-installing-virtctl-client-web_virt-installing-virtctl","virt-enabling-virt-repos_virt-installing-virtctl","virt-installing-virtctl-client_virt-installing-virtctl","virt-installing-virtctl-addtl-resources","uninstalling-openshift-virtualization-using-the-web-console","virt-deleting-deployment-custom-resource_uninstalling-virt-web","virt-deleting-catalog-subscription_uninstalling-virt-web","deleting-a-namespace-using-the-web-console_uninstalling-virt-web","uninstalling-openshift-virtualization-using-the-cli","uninstalling-virt-cli-prereqs","virt-deleting-virt-cli_uninstalling-virt-cli","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/installing-openshift-virtualization",{"title":10595,"visible":10,"weight":435,"urlFragment":10596,"anchor":16,"singlePageAnchor":10596,"subChapters":10597,"url":10604,"docTitle":10507},"Updating OpenShift Virtualization","upgrading-openshift-virtualization",[10598,10599,10600,10601,10602,10603],"virt-about-upgrading-virt_upgrading-virt","how-upgrades-work_upgrading-virt","how-upgrades-affect-cluster_upgrading-virt","olm-approving-pending-upgrade_upgrading-virt","virt-monitoring-upgrade-status_upgrading-virt","additional-resources_upgrading-virt","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/upgrading-openshift-virtualization",{"title":10606,"visible":10,"weight":453,"urlFragment":10607,"anchor":16,"singlePageAnchor":10607,"subChapters":10608,"url":10613,"docTitle":10507},"Additional security privileges granted for kubevirt-controller and virt-launcher","virt-additional-security-privileges-controller-and-launcher",[10609,10610,10611,10612,1546],"virt-extended-selinux-policies-for-virt-launcher_virt-additional-security-privileges-controller-and-launcher","virt-additional-scc-for-kubevirt-controller_virt-additional-security-privileges-controller-and-launcher","additional-sccs-granted-to-the-kubevirt-controller-service-account","viewing-the-scc-and-rbac-definitions-for-the-kubevirt-controller","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/virt-additional-security-privileges-controller-and-launcher",{"title":10615,"visible":10,"weight":468,"urlFragment":10616,"anchor":16,"singlePageAnchor":10616,"subChapters":10617,"url":10620,"docTitle":10507},"Using the CLI tools","virt-using-the-cli-tools",[1017,10618,10619],"virt-virtctl-commands_virt-using-the-cli-tools","virt-openshift-client-commands_virt-using-the-cli-tools","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/virt-using-the-cli-tools",{"title":10622,"visible":10,"weight":869,"urlFragment":10623,"anchor":16,"singlePageAnchor":10623,"subChapters":10624,"url":10946,"docTitle":10507},"Virtual machines","virtual-machines",[10625,10626,10627,10628,10629,10630,10631,10632,10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648,10649,10650,10651,10652,10653,10654,10655,10656,10657,10658,10659,10660,10661,10662,10663,10664,10665,10666,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677,10678,10679,10680,10681,10682,10683,10684,10685,10686,10687,10688,1038,10689,10690,10691,10692,10693,1598,10694,10695,10696,10697,10698,10699,10700,1089,10701,10702,10703,10704,10705,10706,10707,10708,10709,10710,10711,10712,10713,10714,10715,10716,10717,10718,10719,10720,10721,10722,10723,10724,10725,10726,10727,10728,1114,10729,10730,10731,10732,10733,10734,1142,10735,10736,10737,10738,1174,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,10762,10763,1223,10764,10765,10766,10767,10768,1299,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780,10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796,10797,1309,10798,10799,10800,1329,10801,10802,10803,10804,10805,1352,10806,10807,10808,10809,10810,1375,10811,10812,10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828,10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,1402,10839,10840,10841,997,10842,1430,10843,1015,10844,1505,10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876,10877,10878,1515,10879,10880,10881,10882,1535,10883,10884,10885,10886,10887,10888,1581,10889,10890,10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,1626,10905,10906,10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,10920,10921,10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,1036,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944,10945],"virt-create-vms","virt-creating-vm-quick-start-web_virt-create-vms","virt-creating-vm-wizard-web_virt-create-vms","virt-vm-wizard-fields-web_virt-create-vms","virt-networking-wizard-fields-web_virt-create-vms","virt-storage-wizard-fields-web_virt-create-vms","virt-cloud-init-fields-web_virt-create-vms","virt-creating-vm-yaml-web_virt-create-vms","virt-creating-vm-cli_virt-create-vms","virt-vm-storage-volume-types_virt-create-vms","virt-about-runstrategies-vms_virt-create-vms","additional-resources_virt-create-vms_virt-create-vms","virt-edit-vms","virt-editing-vm-web_virt-edit-vms","virt-editing-vm-yaml-web_virt-edit-vms","virt-editing-vm-cli_virt-edit-vms","virt-vm-add-disk_virt-edit-vms","virt-storage-wizard-fields-web_virt-edit-vms","virt-vm-add-nic_virt-edit-vms","virt-networking-wizard-fields-web_virt-edit-vms","virt-vm-edit-cdrom_virt-edit-vms","virt-edit-boot-order","virt-add-boot-order-web_virt-edit-boot-order","virt-edit-boot-order-web_virt-edit-boot-order","virt-edit-boot-order-yaml-web_virt-edit-boot-order","virt-remove-boot-order-item-web_virt-edit-boot-order","virt-delete-vms","virt-delete-vm-web_virt-delete-vms","virt-deleting-vms_virt-delete-vms","virt-manage-vmis","virt-about-vmis_virt-manage-vmis","virt-listing-vmis-cli_virt-manage-vmis","virt-listing-vmis-web_virt-manage-vmis","virt-editing-vmis-web_virt-manage-vmis","virt-deleting-vmis-cli_virt-manage-vmis","virt-deleting-vmis-web_virt-manage-vmis","virt-controlling-vm-states","virt-starting-vm-web_virt-controlling-vm-states","virt-restarting-vm-web_virt-controlling-vm-states","virt-stopping-vm-web_virt-controlling-vm-states","virt-unpausing-vm-web_virt-controlling-vm-states","virt-accessing-vm-consoles","virt-accessing-vm-consoles-web","virt-vm-serial-console-web_virt-accessing-vm-consoles","virt-connecting-vnc-console_virt-accessing-vm-consoles","virt-vm-rdp-console-web_virt-accessing-vm-consoles","virt-copying-the-ssh-command_virt-accessing-vm-consoles","virt-accessing-vm-consoles-cli","virt-accessing-vmi-ssh_virt-accessing-vm-consoles","virt-accessing-vm-yaml-ssh_virt-accessing-vm-consoles","virt-accessing-serial-console_virt-accessing-vm-consoles","virt-accessing-vnc-console_virt-accessing-vm-consoles","virt-accessing-rdp-console_virt-accessing-vm-consoles","virt-triggering-vm-failover-resolving-failed-node","prerequisites_virt-triggering-vm-failover-resolving-failed-node","nodes-nodes-working-deleting-bare-metal_virt-triggering-vm-failover-resolving-failed-node","verifying-vm-failover_virt-triggering-vm-failover-resolving-failed-node","virt-listing-vmis-cli_virt-triggering-vm-failover-resolving-failed-node","virt-installing-qemu-guest-agent","virt-installing-qemu-guest-agent-on-linux-vm_virt-installing-qemu-guest-agent","installing-qemu-guest-agent-on-a-windows-virtual-machine","virt-installing-virtio-drivers-existing-windows_virt-installing-qemu-guest-agent","virt-installing-virtio-drivers-installing-windows_virt-installing-qemu-guest-agent","virt-viewing-qemu-guest-agent-web","About-the-qemu-guest-agent-web_virt-viewing-qemu-guest-agent-web","virt-viewing-qemu-guest-agent-information-web_virt-viewing-qemu-guest-agent-web","virt-managing-configmaps-secrets-service-accounts","virt-adding-secret-configmap-service-account-to-vm_virt-managing-configmaps-secrets-service-accounts","virt-removing-secret-configmap-service-account-vm_virt-managing-configmaps-secrets-service-accounts","virt-installing-virtio-drivers-on-existing-windows-vm","virt-understanding-virtio-drivers_virt-installing-virtio-drivers-on-existing-windows-vm","virt-supported-virtio-drivers_virt-installing-virtio-drivers-on-existing-windows-vm","virt-adding-virtio-drivers-vm-yaml_virt-installing-virtio-drivers-on-existing-windows-vm","virt-installing-virtio-drivers-existing-windows_virt-installing-virtio-drivers-on-existing-windows-vm","virt-removing-virtio-disk-from-vm_virt-installing-virtio-drivers-on-existing-windows-vm","virt-installing-virtio-drivers-on-new-windows-vm","virt-understanding-virtio-drivers_virt-installing-virtio-drivers-on-new-windows-vm","virt-supported-virtio-drivers_virt-installing-virtio-drivers-on-new-windows-vm","virt-adding-virtio-drivers-vm-yaml_virt-installing-virtio-drivers-on-new-windows-vm","virt-installing-virtio-drivers-installing-windows_virt-installing-virtio-drivers-on-new-windows-vm","virt-removing-virtio-disk-from-vm_virt-installing-virtio-drivers-on-new-windows-vm","advanced-virtual-machine-management","virt-working-with-resource-quotas-for-vms","virt-setting-resource-quota-limits-for-vms_virt-working-with-resource-quotas-for-vms","additional-resources_virt-working-with-resource-quotas-for-vms","virt-specifying-nodes-for-vms","virt-about-node-placement-vms_virt-specifying-nodes-for-vms","node-placement-examples_virt-specifying-nodes-for-vms","virt-example-vm-node-placement-node-selector_virt-specifying-nodes-for-vms","virt-example-vm-node-placement-pod-affinity_virt-specifying-nodes-for-vms","virt-example-vm-node-placement-node-affinity_virt-specifying-nodes-for-vms","virt-example-vm-node-placement-tolerations_virt-specifying-nodes-for-vms","additional-resources_virt-specifying-nodes-for-vms","virt-configuring-certificate-rotation","virt-configuring-certificate-rotation_virt-configuring-certificate-rotation","virt-troubleshooting-cert-rotation-parameters_virt-configuring-certificate-rotation","virt-automating-management-tasks","virt-about-red-hat-ansible-automation_virt-automating-management-tasks","virt-automating-virtual-machine-creation-with-ansible_virt-automating-management-tasks","virt-example-ansible-playbook-creating-vms_virt-automating-management-tasks","virt-efi-mode-for-vms","virt-about-efi-mode-for-vms_virt-efi-mode-for-vms","virt-booting-vms-efi-mode_virt-efi-mode-for-vms","configuring-pxe-booting","virt-pxe-booting-with-mac-address_pxe-booting","virt-pxe-vmi-template_pxe-booting","virt-managing-guest-memory","virt-configuring-guest-memory-overcommitment_virt-managing-guest-memory","virt-disabling-guest-memory-overhead-accounting_virt-managing-guest-memory","virt-using-huge-pages-with-vms","what-huge-pages-do_virt-using-huge-pages-with-vms","virt-configuring-huge-pages-for-vms_virt-using-huge-pages-with-vms","virt-dedicated-resources-vm","virt-about-dedicated-resources_virt-dedicated-resources-vm","virt-enabling-dedicated-resources_virt-dedicated-resources-vm","virt-schedule-vms","understanding-policy-attributes_virt-schedule-vms","virt-setting-policy-attributes_virt-schedule-vms","virt-schedule-supported-cpu-model-vms_virt-schedule-vms","virt-schedule-cpu-host-model-vms_virt-schedule-vms","virt-configuring-pci-passthrough","virt-about_pci-passthrough_virt-configuring-pci-passthrough","virt-adding-kernel-arguments-enable-IOMMU_virt-configuring-pci-passthrough","virt-binding-devices-vfio-driver_virt-configuring-pci-passthrough","virt-exposing-pci-device-in-cluster-cli_virt-configuring-pci-passthrough","virt-removing-pci-device-from-cluster_virt-configuring-pci-passthrough","virt-configuring-vms-for-pci-passthrough","virt-assigning-pci-device-virtual-machine_virt-configuring-pci-passthrough","additional-resources_configuring-pci-passthrough","virt-configuring-a-watchdog","virt-configuring-a-watchdog_prerequisites","virt-defining-a-watchdog","virt-installing-a-watchdog_virt-configuring-a-watchdog","virt-configuring-a-watchdog_additional-resources","importing-virtual-machines","virt-tls-certificates-for-dv-imports","virt-adding-tls-certificates-for-authenticating-dv-imports_virt-tls-certificates-for-dv-imports","virt-example-configmap-tls-certificate_virt-tls-certificates-for-dv-imports","virt-importing-virtual-machine-images-datavolumes","virt-cdi-supported-operations-matrix_virt-importing-virtual-machine-images-datavolumes","virt-about-datavolumes_virt-importing-virtual-machine-images-datavolumes","virt-importing-vm-datavolume_virt-importing-virtual-machine-images-datavolumes","virt-importing-virtual-machine-images-datavolumes_additional-resources","virt-importing-virtual-machine-images-datavolumes-block","virt-about-datavolumes_virt-importing-virtual-machine-images-datavolumes-block","virt-about-block-pvs_virt-importing-virtual-machine-images-datavolumes-block","virt-creating-local-block-pv_virt-importing-virtual-machine-images-datavolumes-block","virt-importing-vm-to-block-pv_virt-importing-virtual-machine-images-datavolumes-block","virt-cdi-supported-operations-matrix_virt-importing-virtual-machine-images-datavolumes-block","virt-importing-virtual-machine-images-datavolumes-block_additional-resources","virt-importing-rhv-vm","virt-features-for-storage-matrix_virt-importing-rhv-vm","virt-importing-vm-prerequisites_virt-importing-rhv-vm","virt-importing-vm-wizard_virt-importing-rhv-vm","virt-importing-vm-cli_virt-importing-rhv-vm","virt-creating-configmap_virt-importing-rhv-vm","virt-troubleshooting-vm-import_virt-importing-rhv-vm","logs_virt-importing-rhv-vm","error-messages_virt-importing-rhv-vm","known-issues_virt-importing-rhv-vm","virt-importing-vmware-vm","virt-features-for-storage-matrix_virt-importing-vmware-vm","preparing-a-vddk-image_virt-importing-vmware-vm","configuring-an-internal-image-registry_virt-importing-vmware-vm","configuring-an-external-image-registry_virt-importing-vmware-vm","virt-creating-vddk-image_virt-importing-vmware-vm","virt-importing-vm-wizard_virt-importing-vmware-vm","virt-updating-imported-vmware-vm-network-name_virt-importing-vmware-vm","virt-troubleshooting-vm-import_virt-importing-vmware-vm","logs_virt-importing-vmware-vm","error-messages_virt-importing-vmware-vm","cloning-virtual-machines","virt-enabling-user-permissions-to-clone-datavolumes","virt-about-datavolumes_virt-enabling-user-permissions-to-clone-datavolumes","virt-creating-rbac-cloning-dvs_virt-enabling-user-permissions-to-clone-datavolumes","virt-cloning-vm-disk-into-new-datavolume","virt-about-datavolumes_virt-cloning-vm-disk-into-new-datavolume","virt-cloning-pvc-of-vm-disk-into-new-datavolume_virt-cloning-vm-disk-into-new-datavolume","virt-template-datavolume-clone_virt-cloning-vm-disk-into-new-datavolume","virt-cdi-supported-operations-matrix_virt-cloning-vm-disk-into-new-datavolume","virt-cloning-vm-using-datavolumetemplate","virt-about-datavolumes_virt-cloning-vm-using-datavolumetemplate","virt-creating-new-vm-from-cloned-pvc-using-datavolumetemplate_virt-cloning-vm-using-datavolumetemplate","virt-template-datavolume-vm_virt-cloning-vm-using-datavolumetemplate","virt-cdi-supported-operations-matrix_virt-cloning-vm-using-datavolumetemplate","virt-cloning-vm-disk-into-new-datavolume-block","virt-about-datavolumes_virt-cloning-vm-disk-into-new-datavolume-block","virt-about-block-pvs_virt-cloning-vm-disk-into-new-datavolume-block","virt-creating-local-block-pv_virt-cloning-vm-disk-into-new-datavolume-block","virt-cloning-pvc-of-vm-disk-into-new-datavolume_virt-cloning-vm-disk-into-new-datavolume-block","virt-cdi-supported-operations-matrix_virt-cloning-vm-disk-into-new-datavolume-block","virtual-machine-networking","virt-using-the-default-pod-network-with-virt","virt-configuring-masquerade-mode-cli_virt-using-the-default-pod-network-with-virt","virt-configuring-masquerade-mode-dual-stack_virt-using-the-default-pod-network-with-virt","virt-creating-service-vm","virt-about-services_virt-creating-service-vm","services-dual-stack-cluster_virt-creating-service-vm","virt-creating-a-service-from-a-virtual-machine_virt-creating-service-vm","additional-resources_creating-service-vm","virt-attaching-vm-multiple-networks","virt-connecting-network-through-nad","virt-creating-linux-bridge-nncp_virt-attaching-vm-multiple-networks","virt-creating-linux-bridge-network-attachment-definition","virt-attaching-vm-multiple-networks_prerequisites","virt-creating-linux-bridge-nad-web_virt-attaching-vm-multiple-networks","virt-creating-linux-bridge-nad-cli_virt-attaching-vm-multiple-networks","virt-configuring-vm-for-linux-bridge-network","virt-vm-creating-nic-web_virt-attaching-vm-multiple-networks","virt-networking-wizard-fields-web_virt-attaching-vm-multiple-networks","virt-attaching-vm-additional-network-cli_virt-attaching-vm-multiple-networks","virt-configuring-ip-for-vms","virt-configuring-ip-for-new-vm-cloud-init_virt-configuring-ip-for-vms","virt-configuring-sriov-device-for-vms","discover-sr-iov-devices_virt-configuring-sriov-device-for-vms","example-sriovnetworknodestate_virt-configuring-sriov-device-for-vms","nw-sriov-configuring-device_virt-configuring-sriov-device-for-vms","virt-defining-an-sriov-network","nw-sriov-network-attachment_virt-defining-an-sriov-network","virt-attaching-vm-to-sriov-network","virt-attaching-vm-to-sriov-network_virt-attaching-vm-to-sriov-network","virt-viewing-ip-of-vm-nic","virt-viewing-vmi-ip-cli_virt-viewing-ip-of-vm-vnic","virt-viewing-vmi-ip-web_virt-viewing-ip-of-vm-vnic","virt-using-mac-address-pool-for-vms","virt-about-kubemacpool_virt-using-mac-address-pool-for-vms","virt-disabling-mac-address-pool-for-namespace-cli_virt-using-mac-address-pool-for-vms","virt-reenabling-mac-address-pool-for-namespace-cli_virt-using-mac-address-pool-for-vms","virtual-machine-disks","virt-features-for-storage","virt-features-for-storage-matrix_virt-features-for-storage","virt-configuring-local-storage-for-vms","virt-about-hostpath-provisioner_virt-configuring-local-storage-for-vms","virt-configuring-selinux-hpp-on-rhcos8_virt-configuring-local-storage-for-vms","virt-using-hostpath-provisioner_virt-configuring-local-storage-for-vms","virt-creating-storage-class_virt-configuring-local-storage-for-vms","virt-creating-data-volumes","virt-creating-data-volumes-using-storage-api_virt-creating-data-volumes","virt-creating-data-volumes-using-pvc-api_virt-creating-data-volumes","virt-customizing-storage-profile_virt-creating-data-volumes","additional-resources_creating-data-volumes-using-profiles","virt-reserving-pvc-space-fs-overhead","virt-how-fs-overhead-affects-space-vm-disks_virt-reserving-pvc-space-fs-overhead","virt-overriding-default-fs-overhead-value_virt-reserving-pvc-space-fs-overhead","virt-configuring-cdi-for-namespace-resourcequota","virt-about-cpu-and-memory-quota-namespace_virt-configuring-cdi-for-namespace-resourcequota","virt-overriding-cpu-and-memory-defaults_virt-configuring-cdi-for-namespace-resourcequota","virt-configuring-cdi-for-namespace-resourcequota_additional-resources","virt-virt-managing-data-volume-annotations","virt-dv-annotations_virt-managing-data-volume-annotations","virt-using-preallocation-for-datavolumes","virt-about-preallocation_virt-using-preallocation-for-datavolumes","virt-enabling-preallocation-for-dv_virt-using-preallocation-for-datavolumes","virt-uploading-local-disk-images-web","virt-cdi-supported-operations-matrix_virt-uploading-local-disk-images-web","virt-uploading-image-web_virt-uploading-local-disk-images-web","virt-uploading-local-disk-images-web_additional-resources","virt-uploading-local-disk-images-virtctl","virt-about-datavolumes_virt-uploading-local-disk-images-virtctl","virt-creating-an-upload-dv_virt-uploading-local-disk-images-virtctl","virt-uploading-local-disk-image-dv_virt-uploading-local-disk-images-virtctl","virt-cdi-supported-operations-matrix_virt-uploading-local-disk-images-virtctl","virt-uploading-local-disk-images-virtctl_additional-resources","virt-uploading-local-disk-images-block","virt-about-datavolumes_virt-uploading-local-disk-images-block","virt-about-block-pvs_virt-uploading-local-disk-images-block","virt-creating-local-block-pv_virt-uploading-local-disk-images-block","virt-creating-an-upload-dv_virt-uploading-local-disk-images-block","virt-uploading-local-disk-image-dv_virt-uploading-local-disk-images-block","virt-cdi-supported-operations-matrix_virt-uploading-local-disk-images-block","virt-uploading-local-disk-images-block_additional-resources","virt-managing-offline-vm-snapshots","virt-about-vm-snapshots_virt-managing-offline-vm-snapshots","virtual-machine-snapshot-controller-and-custom-resource-definitions-crds","virt-creating-offline-vm-snapshot-web_virt-managing-offline-vm-snapshots","virt-creating-offline-vm-snapshot-cli_virt-managing-offline-vm-snapshots","virt-restoring-vm-from-snapshot-web_virt-managing-offline-vm-snapshots","virt-restoring-vm-from-snapshot-cli_virt-managing-offline-vm-snapshots","virt-deleting-vm-snapshot-web_virt-managing-offline-vm-snapshots","virt-deleting-vm-snapshot-cli_virt-managing-offline-vm-snapshots","virt-moving-local-vm-disk-to-different-node","virt-cloning-local-volume-to-another-node_virt-moving-local-vm-disk-to-different-node","virt-expanding-virtual-storage-with-blank-disk-images","virt-about-datavolumes_virt-expanding-virtual-storage-with-blank-disk-images","virt-creating-blank-disk-datavolumes_virt-expanding-virtual-storage-with-blank-disk-images","virt-template-blank-disk-datavolume_virt-expanding-virtual-storage-with-blank-disk-images","virt-expanding-virtual-storage-with-blank-disk-images_additional-resources","virt-cloning-a-datavolume-using-smart-cloning","virt-understanding-smart-cloning_virt-cloning-a-datavolume-using-smart-cloning","virt-cloning-a-datavolume_virt-cloning-a-datavolume-using-smart-cloning","virt-cloning-a-datavolume-using-smart-cloning_additional-resources","virt-creating-and-using-boot-sources","virt-about-vms-and-boot-sources_virt-creating-and-using-boot-sources","virt-importing-rhel-image-boot-source-web_virt-creating-and-using-boot-sources","virt-adding-a-boot-source-web_virt-creating-and-using-boot-sources","virt-creating-a-vm-from-a-template-with-an-attached-boot-source_virt-creating-and-using-boot-sources","virt-creating-a-custom-disk-image-boot-source-web_virt-creating-and-using-boot-sources","additional-resources_creating-and-using-boot-sources","virt-hot-plugging-virtual-disks","virt-hot-plugging-a-virtual-disk-using-the-cli_virt-hot-plugging-virtual-disks","virt-hot-unplugging-a-virtual-disk-using-the-cli_virt-hot-plugging-virtual-disks","virt-using-container-disks-with-vms","virt-about-container-disks_virt-using-container-disks-with-vms","importing-a-container-disk-into-a-pvc-by-using-a-data-volume","attaching-a-container-disk-to-a-virtual-machine-as-a-literal-containerdisk-literal-volume","virt-preparing-container-disk-for-vms_virt-using-container-disks-with-vms","virt-disabling-tls-for-registry_virt-using-container-disks-with-vms","virt-preparing-cdi-scratch-space","virt-about-datavolumes_virt-preparing-cdi-scratch-space","virt-understanding-scratch-space_virt-preparing-cdi-scratch-space","virt-operations-requiring-scratch-space_virt-preparing-cdi-scratch-space","virt-defining-storageclass_virt-preparing-cdi-scratch-space","virt-cdi-supported-operations-matrix_virt-preparing-cdi-scratch-space","virt-preparing-cdi-scratch-space-additional-resources","virt-reusing-persistent-volumes","virt-about-reclaiming-statically-provisioned-persistent-volumes_virt-reusing-statically-provisioned-persistent-volumes","virt-reclaiming-statically-provisioned-persistent-volumes_virt-reusing-statically-provisioned-persistent-volumes","virt-deleting-datavolumes","virt-about-datavolumes_virt-deleting-datavolumes","virt-listing-dvs_virt-deleting-datavolumes","virt-deleting-dvs_virt-deleting-datavolumes","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/virtual-machines",{"title":10948,"visible":10,"weight":877,"urlFragment":10949,"anchor":16,"singlePageAnchor":10949,"subChapters":10950,"url":10976,"docTitle":10507},"Virtual machine templates","virtual-machine-templates",[10951,10952,10953,10954,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,10972,1607,10973,10974,10975],"virt-creating-vm-template","virt-understanding-vm-templates-web_virt-creating-vm-template","virt-about-vms-and-boot-sources_virt-creating-vm-template","virt-adding-a-boot-source-web_virt-creating-vm-template","virt-template-fields-for-boot-source_virt-creating-vm-template","virt-marking-vm-templates-favorites_virt-creating-vm-template","virt-filtering-vm-templates_virt-creating-vm-template","virt-creating-template-wizard-web_virt-creating-vm-template","virt-template-wizard-fields","virt-vm-wizard-fields-web_virt-creating-vm-template","virt-networking-wizard-fields-web_virt-creating-vm-template","virt-storage-wizard-fields-web_virt-creating-vm-template","virt-cloud-init-fields-web_virt-creating-vm-template","additional-resources_creating-vm-template","virt-editing-vm-template","virt-editing-vm-web_virt-editing-vm-template","virt-editing-template-yaml-web_virt-editing-vm-template","virt-vm-add-disk_virt-editing-vm-template","virt-vm-add-nic_virt-editing-vm-template","virt-vm-edit-cdrom_virt-editing-vm-template","virt-dedicated-resources-vm-template","virt-about-dedicated-resources_virt-dedicated-resources-vm-template","virt-enabling-dedicated-resources_virt-dedicated-resources-vm-template","virt-deleting-vm-template","virt-deleting-template-wizard-web_virt-deleting-vm-template","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/virtual-machine-templates",{"title":10978,"visible":10,"weight":888,"urlFragment":10979,"anchor":16,"singlePageAnchor":10979,"subChapters":10980,"url":10998,"docTitle":10507},"Live migration","live-migration",[10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997],"virt-live-migration","virt-understanding-live-migration_virt-live-migration","virt-updating-access-mode-for-live-migration_virt-live-migration","virt-live-migration-limits","virt-configuring-live-migration-limits_virt-live-migration-limits","virt-live-migration-limits-ref_virt-live-migration-limits","virt-migrate-vmi","virt-initiating-vm-migration-web_virt-migrate-vmi","virt-initiating-vm-migration-cli_virt-migrate-vmi","virt-monitor-vmi-migration","virt-monitoring-vm-migration-web_virt-monitor-vmi-migration","virt-monitoring-vm-migration-cli_virt-monitor-vmi-migration","virt-cancel-vmi-migration","virt-cancelling-vm-migration-web_virt-cancel-vmi-migration","virt-cancelling-vm-migration-cli_virt-cancel-vmi-migration","virt-configuring-vmi-eviction-strategy","virt-configuring-vm-live-migration-cli_virt-configuring-vmi-eviction-strategy","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/live-migration",{"title":11000,"visible":10,"weight":899,"urlFragment":11001,"anchor":16,"singlePageAnchor":11001,"subChapters":11002,"url":11024,"docTitle":10507},"Node maintenance","node-maintenance",[11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022,11023],"virt-about-node-maintenance","virt-understanding-node-maintenance_virt-node-maintenance","virt-maintaining-bare-metal-nodes_virt-node-maintenance","virt-setting-node-maintenance","virt-setting-node-maintenance-web_virt-setting-node-maintenance","virt-setting-node-maintenance-cli_virt-setting-node-maintenance","virt-setting-node-to-maintenance-mode-with-cr_virt-setting-node-maintenance","virt-checking_status_of_node_maintenance_cr_tasks_virt-setting-node-maintenance","virt-resuming-node","virt-resuming-node-maintenance-web_virt-resuming-node","virt-resuming-node-maintenance-cli_virt-resuming-node","virt-resuming-node-from-maintenance-mode-with-cr_virt-resuming-node","virt-automatic-certificates","virt-automatic-certificates-renewal_virt-automatic-certificates","virt-managing-node-labeling-obsolete-cpu-models","virt-about-node-labeling-obsolete-cpu-models_virt-managing-node-labeling-obsolete-cpu-models","virt-about-node-labeling-cpu-features_virt-managing-node-labeling-obsolete-cpu-models","virt-configuring-obsolete-cpu-models_virt-managing-node-labeling-obsolete-cpu-models","virt-using-skip-node","virt-using-skip-node_virt-preventing-node-reconciliation","additional-resources_virt-preventing-node-reconciliation","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/node-maintenance",{"title":11026,"visible":10,"weight":906,"urlFragment":11027,"anchor":16,"singlePageAnchor":11027,"subChapters":11028,"url":11050,"docTitle":10507},"Node networking","node-networking",[11029,11030,11031,11032,11033,11034,11035,11036,4629,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048,11049],"virt-observing-node-network-state","virt-about-nmstate_virt-observing-node-network-state","virt-viewing-network-state-of-node_virt-observing-node-network-state","virt-updating-node-network-config","virt-about-nmstate_virt-updating-node-network-config","virt-creating-interface-on-nodes_virt-updating-node-network-config","virt-confirming-policy-updates-on-nodes_virt-updating-node-network-config","virt-removing-interface-from-nodes_virt-updating-node-network-config","virt-example-bridge-nncp_virt-updating-node-network-config","virt-example-vlan-nncp_virt-updating-node-network-config","virt-example-bond-nncp_virt-updating-node-network-config","virt-example-ethernet-nncp_virt-updating-node-network-config","virt-example-nmstate-multiple-interfaces_virt-updating-node-network-config","virt-example-nmstate-IP-management_virt-updating-node-network-config","virt-example-nmstate-IP-management-static_virt-updating-node-network-config","virt-example-nmstate-IP-management-no-ip_virt-updating-node-network-config","virt-example-nmstate-IP-management-dhcp_virt-updating-node-network-config","virt-example-nmstate-IP-management-dns_virt-updating-node-network-config","virt-example-nmstate-IP-management-static-routing_virt-updating-node-network-config","virt-troubleshooting-node-network","virt-troubleshooting-incorrect-policy-config_virt-troubleshooting-node-network","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/node-networking",{"title":11052,"visible":10,"weight":915,"urlFragment":11053,"anchor":16,"singlePageAnchor":11053,"subChapters":11054,"url":11107,"docTitle":10507},"Logging, events, and monitoring","logging-events-and-monitoring",[11055,11056,11057,11058,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,11072,11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088,11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104,11105,11106],"virt-logs","virt-understanding-logs_virt-logs","virt-viewing-virtual-machine-logs-cli_virt-logs","virt-viewing-virtual-machine-logs-web_virt-logs","virt-events","virt-understanding-events_virt-events","virt-viewing-vm-events-web_virt-events","virt-viewing-namespace-events-cli_virt-events","virt-viewing-resource-events-cli_virt-events","virt-diagnosing-datavolumes-using-events-and-conditions","virt-about-conditions-and-events.adoc_virt-diagnosing-datavolumes-using-events-and-conditions","virt-analyzing-datavolume-conditions-and-events_virt-diagnosing-datavolumes-using-events-and-conditions","virt-viewing-information-about-vm-workloads","virt-about-the-vm-dashboard_virt-viewing-information-about-vm-workloads","virt-monitoring-vm-health","virt-about-readiness-liveness-probes_virt-monitoring-vm-health","virt-define-http-readiness-probe_virt-monitoring-vm-health","virt-define-tcp-readiness-probe_virt-monitoring-vm-health","virt-define-http-liveness-probe_virt-monitoring-vm-health","virt-template-vmi-probe-config_virt-monitoring-vm-health","additional-resources_monitoring-vm-health","virt-using-dashboard-to-get-cluster-info","virt-about-the-overview-dashboard_virt-using-dashboard-to-get-cluster-info","virt-openshift-cluster-monitoring","about-openshift-monitoring_virt-openshift-cluster-monitoring","cluster-logging-about-components_virt-openshift-cluster-monitoring","telemetry-about-telemetry_virt-openshift-cluster-monitoring","what-information-is-collected_virt-openshift-cluster-monitoring","cli-troubleshooting-and-debugging-commands","virt-prometheus-queries","prerequisites_virt-prometheus-queries","querying-metrics_virt-prometheus-queries","querying-metrics-for-all-projects-as-an-administrator_virt-prometheus-queries","querying-metrics-for-user-defined-projects-as-a-developer_virt-prometheus-queries","virt-querying-metrics_virt-prometheus-queries","virt-promql-vcpu-metrics_virt-prometheus-queries","virt-promql-network-metrics_virt-prometheus-queries","virt-promql-storage-metrics_virt-prometheus-queries","virt-storage-traffic_virt-prometheus-queries","virt-iops_virt-prometheus-queries","virt-promql-guest-memory-metrics_virt-prometheus-queries","additional-resources_virt-prometheus-queries","virt-collecting-virt-data","virt-collecting-data-about-your-environment_virt-collecting-virt-data","additional-resources_collecting-data-about-your-environment","virt-collecting-data-about-vms_virt-collecting-virt-data","additional-resources_collecting-data-about-vms","virt-using-virt-must-gather_virt-collecting-virt-data","virt-must-gather-options_virt-collecting-virt-data","parameters","usage-and-examples_virt-collecting-virt-data","additional-resources_must-gather-virt","/documentation/openshift_container_platform/4.8/html/openshift_virtualization/logging-events-and-monitoring",{"title":11109,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":11110,"url":11111,"docTitle":11112,"sections":11113},"Windows Container Support for OpenShift",[],"/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/index","windows_container_support_for_openshift",[11114,11119,11146,11159,11168,11189,11198,11204,11211,11217],{"title":11115,"visible":10,"weight":23,"urlFragment":11116,"anchor":16,"singlePageAnchor":11116,"subChapters":11117,"url":11118,"docTitle":11112},"Red Hat OpenShift support for Windows Containers overview","windows-container-overview",[],"/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/windows-container-overview",{"title":11120,"visible":10,"weight":35,"urlFragment":11121,"anchor":16,"singlePageAnchor":11121,"subChapters":11122,"url":11145,"docTitle":11112},"Windows Container Support for Red Hat OpenShift release notes","windows-containers-release-notes-3-x",[11123,9087,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143,11144],"about-windows-containers","wmco-3-1-2","wmco-3-1-2-bug-fixes","wmco-3-1-1","wmco-3-1-1-bug-fixes","wmco-3-1-0","wmco-3-1-0-new-features","wmco-3-1-0-byoh","wmco-3-1-0-bug-fixes","wmco-3-1-0-known-issues","wmco-3-0-0","wmco-prerequisites_windows-containers-release-notes","wmco-prerequisites_platforms_windows-containers-release-notes","wmco-prerequisites_platforms_byoh_windows-containers-release-notes","wmco-prerequisites_versions_windows-containers-release-notes","wmco-prerequisites_networking_windows-containers-release-notes","wmco-3-0-0-improvements","clarified-limits-on-custom-vxlan-port-selection","wmco-3-0-0-bug-fixes","rhsa-2021-3001-windows-container-support-for-openshift-container-platform-security-update","wmco-3-0-0-known-issues","windows-containers-release-notes-limitations_windows-containers-release-notes","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/windows-containers-release-notes-3-x",{"title":11147,"visible":10,"weight":46,"urlFragment":11148,"anchor":16,"singlePageAnchor":11148,"subChapters":11149,"url":11158,"docTitle":11112},"Understanding Windows container workloads","understanding-windows-container-workloads",[11150,11151,11152,11153,11154,11155,11156,11157],"wmco-prerequisites_understanding-windows-container-workloads","wmco-prerequisites_platforms_understanding-windows-container-workloads","wmco-prerequisites_platforms_byoh_understanding-windows-container-workloads","wmco-prerequisites_versions_understanding-windows-container-workloads","wmco-prerequisites_networking_understanding-windows-container-workloads","windows-workload-management_understanding-windows-container-workloads","windows-node-services_understanding-windows-container-workloads","windows-containers-release-notes-limitations_understanding-windows-container-workloads","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/understanding-windows-container-workloads",{"title":11160,"visible":10,"weight":68,"urlFragment":11161,"anchor":16,"singlePageAnchor":11161,"subChapters":11162,"url":11167,"docTitle":11112},"Enabling Windows container workloads","enabling-windows-container-workloads",[11163,11164,11165,11166,1546],"installing-the-wmco","installing-wmco-using-web-console_enabling-windows-container-workloads","installing-wmco-using-cli_enabling-windows-container-workloads","configuring-secret-for-wmco_enabling-windows-container-workloads","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/enabling-windows-container-workloads",{"title":11169,"visible":10,"weight":435,"urlFragment":11170,"anchor":16,"singlePageAnchor":11170,"subChapters":11171,"url":11188,"docTitle":11112},"Creating Windows MachineSet objects","creating-windows-machineset-objects",[11172,11173,11174,11175,1598,11176,11177,11178,11179,1626,11180,11181,11182,11183,11184,11185,11186,11187,2636],"creating-windows-machineset-aws","machine-api-overview_creating-windows-machineset-aws","windows-machineset-aws_creating-windows-machineset-aws","machineset-creating_creating-windows-machineset-aws","creating-windows-machineset-azure","machine-api-overview_creating-windows-machineset-azure","windows-machineset-azure_creating-windows-machineset-azure","machineset-creating_creating-windows-machineset-azure","creating-windows-machineset-vsphere","machine-api-overview_creating-windows-machineset-vsphere","preparing-vsphere-for-windows-containers","creating-the-vsphere-windows-vm-golden-image_creating-windows-machineset-vsphere","additional-resources_creating-windows-machineset-vsphere","enabling-internal-api-server-vsphere_creating-windows-machineset-vsphere","windows-machineset-vsphere_creating-windows-machineset-vsphere","machineset-creating_creating-windows-machineset-vsphere","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/creating-windows-machineset-objects",{"title":11190,"visible":10,"weight":453,"urlFragment":11191,"anchor":16,"singlePageAnchor":11191,"subChapters":11192,"url":11197,"docTitle":11112},"Scheduling Windows container workloads","scheduling-windows-workloads",[11193,11194,11195,11196],"windows-pod-placement_scheduling-windows-workloads","creating-runtimeclass_scheduling-windows-workloads","sample-windows-workload-deployment_scheduling-windows-workloads","machineset-manually-scaling_scheduling-windows-workloads","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/scheduling-windows-workloads",{"title":11199,"visible":10,"weight":468,"urlFragment":11200,"anchor":16,"singlePageAnchor":11200,"subChapters":11201,"url":11203,"docTitle":11112},"Windows node upgrades","windows-node-upgrades",[11202],"wmco-upgrades_windows-node-upgrades","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/windows-node-upgrades",{"title":11205,"visible":10,"weight":869,"urlFragment":11206,"anchor":16,"singlePageAnchor":11206,"subChapters":11207,"url":11210,"docTitle":11112},"Using Bring-Your-Own-Host (BYOH) Windows instances as nodes","byoh-windows-instance",[11208,11209],"configuring-byoh-windows-instance","removing-byoh-windows-instance","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/byoh-windows-instance",{"title":11212,"visible":10,"weight":877,"urlFragment":11213,"anchor":16,"singlePageAnchor":11213,"subChapters":11214,"url":11216,"docTitle":11112},"Removing Windows nodes","removing-windows-nodes",[11215],"machine-delete_removing-windows-nodes","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/removing-windows-nodes",{"title":11218,"visible":10,"weight":888,"urlFragment":11219,"anchor":16,"singlePageAnchor":11219,"subChapters":11220,"url":11223,"docTitle":11112},"Disabling Windows container workloads","disabling-windows-container-workloads",[11221,11222],"uninstalling-wmco_disabling-windows-container-workloads","deleting-wmco-namespace_disabling-windows-container-workloads","/documentation/openshift_container_platform/4.8/html/windows_container_support_for_openshift/disabling-windows-container-workloads",{"title":11225,"urlFragment":11226,"singlePageAnchor":16,"anchor":11226,"docTitle":9961,"url":11227},"Legal Notice","legal-notice","/documentation/openshift_container_platform/4.8/html/serverless/legal-notice",[11229,11232,11235,11237],{"text":11230,"link":11231},"OpenShift Container Platform","/documentation/openshift_container_platform/",{"text":11233,"link":11234},"4.8","/documentation/openshift_container_platform/4.8/",{"text":9958,"link":11236},"/documentation/openshift_container_platform/4.8/html/serverless/",{"text":5,"link":11238},"../serverless/",{"name":9958,"translations":11240,"productVersion":11245,"multiPages":11246,"pdf":11300,"publishingStatus":11302},[11241,11242,11243,11244],"en-us","ko-kr","zh-cn","ja-jp",{"name":11233},[11247,11250,11254,11258,11262,11266,11269,11273,11277,11281,11285,11289,11293,11297],{"name":9958,"contentUrl":11248,"new":11249,"url":15},"https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/5123ed887f946eb85a44e1daa06eb3ab.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/index",{"name":11251,"contentUrl":11252,"new":11253,"url":9964},"Chapter 1. Release notes","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/c6d96f241e1752922f0a74ce0f7cc658.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/serverless-release-notes",{"name":11255,"contentUrl":11256,"new":11257,"url":10018},"Chapter 2. Discover","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/64ae62fc2ecbb1c773fd986dd42933e4.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/discover",{"name":11259,"contentUrl":11260,"new":11261,"url":10041},"Chapter 3. Install","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/e2af0a41211c80fb2a40fdd77beb139b.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/install",{"name":11263,"contentUrl":11264,"new":11265,"url":10070},"Chapter 4. Knative CLI","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/54c8d9685c8f4c4aabd000784eb34956.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/knative-cli",{"name":5,"contentUrl":11267,"new":11268,"url":10124},"https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/4817d85284d93ecf96515dd8505f1d78.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/develop",{"name":11270,"contentUrl":11271,"new":11272,"url":10253},"Chapter 6. Administer","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/14f9a5a238a2bcbabd0f8bae9af54608.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/administer",{"name":11274,"contentUrl":11275,"new":11276,"url":10330},"Chapter 7. Monitor","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/9679fa3ee22e0a4c1d9054f4bfd73d26.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/monitor",{"name":11278,"contentUrl":11279,"new":11280,"url":10350},"Chapter 8. Tracing requests","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/a5b712bbcf0aee301c667ed5a0175678.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/serverless-tracing",{"name":11282,"contentUrl":11283,"new":11284,"url":10359},"Chapter 9. OpenShift Serverless support","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/da5ad58d5083ce9d6ad03b7945c5a262.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/serverless-support",{"name":11286,"contentUrl":11287,"new":11288,"url":10370},"Chapter 10. Security","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/048dea45586a1fc84ef69955cff704f9.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/security",{"name":11290,"contentUrl":11291,"new":11292,"url":10388},"Chapter 11. Functions","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/73dcf78b5902e12a6e5c8461bcafa189.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/functions",{"name":11294,"contentUrl":11295,"new":11296,"url":10493},"Chapter 12. Integrations","https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/d9e17f1fab5fa6d25f9748009fa073c0.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/integrations",{"name":11225,"contentUrl":11298,"new":11299,"url":11226},"https://d2bhdhkti9t3uj.cloudfront.net/html/f529174a-813e-417a-83b2-007b5666e523/9210f9bcb3b8404f809edae2b6277cef.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html/serverless/legal-notice",{"url":11301},"https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/pdf/serverless/OpenShift_Container_Platform-4.8-Serverless-en-US.pdf","PUBLISHED",[11304,11307,11310,11313,11316,11319,11322,11325,11328,11331,11333,11336,11339,11342,11345,11348,11351,11354,11357,11360,11363,11366,11369,11372,11375,11378,11381,11384,11387],{"name":11305,"url":11305,"urlAliases":11306},"4.17",[],{"name":11308,"url":11308,"urlAliases":11309},"4.16",[],{"name":11311,"url":11311,"urlAliases":11312},"4.15",[],{"name":11314,"url":11314,"urlAliases":11315},"4.14",[],{"name":11317,"url":11317,"urlAliases":11318},"4.13",[],{"name":11320,"url":11320,"urlAliases":11321},"4.12",[],{"name":11323,"url":11323,"urlAliases":11324},"4.11",[],{"name":11326,"url":11326,"urlAliases":11327},"4.10",[],{"name":11329,"url":11329,"urlAliases":11330},"4.9",[],{"name":11233,"url":11233,"urlAliases":11332},[],{"name":11334,"url":11334,"urlAliases":11335},"4.7",[],{"name":11337,"url":11337,"urlAliases":11338},"4.6",[],{"name":11340,"url":11340,"urlAliases":11341},"4.5",[],{"name":11343,"url":11343,"urlAliases":11344},"4.4",[],{"name":11346,"url":11346,"urlAliases":11347},"4.3",[],{"name":11349,"url":11349,"urlAliases":11350},"4.2",[],{"name":11352,"url":11352,"urlAliases":11353},"4.1",[],{"name":11355,"url":11355,"urlAliases":11356},"3.11",[],{"name":11358,"url":11358,"urlAliases":11359},"3.10",[],{"name":11361,"url":11361,"urlAliases":11362},"3.9",[],{"name":11364,"url":11364,"urlAliases":11365},"3.7",[],{"name":11367,"url":11367,"urlAliases":11368},"3.6",[],{"name":11370,"url":11370,"urlAliases":11371},"3.5",[],{"name":11373,"url":11373,"urlAliases":11374},"3.4",[],{"name":11376,"url":11376,"urlAliases":11377},"3.3",[],{"name":11379,"url":11379,"urlAliases":11380},"3.2",[],{"name":11382,"url":11382,"urlAliases":11383},"3.1",[],{"name":11385,"url":11385,"urlAliases":11386},"3.0",[],{"name":11388,"url":11388,"urlAliases":11389},"2",[],{"about/index":11391,"about/welcome-index":11392,"about/learn_more_about_openshift":11393,"about/oke-about":11394,"about/kubernetes-overview":11395,"release_notes/index":11396,"release_notes/ocp-4-8-release-notes":11397,"architecture/index":11398,"architecture/architecture-overview":11399,"architecture/architecture":11400,"architecture/architecture-installation":11401,"architecture/control-plane":11402,"architecture/understanding-development":11403,"architecture/architecture-rhcos":11404,"architecture/admission-plug-ins":11405,"security_and_compliance/index":11406,"security_and_compliance/security-compliance-overview":11407,"security_and_compliance/container-security-1":11408,"security_and_compliance/configuring-certificates":11409,"security_and_compliance/certificate-types-and-descriptions":11410,"security_and_compliance/compliance-operator":11411,"security_and_compliance/file-integrity-operator":11412,"security_and_compliance/audit-log-view":11413,"security_and_compliance/audit-log-policy-config":11414,"security_and_compliance/tls-security-profiles":11415,"security_and_compliance/seccomp-profiles":11416,"security_and_compliance/allowing-javascript-based-access-api-server":11417,"security_and_compliance/encrypting-etcd":11418,"security_and_compliance/pod-vulnerability-scan":11419,"installing/index":11420,"installing/ocp-installation-overview":11421,"installing/installing-preparing":11422,"installing/installing-mirroring-installation-images":11423,"installing/installing-on-aws":11424,"installing/installing-on-azure":11425,"installing/installing-on-gcp":11426,"installing/installing-on-bare-metal":11427,"installing/deploying-installer-provisioned-clusters-on-bare-metal":11428,"installing/installing-with-z-vm-on-ibm-z-and-linuxone":11429,"installing/installing-with-rhel-kvm-on-ibm-z-and-linuxone":11430,"installing/installing-on-ibm-power-systems":11431,"installing/installing-on-openstack":11432,"installing/installing-on-rhv":11433,"installing/installing-on-vsphere":11434,"installing/installing-on-vmc":11435,"installing/installing-on-any-platform":11436,"installing/installation-configuration":11437,"installing/validating-an-installation":11438,"installing/installing-troubleshooting":11439,"installing/installing-fips":11440,"updating_clusters/index":11441,"updating_clusters/understanding-openshift-updates":11442,"updating_clusters/updating-clusters-overview":11443,"updating_clusters/understanding-upgrade-channels-releases":11444,"updating_clusters/preparing-eus-eus-upgrade":11445,"updating_clusters/updating-cluster-within-minor":11446,"updating_clusters/updating-cluster-cli":11447,"updating_clusters/update-using-custom-machine-config-pools":11448,"updating_clusters/updating-cluster-rhel-compute":11449,"updating_clusters/updating-a-cluster-in-a-disconnected-environment":11450,"storage/index":11451,"storage/storage-overview":11452,"storage/understanding-ephemeral-storage":11453,"storage/understanding-persistent-storage":11454,"storage/configuring-persistent-storage":11455,"storage/using-container-storage-interface-csi":11456,"storage/expanding-persistent-volumes":11457,"storage/dynamic-provisioning":11458,"authentication_and_authorization/index":11459,"authentication_and_authorization/overview-of-authentication-authorization":11460,"authentication_and_authorization/understanding-authentication":11461,"authentication_and_authorization/configuring-internal-oauth":11462,"authentication_and_authorization/configuring-oauth-clients":11463,"authentication_and_authorization/managing-oauth-access-tokens":11464,"authentication_and_authorization/understanding-identity-provider":11465,"authentication_and_authorization/configuring-identity-providers":11466,"authentication_and_authorization/using-rbac":11467,"authentication_and_authorization/removing-kubeadmin":11468,"authentication_and_authorization/understanding-and-creating-service-accounts":11469,"authentication_and_authorization/using-service-accounts":11470,"authentication_and_authorization/using-service-accounts-as-oauth-client":11471,"authentication_and_authorization/tokens-scoping":11472,"authentication_and_authorization/bound-service-account-tokens":11473,"authentication_and_authorization/managing-pod-security-policies":11474,"authentication_and_authorization/impersonating-system-admin":11475,"authentication_and_authorization/ldap-syncing":11476,"authentication_and_authorization/managing-cloud-provider-credentials":11477,"networking/index":11478,"networking/understanding-networking":11479,"networking/accessing-hosts":11480,"networking/networking-operators-overview":11481,"networking/cluster-network-operator":11482,"networking/dns-operator":11483,"networking/configuring-ingress":11484,"networking/verifying-connectivity-endpoint":11485,"networking/configuring-node-port-service-range":11486,"networking/configuring-ipfailover":11487,"networking/using-sctp":11488,"networking/configuring-ptp":11489,"networking/network-policy":11490,"networking/multiple-networks":11491,"networking/hardware-networks":11492,"networking/openshift-sdn-default-cni-network-provider":11493,"networking/ovn-kubernetes-default-cni-network-provider":11494,"networking/configuring-routes":11495,"networking/configuring-ingress-cluster-traffic":11496,"networking/kubernetes-nmstate":11497,"networking/enable-cluster-wide-proxy":11498,"networking/configuring-a-custom-pki":11499,"networking/load-balancing-openstack":11500,"networking/associating-secondary-interfaces-metrics-to-network-attachments":11501,"registry/index":11502,"registry/registry-overview":11503,"registry/configuring-registry-operator":11504,"registry/setting-up-and-configuring-the-registry":11505,"registry/accessing-the-registry":11506,"registry/securing-exposing-registry":11507,"post-installation_configuration/index":11508,"post-installation_configuration/post-install-configuration-overview":11509,"post-installation_configuration/configuring-private-cluster":11510,"post-installation_configuration/post-install-machine-configuration-tasks":11511,"post-installation_configuration/post-install-cluster-tasks":11512,"post-installation_configuration/post-install-node-tasks":11513,"post-installation_configuration/post-install-network-configuration":11514,"post-installation_configuration/post-install-storage-configuration":11515,"post-installation_configuration/post-install-preparing-for-users":11516,"post-installation_configuration/configuring-alert-notifications":11517,"post-installation_configuration/post-install-configure-additional-devices-ibmz":11518,"migrating_from_version_3_to_4/index":11519,"migrating_from_version_3_to_4/migration-from-version-3-to-4-overview":11520,"migrating_from_version_3_to_4/about-migrating-from-3-to-4":11521,"migrating_from_version_3_to_4/planning-migration-3-4":11522,"migrating_from_version_3_to_4/planning-considerations-3-4":11523,"migrating_from_version_3_to_4/about-mtc-3-4":11524,"migrating_from_version_3_to_4/installing-3-4":11525,"migrating_from_version_3_to_4/installing-restricted-3-4":11526,"migrating_from_version_3_to_4/upgrading-3-4":11527,"migrating_from_version_3_to_4/premigration-checklists-3-4":11528,"migrating_from_version_3_to_4/migrating-applications-3-4":11529,"migrating_from_version_3_to_4/advanced-migration-options-3-4":11530,"migrating_from_version_3_to_4/troubleshooting-3-4":11531,"migration_toolkit_for_containers/index":11532,"migration_toolkit_for_containers/about-mtc":11533,"migration_toolkit_for_containers/mtc-release-notes":11534,"migration_toolkit_for_containers/installing-mtc":11535,"migration_toolkit_for_containers/installing-mtc-restricted":11536,"migration_toolkit_for_containers/upgrading-mtc":11537,"migration_toolkit_for_containers/premigration-checklists-mtc":11538,"migration_toolkit_for_containers/network-considerations-mtc":11539,"migration_toolkit_for_containers/migrating-applications-with-mtc":11540,"migration_toolkit_for_containers/advanced-migration-options-mtc":11541,"migration_toolkit_for_containers/troubleshooting-mtc":11542,"backup_and_restore/index":11543,"backup_and_restore/backup-restore-overview":11544,"backup_and_restore/graceful-shutdown-cluster":11545,"backup_and_restore/graceful-restart-cluster":11546,"backup_and_restore/application-backup-and-restore":11547,"backup_and_restore/control-plane-backup-and-restore":11548,"machine_management/index":11549,"machine_management/overview-of-machine-management":11550,"machine_management/creating-machine-sets":11551,"machine_management/manually-scaling-machineset":11552,"machine_management/modifying-machineset":11553,"machine_management/deleting-machine":11554,"machine_management/applying-autoscaling":11555,"machine_management/creating-infrastructure-machinesets":11556,"machine_management/adding-rhel-compute":11557,"machine_management/more-rhel-compute":11558,"machine_management/user-provisioned-infrastructure-2":11559,"machine_management/deploying-machine-health-checks":11560,"metering/index":11561,"metering/about-metering":11562,"metering/installing-metering":11563,"metering/upgrading-metering":11564,"metering/configuring-metering":11565,"metering/reports":11566,"metering/using-metering":11567,"metering/metering-usage-examples":11568,"metering/metering-troubleshooting-debugging":11569,"metering/metering-uninstall":11570,"web_console/index":11571,"web_console/web-console-overview":11572,"web_console/web-console":11573,"web_console/using-dashboard-to-get-cluster-info":11574,"web_console/configuring-web-console":11575,"web_console/customizing-web-console":11576,"web_console/odc-about-web-terminal":11577,"web_console/disabling-web-console":11578,"web_console/creating-quick-start-tutorials":11579,"cli_tools/index":11580,"cli_tools/cli-tools-overview":11581,"cli_tools/openshift-cli-oc":11582,"cli_tools/developer-cli-odo":11583,"cli_tools/kn-cli-tools":11584,"cli_tools/pipelines-cli-tkn":11585,"cli_tools/opm-cli":11586,"cli_tools/operator-sdk":11587,"building_applications/index":11588,"building_applications/building-applications-overview":11589,"building_applications/projects":11590,"building_applications/creating-applications":11591,"building_applications/odc-viewing-application-composition-using-topology-view":11592,"building_applications/working-with-helm-charts":11593,"building_applications/deployments":11594,"building_applications/quotas":11595,"building_applications/config-maps":11596,"building_applications/odc-monitoring-project-and-application-metrics-using-developer-perspective":11597,"building_applications/application-health":11598,"building_applications/odc-editing-applications":11599,"building_applications/pruning-objects":11600,"building_applications/idling-applications":11601,"building_applications/odc-deleting-applications":11602,"building_applications/red-hat-marketplace":11603,"cicd/index":11604,"cicd/ci-cd-overview":11605,"cicd/builds":11606,"cicd/migrating-from-jenkins-to-tekton":11607,"cicd/pipelines":11608,"cicd/gitops":11609,"images/index":11610,"images/overview-of-images":11611,"images/configuring-samples-operator":11612,"images/samples-operator-alt-registry":11613,"images/creating-images":11614,"images/managing-images":11615,"images/managing-image-streams":11616,"images/using-imagestreams-with-kube-resources":11617,"images/triggering-updates-on-imagestream-changes":11618,"images/image-configuration":11619,"images/using-templates":11620,"images/templates-using-ruby-on-rails":11621,"images/using-images":11622,"nodes/index":11623,"nodes/overview-of-nodes":11624,"nodes/working-with-pods":11625,"nodes/controlling-pod-placement-onto-nodes-scheduling":11626,"nodes/using-jobs-and-daemonsets":11627,"nodes/working-with-nodes":11628,"nodes/working-with-containers":11629,"nodes/working-with-clusters":11630,"nodes/remote-worker-nodes-on-the-network-edge":11631,"sandboxed_containers_support_for_openshift/index":11632,"sandboxed_containers_support_for_openshift/sandboxed-containers-4-8-release-notes":11633,"sandboxed_containers_support_for_openshift/understanding-sandboxed-containers":11634,"sandboxed_containers_support_for_openshift/deploying-sandboxed-containers-workloads":11635,"sandboxed_containers_support_for_openshift/uninstalling-sandboxed-containers":11636,"sandboxed_containers_support_for_openshift/upgrade-sandboxed-containers":11637,"operators/index":11638,"operators/operators-overview":11639,"operators/understanding-operators":11640,"operators/user-tasks":11641,"operators/administrator-tasks":11642,"operators/developing-operators":11643,"operators/cluster-operators-ref":11644,"logging/index":11645,"logging/release-notes":11646,"logging/cluster-logging":11647,"logging/cluster-logging-deploying":11648,"logging/configuring-your-logging-deployment":11649,"logging/vewing-resource-logs":11650,"logging/cluster-logging-visualizer-using":11651,"logging/cluster-logging-external":11652,"logging/cluster-logging-enabling-json-logging":11653,"logging/cluster-logging-eventrouter":11654,"logging/cluster-logging-upgrading":11655,"logging/cluster-logging-dashboards":11656,"logging/troubleshooting-logging":11657,"logging/cluster-logging-uninstall":11658,"logging/cluster-logging-exported-fields":11659,"logging/message":11660,"logging/structured":11661,"logging/timestamp":11662,"logging/hostname":11663,"logging/ipaddr4":11664,"logging/ipaddr6":11665,"logging/level":11666,"logging/pid":11667,"logging/service":11668,"logging/tags":11669,"logging/file":11670,"logging/offset":11671,"logging/cluster-logging-exported-fields-kubernetes_cluster-logging-exported-fields":11672,"logging/openshift":11673,"monitoring/index":11674,"monitoring/monitoring-overview":11675,"monitoring/configuring-the-monitoring-stack":11676,"monitoring/enabling-monitoring-for-user-defined-projects":11677,"monitoring/managing-metrics":11678,"monitoring/managing-alerts":11679,"monitoring/reviewing-monitoring-dashboards":11680,"monitoring/accessing-third-party-uis":11681,"monitoring/troubleshooting-monitoring-issues":11682,"scalability_and_performance/index":11683,"scalability_and_performance/recommended-host-practices":11684,"scalability_and_performance/ibm-z-recommended-host-practices":11685,"scalability_and_performance/recommended-cluster-scaling-practices":11686,"scalability_and_performance/using-node-tuning-operator":11687,"scalability_and_performance/using_cluster_loader_node-tuning-operator":11688,"scalability_and_performance/using-cpu-manager":11689,"scalability_and_performance/using-topology-manager":11690,"scalability_and_performance/scaling-cluster-monitoring-operator":11691,"scalability_and_performance/node-feature-discovery-operator":11692,"scalability_and_performance/driver-toolkit":11693,"scalability_and_performance/planning-your-environment-according-to-object-maximums":11694,"scalability_and_performance/optimizing-storage":11695,"scalability_and_performance/routing-optimization":11696,"scalability_and_performance/optimizing-networking":11697,"scalability_and_performance/managing-bare-metal-hosts":11698,"scalability_and_performance/what-huge-pages-do-and-how-they-are-consumed":11699,"scalability_and_performance/cnf-performance-addon-operator-for-low-latency-nodes":11700,"scalability_and_performance/cnf-performing-platform-verification-latency-tests":11701,"scalability_and_performance/cnf-create-performance-profiles":11702,"support/index":11703,"support/support-overview":11704,"support/managing-cluster-resources":11705,"support/getting-support":11706,"support/remote-health-monitoring-with-connected-clusters":11707,"support/gathering-cluster-data":11708,"support/summarizing-cluster-specifications":11709,"support/troubleshooting":11710,"service_mesh/index":11711,"service_mesh/service-mesh-2-x":11712,"service_mesh/service-mesh-1-x":11713,"distributed_tracing/index":11714,"distributed_tracing/distr-tracing-release-notes":11715,"distributed_tracing/distributed-tracing-architecture":11716,"distributed_tracing/distributed-tracing-installation":11717,"serverless/index":11718,"serverless/serverless-release-notes":11719,"serverless/discover":11720,"serverless/install":11721,"serverless/knative-cli":11722,"serverless/develop":11723,"serverless/administer":11724,"serverless/monitor":11725,"serverless/serverless-tracing":11726,"serverless/serverless-support":11727,"serverless/security":11728,"serverless/functions":11729,"serverless/integrations":11730,"openshift_virtualization/index":11731,"openshift_virtualization/about-virt":11732,"openshift_virtualization/start-here-with-openshift-virtualization":11733,"openshift_virtualization/openshift-virtualization-release-notes":11734,"openshift_virtualization/installing-openshift-virtualization":11735,"openshift_virtualization/upgrading-openshift-virtualization":11736,"openshift_virtualization/virt-additional-security-privileges-controller-and-launcher":11737,"openshift_virtualization/virt-using-the-cli-tools":11738,"openshift_virtualization/virtual-machines":11739,"openshift_virtualization/virtual-machine-templates":11740,"openshift_virtualization/live-migration":11741,"openshift_virtualization/node-maintenance":11742,"openshift_virtualization/node-networking":11743,"openshift_virtualization/logging-events-and-monitoring":11744,"windows_container_support_for_openshift/index":11745,"windows_container_support_for_openshift/windows-container-overview":11746,"windows_container_support_for_openshift/windows-containers-release-notes-3-x":11747,"windows_container_support_for_openshift/understanding-windows-container-workloads":11748,"windows_container_support_for_openshift/enabling-windows-container-workloads":11749,"windows_container_support_for_openshift/creating-windows-machineset-objects":11750,"windows_container_support_for_openshift/scheduling-windows-workloads":11751,"windows_container_support_for_openshift/windows-node-upgrades":11752,"windows_container_support_for_openshift/byoh-windows-instance":11753,"windows_container_support_for_openshift/removing-windows-nodes":11754,"windows_container_support_for_openshift/disabling-windows-container-workloads":11755,"serverless/legal-notice":11756},{"prevt":16,"next":15},{"prevt":16,"next":36},{"prevt":24,"next":47},{"prevt":36,"next":69},{"prevt":47,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":380},{"prevt":384,"next":410},{"prevt":380,"next":421},{"prevt":410,"next":436},{"prevt":421,"next":454},{"prevt":436,"next":469},{"prevt":454,"next":16},{"prevt":15,"next":16},{"prevt":16,"next":496},{"prevt":488,"next":581},{"prevt":496,"next":604},{"prevt":581,"next":675},{"prevt":604,"next":805},{"prevt":675,"next":859},{"prevt":805,"next":870},{"prevt":859,"next":878},{"prevt":870,"next":889},{"prevt":878,"next":900},{"prevt":889,"next":907},{"prevt":900,"next":916},{"prevt":907,"next":16},{"prevt":16,"next":16},{"prevt":16,"next":941},{"prevt":932,"next":954},{"prevt":941,"next":976},{"prevt":954,"next":1275},{"prevt":976,"next":1479},{"prevt":1275,"next":1796},{"prevt":1479,"next":1977},{"prevt":1796,"next":2061},{"prevt":1977,"next":2161},{"prevt":2061,"next":2269},{"prevt":2161,"next":2375},{"prevt":2269,"next":2678},{"prevt":2375,"next":2800},{"prevt":2678,"next":3065},{"prevt":2800,"next":3333},{"prevt":3065,"next":3389},{"prevt":3333,"next":3415},{"prevt":3389,"next":3430},{"prevt":3415,"next":3442},{"prevt":3430,"next":16},{"prevt":16,"next":16},{"prevt":16,"next":3468},{"prevt":3462,"next":3482},{"prevt":3468,"next":3496},{"prevt":3482,"next":3502},{"prevt":3496,"next":3510},{"prevt":3502,"next":3517},{"prevt":3510,"next":3530},{"prevt":3517,"next":3541},{"prevt":3530,"next":16},{"prevt":16,"next":15},{"prevt":16,"next":3598},{"prevt":3587,"next":3607},{"prevt":3598,"next":3635},{"prevt":3607,"next":3711},{"prevt":3635,"next":3777},{"prevt":3711,"next":3787},{"prevt":3777,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":3820},{"prevt":3812,"next":3832},{"prevt":3820,"next":3846},{"prevt":3832,"next":3854},{"prevt":3846,"next":3862},{"prevt":3854,"next":3872},{"prevt":3862,"next":3948},{"prevt":3872,"next":3967},{"prevt":3948,"next":3974},{"prevt":3967,"next":3982},{"prevt":3974,"next":3993},{"prevt":3982,"next":4000},{"prevt":3993,"next":4008},{"prevt":4000,"next":4015},{"prevt":4008,"next":4036},{"prevt":4015,"next":4044},{"prevt":4036,"next":4073},{"prevt":4044,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":4130},{"prevt":4121,"next":4136},{"prevt":4130,"next":4144},{"prevt":4136,"next":4157},{"prevt":4144,"next":4168},{"prevt":4157,"next":4203},{"prevt":4168,"next":4212},{"prevt":4203,"next":4220},{"prevt":4212,"next":4233},{"prevt":4220,"next":4242},{"prevt":4233,"next":4253},{"prevt":4242,"next":4289},{"prevt":4253,"next":4342},{"prevt":4289,"next":4414},{"prevt":4342,"next":4481},{"prevt":4414,"next":4556},{"prevt":4481,"next":4578},{"prevt":4556,"next":4617},{"prevt":4578,"next":4646},{"prevt":4617,"next":4654},{"prevt":4646,"next":4663},{"prevt":4654,"next":4675},{"prevt":4663,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":4701},{"prevt":4689,"next":4713},{"prevt":4701,"next":4753},{"prevt":4713,"next":4763},{"prevt":4753,"next":16},{"prevt":15,"next":16},{"prevt":16,"next":4782},{"prevt":4776,"next":4791},{"prevt":4782,"next":4814},{"prevt":4791,"next":4870},{"prevt":4814,"next":4956},{"prevt":4870,"next":4993},{"prevt":4956,"next":5022},{"prevt":4993,"next":5057},{"prevt":5022,"next":5065},{"prevt":5057,"next":16},{"prevt":16,"next":15},{"prevt":16,"next":5102},{"prevt":5087,"next":5107},{"prevt":5102,"next":5120},{"prevt":5107,"next":5129},{"prevt":5120,"next":5140},{"prevt":5129,"next":5170},{"prevt":5140,"next":5197},{"prevt":5170,"next":5205},{"prevt":5197,"next":5214},{"prevt":5205,"next":5226},{"prevt":5214,"next":5264},{"prevt":5226,"next":16},{"prevt":15,"next":16},{"prevt":16,"next":5327},{"prevt":5316,"next":5342},{"prevt":5327,"next":5371},{"prevt":5342,"next":5397},{"prevt":5371,"next":5404},{"prevt":5397,"next":5411},{"prevt":5404,"next":5419},{"prevt":5411,"next":5430},{"prevt":5419,"next":5467},{"prevt":5430,"next":16},{"prevt":16,"next":15},{"prevt":16,"next":5529},{"prevt":5520,"next":5535},{"prevt":5529,"next":5541},{"prevt":5535,"next":5632},{"prevt":5541,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":5665},{"prevt":5660,"next":5707},{"prevt":5665,"next":5714},{"prevt":5707,"next":5723},{"prevt":5714,"next":5730},{"prevt":5723,"next":5743},{"prevt":5730,"next":5766},{"prevt":5743,"next":5784},{"prevt":5766,"next":5800},{"prevt":5784,"next":5823},{"prevt":5800,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":5856},{"prevt":5843,"next":5868},{"prevt":5856,"next":5873},{"prevt":5868,"next":5903},{"prevt":5873,"next":5925},{"prevt":5903,"next":5932},{"prevt":5925,"next":5940},{"prevt":5932,"next":5959},{"prevt":5940,"next":16},{"prevt":15,"next":16},{"prevt":16,"next":5982},{"prevt":5973,"next":5988},{"prevt":5982,"next":5994},{"prevt":5988,"next":6000},{"prevt":5994,"next":6015},{"prevt":6000,"next":6025},{"prevt":6015,"next":6031},{"prevt":6025,"next":16},{"prevt":16,"next":16},{"prevt":16,"next":6083},{"prevt":6077,"next":6328},{"prevt":6083,"next":6411},{"prevt":6328,"next":6418},{"prevt":6411,"next":6509},{"prevt":6418,"next":6517},{"prevt":6509,"next":16},{"prevt":16,"next":15},{"prevt":16,"next":6560},{"prevt":6549,"next":6586},{"prevt":6560,"next":6623},{"prevt":6586,"next":6639},{"prevt":6623,"next":6665},{"prevt":6639,"next":6717},{"prevt":6665,"next":6737},{"prevt":6717,"next":6747},{"prevt":6737,"next":6754},{"prevt":6747,"next":6765},{"prevt":6754,"next":6772},{"prevt":6765,"next":6789},{"prevt":6772,"next":6798},{"prevt":6789,"next":6804},{"prevt":6798,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":6828},{"prevt":6819,"next":6978},{"prevt":6828,"next":6994},{"prevt":6978,"next":7103},{"prevt":6994,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":7253},{"prevt":7234,"next":7269},{"prevt":7253,"next":7281},{"prevt":7269,"next":7300},{"prevt":7281,"next":7320},{"prevt":7300,"next":7340},{"prevt":7320,"next":7346},{"prevt":7340,"next":7354},{"prevt":7346,"next":7367},{"prevt":7354,"next":7392},{"prevt":7367,"next":7406},{"prevt":7392,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":7450},{"prevt":7442,"next":7531},{"prevt":7450,"next":7614},{"prevt":7531,"next":7631},{"prevt":7614,"next":7698},{"prevt":7631,"next":7750},{"prevt":7698,"next":7808},{"prevt":7750,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":7836},{"prevt":7823,"next":7844},{"prevt":7836,"next":7860},{"prevt":7844,"next":7872},{"prevt":7860,"next":16},{"prevt":15,"next":16},{"prevt":16,"next":7893},{"prevt":7885,"next":7999},{"prevt":7893,"next":8012},{"prevt":7999,"next":8067},{"prevt":8012,"next":8250},{"prevt":8067,"next":16},{"prevt":16,"next":15},{"prevt":16,"next":8422},{"prevt":8293,"next":8442},{"prevt":8422,"next":8451},{"prevt":8442,"next":8495},{"prevt":8451,"next":8501},{"prevt":8495,"next":8508},{"prevt":8501,"next":8535},{"prevt":8508,"next":8543},{"prevt":8535,"next":8549},{"prevt":8543,"next":8556},{"prevt":8549,"next":8564},{"prevt":8556,"next":8597},{"prevt":8564,"next":8603},{"prevt":8597,"next":8607},{"prevt":8603,"next":8611},{"prevt":8607,"next":8616},{"prevt":8611,"next":8620},{"prevt":8616,"next":8624},{"prevt":8620,"next":8628},{"prevt":8624,"next":8632},{"prevt":8628,"next":8636},{"prevt":8632,"next":8640},{"prevt":8636,"next":8644},{"prevt":8640,"next":8649},{"prevt":8644,"next":8654},{"prevt":8649,"next":8661},{"prevt":8654,"next":8695},{"prevt":8661,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":8719},{"prevt":8707,"next":8742},{"prevt":8719,"next":8754},{"prevt":8742,"next":8767},{"prevt":8754,"next":8789},{"prevt":8767,"next":8796},{"prevt":8789,"next":8803},{"prevt":8796,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":8833},{"prevt":8816,"next":8854},{"prevt":8833,"next":8866},{"prevt":8854,"next":8878},{"prevt":8866,"next":8889},{"prevt":8878,"next":8895},{"prevt":8889,"next":8903},{"prevt":8895,"next":8910},{"prevt":8903,"next":8925},{"prevt":8910,"next":8936},{"prevt":8925,"next":8946},{"prevt":8936,"next":8954},{"prevt":8946,"next":8961},{"prevt":8954,"next":8969},{"prevt":8961,"next":8980},{"prevt":8969,"next":8990},{"prevt":8980,"next":9040},{"prevt":8990,"next":9054},{"prevt":9040,"next":16},{"prevt":15,"next":16},{"prevt":16,"next":9081},{"prevt":9072,"next":9087},{"prevt":9081,"next":9097},{"prevt":9087,"next":9131},{"prevt":9097,"next":9148},{"prevt":9131,"next":5613},{"prevt":9148,"next":16},{"prevt":16,"next":15},{"prevt":16,"next":9673},{"prevt":9240,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":9907},{"prevt":9877,"next":9916},{"prevt":9907,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":10018},{"prevt":9964,"next":10041},{"prevt":10018,"next":10070},{"prevt":10041,"next":10124},{"prevt":10070,"next":10253},{"prevt":10124,"next":10330},{"prevt":10253,"next":10350},{"prevt":10330,"next":10359},{"prevt":10350,"next":10370},{"prevt":10359,"next":10388},{"prevt":10370,"next":10493},{"prevt":10388,"next":16},{"prevt":15,"next":15},{"prevt":16,"next":10518},{"prevt":10511,"next":10526},{"prevt":10518,"next":10544},{"prevt":10526,"next":10596},{"prevt":10544,"next":10607},{"prevt":10596,"next":10616},{"prevt":10607,"next":10623},{"prevt":10616,"next":10949},{"prevt":10623,"next":10979},{"prevt":10949,"next":11001},{"prevt":10979,"next":11027},{"prevt":11001,"next":11053},{"prevt":11027,"next":16},{"prevt":15,"next":16},{"prevt":16,"next":11121},{"prevt":11116,"next":11148},{"prevt":11121,"next":11161},{"prevt":11148,"next":11170},{"prevt":11161,"next":11191},{"prevt":11170,"next":11200},{"prevt":11191,"next":11206},{"prevt":11200,"next":11213},{"prevt":11206,"next":11219},{"prevt":11213,"next":16},{"prev":11757,"next":11757},"",{"product":16,"version":16},{"index":11760,"serverless-release-notes":11761,"discover":11762,"install":11763,"knative-cli":11764,"develop":11765,"administer":11766,"monitor":11767,"serverless-tracing":11768,"serverless-support":11769,"security":11770,"functions":11771,"integrations":11772,"legal-notice":11773},[11249],[11253],[11257],[11261],[11265],[11268],[11272],[11276],[11280],[11284],[11288],[11292],[11296],[11299],{"products":11775},[11776,11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788],"builds_for_red_hat_openshift","migration_toolkit_for_virtualization","openshift_container_platform","openshift_sandboxed_containers","red_hat_advanced_cluster_security_for_kubernetes","red_hat_advanced_cluster_management_for_kubernetes","red_hat_openshift_data_foundation","red_hat_openshift_dev_spaces","red_hat_openshift_gitops","red_hat_openshift_local","red_hat_openshift_pipelines","red_hat_openshift_serverless","workload_availability_for_red_hat_openshift",[11790,11793,11796,11799,11802,11805,11808,11811,11814,11817,11820,11823,11826,11829,11832],{"title":11791,"visible":10,"weight":14,"urlFragment":10124,"anchor":10126,"singlePageAnchor":10126,"subChapters":11792},"Serverless applications",[10127,10128,10129,10130,10131,10132,10133,10134,10135],{"title":11794,"visible":10,"weight":23,"urlFragment":10124,"anchor":10136,"singlePageAnchor":10136,"subChapters":11795},"Autoscaling",[10137,10138,10139,10140,10141,10142,10143,10144,10145],{"title":11797,"visible":10,"weight":35,"urlFragment":10124,"anchor":10146,"singlePageAnchor":10146,"subChapters":11798},"Traffic management",[10147,10148,10149,10150,10151,10152,10153,10154,10155],{"title":11800,"visible":10,"weight":46,"urlFragment":10124,"anchor":10156,"singlePageAnchor":10156,"subChapters":11801},"Routing",[10157,10158,10159,10160],{"title":11803,"visible":10,"weight":68,"urlFragment":10124,"anchor":10161,"singlePageAnchor":10161,"subChapters":11804},"Event sinks",[10162,10163,10164],{"title":11806,"visible":10,"weight":435,"urlFragment":10124,"anchor":10165,"singlePageAnchor":10165,"subChapters":11807},"Event delivery",[10166,10167,10168,10169,10170],{"title":11809,"visible":10,"weight":453,"urlFragment":10124,"anchor":10171,"singlePageAnchor":10171,"subChapters":11810},"Listing event sources and event source types",[10172,10173,10174],{"title":11812,"visible":10,"weight":468,"urlFragment":10124,"anchor":10175,"singlePageAnchor":10175,"subChapters":11813},"Creating an API server source",[10176,10177,10178,10179],{"title":11815,"visible":10,"weight":869,"urlFragment":10124,"anchor":10180,"singlePageAnchor":10180,"subChapters":11816},"Creating a ping source",[10181,10182,10183,10184],{"title":11818,"visible":10,"weight":877,"urlFragment":10124,"anchor":10185,"singlePageAnchor":10185,"subChapters":11819},"Custom event sources",[10186,10187,10188,10189,10190,10191,10192,10193,10194,10195,10196,10197,10198,10199,10200],{"title":11821,"visible":10,"weight":888,"urlFragment":10124,"anchor":10201,"singlePageAnchor":10201,"subChapters":11822},"Creating channels",[10202,10203,10204,10205,10206],{"title":11824,"visible":10,"weight":899,"urlFragment":10124,"anchor":10207,"singlePageAnchor":10207,"subChapters":11825},"Creating and managing subscriptions",[10208,10209,10210,10211,10212,10213,10214],{"title":11827,"visible":10,"weight":906,"urlFragment":10124,"anchor":10215,"singlePageAnchor":10215,"subChapters":11828},"Creating brokers",[10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227],{"title":11830,"visible":10,"weight":915,"urlFragment":10124,"anchor":10228,"singlePageAnchor":10228,"subChapters":11831},"Triggers",[10229,10230,10231,10232,10233,10234,10235,10236,10237],{"title":11833,"visible":10,"weight":2799,"urlFragment":10124,"anchor":10238,"singlePageAnchor":10238,"subChapters":11834},"Using Knative Kafka",[10239,10240,10241,10242,10243,10244,10245,10246,10247,10248,10249],{"default":11836},[11837,11846,11852,11861,11869,11877,11884,11892,11898,11903],{"nid":11838,"type":11839,"langcode":11840,"Published":14,"title":11841,"Created":11842,"Updated":11843,"body_value":16,"field_documentation banner_text_value":16,"field_documentation banner_text_format":16,"field_paths_value":11844,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":11845},580,"rebrand banner","en","OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.","2023-01-11 15:38:32","2023-01-11 15:40:04","/documentation/red_hat_openshift_container_storage\r\n/documentation/red_hat_openshift_container_storage/\r\n/documentation/red_hat_openshift_container_storage/*","internal:/documentation/red_hat_openshift_data_foundation/",{"nid":11847,"type":11839,"langcode":11840,"Published":14,"title":11841,"Created":11848,"Updated":11849,"body_value":16,"field_documentation banner_text_value":16,"field_documentation banner_text_format":16,"field_paths_value":11850,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":11851},581,"2023-01-11 15:41:31","2023-01-11 15:42:04","/documentation/red_hat_openshift_data_foundation/4.9\r\n/documentation/red_hat_openshift_data_foundation/4.9/\r\n/documentation/red_hat_openshift_data_foundation/4.9/*\r\n/documentation/red_hat_openshift_data_foundation/4.10\r\n/documentation/red_hat_openshift_data_foundation/4.10/\r\n/documentation/red_hat_openshift_data_foundation/4.10/*\r\n/documentation/red_hat_openshift_data_foundation/4.11\r\n/documentation/red_hat_openshift_data_foundation/4.11/\r\n/documentation/red_hat_openshift_data_foundation/4.11/*","internal:/documentation/red_hat_openshift_container_storage/",{"nid":11853,"type":11854,"langcode":11840,"Published":14,"title":11855,"Created":11856,"Updated":11857,"body_value":16,"field_documentation banner_text_value":11858,"field_documentation banner_text_format":11859,"field_paths_value":11860,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":16},582,"developer preview banner","MicroShift is Developer Preview software only","2023-01-11 15:50:24","2023-01-30 19:00:52","\u003Cp slot=header>MicroShift is Developer Preview software only.\u003C/p>For more information about the support scope of Red Hat Developer Preview software, see \u003Ca href=\"https://access.redhat.com/support/offerings/devpreview/\">Developer Preview Support Scope\u003C/a>.","documentation banner","/documentation/microshift/4.12\r\n/documentation/microshift/4.12/*\r\n/documentation/red_hat_build_of_microshift/4.12\r\n/documentation/red_hat_build_of_microshift/4.12/*",{"nid":11862,"type":11863,"langcode":11840,"Published":14,"title":11864,"Created":11865,"Updated":11866,"body_value":16,"field_documentation banner_text_value":11867,"field_documentation banner_text_format":11859,"field_paths_value":11868,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":16},583,"obsolete documentation banner","RHACS EOL - DAT-3433","2023-01-23 16:36:43","2023-01-23 16:39:14","\u003Cp slot=header>You are viewing documentation for a release that is no longer maintained. To view the documentation for the most recent version, see the \u003Ca href=\"/documentation/red_hat_advanced_cluster_security_for_kubernetes/\">latest RHACS docs\u003C/a>.\u003C/p>","/documentation/red_hat_advanced_cluster_security_for_kubernetes/3.69\r\n/documentation/red_hat_advanced_cluster_security_for_kubernetes/3.69/*\r\n/documentation/red_hat_advanced_cluster_security_for_kubernetes/3.70\r\n/documentation/red_hat_advanced_cluster_security_for_kubernetes/3.70/*\r\n/documentation/red_hat_advanced_cluster_security_for_kubernetes/3.71\r\n/documentation/red_hat_advanced_cluster_security_for_kubernetes/3.71/*",{"nid":11870,"type":11871,"langcode":11840,"Published":14,"title":11872,"Created":11873,"Updated":11874,"body_value":16,"field_documentation banner_text_value":11875,"field_documentation banner_text_format":11859,"field_paths_value":11876,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":16},584,"end of life banner","EOL banner for RHV","2023-05-23 14:58:05","2023-05-24 15:19:42","\u003Cp slot=header>The Red Hat Virtualization\u003C/p>Maintenance Phase runs until August 31, 2024, followed by the Extended Life Phase with no more software fixes through August 31, 2026. See \u003Ca href=\"https://access.redhat.com/articles/6975303\">Migration Paths for OpenShift Container Platform deployed on Red Hat Virtualization\u003C/a> for details.","/documentation/red_hat_virtualization/4.4",{"nid":11878,"type":11871,"langcode":11840,"Published":14,"title":11879,"Created":11880,"Updated":11881,"body_value":16,"field_documentation banner_text_value":11882,"field_documentation banner_text_format":11859,"field_paths_value":11883,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":16},585,"RHHI-V EOL","2023-06-01 16:52:57","2023-06-01 17:03:44","\u003Cp slot=header>Red Hat Hyperconverged Infrastructure for Virtualization\u003C/p> is in the \u003Ca href=\"https://access.redhat.com/support/policy/updates/rhhiv\">Maintenance Support Phase\u003C/a> of its lifecycle until October 31, 2024. After that date, the product will be End of Life. See the \u003Ca href=\"https://access.redhat.com/announcements/6972521\">RHHI-V announcement\u003C/a> for next steps.","/documentation/red_hat_hyperconverged_infrastructure_for_virtualization/1.8",{"nid":11885,"type":11886,"langcode":11840,"Published":14,"title":11887,"Created":11888,"Updated":11889,"body_value":16,"field_documentation banner_text_value":11890,"field_documentation banner_text_format":11859,"field_paths_value":11891,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":16},586,"preview banner","MicroShift is Technology Preview software only","2024-03-18 16:53:05","2024-03-18 16:54:56","\u003Cp slot=header>MicroShift is Technology Preview software only.\u003C/p>For more information about the support scope of Red Hat Technology Preview software, see \u003Ca href=\"https://access.redhat.com/support/offerings/techpreview/\">Technology Preview Support Scope\u003C/a>.","/documentation/red_hat_build_of_microshift/4.13\r\n/documentation/red_hat_build_of_microshift/4.13/*",{"nid":11893,"type":11886,"langcode":11840,"Published":14,"title":11894,"Created":11895,"Updated":11896,"body_value":16,"field_documentation banner_text_value":11897,"field_documentation banner_text_format":11859,"field_paths_value":11757,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":16},588,"Ansible 2.5 upgrade limitation","2024-09-30 16:53:05","2024-10-28 16:54:56","\u003Cp slot=\"header\">Support added for upgrades from 2.4\u003C/p>Ansible Automation Platform 2.5-3, released on October 28, 2024, adds support for upgrades from 2.4. See the upgrade documentation for more information.",{"nid":11899,"type":11886,"langcode":11840,"Published":14,"title":11900,"Created":11757,"Updated":11757,"body_value":16,"field_documentation banner_text_value":11901,"field_documentation banner_text_format":11859,"field_paths_value":11902,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":16},587,"Red Hat build of Apache Camel K","\u003Cp slot=header>Red Hat Camel K is deprecated\u003C/p>Red Hat Camel K is deprecated and the End of Life date for this product is June 30, 2025. For help migrating to the current go-to solution, \u003Ca target=_blank href=\"https://docs.redhat.com/en/documentation/red_hat_build_of_apache_camel\">Red Hat build of Apache Camel\u003C/a>, see the \u003Ca target=_blank href=\"https://docs.redhat.com/en/documentation/red_hat_build_of_apache_camel_k/1.10.7/html/migration_guide_camel_k_to_camel_extensions_for_quarkus/index\">Migration Guide\u003C/a>.","/documentation/red_hat_build_of_apache_camel_k/*",{"nid":11893,"alertType":11904,"type":11905,"langcode":11840,"Published":14,"title":11906,"Created":11907,"Updated":11907,"body_value":16,"field_documentation banner_text_value":11908,"field_documentation banner_text_format":11859,"field_paths_value":11909,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":16},"warning","Warning banner","OpenShift Service Mesh 3.0 is a Technology Preview feature only","2024-12-02 17:18:00","\u003Cp slot=header>OpenShift Service Mesh 3.0 is a Technology Preview feature only\u003C/p>Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. This documentation is a work in progress and might not be complete or fully tested.","/documentation/red_hat_openshift_service_mesh/3.0.0tp1\r\n/documentation/red_hat_openshift_service_mesh/3.0.0tp1/*",{"product":11911},"Red Hat OpenShift Container Platform",["Reactive",11913],{"$snuxt-i18n-meta":11914,"$sisLoading":11915,"$sisSinglePage":11915,"$sisInFocusMode":11915,"$smobileTocOpen":11915,"$sisLargeTOC":10,"$scurrentChapter":10124,"$scurrentSection":10124,"$scurrentSubSection":11757},{},false,["Set"],["ShallowReactive",11918],{"rFVLKcOK8e":16,"uUstF4AIyn":16,"MdHNSZP4nR":16,"Pn02PlJOas":16},"/en/documentation/openshift_container_platform/4.8/html/serverless/develop"]</script> <script>window.__NUXT__={};window.__NUXT__.config={public:{contentEnv:"",collectFeedback:true,i18n:{baseUrl:"",defaultLocale:"en",defaultDirection:"ltr",strategy:"prefix",lazy:false,rootRedirect:"",routesNameSeparator:"___",defaultLocaleRouteNameSuffix:"default",skipSettingLocaleOnNavigate:false,differentDomains:false,trailingSlash:false,configLocales:[{code:"en",name:"English",iso:"en-US"},{code:"fr",name:"Français",iso:"fr-FR"},{code:"ko",name:"한국어",iso:"ko-KR"},{code:"ja",name:"日本語",iso:"ja-JP"},{code:"zh-cn",name:"中文 (中国)",iso:"zh-CN"},{code:"de",name:"Deutsch",iso:"de_DE"},{code:"it",name:"Italiano",iso:"it_IT"},{code:"pt-br",name:"Português",iso:"pt_BR"},{code:"es",name:"Español",iso:"es-ES"}],locales:{en:{domain:""},fr:{domain:""},ko:{domain:""},ja:{domain:""},"zh-cn":{domain:""},de:{domain:""},it:{domain:""},"pt-br":{domain:""},es:{domain:""}},detectBrowserLanguage:{alwaysRedirect:false,cookieCrossOrigin:false,cookieDomain:"",cookieKey:"i18n_redirected",cookieSecure:false,fallbackLocale:"",redirectOn:"root",useCookie:true},experimental:{localeDetector:"",switchLocalePathLinkSSR:false,autoImportTranslationFunctions:false}}},app:{baseURL:"/",buildId:"383e8ec1-56b3-48b7-8ed0-b4996a8699ff",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>