CINXE.COM

Storage | 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>Storage | 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-single/storage/index"> <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="Storage | 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, &amp; 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, &amp; 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, &amp; 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, &amp; 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, &amp; 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=&#39;14&#39;%20height=&#39;14&#39;%20viewBox=&#39;0%200%2014%2014&#39;%20fill=&#39;none&#39;%20xmlns=&#39;http://www.w3.org/2000/svg&#39;%3e%3cpath%20d=&#39;M7%200L5.6%201.4L10.3%206H0V8H10.3L5.6%2012.6L7%2014L14%207L7%200Z&#39;%20fill=&#39;%23707070&#39;/%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><!--[-->Storage<!--]--></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 class="page-type" value="html" data-v-8589d091>Multi-page</option><option selected 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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/about/index#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="/documentation/openshift_container_platform/4.8/html-single/about/index#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="/documentation/openshift_container_platform/4.8/html-single/about/index#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="/documentation/openshift_container_platform/4.8/html-single/about/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/release_notes/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/architecture/index#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="/documentation/openshift_container_platform/4.8/html-single/architecture/index#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="/documentation/openshift_container_platform/4.8/html-single/architecture/index#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="/documentation/openshift_container_platform/4.8/html-single/architecture/index#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="/documentation/openshift_container_platform/4.8/html-single/architecture/index#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="/documentation/openshift_container_platform/4.8/html-single/architecture/index#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="/documentation/openshift_container_platform/4.8/html-single/architecture/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/installing/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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="/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#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 active" href="#" 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="#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="#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="#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="#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="#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="#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="#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/networking/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/registry/index#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="/documentation/openshift_container_platform/4.8/html-single/registry/index#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="/documentation/openshift_container_platform/4.8/html-single/registry/index#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="/documentation/openshift_container_platform/4.8/html-single/registry/index#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="/documentation/openshift_container_platform/4.8/html-single/registry/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index#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="/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index#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="/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index#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="/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index#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="/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/machine_management/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/metering/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/web_console/index#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="/documentation/openshift_container_platform/4.8/html-single/web_console/index#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="/documentation/openshift_container_platform/4.8/html-single/web_console/index#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="/documentation/openshift_container_platform/4.8/html-single/web_console/index#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="/documentation/openshift_container_platform/4.8/html-single/web_console/index#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="/documentation/openshift_container_platform/4.8/html-single/web_console/index#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="/documentation/openshift_container_platform/4.8/html-single/web_console/index#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="/documentation/openshift_container_platform/4.8/html-single/web_console/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#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="/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#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="/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#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="/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#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="/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#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="/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#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="/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/building_applications/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/cicd/index#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="/documentation/openshift_container_platform/4.8/html-single/cicd/index#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="/documentation/openshift_container_platform/4.8/html-single/cicd/index#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="/documentation/openshift_container_platform/4.8/html-single/cicd/index#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="/documentation/openshift_container_platform/4.8/html-single/cicd/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/images/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/nodes/index#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="/documentation/openshift_container_platform/4.8/html-single/nodes/index#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="/documentation/openshift_container_platform/4.8/html-single/nodes/index#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="/documentation/openshift_container_platform/4.8/html-single/nodes/index#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="/documentation/openshift_container_platform/4.8/html-single/nodes/index#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="/documentation/openshift_container_platform/4.8/html-single/nodes/index#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="/documentation/openshift_container_platform/4.8/html-single/nodes/index#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="/documentation/openshift_container_platform/4.8/html-single/nodes/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/sandboxed_containers_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/sandboxed_containers_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/sandboxed_containers_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/sandboxed_containers_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/sandboxed_containers_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/operators/index#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="/documentation/openshift_container_platform/4.8/html-single/operators/index#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="/documentation/openshift_container_platform/4.8/html-single/operators/index#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="/documentation/openshift_container_platform/4.8/html-single/operators/index#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="/documentation/openshift_container_platform/4.8/html-single/operators/index#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="/documentation/openshift_container_platform/4.8/html-single/operators/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/logging/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/monitoring/index#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="/documentation/openshift_container_platform/4.8/html-single/monitoring/index#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="/documentation/openshift_container_platform/4.8/html-single/monitoring/index#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="/documentation/openshift_container_platform/4.8/html-single/monitoring/index#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="/documentation/openshift_container_platform/4.8/html-single/monitoring/index#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="/documentation/openshift_container_platform/4.8/html-single/monitoring/index#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="/documentation/openshift_container_platform/4.8/html-single/monitoring/index#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="/documentation/openshift_container_platform/4.8/html-single/monitoring/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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 &amp; LinuxONE environments</a></li><!--]--><!--[--><li class="item sub-chapter" data-v-b883c74f><a class="link sub-chapter-title" href="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/support/index#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="/documentation/openshift_container_platform/4.8/html-single/support/index#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="/documentation/openshift_container_platform/4.8/html-single/support/index#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="/documentation/openshift_container_platform/4.8/html-single/support/index#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="/documentation/openshift_container_platform/4.8/html-single/support/index#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="/documentation/openshift_container_platform/4.8/html-single/support/index#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="/documentation/openshift_container_platform/4.8/html-single/support/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/service_mesh/index#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="/documentation/openshift_container_platform/4.8/html-single/service_mesh/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/distributed_tracing/index#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="/documentation/openshift_container_platform/4.8/html-single/distributed_tracing/index#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="/documentation/openshift_container_platform/4.8/html-single/distributed_tracing/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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" href="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/serverless/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#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="/documentation/openshift_container_platform/4.8/html-single/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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#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="/documentation/openshift_container_platform/4.8/html/storage/legal-notice" id="chapter-landing--storage-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>Storage</h1><hr class="line-below-chp" data-v-8589d091><section class="rhdocs" data-v-8589d091><body><div xml:lang="en-US" class="book" id="idm140708991059776"><div class="titlepage"><div><div class="producttitle"><span class="productname">OpenShift Container Platform</span> <span class="productnumber">4.8</span></div><div><h3 class="subtitle">Configuring and managing storage in OpenShift Container Platform </h3></div><div><div xml:lang="en-US" class="authorgroup"><span class="orgname">Red Hat OpenShift Documentation Team</span></div></div><div><a href="#idm140708991936208">Legal Notice</a></div><div><div class="abstract"><p class="title"><strong>Abstract</strong></p><div class="para"> This document provides instructions for configuring persistent volumes from various storage back ends and managing dynamic allocation from Pods. </div></div></div></div><hr></div><section class="chapter" id="storage-overview"><div class="titlepage"><div><div><h2 class="title">Chapter 1. OpenShift Container Platform storage overview</h2></div></div></div><p> OpenShift Container Platform supports multiple types of storage, both for on-premise and cloud providers. You can manage container storage for persistent and non-persistent data in an OpenShift Container Platform cluster. </p><section class="section" id="openshift-storage-common-terms_storage-overview"><div class="titlepage"><div><div><h3 class="title">1.1. modules/openshift-storage-common-terms.adoc</h3></div></div></div><p> This glossary defines common terms that are used in the storage content. These terms help you understand OpenShift Container Platform architecture effectively. </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Access modes</span></dt><dd><p class="simpara"> Volume access modes describe volume capabilities. You can use access modes to match persistent volume claim (PVC) and persistent volume (PV). The following are the examples of access modes: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> ReadWriteOnce (RWO) </li><li class="listitem"> ReadOnlyMany (ROX) </li><li class="listitem"> ReadWriteMany (RWX) </li><li class="listitem"> ReadWriteOncePod (RWOP) </li></ul></div></dd><dt><span class="term">Cinder</span></dt><dd> The Block Storage service for Red Hat OpenStack Platform (RHOSP) which manages the administration, security, and scheduling of all volumes. </dd><dt><span class="term">Config map</span></dt><dd> A config map provides a way to inject configuration data into pods. You can reference the data stored in a config map in a volume of type <code class="literal">ConfigMap</code>. Applications running in a pod can use this data. </dd><dt><span class="term">Container Storage Interface (CSI)</span></dt><dd> An API specification for the management of container storage across different container orchestration (CO) systems. </dd><dt><span class="term">Dynamic Provisioning</span></dt><dd> The framework allows you to create storage volumes on-demand, eliminating the need for cluster administrators to pre-provision persistent storage. </dd><dt><span class="term">Ephemeral storage</span></dt><dd> Pods and containers can require temporary or transient local storage for their operation. The lifetime of this ephemeral storage does not extend beyond the life of the individual pod, and this ephemeral storage cannot be shared across pods. </dd><dt><span class="term">Fiber channel</span></dt><dd> A networking technology that is used to transfer data among data centers, computer servers, switches and storage. </dd><dt><span class="term">FlexVolume</span></dt><dd> FlexVolume is an out-of-tree plugin interface that uses an exec-based model to interface with storage drivers. You must install the FlexVolume driver binaries in a pre-defined volume plugin path on each node and in some cases the control plane nodes. </dd><dt><span class="term">fsGroup</span></dt><dd> The fsGroup defines a file system group ID of a pod. </dd><dt><span class="term">iSCSI</span></dt><dd> Internet Small Computer Systems Interface (iSCSI) is an Internet Protocol-based storage networking standard for linking data storage facilities. An iSCSI volume allows an existing iSCSI (SCSI over IP) volume to be mounted into your Pod. </dd><dt><span class="term">hostPath</span></dt><dd> A hostPath volume in an OpenShift Container Platform cluster mounts a file or directory from the host node’s filesystem into your pod. </dd><dt><span class="term">KMS key</span></dt><dd> The Key Management Service (KMS) helps you achieve the required level of encryption of your data across different services. you can use the KMS key to encrypt, decrypt, and re-encrypt data. </dd><dt><span class="term">Local volumes</span></dt><dd> A local volume represents a mounted local storage device such as a disk, partition or directory. </dd><dt><span class="term">NFS</span></dt><dd> A Network File System (NFS) that allows remote hosts to mount file systems over a network and interact with those file systems as though they are mounted locally. This enables system administrators to consolidate resources onto centralized servers on the network. </dd><dt><span class="term">OpenShift Data Foundation</span></dt><dd> A provider of agnostic persistent storage for OpenShift Container Platform supporting file, block, and object storage, either in-house or in hybrid clouds </dd><dt><span class="term">Persistent storage</span></dt><dd> Pods and containers can require permanent storage for their operation. OpenShift Container Platform uses the Kubernetes persistent volume (PV) framework to allow cluster administrators to provision persistent storage for a cluster. Developers can use PVC to request PV resources without having specific knowledge of the underlying storage infrastructure. </dd><dt><span class="term">Persistent volumes (PV)</span></dt><dd> OpenShift Container Platform uses the Kubernetes persistent volume (PV) framework to allow cluster administrators to provision persistent storage for a cluster. Developers can use PVC to request PV resources without having specific knowledge of the underlying storage infrastructure. </dd><dt><span class="term">Persistent volume claims (PVCs)</span></dt><dd> You can use a PVC to mount a PersistentVolume into a Pod. You can access the storage without knowing the details of the cloud environment. </dd><dt><span class="term">Pod</span></dt><dd> One or more containers with shared resources, such as volume and IP addresses, running in your OpenShift Container Platform cluster. A pod is the smallest compute unit defined, deployed, and managed. </dd><dt><span class="term">Reclaim policy</span></dt><dd> A policy that tells the cluster what to do with the volume after it is released. A volume’s reclaim policy can be <code class="literal">Retain</code>, <code class="literal">Recycle</code>, or <code class="literal">Delete</code>. </dd><dt><span class="term">Role-based access control (RBAC)</span></dt><dd> Role-based access control (RBAC) is a method of regulating access to computer or network resources based on the roles of individual users within your organization. </dd><dt><span class="term">Stateless applications</span></dt><dd> A stateless application is an application program that does not save client data generated in one session for use in the next session with that client. </dd><dt><span class="term">Stateful applications</span></dt><dd> A stateful application is an application program that saves data to persistent disk storage. A server, client, and applications can use a persistent disk storage. You can use the <code class="literal">Statefulset</code> object in OpenShift Container Platform to manage the deployment and scaling of a set of Pods, and provides guarantee about the ordering and uniqueness of these Pods. </dd><dt><span class="term">Static provisioning</span></dt><dd> A cluster administrator creates a number of PVs. PVs contain the details of storage. PVs exist in the Kubernetes API and are available for consumption. </dd><dt><span class="term">Storage</span></dt><dd> OpenShift Container Platform supports many types of storage, both for on-premise and cloud providers. You can manage container storage for persistent and non-persistent data in an OpenShift Container Platform cluster. </dd><dt><span class="term">Storage class</span></dt><dd> A storage class provides a way for administrators to describe the classes of storage they offer. Different classes might map to quality of service levels, backup policies, arbitrary policies determined by the cluster administrators. </dd><dt><span class="term">VMware vSphere’s Virtual Machine Disk (VMDK) volumes</span></dt><dd> Virtual Machine Disk (VMDK) is a file format that describes containers for virtual hard disk drives that is used in virtual machines. </dd></dl></div></section><section class="section" id="storage-types"><div class="titlepage"><div><div><h3 class="title">1.2. Storage Types</h3></div></div></div><p> OpenShift Container Platform storage is broadly classified into two categories, namely ephemeral storage and persistent storage. </p><section class="section" id="ephemeral-storage"><div class="titlepage"><div><div><h4 class="title">1.2.1. Ephemeral storage</h4></div></div></div><p> Pods and containers are ephemeral or transient in nature and designed for stateless applications. Ephemeral storage allows administrators and developers to better manage the local storage for some of their operations. For more information about ephemeral storage overview, types, and management, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-ephemeral-storage">Understanding ephemeral storage</a>. </p></section><section class="section" id="persistent-storage"><div class="titlepage"><div><div><h4 class="title">1.2.2. Persistent storage</h4></div></div></div><p> Stateful applications deployed in containers require persistent storage. OpenShift Container Platform uses a pre-provisioned storage framework called persistent volumes (PV) to allow cluster administrators to provision persistent storage. The data inside these volumes can exist beyond the lifecycle of an individual pod. Developers can use persistent volume claims (PVCs) to request storage requirements. For more information about persistent storage overview, configuration, and lifecycle, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage">Understanding persistent storage</a>. </p></section></section><section class="section" id="container-storage-interface"><div class="titlepage"><div><div><h3 class="title">1.3. Container Storage Interface (CSI)</h3></div></div></div><p> CSI is an API specification for the management of container storage across different container orchestration (CO) systems. You can manage the storage volumes within the container native environments, without having specific knowledge of the underlying storage infrastructure. With the CSI, storage works uniformly across different container orchestration systems, regardless of the storage vendors you are using. For more information about CSI, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">Using Container Storage Interface (CSI)</a>. </p></section><section class="section" id="dynamic-provisioning-overview"><div class="titlepage"><div><div><h3 class="title">1.4. Dynamic Provisioning</h3></div></div></div><p> Dynamic Provisioning allows you to create storage volumes on-demand, eliminating the need for cluster administrators to pre-provision storage. For more information about dynamic provisioning, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#dynamic-provisioning">Dynamic provisioning</a>. </p></section></section><section class="chapter" id="understanding-ephemeral-storage"><div class="titlepage"><div><div><h2 class="title">Chapter 2. Understanding ephemeral storage</h2></div></div></div><section class="section" id="storage-ephemeral-storage-overview_understanding-ephemeral-storage"><div class="titlepage"><div><div><h3 class="title">2.1. Overview</h3></div></div></div><p> In addition to persistent storage, pods and containers can require ephemeral or transient local storage for their operation. The lifetime of this ephemeral storage does not extend beyond the life of the individual pod, and this ephemeral storage cannot be shared across pods. </p><p> Pods use ephemeral local storage for scratch space, caching, and logs. Issues related to the lack of local storage accounting and isolation include the following: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Pods do not know how much local storage is available to them. </li><li class="listitem"> Pods cannot request guaranteed local storage. </li><li class="listitem"> Local storage is a best effort resource. </li><li class="listitem"> Pods can be evicted due to other pods filling the local storage, after which new pods are not admitted until sufficient storage has been reclaimed. </li></ul></div><p> Unlike persistent volumes, ephemeral storage is unstructured and the space is shared between all pods running on a node, in addition to other uses by the system, the container runtime, and OpenShift Container Platform. The ephemeral storage framework allows pods to specify their transient local storage needs. It also allows OpenShift Container Platform to schedule pods where appropriate, and to protect the node against excessive use of local storage. </p><p> While the ephemeral storage framework allows administrators and developers to better manage this local storage, it does not provide any promises related to I/O throughput and latency. </p></section><section class="section" id="storage-ephemeral-storage-types_understanding-ephemeral-storage"><div class="titlepage"><div><div><h3 class="title">2.2. Types of ephemeral storage</h3></div></div></div><p> Ephemeral local storage is always made available in the primary partition. There are two basic ways of creating the primary partition: root and runtime. </p><h5 id="root">Root</h5><p> This partition holds the kubelet root directory, <code class="literal">/var/lib/kubelet/</code> by default, and <code class="literal">/var/log/</code> directory. This partition can be shared between user pods, the OS, and Kubernetes system daemons. This partition can be consumed by pods through <code class="literal">EmptyDir</code> volumes, container logs, image layers, and container-writable layers. Kubelet manages shared access and isolation of this partition. This partition is ephemeral, and applications cannot expect any performance SLAs, such as disk IOPS, from this partition. </p><h5 id="runtime">Runtime</h5><p> This is an optional partition that runtimes can use for overlay file systems. OpenShift Container Platform attempts to identify and provide shared access along with isolation to this partition. Container image layers and writable layers are stored here. If the runtime partition exists, the <code class="literal">root</code> partition does not hold any image layer or other writable storage. </p></section><section class="section" id="storage-ephemeral-storage-manage_understanding-ephemeral-storage"><div class="titlepage"><div><div><h3 class="title">2.3. Ephemeral storage management</h3></div></div></div><p> Cluster administrators can manage ephemeral storage within a project by setting quotas that define the limit ranges and number of requests for ephemeral storage across all pods in a non-terminal state. Developers can also set requests and limits on this compute resource at the pod and container level. </p></section><section class="section" id="storage-ephemeral-storage-monitoring_understanding-ephemeral-storage"><div class="titlepage"><div><div><h3 class="title">2.4. Monitoring ephemeral storage</h3></div></div></div><p> You can use <code class="literal">/bin/df</code> as a tool to monitor ephemeral storage usage on the volume where ephemeral container data is located, which is <code class="literal">/var/lib/kubelet</code> and <code class="literal">/var/lib/containers</code>. The available space for only <code class="literal">/var/lib/kubelet</code> is shown when you use the <code class="literal">df</code> command if <code class="literal">/var/lib/containers</code> is placed on a separate disk by the cluster administrator. </p><p> To show the human-readable values of used and available space in <code class="literal">/var/lib</code>, enter the following command: </p><pre class="programlisting language-terminal">$ df -h /var/lib</pre><p> The output shows the ephemeral storage usage in <code class="literal">/var/lib</code>: </p><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Filesystem Size Used Avail Use% Mounted on /dev/sda1 69G 32G 34G 49% /</pre> <p></p></div></section></section><section class="chapter" id="understanding-persistent-storage"><div class="titlepage"><div><div><h2 class="title">Chapter 3. Understanding persistent storage</h2></div></div></div><section class="section" id="persistent-storage-overview_understanding-persistent-storage"><div class="titlepage"><div><div><h3 class="title">3.1. Persistent storage overview</h3></div></div></div><p> Managing storage is a distinct problem from managing compute resources. OpenShift Container Platform uses the Kubernetes persistent volume (PV) framework to allow cluster administrators to provision persistent storage for a cluster. Developers can use persistent volume claims (PVCs) to request PV resources without having specific knowledge of the underlying storage infrastructure. </p><p> PVCs are specific to a project, and are created and used by developers as a means to use a PV. PV resources on their own are not scoped to any single project; they can be shared across the entire OpenShift Container Platform cluster and claimed from any project. After a PV is bound to a PVC, that PV can not then be bound to additional PVCs. This has the effect of scoping a bound PV to a single namespace, that of the binding project. </p><p> PVs are defined by a <code class="literal">PersistentVolume</code> API object, which represents a piece of existing storage in the cluster that was either statically provisioned by the cluster administrator or dynamically provisioned using a <code class="literal">StorageClass</code> object. It is a resource in the cluster just like a node is a cluster resource. </p><p> PVs are volume plugins like <code class="literal">Volumes</code> but have a lifecycle that is independent of any individual pod that uses the PV. PV objects capture the details of the implementation of the storage, be that NFS, iSCSI, or a cloud-provider-specific storage system. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> High availability of storage in the infrastructure is left to the underlying storage provider. </p></div></rh-alert><p> PVCs are defined by a <code class="literal">PersistentVolumeClaim</code> API object, which represents a request for storage by a developer. It is similar to a pod in that pods consume node resources and PVCs consume PV resources. For example, pods can request specific levels of resources, such as CPU and memory, while PVCs can request specific storage capacity and access modes. For example, they can be mounted once read-write or many times read-only. </p></section><section class="section" id="lifecycle-volume-claim_understanding-persistent-storage"><div class="titlepage"><div><div><h3 class="title">3.2. Lifecycle of a volume and claim</h3></div></div></div><p> PVs are resources in the cluster. PVCs are requests for those resources and also act as claim checks to the resource. The interaction between PVs and PVCs have the following lifecycle. </p><section class="section" id="provisioning_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.2.1. Provision storage</h4></div></div></div><p> In response to requests from a developer defined in a PVC, a cluster administrator configures one or more dynamic provisioners that provision storage and a matching PV. </p><p> Alternatively, a cluster administrator can create a number of PVs in advance that carry the details of the real storage that is available for use. PVs exist in the API and are available for use. </p></section><section class="section" id="binding_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.2.2. Bind claims</h4></div></div></div><p> When you create a PVC, you request a specific amount of storage, specify the required access mode, and create a storage class to describe and classify the storage. The control loop in the master watches for new PVCs and binds the new PVC to an appropriate PV. If an appropriate PV does not exist, a provisioner for the storage class creates one. </p><p> The size of all PVs might exceed your PVC size. This is especially true with manually provisioned PVs. To minimize the excess, OpenShift Container Platform binds to the smallest PV that matches all other criteria. </p><p> Claims remain unbound indefinitely if a matching volume does not exist or can not be created with any available provisioner servicing a storage class. Claims are bound as matching volumes become available. For example, a cluster with many manually provisioned 50Gi volumes would not match a PVC requesting 100Gi. The PVC can be bound when a 100Gi PV is added to the cluster. </p></section><section class="section" id="using-pods_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.2.3. Use pods and claimed PVs</h4></div></div></div><p> Pods use claims as volumes. The cluster inspects the claim to find the bound volume and mounts that volume for a pod. For those volumes that support multiple access modes, you must specify which mode applies when you use the claim as a volume in a pod. </p><p> Once you have a claim and that claim is bound, the bound PV belongs to you for as long as you need it. You can schedule pods and access claimed PVs by including <code class="literal">persistentVolumeClaim</code> in the pod’s volumes block. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> If you attach persistent volumes that have high file counts to pods, those pods can fail or can take a long time to start. For more information, see <a class="link" href="https://access.redhat.com/solutions/6221251">When using Persistent Volumes with high file counts in OpenShift, why do pods fail to start or take an excessive amount of time to achieve "Ready" state?</a>. </p></div></rh-alert></section><section class="section" id="pvcprotection_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.2.4. Storage Object in Use Protection</h4></div></div></div><p> The Storage Object in Use Protection feature ensures that PVCs in active use by a pod and PVs that are bound to PVCs are not removed from the system, as this can result in data loss. </p><p> Storage Object in Use Protection is enabled by default. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> A PVC is in active use by a pod when a <code class="literal">Pod</code> object exists that uses the PVC. </p></div></rh-alert><p> If a user deletes a PVC that is in active use by a pod, the PVC is not removed immediately. PVC removal is postponed until the PVC is no longer actively used by any pods. Also, if a cluster admin deletes a PV that is bound to a PVC, the PV is not removed immediately. PV removal is postponed until the PV is no longer bound to a PVC. </p></section><section class="section" id="releasing_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.2.5. Release a persistent volume</h4></div></div></div><p> When you are finished with a volume, you can delete the PVC object from the API, which allows reclamation of the resource. The volume is considered released when the claim is deleted, but it is not yet available for another claim. The previous claimant’s data remains on the volume and must be handled according to policy. </p></section><section class="section" id="reclaiming_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.2.6. Reclaim policy for persistent volumes</h4></div></div></div><p> The reclaim policy of a persistent volume tells the cluster what to do with the volume after it is released. A volume’s reclaim policy can be <code class="literal">Retain</code>, <code class="literal">Recycle</code>, or <code class="literal">Delete</code>. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <code class="literal">Retain</code> reclaim policy allows manual reclamation of the resource for those volume plugins that support it. </li><li class="listitem"> <code class="literal">Recycle</code> reclaim policy recycles the volume back into the pool of unbound persistent volumes once it is released from its claim. </li></ul></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> The <code class="literal">Recycle</code> reclaim policy is deprecated in OpenShift Container Platform 4. Dynamic provisioning is recommended for equivalent and better functionality. </p></div></rh-alert><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <code class="literal">Delete</code> reclaim policy deletes both the <code class="literal">PersistentVolume</code> object from OpenShift Container Platform and the associated storage asset in external infrastructure, such as AWS EBS or VMware vSphere. </li></ul></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Dynamically provisioned volumes are always deleted. </p></div></rh-alert></section><section class="section" id="reclaim-manual_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.2.7. Reclaiming a persistent volume manually</h4></div></div></div><p> When a persistent volume claim (PVC) is deleted, the persistent volume (PV) still exists and is considered "released". However, the PV is not yet available for another claim because the data of the previous claimant remains on the volume. </p><div class="formalpara"><p class="title"><strong>Procedure</strong></p><p> To manually reclaim the PV as a cluster administrator: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Delete the PV. </p><pre class="programlisting language-terminal">$ oc delete pv &lt;pv-name&gt;</pre><p class="simpara"> The associated storage asset in the external infrastructure, such as an AWS EBS, GCE PD, Azure Disk, or Cinder volume, still exists after the PV is deleted. </p></li><li class="listitem"> Clean up the data on the associated storage asset. </li><li class="listitem"> Delete the associated storage asset. Alternately, to reuse the same storage asset, create a new PV with the storage asset definition. </li></ol></div><p> The reclaimed PV is now available for use by another PVC. </p></section><section class="section" id="reclaim-policy_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.2.8. Changing the reclaim policy of a persistent volume</h4></div></div></div><p> To change the reclaim policy of a persistent volume: </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> List the persistent volumes in your cluster: </p><pre class="programlisting language-terminal">$ oc get pv</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="screen">NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim1 manual 10s pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim2 manual 6s pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim3 manual 3s</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Choose one of your persistent volumes and change its reclaim policy: </p><pre class="programlisting language-terminal">$ oc patch pv &lt;your-pv-name&gt; -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'</pre></li><li class="listitem"><p class="simpara"> Verify that your chosen persistent volume has the right policy: </p><pre class="programlisting language-terminal">$ oc get pv</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="screen">NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim1 manual 10s pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim2 manual 6s pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Retain Bound default/claim3 manual 3s</pre> <p></p></div><p class="simpara"> In the preceding output, the volume bound to claim <code class="literal">default/claim3</code> now has a <code class="literal">Retain</code> reclaim policy. The volume will not be automatically deleted when a user deletes claim <code class="literal">default/claim3</code>. </p></li></ol></div></section></section><section class="section" id="persistent-volumes_understanding-persistent-storage"><div class="titlepage"><div><div><h3 class="title">3.3. Persistent volumes</h3></div></div></div><p> Each PV contains a <code class="literal">spec</code> and <code class="literal">status</code>, which is the specification and status of the volume, for example: </p><div class="formalpara"><p class="title"><strong><code class="literal">PersistentVolume</code> object definition example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 <span id="CO1-1"><!--Empty--></span><span class="callout">1</span> spec: capacity: storage: 5Gi <span id="CO1-2"><!--Empty--></span><span class="callout">2</span> accessModes: - ReadWriteOnce <span id="CO1-3"><!--Empty--></span><span class="callout">3</span> persistentVolumeReclaimPolicy: Retain <span id="CO1-4"><!--Empty--></span><span class="callout">4</span> ... status: ...</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO1-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Name of the persistent volume. </div></dd><dt><a href="#CO1-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The amount of storage available to the volume. </div></dd><dt><a href="#CO1-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The access mode, defining the read-write and mount permissions. </div></dd><dt><a href="#CO1-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The reclaim policy, indicating how the resource should be handled once it is released. </div></dd></dl></div><section class="section" id="types-of-persistent-volumes_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.3.1. Types of PVs</h4></div></div></div><p> OpenShift Container Platform supports the following persistent volume plugins: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> AWS Elastic Block Store (EBS) </li><li class="listitem"> Azure Disk </li><li class="listitem"> Azure File </li><li class="listitem"> Cinder </li><li class="listitem"> Fibre Channel </li><li class="listitem"> GCE Persistent Disk </li><li class="listitem"> HostPath </li><li class="listitem"> iSCSI </li><li class="listitem"> Local volume </li><li class="listitem"> NFS </li><li class="listitem"> OpenStack Manila </li><li class="listitem"> Red Hat OpenShift Container Storage </li><li class="listitem"> VMware vSphere </li></ul></div></section><section class="section" id="pv-capacity_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.3.2. Capacity</h4></div></div></div><p> Generally, a persistent volume (PV) has a specific storage capacity. This is set by using the <code class="literal">capacity</code> attribute of the PV. </p><p> Currently, storage capacity is the only resource that can be set or requested. Future attributes may include IOPS, throughput, and so on. </p></section><section class="section" id="pv-access-modes_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.3.3. Access modes</h4></div></div></div><p> A persistent volume can be mounted on a host in any way supported by the resource provider. Providers have different capabilities and each PV’s access modes are set to the specific modes supported by that particular volume. For example, NFS can support multiple read-write clients, but a specific NFS PV might be exported on the server as read-only. Each PV gets its own set of access modes describing that specific PV’s capabilities. </p><p> Claims are matched to volumes with similar access modes. The only two matching criteria are access modes and size. A claim’s access modes represent a request. Therefore, you might be granted more, but never less. For example, if a claim requests RWO, but the only volume available is an NFS PV (RWO+ROX+RWX), the claim would then match NFS because it supports RWO. </p><p> Direct matches are always attempted first. The volume’s modes must match or contain more modes than you requested. The size must be greater than or equal to what is expected. If two types of volumes, such as NFS and iSCSI, have the same set of access modes, either of them can match a claim with those modes. There is no ordering between types of volumes and no way to choose one type over another. </p><p> All volumes with the same modes are grouped, and then sorted by size, smallest to largest. The binder gets the group with matching modes and iterates over each, in size order, until one size matches. </p><p> The following table lists the access modes: </p><rh-table id="idm140708989985872"><table class="lt-4-cols lt-7-rows"><caption>Table 3.1. Access modes</caption><colgroup><col style="width: 20%; " class="col_1"><!--Empty--><col style="width: 20%; " class="col_2"><!--Empty--><col style="width: 60%; " class="col_3"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140708979737040" scope="col">Access Mode</th><th align="left" valign="top" id="idm140708979735984" scope="col">CLI abbreviation</th><th align="left" valign="top" id="idm140708979734896" scope="col">Description</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708979737040"> <p> ReadWriteOnce </p> </td><td align="left" valign="top" headers="idm140708979735984"> <p> <code class="literal">RWO</code> </p> </td><td align="left" valign="top" headers="idm140708979734896"> <p> The volume can be mounted as read-write by a single node. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708979737040"> <p> ReadOnlyMany </p> </td><td align="left" valign="top" headers="idm140708979735984"> <p> <code class="literal">ROX</code> </p> </td><td align="left" valign="top" headers="idm140708979734896"> <p> The volume can be mounted as read-only by many nodes. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708979737040"> <p> ReadWriteMany </p> </td><td align="left" valign="top" headers="idm140708979735984"> <p> <code class="literal">RWX</code> </p> </td><td align="left" valign="top" headers="idm140708979734896"> <p> The volume can be mounted as read-write by many nodes. </p> </td></tr></tbody></table></rh-table><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Volume access modes are descriptors of volume capabilities. They are not enforced constraints. The storage provider is responsible for runtime errors resulting from invalid use of the resource. </p><p> For example, NFS offers <code class="literal">ReadWriteOnce</code> access mode. You must mark the claims as <code class="literal">read-only</code> if you want to use the volume’s ROX capability. Errors in the provider show up at runtime as mount errors. </p><p> iSCSI and Fibre Channel volumes do not currently have any fencing mechanisms. You must ensure the volumes are only used by one node at a time. In certain situations, such as draining a node, the volumes can be used simultaneously by two nodes. Before draining the node, first ensure the pods that use these volumes are deleted. </p></div></rh-alert><rh-table id="idm140708993006672"><table class="gt-4-cols lt-7-rows"><caption>Table 3.2. Supported access modes for PVs</caption><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="idm140708994209328" scope="col">Volume plugin</th><th align="center" valign="top" id="idm140708994208240" scope="col">ReadWriteOnce <sup>[1]</sup></th><th align="center" valign="top" id="idm140708989911072" scope="col">ReadOnlyMany</th><th align="center" valign="top" id="idm140708989909984" scope="col">ReadWriteMany</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708994209328"> <p> AWS EBS <sup>[2]</sup> </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p>  -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> Azure File </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> Azure Disk </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p> -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> Cinder </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p>  -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> Fibre Channel </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p>  -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> GCE Persistent Disk </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p>  -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> HostPath </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p>  -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> iSCSI </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p>  -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> Local volume </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p>  -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> NFS </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> OpenStack Manila </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> Red Hat OpenShift Container Storage </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708994209328"> <p> VMware vSphere </p> </td><td align="center" valign="top" headers="idm140708994208240"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708989911072"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708989909984"> <div class="literallayout"><p>  -</p></div> </td></tr></tbody></table></rh-table><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> ReadWriteOnce (RWO) volumes cannot be mounted on multiple nodes. If a node fails, the system does not allow the attached RWO volume to be mounted on a new node because it is already assigned to the failed node. If you encounter a multi-attach error message as a result, force delete the pod on a shutdown or crashed node to avoid data loss in critical workloads, such as when dynamic persistent volumes are attached. </li><li class="listitem"> Use a recreate deployment strategy for pods that rely on AWS EBS. </li></ol></div></section><section class="section" id="pv-phase_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.3.4. Phase</h4></div></div></div><p> Volumes can be found in one of the following phases: </p><rh-table id="idm140708989078816"><table class="lt-4-cols lt-7-rows"><caption>Table 3.3. Volume phases</caption><colgroup><col style="width: 33%; " class="col_1"><!--Empty--><col style="width: 67%; " class="col_2"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140708990400256" scope="col">Phase</th><th align="left" valign="top" id="idm140708990399168" scope="col">Description</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708990400256"> <p> Available </p> </td><td align="left" valign="top" headers="idm140708990399168"> <p> A free resource not yet bound to a claim. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708990400256"> <p> Bound </p> </td><td align="left" valign="top" headers="idm140708990399168"> <p> The volume is bound to a claim. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708990400256"> <p> Released </p> </td><td align="left" valign="top" headers="idm140708990399168"> <p> The claim was deleted, but the resource is not yet reclaimed by the cluster. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708990400256"> <p> Failed </p> </td><td align="left" valign="top" headers="idm140708990399168"> <p> The volume has failed its automatic reclamation. </p> </td></tr></tbody></table></rh-table><p> You can view the name of the PVC bound to the PV by running: </p><pre class="programlisting language-terminal">$ oc get pv &lt;pv-claim&gt;</pre><section class="section" id="pv-mount-options_understanding-persistent-storage"><div class="titlepage"><div><div><h5 class="title">3.3.4.1. Mount options</h5></div></div></div><p> You can specify mount options while mounting a PV by using the attribute <code class="literal">mountOptions</code>. </p><p> For example: </p><div class="formalpara"><p class="title"><strong>Mount options example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce mountOptions: <span id="CO2-1"><!--Empty--></span><span class="callout">1</span> - nfsvers=4.1 nfs: path: /tmp server: 172.17.0.2 persistentVolumeReclaimPolicy: Retain claimRef: name: claim1 namespace: default</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO2-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Specified mount options are used while mounting the PV to the disk. </div></dd></dl></div><p> The following PV types support mount options: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> AWS Elastic Block Store (EBS) </li><li class="listitem"> Azure Disk </li><li class="listitem"> Azure File </li><li class="listitem"> Cinder </li><li class="listitem"> GCE Persistent Disk </li><li class="listitem"> iSCSI </li><li class="listitem"> Local volume </li><li class="listitem"> NFS </li><li class="listitem"> Red Hat OpenShift Container Storage (Ceph RBD only) </li><li class="listitem"> VMware vSphere </li></ul></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Fibre Channel and HostPath PVs do not support mount options. </p></div></rh-alert></section></section></section><section class="section" id="persistent-volume-claims_understanding-persistent-storage"><div class="titlepage"><div><div><h3 class="title">3.4. Persistent volume claims</h3></div></div></div><p> Each <code class="literal">PersistentVolumeClaim</code> object contains a <code class="literal">spec</code> and <code class="literal">status</code>, which is the specification and status of the persistent volume claim (PVC), for example: </p><div class="formalpara"><p class="title"><strong><code class="literal">PersistentVolumeClaim</code> object definition example</strong></p><p> </p><pre class="programlisting language-yaml">kind: PersistentVolumeClaim apiVersion: v1 metadata: name: myclaim <span id="CO3-1"><!--Empty--></span><span class="callout">1</span> spec: accessModes: - ReadWriteOnce <span id="CO3-2"><!--Empty--></span><span class="callout">2</span> resources: requests: storage: 8Gi <span id="CO3-3"><!--Empty--></span><span class="callout">3</span> storageClassName: gold <span id="CO3-4"><!--Empty--></span><span class="callout">4</span> status: ...</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO3-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Name of the PVC </div></dd><dt><a href="#CO3-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The access mode, defining the read-write and mount permissions </div></dd><dt><a href="#CO3-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The amount of storage available to the PVC </div></dd><dt><a href="#CO3-4"><span class="callout">4</span></a> </dt><dd><div class="para"> Name of the <code class="literal">StorageClass</code> required by the claim </div></dd></dl></div><section class="section" id="pvc-storage-class_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.4.1. Storage classes</h4></div></div></div><p> Claims can optionally request a specific storage class by specifying the storage class’s name in the <code class="literal">storageClassName</code> attribute. Only PVs of the requested class, ones with the same <code class="literal">storageClassName</code> as the PVC, can be bound to the PVC. The cluster administrator can configure dynamic provisioners to service one or more storage classes. The cluster administrator can create a PV on demand that matches the specifications in the PVC. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> The Cluster Storage Operator might install a default storage class depending on the platform in use. This storage class is owned and controlled by the operator. It cannot be deleted or modified beyond defining annotations and labels. If different behavior is desired, you must define a custom storage class. </p></div></rh-alert><p> The cluster administrator can also set a default storage class for all PVCs. When a default storage class is configured, the PVC must explicitly ask for <code class="literal">StorageClass</code> or <code class="literal">storageClassName</code> annotations set to <code class="literal">""</code> to be bound to a PV without a storage class. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> If more than one storage class is marked as default, a PVC can only be created if the <code class="literal">storageClassName</code> is explicitly specified. Therefore, only one storage class should be set as the default. </p></div></rh-alert></section><section class="section" id="pvc-access-modes_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.4.2. Access modes</h4></div></div></div><p> Claims use the same conventions as volumes when requesting storage with specific access modes. </p></section><section class="section" id="pvc-resources_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.4.3. Resources</h4></div></div></div><p> Claims, such as pods, can request specific quantities of a resource. In this case, the request is for storage. The same resource model applies to volumes and claims. </p></section><section class="section" id="pvc-claims-as-volumes_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.4.4. Claims as volumes</h4></div></div></div><p> Pods access storage by using the claim as a volume. Claims must exist in the same namespace as the pod using the claim. The cluster finds the claim in the pod’s namespace and uses it to get the <code class="literal">PersistentVolume</code> backing the claim. The volume is mounted to the host and into the pod, for example: </p><div class="formalpara"><p class="title"><strong>Mount volume to the host and into the pod example</strong></p><p> </p><pre class="programlisting language-yaml">kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: myfrontend image: dockerfile/nginx volumeMounts: - mountPath: "/var/www/html" <span id="CO4-1"><!--Empty--></span><span class="callout">1</span> name: mypd <span id="CO4-2"><!--Empty--></span><span class="callout">2</span> volumes: - name: mypd persistentVolumeClaim: claimName: myclaim <span id="CO4-3"><!--Empty--></span><span class="callout">3</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO4-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Path to mount the volume inside the pod. </div></dd><dt><a href="#CO4-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Name of the volume to mount. Do not mount to the container root, <code class="literal">/</code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged, such as the host <code class="literal">/dev/pts</code> files. It is safe to mount the host by using <code class="literal">/host</code>. </div></dd><dt><a href="#CO4-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Name of the PVC, that exists in the same namespace, to use. </div></dd></dl></div></section></section><section class="section" id="block-volume-support_understanding-persistent-storage"><div class="titlepage"><div><div><h3 class="title">3.5. Block volume support</h3></div></div></div><p> OpenShift Container Platform can statically provision raw block volumes. These volumes do not have a file system, and can provide performance benefits for applications that either write to the disk directly or implement their own storage service. </p><p> Raw block volumes are provisioned by specifying <code class="literal">volumeMode: Block</code> in the PV and PVC specification. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Pods using raw block volumes must be configured to allow privileged containers. </p></div></rh-alert><p> The following table displays which volume plugins support block volumes. </p><rh-table id="idm140708995027312"><table class="gt-4-cols lt-7-rows"><caption>Table 3.4. Block volume support</caption><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="idm140708993789776" scope="col">Volume Plugin</th><th align="left" valign="top" id="idm140708993788688" scope="col">Manually provisioned</th><th align="left" valign="top" id="idm140708993787600" scope="col">Dynamically provisioned</th><th align="left" valign="top" id="idm140708989889152" scope="col">Fully supported</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708993789776"> <p> AWS EBS </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> Azure Disk </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> Azure File </p> </td><td align="left" valign="top" headers="idm140708993788688"> </td><td align="left" valign="top" headers="idm140708993787600"> </td><td align="left" valign="top" headers="idm140708989889152"> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> Cinder </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> Fibre Channel </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> GCP </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> HostPath </p> </td><td align="left" valign="top" headers="idm140708993788688"> </td><td align="left" valign="top" headers="idm140708993787600"> </td><td align="left" valign="top" headers="idm140708989889152"> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> iSCSI </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> Local volume </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> NFS </p> </td><td align="left" valign="top" headers="idm140708993788688"> </td><td align="left" valign="top" headers="idm140708993787600"> </td><td align="left" valign="top" headers="idm140708989889152"> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> Red Hat OpenShift Container Storage </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr><tr><td align="left" valign="top" headers="idm140708993789776"> <p> VMware vSphere </p> </td><td align="left" valign="top" headers="idm140708993788688"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708993787600"> <p> ✅ </p> </td><td align="left" valign="top" headers="idm140708989889152"> <p> ✅ </p> </td></tr></tbody></table></rh-table><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Any of the block volumes that can be provisioned manually, but are not provided as fully supported, are included as 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. 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><section class="section" id="block-volume-examples_understanding-persistent-storage"><div class="titlepage"><div><div><h4 class="title">3.5.1. Block volume examples</h4></div></div></div><div class="formalpara"><p class="title"><strong>PV example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: block-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce volumeMode: Block <span id="CO5-1"><!--Empty--></span><span class="callout">1</span> persistentVolumeReclaimPolicy: Retain fc: targetWWNs: ["50060e801049cfd1"] lun: 0 readOnly: false</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO5-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">volumeMode</code> must be set to <code class="literal">Block</code> to indicate that this PV is a raw block volume. </div></dd></dl></div><div class="formalpara"><p class="title"><strong>PVC example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-pvc spec: accessModes: - ReadWriteOnce volumeMode: Block <span id="CO6-1"><!--Empty--></span><span class="callout">1</span> resources: requests: storage: 10Gi</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"> <code class="literal">volumeMode</code> must be set to <code class="literal">Block</code> to indicate that a raw block PVC is requested. </div></dd></dl></div><div class="formalpara"><p class="title"><strong><code class="literal">Pod</code> specification example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: Pod metadata: name: pod-with-block-volume spec: containers: - name: fc-container image: fedora:26 command: ["/bin/sh", "-c"] args: [ "tail -f /dev/null" ] volumeDevices: <span id="CO7-1"><!--Empty--></span><span class="callout">1</span> - name: data devicePath: /dev/xvda <span id="CO7-2"><!--Empty--></span><span class="callout">2</span> volumes: - name: data persistentVolumeClaim: claimName: block-pvc <span id="CO7-3"><!--Empty--></span><span class="callout">3</span></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"> <code class="literal">volumeDevices</code>, instead of <code class="literal">volumeMounts</code>, is used for block devices. Only <code class="literal">PersistentVolumeClaim</code> sources can be used with raw block volumes. </div></dd><dt><a href="#CO7-2"><span class="callout">2</span></a> </dt><dd><div class="para"> <code class="literal">devicePath</code>, instead of <code class="literal">mountPath</code>, represents the path to the physical device where the raw block is mapped to the system. </div></dd><dt><a href="#CO7-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The volume source must be of type <code class="literal">persistentVolumeClaim</code> and must match the name of the PVC as expected. </div></dd></dl></div><rh-table id="idm140708989118912"><table class="lt-4-cols lt-7-rows"><caption>Table 3.5. Accepted values for volumeMode</caption><colgroup><col style="width: 33%; " class="col_1"><!--Empty--><col style="width: 67%; " class="col_2"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140708990975168" scope="col">Value</th><th align="left" valign="top" id="idm140708990974080" scope="col">Default</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708990975168"> <p> Filesystem </p> </td><td align="left" valign="top" headers="idm140708990974080"> <p> Yes </p> </td></tr><tr><td align="left" valign="top" headers="idm140708990975168"> <p> Block </p> </td><td align="left" valign="top" headers="idm140708990974080"> <p> No </p> </td></tr></tbody></table></rh-table><rh-table id="idm140708990801520"><table class="lt-4-cols lt-7-rows"><caption>Table 3.6. Binding scenarios for block volumes</caption><colgroup><col style="width: 17%; " class="col_1"><!--Empty--><col style="width: 33%; " class="col_2"><!--Empty--><col style="width: 50%; " class="col_3"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140708989995264" scope="col">PV <code class="literal">volumeMode</code></th><th align="left" valign="top" id="idm140708989993856" scope="col">PVC <code class="literal">volumeMode</code></th><th align="left" valign="top" id="idm140708989992448" scope="col">Binding result</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Filesystem </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Filesystem </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> Bind </p> </td></tr><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Unspecified </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Unspecified </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> Bind </p> </td></tr><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Filesystem </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Unspecified </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> Bind </p> </td></tr><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Unspecified </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Filesystem </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> Bind </p> </td></tr><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Block </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Block </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> Bind </p> </td></tr><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Unspecified </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Block </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> No Bind </p> </td></tr><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Block </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Unspecified </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> No Bind </p> </td></tr><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Filesystem </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Block </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> No Bind </p> </td></tr><tr><td align="left" valign="top" headers="idm140708989995264"> <p> Block </p> </td><td align="left" valign="top" headers="idm140708989993856"> <p> Filesystem </p> </td><td align="left" valign="top" headers="idm140708989992448"> <p> No Bind </p> </td></tr></tbody></table></rh-table><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Unspecified values result in the default value of <code class="literal">Filesystem</code>. </p></div></rh-alert></section></section></section><section class="chapter" id="configuring-persistent-storage"><div class="titlepage"><div><div><h2 class="title">Chapter 4. Configuring persistent storage</h2></div></div></div><section class="section" id="persistent-storage-aws"><div class="titlepage"><div><div><h3 class="title">4.1. Persistent storage using AWS Elastic Block Store</h3></div></div></div><p> OpenShift Container Platform supports AWS Elastic Block Store volumes (EBS). You can provision your OpenShift Container Platform cluster with persistent storage by using <a class="link" href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html">Amazon EC2</a>. Some familiarity with Kubernetes and AWS is assumed. </p><p> The Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. AWS Elastic Block Store volumes can be provisioned dynamically. Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision AWS EBS storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> High-availability of storage in the infrastructure is left to the underlying storage provider. </p></div></rh-alert><p> For OpenShift Container Platform, automatic migration from AWS EBS in-tree to the Container Storage Interface (CSI) driver is available as a Technology Preview (TP) feature. With migration enabled, volumes provisioned using the existing in-tree driver are automatically migrated to use the AWS EBS CSI driver. For more information, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration feature</a>. </p><section class="section" id="storage-create-EBS-storage-class_persistent-storage-aws"><div class="titlepage"><div><div><h4 class="title">4.1.1. Creating the EBS storage class</h4></div></div></div><p> Storage classes are used to differentiate and delineate storage levels and usages. By defining a storage class, users can obtain dynamically provisioned persistent volumes. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Storage Classes</strong></span>. </li><li class="listitem"> In the storage class overview, click <span class="strong strong"><strong>Create Storage Class</strong></span>. </li><li class="listitem"><p class="simpara"> Define the desired options on the page that appears. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Enter a name to reference the storage class. </li><li class="listitem"> Enter an optional description. </li><li class="listitem"> Select the reclaim policy. </li><li class="listitem"><p class="simpara"> Select <code class="literal">kubernetes.io/aws-ebs</code> from the drop-down list. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> To create the storage class with the equivalent CSI driver, select <code class="literal">ebs.csi.aws.com</code> from the drop-down list. For more details, see <span class="emphasis"><em>AWS Elastic Block Store CSI Driver Operator</em></span>. </p></div></rh-alert></li><li class="listitem"> Enter additional parameters for the storage class as desired. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the storage class. </li></ol></div></section><section class="section" id="creating-the-persistent-volume-claim"><div class="titlepage"><div><div><h4 class="title">4.1.2. Creating the persistent volume claim</h4></div></div></div><div class="formalpara"><p class="title"><strong>Prerequisites</strong></p><p> Storage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform. </p></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Persistent Volume Claims</strong></span>. </li><li class="listitem"> In the persistent volume claims overview, click <span class="strong strong"><strong>Create Persistent Volume Claim</strong></span>. </li><li class="listitem"><p class="simpara"> Define the desired options on the page that appears. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Select the storage class created previously from the drop-down menu. </li><li class="listitem"> Enter a unique name for the storage claim. </li><li class="listitem"> Select the access mode. This determines the read and write access for the created storage claim. </li><li class="listitem"> Define the size of the storage claim. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the persistent volume claim and generate a persistent volume. </li></ol></div></section><section class="section" id="volume-format-AWS_persistent-storage-aws"><div class="titlepage"><div><div><h4 class="title">4.1.3. Volume format</h4></div></div></div><p> Before OpenShift Container Platform mounts the volume and passes it to a container, it checks that it contains a file system as specified by the <code class="literal">fsType</code> parameter in the persistent volume definition. If the device is not formatted with the file system, all data from the device is erased and the device is automatically formatted with the given file system. </p><p> This allows using unformatted AWS volumes as persistent volumes, because OpenShift Container Platform formats them before the first use. </p></section><section class="section" id="maximum-number-of-ebs-volumes-on-a-node_persistent-storage-aws"><div class="titlepage"><div><div><h4 class="title">4.1.4. Maximum number of EBS volumes on a node</h4></div></div></div><p> By default, OpenShift Container Platform supports a maximum of 39 EBS volumes attached to one node. This limit is consistent with the <a class="link" href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html#linux-specific-volume-limits">AWS volume limits</a>. The volume limit depends on the instance type. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> As a cluster administrator, you must use either in-tree or Container Storage Interface (CSI) volumes and their respective storage classes, but never both volume types at the same time. The maximum attached EBS volume number is counted separately for in-tree and CSI volumes. </p></div></rh-alert></section><section class="section _additional-resources" id="additional-resources_persistent-storage-aws"><div class="titlepage"><div><div><h4 class="title">4.1.5. Additional resources</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> See <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-ebs">AWS Elastic Block Store CSI Driver Operator</a> for information about accessing additional storage options, such as volume snapshots, that are not possible with in-tree volume plugins. </li></ul></div></section></section><section class="section" id="persistent-storage-using-azure"><div class="titlepage"><div><div><h3 class="title">4.2. Persistent storage using Azure</h3></div></div></div><p> OpenShift Container Platform supports Microsoft Azure Disk volumes. You can provision your OpenShift Container Platform cluster with persistent storage using Azure. Some familiarity with Kubernetes and Azure is assumed. The Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. Azure Disk volumes can be provisioned dynamically. Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision Azure Disk storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> High availability of storage in the infrastructure is left to the underlying storage provider. </p></div></rh-alert><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://azure.microsoft.com/en-us/services/storage/disks">Microsoft Azure Disk</a> </li></ul></div><section class="section" id="storage-create-azure-storage-class_persistent-storage-azure"><div class="titlepage"><div><div><h4 class="title">4.2.1. Creating the Azure storage class</h4></div></div></div><p> Storage classes are used to differentiate and delineate storage levels and usages. By defining a storage class, users can obtain dynamically provisioned persistent volumes. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Storage Classes</strong></span>. </li><li class="listitem"> In the storage class overview, click <span class="strong strong"><strong>Create Storage Class</strong></span>. </li><li class="listitem"><p class="simpara"> Define the desired options on the page that appears. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Enter a name to reference the storage class. </li><li class="listitem"> Enter an optional description. </li><li class="listitem"> Select the reclaim policy. </li><li class="listitem"><p class="simpara"> Select <code class="literal">kubernetes.io/azure-disk</code> from the drop down list. </p><div class="orderedlist"><ol class="orderedlist" type="i"><li class="listitem"> Enter the storage account type. This corresponds to your Azure storage account SKU tier. Valid options are <code class="literal">Premium_LRS</code>, <code class="literal">Standard_LRS</code>, <code class="literal">StandardSSD_LRS</code>, and <code class="literal">UltraSSD_LRS</code>. </li><li class="listitem"><p class="simpara"> Enter the kind of account. Valid options are <code class="literal">shared</code>, <code class="literal">dedicated,</code> and <code class="literal">managed</code>. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Red Hat only supports the use of <code class="literal">kind: Managed</code> in the storage class. </p><p> With <code class="literal">Shared</code> and <code class="literal">Dedicated</code>, Azure creates unmanaged disks, while OpenShift Container Platform creates a managed disk for machine OS (root) disks. But because Azure Disk does not allow the use of both managed and unmanaged disks on a node, unmanaged disks created with <code class="literal">Shared</code> or <code class="literal">Dedicated</code> cannot be attached to OpenShift Container Platform nodes. </p></div></rh-alert></li></ol></div></li><li class="listitem"> Enter additional parameters for the storage class as desired. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the storage class. </li></ol></div><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://kubernetes.io/docs/concepts/storage/storage-classes/#new-azure-disk-storage-class-starting-from-v1-7-2">Azure Disk Storage Class</a> </li></ul></div></section><section class="section" id="creating-the-persistent-volume-claim-2"><div class="titlepage"><div><div><h4 class="title">4.2.2. Creating the persistent volume claim</h4></div></div></div><div class="formalpara"><p class="title"><strong>Prerequisites</strong></p><p> Storage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform. </p></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Persistent Volume Claims</strong></span>. </li><li class="listitem"> In the persistent volume claims overview, click <span class="strong strong"><strong>Create Persistent Volume Claim</strong></span>. </li><li class="listitem"><p class="simpara"> Define the desired options on the page that appears. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Select the storage class created previously from the drop-down menu. </li><li class="listitem"> Enter a unique name for the storage claim. </li><li class="listitem"> Select the access mode. This determines the read and write access for the created storage claim. </li><li class="listitem"> Define the size of the storage claim. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the persistent volume claim and generate a persistent volume. </li></ol></div></section><section class="section" id="volume-format-azure_persistent-storage-azure"><div class="titlepage"><div><div><h4 class="title">4.2.3. Volume format</h4></div></div></div><p> Before OpenShift Container Platform mounts the volume and passes it to a container, it checks that it contains a file system as specified by the <code class="literal">fsType</code> parameter in the persistent volume definition. If the device is not formatted with the file system, all data from the device is erased and the device is automatically formatted with the given file system. </p><p> This allows using unformatted Azure volumes as persistent volumes, because OpenShift Container Platform formats them before the first use. </p></section></section><section class="section" id="persistent-storage-using-azure-file"><div class="titlepage"><div><div><h3 class="title">4.3. Persistent storage using Azure File</h3></div></div></div><p> OpenShift Container Platform supports Microsoft Azure File volumes. You can provision your OpenShift Container Platform cluster with persistent storage using Azure. Some familiarity with Kubernetes and Azure is assumed. </p><p> The Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. You can provision Azure File volumes dynamically. </p><p> Persistent volumes are not bound to a single project or namespace, and you can share them across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace, and can be requested by users for use in applications. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> High availability of storage in the infrastructure is left to the underlying storage provider. </p></div></rh-alert><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Azure File volumes use Server Message Block. </p></div></rh-alert><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://azure.microsoft.com/en-us/services/storage/files/">Azure Files</a> </li></ul></div><section class="section" id="create-azure-file-secret_persistent-storage-azure-file"><div class="titlepage"><div><div><h4 class="title">4.3.1. Create the Azure File share persistent volume claim</h4></div></div></div><p> To create the persistent volume claim, you must first define a <code class="literal">Secret</code> object that contains the Azure account and key. This secret is used in the <code class="literal">PersistentVolume</code> definition, and will be referenced by the persistent volume claim for use in applications. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> An Azure File share exists. </li><li class="listitem"> The credentials to access this share, specifically the storage account and key, are available. </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">Secret</code> object that contains the Azure File credentials: </p><pre class="programlisting language-terminal">$ oc create secret generic &lt;secret-name&gt; --from-literal=azurestorageaccountname=&lt;storage-account&gt; \ <span id="CO8-1"><!--Empty--></span><span class="callout">1</span> --from-literal=azurestorageaccountkey=&lt;storage-account-key&gt; <span id="CO8-2"><!--Empty--></span><span class="callout">2</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO8-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The Azure File storage account name. </div></dd><dt><a href="#CO8-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The Azure File storage account key. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create a <code class="literal">PersistentVolume</code> object that references the <code class="literal">Secret</code> object you created: </p><pre class="programlisting language-yaml">apiVersion: "v1" kind: "PersistentVolume" metadata: name: "pv0001" <span id="CO9-1"><!--Empty--></span><span class="callout">1</span> spec: capacity: storage: "5Gi" <span id="CO9-2"><!--Empty--></span><span class="callout">2</span> accessModes: - "ReadWriteOnce" storageClassName: azure-file-sc azureFile: secretName: &lt;secret-name&gt; <span id="CO9-3"><!--Empty--></span><span class="callout">3</span> shareName: share-1 <span id="CO9-4"><!--Empty--></span><span class="callout">4</span> readOnly: false</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO9-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the persistent volume. </div></dd><dt><a href="#CO9-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The size of this persistent volume. </div></dd><dt><a href="#CO9-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The name of the secret that contains the Azure File share credentials. </div></dd><dt><a href="#CO9-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The name of the Azure File share. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create a <code class="literal">PersistentVolumeClaim</code> object that maps to the persistent volume you created: </p><pre class="programlisting language-yaml">apiVersion: "v1" kind: "PersistentVolumeClaim" metadata: name: "claim1" <span id="CO10-1"><!--Empty--></span><span class="callout">1</span> spec: accessModes: - "ReadWriteOnce" resources: requests: storage: "5Gi" <span id="CO10-2"><!--Empty--></span><span class="callout">2</span> storageClassName: azure-file-sc <span id="CO10-3"><!--Empty--></span><span class="callout">3</span> volumeName: "pv0001" <span id="CO10-4"><!--Empty--></span><span class="callout">4</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO10-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the persistent volume claim. </div></dd><dt><a href="#CO10-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The size of this persistent volume claim. </div></dd><dt><a href="#CO10-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The name of the storage class that is used to provision the persistent volume. Specify the storage class used in the <code class="literal">PersistentVolume</code> definition. </div></dd><dt><a href="#CO10-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The name of the existing <code class="literal">PersistentVolume</code> object that references the Azure File share. </div></dd></dl></div></li></ol></div></section><section class="section" id="create-azure-file-pod_persistent-storage-azure-file"><div class="titlepage"><div><div><h4 class="title">4.3.2. Mount the Azure File share in a pod</h4></div></div></div><p> After the persistent volume claim has been created, it can be used inside by an application. The following example demonstrates mounting this share inside of a pod. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> A persistent volume claim exists that is mapped to the underlying Azure File share. </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 pod that mounts the existing persistent volume claim: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: Pod metadata: name: pod-name <span id="CO11-1"><!--Empty--></span><span class="callout">1</span> spec: containers: ... volumeMounts: - mountPath: "/data" <span id="CO11-2"><!--Empty--></span><span class="callout">2</span> name: azure-file-share volumes: - name: azure-file-share persistentVolumeClaim: claimName: claim1 <span id="CO11-3"><!--Empty--></span><span class="callout">3</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO11-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the pod. </div></dd><dt><a href="#CO11-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The path to mount the Azure File share inside the pod. Do not mount to the container root, <code class="literal">/</code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged, such as the host <code class="literal">/dev/pts</code> files. It is safe to mount the host by using <code class="literal">/host</code>. </div></dd><dt><a href="#CO11-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The name of the <code class="literal">PersistentVolumeClaim</code> object that has been previously created. </div></dd></dl></div></li></ul></div></section></section><section class="section" id="persistent-storage-cinder"><div class="titlepage"><div><div><h3 class="title">4.4. Persistent storage using Cinder</h3></div></div></div><p> OpenShift Container Platform supports OpenStack Cinder. Some familiarity with Kubernetes and OpenStack is assumed. </p><p> Cinder volumes can be provisioned dynamically. Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision Cinder storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> For more information about how OpenStack Block Storage provides persistent block storage management for virtual hard drives, see <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/8/html-single/architecture_guide/index#comp-cinder">OpenStack Cinder</a>. </li></ul></div><section class="section" id="persistent-storage-cinder-provisioning_persistent-storage-cinder"><div class="titlepage"><div><div><h4 class="title">4.4.1. Manual provisioning with Cinder</h4></div></div></div><p> Storage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> OpenShift Container Platform configured for Red Hat OpenStack Platform (RHOSP) </li><li class="listitem"> Cinder volume ID </li></ul></div><section class="section" id="persistent-storage-cinder-creating-pv_persistent-storage-cinder"><div class="titlepage"><div><div><h5 class="title">4.4.1.1. Creating the persistent volume</h5></div></div></div><p> You must define your persistent volume (PV) in an object definition before creating it in OpenShift Container Platform: </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Save your object definition to a file. </p><div class="formalpara"><p class="title"><strong>cinder-persistentvolume.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: "v1" kind: "PersistentVolume" metadata: name: "pv0001" <span id="CO12-1"><!--Empty--></span><span class="callout">1</span> spec: capacity: storage: "5Gi" <span id="CO12-2"><!--Empty--></span><span class="callout">2</span> accessModes: - "ReadWriteOnce" cinder: <span id="CO12-3"><!--Empty--></span><span class="callout">3</span> fsType: "ext3" <span id="CO12-4"><!--Empty--></span><span class="callout">4</span> volumeID: "f37a03aa-6212-4c62-a805-9ce139fab180" <span id="CO12-5"><!--Empty--></span><span class="callout">5</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 volume that is used by persistent volume claims or pods. </div></dd><dt><a href="#CO12-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The amount of storage allocated to this volume. </div></dd><dt><a href="#CO12-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Indicates <code class="literal">cinder</code> for Red Hat OpenStack Platform (RHOSP) Cinder volumes. </div></dd><dt><a href="#CO12-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The file system that is created when the volume is mounted for the first time. </div></dd><dt><a href="#CO12-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The Cinder volume to use. </div></dd></dl></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Do not change the <code class="literal">fstype</code> parameter value after the volume is formatted and provisioned. Changing this value can result in data loss and pod failure. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Create the object definition file you saved in the previous step. </p><pre class="programlisting language-terminal">$ oc create -f cinder-persistentvolume.yaml</pre></li></ol></div></section><section class="section" id="persistent-storage-cinder-pv-format_persistent-storage-cinder"><div class="titlepage"><div><div><h5 class="title">4.4.1.2. Persistent volume formatting</h5></div></div></div><p> You can use unformatted Cinder volumes as PVs because OpenShift Container Platform formats them before the first use. </p><p> Before OpenShift Container Platform mounts the volume and passes it to a container, the system checks that it contains a file system as specified by the <code class="literal">fsType</code> parameter in the PV definition. If the device is not formatted with the file system, all data from the device is erased and the device is automatically formatted with the given file system. </p></section><section class="section" id="persistent-storage-cinder-volume-security_persistent-storage-cinder"><div class="titlepage"><div><div><h5 class="title">4.4.1.3. Cinder volume security</h5></div></div></div><p> If you use Cinder PVs in your application, configure security for their deployment configurations. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> An SCC must be created that uses the appropriate <code class="literal">fsGroup</code> strategy. </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 service account and add it to the SCC: </p><pre class="programlisting language-terminal">$ oc create serviceaccount &lt;service_account&gt;</pre><pre class="programlisting language-terminal">$ oc adm policy add-scc-to-user &lt;new_scc&gt; -z &lt;service_account&gt; -n &lt;project&gt;</pre></li><li class="listitem"><p class="simpara"> In your application’s deployment configuration, provide the service account name and <code class="literal">securityContext</code>: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: ReplicationController metadata: name: frontend-1 spec: replicas: 1 <span id="CO13-1"><!--Empty--></span><span class="callout">1</span> selector: <span id="CO13-2"><!--Empty--></span><span class="callout">2</span> name: frontend template: <span id="CO13-3"><!--Empty--></span><span class="callout">3</span> metadata: labels: <span id="CO13-4"><!--Empty--></span><span class="callout">4</span> name: frontend <span id="CO13-5"><!--Empty--></span><span class="callout">5</span> spec: containers: - image: openshift/hello-openshift name: helloworld ports: - containerPort: 8080 protocol: TCP restartPolicy: Always serviceAccountName: &lt;service_account&gt; <span id="CO13-6"><!--Empty--></span><span class="callout">6</span> securityContext: fsGroup: 7777 <span id="CO13-7"><!--Empty--></span><span class="callout">7</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO13-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The number of copies of the pod to run. </div></dd><dt><a href="#CO13-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The label selector of the pod to run. </div></dd><dt><a href="#CO13-3"><span class="callout">3</span></a> </dt><dd><div class="para"> A template for the pod that the controller creates. </div></dd><dt><a href="#CO13-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The labels on the pod. They must include labels from the label selector. </div></dd><dt><a href="#CO13-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The maximum name length after expanding any parameters is 63 characters. </div></dd><dt><a href="#CO13-6"><span class="callout">6</span></a> </dt><dd><div class="para"> Specifies the service account you created. </div></dd><dt><a href="#CO13-7"><span class="callout">7</span></a> </dt><dd><div class="para"> Specifies an <code class="literal">fsGroup</code> for the pods. </div></dd></dl></div></li></ol></div></section><section class="section" id="persistent-storage-cinder-maximum-volume_persistent-storage-cinder"><div class="titlepage"><div><div><h5 class="title">4.4.1.4. Maximum number of Cinder volumes on a node</h5></div></div></div><p> By default, OpenShift Container Platform supports a maximum of 256 Cinder volumes attached to one node, and the Cinder predicate that limits attachable volumes is disabled. To enable the predicate, add <code class="literal">MaxCinderVolumeCount</code> string to the <code class="literal">predicates</code> field in the scheduler policy. </p><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> For more information on modifying the scheduler policy, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/nodes/#nodes-scheduler-default-modifying_nodes-scheduler-default">Modifying scheduler policies</a>. </li></ul></div></section></section></section><section class="section" id="persistent-storage-using-fibre"><div class="titlepage"><div><div><h3 class="title">4.5. Persistent storage using Fibre Channel</h3></div></div></div><p> OpenShift Container Platform supports Fibre Channel, allowing you to provision your OpenShift Container Platform cluster with persistent storage using Fibre channel volumes. Some familiarity with Kubernetes and Fibre Channel is assumed. </p><p> The Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> High availability of storage in the infrastructure is left to the underlying storage provider. </p></div></rh-alert><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_storage_devices/using-fibre-channel-devices_managing-storage-devices">Using Fibre Channel devices</a> </li></ul></div><section class="section" id="provisioning-fibre_persistent-storage-fibre"><div class="titlepage"><div><div><h4 class="title">4.5.1. Provisioning</h4></div></div></div><p> To provision Fibre Channel volumes using the <code class="literal">PersistentVolume</code> API the following must be available: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The <code class="literal">targetWWNs</code> (array of Fibre Channel target’s World Wide Names). </li><li class="listitem"> A valid LUN number. </li><li class="listitem"> The filesystem type. </li></ul></div><p> A persistent volume and a LUN have a one-to-one mapping between them. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Fibre Channel LUNs must exist in the underlying infrastructure. </li></ul></div><div class="formalpara"><p class="title"><strong><code class="literal">PersistentVolume</code> object definition</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce fc: wwids: [scsi-3600508b400105e210000900000490000] <span id="CO14-1"><!--Empty--></span><span class="callout">1</span> targetWWNs: ['500a0981891b8dc5', '500a0981991b8dc5'] <span id="CO14-2"><!--Empty--></span><span class="callout">2</span> lun: 2 <span id="CO14-3"><!--Empty--></span><span class="callout">3</span> fsType: ext4</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO14-1"><span class="callout">1</span></a> </dt><dd><div class="para"> World wide identifiers (WWIDs). Either FC <code class="literal"><span class="strong strong"><strong>wwids</strong></span></code> or a combination of FC <code class="literal"><span class="strong strong"><strong>targetWWNs</strong></span></code> and <code class="literal"><span class="strong strong"><strong>lun</strong></span></code> must be set, but not both simultaneously. The FC WWID identifier is recommended over the WWNs target because it is guaranteed to be unique for every storage device, and independent of the path that is used to access the device. The WWID identifier can be obtained by issuing a SCSI Inquiry to retrieve the Device Identification Vital Product Data (<code class="literal"><span class="strong strong"><strong>page 0x83</strong></span></code>) or Unit Serial Number (<code class="literal"><span class="strong strong"><strong>page 0x80</strong></span></code>). FC WWIDs are identified as <code class="literal"><span class="strong strong"><strong>/dev/disk/by-id/</strong></span></code> to reference the data on the disk, even if the path to the device changes and even when accessing the device from different systems. </div></dd><dt><a href="#CO14-2"><span class="callout">2</span></a> <a href="#CO14-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Fibre Channel WWNs are identified as <code class="literal">/dev/disk/by-path/pci-&lt;IDENTIFIER&gt;-fc-0x&lt;WWN&gt;-lun-&lt;LUN#&gt;</code>, but you do not need to provide any part of the path leading up to the <code class="literal">WWN</code>, including the <code class="literal">0x</code>, and anything after, including the <code class="literal">-</code> (hyphen). </div></dd></dl></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Changing the value of the <code class="literal">fstype</code> parameter after the volume has been formatted and provisioned can result in data loss and pod failure. </p></div></rh-alert><section class="section" id="enforcing-disk-quota_persistent-storage-fibre"><div class="titlepage"><div><div><h5 class="title">4.5.1.1. Enforcing disk quotas</h5></div></div></div><p> Use LUN partitions to enforce disk quotas and size constraints. Each LUN is mapped to a single persistent volume, and unique names must be used for persistent volumes. </p><p> Enforcing quotas in this way allows the end user to request persistent storage by a specific amount, such as 10Gi, and be matched with a corresponding volume of equal or greater capacity. </p></section><section class="section" id="fibre-volume-security_persistent-storage-fibre"><div class="titlepage"><div><div><h5 class="title">4.5.1.2. Fibre Channel volume security</h5></div></div></div><p> Users request storage with a persistent volume claim. This claim only lives in the user’s namespace, and can only be referenced by a pod within that same namespace. Any attempt to access a persistent volume across a namespace causes the pod to fail. </p><p> Each Fibre Channel LUN must be accessible by all nodes in the cluster. </p></section></section></section><section class="section" id="persistent-storage-using-flexvolume"><div class="titlepage"><div><div><h3 class="title">4.6. Persistent storage using FlexVolume</h3></div></div></div><p> OpenShift Container Platform supports FlexVolume, an out-of-tree plugin that uses an executable model to interface with drivers. </p><p> To use storage from a back-end that does not have a built-in plugin, you can extend OpenShift Container Platform through FlexVolume drivers and provide persistent storage to applications. </p><p> Pods interact with FlexVolume drivers through the <code class="literal">flexvolume</code> in-tree plugin. </p><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#expanding-persistent-volumes">Expanding persistent volumes</a> </li></ul></div><section class="section" id="flexvolume-drivers_persistent-storage-flexvolume"><div class="titlepage"><div><div><h4 class="title">4.6.1. About FlexVolume drivers</h4></div></div></div><p> A FlexVolume driver is an executable file that resides in a well-defined directory on all nodes in the cluster. OpenShift Container Platform calls the FlexVolume driver whenever it needs to mount or unmount a volume represented by a <code class="literal">PersistentVolume</code> object with <code class="literal">flexVolume</code> as the source. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Attach and detach operations are not supported in OpenShift Container Platform for FlexVolume. </p></div></rh-alert></section><section class="section" id="flexvolume-driver-example_persistent-storage-flexvolume"><div class="titlepage"><div><div><h4 class="title">4.6.2. FlexVolume driver example</h4></div></div></div><p> The first command-line argument of the FlexVolume driver is always an operation name. Other parameters are specific to each operation. Most of the operations take a JavaScript Object Notation (JSON) string as a parameter. This parameter is a complete JSON string, and not the name of a file with the JSON data. </p><p> The FlexVolume driver contains: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> All <code class="literal">flexVolume.options</code>. </li><li class="listitem"> Some options from <code class="literal">flexVolume</code> prefixed by <code class="literal">kubernetes.io/</code>, such as <code class="literal">fsType</code> and <code class="literal">readwrite</code>. </li><li class="listitem"> The content of the referenced secret, if specified, prefixed by <code class="literal">kubernetes.io/secret/</code>. </li></ul></div><div class="formalpara"><p class="title"><strong>FlexVolume driver JSON input example</strong></p><p> </p><pre class="programlisting language-json">{ "fooServer": "192.168.0.1:1234", <span id="CO15-1"><!--Empty--></span><span class="callout">1</span> "fooVolumeName": "bar", "kubernetes.io/fsType": "ext4", <span id="CO15-2"><!--Empty--></span><span class="callout">2</span> "kubernetes.io/readwrite": "ro", <span id="CO15-3"><!--Empty--></span><span class="callout">3</span> "kubernetes.io/secret/&lt;key name&gt;": "&lt;key value&gt;", <span id="CO15-4"><!--Empty--></span><span class="callout">4</span> "kubernetes.io/secret/&lt;another key name&gt;": "&lt;another key value&gt;", }</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"> All options from <code class="literal">flexVolume.options</code>. </div></dd><dt><a href="#CO15-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The value of <code class="literal">flexVolume.fsType</code>. </div></dd><dt><a href="#CO15-3"><span class="callout">3</span></a> </dt><dd><div class="para"> <code class="literal">ro</code>/<code class="literal">rw</code> based on <code class="literal">flexVolume.readOnly</code>. </div></dd><dt><a href="#CO15-4"><span class="callout">4</span></a> </dt><dd><div class="para"> All keys and their values from the secret referenced by <code class="literal">flexVolume.secretRef</code>. </div></dd></dl></div><p> OpenShift Container Platform expects JSON data on standard output of the driver. When not specified, the output describes the result of the operation. </p><div class="formalpara"><p class="title"><strong>FlexVolume driver default output example</strong></p><p> </p><pre class="programlisting language-json">{ "status": "&lt;Success/Failure/Not supported&gt;", "message": "&lt;Reason for success/failure&gt;" }</pre> <p></p></div><p> Exit code of the driver should be <code class="literal">0</code> for success and <code class="literal">1</code> for error. </p><p> Operations should be idempotent, which means that the mounting of an already mounted volume should result in a successful operation. </p></section><section class="section" id="flexvolume-installing_persistent-storage-flexvolume"><div class="titlepage"><div><div><h4 class="title">4.6.3. Installing FlexVolume drivers</h4></div></div></div><p> FlexVolume drivers that are used to extend OpenShift Container Platform are executed only on the node. To implement FlexVolumes, a list of operations to call and the installation path are all that is required. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> FlexVolume drivers must implement these operations: </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">init</code></span></dt><dd><p class="simpara"> Initializes the driver. It is called during initialization of all nodes. </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> Arguments: none </li><li class="listitem"> Executed on: node </li><li class="listitem"> Expected output: default JSON </li></ul></div></dd><dt><span class="term"><code class="literal">mount</code></span></dt><dd><p class="simpara"> Mounts a volume to directory. This can include anything that is necessary to mount the volume, including finding the device and then mounting the device. </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> Arguments: <code class="literal">&lt;mount-dir&gt;</code> <code class="literal">&lt;json&gt;</code> </li><li class="listitem"> Executed on: node </li><li class="listitem"> Expected output: default JSON </li></ul></div></dd><dt><span class="term"><code class="literal">unmount</code></span></dt><dd><p class="simpara"> Unmounts a volume from a directory. This can include anything that is necessary to clean up the volume after unmounting. </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> Arguments: <code class="literal">&lt;mount-dir&gt;</code> </li><li class="listitem"> Executed on: node </li><li class="listitem"> Expected output: default JSON </li></ul></div></dd><dt><span class="term"><code class="literal">mountdevice</code></span></dt><dd> Mounts a volume’s device to a directory where individual pods can then bind mount. </dd></dl></div></li></ul></div><p> This call-out does not pass "secrets" specified in the FlexVolume spec. If your driver requires secrets, do not implement this call-out. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Arguments: <code class="literal">&lt;mount-dir&gt;</code> <code class="literal">&lt;json&gt;</code> </li><li class="listitem"> Executed on: node </li><li class="listitem"><p class="simpara"> Expected output: default JSON </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">unmountdevice</code></span></dt><dd> Unmounts a volume’s device from a directory. </dd></dl></div></li><li class="listitem"> Arguments: <code class="literal">&lt;mount-dir&gt;</code> </li><li class="listitem"> Executed on: node </li><li class="listitem"><p class="simpara"> Expected output: default JSON </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> All other operations should return JSON with <code class="literal">{"status": "Not supported"}</code> and exit code <code class="literal">1</code>. </li></ul></div></li></ul></div><div class="formalpara"><p class="title"><strong>Procedure</strong></p><p> To install the FlexVolume driver: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> Ensure that the executable file exists on all nodes in the cluster. </li><li class="listitem"> Place the executable file at the volume plugin path: <code class="literal">/etc/kubernetes/kubelet-plugins/volume/exec/&lt;vendor&gt;~&lt;driver&gt;/&lt;driver&gt;</code>. </li></ol></div><p> For example, to install the FlexVolume driver for the storage <code class="literal">foo</code>, place the executable file at: <code class="literal">/etc/kubernetes/kubelet-plugins/volume/exec/openshift.com~foo/foo</code>. </p></section><section class="section" id="flexvolume-driver-consuming_persistent-storage-flexvolume"><div class="titlepage"><div><div><h4 class="title">4.6.4. Consuming storage using FlexVolume drivers</h4></div></div></div><p> Each <code class="literal">PersistentVolume</code> object in OpenShift Container Platform represents one storage asset in the storage back-end, such as a volume. </p><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Use the <code class="literal">PersistentVolume</code> object to reference the installed storage. </li></ul></div><div class="formalpara"><p class="title"><strong>Persistent volume object definition using FlexVolume drivers example</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 <span id="CO16-1"><!--Empty--></span><span class="callout">1</span> spec: capacity: storage: 1Gi <span id="CO16-2"><!--Empty--></span><span class="callout">2</span> accessModes: - ReadWriteOnce flexVolume: driver: openshift.com/foo <span id="CO16-3"><!--Empty--></span><span class="callout">3</span> fsType: "ext4" <span id="CO16-4"><!--Empty--></span><span class="callout">4</span> secretRef: foo-secret <span id="CO16-5"><!--Empty--></span><span class="callout">5</span> readOnly: true <span id="CO16-6"><!--Empty--></span><span class="callout">6</span> options: <span id="CO16-7"><!--Empty--></span><span class="callout">7</span> fooServer: 192.168.0.1:1234 fooVolumeName: bar</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO16-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the volume. This is how it is identified through persistent volume claims or from pods. This name can be different from the name of the volume on back-end storage. </div></dd><dt><a href="#CO16-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The amount of storage allocated to this volume. </div></dd><dt><a href="#CO16-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The name of the driver. This field is mandatory. </div></dd><dt><a href="#CO16-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The file system that is present on the volume. This field is optional. </div></dd><dt><a href="#CO16-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The reference to a secret. Keys and values from this secret are provided to the FlexVolume driver on invocation. This field is optional. </div></dd><dt><a href="#CO16-6"><span class="callout">6</span></a> </dt><dd><div class="para"> The read-only flag. This field is optional. </div></dd><dt><a href="#CO16-7"><span class="callout">7</span></a> </dt><dd><div class="para"> The additional options for the FlexVolume driver. In addition to the flags specified by the user in the <code class="literal">options</code> field, the following flags are also passed to the executable: </div><pre class="literallayout">"fsType":"&lt;FS type&gt;", "readwrite":"&lt;rw&gt;", "secret/key1":"&lt;secret1&gt;" ... "secret/keyN":"&lt;secretN&gt;"</pre></dd></dl></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Secrets are passed only to mount or unmount call-outs. </p></div></rh-alert></section></section><section class="section" id="persistent-storage-using-gce"><div class="titlepage"><div><div><h3 class="title">4.7. Persistent storage using GCE Persistent Disk</h3></div></div></div><p> OpenShift Container Platform supports GCE Persistent Disk volumes (gcePD). You can provision your OpenShift Container Platform cluster with persistent storage using GCE. Some familiarity with Kubernetes and GCE is assumed. </p><p> The Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. </p><p> GCE Persistent Disk volumes can be provisioned dynamically. </p><p> Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision gcePD storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> High availability of storage in the infrastructure is left to the underlying storage provider. </p></div></rh-alert><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://cloud.google.com/compute/docs/disks/">GCE Persistent Disk</a> </li></ul></div><section class="section" id="storage-create-GCE-storage-class_persistent-storage-gce"><div class="titlepage"><div><div><h4 class="title">4.7.1. Creating the GCE storage class</h4></div></div></div><p> Storage classes are used to differentiate and delineate storage levels and usages. By defining a storage class, users can obtain dynamically provisioned persistent volumes. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Storage Classes</strong></span>. </li><li class="listitem"> In the storage class overview, click <span class="strong strong"><strong>Create Storage Class</strong></span>. </li><li class="listitem"><p class="simpara"> Define the desired options on the page that appears. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Enter a name to reference the storage class. </li><li class="listitem"> Enter an optional description. </li><li class="listitem"> Select the reclaim policy. </li><li class="listitem"> Select <code class="literal">kubernetes.io/gce-pd</code> from the drop-down list. </li><li class="listitem"> Enter additional parameters for the storage class as desired. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the storage class. </li></ol></div></section><section class="section" id="creating-the-persistent-volume-claim-3"><div class="titlepage"><div><div><h4 class="title">4.7.2. Creating the persistent volume claim</h4></div></div></div><div class="formalpara"><p class="title"><strong>Prerequisites</strong></p><p> Storage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform. </p></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> In the OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Persistent Volume Claims</strong></span>. </li><li class="listitem"> In the persistent volume claims overview, click <span class="strong strong"><strong>Create Persistent Volume Claim</strong></span>. </li><li class="listitem"><p class="simpara"> Define the desired options on the page that appears. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Select the storage class created previously from the drop-down menu. </li><li class="listitem"> Enter a unique name for the storage claim. </li><li class="listitem"> Select the access mode. This determines the read and write access for the created storage claim. </li><li class="listitem"> Define the size of the storage claim. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the persistent volume claim and generate a persistent volume. </li></ol></div></section><section class="section" id="volume-format-GCE_persistent-storage-gce"><div class="titlepage"><div><div><h4 class="title">4.7.3. Volume format</h4></div></div></div><p> Before OpenShift Container Platform mounts the volume and passes it to a container, it checks that it contains a file system as specified by the <code class="literal">fsType</code> parameter in the persistent volume definition. If the device is not formatted with the file system, all data from the device is erased and the device is automatically formatted with the given file system. </p><p> This allows using unformatted GCE volumes as persistent volumes, because OpenShift Container Platform formats them before the first use. </p></section></section><section class="section" id="persistent-storage-using-hostpath"><div class="titlepage"><div><div><h3 class="title">4.8. Persistent storage using hostPath</h3></div></div></div><p> A hostPath volume in an OpenShift Container Platform cluster mounts a file or directory from the host node’s filesystem into your pod. Most pods will not need a hostPath volume, but it does offer a quick option for testing should an application require it. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> The cluster administrator must configure pods to run as privileged. This grants access to pods in the same node. </p></div></rh-alert><section class="section" id="persistent-storage-hostpath-about_persistent-storage-hostpath"><div class="titlepage"><div><div><h4 class="title">4.8.1. Overview</h4></div></div></div><p> OpenShift Container Platform supports hostPath mounting for development and testing on a single-node cluster. </p><p> In a production cluster, you would not use hostPath. Instead, a cluster administrator would provision a network resource, such as a GCE Persistent Disk volume, an NFS share, or an Amazon EBS volume. Network resources support the use of storage classes to set up dynamic provisioning. </p><p> A hostPath volume must be provisioned statically. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Do not mount to the container root, <code class="literal">/</code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged. It is safe to mount the host by using <code class="literal">/host</code>. The following example shows the <code class="literal">/</code> directory from the host being mounted into the container at <code class="literal">/host</code>. </p><pre class="programlisting language-yaml">apiVersion: v1 kind: Pod metadata: name: test-host-mount spec: containers: - image: registry.access.redhat.com/ubi8/ubi name: test-container command: ['sh', '-c', 'sleep 3600'] volumeMounts: - mountPath: /host name: host-slash volumes: - name: host-slash hostPath: path: / type: ''</pre></div></rh-alert></section><section class="section" id="hostpath-static-provisioning_persistent-storage-hostpath"><div class="titlepage"><div><div><h4 class="title">4.8.2. Statically provisioning hostPath volumes</h4></div></div></div><p> A pod that uses a hostPath volume must be referenced by manual (static) provisioning. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Define the persistent volume (PV). Create a file, <code class="literal">pv.yaml</code>, with the <code class="literal">PersistentVolume</code> object definition: </p><pre class="programlisting language-yaml"> apiVersion: v1 kind: PersistentVolume metadata: name: task-pv-volume <span id="CO17-1"><!--Empty--></span><span class="callout">1</span> labels: type: local spec: storageClassName: manual <span id="CO17-2"><!--Empty--></span><span class="callout">2</span> capacity: storage: 5Gi accessModes: - ReadWriteOnce <span id="CO17-3"><!--Empty--></span><span class="callout">3</span> persistentVolumeReclaimPolicy: Retain hostPath: path: "/mnt/data" <span id="CO17-4"><!--Empty--></span><span class="callout">4</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO17-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the volume. This name is how it is identified by persistent volume claims or pods. </div></dd><dt><a href="#CO17-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Used to bind persistent volume claim requests to this persistent volume. </div></dd><dt><a href="#CO17-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The volume can be mounted as <code class="literal">read-write</code> by a single node. </div></dd><dt><a href="#CO17-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The configuration file specifies that the volume is at <code class="literal">/mnt/data</code> on the cluster’s node. Do not mount to the container root, <code class="literal">/</code>, or any path that is the same in the host and the container. This can corrupt your host system. It is safe to mount the host by using <code class="literal">/host</code>. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the PV from the file: </p><pre class="programlisting language-terminal">$ oc create -f pv.yaml</pre></li><li class="listitem"><p class="simpara"> Define the persistent volume claim (PVC). Create a file, <code class="literal">pvc.yaml</code>, with the <code class="literal">PersistentVolumeClaim</code> object definition: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: task-pvc-volume spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: manual</pre></li><li class="listitem"><p class="simpara"> Create the PVC from the file: </p><pre class="programlisting language-terminal">$ oc create -f pvc.yaml</pre></li></ol></div></section><section class="section" id="persistent-storage-hostpath-pod_persistent-storage-hostpath"><div class="titlepage"><div><div><h4 class="title">4.8.3. Mounting the hostPath share in a privileged pod</h4></div></div></div><p> After the persistent volume claim has been created, it can be used inside by an application. The following example demonstrates mounting this share inside of a pod. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> A persistent volume claim exists that is mapped to the underlying hostPath share. </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 privileged pod that mounts the existing persistent volume claim: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: Pod metadata: name: pod-name <span id="CO18-1"><!--Empty--></span><span class="callout">1</span> spec: containers: ... securityContext: privileged: true <span id="CO18-2"><!--Empty--></span><span class="callout">2</span> volumeMounts: - mountPath: /data <span id="CO18-3"><!--Empty--></span><span class="callout">3</span> name: hostpath-privileged ... securityContext: {} volumes: - name: hostpath-privileged persistentVolumeClaim: claimName: task-pvc-volume <span id="CO18-4"><!--Empty--></span><span class="callout">4</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO18-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the pod. </div></dd><dt><a href="#CO18-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The pod must run as privileged to access the node’s storage. </div></dd><dt><a href="#CO18-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The path to mount the host path share inside the privileged pod. Do not mount to the container root, <code class="literal">/</code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged, such as the host <code class="literal">/dev/pts</code> files. It is safe to mount the host by using <code class="literal">/host</code>. </div></dd><dt><a href="#CO18-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The name of the <code class="literal">PersistentVolumeClaim</code> object that has been previously created. </div></dd></dl></div></li></ul></div></section></section><section class="section" id="persistent-storage-using-iscsi"><div class="titlepage"><div><div><h3 class="title">4.9. Persistent storage using iSCSI</h3></div></div></div><p> You can provision your OpenShift Container Platform cluster with persistent storage using <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/managing_storage_devices/index#getting-started-with-iscsi_managing-storage-devices">iSCSI</a>. Some familiarity with Kubernetes and iSCSI is assumed. </p><p> The Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> High-availability of storage in the infrastructure is left to the underlying storage provider. </p></div></rh-alert><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> When you use iSCSI on Amazon Web Services, you must update the default security policy to include TCP traffic between nodes on the iSCSI ports. By default, they are ports <code class="literal">860</code> and <code class="literal">3260</code>. </p></div></rh-alert><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Users must ensure that the iSCSI initiator is already configured on all OpenShift Container Platform nodes by installing the <code class="literal">iscsi-initiator-utils</code> package and configuring their initiator name in <code class="literal">/etc/iscsi/initiatorname.iscsi</code>. The <code class="literal">iscsi-initiator-utils</code> package is already installed on deployments that use Red Hat Enterprise Linux CoreOS (RHCOS). </p><p> For more information, see <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/managing_storage_devices/index#configuring-an-iscsi-initiator_managing-storage-devices">Managing Storage Devices</a>. </p></div></rh-alert><section class="section" id="persistent-storage-iscsi-provisioning_persistent-storage-iscsi"><div class="titlepage"><div><div><h4 class="title">4.9.1. Provisioning</h4></div></div></div><p> Verify that the storage exists in the underlying infrastructure before mounting it as a volume in OpenShift Container Platform. All that is required for the iSCSI is the iSCSI target portal, a valid iSCSI Qualified Name (IQN), a valid LUN number, the filesystem type, and the <code class="literal">PersistentVolume</code> API. </p><div class="formalpara"><p class="title"><strong><code class="literal">PersistentVolume</code> object definition</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: iscsi-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce iscsi: targetPortal: 10.16.154.81:3260 iqn: iqn.2014-12.example.server:storage.target00 lun: 0 fsType: 'ext4'</pre> <p></p></div></section><section class="section" id="enforcing-disk-quotas-iscsi_persistent-storage-iscsi"><div class="titlepage"><div><div><h4 class="title">4.9.2. Enforcing disk quotas</h4></div></div></div><p> Use LUN partitions to enforce disk quotas and size constraints. Each LUN is one persistent volume. Kubernetes enforces unique names for persistent volumes. </p><p> Enforcing quotas in this way allows the end user to request persistent storage by a specific amount (for example, <code class="literal">10Gi</code>) and be matched with a corresponding volume of equal or greater capacity. </p></section><section class="section" id="volume-security-iscsi_persistent-storage-iscsi"><div class="titlepage"><div><div><h4 class="title">4.9.3. iSCSI volume security</h4></div></div></div><p> Users request storage with a <code class="literal">PersistentVolumeClaim</code> object. This claim only lives in the user’s namespace and can only be referenced by a pod within that same namespace. Any attempt to access a persistent volume claim across a namespace causes the pod to fail. </p><p> Each iSCSI LUN must be accessible by all nodes in the cluster. </p><section class="section" id="challenge-handshake-authentication-protocol-chap-configuration"><div class="titlepage"><div><div><h5 class="title">4.9.3.1. Challenge Handshake Authentication Protocol (CHAP) configuration</h5></div></div></div><p> Optionally, OpenShift Container Platform can use CHAP to authenticate itself to iSCSI targets: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: iscsi-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce iscsi: targetPortal: 10.0.0.1:3260 iqn: iqn.2016-04.test.com:storage.target00 lun: 0 fsType: ext4 chapAuthDiscovery: true <span id="CO19-1"><!--Empty--></span><span class="callout">1</span> chapAuthSession: true <span id="CO19-2"><!--Empty--></span><span class="callout">2</span> secretRef: name: chap-secret <span id="CO19-3"><!--Empty--></span><span class="callout">3</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO19-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Enable CHAP authentication of iSCSI discovery. </div></dd><dt><a href="#CO19-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Enable CHAP authentication of iSCSI session. </div></dd><dt><a href="#CO19-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Specify name of Secrets object with user name + password. This <code class="literal">Secret</code> object must be available in all namespaces that can use the referenced volume. </div></dd></dl></div></section></section><section class="section" id="iscsi-multipath_persistent-storage-iscsi"><div class="titlepage"><div><div><h4 class="title">4.9.4. iSCSI multipathing</h4></div></div></div><p> For iSCSI-based storage, you can configure multiple paths by using the same IQN for more than one target portal IP address. Multipathing ensures access to the persistent volume when one or more of the components in a path fail. </p><p> To specify multi-paths in the pod specification, use the <code class="literal">portals</code> field. For example: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: iscsi-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce iscsi: targetPortal: 10.0.0.1:3260 portals: ['10.0.2.16:3260', '10.0.2.17:3260', '10.0.2.18:3260'] <span id="CO20-1"><!--Empty--></span><span class="callout">1</span> iqn: iqn.2016-04.test.com:storage.target00 lun: 0 fsType: ext4 readOnly: false</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO20-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Add additional target portals using the <code class="literal">portals</code> field. </div></dd></dl></div></section><section class="section" id="iscsi-custom-iqn_persistent-storage-iscsi"><div class="titlepage"><div><div><h4 class="title">4.9.5. iSCSI custom initiator IQN</h4></div></div></div><p> Configure the custom initiator iSCSI Qualified Name (IQN) if the iSCSI targets are restricted to certain IQNs, but the nodes that the iSCSI PVs are attached to are not guaranteed to have these IQNs. </p><p> To specify a custom initiator IQN, use <code class="literal">initiatorName</code> field. </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: iscsi-pv spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce iscsi: targetPortal: 10.0.0.1:3260 portals: ['10.0.2.16:3260', '10.0.2.17:3260', '10.0.2.18:3260'] iqn: iqn.2016-04.test.com:storage.target00 lun: 0 initiatorName: iqn.2016-04.test.com:custom.iqn <span id="CO21-1"><!--Empty--></span><span class="callout">1</span> fsType: ext4 readOnly: false</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO21-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Specify the name of the initiator. </div></dd></dl></div></section></section><section class="section" id="persistent-storage-using-local-volume"><div class="titlepage"><div><div><h3 class="title">4.10. Persistent storage using local volumes</h3></div></div></div><p> OpenShift Container Platform can be provisioned with persistent storage by using local volumes. Local persistent volumes allow you to access local storage devices, such as a disk or partition, by using the standard persistent volume claim interface. </p><p> Local volumes can be used without manually scheduling pods to nodes because the system is aware of the volume node constraints. However, local volumes are still subject to the availability of the underlying node and are not suitable for all applications. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Local volumes can only be used as a statically created persistent volume. </p></div></rh-alert><section class="section" id="local-storage-install_persistent-storage-local"><div class="titlepage"><div><div><h4 class="title">4.10.1. Installing the Local Storage Operator</h4></div></div></div><p> The Local Storage Operator is not installed in OpenShift Container Platform by default. Use the following procedure to install and configure this Operator to enable local volumes in your cluster. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Access to the OpenShift Container Platform web console or command-line interface (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 the <code class="literal">openshift-local-storage</code> project: </p><pre class="programlisting language-terminal">$ oc adm new-project openshift-local-storage</pre></li><li class="listitem"><p class="simpara"> Optional: Allow local storage creation on infrastructure nodes. </p><p class="simpara"> You might want to use the Local Storage Operator to create volumes on infrastructure nodes in support of components such as logging and monitoring. </p><p class="simpara"> You must adjust the default node selector so that the Local Storage Operator includes the infrastructure nodes, and not just worker nodes. </p><p class="simpara"> To block the Local Storage Operator from inheriting the cluster-wide default selector, enter the following command: </p><pre class="programlisting language-terminal">$ oc annotate project openshift-local-storage openshift.io/node-selector=''</pre></li></ol></div><div class="formalpara"><p class="title"><strong>From the UI</strong></p><p> To install the Local Storage Operator from the web console, follow these steps: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> Log in to the OpenShift Container Platform web console. </li><li class="listitem"> Navigate to <span class="strong strong"><strong>Operators</strong></span> → <span class="strong strong"><strong>OperatorHub</strong></span>. </li><li class="listitem"> Type <span class="strong strong"><strong>Local Storage</strong></span> into the filter box to locate the Local Storage Operator. </li><li class="listitem"> Click <span class="strong strong"><strong>Install</strong></span>. </li><li class="listitem"> On the <span class="strong strong"><strong>Install Operator</strong></span> page, select <span class="strong strong"><strong>A specific namespace on the cluster</strong></span>. Select <span class="strong strong"><strong>openshift-local-storage</strong></span> from the drop-down menu. </li><li class="listitem"> Adjust the values for <span class="strong strong"><strong>Update Channel</strong></span> and <span class="strong strong"><strong>Approval Strategy</strong></span> to the values that you want. </li><li class="listitem"> Click <span class="strong strong"><strong>Install</strong></span>. </li></ol></div><p> Once finished, the Local Storage Operator will be listed in the <span class="strong strong"><strong>Installed Operators</strong></span> section of the web console. </p><div class="orderedlist"><p class="title"><strong>From the CLI</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Install the Local Storage Operator from the CLI. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Run the following command to get the OpenShift Container Platform major and minor version. It is required for the <code class="literal">channel</code> value in the next step. </p><pre class="programlisting language-terminal">$ OC_VERSION=$(oc version -o yaml | grep openshiftVersion | \ grep -o '[0-9]*[.][0-9]*' | head -1)</pre></li><li class="listitem"><p class="simpara"> Create an object YAML file to define an Operator group and subscription for the Local Storage Operator, such as <code class="literal">openshift-local-storage.yaml</code>: </p><div class="formalpara"><p class="title"><strong>Example openshift-local-storage.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: local-operator-group namespace: openshift-local-storage spec: targetNamespaces: - openshift-local-storage --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: local-storage-operator namespace: openshift-local-storage spec: channel: "${OC_VERSION}" installPlanApproval: Automatic <span id="CO22-1"><!--Empty--></span><span class="callout">1</span> name: local-storage-operator source: redhat-operators sourceNamespace: openshift-marketplace</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO22-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The user approval policy for an install plan. </div></dd></dl></div></li></ol></div></li><li class="listitem"><p class="simpara"> Create the Local Storage Operator object by entering the following command: </p><pre class="programlisting language-terminal">$ oc apply -f openshift-local-storage.yaml</pre><p class="simpara"> At this point, the Operator Lifecycle Manager (OLM) is now aware of the Local Storage Operator. A ClusterServiceVersion (CSV) for the Operator should appear in the target namespace, and APIs provided by the Operator should be available for creation. </p></li><li class="listitem"><p class="simpara"> Verify local storage installation by checking that all pods and the Local Storage Operator have been created: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Check that all the required pods have been created: </p><pre class="programlisting language-terminal">$ oc -n openshift-local-storage 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 local-storage-operator-746bf599c9-vlt5t 1/1 Running 0 19m</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Check the ClusterServiceVersion (CSV) YAML manifest to see that the Local Storage Operator is available in the <code class="literal">openshift-local-storage</code> project: </p><pre class="programlisting language-terminal">$ oc get csvs -n openshift-local-storage</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME DISPLAY VERSION REPLACES PHASE local-storage-operator.4.2.26-202003230335 Local Storage 4.2.26-202003230335 Succeeded</pre> <p></p></div></li></ol></div></li></ol></div><p> After all checks have passed, the Local Storage Operator is installed successfully. </p></section><section class="section" id="local-volume-cr_persistent-storage-local"><div class="titlepage"><div><div><h4 class="title">4.10.2. Provisioning local volumes by using the Local Storage Operator</h4></div></div></div><p> Local volumes cannot be created by dynamic provisioning. Instead, persistent volumes can be created by the Local Storage Operator. The local volume provisioner looks for any file system or block volume devices at the paths specified in the defined resource. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The Local Storage Operator is installed. </li><li class="listitem"><p class="simpara"> You have a local disk that meets the following conditions: </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> It is attached to a node. </li><li class="listitem"> It is not mounted. </li><li class="listitem"> It does not contain partitions. </li></ul></div></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 the local volume resource. This resource must define the nodes and paths to the local volumes. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Do not use different storage class names for the same device. Doing so will create multiple persistent volumes (PVs). </p></div></rh-alert><div class="formalpara"><p class="title"><strong>Example: Filesystem</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: "local.storage.openshift.io/v1" kind: "LocalVolume" metadata: name: "local-disks" namespace: "openshift-local-storage" <span id="CO23-1"><!--Empty--></span><span class="callout">1</span> spec: nodeSelector: <span id="CO23-2"><!--Empty--></span><span class="callout">2</span> nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - ip-10-0-140-183 - ip-10-0-158-139 - ip-10-0-164-33 storageClassDevices: - storageClassName: "local-sc" <span id="CO23-3"><!--Empty--></span><span class="callout">3</span> volumeMode: Filesystem <span id="CO23-4"><!--Empty--></span><span class="callout">4</span> fsType: xfs <span id="CO23-5"><!--Empty--></span><span class="callout">5</span> devicePaths: <span id="CO23-6"><!--Empty--></span><span class="callout">6</span> - /path/to/device <span id="CO23-7"><!--Empty--></span><span class="callout">7</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO23-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The namespace where the Local Storage Operator is installed. </div></dd><dt><a href="#CO23-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Optional: A node selector containing a list of nodes where the local storage volumes are attached. This example uses the node hostnames, obtained from <code class="literal">oc get node</code>. If a value is not defined, then the Local Storage Operator will attempt to find matching disks on all available nodes. </div></dd><dt><a href="#CO23-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The name of the storage class to use when creating persistent volume objects. The Local Storage Operator automatically creates the storage class if it does not exist. Be sure to use a storage class that uniquely identifies this set of local volumes. </div></dd><dt><a href="#CO23-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The volume mode, either <code class="literal">Filesystem</code> or <code class="literal">Block</code>, that defines the type of local volumes. </div></dd><dt><a href="#CO23-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The file system that is created when the local volume is mounted for the first time. </div></dd><dt><a href="#CO23-6"><span class="callout">6</span></a> </dt><dd><div class="para"> The path containing a list of local storage devices to choose from. </div></dd><dt><a href="#CO23-7"><span class="callout">7</span></a> </dt><dd><div class="para"> Replace this value with your actual local disks filepath to the <code class="literal">LocalVolume</code> resource <code class="literal">by-id</code>, such as <code class="literal">/dev/disk/by-id/wwn</code>. PVs are created for these local disks when the provisioner is deployed successfully. </div></dd></dl></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> A raw block volume (<code class="literal">volumeMode: block</code>) is not formatted with a file system. You should use this mode only if any application running on the pod can use raw block devices. </p></div></rh-alert><div class="formalpara"><p class="title"><strong>Example: Block</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: "local.storage.openshift.io/v1" kind: "LocalVolume" metadata: name: "local-disks" namespace: "openshift-local-storage" <span id="CO24-1"><!--Empty--></span><span class="callout">1</span> spec: nodeSelector: <span id="CO24-2"><!--Empty--></span><span class="callout">2</span> nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - ip-10-0-136-143 - ip-10-0-140-255 - ip-10-0-144-180 storageClassDevices: - storageClassName: "localblock-sc" <span id="CO24-3"><!--Empty--></span><span class="callout">3</span> volumeMode: Block <span id="CO24-4"><!--Empty--></span><span class="callout">4</span> devicePaths: <span id="CO24-5"><!--Empty--></span><span class="callout">5</span> - /path/to/device <span id="CO24-6"><!--Empty--></span><span class="callout">6</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO24-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The namespace where the Local Storage Operator is installed. </div></dd><dt><a href="#CO24-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Optional: A node selector containing a list of nodes where the local storage volumes are attached. This example uses the node hostnames, obtained from <code class="literal">oc get node</code>. If a value is not defined, then the Local Storage Operator will attempt to find matching disks on all available nodes. </div></dd><dt><a href="#CO24-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The name of the storage class to use when creating persistent volume objects. </div></dd><dt><a href="#CO24-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The volume mode, either <code class="literal">Filesystem</code> or <code class="literal">Block</code>, that defines the type of local volumes. </div></dd><dt><a href="#CO24-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The path containing a list of local storage devices to choose from. </div></dd><dt><a href="#CO24-6"><span class="callout">6</span></a> </dt><dd><div class="para"> Replace this value with your actual local disks filepath to the <code class="literal">LocalVolume</code> resource <code class="literal">by-id</code>, such as <code class="literal">dev/disk/by-id/wwn</code>. PVs are created for these local disks when the provisioner is deployed successfully. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the local volume resource in your OpenShift Container Platform cluster. Specify the file you just created: </p><pre class="programlisting language-terminal">$ oc create -f &lt;local-volume&gt;.yaml</pre></li><li class="listitem"><p class="simpara"> Verify that the provisioner was created and that the corresponding daemon sets were created: </p><pre class="programlisting language-terminal">$ oc get all -n openshift-local-storage</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME READY STATUS RESTARTS AGE pod/diskmaker-manager-9wzms 1/1 Running 0 5m43s pod/diskmaker-manager-jgvjp 1/1 Running 0 5m43s pod/diskmaker-manager-tbdsj 1/1 Running 0 5m43s pod/local-storage-operator-7db4bd9f79-t6k87 1/1 Running 0 14m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/local-storage-operator-metrics ClusterIP 172.30.135.36 &lt;none&gt; 8383/TCP,8686/TCP 14m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/diskmaker-manager 3 3 3 3 3 &lt;none&gt; 5m43s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/local-storage-operator 1/1 1 1 14m NAME DESIRED CURRENT READY AGE replicaset.apps/local-storage-operator-7db4bd9f79 1 1 1 14m</pre> <p></p></div><p class="simpara"> Note the desired and current number of daemon set processes. A desired count of <code class="literal">0</code> indicates that the label selectors were invalid. </p></li><li class="listitem"><p class="simpara"> Verify that the persistent volumes were created: </p><pre class="programlisting language-terminal">$ oc get pv</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE local-pv-1cec77cf 100Gi RWO Delete Available local-sc 88m local-pv-2ef7cd2a 100Gi RWO Delete Available local-sc 82m local-pv-3fa1c73 100Gi RWO Delete Available local-sc 48m</pre> <p></p></div></li></ol></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Editing the <code class="literal">LocalVolume</code> object does not change the <code class="literal">fsType</code> or <code class="literal">volumeMode</code> of existing persistent volumes because doing so might result in a destructive operation. </p></div></rh-alert></section><section class="section" id="local-create-cr-manual_persistent-storage-local"><div class="titlepage"><div><div><h4 class="title">4.10.3. Provisioning local volumes without the Local Storage Operator</h4></div></div></div><p> Local volumes cannot be created by dynamic provisioning. Instead, persistent volumes can be created by defining the persistent volume (PV) in an object definition. The local volume provisioner looks for any file system or block volume devices at the paths specified in the defined resource. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Manual provisioning of PVs includes the risk of potential data leaks across PV reuse when PVCs are deleted. The Local Storage Operator is recommended for automating the life cycle of devices when provisioning local PVs. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Local disks are attached to the OpenShift Container Platform nodes. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Define the PV. Create a file, such as <code class="literal">example-pv-filesystem.yaml</code> or <code class="literal">example-pv-block.yaml</code>, with the <code class="literal">PersistentVolume</code> object definition. This resource must define the nodes and paths to the local volumes. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Do not use different storage class names for the same device. Doing so will create multiple PVs. </p></div></rh-alert><div class="formalpara"><p class="title"><strong>example-pv-filesystem.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: example-pv-filesystem spec: capacity: storage: 100Gi volumeMode: Filesystem <span id="CO25-1"><!--Empty--></span><span class="callout">1</span> accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage <span id="CO25-2"><!--Empty--></span><span class="callout">2</span> local: path: /dev/xvdf <span id="CO25-3"><!--Empty--></span><span class="callout">3</span> nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - example-node</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO25-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The volume mode, either <code class="literal">Filesystem</code> or <code class="literal">Block</code>, that defines the type of PVs. </div></dd><dt><a href="#CO25-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The name of the storage class to use when creating PV resources. Use a storage class that uniquely identifies this set of PVs. </div></dd><dt><a href="#CO25-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The path containing a list of local storage devices to choose from, or a directory. You can only specify a directory with <code class="literal">Filesystem</code> <code class="literal">volumeMode</code>. </div></dd></dl></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> A raw block volume (<code class="literal">volumeMode: block</code>) is not formatted with a file system. Use this mode only if any application running on the pod can use raw block devices. </p></div></rh-alert><div class="formalpara"><p class="title"><strong>example-pv-block.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: example-pv-block spec: capacity: storage: 100Gi volumeMode: Block <span id="CO26-1"><!--Empty--></span><span class="callout">1</span> accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage <span id="CO26-2"><!--Empty--></span><span class="callout">2</span> local: path: /dev/xvdf <span id="CO26-3"><!--Empty--></span><span class="callout">3</span> nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - example-node</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO26-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The volume mode, either <code class="literal">Filesystem</code> or <code class="literal">Block</code>, that defines the type of PVs. </div></dd><dt><a href="#CO26-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The name of the storage class to use when creating PV resources. Be sure to use a storage class that uniquely identifies this set of PVs. </div></dd><dt><a href="#CO26-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The path containing a list of local storage devices to choose from. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the PV resource in your OpenShift Container Platform cluster. Specify the file you just created: </p><pre class="programlisting language-terminal">$ oc create -f &lt;example-pv&gt;.yaml</pre></li><li class="listitem"><p class="simpara"> Verify that the local PV was created: </p><pre class="programlisting language-terminal">$ oc get pv</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE example-pv-filesystem 100Gi RWO Delete Available local-storage 3m47s example-pv1 1Gi RWO Delete Bound local-storage/pvc1 local-storage 12h example-pv2 1Gi RWO Delete Bound local-storage/pvc2 local-storage 12h example-pv3 1Gi RWO Delete Bound local-storage/pvc3 local-storage 12h</pre> <p></p></div></li></ol></div></section><section class="section" id="create-local-pvc_persistent-storage-local"><div class="titlepage"><div><div><h4 class="title">4.10.4. Creating the local volume persistent volume claim</h4></div></div></div><p> Local volumes must be statically created as a persistent volume claim (PVC) to be accessed by the pod. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Persistent volumes have been created using the local volume provisioner. </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 the PVC using the corresponding storage class: </p><pre class="programlisting language-yaml">kind: PersistentVolumeClaim apiVersion: v1 metadata: name: local-pvc-name <span id="CO27-1"><!--Empty--></span><span class="callout">1</span> spec: accessModes: - ReadWriteOnce volumeMode: Filesystem <span id="CO27-2"><!--Empty--></span><span class="callout">2</span> resources: requests: storage: 100Gi <span id="CO27-3"><!--Empty--></span><span class="callout">3</span> storageClassName: local-sc <span id="CO27-4"><!--Empty--></span><span class="callout">4</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO27-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Name of the PVC. </div></dd><dt><a href="#CO27-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The type of the PVC. Defaults to <code class="literal">Filesystem</code>. </div></dd><dt><a href="#CO27-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The amount of storage available to the PVC. </div></dd><dt><a href="#CO27-4"><span class="callout">4</span></a> </dt><dd><div class="para"> Name of the storage class required by the claim. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the PVC in the OpenShift Container Platform cluster, specifying the file you just created: </p><pre class="programlisting language-terminal">$ oc create -f &lt;local-pvc&gt;.yaml</pre></li></ol></div></section><section class="section" id="local-pod_persistent-storage-local"><div class="titlepage"><div><div><h4 class="title">4.10.5. Attach the local claim</h4></div></div></div><p> After a local volume has been mapped to a persistent volume claim it can be specified inside of a resource. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> A persistent volume claim exists in the same namespace. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Include the defined claim in the resource spec. The following example declares the persistent volume claim inside a pod: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: Pod spec: ... containers: volumeMounts: - name: local-disks <span id="CO28-1"><!--Empty--></span><span class="callout">1</span> mountPath: /data <span id="CO28-2"><!--Empty--></span><span class="callout">2</span> volumes: - name: localpvc persistentVolumeClaim: claimName: local-pvc-name <span id="CO28-3"><!--Empty--></span><span class="callout">3</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO28-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the volume to mount. </div></dd><dt><a href="#CO28-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The path inside the pod where the volume is mounted. Do not mount to the container root, <code class="literal">/</code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged, such as the host <code class="literal">/dev/pts</code> files. It is safe to mount the host by using <code class="literal">/host</code>. </div></dd><dt><a href="#CO28-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The name of the existing persistent volume claim to use. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the resource in the OpenShift Container Platform cluster, specifying the file you just created: </p><pre class="programlisting language-terminal">$ oc create -f &lt;local-pod&gt;.yaml</pre></li></ol></div></section><section class="section" id="local-storage-discovery_persistent-storage-local"><div class="titlepage"><div><div><h4 class="title">4.10.6. Automating discovery and provisioning for local storage devices</h4></div></div></div><p> The Local Storage Operator automates local storage discovery and provisioning. With this feature, you can simplify installation when dynamic provisioning is not available during deployment, such as with bare metal, VMware, or AWS store instances with attached devices. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Automatic discovery and provisioning 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><p> Use the following procedure to automatically discover local devices, and to automatically provision local volumes for selected devices. </p><rh-alert class="admonition warning" state="danger"><div class="admonition_header" slot="header">Warning</div><div><p> Use the <code class="literal">LocalVolumeSet</code> object with caution. When you automatically provision persistent volumes (PVs) from local disks, the local PVs might claim all devices that match. If you are using a <code class="literal">LocalVolumeSet</code> object, make sure the Local Storage Operator is the only entity managing local devices on the node. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You have cluster administrator permissions. </li><li class="listitem"> You have installed the Local Storage Operator. </li><li class="listitem"> You have attached local disks to OpenShift Container Platform nodes. </li><li class="listitem"> You have access to the OpenShift Container Platform web console and the <code class="literal">oc</code> command-line interface (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"> To enable automatic discovery of local devices from the web console: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> In the <span class="emphasis"><em>Administrator</em></span> perspective, navigate to <span class="strong strong"><strong>Operators</strong></span> → <span class="strong strong"><strong>Installed Operators</strong></span> and click on the <span class="strong strong"><strong>Local Volume Discovery</strong></span> tab. </li><li class="listitem"> Click <span class="strong strong"><strong>Create Local Volume Discovery</strong></span>. </li><li class="listitem"><p class="simpara"> Select either <span class="strong strong"><strong>All nodes</strong></span> or <span class="strong strong"><strong>Select nodes</strong></span>, depending on whether you want to discover available disks on all or specific nodes. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Only worker nodes are available, regardless of whether you filter using <span class="strong strong"><strong>All nodes</strong></span> or <span class="strong strong"><strong>Select nodes</strong></span>. </p></div></rh-alert></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span>. </li></ol></div></li></ol></div><p> A local volume discovery instance named <code class="literal">auto-discover-devices</code> is displayed. </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> To display a continuous list of available devices on a node: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Log in to the OpenShift Container Platform web console. </li><li class="listitem"> Navigate to <span class="strong strong"><strong>Compute</strong></span> → <span class="strong strong"><strong>Nodes</strong></span>. </li><li class="listitem"> Click the node name that you want to open. The "Node Details" page is displayed. </li><li class="listitem"><p class="simpara"> Select the <span class="strong strong"><strong>Disks</strong></span> tab to display the list of the selected devices. </p><p class="simpara"> The device list updates continuously as local disks are added or removed. You can filter the devices by name, status, type, model, capacity, and mode. </p></li></ol></div></li><li class="listitem"><p class="simpara"> To automatically provision local volumes for the discovered devices from the web console: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Navigate to <span class="strong strong"><strong>Operators</strong></span> → <span class="strong strong"><strong>Installed Operators</strong></span> and select <span class="strong strong"><strong>Local Storage</strong></span> from the list of Operators. </li><li class="listitem"> Select <span class="strong strong"><strong>Local Volume Set</strong></span> → <span class="strong strong"><strong>Create Local Volume Set</strong></span>. </li><li class="listitem"> Enter a volume set name and a storage class name. </li><li class="listitem"><p class="simpara"> Choose <span class="strong strong"><strong>All nodes</strong></span> or <span class="strong strong"><strong>Select nodes</strong></span> to apply filters accordingly. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Only worker nodes are available, regardless of whether you filter using <span class="strong strong"><strong>All nodes</strong></span> or <span class="strong strong"><strong>Select nodes</strong></span>. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Select the disk type, mode, size, and limit you want to apply to the local volume set, and click <span class="strong strong"><strong>Create</strong></span>. </p><p class="simpara"> A message displays after several minutes, indicating that the "Operator reconciled successfully." </p></li></ol></div></li></ol></div><div class="orderedlist"><ol class="orderedlist" start="3" type="1"><li class="listitem"><p class="simpara"> Alternatively, to provision local volumes for the discovered devices from the CLI: </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create an object YAML file to define the local volume set, such as <code class="literal">local-volume-set.yaml</code>, as shown in the following example: </p><pre class="programlisting language-yaml">apiVersion: local.storage.openshift.io/v1alpha1 kind: LocalVolumeSet metadata: name: example-autodetect spec: nodeSelector: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - worker-0 - worker-1 storageClassName: example-storageclass <span id="CO29-1"><!--Empty--></span><span class="callout">1</span> volumeMode: Filesystem fsType: ext4 maxDeviceCount: 10 deviceInclusionSpec: deviceTypes: <span id="CO29-2"><!--Empty--></span><span class="callout">2</span> - disk - part deviceMechanicalProperties: - NonRotational minSize: 10G maxSize: 100G models: - SAMSUNG - Crucial_CT525MX3 vendors: - ATA - ST2000LM</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO29-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Determines the storage class that is created for persistent volumes that are provisioned from discovered devices. The Local Storage Operator automatically creates the storage class if it does not exist. Be sure to use a storage class that uniquely identifies this set of local volumes. </div></dd><dt><a href="#CO29-2"><span class="callout">2</span></a> </dt><dd><div class="para"> When using the local volume set feature, the Local Storage Operator does not support the use of logical volume management (LVM) devices. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the local volume set object: </p><pre class="programlisting language-terminal">$ oc apply -f local-volume-set.yaml</pre></li><li class="listitem"><p class="simpara"> Verify that the local persistent volumes were dynamically provisioned based on the storage class: </p><pre class="programlisting language-terminal">$ oc get pv</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE local-pv-1cec77cf 100Gi RWO Delete Available example-storageclass 88m local-pv-2ef7cd2a 100Gi RWO Delete Available example-storageclass 82m local-pv-3fa1c73 100Gi RWO Delete Available example-storageclass 48m</pre> <p></p></div></li></ol></div></li></ol></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Results are deleted after they are removed from the node. Symlinks must be manually removed. </p></div></rh-alert></section><section class="section" id="local-tolerations_persistent-storage-local"><div class="titlepage"><div><div><h4 class="title">4.10.7. Using tolerations with Local Storage Operator pods</h4></div></div></div><p> Taints can be applied to nodes to prevent them from running general workloads. To allow the Local Storage Operator to use tainted nodes, you must add tolerations to the <code class="literal">Pod</code> or <code class="literal">DaemonSet</code> definition. This allows the created resources to run on these tainted nodes. </p><p> You apply tolerations to the Local Storage Operator pod through the <code class="literal">LocalVolume</code> resource and apply taints to a node through the node specification. A taint on a node instructs the node to repel all pods that do not tolerate the taint. Using a specific taint that is not on other pods ensures that the Local Storage Operator pod can also run on that node. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Taints and tolerations consist of a key, value, and effect. As an argument, it is expressed as <code class="literal">key=value:effect</code>. An operator allows you to leave one of these parameters empty. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The Local Storage Operator is installed. </li><li class="listitem"> Local disks are attached to OpenShift Container Platform nodes with a taint. </li><li class="listitem"> Tainted nodes are expected to provision local storage. </li></ul></div><div class="formalpara"><p class="title"><strong>Procedure</strong></p><p> To configure local volumes for scheduling on tainted nodes: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Modify the YAML file that defines the <code class="literal">Pod</code> and add the <code class="literal">LocalVolume</code> spec, as shown in the following example: </p><pre class="programlisting language-yaml"> apiVersion: "local.storage.openshift.io/v1" kind: "LocalVolume" metadata: name: "local-disks" namespace: "openshift-local-storage" spec: tolerations: - key: localstorage <span id="CO30-1"><!--Empty--></span><span class="callout">1</span> operator: Equal <span id="CO30-2"><!--Empty--></span><span class="callout">2</span> value: "localstorage" <span id="CO30-3"><!--Empty--></span><span class="callout">3</span> storageClassDevices: - storageClassName: "localblock-sc" volumeMode: Block <span id="CO30-4"><!--Empty--></span><span class="callout">4</span> devicePaths: <span id="CO30-5"><!--Empty--></span><span class="callout">5</span> - /dev/xvdg</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO30-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Specify the key that you added to the node. </div></dd><dt><a href="#CO30-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Specify the <code class="literal">Equal</code> operator to require the <code class="literal">key</code>/<code class="literal">value</code> parameters to match. If operator is <code class="literal">Exists</code>, the system checks that the key exists and ignores the value. If operator is <code class="literal">Equal</code>, then the key and value must match. </div></dd><dt><a href="#CO30-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Specify the value <code class="literal">local</code> of the tainted node. </div></dd><dt><a href="#CO30-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The volume mode, either <code class="literal">Filesystem</code> or <code class="literal">Block</code>, defining the type of the local volumes. </div></dd><dt><a href="#CO30-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The path containing a list of local storage devices to choose from. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Optional: To create local persistent volumes on only tainted nodes, modify the YAML file and add the <code class="literal">LocalVolume</code> spec, as shown in the following example: </p><pre class="programlisting language-yaml">spec: tolerations: - key: node-role.kubernetes.io/master operator: Exists</pre></li></ol></div><p> The defined tolerations will be passed to the resulting daemon sets, allowing the diskmaker and provisioner pods to be created for nodes that contain the specified taints. </p></section><section class="section" id="deleting-the-local-storage-operator-resources"><div class="titlepage"><div><div><h4 class="title">4.10.8. Deleting the Local Storage Operator resources</h4></div></div></div><section class="section" id="local-removing-device_persistent-storage-local"><div class="titlepage"><div><div><h5 class="title">4.10.8.1. Removing a local volume or local volume set</h5></div></div></div><p> Occasionally, local volumes and local volume sets must be deleted. While removing the entry in the resource and deleting the persistent volume is typically enough, if you want to reuse the same device path or have it managed by a different storage class, then additional steps are needed. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The following procedure outlines an example for removing a local volume. The same procedure can also be used to remove symlinks for a local volume set custom resource. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> The persistent volume must be in a <code class="literal">Released</code> or <code class="literal">Available</code> state. </p><rh-alert class="admonition warning" state="danger"><div class="admonition_header" slot="header">Warning</div><div><p> Deleting a persistent volume that is still in use can result in data loss or corruption. </p></div></rh-alert></li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Edit the previously created local volume to remove any unwanted disks. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Edit the cluster resource: </p><pre class="programlisting language-terminal">$ oc edit localvolume &lt;name&gt; -n openshift-local-storage</pre></li><li class="listitem"> Navigate to the lines under <code class="literal">devicePaths</code>, and delete any representing unwanted disks. </li></ol></div></li><li class="listitem"><p class="simpara"> Delete any persistent volumes created. </p><pre class="programlisting language-terminal">$ oc delete pv &lt;pv-name&gt;</pre></li><li class="listitem"><p class="simpara"> Delete any symlinks on the node. </p><rh-alert class="admonition warning" state="danger"><div class="admonition_header" slot="header">Warning</div><div><p> The following step involves accessing a node as the root user. Modifying the state of the node beyond the steps in this procedure could result in cluster instability. </p></div></rh-alert><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p class="simpara"> Create a debug pod on the node: </p><pre class="programlisting language-terminal">$ oc debug node/&lt;node-name&gt;</pre></li><li class="listitem"><p class="simpara"> Change your root directory to <code class="literal">/host</code>: </p><pre class="programlisting language-terminal">$ chroot /host</pre></li><li class="listitem"><p class="simpara"> Navigate to the directory containing the local volume symlinks. </p><pre class="programlisting language-terminal">$ cd /mnt/openshift-local-storage/&lt;sc-name&gt; <span id="CO31-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO31-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the storage class used to create the local volumes. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Delete the symlink belonging to the removed device. </p><pre class="programlisting language-terminal">$ rm &lt;symlink&gt;</pre></li></ol></div></li></ol></div></section><section class="section" id="local-storage-uninstall_persistent-storage-local"><div class="titlepage"><div><div><h5 class="title">4.10.8.2. Uninstalling the Local Storage Operator</h5></div></div></div><p> To uninstall the Local Storage Operator, you must remove the Operator and all created resources in the <code class="literal">openshift-local-storage</code> project. </p><rh-alert class="admonition warning" state="danger"><div class="admonition_header" slot="header">Warning</div><div><p> Uninstalling the Local Storage Operator while local storage PVs are still in use is not recommended. While the PVs will remain after the Operator’s removal, there might be indeterminate behavior if the Operator is uninstalled and reinstalled without removing the PVs and local storage resources. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Access to the OpenShift Container Platform web console. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Delete any local volume resources installed in the project, such as <code class="literal">localvolume</code>, <code class="literal">localvolumeset</code>, and <code class="literal">localvolumediscovery</code>: </p><pre class="programlisting language-terminal">$ oc delete localvolume --all --all-namespaces $ oc delete localvolumeset --all --all-namespaces $ oc delete localvolumediscovery --all --all-namespaces</pre></li><li class="listitem"><p class="simpara"> Uninstall the Local Storage Operator from the web console. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Log in to the OpenShift Container Platform web console. </li><li class="listitem"> Navigate to <span class="strong strong"><strong>Operators</strong></span> → <span class="strong strong"><strong>Installed Operators</strong></span>. </li><li class="listitem"> Type <span class="strong strong"><strong>Local Storage</strong></span> into the filter box to locate the Local Storage Operator. </li><li class="listitem"> Click the Options menu <span class="inlinemediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Storage-en-US/images/f468284ec3cc9bf27e6bd2c83849ca50/kebab.png" alt="kebab"></span> at the end of the Local Storage Operator. </li><li class="listitem"> Click <span class="strong strong"><strong>Uninstall Operator</strong></span>. </li><li class="listitem"> Click <span class="strong strong"><strong>Remove</strong></span> in the window that appears. </li></ol></div></li><li class="listitem"><p class="simpara"> The PVs created by the Local Storage Operator will remain in the cluster until deleted. After these volumes are no longer in use, delete them by running the following command: </p><pre class="programlisting language-terminal">$ oc delete pv &lt;pv-name&gt;</pre></li><li class="listitem"><p class="simpara"> Delete the <code class="literal">openshift-local-storage</code> project: </p><pre class="programlisting language-terminal">$ oc delete project openshift-local-storage</pre></li></ol></div></section></section></section><section class="section" id="persistent-storage-using-nfs"><div class="titlepage"><div><div><h3 class="title">4.11. Persistent storage using NFS</h3></div></div></div><p> OpenShift Container Platform clusters can be provisioned with persistent storage using NFS. Persistent volumes (PVs) and persistent volume claims (PVCs) provide a convenient method for sharing a volume across a project. While the NFS-specific information contained in a PV definition could also be defined directly in a <code class="literal">Pod</code> definition, doing so does not create the volume as a distinct cluster resource, making the volume more susceptible to conflicts. </p><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-nfs">Network File System (NFS)</a> </li></ul></div><section class="section" id="persistent-storage-nfs-provisioning_persistent-storage-nfs"><div class="titlepage"><div><div><h4 class="title">4.11.1. Provisioning</h4></div></div></div><p> Storage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform. To provision NFS volumes, a list of NFS servers and export paths are all that is required. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create an object definition for the PV: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: pv0001 <span id="CO32-1"><!--Empty--></span><span class="callout">1</span> spec: capacity: storage: 5Gi <span id="CO32-2"><!--Empty--></span><span class="callout">2</span> accessModes: - ReadWriteOnce <span id="CO32-3"><!--Empty--></span><span class="callout">3</span> nfs: <span id="CO32-4"><!--Empty--></span><span class="callout">4</span> path: /tmp <span id="CO32-5"><!--Empty--></span><span class="callout">5</span> server: 172.17.0.2 <span id="CO32-6"><!--Empty--></span><span class="callout">6</span> persistentVolumeReclaimPolicy: Retain <span id="CO32-7"><!--Empty--></span><span class="callout">7</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO32-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the volume. This is the PV identity in various <code class="literal">oc &lt;command&gt; pod</code> commands. </div></dd><dt><a href="#CO32-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The amount of storage allocated to this volume. </div></dd><dt><a href="#CO32-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Though this appears to be related to controlling access to the volume, it is actually used similarly to labels and used to match a PVC to a PV. Currently, no access rules are enforced based on the <code class="literal">accessModes</code>. </div></dd><dt><a href="#CO32-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The volume type being used, in this case the <code class="literal">nfs</code> plugin. </div></dd><dt><a href="#CO32-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The path that is exported by the NFS server. </div></dd><dt><a href="#CO32-6"><span class="callout">6</span></a> </dt><dd><div class="para"> The hostname or IP address of the NFS server. </div></dd><dt><a href="#CO32-7"><span class="callout">7</span></a> </dt><dd><div class="para"> The reclaim policy for the PV. This defines what happens to a volume when released. </div></dd></dl></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Each NFS volume must be mountable by all schedulable nodes in the cluster. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Verify that the PV was created: </p><pre class="programlisting language-terminal">$ oc get pv</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON AGE pv0001 &lt;none&gt; 5Gi RWO Available 31s</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Create a persistent volume claim that binds to the new PV: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-claim1 spec: accessModes: - ReadWriteOnce <span id="CO33-1"><!--Empty--></span><span class="callout">1</span> resources: requests: storage: 5Gi <span id="CO33-2"><!--Empty--></span><span class="callout">2</span> volumeName: pv0001 storageClassName: ""</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO33-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The access modes do not enforce security, but rather act as labels to match a PV to a PVC. </div></dd><dt><a href="#CO33-2"><span class="callout">2</span></a> </dt><dd><div class="para"> This claim looks for PVs offering <span class="strong strong"><strong>5Gi</strong></span> or greater capacity. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Verify that the persistent volume claim was created: </p><pre class="programlisting language-terminal">$ oc get pvc</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE nfs-claim1 Bound pv0001 5Gi RWO 2m</pre> <p></p></div></li></ol></div></section><section class="section" id="nfs-enforcing-disk-quota_persistent-storage-nfs"><div class="titlepage"><div><div><h4 class="title">4.11.2. Enforcing disk quotas</h4></div></div></div><p> You can use disk partitions to enforce disk quotas and size constraints. Each partition can be its own export. Each export is one PV. OpenShift Container Platform enforces unique names for PVs, but the uniqueness of the NFS volume’s server and path is up to the administrator. </p><p> Enforcing quotas in this way allows the developer to request persistent storage by a specific amount, such as 10Gi, and be matched with a corresponding volume of equal or greater capacity. </p></section><section class="section" id="nfs-volume-security_persistent-storage-nfs"><div class="titlepage"><div><div><h4 class="title">4.11.3. NFS volume security</h4></div></div></div><p> This section covers NFS volume security, including matching permissions and SELinux considerations. The user is expected to understand the basics of POSIX permissions, process UIDs, supplemental groups, and SELinux. </p><p> Developers request NFS storage by referencing either a PVC by name or the NFS volume plugin directly in the <code class="literal">volumes</code> section of their <code class="literal">Pod</code> definition. </p><p> The <code class="literal">/etc/exports</code> file on the NFS server contains the accessible NFS directories. The target NFS directory has POSIX owner and group IDs. The OpenShift Container Platform NFS plugin mounts the container’s NFS directory with the same POSIX ownership and permissions found on the exported NFS directory. However, the container is not run with its effective UID equal to the owner of the NFS mount, which is the desired behavior. </p><p> As an example, if the target NFS directory appears on the NFS server as: </p><pre class="programlisting language-terminal" id="nfs-export">$ ls -lZ /opt/nfs -d</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">drwxrws---. nfsnobody 5555 unconfined_u:object_r:usr_t:s0 /opt/nfs</pre> <p></p></div><pre class="programlisting language-terminal">$ id nfsnobody</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)</pre> <p></p></div><p> Then the container must match SELinux labels, and either run with a UID of <code class="literal">65534</code>, the <code class="literal">nfsnobody</code> owner, or with <code class="literal">5555</code> in its supplemental groups to access the directory. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The owner ID of <code class="literal">65534</code> is used as an example. Even though NFS’s <code class="literal">root_squash</code> maps <code class="literal">root</code>, uid <code class="literal">0</code>, to <code class="literal">nfsnobody</code>, uid <code class="literal">65534</code>, NFS exports can have arbitrary owner IDs. Owner <code class="literal">65534</code> is not required for NFS exports. </p></div></rh-alert><section class="section" id="storage-persistent-storage-nfs-group-ids_persistent-storage-nfs"><div class="titlepage"><div><div><h5 class="title">4.11.3.1. Group IDs</h5></div></div></div><p> The recommended way to handle NFS access, assuming it is not an option to change permissions on the NFS export, is to use supplemental groups. Supplemental groups in OpenShift Container Platform are used for shared storage, of which NFS is an example. In contrast, block storage such as iSCSI uses the <code class="literal">fsGroup</code> SCC strategy and the <code class="literal">fsGroup</code> value in the <code class="literal">securityContext</code> of the pod. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> To gain access to persistent storage, it is generally preferable to use supplemental group IDs versus user IDs. </p></div></rh-alert><p> Because the group ID on the example target NFS directory is <code class="literal">5555</code>, the pod can define that group ID using <code class="literal">supplementalGroups</code> under the <code class="literal">securityContext</code> definition of the pod. For example: </p><pre class="programlisting language-yaml">spec: containers: - name: ... securityContext: <span id="CO34-1"><!--Empty--></span><span class="callout">1</span> supplementalGroups: [5555] <span id="CO34-2"><!--Empty--></span><span class="callout">2</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO34-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">securityContext</code> must be defined at the pod level, not under a specific container. </div></dd><dt><a href="#CO34-2"><span class="callout">2</span></a> </dt><dd><div class="para"> An array of GIDs defined for the pod. In this case, there is one element in the array. Additional GIDs would be comma-separated. </div></dd></dl></div><p> Assuming there are no custom SCCs that might satisfy the pod requirements, the pod likely matches the <code class="literal">restricted</code> SCC. This SCC has the <code class="literal">supplementalGroups</code> strategy set to <code class="literal">RunAsAny</code>, meaning that any supplied group ID is accepted without range checking. </p><p> As a result, the above pod passes admissions and is launched. However, if group ID range checking is desired, a custom SCC is the preferred solution. A custom SCC can be created such that minimum and maximum group IDs are defined, group ID range checking is enforced, and a group ID of <code class="literal">5555</code> is allowed. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> To use a custom SCC, you must first add it to the appropriate service account. For example, use the <code class="literal">default</code> service account in the given project unless another has been specified on the <code class="literal">Pod</code> specification. </p></div></rh-alert></section><section class="section" id="nfs-user-id_persistent-storage-nfs"><div class="titlepage"><div><div><h5 class="title">4.11.3.2. User IDs</h5></div></div></div><p> User IDs can be defined in the container image or in the <code class="literal">Pod</code> definition. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> It is generally preferable to use supplemental group IDs to gain access to persistent storage versus using user IDs. </p></div></rh-alert><p> In the example target NFS directory shown above, the container needs its UID set to <code class="literal">65534</code>, ignoring group IDs for the moment, so the following can be added to the <code class="literal">Pod</code> definition: </p><pre class="programlisting language-yaml">spec: containers: <span id="CO35-1"><!--Empty--></span><span class="callout">1</span> - name: ... securityContext: runAsUser: 65534 <span id="CO35-2"><!--Empty--></span><span class="callout">2</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO35-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Pods contain a <code class="literal">securityContext</code> definition specific to each container and a pod’s <code class="literal">securityContext</code> which applies to all containers defined in the pod. </div></dd><dt><a href="#CO35-2"><span class="callout">2</span></a> </dt><dd><div class="para"> <code class="literal">65534</code> is the <code class="literal">nfsnobody</code> user. </div></dd></dl></div><p> Assuming that the project is <code class="literal">default</code> and the SCC is <code class="literal">restricted</code>, the user ID of <code class="literal">65534</code> as requested by the pod is not allowed. Therefore, the pod fails for the following reasons: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> It requests <code class="literal">65534</code> as its user ID. </li><li class="listitem"> All SCCs available to the pod are examined to see which SCC allows a user ID of <code class="literal">65534</code>. While all policies of the SCCs are checked, the focus here is on user ID. </li><li class="listitem"> Because all available SCCs use <code class="literal">MustRunAsRange</code> for their <code class="literal">runAsUser</code> strategy, UID range checking is required. </li><li class="listitem"> <code class="literal">65534</code> is not included in the SCC or project’s user ID range. </li></ul></div><p> It is generally considered a good practice not to modify the predefined SCCs. The preferred way to fix this situation is to create a custom SCC A custom SCC can be created such that minimum and maximum user IDs are defined, UID range checking is still enforced, and the UID of <code class="literal">65534</code> is allowed. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> To use a custom SCC, you must first add it to the appropriate service account. For example, use the <code class="literal">default</code> service account in the given project unless another has been specified on the <code class="literal">Pod</code> specification. </p></div></rh-alert></section><section class="section" id="nfs-selinux_persistent-storage-nfs"><div class="titlepage"><div><div><h5 class="title">4.11.3.3. SELinux</h5></div></div></div><p> Red Hat Enterprise Linux (RHEL) and Red Hat Enterprise Linux CoreOS (RHCOS) systems are configured to use SELinux on remote NFS servers by default. </p><p> For non-RHEL and non-RHCOS systems, SELinux does not allow writing from a pod to a remote NFS server. The NFS volume mounts correctly but it is read-only. You will need to enable the correct SELinux permissions by using the following procedure. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The <code class="literal">container-selinux</code> package must be installed. This package provides the <code class="literal">virt_use_nfs</code> SELinux boolean. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Enable the <code class="literal">virt_use_nfs</code> boolean using the following command. The <code class="literal">-P</code> option makes this boolean persistent across reboots. </p><pre class="programlisting language-terminal"># setsebool -P virt_use_nfs 1</pre></li></ul></div></section><section class="section" id="export-settings"><div class="titlepage"><div><div><h5 class="title">4.11.3.4. Export settings</h5></div></div></div><p> To enable arbitrary container users to read and write the volume, each exported volume on the NFS server should conform to the following conditions: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Every export must be exported using the following format: </p><pre class="programlisting language-terminal">/&lt;example_fs&gt; *(rw,root_squash)</pre></li><li class="listitem"><p class="simpara"> The firewall must be configured to allow traffic to the mount point. </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p class="simpara"> For NFSv4, configure the default port <code class="literal">2049</code> (<span class="strong strong"><strong>nfs</strong></span>). </p><div class="formalpara"><p class="title"><strong>NFSv4</strong></p><p> </p><pre class="programlisting language-terminal"># iptables -I INPUT 1 -p tcp --dport 2049 -j ACCEPT</pre> <p></p></div></li><li class="listitem"><p class="simpara"> For NFSv3, there are three ports to configure: <code class="literal">2049</code> (<span class="strong strong"><strong>nfs</strong></span>), <code class="literal">20048</code> (<span class="strong strong"><strong>mountd</strong></span>), and <code class="literal">111</code> (<span class="strong strong"><strong>portmapper</strong></span>). </p><div class="formalpara"><p class="title"><strong>NFSv3</strong></p><p> </p><pre class="programlisting language-terminal"># iptables -I INPUT 1 -p tcp --dport 2049 -j ACCEPT</pre> <p></p></div><pre class="programlisting language-terminal"># iptables -I INPUT 1 -p tcp --dport 20048 -j ACCEPT</pre><pre class="programlisting language-terminal"># iptables -I INPUT 1 -p tcp --dport 111 -j ACCEPT</pre></li></ul></div></li><li class="listitem"> The NFS export and directory must be set up so that they are accessible by the target pods. Either set the export to be owned by the container’s primary UID, or supply the pod group access using <code class="literal">supplementalGroups</code>, as shown in the group IDs above. </li></ul></div></section></section><section class="section" id="nfs-reclaiming-resources_persistent-storage-nfs"><div class="titlepage"><div><div><h4 class="title">4.11.4. Reclaiming resources</h4></div></div></div><p> NFS implements the OpenShift Container Platform <code class="literal">Recyclable</code> plugin interface. Automatic processes handle reclamation tasks based on policies set on each persistent volume. </p><p> By default, PVs are set to <code class="literal">Retain</code>. </p><p> Once claim to a PVC is deleted, and the PV is released, the PV object should not be reused. Instead, a new PV should be created with the same basic volume details as the original. </p><p> For example, the administrator creates a PV named <code class="literal">nfs1</code>: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: nfs1 spec: capacity: storage: 1Mi accessModes: - ReadWriteMany nfs: server: 192.168.1.1 path: "/"</pre><p> The user creates <code class="literal">PVC1</code>, which binds to <code class="literal">nfs1</code>. The user then deletes <code class="literal">PVC1</code>, releasing claim to <code class="literal">nfs1</code>. This results in <code class="literal">nfs1</code> being <code class="literal">Released</code>. If the administrator wants to make the same NFS share available, they should create a new PV with the same NFS server details, but a different PV name: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: nfs2 spec: capacity: storage: 1Mi accessModes: - ReadWriteMany nfs: server: 192.168.1.1 path: "/"</pre><p> Deleting the original PV and re-creating it with the same name is discouraged. Attempting to manually change the status of a PV from <code class="literal">Released</code> to <code class="literal">Available</code> causes errors and potential data loss. </p></section><section class="section" id="additional-configuration-and-troubleshooting"><div class="titlepage"><div><div><h4 class="title">4.11.5. Additional configuration and troubleshooting</h4></div></div></div><p> Depending on what version of NFS is being used and how it is configured, there may be additional configuration steps needed for proper export and security mapping. The following are some that may apply: </p><rh-table><table class="lt-4-cols lt-7-rows"><colgroup><col style="width: 33%; " class="col_1"><!--Empty--><col style="width: 67%; " class="col_2"><!--Empty--></colgroup><tbody><tr><td align="left" valign="top"> <p> NFSv4 mount incorrectly shows all files with ownership of <code class="literal">nobody:nobody</code> </p> </td><td align="left" valign="top"> <div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Could be attributed to the ID mapping settings, found in <code class="literal">/etc/idmapd.conf</code> on your NFS. </li><li class="listitem"> See <a class="link" href="https://access.redhat.com/solutions/33455">this Red Hat Solution</a>. </li></ul></div> </td></tr><tr><td align="left" valign="top"> <p> Disabling ID mapping on NFSv4 </p> </td><td align="left" valign="top"> <div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> On both the NFS client and server, run: </p><pre class="programlisting language-terminal"># echo 'Y' &gt; /sys/module/nfsd/parameters/nfs4_disable_idmapping</pre></li></ul></div> </td></tr></tbody></table></rh-table></section></section><section class="section" id="red-hat-openshift-container-storage"><div class="titlepage"><div><div><h3 class="title">4.12. Red Hat OpenShift Container Storage</h3></div></div></div><p> Red Hat OpenShift Container Storage is a provider of agnostic persistent storage for OpenShift Container Platform supporting file, block, and object storage, either in-house or in hybrid clouds. As a Red Hat storage solution, Red Hat OpenShift Container Storage is completely integrated with OpenShift Container Platform for deployment, management, and monitoring. </p><p> Red Hat OpenShift Container Storage provides its own documentation library. The complete set of Red Hat OpenShift Container Storage documentation identified below is available at <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/">https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/</a> </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Storage on top of Red Hat Hyperconverged Infrastructure (RHHI) for Virtualization, which uses hyperconverged nodes that host virtual machines installed with OpenShift Container Platform, is not a supported configuration. For more information about supported platforms, see the <a class="link" href="https://access.redhat.com/articles/4731161">Red Hat OpenShift Container Storage Supportability and Interoperability Guide</a>. </p></div></rh-alert><rh-table><table class="lt-4-cols lt-7-rows"><colgroup><col style="width: 50%; " class="col_1"><!--Empty--><col style="width: 50%; " class="col_2"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140708981944016" scope="col">If you are looking for Red Hat OpenShift Container Storage information about…​</th><th align="left" valign="top" id="idm140708981942784" scope="col">See the following Red Hat OpenShift Container Storage documentation:</th></tr></thead><tbody><tr><td colspan="2" align="center" valign="top" headers="idm140708981944016 idm140708981942784"> <p> <span class="strong strong"><strong>Planning</strong></span> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> What’s new, known issues, notable bug fixes, and Technology Previews </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/4.8_release_notes/">Red Hat OpenShift Container Storage 4.8 Release Notes</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Supported workloads, layouts, hardware and software requirements, sizing and scaling recommendations </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/planning_your_deployment/index">Planning your Red Hat OpenShift Container Storage 4.8 deployment</a> </p> </td></tr><tr><td colspan="2" align="center" valign="top" headers="idm140708981944016 idm140708981942784"> <p> <span class="strong strong"><strong>Deploying</strong></span> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying Red Hat OpenShift Container Storage using Amazon Web Services for local or cloud storage </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_amazon_web_services/index">Deploying OpenShift Container Storage 4.8 using Amazon Web Services</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying Red Hat OpenShift Container Storage to local storage on bare metal infrastructure </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_bare_metal_infrastructure/">Deploying OpenShift Container Storage 4.8 using bare metal infrastructure</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying Red Hat OpenShift Container Storage to use an external Red Hat Ceph Storage cluster </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_in_external_mode/">Deploying OpenShift Container Storage 4.8 in external mode</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying and managing Red Hat OpenShift Container Storage on existing Google Cloud clusters </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_and_managing_openshift_container_storage_using_google_cloud/">Deploying and managing OpenShift Container Storage 4.8 using Google Cloud</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying Red Hat OpenShift Container Storage to use local storage on IBM Z infrastructure </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_ibm_z_infrastructure/">Deploying OpenShift Container Storage using IBM Z</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying Red Hat OpenShift Container Storage on IBM Power Systems </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_ibm_power_systems/">Deploying OpenShift Container Storage using IBM Power Systems</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying Red Hat OpenShift Container Storage on IBM Cloud </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_data_foundation_using_ibm_cloud/">Deploying OpenShift Data Foundation using IBM Cloud</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying and managing Red Hat OpenShift Container Storage on Red Hat OpenStack Platform (RHOSP) </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_and_managing_openshift_container_storage_using_red_hat_openstack_platform/">Deploying and managing OpenShift Container Storage 4.8 using Red Hat OpenStack Platform</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying and managing Red Hat OpenShift Container Storage on Red Hat Virtualization (RHV) </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_red_hat_virtualization_platform/index">Deploying and managing OpenShift Container Storage 4.8 using Red Hat Virtualization Platform</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Deploying Red Hat OpenShift Container Storage on VMware vSphere clusters </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_on_vmware_vsphere/">Deploying OpenShift Container Storage 4.8 on VMware vSphere</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Updating Red Hat OpenShift Container Storage to the latest version </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/updating_openshift_container_storage/">Updating OpenShift Container Storage</a> </p> </td></tr><tr><td colspan="2" align="center" valign="top" headers="idm140708981944016 idm140708981942784"> <p> <span class="strong strong"><strong>Managing</strong></span> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Allocating storage to core services and hosted applications in Red Hat OpenShift Container Storage, including snapshot and clone </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/managing_and_allocating_storage_resources/">Managing and allocating resources</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Managing storage resources across a hybrid cloud or multicloud environment using the Multicloud Object Gateway (NooBaa) </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/managing_hybrid_and_multicloud_resources/">Managing hybrid and multicloud resources</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Safely replacing storage devices for Red Hat OpenShift Container Storage </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/replacing_devices/">Replacing devices</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Safely replacing a node in a Red Hat OpenShift Container Storage cluster </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/replacing_nodes/">Replacing nodes</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Scaling operations in Red Hat OpenShift Container Storage </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/scaling_storage/">Scaling storage</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Monitoring a Red Hat OpenShift Container Storage 4.8 cluster </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/monitoring_openshift_container_storage/">Monitoring OpenShift Container Storage 4.8</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Troubleshooting errors and issues </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/troubleshooting_openshift_container_storage/">Troubleshooting OpenShift Container Storage 4.8</a> </p> </td></tr><tr><td align="left" valign="top" headers="idm140708981944016"> <p> Migrating your OpenShift Container Platform cluster from version 3 to version 4 </p> </td><td align="left" valign="top" headers="idm140708981942784"> <p> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html/migration_toolkit_for_containers/">Migration Toolkit for Containers</a> </p> </td></tr></tbody></table></rh-table></section><section class="section" id="persistent-storage-using-vsphere"><div class="titlepage"><div><div><h3 class="title">4.13. Persistent storage using VMware vSphere volumes</h3></div></div></div><p> OpenShift Container Platform allows use of VMware vSphere’s Virtual Machine Disk (VMDK) volumes. You can provision your OpenShift Container Platform cluster with persistent storage using VMware vSphere. Some familiarity with Kubernetes and VMware vSphere is assumed. </p><p> VMware vSphere volumes can be provisioned dynamically. OpenShift Container Platform creates the disk in vSphere and attaches this disk to the correct image. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> OpenShift Container Platform provisions new volumes as independent persistent disks that can freely attach and detach the volume on any node in the cluster. Consequently, you cannot back up volumes that use snapshots, or restore volumes from snapshots. See <a class="link" href="https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.vm_admin.doc/GUID-53F65726-A23B-4CF0-A7D5-48E584B88613.html">Snapshot Limitations</a> for more information. </p></div></rh-alert><p> The Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. </p><p> Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision vSphere storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://www.vmware.com/au/products/vsphere.html">VMware vSphere</a> </li></ul></div><section class="section" id="dynamically-provisioning-vmware-vsphere-volumes"><div class="titlepage"><div><div><h4 class="title">4.13.1. Dynamically provisioning VMware vSphere volumes</h4></div></div></div><p> Dynamically provisioning VMware vSphere volumes is the recommended method. </p></section><section class="section" id="prerequisites"><div class="titlepage"><div><div><h4 class="title">4.13.2. Prerequisites</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> An OpenShift Container Platform cluster installed on a VMware vSphere version that meets the requirements for the components that you use. See <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/installing/#installing-a-cluster-on-vsphere-with-user-provisioned-infrastructure">Installing a cluster on vSphere</a> for information about vSphere version support. </li></ul></div><p> You can use either of the following procedures to dynamically provision these volumes using the default storage class. </p><section class="section" id="vsphere-dynamic-provisioning_persistent-storage-efs"><div class="titlepage"><div><div><h5 class="title">4.13.2.1. Dynamically provisioning VMware vSphere volumes using the UI</h5></div></div></div><p> OpenShift Container Platform installs a default storage class, named <code class="literal">thin</code>, that uses the <code class="literal">thin</code> disk format for provisioning volumes. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Storage must exist in the underlying infrastructure before it can be mounted as a volume 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 OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Persistent Volume Claims</strong></span>. </li><li class="listitem"> In the persistent volume claims overview, click <span class="strong strong"><strong>Create Persistent Volume Claim</strong></span>. </li><li class="listitem"><p class="simpara"> Define the required options on the resulting page. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Select the <code class="literal">thin</code> storage class. </li><li class="listitem"> Enter a unique name for the storage claim. </li><li class="listitem"> Select the access mode to determine the read and write access for the created storage claim. </li><li class="listitem"> Define the size of the storage claim. </li></ol></div></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the persistent volume claim and generate a persistent volume. </li></ol></div></section><section class="section" id="vsphere-dynamic-provisioning-cli_persistent-storage-efs"><div class="titlepage"><div><div><h5 class="title">4.13.2.2. Dynamically provisioning VMware vSphere volumes using the CLI</h5></div></div></div><p> OpenShift Container Platform installs a default StorageClass, named <code class="literal">thin</code>, that uses the <code class="literal">thin</code> disk format for provisioning volumes. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Storage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform. </li></ul></div><div class="orderedlist"><p class="title"><strong>Procedure (CLI)</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> You can define a VMware vSphere PersistentVolumeClaim by creating a file, <code class="literal">pvc.yaml</code>, with the following contents: </p><pre class="programlisting language-yaml">kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc <span id="CO36-1"><!--Empty--></span><span class="callout">1</span> spec: accessModes: - ReadWriteOnce <span id="CO36-2"><!--Empty--></span><span class="callout">2</span> resources: requests: storage: 1Gi <span id="CO36-3"><!--Empty--></span><span class="callout">3</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO36-1"><span class="callout">1</span></a> </dt><dd><div class="para"> A unique name that represents the persistent volume claim. </div></dd><dt><a href="#CO36-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The access mode of the persistent volume claim. With <code class="literal">ReadWriteOnce</code>, the volume can be mounted with read and write permissions by a single node. </div></dd><dt><a href="#CO36-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The size of the persistent volume claim. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the <code class="literal">PersistentVolumeClaim</code> object from the file: </p><pre class="programlisting language-terminal">$ oc create -f pvc.yaml</pre></li></ol></div></section></section><section class="section" id="vsphere-static-provisioning_persistent-storage-efs"><div class="titlepage"><div><div><h4 class="title">4.13.3. Statically provisioning VMware vSphere volumes</h4></div></div></div><p> To statically provision VMware vSphere volumes you must create the virtual machine disks for reference by the persistent volume framework. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Storage must exist in the underlying infrastructure before it can be mounted as a volume 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 the virtual machine disks. Virtual machine disks (VMDKs) must be created manually before statically provisioning VMware vSphere volumes. Use either of the following methods: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Create using <code class="literal">vmkfstools</code>. Access ESX through Secure Shell (SSH) and then use following command to create a VMDK volume: </p><pre class="programlisting language-terminal">$ vmkfstools -c &lt;size&gt; /vmfs/volumes/&lt;datastore-name&gt;/volumes/&lt;disk-name&gt;.vmdk</pre></li><li class="listitem"><p class="simpara"> Create using <code class="literal">vmware-diskmanager</code>: </p><pre class="programlisting language-terminal">$ shell vmware-vdiskmanager -c -t 0 -s &lt;size&gt; -a lsilogic &lt;disk-name&gt;.vmdk</pre></li></ul></div></li><li class="listitem"><p class="simpara"> Create a persistent volume that references the VMDKs. Create a file, <code class="literal">pv1.yaml</code>, with the <code class="literal">PersistentVolume</code> object definition: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolume metadata: name: pv1 <span id="CO37-1"><!--Empty--></span><span class="callout">1</span> spec: capacity: storage: 1Gi <span id="CO37-2"><!--Empty--></span><span class="callout">2</span> accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain vsphereVolume: <span id="CO37-3"><!--Empty--></span><span class="callout">3</span> volumePath: "[datastore1] volumes/myDisk" <span id="CO37-4"><!--Empty--></span><span class="callout">4</span> fsType: ext4 <span id="CO37-5"><!--Empty--></span><span class="callout">5</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO37-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the volume. This name is how it is identified by persistent volume claims or pods. </div></dd><dt><a href="#CO37-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The amount of storage allocated to this volume. </div></dd><dt><a href="#CO37-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The volume type used, with <code class="literal">vsphereVolume</code> for vSphere volumes. The label is used to mount a vSphere VMDK volume into pods. The contents of a volume are preserved when it is unmounted. The volume type supports VMFS and VSAN datastore. </div></dd><dt><a href="#CO37-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The existing VMDK volume to use. If you used <code class="literal">vmkfstools</code>, you must enclose the datastore name in square brackets, <code class="literal">[]</code>, in the volume definition, as shown previously. </div></dd><dt><a href="#CO37-5"><span class="callout">5</span></a> </dt><dd><div class="para"> The file system type to mount. For example, ext4, xfs, or other file systems. </div></dd></dl></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Changing the value of the fsType parameter after the volume is formatted and provisioned can result in data loss and pod failure. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Create the <code class="literal">PersistentVolume</code> object from the file: </p><pre class="programlisting language-terminal">$ oc create -f pv1.yaml</pre></li><li class="listitem"><p class="simpara"> Create a persistent volume claim that maps to the persistent volume you created in the previous step. Create a file, <code class="literal">pvc1.yaml</code>, with the <code class="literal">PersistentVolumeClaim</code> object definition: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc1 <span id="CO38-1"><!--Empty--></span><span class="callout">1</span> spec: accessModes: - ReadWriteOnce <span id="CO38-2"><!--Empty--></span><span class="callout">2</span> resources: requests: storage: "1Gi" <span id="CO38-3"><!--Empty--></span><span class="callout">3</span> volumeName: pv1 <span id="CO38-4"><!--Empty--></span><span class="callout">4</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO38-1"><span class="callout">1</span></a> </dt><dd><div class="para"> A unique name that represents the persistent volume claim. </div></dd><dt><a href="#CO38-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The access mode of the persistent volume claim. With ReadWriteOnce, the volume can be mounted with read and write permissions by a single node. </div></dd><dt><a href="#CO38-3"><span class="callout">3</span></a> </dt><dd><div class="para"> The size of the persistent volume claim. </div></dd><dt><a href="#CO38-4"><span class="callout">4</span></a> </dt><dd><div class="para"> The name of the existing persistent volume. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the <code class="literal">PersistentVolumeClaim</code> object from the file: </p><pre class="programlisting language-terminal">$ oc create -f pvc1.yaml</pre></li></ol></div><section class="section" id="vsphere-formatting-volumes_persistent-storage-efs"><div class="titlepage"><div><div><h5 class="title">4.13.3.1. Formatting VMware vSphere volumes</h5></div></div></div><p> Before OpenShift Container Platform mounts the volume and passes it to a container, it checks that the volume contains a file system that is specified by the <code class="literal">fsType</code> parameter value in the <code class="literal">PersistentVolume</code> (PV) definition. If the device is not formatted with the file system, all data from the device is erased, and the device is automatically formatted with the specified file system. </p><p> Because OpenShift Container Platform formats them before the first use, you can use unformatted vSphere volumes as PVs. </p></section></section></section></section><section class="chapter" id="using-container-storage-interface-csi"><div class="titlepage"><div><div><h2 class="title">Chapter 5. Using Container Storage Interface (CSI)</h2></div></div></div><section class="section" id="persistent-storage-csi"><div class="titlepage"><div><div><h3 class="title">5.1. Configuring CSI volumes</h3></div></div></div><p> The Container Storage Interface (CSI) allows OpenShift Container Platform to consume storage from storage back ends that implement the <a class="link" href="https://github.com/container-storage-interface/spec">CSI interface</a> as persistent storage. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> OpenShift Container Platform 4.8 supports version 1.3.0 of the <a class="link" href="https://github.com/container-storage-interface/spec">CSI specification</a>. </p></div></rh-alert><section class="section" id="persistent-storage-csi-architecture_persistent-storage-csi"><div class="titlepage"><div><div><h4 class="title">5.1.1. CSI Architecture</h4></div></div></div><p> CSI drivers are typically shipped as container images. These containers are not aware of OpenShift Container Platform where they run. To use CSI-compatible storage back end in OpenShift Container Platform, the cluster administrator must deploy several components that serve as a bridge between OpenShift Container Platform and the storage driver. </p><p> The following diagram provides a high-level overview about the components running in pods in the OpenShift Container Platform cluster. </p><div class="informalfigure"><div class="mediaobject"><img src="https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Storage-en-US/images/8984f70396bee6fae4a769322f541eab/csi-arch-rev1.png" alt="Architecture of CSI components"></div></div><p> It is possible to run multiple CSI drivers for different storage back ends. Each driver needs its own external controllers deployment and daemon set with the driver and CSI registrar. </p><section class="section" id="external-csi-contollers_persistent-storage-csi"><div class="titlepage"><div><div><h5 class="title">5.1.1.1. External CSI controllers</h5></div></div></div><p> External CSI Controllers is a deployment that deploys one or more pods with five containers: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The snapshotter container watches <code class="literal">VolumeSnapshot</code> and <code class="literal">VolumeSnapshotContent</code> objects and is responsible for the creation and deletion of <code class="literal">VolumeSnapshotContent</code> object. </li><li class="listitem"> The resizer container is a sidecar container that watches for <code class="literal">PersistentVolumeClaim</code> updates and triggers <code class="literal">ControllerExpandVolume</code> operations against a CSI endpoint if you request more storage on <code class="literal">PersistentVolumeClaim</code> object. </li><li class="listitem"> An external CSI attacher container translates <code class="literal">attach</code> and <code class="literal">detach</code> calls from OpenShift Container Platform to respective <code class="literal">ControllerPublish</code> and <code class="literal">ControllerUnpublish</code> calls to the CSI driver. </li><li class="listitem"> An external CSI provisioner container that translates <code class="literal">provision</code> and <code class="literal">delete</code> calls from OpenShift Container Platform to respective <code class="literal">CreateVolume</code> and <code class="literal">DeleteVolume</code> calls to the CSI driver. </li><li class="listitem"> A CSI driver container </li></ul></div><p> The CSI attacher and CSI provisioner containers communicate with the CSI driver container using UNIX Domain Sockets, ensuring that no CSI communication leaves the pod. The CSI driver is not accessible from outside of the pod. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> <code class="literal">attach</code>, <code class="literal">detach</code>, <code class="literal">provision</code>, and <code class="literal">delete</code> operations typically require the CSI driver to use credentials to the storage backend. Run the CSI controller pods on infrastructure nodes so the credentials are never leaked to user processes, even in the event of a catastrophic security breach on a compute node. </p></div></rh-alert><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The external attacher must also run for CSI drivers that do not support third-party <code class="literal">attach</code> or <code class="literal">detach</code> operations. The external attacher will not issue any <code class="literal">ControllerPublish</code> or <code class="literal">ControllerUnpublish</code> operations to the CSI driver. However, it still must run to implement the necessary OpenShift Container Platform attachment API. </p></div></rh-alert></section><section class="section" id="csi-driver-daemonset_persistent-storage-csi"><div class="titlepage"><div><div><h5 class="title">5.1.1.2. CSI driver daemon set</h5></div></div></div><p> The CSI driver daemon set runs a pod on every node that allows OpenShift Container Platform to mount storage provided by the CSI driver to the node and use it in user workloads (pods) as persistent volumes (PVs). The pod with the CSI driver installed contains the following containers: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> A CSI driver registrar, which registers the CSI driver into the <code class="literal">openshift-node</code> service running on the node. The <code class="literal">openshift-node</code> process running on the node then directly connects with the CSI driver using the UNIX Domain Socket available on the node. </li><li class="listitem"> A CSI driver. </li></ul></div><p> The CSI driver deployed on the node should have as few credentials to the storage back end as possible. OpenShift Container Platform will only use the node plugin set of CSI calls such as <code class="literal">NodePublish</code>/<code class="literal">NodeUnpublish</code> and <code class="literal">NodeStage</code>/<code class="literal">NodeUnstage</code>, if these calls are implemented. </p></section></section><section class="section" id="csi-drivers-supported_persistent-storage-csi"><div class="titlepage"><div><div><h4 class="title">5.1.2. CSI drivers supported by OpenShift Container Platform</h4></div></div></div><p> OpenShift Container Platform installs certain CSI drivers by default, giving users storage options that are not possible with in-tree volume plugins. </p><p> To create CSI-provisioned persistent volumes that mount to these supported storage assets, OpenShift Container Platform installs the necessary CSI driver Operator, the CSI driver, and the required storage class by default. For more details about the default namespace of the Operator and driver, see the documentation for the specific CSI Driver Operator. </p><p> The following table describes the CSI drivers that are installed with OpenShift Container Platform and which CSI features they support, such as volume snapshots, cloning, and resize. </p><rh-table id="idm140708981398208"><table class="gt-4-cols lt-7-rows"><caption>Table 5.1. Supported CSI drivers and features in OpenShift Container Platform</caption><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="idm140708979960832" scope="col">CSI driver</th><th align="center" valign="top" id="idm140708979959744" scope="col">CSI volume snapshots</th><th align="center" valign="top" id="idm140708979958656" scope="col">CSI cloning</th><th align="center" valign="top" id="idm140708979957568" scope="col">CSI resize</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708979960832"> <p> AWS EBS (Tech Preview) </p> </td><td align="center" valign="top" headers="idm140708979959744"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979958656"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708979957568"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708979960832"> <p> Google Cloud Platform (GCP) persistent disk (PD) </p> </td><td align="center" valign="top" headers="idm140708979959744"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979958656"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708979957568"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708979960832"> <p> Microsoft Azure Disk (Tech Preview) </p> </td><td align="center" valign="top" headers="idm140708979959744"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979958656"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979957568"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708979960832"> <p> OpenStack Cinder </p> </td><td align="center" valign="top" headers="idm140708979959744"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979958656"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979957568"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708979960832"> <p> OpenShift Container Storage </p> </td><td align="center" valign="top" headers="idm140708979959744"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979958656"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979957568"> <div class="literallayout"><p> ✅</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708979960832"> <p> OpenStack Manila </p> </td><td align="center" valign="top" headers="idm140708979959744"> <div class="literallayout"><p> ✅</p></div> </td><td align="center" valign="top" headers="idm140708979958656"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708979957568"> <div class="literallayout"><p> -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708979960832"> <p> Red Hat Virtualization (oVirt) </p> </td><td align="center" valign="top" headers="idm140708979959744"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708979958656"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708979957568"> <div class="literallayout"><p> -</p></div> </td></tr><tr><td align="left" valign="top" headers="idm140708979960832"> <p> VMware vSphere (Tech Preview) </p> </td><td align="center" valign="top" headers="idm140708979959744"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708979958656"> <div class="literallayout"><p> -</p></div> </td><td align="center" valign="top" headers="idm140708979957568"> <div class="literallayout"><p> -</p></div> </td></tr></tbody></table></rh-table><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> If your CSI driver is not listed in the preceding table, you must follow the installation instructions provided by your CSI storage vendor to use their supported CSI features. </p></div></rh-alert></section><section class="section" id="csi-dynamic-provisioning_persistent-storage-csi"><div class="titlepage"><div><div><h4 class="title">5.1.3. Dynamic provisioning</h4></div></div></div><p> Dynamic provisioning of persistent storage depends on the capabilities of the CSI driver and underlying storage back end. The provider of the CSI driver should document how to create a storage class in OpenShift Container Platform and the parameters available for configuration. </p><p> The created storage class can be configured to enable dynamic provisioning. </p><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Create a default storage class that ensures all PVCs that do not require any special storage class are provisioned by the installed CSI driver. </p><pre class="programlisting language-shell"># oc create -f - &lt;&lt; EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: &lt;storage-class&gt; <span id="CO39-1"><!--Empty--></span><span class="callout">1</span> annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: &lt;provisioner-name&gt; <span id="CO39-2"><!--Empty--></span><span class="callout">2</span> parameters: EOF</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO39-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the storage class that will be created. </div></dd><dt><a href="#CO39-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The name of the CSI driver that has been installed </div></dd></dl></div></li></ul></div></section><section class="section" id="csi-example-usage_persistent-storage-csi"><div class="titlepage"><div><div><h4 class="title">5.1.4. Example using the CSI driver</h4></div></div></div><p> The following example installs a default MySQL template without any changes to the template. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The CSI driver has been deployed. </li><li class="listitem"> A storage class has been created for dynamic provisioning. </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 the MySQL template: </p><pre class="programlisting language-terminal"># oc new-app mysql-persistent</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">--&gt; Deploying template "openshift/mysql-persistent" to project default ...</pre> <p></p></div><pre class="programlisting language-terminal"># oc get pvc</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mysql Bound kubernetes-dynamic-pv-3271ffcb4e1811e8 1Gi RWO cinder 3s</pre> <p></p></div></li></ul></div></section></section><section class="section" id="ephemeral-storage-csi-inline"><div class="titlepage"><div><div><h3 class="title">5.2. CSI inline ephemeral volumes</h3></div></div></div><p> Container Storage Interface (CSI) inline ephemeral volumes allow you to define a <code class="literal">Pod</code> spec that creates inline ephemeral volumes when a pod is deployed and delete them when a pod is destroyed. </p><p> This feature is only available with supported Container Storage Interface (CSI) drivers. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> CSI inline ephemeral volumes 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><section class="section" id="ephemeral-storage-csi-inline-overview_ephemeral-storage-csi-inline"><div class="titlepage"><div><div><h4 class="title">5.2.1. Overview of CSI inline ephemeral volumes</h4></div></div></div><p> Traditionally, volumes that are backed by Container Storage Interface (CSI) drivers can only be used with a <code class="literal">PersistentVolume</code> and <code class="literal">PersistentVolumeClaim</code> object combination. </p><p> This feature allows you to specify CSI volumes directly in the <code class="literal">Pod</code> specification, rather than in a <code class="literal">PersistentVolume</code> object. Inline volumes are ephemeral and do not persist across pod restarts. </p><section class="section" id="support-limitations"><div class="titlepage"><div><div><h5 class="title">5.2.1.1. Support limitations</h5></div></div></div><p> By default, OpenShift Container Platform supports CSI inline ephemeral volumes with these limitations: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Support is only available for CSI drivers. In-tree and FlexVolumes are not supported. </li><li class="listitem"> OpenShift Container Platform does not include any CSI drivers. Use the CSI drivers provided by <a class="link" href="https://kubernetes-csi.github.io/docs/drivers.html">community or storage vendors</a>. Follow the installation instructions provided by the CSI driver. </li><li class="listitem"> CSI drivers might not have implemented the inline volume functionality, including <code class="literal">Ephemeral</code> capacity. For details, see the CSI driver documentation. </li></ul></div></section></section><section class="section" id="ephemeral-storage-csi-inline-pod_ephemeral-storage-csi-inline"><div class="titlepage"><div><div><h4 class="title">5.2.2. Embedding a CSI inline ephemeral volume in the pod specification</h4></div></div></div><p> You can embed a CSI inline ephemeral volume in the <code class="literal">Pod</code> specification in OpenShift Container Platform. At runtime, nested inline volumes follow the ephemeral lifecycle of their associated pods so that the CSI driver handles all phases of volume operations as pods are created and destroyed. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> Create the <code class="literal">Pod</code> object definition and save it to a file. </li><li class="listitem"><p class="simpara"> Embed the CSI inline ephemeral volume in the file. </p><div class="formalpara"><p class="title"><strong>my-csi-app.yaml</strong></p><p> </p><pre class="programlisting language-yaml">kind: Pod apiVersion: v1 metadata: name: my-csi-app spec: containers: - name: my-frontend image: busybox volumeMounts: - mountPath: "/data" name: my-csi-inline-vol command: [ "sleep", "1000000" ] volumes: <span id="CO40-1"><!--Empty--></span><span class="callout">1</span> - name: my-csi-inline-vol csi: driver: inline.storage.kubernetes.io volumeAttributes: foo: bar</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO40-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the volume that is used by pods. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the object definition file that you saved in the previous step. </p><pre class="programlisting language-terminal">$ oc create -f my-csi-app.yaml</pre></li></ol></div></section></section><section class="section" id="persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h3 class="title">5.3. CSI volume snapshots</h3></div></div></div><p> This document describes how to use volume snapshots with supported Container Storage Interface (CSI) drivers to help protect against data loss in OpenShift Container Platform. Familiarity with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-volumes_understanding-persistent-storage">persistent volumes</a> is suggested. </p><section class="section" id="persistent-storage-csi-snapshots-overview_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h4 class="title">5.3.1. Overview of CSI volume snapshots</h4></div></div></div><p> A <span class="emphasis"><em>snapshot</em></span> represents the state of the storage volume in a cluster at a particular point in time. Volume snapshots can be used to provision a new volume. </p><p> OpenShift Container Platform supports CSI volume snapshots by default. However, a specific CSI driver is required. </p><p> With CSI volume snapshots, a cluster administrator can: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Deploy a third-party CSI driver that supports snapshots. </li><li class="listitem"> Create a new persistent volume claim (PVC) from an existing volume snapshot. </li><li class="listitem"> Take a snapshot of an existing PVC. </li><li class="listitem"> Restore a snapshot as a different PVC. </li><li class="listitem"> Delete an existing volume snapshot. </li></ul></div><p> With CSI volume snapshots, an app developer can: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Use volume snapshots as building blocks for developing application- or cluster-level storage backup solutions. </li><li class="listitem"> Rapidly rollback to a previous development version. </li><li class="listitem"> Use storage more efficiently by not having to make a full copy each time. </li></ul></div><p> Be aware of the following when using volume snapshots: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Support is only available for CSI drivers. In-tree and FlexVolumes are not supported. </li><li class="listitem"> OpenShift Container Platform only ships with select CSI drivers. For CSI drivers that are not provided by an OpenShift Container Platform Driver Operator, it is recommended to use the CSI drivers provided by <a class="link" href="https://kubernetes-csi.github.io/docs/drivers.html">community or storage vendors</a>. Follow the installation instructions provided by the CSI driver. </li><li class="listitem"> CSI drivers may or may not have implemented the volume snapshot functionality. CSI drivers that have provided support for volume snapshots will likely use the <code class="literal">csi-external-snapshotter</code> sidecar. See documentation provided by the CSI driver for details. </li></ul></div></section><section class="section" id="persistent-storage-csi-snapshots-controller-sidecar_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h4 class="title">5.3.2. CSI snapshot controller and sidecar</h4></div></div></div><p> OpenShift Container Platform provides a snapshot controller that is deployed into the control plane. In addition, your CSI driver vendor provides the CSI snapshot sidecar as a helper container that is installed during the CSI driver installation. </p><p> The CSI snapshot controller and sidecar provide volume snapshotting through the OpenShift Container Platform API. These external components run in the cluster. </p><p> The external controller is deployed by the CSI Snapshot Controller Operator. </p><section class="section" id="external-controller"><div class="titlepage"><div><div><h5 class="title">5.3.2.1. External controller</h5></div></div></div><p> The CSI snapshot controller binds <code class="literal">VolumeSnapshot</code> and <code class="literal">VolumeSnapshotContent</code> objects. The controller manages dynamic provisioning by creating and deleting <code class="literal">VolumeSnapshotContent</code> objects. </p></section><section class="section" id="external-sidecar"><div class="titlepage"><div><div><h5 class="title">5.3.2.2. External sidecar</h5></div></div></div><p> Your CSI driver vendor provides the <code class="literal">csi-external-snapshotter</code> sidecar. This is a separate helper container that is deployed with the CSI driver. The sidecar manages snapshots by triggering <code class="literal">CreateSnapshot</code> and <code class="literal">DeleteSnapshot</code> operations. Follow the installation instructions provided by your vendor. </p></section></section><section class="section" id="persistent-storage-csi-snapshots-operator_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h4 class="title">5.3.3. About the CSI Snapshot Controller Operator</h4></div></div></div><p> The CSI Snapshot Controller Operator runs in the <code class="literal">openshift-cluster-storage-operator</code> namespace. It is installed by the Cluster Version Operator (CVO) in all clusters by default. </p><p> The CSI Snapshot Controller Operator installs the CSI snapshot controller, which runs in the <code class="literal">openshift-cluster-storage-operator</code> namespace. </p><section class="section" id="volume-snapshot-crds"><div class="titlepage"><div><div><h5 class="title">5.3.3.1. Volume snapshot CRDs</h5></div></div></div><p> During OpenShift Container Platform installation, the CSI Snapshot Controller Operator creates the following snapshot custom resource definitions (CRDs) in the <code class="literal">snapshot.storage.k8s.io/v1</code> API group: </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">VolumeSnapshotContent</code></span></dt><dd><p class="simpara"> A snapshot taken of a volume in the cluster that has been provisioned by a cluster administrator. </p><p class="simpara"> Similar to the <code class="literal">PersistentVolume</code> object, the <code class="literal">VolumeSnapshotContent</code> CRD is a cluster resource that points to a real snapshot in the storage back end. </p><p class="simpara"> For manually pre-provisioned snapshots, a cluster administrator creates a number of <code class="literal">VolumeSnapshotContent</code> CRDs. These carry the details of the real volume snapshot in the storage system. </p><p class="simpara"> The <code class="literal">VolumeSnapshotContent</code> CRD is not namespaced and is for use by a cluster administrator. </p></dd><dt><span class="term"><code class="literal">VolumeSnapshot</code></span></dt><dd><p class="simpara"> Similar to the <code class="literal">PersistentVolumeClaim</code> object, the <code class="literal">VolumeSnapshot</code> CRD defines a developer request for a snapshot. The CSI Snapshot Controller Operator runs the CSI snapshot controller, which handles the binding of a <code class="literal">VolumeSnapshot</code> CRD with an appropriate <code class="literal">VolumeSnapshotContent</code> CRD. The binding is a one-to-one mapping. </p><p class="simpara"> The <code class="literal">VolumeSnapshot</code> CRD is namespaced. A developer uses the CRD as a distinct request for a snapshot. </p></dd><dt><span class="term"><code class="literal">VolumeSnapshotClass</code></span></dt><dd><p class="simpara"> Allows a cluster administrator to specify different attributes belonging to a <code class="literal">VolumeSnapshot</code> object. These attributes may differ among snapshots taken of the same volume on the storage system, in which case they would not be expressed by using the same storage class of a persistent volume claim. </p><p class="simpara"> The <code class="literal">VolumeSnapshotClass</code> CRD defines the parameters for the <code class="literal">csi-external-snapshotter</code> sidecar to use when creating a snapshot. This allows the storage back end to know what kind of snapshot to dynamically create if multiple options are supported. </p><p class="simpara"> Dynamically provisioned snapshots use the <code class="literal">VolumeSnapshotClass</code> CRD to specify storage-provider-specific parameters to use when creating a snapshot. </p><p class="simpara"> The <code class="literal">VolumeSnapshotContentClass</code> CRD is not namespaced and is for use by a cluster administrator to enable global configuration options for their storage back end. </p></dd></dl></div></section></section><section class="section" id="persistent-storage-csi-snapshots-provision_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h4 class="title">5.3.4. Volume snapshot provisioning</h4></div></div></div><p> There are two ways to provision snapshots: dynamically and manually. </p><section class="section" id="snapshots-dynamic-provisioning_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h5 class="title">5.3.4.1. Dynamic provisioning</h5></div></div></div><p> Instead of using a preexisting snapshot, you can request that a snapshot be taken dynamically from a persistent volume claim. Parameters are specified using a <code class="literal">VolumeSnapshotClass</code> CRD. </p></section><section class="section" id="snapshots-manual-provisioning_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h5 class="title">5.3.4.2. Manual provisioning</h5></div></div></div><p> As a cluster administrator, you can manually pre-provision a number of <code class="literal">VolumeSnapshotContent</code> objects. These carry the real volume snapshot details available to cluster users. </p></section></section><section class="section" id="persistent-storage-csi-snapshots-create_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h4 class="title">5.3.5. Creating a volume snapshot</h4></div></div></div><p> When you create a <code class="literal">VolumeSnapshot</code> object, OpenShift Container Platform creates a volume snapshot. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> Logged in to a running OpenShift Container Platform cluster. </li><li class="listitem"> A PVC created using a CSI driver that supports <code class="literal">VolumeSnapshot</code> objects. </li><li class="listitem"> A storage class to provision the storage back end. </li><li class="listitem"><p class="simpara"> No pods are using the persistent volume claim (PVC) that you want to take a snapshot of. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Do not create a volume snapshot of a PVC if a pod is using it. Doing so might cause data corruption because the PVC is not quiesced (paused). Be sure to first tear down a running pod to ensure consistent snapshots. </p></div></rh-alert></li></ul></div><div class="formalpara"><p class="title"><strong>Procedure</strong></p><p> To dynamically create a volume snapshot: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a file with the <code class="literal">VolumeSnapshotClass</code> object described by the following YAML: </p><div class="formalpara"><p class="title"><strong>volumesnapshotclass.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-hostpath-snap driver: hostpath.csi.k8s.io <span id="CO41-1"><!--Empty--></span><span class="callout">1</span> deletionPolicy: Delete</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO41-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the CSI driver that is used to create snapshots of this <code class="literal">VolumeSnapshotClass</code> object. The name must be the same as the <code class="literal">Provisioner</code> field of the storage class that is responsible for the PVC that is being snapshotted. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the object you saved in the previous step by entering the following command: </p><pre class="programlisting language-terminal">$ oc create -f volumesnapshotclass.yaml</pre></li><li class="listitem"><p class="simpara"> Create a <code class="literal">VolumeSnapshot</code> object: </p><div class="formalpara"><p class="title"><strong>volumesnapshot-dynamic.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: mysnap spec: volumeSnapshotClassName: csi-hostpath-snap <span id="CO42-1"><!--Empty--></span><span class="callout">1</span> source: persistentVolumeClaimName: myclaim <span id="CO42-2"><!--Empty--></span><span class="callout">2</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO42-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The request for a particular class by the volume snapshot. If the <code class="literal">volumeSnapshotClassName</code> setting is absent and there is a default volume snapshot class, a snapshot is created with the default volume snapshot class name. But if the field is absent and no default volume snapshot class exists, then no snapshot is created. </div></dd><dt><a href="#CO42-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The name of the <code class="literal">PersistentVolumeClaim</code> object bound to a persistent volume. This defines what you want to create a snapshot of. Required for dynamically provisioning a snapshot. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the object you saved in the previous step by entering the following command: </p><pre class="programlisting language-terminal">$ oc create -f volumesnapshot-dynamic.yaml</pre></li></ol></div><p> To manually provision a snapshot: </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Provide a value for the <code class="literal">volumeSnapshotContentName</code> parameter as the source for the snapshot, in addition to defining volume snapshot class as shown above. </p><div class="formalpara"><p class="title"><strong>volumesnapshot-manual.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-demo spec: source: volumeSnapshotContentName: mycontent <span id="CO43-1"><!--Empty--></span><span class="callout">1</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO43-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The <code class="literal">volumeSnapshotContentName</code> parameter is required for pre-provisioned snapshots. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the object you saved in the previous step by entering the following command: </p><pre class="programlisting language-terminal">$ oc create -f volumesnapshot-manual.yaml</pre></li></ol></div><div class="formalpara"><p class="title"><strong>Verification</strong></p><p> After the snapshot has been created in the cluster, additional details about the snapshot are available. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> To display details about the volume snapshot that was created, enter the following command: </p><pre class="programlisting language-terminal">$ oc describe volumesnapshot mysnap</pre><p class="simpara"> The following example displays details about the <code class="literal">mysnap</code> volume snapshot: </p><div class="formalpara"><p class="title"><strong>volumesnapshot.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: mysnap spec: source: persistentVolumeClaimName: myclaim volumeSnapshotClassName: csi-hostpath-snap status: boundVolumeSnapshotContentName: snapcontent-1af4989e-a365-4286-96f8-d5dcd65d78d6 <span id="CO44-1"><!--Empty--></span><span class="callout">1</span> creationTime: "2020-01-29T12:24:30Z" <span id="CO44-2"><!--Empty--></span><span class="callout">2</span> readyToUse: true <span id="CO44-3"><!--Empty--></span><span class="callout">3</span> restoreSize: 500Mi</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO44-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The pointer to the actual storage content that was created by the controller. </div></dd><dt><a href="#CO44-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The time when the snapshot was created. The snapshot contains the volume content that was available at this indicated time. </div></dd><dt><a href="#CO44-3"><span class="callout">3</span></a> </dt><dd><div class="para"> If the value is set to <code class="literal">true</code>, the snapshot can be used to restore as a new PVC. <br> If the value is set to <code class="literal">false</code>, the snapshot was created. However, the storage back end needs to perform additional tasks to make the snapshot usable so that it can be restored as a new volume. For example, Amazon Elastic Block Store data might be moved to a different, less expensive location, which can take several minutes. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> To verify that the volume snapshot was created, enter the following command: </p><pre class="programlisting language-terminal">$ oc get volumesnapshotcontent</pre><p class="simpara"> The pointer to the actual content is displayed. If the <code class="literal">boundVolumeSnapshotContentName</code> field is populated, a <code class="literal">VolumeSnapshotContent</code> object exists and the snapshot was created. </p></li><li class="listitem"> To verify that the snapshot is ready, confirm that the <code class="literal">VolumeSnapshot</code> object has <code class="literal">readyToUse: true</code>. </li></ol></div></section><section class="section" id="persistent-storage-csi-snapshots-delete_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h4 class="title">5.3.6. Deleting a volume snapshot</h4></div></div></div><p> You can configure how OpenShift Container Platform deletes volume snapshots. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Specify the deletion policy that you require in the <code class="literal">VolumeSnapshotClass</code> object, as shown in the following example: </p><div class="formalpara"><p class="title"><strong>volumesnapshotclass.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-hostpath-snap driver: hostpath.csi.k8s.io deletionPolicy: Delete <span id="CO45-1"><!--Empty--></span><span class="callout">1</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO45-1"><span class="callout">1</span></a> </dt><dd><div class="para"> When deleting the volume snapshot, if the <code class="literal">Delete</code> value is set, the underlying snapshot is deleted along with the <code class="literal">VolumeSnapshotContent</code> object. If the <code class="literal">Retain</code> value is set, both the underlying snapshot and <code class="literal">VolumeSnapshotContent</code> object remain. <br> If the <code class="literal">Retain</code> value is set and the <code class="literal">VolumeSnapshot</code> object is deleted without deleting the corresponding <code class="literal">VolumeSnapshotContent</code> object, the content remains. The snapshot itself is also retained in the storage back end. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Delete the volume snapshot by entering the following command: </p><pre class="programlisting language-terminal">$ oc delete volumesnapshot &lt;volumesnapshot_name&gt;</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">volumesnapshot.snapshot.storage.k8s.io "mysnapshot" deleted</pre> <p></p></div></li><li class="listitem"><p class="simpara"> If the deletion policy is set to <code class="literal">Retain</code>, delete the volume snapshot content by entering the following command: </p><pre class="programlisting language-terminal">$ oc delete volumesnapshotcontent &lt;volumesnapshotcontent_name&gt;</pre></li><li class="listitem"><p class="simpara"> Optional: If the <code class="literal">VolumeSnapshot</code> object is not successfully deleted, enter the following command to remove any finalizers for the leftover resource so that the delete operation can continue: </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Only remove the finalizers if you are confident that there are no existing references from either persistent volume claims or volume snapshot contents to the <code class="literal">VolumeSnapshot</code> object. Even with the <code class="literal">--force</code> option, the delete operation does not delete snapshot objects until all finalizers are removed. </p></div></rh-alert><pre class="programlisting language-terminal">$ oc patch -n $PROJECT volumesnapshot/$NAME --type=merge -p '{"metadata": {"finalizers":null}}'</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">volumesnapshotclass.snapshot.storage.k8s.io "csi-ocs-rbd-snapclass" deleted</pre> <p></p></div><p class="simpara"> The finalizers are removed and the volume snapshot is deleted. </p></li></ol></div></section><section class="section" id="persistent-storage-csi-snapshots-restore_persistent-storage-csi-snapshots"><div class="titlepage"><div><div><h4 class="title">5.3.7. Restoring a volume snapshot</h4></div></div></div><p> The <code class="literal">VolumeSnapshot</code> CRD content can be used to restore the existing volume to a previous state. </p><p> After your <code class="literal">VolumeSnapshot</code> CRD is bound and the <code class="literal">readyToUse</code> value is set to <code class="literal">true</code>, you can use that resource to provision a new volume that is pre-populated with data from the snapshot. .Prerequisites * Logged in to a running OpenShift Container Platform cluster. * A persistent volume claim (PVC) created using a Container Storage Interface (CSI) driver that supports volume snapshots. * A storage class to provision the storage back end. * A volume snapshot has been created and is ready to use. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Specify a <code class="literal">VolumeSnapshot</code> data source on a PVC as shown in the following: </p><div class="formalpara"><p class="title"><strong>pvc-restore.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myclaim-restore spec: storageClassName: csi-hostpath-sc dataSource: name: mysnap <span id="CO46-1"><!--Empty--></span><span class="callout">1</span> kind: VolumeSnapshot <span id="CO46-2"><!--Empty--></span><span class="callout">2</span> apiGroup: snapshot.storage.k8s.io <span id="CO46-3"><!--Empty--></span><span class="callout">3</span> accessModes: - ReadWriteOnce resources: requests: storage: 1Gi</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO46-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Name of the <code class="literal">VolumeSnapshot</code> object representing the snapshot to use as source. </div></dd><dt><a href="#CO46-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Must be set to the <code class="literal">VolumeSnapshot</code> value. </div></dd><dt><a href="#CO46-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Must be set to the <code class="literal">snapshot.storage.k8s.io</code> value. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create a PVC by entering the following command: </p><pre class="programlisting language-terminal">$ oc create -f pvc-restore.yaml</pre></li><li class="listitem"><p class="simpara"> Verify that the restored PVC has been created by entering the following command: </p><pre class="programlisting language-terminal">$ oc get pvc</pre><p class="simpara"> A new PVC such as <code class="literal">myclaim-restore</code> is displayed. </p></li></ol></div></section></section><section class="section" id="persistent-storage-csi-cloning"><div class="titlepage"><div><div><h3 class="title">5.4. CSI volume cloning</h3></div></div></div><p> Volume cloning duplicates an existing persistent volume to help protect against data loss in OpenShift Container Platform. This feature is only available with supported Container Storage Interface (CSI) drivers. You should be familiar with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-volumes_understanding-persistent-storage">persistent volumes</a> before you provision a CSI volume clone. </p><section class="section" id="persistent-storage-csi-cloning-overview_persistent-storage-csi-cloning"><div class="titlepage"><div><div><h4 class="title">5.4.1. Overview of CSI volume cloning</h4></div></div></div><p> A Container Storage Interface (CSI) volume clone is a duplicate of an existing persistent volume at a particular point in time. </p><p> Volume cloning is similar to volume snapshots, although it is more efficient. For example, a cluster administrator can duplicate a cluster volume by creating another instance of the existing cluster volume. </p><p> Cloning creates an exact duplicate of the specified volume on the back-end device, rather than creating a new empty volume. After dynamic provisioning, you can use a volume clone just as you would use any standard volume. </p><p> No new API objects are required for cloning. The existing <code class="literal">dataSource</code> field in the <code class="literal">PersistentVolumeClaim</code> object is expanded so that it can accept the name of an existing PersistentVolumeClaim in the same namespace. </p><section class="section" id="support-limitations-2"><div class="titlepage"><div><div><h5 class="title">5.4.1.1. Support limitations</h5></div></div></div><p> By default, OpenShift Container Platform supports CSI volume cloning with these limitations: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The destination persistent volume claim (PVC) must exist in the same namespace as the source PVC. </li><li class="listitem"> The source and destination storage class must be the same. </li><li class="listitem"> Support is only available for CSI drivers. In-tree and FlexVolumes are not supported. </li><li class="listitem"> CSI drivers might not have implemented the volume cloning functionality. For details, see the CSI driver documentation. </li></ul></div></section></section><section class="section" id="persistent-storage-csi-cloning-provisioning_persistent-storage-csi-cloning"><div class="titlepage"><div><div><h4 class="title">5.4.2. Provisioning a CSI volume clone</h4></div></div></div><p> When you create a cloned persistent volume claim (PVC) API object, you trigger the provisioning of a CSI volume clone. The clone pre-populates with the contents of another PVC, adhering to the same rules as any other persistent volume. The one exception is that you must add a <code class="literal">dataSource</code> that references an existing PVC in the same namespace. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You are logged in to a running OpenShift Container Platform cluster. </li><li class="listitem"> Your PVC is created using a CSI driver that supports volume cloning. </li><li class="listitem"> Your storage back end is configured for dynamic provisioning. Cloning support is not available for static provisioners. </li></ul></div><div class="formalpara"><p class="title"><strong>Procedure</strong></p><p> To clone a PVC from an existing PVC: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create and save a file with the <code class="literal">PersistentVolumeClaim</code> object described by the following YAML: </p><div class="formalpara"><p class="title"><strong>pvc-clone.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-1-clone namespace: mynamespace spec: storageClassName: csi-cloning <span id="CO47-1"><!--Empty--></span><span class="callout">1</span> accessModes: - ReadWriteOnce resources: requests: storage: 5Gi dataSource: kind: PersistentVolumeClaim name: pvc-1</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO47-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the storage class that provisions the storage back end. The default storage class can be used and <code class="literal">storageClassName</code> can be omitted in the spec. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the object you saved in the previous step by running the following command: </p><pre class="programlisting language-terminal">$ oc create -f pvc-clone.yaml</pre><p class="simpara"> A new PVC <code class="literal">pvc-1-clone</code> is created. </p></li><li class="listitem"><p class="simpara"> Verify that the volume clone was created and is ready by running the following command: </p><pre class="programlisting language-terminal">$ oc get pvc pvc-1-clone</pre><p class="simpara"> The <code class="literal">pvc-1-clone</code> shows that it is <code class="literal">Bound</code>. </p><p class="simpara"> You are now ready to use the newly cloned PVC to configure a pod. </p></li><li class="listitem"><p class="simpara"> Create and save a file with the <code class="literal">Pod</code> object described by the YAML. For example: </p><pre class="programlisting language-yaml">kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: myfrontend image: dockerfile/nginx volumeMounts: - mountPath: "/var/www/html" name: mypd volumes: - name: mypd persistentVolumeClaim: claimName: pvc-1-clone <span id="CO48-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO48-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The cloned PVC created during the CSI volume cloning operation. </div></dd></dl></div><p class="simpara"> The created <code class="literal">Pod</code> object is now ready to consume, clone, snapshot, or delete your cloned PVC independently of its original <code class="literal">dataSource</code> PVC. </p></li></ol></div></section></section><section class="section" id="persistent-storage-csi-migration"><div class="titlepage"><div><div><h3 class="title">5.5. CSI automatic migration</h3></div></div></div><p> OpenShift Container Platform provides automatic migration for supported in-tree volume plugins to their equivalent Container Storage Interface (CSI) drivers. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> CSI automatic migration 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><section class="section" id="persistent-storage-csi-migration-overview_persistent-storage-csi-migration"><div class="titlepage"><div><div><h4 class="title">5.5.1. Overview</h4></div></div></div><p> With the automatic migration feature enabled, volumes provisioned using in-tree storage plugins supported by this feature are migrated to their counterpart CSI drivers. </p><p> The following drivers are supported: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Amazon Web Services (AWS) Elastic Block Storage (EBS) </li><li class="listitem"> OpenStack Cinder </li></ul></div><p> CSI automatic migration should be seamless. Enabling this feature does not change how you use all existing API objects (for example, <code class="literal">PersistentVolumes</code>, <code class="literal">PersistentVolumeClaims</code>, and <code class="literal">StorageClasses</code>). </p><p> By default, automatic migration is disabled. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> CSI automatic migration will be enabled by default in a future OpenShift Container Platform release, so it is highly recommended that you test it now and report any issues. </p></div></rh-alert></section><section class="section" id="persistent-storage-csi-migration-enable_persistent-storage-csi-migration"><div class="titlepage"><div><div><h4 class="title">5.5.2. Enabling CSI automatic migration</h4></div></div></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Enabling CSI automatic migration drains, and then restarts, all nodes in the cluster in sequence. This might take some time. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Enable feature gates (see <span class="emphasis"><em>Nodes → Working with clusters → Enabling features using feature gates</em></span>). </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> After turning on Technology Preview features using feature gates, they cannot be turned off. As a result, cluster upgrades are prevented. </p></div></rh-alert><p class="simpara"> The following configuration example enables CSI automatic migration to both CSI drivers (AWS EBS and Cinder): </p><pre class="programlisting language-yaml">apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster spec: featureSet: TechPreviewNoUpgrade <span id="CO49-1"><!--Empty--></span><span class="callout">1</span> ...</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO49-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Enables automatic migration for AWS EBS and Cinder. </div></dd></dl></div><p class="simpara"> You can specify CSI automatic migration for a selected CSI driver by setting <code class="literal">CustomNoUpgrade</code> <code class="literal">featureSet</code> and for <code class="literal">featuregates</code> either: </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> CSIMigrationAWS </li><li class="listitem"> CSIMigrationOpenStack </li></ul></div><p class="simpara"> The following configuration example enables automatic migration to the AWS EBS CSI driver only: </p><pre class="programlisting language-yaml">apiVersion: config.openshift.io/v1 kind: FeatureGate metadata: name: cluster spec: featureSet: CustomNoUpgrade customNoUpgrade: enabled: - CSIMigrationAWS <span id="CO50-1"><!--Empty--></span><span class="callout">1</span> ...</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO50-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Enables automatic migration for AWS EBS only. </div></dd></dl></div></li></ul></div></section><section class="section _additional-resources" id="additional-resources"><div class="titlepage"><div><div><h4 class="title">5.5.3. Additional resources</h4></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/nodes/#nodes-cluster-enabling">Enabling features using feature gates</a> </li></ul></div></section></section><section class="section" id="persistent-storage-csi-ebs"><div class="titlepage"><div><div><h3 class="title">5.6. AWS Elastic Block Store CSI Driver Operator</h3></div></div></div><section class="section" id="overview"><div class="titlepage"><div><div><h4 class="title">5.6.1. Overview</h4></div></div></div><p> OpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for AWS Elastic Block Store (EBS). </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> AWS EBS CSI Driver Operator 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><p> Familiarity with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage">persistent storage</a> and <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">configuring CSI volumes</a> is recommended when working with a Container Storage Interface (CSI) Operator and driver. </p><p> To create CSI-provisioned PVs that mount to AWS EBS storage assets, OpenShift Container Platform installs the AWS EBS CSI Driver Operator and the AWS EBS CSI driver by default in the <code class="literal">openshift-cluster-csi-drivers</code> namespace. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The <span class="emphasis"><em>AWS EBS CSI Driver Operator</em></span> provides a StorageClass by default that you can use to create PVCs. You also have the option to create the AWS EBS StorageClass as described in <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-aws">Persistent storage using AWS Elastic Block Store</a>. </li><li class="listitem"> The <span class="emphasis"><em>AWS EBS CSI driver</em></span> enables you to create and mount AWS EBS PVs. </li></ul></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> If you installed the AWS EBS CSI Operator and driver on a OpenShift Container Platform 4.5 cluster, you must uninstall the 4.5 Operator and driver before you update to OpenShift Container Platform 4.8. </p></div></rh-alert></section><section class="section" id="csi-about_persistent-storage-csi-ebs"><div class="titlepage"><div><div><h4 class="title">5.6.2. About CSI</h4></div></div></div><p> Storage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code. </p><p> CSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision AWS EBS storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert><p> For information about dynamically provisioning AWS EBS persistent volumes in OpenShift Container Platform, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-aws">Persistent storage using AWS Elastic Block Store</a>. </p><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-aws">Persistent storage using AWS Elastic Block Store</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">Configuring CSI volumes</a> </li></ul></div></section></section><section class="section" id="persistent-storage-csi-azure-disk"><div class="titlepage"><div><div><h3 class="title">5.7. Azure Disk CSI Driver Operator</h3></div></div></div><section class="section" id="overview-2"><div class="titlepage"><div><div><h4 class="title">5.7.1. Overview</h4></div></div></div><p> OpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for Microsoft Azure Disk Storage. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Azure Disk CSI Driver Operator 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><p> Familiarity with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage">persistent storage</a> and <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">configuring CSI volumes</a> is recommended when working with a CSI Operator and driver. </p><p> To create CSI-provisioned PVs that mount to Azure Disk storage assets with this feature is enabled, OpenShift Container Platform installs the Azure Disk CSI Driver Operator and the Azure Disk CSI driver by default in the <code class="literal">openshift-cluster-csi-drivers</code> namespace. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The <span class="emphasis"><em>Azure Disk CSI Driver Operator</em></span>, after being enabled, provides a storage class named <code class="literal">managed-csi</code> that you can use to create persistent volume claims (PVCs). The Azure Disk CSI Driver Operator supports dynamic volume provisioning by allowing storage volumes to be created on-demand, eliminating the need for cluster administrators to pre-provision storage. </li><li class="listitem"> The <span class="emphasis"><em>Azure Disk CSI driver</em></span> enables you to create and mount Azure Disk PVs. </li></ul></div></section><section class="section" id="csi-about_persistent-storage-csi-azure"><div class="titlepage"><div><div><h4 class="title">5.7.2. About CSI</h4></div></div></div><p> Storage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code. </p><p> CSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision Azure Disk storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in later versions of OpenShift Container Platform. </p></div></rh-alert></section><section class="section" id="csi-tp-enable_persistent-storage-csi-azure"><div class="titlepage"><div><div><h4 class="title">5.7.3. Enabling the Azure CSI Driver Operator</h4></div></div></div><p> To enable the Azure Container Storage Interface (CSI) Driver Operator, you must enable feature gates with the <code class="literal">TechPreviewNoUpgrade</code> feature set. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Enable feature gates with the <code class="literal">TechPreviewNoUpgrade</code> feature set (see <span class="emphasis"><em>Nodes</em></span> → <span class="emphasis"><em>Enabling features using feature gates</em></span>). </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> After turning Technology Preview features on by using feature gates, they cannot be turned off and cluster upgrades are prevented. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Verify the cluster operator storage: </p><pre class="programlisting language-terminal">$ oc get co storage</pre><pre class="programlisting language-terminal">NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE storage 4.8.0-0.nightly-2021-04-30-201824 True False False 4h26m</pre><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <code class="literal">AVAILABLE</code> should be "True". </li><li class="listitem"> <code class="literal">PROGRESSING</code> should be "False". </li><li class="listitem"> <code class="literal">DEGRADED</code> should be "False". </li></ul></div></li><li class="listitem"><p class="simpara"> Verify the status of the pods in the <code class="literal">openshift-cluster-csi-drivers</code> namespace to ensure that they are running: </p><pre class="programlisting language-terminal">$ oc get pod -n openshift-cluster-csi-drivers</pre><pre class="programlisting language-terminal">NAME READY STATUS RESTARTS AGE azure-disk-csi-driver-controller-5949bf45fd-pm4qb 11/11 Running 0 39m azure-disk-csi-driver-node-2tcxr 3/3 Running 0 53m azure-disk-csi-driver-node-2xjzm 3/3 Running 0 53m azure-disk-csi-driver-node-6wrgk 3/3 Running 0 53m azure-disk-csi-driver-node-frvx2 3/3 Running 0 53m azure-disk-csi-driver-node-lf5kb 3/3 Running 0 53m azure-disk-csi-driver-node-mqdhh 3/3 Running 0 53m azure-disk-csi-driver-operator-7d966fc6c5-x74x5 1/1 Running 0 44m</pre></li><li class="listitem"><p class="simpara"> Verify that the storage class is installed: </p><pre class="programlisting language-terminal">$ oc get storageclass</pre><pre class="programlisting language-terminal">NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-premium (default) kubernetes.io/azure-disk Delete WaitForFirstConsumer true 76m managed-csi disk.csi.azure.com Delete WaitForFirstConsumer true 51m <span id="CO51-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO51-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Azure storage class </div></dd></dl></div></li></ol></div><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-using-azure">Persistent storage using Azure Disk</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">Configuring CSI volumes</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/nodes/#">Enabling features using feature gates</a> </li></ul></div></section></section><section class="section" id="persistent-storage-csi-gcp-pd"><div class="titlepage"><div><div><h3 class="title">5.8. GCP PD CSI Driver Operator</h3></div></div></div><section class="section" id="overview-3"><div class="titlepage"><div><div><h4 class="title">5.8.1. Overview</h4></div></div></div><p> OpenShift Container Platform can provision persistent volumes (PVs) using the Container Storage Interface (CSI) driver for Google Cloud Platform (GCP) persistent disk (PD) storage. </p><p> Familiarity with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage">persistent storage</a> and <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">configuring CSI volumes</a> is recommended when working with a Container Storage Interface (CSI) Operator and driver. </p><p> To create CSI-provisioned persistent volumes (PVs) that mount to GCP PD storage assets, OpenShift Container Platform installs the GCP PD CSI Driver Operator and the GCP PD CSI driver by default in the <code class="literal">openshift-cluster-csi-drivers</code> namespace. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <span class="strong strong"><strong>GCP PD CSI Driver Operator</strong></span>: By default, the Operator provides a storage class that you can use to create PVCs. You also have the option to create the GCP PD storage class as described in <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-using-gce">Persistent storage using GCE Persistent Disk</a>. </li><li class="listitem"> <span class="strong strong"><strong>GCP PD driver</strong></span>: The driver enables you to create and mount GCP PD PVs. </li></ul></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision GCP PD storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert></section><section class="section" id="csi-about_persistent-storage-csi-gcp-pd"><div class="titlepage"><div><div><h4 class="title">5.8.2. About CSI</h4></div></div></div><p> Storage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code. </p><p> CSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins. </p></section><section class="section" id="persistent-storage-csi-gcp-pd-storage-class-ref_persistent-storage-csi-gcp-pd"><div class="titlepage"><div><div><h4 class="title">5.8.3. GCP PD CSI driver storage class parameters</h4></div></div></div><p> The Google Cloud Platform (GCP) persistent disk (PD) Container Storage Interface (CSI) driver uses the CSI <code class="literal">external-provisioner</code> sidecar as a controller. This is a separate helper container that is deployed with the CSI driver. The sidecar manages persistent volumes (PVs) by triggering the <code class="literal">CreateVolume</code> operation. </p><p> The GCP PD CSI driver uses the <code class="literal">csi.storage.k8s.io/fstype</code> parameter key to support dynamic provisioning. The following table describes all the GCP PD CSI storage class parameters that are supported by OpenShift Container Platform. </p><rh-table id="idm140708982650992"><table class="gt-4-cols lt-7-rows"><caption>Table 5.2. CreateVolume Parameters</caption><colgroup><col style="width: 18%; " class="col_1"><!--Empty--><col style="width: 27%; " class="col_2"><!--Empty--><col style="width: 18%; " class="col_3"><!--Empty--><col style="width: 36%; " class="col_4"><!--Empty--></colgroup><thead><tr><th align="left" valign="top" id="idm140708983420736" scope="col">Parameter</th><th align="left" valign="top" id="idm140708983419648" scope="col">Values</th><th align="left" valign="top" id="idm140708983418560" scope="col">Default</th><th align="left" valign="top" id="idm140708983417472" scope="col">Description</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708983420736"> <p> <code class="literal">type</code> </p> </td><td align="left" valign="top" headers="idm140708983419648"> <p> <code class="literal">pd-ssd</code> or <code class="literal">pd-standard</code> </p> </td><td align="left" valign="top" headers="idm140708983418560"> <p> <code class="literal">pd-standard</code> </p> </td><td align="left" valign="top" headers="idm140708983417472"> <p> Allows you to choose between standard PVs or solid-state-drive PVs. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708983420736"> <p> <code class="literal">replication-type</code> </p> </td><td align="left" valign="top" headers="idm140708983419648"> <p> <code class="literal">none</code> or <code class="literal">regional-pd</code> </p> </td><td align="left" valign="top" headers="idm140708983418560"> <p> <code class="literal">none</code> </p> </td><td align="left" valign="top" headers="idm140708983417472"> <p> Allows you to choose between zonal or regional PVs. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708983420736"> <p> <code class="literal">disk-encryption-kms-key</code> </p> </td><td align="left" valign="top" headers="idm140708983419648"> <p> Fully qualified resource identifier for the key to use to encrypt new disks. </p> </td><td align="left" valign="top" headers="idm140708983418560"> <p> Empty string </p> </td><td align="left" valign="top" headers="idm140708983417472"> <p> Uses customer-managed encryption keys (CMEK) to encrypt new disks. </p> </td></tr></tbody></table></rh-table></section><section class="section" id="persistent-storage-csi-gcp-pd-encrypted-pv_persistent-storage-csi-gcp-pd"><div class="titlepage"><div><div><h4 class="title">5.8.4. Creating a custom-encrypted persistent volume</h4></div></div></div><p> When you create a <code class="literal">PersistentVolumeClaim</code> object, OpenShift Container Platform provisions a new persistent volume (PV) and creates a <code class="literal">PersistentVolume</code> object. You can add a custom encryption key in Google Cloud Platform (GCP) to protect a PV in your cluster by encrypting the newly created PV. </p><p> For encryption, the newly attached PV that you create uses customer-managed encryption keys (CMEK) on a cluster by using a new or existing Google Cloud Key Management Service (KMS) key. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You are logged in to a running OpenShift Container Platform cluster. </li><li class="listitem"> You have created a Cloud KMS key ring and key version. </li></ul></div><p> For more information about CMEK and Cloud KMS resources, see <a class="link" href="https://cloud.google.com/kubernetes-engine/docs/how-to/using-cmek">Using customer-managed encryption keys (CMEK)</a>. </p><div class="formalpara"><p class="title"><strong>Procedure</strong></p><p> To create a custom-encrypted PV, complete the following steps: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create a storage class with the Cloud KMS key. The following example enables dynamic provisioning of encrypted volumes: </p><pre class="programlisting language-yaml">apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-gce-pd-cmek provisioner: pd.csi.storage.gke.io volumeBindingMode: "WaitForFirstConsumer" allowVolumeExpansion: true parameters: type: pd-standard disk-encryption-kms-key: projects/&lt;key-project-id&gt;/locations/&lt;location&gt;/keyRings/&lt;key-ring&gt;/cryptoKeys/&lt;key&gt; <span id="CO52-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO52-1"><span class="callout">1</span></a> </dt><dd><div class="para"> This field must be the resource identifier for the key that will be used to encrypt new disks. Values are case-sensitive. For more information about providing key ID values, see <a class="link" href="https://cloud.google.com/kms/docs/resource-hierarchy#retrieve_resource_id">Retrieving a resource’s ID</a> and <a class="link" href="https://cloud.google.com/kms/docs/getting-resource-ids">Getting a Cloud KMS resource ID</a>. </div></dd></dl></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> You cannot add the <code class="literal">disk-encryption-kms-key</code> parameter to an existing storage class. However, you can delete the storage class and recreate it with the same name and a different set of parameters. If you do this, the provisioner of the existing class must be <code class="literal">pd.csi.storage.gke.io</code>. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Deploy the storage class on your OpenShift Container Platform cluster using the <code class="literal">oc</code> command: </p><pre class="programlisting language-terminal">$ oc describe storageclass csi-gce-pd-cmek</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">Name: csi-gce-pd-cmek IsDefaultClass: No Annotations: None Provisioner: pd.csi.storage.gke.io Parameters: disk-encryption-kms-key=projects/key-project-id/locations/location/keyRings/ring-name/cryptoKeys/key-name,type=pd-standard AllowVolumeExpansion: true MountOptions: none ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: none</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Create a file named <code class="literal">pvc.yaml</code> that matches the name of your storage class object that you created in the previous step: </p><pre class="programlisting language-yaml">kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: csi-gce-pd-cmek resources: requests: storage: 6Gi</pre><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> If you marked the new storage class as default, you can omit the <code class="literal">storageClassName</code> field. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Apply the PVC on your cluster: </p><pre class="programlisting language-terminal">$ oc apply -f pvc.yaml</pre></li><li class="listitem"><p class="simpara"> Get the status of your PVC and verify that it is created and bound to a newly provisioned PV: </p><pre class="programlisting language-terminal">$ oc get pvc</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE podpvc Bound pvc-e36abf50-84f3-11e8-8538-42010a800002 10Gi RWO csi-gce-pd-cmek 9s</pre> <p></p></div><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> If your storage class has the <code class="literal">volumeBindingMode</code> field set to <code class="literal">WaitForFirstConsumer</code>, you must create a pod to use the PVC before you can verify it. </p></div></rh-alert></li></ol></div><p> Your CMEK-protected PV is now ready to use with your OpenShift Container Platform cluster. </p><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-using-gce">Persistent storage using GCE Persistent Disk</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">Configuring CSI volumes</a> </li></ul></div></section></section><section class="section" id="persistent-storage-csi-cinder"><div class="titlepage"><div><div><h3 class="title">5.9. OpenStack Cinder CSI Driver Operator</h3></div></div></div><section class="section" id="overview-4"><div class="titlepage"><div><div><h4 class="title">5.9.1. Overview</h4></div></div></div><p> OpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for OpenStack Cinder. </p><p> Familiarity with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage">persistent storage</a> and <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">configuring CSI volumes</a> is recommended when working with a Container Storage Interface (CSI) Operator and driver. </p><p> To create CSI-provisioned PVs that mount to OpenStack Cinder storage assets, OpenShift Container Platform installs the OpenStack Cinder CSI Driver Operator and the OpenStack Cinder CSI driver in the <code class="literal">openshift-cluster-csi-drivers</code> namespace. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The <span class="emphasis"><em>OpenStack Cinder CSI Driver Operator</em></span> provides a CSI storage class that you can use to create PVCs. </li><li class="listitem"> The <span class="emphasis"><em>OpenStack Cinder CSI driver</em></span> enables you to create and mount OpenStack Cinder PVs. </li></ul></div><p> For OpenShift Container Platform, automatic migration from OpenStack Cinder in-tree to the CSI driver is available as a Technology Preview (TP) feature. With migration enabled, volumes provisioned using the existing in-tree plugin are automatically migrated to use the OpenStack Cinder CSI driver. For more information, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration feature</a>. </p></section><section class="section" id="csi-about_persistent-storage-csi-cinder"><div class="titlepage"><div><div><h4 class="title">5.9.2. About CSI</h4></div></div></div><p> Storage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code. </p><p> CSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision Cinder storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert></section><section class="section" id="persistent-storage-csi-cinder_persistent-storage-csi-cinder"><div class="titlepage"><div><div><h4 class="title">5.9.3. Making OpenStack Cinder CSI the default storage class</h4></div></div></div><p> The OpenStack Cinder CSI driver uses the <code class="literal">cinder.csi.openstack.org</code> parameter key to support dynamic provisioning. </p><p> To enable OpenStack Cinder CSI provisioning in OpenShift Container Platform, it is recommended that you overwrite the default in-tree storage class with <code class="literal">standard-csi</code>. Alternatively, you can create the persistent volume claim (PVC) and specify the storage class as "standard-csi". </p><p> In OpenShift Container Platform, the default storage class references the in-tree Cinder driver. However, with CSI automatic migration enabled, volumes created using the default storage class actually use the CSI driver. </p><div class="formalpara"><p class="title"><strong>Procedure</strong></p><p> Use the following steps to apply the <code class="literal">standard-csi</code> storage class by overwriting the default in-tree storage class. </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> List the storage class: </p><pre class="programlisting language-terminal">$ oc get storageclass</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE standard(default) cinder.csi.openstack.org Delete WaitForFirstConsumer true 46h standard-csi kubernetes.io/cinder Delete WaitForFirstConsumer true 46h</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Change the value of the annotation <code class="literal">storageclass.kubernetes.io/is-default-class</code> to <code class="literal">false</code> for the default storage class, as shown in the following example: </p><pre class="programlisting language-terminal">$ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'</pre></li><li class="listitem"><p class="simpara"> Make another storage class the default by adding or modifying the annotation as <code class="literal">storageclass.kubernetes.io/is-default-class=true</code>. </p><pre class="programlisting language-terminal">$ oc patch storageclass standard-csi -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'</pre></li><li class="listitem"><p class="simpara"> Verify that the PVC is now referencing the CSI storage class by default: </p><pre class="programlisting language-terminal">$ oc get storageclass</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE standard kubernetes.io/cinder Delete WaitForFirstConsumer true 46h standard-csi(default) cinder.csi.openstack.org Delete WaitForFirstConsumer true 46h</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Optional: You can define a new PVC without having to specify the storage class: </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cinder-claim spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi</pre><p class="simpara"> A PVC that does not specify a specific storage class is automatically provisioned by using the default storage class. </p></li><li class="listitem"><p class="simpara"> Optional: After the new file has been configured, create it in your cluster: </p><pre class="programlisting language-terminal">$ oc create -f cinder-claim.yaml</pre></li></ol></div><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">Configuring CSI volumes</a> </li></ul></div></section></section><section class="section" id="persistent-storage-csi-manila"><div class="titlepage"><div><div><h3 class="title">5.10. OpenStack Manila CSI Driver Operator</h3></div></div></div><section class="section" id="overview-5"><div class="titlepage"><div><div><h4 class="title">5.10.1. Overview</h4></div></div></div><p> OpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for the <a class="link" href="https://wiki.openstack.org/wiki/Manila">OpenStack Manila</a> shared file system service. </p><p> Familiarity with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage">persistent storage</a> and <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">configuring CSI volumes</a> is recommended when working with a Container Storage Interface (CSI) Operator and driver. </p><p> To create CSI-provisioned PVs that mount to Manila storage assets, OpenShift Container Platform installs the Manila CSI Driver Operator and the Manila CSI driver by default on any OpenStack cluster that has the Manila service enabled. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The <span class="emphasis"><em>Manila CSI Driver Operator</em></span> creates the required storage class that is needed to create PVCs for all available Manila share types. The Operator is installed in the <code class="literal">openshift-cluster-csi-drivers</code> namespace. </li><li class="listitem"> The <span class="emphasis"><em>Manila CSI driver</em></span> enables you to create and mount Manila PVs. The driver is installed in the <code class="literal">openshift-manila-csi-driver</code> namespace. </li></ul></div></section><section class="section" id="csi-about_persistent-storage-csi-manila"><div class="titlepage"><div><div><h4 class="title">5.10.2. About CSI</h4></div></div></div><p> Storage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code. </p><p> CSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins. </p></section><section class="section" id="persistent-storage-csi-manila-limitations_persistent-storage-csi-manila"><div class="titlepage"><div><div><h4 class="title">5.10.3. Manila CSI Driver Operator limitations</h4></div></div></div><p> The following limitations apply to the Manila Container Storage Interface (CSI) Driver Operator: </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Only NFS is supported</span></dt><dd> OpenStack Manila supports many network-attached storage protocols, such as NFS, CIFS, and CEPHFS, and these can be selectively enabled in the OpenStack cloud. The Manila CSI Driver Operator in OpenShift Container Platform only supports using the NFS protocol. If NFS is not available and enabled in the underlying OpenStack cloud, you cannot use the Manila CSI Driver Operator to provision storage for OpenShift Container Platform. </dd><dt><span class="term">Snapshots are not supported if the back end is CephFS-NFS</span></dt><dd> To take snapshots of persistent volumes (PVs) and revert volumes to snapshots, you must ensure that the Manila share type that you are using supports these features. A Red Hat OpenStack administrator must enable support for snapshots (<code class="literal">share type extra-spec snapshot_support</code>) and for creating shares from snapshots (<code class="literal">share type extra-spec create_share_from_snapshot_support</code>) in the share type associated with the storage class you intend to use. </dd><dt><span class="term">FSGroups are not supported</span></dt><dd> Since Manila CSI provides shared file systems for access by multiple readers and multiple writers, it does not support the use of FSGroups. This is true even for persistent volumes created with the ReadWriteOnce access mode. It is therefore important not to specify the <code class="literal">fsType</code> attribute in any storage class that you manually create for use with Manila CSI Driver. </dd></dl></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> In Red Hat OpenStack Platform 16.x and 17.x, the Shared File Systems service (Manila) with CephFS through NFS fully supports serving shares to OpenShift Container Platform through the Manila CSI. However, this solution is not intended for massive scale. Be sure to review important recommendations in <a class="link" href="https://access.redhat.com/articles/6667651">CephFS NFS Manila-CSI Workload Recommendations for Red Hat OpenStack Platform</a>. </p></div></rh-alert></section><section class="section" id="persistent-storage-csi-manila-dynamic-provisioning_persistent-storage-csi-manila"><div class="titlepage"><div><div><h4 class="title">5.10.4. Dynamically provisioning Manila CSI volumes</h4></div></div></div><p> OpenShift Container Platform installs a storage class for each available Manila share type. </p><p> The YAML files that are created are completely decoupled from Manila and from its Container Storage Interface (CSI) plugin. As an application developer, you can dynamically provision ReadWriteMany (RWX) storage and deploy pods with applications that safely consume the storage using YAML manifests. </p><p> You can use the same pod and persistent volume claim (PVC) definitions on-premise that you use with OpenShift Container Platform on AWS, GCP, Azure, and other platforms, with the exception of the storage class reference in the PVC definition. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> Manila service is optional. If the service is not enabled in Red Hat OpenStack Platform (RHOSP), the Manila CSI driver is not installed and the storage classes for Manila are not created. </p></div></rh-alert><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> RHOSP is deployed with appropriate Manila share infrastructure so that it can be used to dynamically provision and mount volumes in OpenShift Container Platform. </li></ul></div><div class="formalpara"><p class="title"><strong>Procedure (UI)</strong></p><p> To dynamically create a Manila CSI volume using the web console: </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> In the OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Persistent Volume Claims</strong></span>. </li><li class="listitem"> In the persistent volume claims overview, click <span class="strong strong"><strong>Create Persistent Volume Claim</strong></span>. </li><li class="listitem"><p class="simpara"> Define the required options on the resulting page. </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> Select the appropriate storage class. </li><li class="listitem"> Enter a unique name for the storage claim. </li><li class="listitem"><p class="simpara"> Select the access mode to specify read and write access for the PVC you are creating. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Use RWX if you want the persistent volume (PV) that fulfills this PVC to be mounted to multiple pods on multiple nodes in the cluster. </p></div></rh-alert></li></ol></div></li><li class="listitem"> Define the size of the storage claim. </li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the persistent volume claim and generate a persistent volume. </li></ol></div><div class="formalpara"><p class="title"><strong>Procedure (CLI)</strong></p><p> To dynamically create a Manila CSI volume using the command-line interface (CLI): </p></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create and save a file with the <code class="literal">PersistentVolumeClaim</code> object described by the following YAML: </p><div class="formalpara"><p class="title"><strong>pvc-manila.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-manila spec: accessModes: <span id="CO53-1"><!--Empty--></span><span class="callout">1</span> - ReadWriteMany resources: requests: storage: 10Gi storageClassName: csi-manila-gold <span id="CO53-2"><!--Empty--></span><span class="callout">2</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO53-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Use RWX if you want the persistent volume (PV) that fulfills this PVC to be mounted to multiple pods on multiple nodes in the cluster. </div></dd><dt><a href="#CO53-2"><span class="callout">2</span></a> </dt><dd><div class="para"> The name of the storage class that provisions the storage back end. Manila storage classes are provisioned by the Operator and have the <code class="literal">csi-manila-</code> prefix. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the object you saved in the previous step by running the following command: </p><pre class="programlisting language-terminal">$ oc create -f pvc-manila.yaml</pre><p class="simpara"> A new PVC is created. </p></li><li class="listitem"><p class="simpara"> To verify that the volume was created and is ready, run the following command: </p><pre class="programlisting language-terminal">$ oc get pvc pvc-manila</pre><p class="simpara"> The <code class="literal">pvc-manila</code> shows that it is <code class="literal">Bound</code>. </p></li></ol></div><p> You can now use the new PVC to configure a pod. </p><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">Configuring CSI volumes</a> </li></ul></div></section></section><section class="section" id="persistent-storage-csi-ovirt"><div class="titlepage"><div><div><h3 class="title">5.11. Red Hat Virtualization CSI Driver Operator</h3></div></div></div><section class="section" id="overview-6"><div class="titlepage"><div><div><h4 class="title">5.11.1. Overview</h4></div></div></div><p> OpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for Red Hat Virtualization (RHV). </p><p> Familiarity with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage">persistent storage</a> and <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">configuring CSI volumes</a> is recommended when working with a Container Storage Interface (CSI) Operator and driver. </p><p> To create CSI-provisioned PVs that mount to RHV storage assets, OpenShift Container Platform installs the oVirt CSI Driver Operator and the oVirt CSI driver by default in the <code class="literal">openshift-cluster-csi-drivers</code> namespace. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The <span class="emphasis"><em>oVirt CSI Driver Operator</em></span> provides a default <code class="literal">StorageClass</code> object that you can use to create Persistent Volume Claims (PVCs). </li><li class="listitem"> The <span class="emphasis"><em>oVirt CSI driver</em></span> enables you to create and mount oVirt PVs. </li></ul></div></section><section class="section" id="csi-about_persistent-storage-csi-ovirt"><div class="titlepage"><div><div><h4 class="title">5.11.2. About CSI</h4></div></div></div><p> Storage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code. </p><p> CSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The oVirt CSI driver does not support snapshots. </p></div></rh-alert></section><section class="section" id="ovirt-csi-driver-storage-class_persistent-storage-csi-ovirt"><div class="titlepage"><div><div><h4 class="title">5.11.3. oVirt CSI driver storage class</h4></div></div></div><p> OpenShift Container Platform creates a default object of type <code class="literal">StorageClass</code> named <code class="literal">ovirt-csi-sc</code> which is used for creating dynamically provisioned persistent volumes. </p><p> To create additional storage classes for different configurations, create and save a file with the <code class="literal">StorageClass</code> object described by the following sample YAML: </p><pre class="programlisting language-yaml">apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: &lt;storage-class-name&gt; <span id="CO54-1"><!--Empty--></span><span class="callout">1</span> annotations: storageclass.kubernetes.io/is-default-class: "false" <span id="CO54-2"><!--Empty--></span><span class="callout">2</span> provisioner: csi.ovirt.org parameters: storageDomainName: &lt;rhv-storage-domain-name&gt; <span id="CO54-3"><!--Empty--></span><span class="callout">3</span> thinProvisioning: "true" <span id="CO54-4"><!--Empty--></span><span class="callout">4</span> csi.storage.k8s.io/fstype: ext4 <span id="CO54-5"><!--Empty--></span><span class="callout">5</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO54-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Name of the storage class. </div></dd><dt><a href="#CO54-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Set to <code class="literal">false</code> if the storage class is the default storage class in the cluster. If set to <code class="literal">true</code>, the existing default storage class must be edited and set to <code class="literal">false</code>. </div></dd><dt><a href="#CO54-3"><span class="callout">3</span></a> </dt><dd><div class="para"> RHV storage domain name to use. </div></dd><dt><a href="#CO54-4"><span class="callout">4</span></a> </dt><dd><div class="para"> Disk must be thin provisioned. </div></dd><dt><a href="#CO54-5"><span class="callout">5</span></a> </dt><dd><div class="para"> File system type to be created. </div></dd></dl></div></section><section class="section" id="persistent-storage-rhv_persistent-storage-csi-ovirt"><div class="titlepage"><div><div><h4 class="title">5.11.4. Creating a persistent volume on RHV</h4></div></div></div><p> When you create a <code class="literal">PersistentVolumeClaim</code> (PVC) object, OpenShift Container Platform provisions a new persistent volume (PV) and creates a <code class="literal">PersistentVolume</code> object. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> You are logged in to a running OpenShift Container Platform cluster. </li><li class="listitem"> You provided the correct RHV credentials in <code class="literal">ovirt-credentials</code> secret. </li><li class="listitem"> You have installed the oVirt CSI driver. </li><li class="listitem"> You have defined at least one storage class. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> If you are using the we console to dynamically create a persistent volume on RHV: </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"> In the OpenShift Container Platform console, click <span class="strong strong"><strong>Storage</strong></span> → <span class="strong strong"><strong>Persistent Volume Claims</strong></span>. </li><li class="listitem"> In the persistent volume claims overview, click <span class="strong strong"><strong>Create Persistent Volume Claim</strong></span>. </li><li class="listitem"> Define the required options on the resulting page. </li><li class="listitem"> Select the appropriate <code class="literal">StorageClass</code> object, which is <code class="literal">ovirt-csi-sc</code> by default. </li><li class="listitem"> Enter a unique name for the storage claim. </li><li class="listitem"> Select the access mode. Currently, RWO (ReadWriteOnce) is the only supported access mode. </li><li class="listitem"> Define the size of the storage claim. </li><li class="listitem"><p class="simpara"> Select the Volume Mode: </p><p class="simpara"> <code class="literal">Filesystem</code>: Mounted into pods as a directory. This mode is the default. </p><p class="simpara"> <code class="literal">Block</code>: Block device, without any file system on it </p></li><li class="listitem"> Click <span class="strong strong"><strong>Create</strong></span> to create the <code class="literal">PersistentVolumeClaim</code> object and generate a <code class="literal">PersistentVolume</code> object. </li></ol></div></li><li class="listitem"><p class="simpara"> If you are using the command-line interface (CLI) to dynamically create a RHV CSI volume: </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Create and save a file with the <code class="literal">PersistentVolumeClaim</code> object described by the following sample YAML: </p><div class="formalpara"><p class="title"><strong>pvc-ovirt.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-ovirt spec: storageClassName: ovirt-csi-sc <span id="CO55-1"><!--Empty--></span><span class="callout">1</span> accessModes: - ReadWriteOnce resources: requests: storage: &lt;volume size&gt; <span id="CO55-2"><!--Empty--></span><span class="callout">2</span> volumeMode: &lt;volume mode&gt; <span id="CO55-3"><!--Empty--></span><span class="callout">3</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO55-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Name of the required storage class. </div></dd><dt><a href="#CO55-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Volume size in GiB. </div></dd><dt><a href="#CO55-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Supported options: </div><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"> <code class="literal">Filesystem</code>: Mounted into pods as a directory. This mode is the default. </li><li class="listitem"> <code class="literal">Block</code>: Block device, without any file system on it. </li></ul></div></dd></dl></div></li><li class="listitem"><p class="simpara"> Create the object you saved in the previous step by running the following command: </p><pre class="screen">$ oc create -f pvc-ovirt.yaml</pre></li><li class="listitem"><p class="simpara"> To verify that the volume was created and is ready, run the following command: </p><pre class="screen">$ oc get pvc pvc-ovirt</pre><p class="simpara"> The <code class="literal">pvc-ovirt</code> shows that it is Bound. </p></li></ol></div></li></ul></div><div class="itemizedlist _additional-resources"><p class="title"><strong>Additional resources</strong></p><ul class="itemizedlist _additional-resources" type="disc"><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">Configuring CSI volumes</a> </li><li class="listitem"> <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#csi-dynamic-provisioning_persistent-storage-csi">Dynamic Provisioning</a> </li></ul></div></section></section><section class="section" id="persistent-storage-vsphere"><div class="titlepage"><div><div><h3 class="title">5.12. VMware vSphere CSI Driver Operator</h3></div></div></div><section class="section" id="overview-7"><div class="titlepage"><div><div><h4 class="title">5.12.1. Overview</h4></div></div></div><p> OpenShift Container Platform can provision persistent volumes (PVs) using the Container Storage Interface (CSI) VMware vSphere driver for Virtual Machine Disk (VMDK) volumes. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> vSphere CSI Driver Operator 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><p> Familiarity with <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage">persistent storage</a> and <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi">configuring CSI volumes</a> is recommended when working with a CSI Operator and driver. </p><p> To create CSI-provisioned persistent volumes (PVs) that mount to vSphere storage assets, OpenShift Container Platform, after this feature is enabled, installs the vSphere CSI Driver Operator and the vSphere CSI driver by default in the <code class="literal">openshift-cluster-csi-drivers</code> namespace. </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <span class="strong strong"><strong>vSphere CSI Driver Operator</strong></span>: After being enabled, the Operator provides a storage class, called <code class="literal">thin-csi</code>, that you can use to create persistent volumes claims (PVCs). The vSphere CSI Driver Operator supports dynamic volume provisioning by allowing storage volumes to be created on-demand, eliminating the need for cluster administrators to pre-provision storage. </li><li class="listitem"> <span class="strong strong"><strong>vSphere CSI driver</strong></span>: The driver enables you to create and mount vSphere PVs. </li></ul></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> OpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision vSphere storage. </p><p> In future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see <a class="link" href="https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration">CSI automatic migration</a>. </p><p> After full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform. </p></div></rh-alert></section><section class="section" id="csi-about_persistent-storage-csi-vsphere"><div class="titlepage"><div><div><h4 class="title">5.12.2. About CSI</h4></div></div></div><p> Storage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code. </p><p> CSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins. </p><div class="itemizedlist"><p class="title"><strong>Additional resources</strong></p><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/storage/#persistent-storage-csi">Configuring CSI volumes</a> </li></ul></div></section><section class="section" id="csi-tp-enable_persistent-storage-csi-vsphere"><div class="titlepage"><div><div><h4 class="title">5.12.3. Enabling the vSphere CSI Driver Operator</h4></div></div></div><p> To enable the vSphere Container Storage Interface (CSI) Driver Operator, you must enable feature gates with the <code class="literal">TechPreviewNoUpgrade</code> feature set. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Enable feature gates with the <code class="literal">TechPreviewNoUpgrade</code> feature set (see <span class="emphasis"><em>Nodes</em></span> → <span class="emphasis"><em>Enabling features using feature gates</em></span>). </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> After turning Technology Preview features on by using feature gates, they cannot be turned off and cluster upgrades are prevented. </p></div></rh-alert></li><li class="listitem"><p class="simpara"> Verify the cluster operator storage: </p><pre class="programlisting language-terminal">$ oc get co storage</pre><pre class="programlisting language-terminal">NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE storage 4.8.0-0.nightly-2021-04-30-201824 True False False 4h26m</pre><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> <code class="literal">AVAILABLE</code> should be "True". </li><li class="listitem"> <code class="literal">PROGRESSING</code> should be "False". </li><li class="listitem"> <code class="literal">DEGRADED</code> should be "False". </li></ul></div></li><li class="listitem"><p class="simpara"> Verify the status of the pods in the <code class="literal">openshift-cluster-csi-drivers</code> namespace to ensure that they are running: </p><pre class="programlisting language-terminal">$ oc get pod -n openshift-cluster-csi-drivers</pre><pre class="programlisting language-terminal">NAME READY STATUS RESTARTS AGE vmware-vsphere-csi-driver-controller-5646dbbf54-cnsx7 9/9 Running 0 4h29m vmware-vsphere-csi-driver-node-ch22q 3/3 Running 0 4h37m vmware-vsphere-csi-driver-node-gfjrb 3/3 Running 0 4h37m vmware-vsphere-csi-driver-node-ktlmp 3/3 Running 0 4h37m vmware-vsphere-csi-driver-node-lgksl 3/3 Running 0 4h37m vmware-vsphere-csi-driver-node-vb4gv 3/3 Running 0 4h37m vmware-vsphere-csi-driver-operator-7c7fc474c-p544t 1/1 Running 0 4h29m</pre></li></ol></div><pre class="programlisting language-terminal">NAME READY STATUS RESTARTS AGE azure-disk-csi-driver-controller-5949bf45fd-pm4qb 11/11 Running 0 39m azure-disk-csi-driver-node-2tcxr 3/3 Running 0 53m azure-disk-csi-driver-node-2xjzm 3/3 Running 0 53m azure-disk-csi-driver-node-6wrgk 3/3 Running 0 53m azure-disk-csi-driver-node-frvx2 3/3 Running 0 53m azure-disk-csi-driver-node-lf5kb 3/3 Running 0 53m azure-disk-csi-driver-node-mqdhh 3/3 Running 0 53m azure-disk-csi-driver-operator-7d966fc6c5-x74x5 1/1 Running 0 44m</pre><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Verify that the storage class is installed: </p><pre class="programlisting language-terminal">$ oc get storageclass</pre><pre class="programlisting language-terminal">NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE thin (default) kubernetes.io/vsphere-volume Delete Immediate false 5h43m thin-csi csi.vsphere.vmware.com Delete WaitForFirstConsumer false 4h38m <span id="CO56-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO56-1"><span class="callout">1</span></a> </dt><dd><div class="para"> vSphere storage class </div></dd></dl></div></li></ol></div><pre class="programlisting language-terminal">NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-premium (default) kubernetes.io/azure-disk Delete WaitForFirstConsumer true 76m managed-csi disk.csi.azure.com Delete WaitForFirstConsumer true 51m <span id="CO57-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO57-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Azure storage class </div></dd></dl></div></section><section class="section _additional-resources" id="additional-resources-2"><div class="titlepage"><div><div><h4 class="title">5.12.4. Additional resources</h4></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/nodes/#">Enabling features using feature gates</a> </li></ul></div></section></section></section><section class="chapter" id="expanding-persistent-volumes"><div class="titlepage"><div><div><h2 class="title">Chapter 6. Expanding persistent volumes</h2></div></div></div><section class="section" id="add-volume-expansion_expanding-persistent-volumes"><div class="titlepage"><div><div><h3 class="title">6.1. Enabling volume expansion support</h3></div></div></div><p> Before you can expand persistent volumes, the <code class="literal">StorageClass</code> object must have the <code class="literal">allowVolumeExpansion</code> field set to <code class="literal">true</code>. </p><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> Edit the <code class="literal">StorageClass</code> object and add the <code class="literal">allowVolumeExpansion</code> attribute by running the following command: </p><pre class="programlisting language-terminal">$ oc edit storageclass &lt;storage_class_name&gt; <span id="CO58-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO58-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Specifies the name of the storage class. </div></dd></dl></div><p class="simpara"> The following example demonstrates adding this line at the bottom of the storage class configuration. </p><pre class="programlisting language-yaml">apiVersion: storage.k8s.io/v1 kind: StorageClass ... parameters: type: gp2 reclaimPolicy: Delete allowVolumeExpansion: true <span id="CO59-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO59-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Setting this attribute to <code class="literal">true</code> allows PVCs to be expanded after creation. </div></dd></dl></div></li></ul></div></section><section class="section" id="expanding-csi-volumes_expanding-persistent-volumes"><div class="titlepage"><div><div><h3 class="title">6.2. Expanding CSI volumes</h3></div></div></div><p> You can use the Container Storage Interface (CSI) to expand storage volumes after they have already been created. </p><p> OpenShift Container Platform supports CSI volume expansion by default. However, a specific CSI driver is required. </p><p> OpenShift Container Platform 4.8 supports version 1.1.0 of the <a class="link" href="https://github.com/container-storage-interface/spec">CSI specification</a>. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Expanding CSI volumes 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></section><section class="section" id="expanding-flexvolume_expanding-persistent-volumes"><div class="titlepage"><div><div><h3 class="title">6.3. Expanding FlexVolume with a supported driver</h3></div></div></div><p> When using FlexVolume to connect to your back-end storage system, you can expand persistent storage volumes after they have already been created. This is done by manually updating the persistent volume claim (PVC) in OpenShift Container Platform. </p><p> FlexVolume allows expansion if the driver is set with <code class="literal">RequiresFSResize</code> to <code class="literal">true</code>. The FlexVolume can be expanded on pod restart. </p><p> Similar to other volume types, FlexVolume volumes can also be expanded when in use by a pod. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The underlying volume driver supports resize. </li><li class="listitem"> The driver is set with the <code class="literal">RequiresFSResize</code> capability to <code class="literal">true</code>. </li><li class="listitem"> Dynamic provisioning is used. </li><li class="listitem"> The controlling <code class="literal">StorageClass</code> object has <code class="literal">allowVolumeExpansion</code> set to <code class="literal">true</code>. </li></ul></div><div class="itemizedlist"><p class="title"><strong>Procedure</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"><p class="simpara"> To use resizing in the FlexVolume plugin, you must implement the <code class="literal">ExpandableVolumePlugin</code> interface using these methods: </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="literal">RequiresFSResize</code></span></dt><dd> If <code class="literal">true</code>, updates the capacity directly. If <code class="literal">false</code>, calls the <code class="literal">ExpandFS</code> method to finish the filesystem resize. </dd><dt><span class="term"><code class="literal">ExpandFS</code></span></dt><dd> If <code class="literal">true</code>, calls <code class="literal">ExpandFS</code> to resize filesystem after physical volume expansion is done. The volume driver can also perform physical volume resize together with filesystem resize. </dd></dl></div></li></ul></div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Because OpenShift Container Platform does not support installation of FlexVolume plugins on control plane nodes (also known as the master nodes), it does not support control-plane expansion of FlexVolume. </p></div></rh-alert></section><section class="section" id="expanding-pvc-filesystem_expanding-persistent-volumes"><div class="titlepage"><div><div><h3 class="title">6.4. Expanding persistent volume claims (PVCs) with a file system</h3></div></div></div><p> Expanding PVCs based on volume types that need file system resizing, such as GCE PD, EBS, and Cinder, is a two-step process. This process involves expanding volume objects in the cloud provider, and then expanding the file system on the actual node. </p><p> Expanding the file system on the node only happens when a new pod is started with the volume. </p><div class="itemizedlist"><p class="title"><strong>Prerequisites</strong></p><ul class="itemizedlist" type="disc"><li class="listitem"> The controlling <code class="literal">StorageClass</code> object must have <code class="literal">allowVolumeExpansion</code> set to <code class="literal">true</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"> Edit the PVC and request a new size by editing <code class="literal">spec.resources.requests</code>. For example, the following expands the <code class="literal">ebs</code> PVC to 8 Gi. </p><pre class="programlisting language-yaml">kind: PersistentVolumeClaim apiVersion: v1 metadata: name: ebs spec: storageClass: "storageClassWithFlagSet" accessModes: - ReadWriteOnce resources: requests: storage: 8Gi <span id="CO60-1"><!--Empty--></span><span class="callout">1</span></pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO60-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Updating <code class="literal">spec.resources.requests</code> to a larger amount will expand the PVC. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> After the cloud provider object has finished resizing, the PVC is set to <code class="literal">FileSystemResizePending</code>. Check the condition by entering the following command: </p><pre class="programlisting language-terminal">$ oc describe pvc &lt;pvc_name&gt;</pre></li><li class="listitem"> When the cloud provider object has finished resizing, the <code class="literal">PersistentVolume</code> object reflects the newly requested size in <code class="literal">PersistentVolume.Spec.Capacity</code>. At this point, you can create or recreate a new pod from the PVC to finish the file system resizing. Once the pod is running, the newly requested size is available and the <code class="literal">FileSystemResizePending</code> condition is removed from the PVC. </li></ol></div></section><section class="section" id="expanding-recovering-from-failure_expanding-persistent-volumes"><div class="titlepage"><div><div><h3 class="title">6.5. Recovering from failure when expanding volumes</h3></div></div></div><p> If expanding underlying storage fails, the OpenShift Container Platform administrator can manually recover the persistent volume claim (PVC) state and cancel the resize requests. Otherwise, the resize requests are continuously retried by the controller without administrator intervention. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"> Mark the persistent volume (PV) that is bound to the PVC with the <code class="literal">Retain</code> reclaim policy. This can be done by editing the PV and changing <code class="literal">persistentVolumeReclaimPolicy</code> to <code class="literal">Retain</code>. </li><li class="listitem"> Delete the PVC. This will be recreated later. </li><li class="listitem"> To ensure that the newly created PVC can bind to the PV marked <code class="literal">Retain</code>, manually edit the PV and delete the <code class="literal">claimRef</code> entry from the PV specs. This marks the PV as <code class="literal">Available</code>. </li><li class="listitem"> Re-create the PVC in a smaller size, or a size that can be allocated by the underlying storage provider. </li><li class="listitem"> Set the <code class="literal">volumeName</code> field of the PVC to the name of the PV. This binds the PVC to the provisioned PV only. </li><li class="listitem"> Restore the reclaim policy on the PV. </li></ol></div></section></section><section class="chapter" id="dynamic-provisioning"><div class="titlepage"><div><div><h2 class="title">Chapter 7. Dynamic provisioning</h2></div></div></div><section class="section" id="about_dynamic-provisioning"><div class="titlepage"><div><div><h3 class="title">7.1. About dynamic provisioning</h3></div></div></div><p> The <code class="literal">StorageClass</code> resource object describes and classifies storage that can be requested, as well as provides a means for passing parameters for dynamically provisioned storage on demand. <code class="literal">StorageClass</code> objects can also serve as a management mechanism for controlling different levels of storage and access to the storage. Cluster Administrators (<code class="literal">cluster-admin</code>) or Storage Administrators (<code class="literal">storage-admin</code>) define and create the <code class="literal">StorageClass</code> objects that users can request without needing any detailed knowledge about the underlying storage volume sources. </p><p> The OpenShift Container Platform persistent volume framework enables this functionality and allows administrators to provision a cluster with persistent storage. The framework also gives users a way to request those resources without having any knowledge of the underlying infrastructure. </p><p> Many storage types are available for use as persistent volumes in OpenShift Container Platform. While all of them can be statically provisioned by an administrator, some types of storage are created dynamically using the built-in provider and plugin APIs. </p></section><section class="section" id="available-plug-ins_dynamic-provisioning"><div class="titlepage"><div><div><h3 class="title">7.2. Available dynamic provisioning plugins</h3></div></div></div><p> OpenShift Container Platform provides the following provisioner plugins, which have generic implementations for dynamic provisioning that use the cluster’s configured provider’s API to create new storage resources: </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="idm140708979909888" scope="col">Storage type</th><th align="left" valign="top" id="idm140708979908800" scope="col">Provisioner plugin name</th><th align="left" valign="top" id="idm140708979907712" scope="col">Notes</th></tr></thead><tbody><tr><td align="left" valign="top" headers="idm140708979909888"> <p> Red Hat OpenStack Platform (RHOSP) Cinder </p> </td><td align="left" valign="top" headers="idm140708979908800"> <p> <code class="literal">kubernetes.io/cinder</code> </p> </td><td align="left" valign="top" headers="idm140708979907712"> </td></tr><tr><td align="left" valign="top" headers="idm140708979909888"> <p> RHOSP Manila Container Storage Interface (CSI) </p> </td><td align="left" valign="top" headers="idm140708979908800"> <p> <code class="literal">manila.csi.openstack.org</code> </p> </td><td align="left" valign="top" headers="idm140708979907712"> <p> Once installed, the OpenStack Manila CSI Driver Operator and ManilaDriver automatically create the required storage classes for all available Manila share types needed for dynamic provisioning. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708979909888"> <p> AWS Elastic Block Store (EBS) </p> </td><td align="left" valign="top" headers="idm140708979908800"> <p> <code class="literal">kubernetes.io/aws-ebs</code> </p> </td><td align="left" valign="top" headers="idm140708979907712"> <p> For dynamic provisioning when using multiple clusters in different zones, tag each node with <code class="literal">Key=kubernetes.io/cluster/&lt;cluster_name&gt;,Value=&lt;cluster_id&gt;</code> where <code class="literal">&lt;cluster_name&gt;</code> and <code class="literal">&lt;cluster_id&gt;</code> are unique per cluster. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708979909888"> <p> Azure Disk </p> </td><td align="left" valign="top" headers="idm140708979908800"> <p> <code class="literal">kubernetes.io/azure-disk</code> </p> </td><td align="left" valign="top" headers="idm140708979907712"> </td></tr><tr><td align="left" valign="top" headers="idm140708979909888"> <p> Azure File </p> </td><td align="left" valign="top" headers="idm140708979908800"> <p> <code class="literal">kubernetes.io/azure-file</code> </p> </td><td align="left" valign="top" headers="idm140708979907712"> <p> The <code class="literal">persistent-volume-binder</code> service account requires permissions to create and get secrets to store the Azure storage account and keys. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708979909888"> <p> GCE Persistent Disk (gcePD) </p> </td><td align="left" valign="top" headers="idm140708979908800"> <p> <code class="literal">kubernetes.io/gce-pd</code> </p> </td><td align="left" valign="top" headers="idm140708979907712"> <p> In multi-zone configurations, it is advisable to run one OpenShift Container Platform cluster per GCE project to avoid PVs from being created in zones where no node in the current cluster exists. </p> </td></tr><tr><td align="left" valign="top" headers="idm140708979909888"> <p> <a class="link" href="https://www.vmware.com/support/vsphere.html">VMware vSphere</a> </p> </td><td align="left" valign="top" headers="idm140708979908800"> <p> <code class="literal">kubernetes.io/vsphere-volume</code> </p> </td><td align="left" valign="top" headers="idm140708979907712"> </td></tr></tbody></table></rh-table><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Any chosen provisioner plugin also requires configuration for the relevant cloud, host, or third-party provider as per the relevant documentation. </p></div></rh-alert></section><section class="section" id="defining-storage-classes_dynamic-provisioning"><div class="titlepage"><div><div><h3 class="title">7.3. Defining a storage class</h3></div></div></div><p> <code class="literal">StorageClass</code> objects are currently a globally scoped object and must be created by <code class="literal">cluster-admin</code> or <code class="literal">storage-admin</code> users. </p><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> The Cluster Storage Operator might install a default storage class depending on the platform in use. This storage class is owned and controlled by the operator. It cannot be deleted or modified beyond defining annotations and labels. If different behavior is desired, you must define a custom storage class. </p></div></rh-alert><p> The following sections describe the basic definition for a <code class="literal">StorageClass</code> object and specific examples for each of the supported plugin types. </p><section class="section" id="basic-storage-class-definition_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.1. Basic StorageClass object definition</h4></div></div></div><p> The following resource shows the parameters and default values that you use to configure a storage class. This example uses the AWS ElasticBlockStore (EBS) object definition. </p><div class="formalpara"><p class="title"><strong>Sample <code class="literal">StorageClass</code> definition</strong></p><p> </p><pre class="programlisting language-yaml">kind: StorageClass <span id="CO61-1"><!--Empty--></span><span class="callout">1</span> apiVersion: storage.k8s.io/v1 <span id="CO61-2"><!--Empty--></span><span class="callout">2</span> metadata: name: gp2 <span id="CO61-3"><!--Empty--></span><span class="callout">3</span> annotations: <span id="CO61-4"><!--Empty--></span><span class="callout">4</span> storageclass.kubernetes.io/is-default-class: 'true' ... provisioner: kubernetes.io/aws-ebs <span id="CO61-5"><!--Empty--></span><span class="callout">5</span> parameters: <span id="CO61-6"><!--Empty--></span><span class="callout">6</span> type: gp2 ...</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO61-1"><span class="callout">1</span></a> </dt><dd><div class="para"> (required) The API object type. </div></dd><dt><a href="#CO61-2"><span class="callout">2</span></a> </dt><dd><div class="para"> (required) The current apiVersion. </div></dd><dt><a href="#CO61-3"><span class="callout">3</span></a> </dt><dd><div class="para"> (required) The name of the storage class. </div></dd><dt><a href="#CO61-4"><span class="callout">4</span></a> </dt><dd><div class="para"> (optional) Annotations for the storage class. </div></dd><dt><a href="#CO61-5"><span class="callout">5</span></a> </dt><dd><div class="para"> (required) The type of provisioner associated with this storage class. </div></dd><dt><a href="#CO61-6"><span class="callout">6</span></a> </dt><dd><div class="para"> (optional) The parameters required for the specific provisioner, this will change from plugin to plugin. </div></dd></dl></div></section><section class="section" id="storage-class-annotations_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.2. Storage class annotations</h4></div></div></div><p> To set a storage class as the cluster-wide default, add the following annotation to your storage class metadata: </p><pre class="programlisting language-yaml">storageclass.kubernetes.io/is-default-class: "true"</pre><p> For example: </p><pre class="programlisting language-yaml">apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" ...</pre><p> This enables any persistent volume claim (PVC) that does not specify a specific storage class to automatically be provisioned through the default storage class. However, your cluster can have more than one storage class, but only one of them can be the default storage class. </p><rh-alert class="admonition note" state="info"><div class="admonition_header" slot="header">Note</div><div><p> The beta annotation <code class="literal">storageclass.beta.kubernetes.io/is-default-class</code> is still working; however, it will be removed in a future release. </p></div></rh-alert><p> To set a storage class description, add the following annotation to your storage class metadata: </p><pre class="programlisting language-yaml">kubernetes.io/description: My Storage Class Description</pre><p> For example: </p><pre class="programlisting language-yaml">apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: kubernetes.io/description: My Storage Class Description ...</pre></section><section class="section" id="openstack-cinder-storage-class_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.3. RHOSP Cinder object definition</h4></div></div></div><div class="formalpara"><p class="title"><strong>cinder-storageclass.yaml</strong></p><p> </p><pre class="programlisting language-yaml">kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: gold provisioner: kubernetes.io/cinder parameters: type: fast <span id="CO62-1"><!--Empty--></span><span class="callout">1</span> availability: nova <span id="CO62-2"><!--Empty--></span><span class="callout">2</span> fsType: ext4 <span id="CO62-3"><!--Empty--></span><span class="callout">3</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO62-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Volume type created in Cinder. Default is empty. </div></dd><dt><a href="#CO62-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Availability Zone. If not specified, volumes are generally round-robined across all active zones where the OpenShift Container Platform cluster has a node. </div></dd><dt><a href="#CO62-3"><span class="callout">3</span></a> </dt><dd><div class="para"> File system that is created on dynamically provisioned volumes. This value is copied to the <code class="literal">fsType</code> field of dynamically provisioned persistent volumes and the file system is created when the volume is mounted for the first time. The default value is <code class="literal">ext4</code>. </div></dd></dl></div></section><section class="section" id="openstack-manila-csi-definition_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.4. RHOSP Manila Container Storage Interface (CSI) object definition</h4></div></div></div><p> Once installed, the OpenStack Manila CSI Driver Operator and ManilaDriver automatically create the required storage classes for all available Manila share types needed for dynamic provisioning. </p></section><section class="section" id="aws-definition_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.5. AWS Elastic Block Store (EBS) object definition</h4></div></div></div><div class="formalpara"><p class="title"><strong>aws-ebs-storageclass.yaml</strong></p><p> </p><pre class="programlisting language-yaml">kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: slow provisioner: kubernetes.io/aws-ebs parameters: type: io1 <span id="CO63-1"><!--Empty--></span><span class="callout">1</span> iopsPerGB: "10" <span id="CO63-2"><!--Empty--></span><span class="callout">2</span> encrypted: "true" <span id="CO63-3"><!--Empty--></span><span class="callout">3</span> kmsKeyId: keyvalue <span id="CO63-4"><!--Empty--></span><span class="callout">4</span> fsType: ext4 <span id="CO63-5"><!--Empty--></span><span class="callout">5</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO63-1"><span class="callout">1</span></a> </dt><dd><div class="para"> (required) Select from <code class="literal">io1</code>, <code class="literal">gp2</code>, <code class="literal">sc1</code>, <code class="literal">st1</code>. The default is <code class="literal">gp2</code>. See the <a class="link" href="http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">AWS documentation</a> for valid Amazon Resource Name (ARN) values. </div></dd><dt><a href="#CO63-2"><span class="callout">2</span></a> </dt><dd><div class="para"> (optional) Only for <span class="strong strong"><strong>io1</strong></span> volumes. I/O operations per second per GiB. The AWS volume plugin multiplies this with the size of the requested volume to compute IOPS of the volume. The value cap is 20,000 IOPS, which is the maximum supported by AWS. See the <a class="link" href="http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">AWS documentation</a> for further details. </div></dd><dt><a href="#CO63-3"><span class="callout">3</span></a> </dt><dd><div class="para"> (optional) Denotes whether to encrypt the EBS volume. Valid values are <code class="literal">true</code> or <code class="literal">false</code>. </div></dd><dt><a href="#CO63-4"><span class="callout">4</span></a> </dt><dd><div class="para"> (optional) The full ARN of the key to use when encrypting the volume. If none is supplied, but <code class="literal">encypted</code> is set to <code class="literal">true</code>, then AWS generates a key. See the <a class="link" href="http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">AWS documentation</a> for a valid ARN value. </div></dd><dt><a href="#CO63-5"><span class="callout">5</span></a> </dt><dd><div class="para"> (optional) File system that is created on dynamically provisioned volumes. This value is copied to the <code class="literal">fsType</code> field of dynamically provisioned persistent volumes and the file system is created when the volume is mounted for the first time. The default value is <code class="literal">ext4</code>. </div></dd></dl></div></section><section class="section" id="azure-disk-definition_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.6. Azure Disk object definition</h4></div></div></div><div class="formalpara"><p class="title"><strong>azure-advanced-disk-storageclass.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: managed-premium provisioner: kubernetes.io/azure-disk volumeBindingMode: WaitForFirstConsumer <span id="CO64-1"><!--Empty--></span><span class="callout">1</span> allowVolumeExpansion: true parameters: kind: Managed <span id="CO64-2"><!--Empty--></span><span class="callout">2</span> storageaccounttype: Premium_LRS <span id="CO64-3"><!--Empty--></span><span class="callout">3</span> reclaimPolicy: Delete</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO64-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Using <code class="literal">WaitForFirstConsumer</code> is strongly recommended. This provisions the volume while allowing enough storage to schedule the pod on a free worker node from an available zone. </div></dd><dt><a href="#CO64-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Possible values are <code class="literal">Shared</code> (default), <code class="literal">Managed</code>, and <code class="literal">Dedicated</code>. </div><rh-alert class="admonition important" state="warning"><div class="admonition_header" slot="header">Important</div><div><p> Red Hat only supports the use of <code class="literal">kind: Managed</code> in the storage class. </p><p> With <code class="literal">Shared</code> and <code class="literal">Dedicated</code>, Azure creates unmanaged disks, while OpenShift Container Platform creates a managed disk for machine OS (root) disks. But because Azure Disk does not allow the use of both managed and unmanaged disks on a node, unmanaged disks created with <code class="literal">Shared</code> or <code class="literal">Dedicated</code> cannot be attached to OpenShift Container Platform nodes. </p></div></rh-alert></dd><dt><a href="#CO64-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Azure storage account SKU tier. Default is empty. Note that Premium VMs can attach both <code class="literal">Standard_LRS</code> and <code class="literal">Premium_LRS</code> disks, Standard VMs can only attach <code class="literal">Standard_LRS</code> disks, Managed VMs can only attach managed disks, and unmanaged VMs can only attach unmanaged disks. </div><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"> If <code class="literal">kind</code> is set to <code class="literal">Shared</code>, Azure creates all unmanaged disks in a few shared storage accounts in the same resource group as the cluster. </li><li class="listitem"> If <code class="literal">kind</code> is set to <code class="literal">Managed</code>, Azure creates new managed disks. </li><li class="listitem"><p class="simpara"> If <code class="literal">kind</code> is set to <code class="literal">Dedicated</code> and a <code class="literal">storageAccount</code> is specified, Azure uses the specified storage account for the new unmanaged disk in the same resource group as the cluster. For this to work: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> The specified storage account must be in the same region. </li><li class="listitem"> Azure Cloud Provider must have write access to the storage account. </li></ul></div></li><li class="listitem"> If <code class="literal">kind</code> is set to <code class="literal">Dedicated</code> and a <code class="literal">storageAccount</code> is not specified, Azure creates a new dedicated storage account for the new unmanaged disk in the same resource group as the cluster. </li></ol></div></dd></dl></div></section><section class="section" id="azure-file-definition_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.7. Azure File object definition</h4></div></div></div><p> The Azure File storage class uses secrets to store the Azure storage account name and the storage account key that are required to create an Azure Files share. These permissions are created as part of the following procedure. </p><div class="orderedlist"><p class="title"><strong>Procedure</strong></p><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> Define a <code class="literal">ClusterRole</code> object that allows access to create and view secrets: </p><pre class="programlisting language-yaml">apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: # name: system:azure-cloud-provider name: &lt;persistent-volume-binder-role&gt; <span id="CO65-1"><!--Empty--></span><span class="callout">1</span> rules: - apiGroups: [''] resources: ['secrets'] verbs: ['get','create']</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO65-1"><span class="callout">1</span></a> </dt><dd><div class="para"> The name of the cluster role to view and create secrets. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Add the cluster role to the service account: </p><pre class="programlisting language-terminal">$ oc adm policy add-cluster-role-to-user &lt;persistent-volume-binder-role&gt;</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal"> system:serviceaccount:kube-system:persistent-volume-binder</pre> <p></p></div></li><li class="listitem"><p class="simpara"> Create the Azure File <code class="literal">StorageClass</code> object: </p><pre class="programlisting language-yaml">kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: &lt;azure-file&gt; <span id="CO66-1"><!--Empty--></span><span class="callout">1</span> provisioner: kubernetes.io/azure-file parameters: location: eastus <span id="CO66-2"><!--Empty--></span><span class="callout">2</span> skuName: Standard_LRS <span id="CO66-3"><!--Empty--></span><span class="callout">3</span> storageAccount: &lt;storage-account&gt; <span id="CO66-4"><!--Empty--></span><span class="callout">4</span> reclaimPolicy: Delete volumeBindingMode: Immediate</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO66-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Name of the storage class. The persistent volume claim uses this storage class for provisioning the associated persistent volumes. </div></dd><dt><a href="#CO66-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Location of the Azure storage account, such as <code class="literal">eastus</code>. Default is empty, meaning that a new Azure storage account will be created in the OpenShift Container Platform cluster’s location. </div></dd><dt><a href="#CO66-3"><span class="callout">3</span></a> </dt><dd><div class="para"> SKU tier of the Azure storage account, such as <code class="literal">Standard_LRS</code>. Default is empty, meaning that a new Azure storage account will be created with the <code class="literal">Standard_LRS</code> SKU. </div></dd><dt><a href="#CO66-4"><span class="callout">4</span></a> </dt><dd><div class="para"> Name of the Azure storage account. If a storage account is provided, then <code class="literal">skuName</code> and <code class="literal">location</code> are ignored. If no storage account is provided, then the storage class searches for any storage account that is associated with the resource group for any accounts that match the defined <code class="literal">skuName</code> and <code class="literal">location</code>. </div></dd></dl></div></li></ol></div><section class="section" id="azure-file-considerations_dynamic-provisioning"><div class="titlepage"><div><div><h5 class="title">7.3.7.1. Considerations when using Azure File</h5></div></div></div><p> The following file system features are not supported by the default Azure File storage class: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"> Symlinks </li><li class="listitem"> Hard links </li><li class="listitem"> Extended attributes </li><li class="listitem"> Sparse files </li><li class="listitem"> Named pipes </li></ul></div><p> Additionally, the owner user identifier (UID) of the Azure File mounted directory is different from the process UID of the container. The <code class="literal">uid</code> mount option can be specified in the <code class="literal">StorageClass</code> object to define a specific user identifier to use for the mounted directory. </p><p> The following <code class="literal">StorageClass</code> object demonstrates modifying the user and group identifier, along with enabling symlinks for the mounted directory. </p><pre class="programlisting language-yaml">kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: azure-file mountOptions: - uid=1500 <span id="CO67-1"><!--Empty--></span><span class="callout">1</span> - gid=1500 <span id="CO67-2"><!--Empty--></span><span class="callout">2</span> - mfsymlinks <span id="CO67-3"><!--Empty--></span><span class="callout">3</span> provisioner: kubernetes.io/azure-file parameters: location: eastus skuName: Standard_LRS reclaimPolicy: Delete volumeBindingMode: Immediate</pre><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO67-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Specifies the user identifier to use for the mounted directory. </div></dd><dt><a href="#CO67-2"><span class="callout">2</span></a> </dt><dd><div class="para"> Specifies the group identifier to use for the mounted directory. </div></dd><dt><a href="#CO67-3"><span class="callout">3</span></a> </dt><dd><div class="para"> Enables symlinks. </div></dd></dl></div></section></section><section class="section" id="gce-persistentdisk-storage-class_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.8. GCE PersistentDisk (gcePD) object definition</h4></div></div></div><div class="formalpara"><p class="title"><strong>gce-pd-storageclass.yaml</strong></p><p> </p><pre class="programlisting language-yaml">apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: kubernetes.io/gce-pd parameters: type: pd-standard <span id="CO68-1"><!--Empty--></span><span class="callout">1</span> replication-type: none volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true reclaimPolicy: Delete</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO68-1"><span class="callout">1</span></a> </dt><dd><div class="para"> Select either <code class="literal">pd-standard</code> or <code class="literal">pd-ssd</code>. The default is <code class="literal">pd-standard</code>. </div></dd></dl></div></section><section class="section" id="vsphere-definition_dynamic-provisioning"><div class="titlepage"><div><div><h4 class="title">7.3.9. VMware vSphere object definition</h4></div></div></div><div class="formalpara"><p class="title"><strong>vsphere-storageclass.yaml</strong></p><p> </p><pre class="programlisting language-yaml">kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: slow provisioner: kubernetes.io/vsphere-volume <span id="CO69-1"><!--Empty--></span><span class="callout">1</span> parameters: diskformat: thin <span id="CO69-2"><!--Empty--></span><span class="callout">2</span></pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO69-1"><span class="callout">1</span></a> </dt><dd><div class="para"> For more information about using VMware vSphere with OpenShift Container Platform, see the <a class="link" href="https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/index.html">VMware vSphere documentation</a>. </div></dd><dt><a href="#CO69-2"><span class="callout">2</span></a> </dt><dd><div class="para"> <code class="literal">diskformat</code>: <code class="literal">thin</code>, <code class="literal">zeroedthick</code> and <code class="literal">eagerzeroedthick</code> are all valid disk formats. See vSphere docs for additional details regarding the disk format types. The default value is <code class="literal">thin</code>. </div></dd></dl></div></section></section><section class="section" id="change-default-storage-class_dynamic-provisioning"><div class="titlepage"><div><div><h3 class="title">7.4. Changing the default storage class</h3></div></div></div><p> Use the following process to change the default storage class. For example you have two defined storage classes, <code class="literal">gp2</code> and <code class="literal">standard</code>, and you want to change the default storage class from <code class="literal">gp2</code> to <code class="literal">standard</code>. </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara"> List the storage class: </p><pre class="programlisting language-terminal">$ oc get storageclass</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME TYPE gp2 (default) kubernetes.io/aws-ebs <span id="CO70-1"><!--Empty--></span><span class="callout">1</span> standard kubernetes.io/aws-ebs</pre> <p></p></div><div class="calloutlist"><dl class="calloutlist"><dt><a href="#CO70-1"><span class="callout">1</span></a> </dt><dd><div class="para"> <code class="literal">(default)</code> denotes the default storage class. </div></dd></dl></div></li><li class="listitem"><p class="simpara"> Change the value of the <code class="literal">storageclass.kubernetes.io/is-default-class</code> annotation to <code class="literal">false</code> for the default storage class: </p><pre class="programlisting language-terminal">$ oc patch storageclass gp2 -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "false"}}}'</pre></li><li class="listitem"><p class="simpara"> Make another storage class the default by setting the <code class="literal">storageclass.kubernetes.io/is-default-class</code> annotation to <code class="literal">true</code>: </p><pre class="programlisting language-terminal">$ oc patch storageclass standard -p '{"metadata": {"annotations": {"storageclass.kubernetes.io/is-default-class": "true"}}}'</pre></li><li class="listitem"><p class="simpara"> Verify the changes: </p><pre class="programlisting language-terminal">$ oc get storageclass</pre><div class="formalpara"><p class="title"><strong>Example output</strong></p><p> </p><pre class="programlisting language-terminal">NAME TYPE gp2 kubernetes.io/aws-ebs standard (default) kubernetes.io/aws-ebs</pre> <p></p></div></li></ol></div></section></section><div><div xml:lang="en-US" class="legalnotice" id="idm140708991936208"><h2 class="legalnotice"> <a id="#idm140708991936208" class="anchor-heading">Legal Notice</a> <pf-tooltip position="top"> <button class="copy-link-btn" aria-label="Copy link to clipboard"> <pf-icon class="link-icon" set="fas" icon="link" size="sm"></pf-icon> </button> </pf-tooltip> </h2> <body> <div class="col-xs-12 col-sm-9 col-md-9 main"> <div class="paragraph lead"> <p>Copyright © 2024 Red Hat, Inc.</p> </div> <div class="paragraph"> <p>OpenShift documentation is licensed under the Apache License 2.0 (<a href="https://www.apache.org/licenses/LICENSE-2.0" class="bare">https://www.apache.org/licenses/LICENSE-2.0</a>).</p> </div> <div class="paragraph"> <p>Modified versions must remove all Red Hat trademarks.</p> </div> <div class="paragraph"> <p>Portions adapted from <a href="https://github.com/kubernetes-incubator/service-catalog/" class="bare">https://github.com/kubernetes-incubator/service-catalog/</a> with modifications by Red Hat.</p> </div> <div class="paragraph"> <p>Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.</p> </div> <div class="paragraph"> <p>Linux® is the registered trademark of Linus Torvalds in the United States and other countries.</p> </div> <div class="paragraph"> <p>Java® is a registered trademark of Oracle and/or its affiliates.</p> </div> <div class="paragraph"> <p>XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.</p> </div> <div class="paragraph"> <p>MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.</p> </div> <div class="paragraph"> <p>Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.</p> </div> <div class="paragraph"> <p>The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.</p> </div> <div class="paragraph"> <p>All other trademarks are the property of their respective owners.</p> </div> </div> </body></div></div></div></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-single/updating_clusters/index" 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-single/authentication_and_authorization/index" 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 class="page-type" value="html" data-v-8589d091>Multi-page</option><option selected 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="#openshift-storage-common-terms_storage-overview" id="right-sub-link-to-openshift-storage-common-terms_storage-overview" data-v-1d1b84c1>modules/openshift-storage-common-terms.adoc</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#storage-types" id="right-sub-link-to-storage-types" data-v-1d1b84c1>Storage Types</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#container-storage-interface" id="right-sub-link-to-container-storage-interface" data-v-1d1b84c1>Container Storage Interface (CSI)</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#dynamic-provisioning-overview" id="right-sub-link-to-dynamic-provisioning-overview" data-v-1d1b84c1>Dynamic Provisioning</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#storage-ephemeral-storage-overview_understanding-ephemeral-storage" id="right-sub-link-to-storage-ephemeral-storage-overview_understanding-ephemeral-storage" data-v-1d1b84c1>Overview</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#storage-ephemeral-storage-types_understanding-ephemeral-storage" id="right-sub-link-to-storage-ephemeral-storage-types_understanding-ephemeral-storage" data-v-1d1b84c1>Types of ephemeral storage</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#storage-ephemeral-storage-manage_understanding-ephemeral-storage" id="right-sub-link-to-storage-ephemeral-storage-manage_understanding-ephemeral-storage" data-v-1d1b84c1>Ephemeral storage management</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#storage-ephemeral-storage-monitoring_understanding-ephemeral-storage" id="right-sub-link-to-storage-ephemeral-storage-monitoring_understanding-ephemeral-storage" data-v-1d1b84c1>Monitoring ephemeral storage</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-overview_understanding-persistent-storage" id="right-sub-link-to-persistent-storage-overview_understanding-persistent-storage" data-v-1d1b84c1>Persistent storage overview</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#lifecycle-volume-claim_understanding-persistent-storage" id="right-sub-link-to-lifecycle-volume-claim_understanding-persistent-storage" data-v-1d1b84c1>Lifecycle of a volume and claim</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-volumes_understanding-persistent-storage" id="right-sub-link-to-persistent-volumes_understanding-persistent-storage" data-v-1d1b84c1>Persistent volumes</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-volume-claims_understanding-persistent-storage" id="right-sub-link-to-persistent-volume-claims_understanding-persistent-storage" data-v-1d1b84c1>Persistent volume claims</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#block-volume-support_understanding-persistent-storage" id="right-sub-link-to-block-volume-support_understanding-persistent-storage" data-v-1d1b84c1>Block volume support</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-aws" id="right-sub-link-to-persistent-storage-aws" data-v-1d1b84c1>Persistent storage using AWS Elastic Block Store</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-azure" id="right-sub-link-to-persistent-storage-using-azure" data-v-1d1b84c1>Persistent storage using Azure</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-azure-file" id="right-sub-link-to-persistent-storage-using-azure-file" data-v-1d1b84c1>Persistent storage using Azure File</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-cinder" id="right-sub-link-to-persistent-storage-cinder" data-v-1d1b84c1>Persistent storage using Cinder</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-fibre" id="right-sub-link-to-persistent-storage-using-fibre" data-v-1d1b84c1>Persistent storage using Fibre Channel</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-flexvolume" id="right-sub-link-to-persistent-storage-using-flexvolume" data-v-1d1b84c1>Persistent storage using FlexVolume</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-gce" id="right-sub-link-to-persistent-storage-using-gce" data-v-1d1b84c1>Persistent storage using GCE Persistent Disk</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-hostpath" id="right-sub-link-to-persistent-storage-using-hostpath" data-v-1d1b84c1>Persistent storage using hostPath</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-iscsi" id="right-sub-link-to-persistent-storage-using-iscsi" data-v-1d1b84c1>Persistent storage using iSCSI</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-local-volume" id="right-sub-link-to-persistent-storage-using-local-volume" data-v-1d1b84c1>Persistent storage using local volumes</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-nfs" id="right-sub-link-to-persistent-storage-using-nfs" data-v-1d1b84c1>Persistent storage using NFS</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#red-hat-openshift-container-storage" id="right-sub-link-to-red-hat-openshift-container-storage" data-v-1d1b84c1>Red Hat OpenShift Container Storage</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-using-vsphere" id="right-sub-link-to-persistent-storage-using-vsphere" data-v-1d1b84c1>Persistent storage using VMware vSphere volumes</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi" id="right-sub-link-to-persistent-storage-csi" data-v-1d1b84c1>Configuring CSI volumes</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#ephemeral-storage-csi-inline" id="right-sub-link-to-ephemeral-storage-csi-inline" data-v-1d1b84c1>CSI inline ephemeral volumes</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-snapshots" id="right-sub-link-to-persistent-storage-csi-snapshots" data-v-1d1b84c1>CSI volume snapshots</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-cloning" id="right-sub-link-to-persistent-storage-csi-cloning" data-v-1d1b84c1>CSI volume cloning</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-migration" id="right-sub-link-to-persistent-storage-csi-migration" data-v-1d1b84c1>CSI automatic migration</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-ebs" id="right-sub-link-to-persistent-storage-csi-ebs" data-v-1d1b84c1>AWS Elastic Block Store CSI Driver Operator</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-azure-disk" id="right-sub-link-to-persistent-storage-csi-azure-disk" data-v-1d1b84c1>Azure Disk CSI Driver Operator</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-gcp-pd" id="right-sub-link-to-persistent-storage-csi-gcp-pd" data-v-1d1b84c1>GCP PD CSI Driver Operator</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-cinder" id="right-sub-link-to-persistent-storage-csi-cinder" data-v-1d1b84c1>OpenStack Cinder CSI Driver Operator</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-manila" id="right-sub-link-to-persistent-storage-csi-manila" data-v-1d1b84c1>OpenStack Manila CSI Driver Operator</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-csi-ovirt" id="right-sub-link-to-persistent-storage-csi-ovirt" data-v-1d1b84c1>Red Hat Virtualization CSI Driver Operator</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#persistent-storage-vsphere" id="right-sub-link-to-persistent-storage-vsphere" data-v-1d1b84c1>VMware vSphere CSI Driver Operator</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#add-volume-expansion_expanding-persistent-volumes" id="right-sub-link-to-add-volume-expansion_expanding-persistent-volumes" data-v-1d1b84c1>Enabling volume expansion support</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#expanding-csi-volumes_expanding-persistent-volumes" id="right-sub-link-to-expanding-csi-volumes_expanding-persistent-volumes" data-v-1d1b84c1>Expanding CSI volumes</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#expanding-flexvolume_expanding-persistent-volumes" id="right-sub-link-to-expanding-flexvolume_expanding-persistent-volumes" data-v-1d1b84c1>Expanding FlexVolume with a supported driver</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#expanding-pvc-filesystem_expanding-persistent-volumes" id="right-sub-link-to-expanding-pvc-filesystem_expanding-persistent-volumes" data-v-1d1b84c1>Expanding persistent volume claims (PVCs) with a file system</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#expanding-recovering-from-failure_expanding-persistent-volumes" id="right-sub-link-to-expanding-recovering-from-failure_expanding-persistent-volumes" data-v-1d1b84c1>Recovering from failure when expanding volumes</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#about_dynamic-provisioning" id="right-sub-link-to-about_dynamic-provisioning" data-v-1d1b84c1>About dynamic provisioning</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#available-plug-ins_dynamic-provisioning" id="right-sub-link-to-available-plug-ins_dynamic-provisioning" data-v-1d1b84c1>Available dynamic provisioning plugins</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#defining-storage-classes_dynamic-provisioning" id="right-sub-link-to-defining-storage-classes_dynamic-provisioning" data-v-1d1b84c1>Defining a storage class</a></li><li class="jump-link-item" data-v-1d1b84c1><a href="#change-default-storage-class_dynamic-provisioning" id="right-sub-link-to-change-default-storage-class_dynamic-provisioning" data-v-1d1b84c1>Changing the default storage class</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, &amp; 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":11619,"once":11623,"_errors":11624,"serverRendered":10,"path":11626},["ShallowReactive",3],{"uUstF4AIyn":4,"Pn02PlJOas":11541,"rFVLKcOK8e":11617},{"name":5,"html":6,"type":-1,"toc":7,"breadcrumbs":11227,"error":16,"title":11235,"productName":11229,"productVersions":11248,"pagination":11364,"redirect":11398,"canonicalLinks":11399,"openShiftProducts":11401,"tocFromVolume":10,"jumpLinks":11416},"Storage","\u003Cbody>\u003Cdiv xml:lang=\"en-US\" class=\"book\" id=\"idm140708991059776\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv class=\"producttitle\">\u003Cspan class=\"productname\">OpenShift Container Platform\u003C/span> \u003Cspan class=\"productnumber\">4.8\u003C/span>\u003C/div>\u003Cdiv>\u003Ch3 class=\"subtitle\">Configuring and managing storage in OpenShift Container Platform \u003C/h3>\u003C/div>\u003Cdiv>\u003Cdiv xml:lang=\"en-US\" class=\"authorgroup\">\u003Cspan class=\"orgname\">Red Hat OpenShift Documentation Team\u003C/span>\u003C/div>\u003C/div>\u003Cdiv>\u003Ca href=\"#idm140708991936208\">Legal Notice\u003C/a>\u003C/div>\u003Cdiv>\u003Cdiv class=\"abstract\">\u003Cp class=\"title\">\u003Cstrong>Abstract\u003C/strong>\u003C/p>\u003Cdiv class=\"para\">\n\t\t\t\tThis document provides instructions for configuring persistent volumes from various storage back ends and managing dynamic allocation from Pods.\n\t\t\t\u003C/div>\u003C/div>\u003C/div>\u003C/div>\u003Chr/>\u003C/div>\u003Csection class=\"chapter\" id=\"storage-overview\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">Chapter 1. OpenShift Container Platform storage overview\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\tOpenShift Container Platform supports multiple types of storage, both for on-premise and cloud providers. You can manage container storage for persistent and non-persistent data in an OpenShift Container Platform cluster.\n\t\t\u003C/p>\u003Csection class=\"section\" id=\"openshift-storage-common-terms_storage-overview\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">1.1. modules/openshift-storage-common-terms.adoc\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tThis glossary defines common terms that are used in the storage content. These terms help you understand OpenShift Container Platform architecture effectively.\n\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">Access modes\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVolume access modes describe volume capabilities. You can use access modes to match persistent volume claim (PVC) and persistent volume (PV). The following are the examples of access modes:\n\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\tReadWriteOnce (RWO)\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tReadOnlyMany (ROX)\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tReadWriteMany (RWX)\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tReadWriteOncePod (RWOP)\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Cinder\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tThe Block Storage service for Red Hat OpenStack Platform (RHOSP) which manages the administration, security, and scheduling of all volumes.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Config map\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA config map provides a way to inject configuration data into pods. You can reference the data stored in a config map in a volume of type \u003Ccode class=\"literal\">ConfigMap\u003C/code>. Applications running in a pod can use this data.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Container Storage Interface (CSI)\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tAn API specification for the management of container storage across different container orchestration (CO) systems.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Dynamic Provisioning\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tThe framework allows you to create storage volumes on-demand, eliminating the need for cluster administrators to pre-provision persistent storage.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Ephemeral storage\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tPods and containers can require temporary or transient local storage for their operation. The lifetime of this ephemeral storage does not extend beyond the life of the individual pod, and this ephemeral storage cannot be shared across pods.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Fiber channel\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA networking technology that is used to transfer data among data centers, computer servers, switches and storage.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">FlexVolume\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tFlexVolume is an out-of-tree plugin interface that uses an exec-based model to interface with storage drivers. You must install the FlexVolume driver binaries in a pre-defined volume plugin path on each node and in some cases the control plane nodes.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">fsGroup\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tThe fsGroup defines a file system group ID of a pod.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">iSCSI\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tInternet Small Computer Systems Interface (iSCSI) is an Internet Protocol-based storage networking standard for linking data storage facilities. An iSCSI volume allows an existing iSCSI (SCSI over IP) volume to be mounted into your Pod.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">hostPath\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA hostPath volume in an OpenShift Container Platform cluster mounts a file or directory from the host node’s filesystem into your pod.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">KMS key\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tThe Key Management Service (KMS) helps you achieve the required level of encryption of your data across different services. you can use the KMS key to encrypt, decrypt, and re-encrypt data.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Local volumes\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA local volume represents a mounted local storage device such as a disk, partition or directory.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">NFS\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA Network File System (NFS) that allows remote hosts to mount file systems over a network and interact with those file systems as though they are mounted locally. This enables system administrators to consolidate resources onto centralized servers on the network.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">OpenShift Data Foundation\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA provider of agnostic persistent storage for OpenShift Container Platform supporting file, block, and object storage, either in-house or in hybrid clouds\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Persistent storage\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tPods and containers can require permanent storage for their operation. OpenShift Container Platform uses the Kubernetes persistent volume (PV) framework to allow cluster administrators to provision persistent storage for a cluster. Developers can use PVC to request PV resources without having specific knowledge of the underlying storage infrastructure.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Persistent volumes (PV)\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tOpenShift Container Platform uses the Kubernetes persistent volume (PV) framework to allow cluster administrators to provision persistent storage for a cluster. Developers can use PVC to request PV resources without having specific knowledge of the underlying storage infrastructure.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Persistent volume claims (PVCs)\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tYou can use a PVC to mount a PersistentVolume into a Pod. You can access the storage without knowing the details of the cloud environment.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Pod\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tOne or more containers with shared resources, such as volume and IP addresses, running in your OpenShift Container Platform cluster. A pod is the smallest compute unit defined, deployed, and managed.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Reclaim policy\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA policy that tells the cluster what to do with the volume after it is released. A volume’s reclaim policy can be \u003Ccode class=\"literal\">Retain\u003C/code>, \u003Ccode class=\"literal\">Recycle\u003C/code>, or \u003Ccode class=\"literal\">Delete\u003C/code>.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Role-based access control (RBAC)\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tRole-based access control (RBAC) is a method of regulating access to computer or network resources based on the roles of individual users within your organization.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Stateless applications\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA stateless application is an application program that does not save client data generated in one session for use in the next session with that client.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Stateful applications\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA stateful application is an application program that saves data to persistent disk storage. A server, client, and applications can use a persistent disk storage. You can use the \u003Ccode class=\"literal\">Statefulset\u003C/code> object in OpenShift Container Platform to manage the deployment and scaling of a set of Pods, and provides guarantee about the ordering and uniqueness of these Pods.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Static provisioning\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA cluster administrator creates a number of PVs. PVs contain the details of storage. PVs exist in the Kubernetes API and are available for consumption.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Storage\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tOpenShift Container Platform supports many types of storage, both for on-premise and cloud providers. You can manage container storage for persistent and non-persistent data in an OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Storage class\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tA storage class provides a way for administrators to describe the classes of storage they offer. Different classes might map to quality of service levels, backup policies, arbitrary policies determined by the cluster administrators.\n\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">VMware vSphere’s Virtual Machine Disk (VMDK) volumes\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\tVirtual Machine Disk (VMDK) is a file format that describes containers for virtual hard disk drives that is used in virtual machines.\n\t\t\t\t\t\t\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"storage-types\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">1.2. Storage Types\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform storage is broadly classified into two categories, namely ephemeral storage and persistent storage.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"ephemeral-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">1.2.1. Ephemeral storage\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tPods and containers are ephemeral or transient in nature and designed for stateless applications. Ephemeral storage allows administrators and developers to better manage the local storage for some of their operations. For more information about ephemeral storage overview, types, and management, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-ephemeral-storage\">Understanding ephemeral storage\u003C/a>.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">1.2.2. Persistent storage\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStateful applications deployed in containers require persistent storage. OpenShift Container Platform uses a pre-provisioned storage framework called persistent volumes (PV) to allow cluster administrators to provision persistent storage. The data inside these volumes can exist beyond the lifecycle of an individual pod. Developers can use persistent volume claims (PVCs) to request storage requirements. For more information about persistent storage overview, configuration, and lifecycle, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage\">Understanding persistent storage\u003C/a>.\n\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"container-storage-interface\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">1.3. Container Storage Interface (CSI)\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tCSI is an API specification for the management of container storage across different container orchestration (CO) systems. You can manage the storage volumes within the container native environments, without having specific knowledge of the underlying storage infrastructure. With the CSI, storage works uniformly across different container orchestration systems, regardless of the storage vendors you are using. For more information about CSI, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi\">Using Container Storage Interface (CSI)\u003C/a>.\n\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"dynamic-provisioning-overview\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">1.4. Dynamic Provisioning\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tDynamic Provisioning allows you to create storage volumes on-demand, eliminating the need for cluster administrators to pre-provision storage. For more information about dynamic provisioning, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#dynamic-provisioning\">Dynamic provisioning\u003C/a>.\n\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003Csection class=\"chapter\" id=\"understanding-ephemeral-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">Chapter 2. Understanding ephemeral storage\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"storage-ephemeral-storage-overview_understanding-ephemeral-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">2.1. Overview\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tIn addition to persistent storage, pods and containers can require ephemeral or transient local storage for their operation. The lifetime of this ephemeral storage does not extend beyond the life of the individual pod, and this ephemeral storage cannot be shared across pods.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tPods use ephemeral local storage for scratch space, caching, and logs. Issues related to the lack of local storage accounting and isolation include the following:\n\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\tPods do not know how much local storage is available to them.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tPods cannot request guaranteed local storage.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tLocal storage is a best effort resource.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tPods can be evicted due to other pods filling the local storage, after which new pods are not admitted until sufficient storage has been reclaimed.\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\tUnlike persistent volumes, ephemeral storage is unstructured and the space is shared between all pods running on a node, in addition to other uses by the system, the container runtime, and OpenShift Container Platform. The ephemeral storage framework allows pods to specify their transient local storage needs. It also allows OpenShift Container Platform to schedule pods where appropriate, and to protect the node against excessive use of local storage.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tWhile the ephemeral storage framework allows administrators and developers to better manage this local storage, it does not provide any promises related to I/O throughput and latency.\n\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"storage-ephemeral-storage-types_understanding-ephemeral-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">2.2. Types of ephemeral storage\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tEphemeral local storage is always made available in the primary partition. There are two basic ways of creating the primary partition: root and runtime.\n\t\t\t\u003C/p>\u003Ch5 id=\"root\">Root\u003C/h5>\u003Cp>\n\t\t\t\tThis partition holds the kubelet root directory, \u003Ccode class=\"literal\">/var/lib/kubelet/\u003C/code> by default, and \u003Ccode class=\"literal\">/var/log/\u003C/code> directory. This partition can be shared between user pods, the OS, and Kubernetes system daemons. This partition can be consumed by pods through \u003Ccode class=\"literal\">EmptyDir\u003C/code> volumes, container logs, image layers, and container-writable layers. Kubelet manages shared access and isolation of this partition. This partition is ephemeral, and applications cannot expect any performance SLAs, such as disk IOPS, from this partition.\n\t\t\t\u003C/p>\u003Ch5 id=\"runtime\">Runtime\u003C/h5>\u003Cp>\n\t\t\t\tThis is an optional partition that runtimes can use for overlay file systems. OpenShift Container Platform attempts to identify and provide shared access along with isolation to this partition. Container image layers and writable layers are stored here. If the runtime partition exists, the \u003Ccode class=\"literal\">root\u003C/code> partition does not hold any image layer or other writable storage.\n\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"storage-ephemeral-storage-manage_understanding-ephemeral-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">2.3. Ephemeral storage management\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tCluster administrators can manage ephemeral storage within a project by setting quotas that define the limit ranges and number of requests for ephemeral storage across all pods in a non-terminal state. Developers can also set requests and limits on this compute resource at the pod and container level.\n\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"storage-ephemeral-storage-monitoring_understanding-ephemeral-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">2.4. Monitoring ephemeral storage\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tYou can use \u003Ccode class=\"literal\">/bin/df\u003C/code> as a tool to monitor ephemeral storage usage on the volume where ephemeral container data is located, which is \u003Ccode class=\"literal\">/var/lib/kubelet\u003C/code> and \u003Ccode class=\"literal\">/var/lib/containers\u003C/code>. The available space for only \u003Ccode class=\"literal\">/var/lib/kubelet\u003C/code> is shown when you use the \u003Ccode class=\"literal\">df\u003C/code> command if \u003Ccode class=\"literal\">/var/lib/containers\u003C/code> is placed on a separate disk by the cluster administrator.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tTo show the human-readable values of used and available space in \u003Ccode class=\"literal\">/var/lib\u003C/code>, enter the following command:\n\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ df -h /var/lib\u003C/pre>\u003Cp>\n\t\t\t\tThe output shows the ephemeral storage usage in \u003Ccode class=\"literal\">/var/lib\u003C/code>:\n\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\n\u003Cpre class=\"programlisting language-terminal\">Filesystem Size Used Avail Use% Mounted on\n/dev/sda1 69G 32G 34G 49% /\u003C/pre>\n\n\t\t\t\t\u003C/p>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"chapter\" id=\"understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">Chapter 3. Understanding persistent storage\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"persistent-storage-overview_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">3.1. Persistent storage overview\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tManaging storage is a distinct problem from managing compute resources. OpenShift Container Platform uses the Kubernetes persistent volume (PV) framework to allow cluster administrators to provision persistent storage for a cluster. Developers can use persistent volume claims (PVCs) to request PV resources without having specific knowledge of the underlying storage infrastructure.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tPVCs are specific to a project, and are created and used by developers as a means to use a PV. PV resources on their own are not scoped to any single project; they can be shared across the entire OpenShift Container Platform cluster and claimed from any project. After a PV is bound to a PVC, that PV can not then be bound to additional PVCs. This has the effect of scoping a bound PV to a single namespace, that of the binding project.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tPVs are defined by a \u003Ccode class=\"literal\">PersistentVolume\u003C/code> API object, which represents a piece of existing storage in the cluster that was either statically provisioned by the cluster administrator or dynamically provisioned using a \u003Ccode class=\"literal\">StorageClass\u003C/code> object. It is a resource in the cluster just like a node is a cluster resource.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tPVs are volume plugins like \u003Ccode class=\"literal\">Volumes\u003C/code> but have a lifecycle that is independent of any individual pod that uses the PV. PV objects capture the details of the implementation of the storage, be that NFS, iSCSI, or a cloud-provider-specific storage system.\n\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\tHigh availability of storage in the infrastructure is left to the underlying storage provider.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\tPVCs are defined by a \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> API object, which represents a request for storage by a developer. It is similar to a pod in that pods consume node resources and PVCs consume PV resources. For example, pods can request specific levels of resources, such as CPU and memory, while PVCs can request specific storage capacity and access modes. For example, they can be mounted once read-write or many times read-only.\n\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"lifecycle-volume-claim_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">3.2. Lifecycle of a volume and claim\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tPVs are resources in the cluster. PVCs are requests for those resources and also act as claim checks to the resource. The interaction between PVs and PVCs have the following lifecycle.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"provisioning_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.2.1. Provision storage\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIn response to requests from a developer defined in a PVC, a cluster administrator configures one or more dynamic provisioners that provision storage and a matching PV.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAlternatively, a cluster administrator can create a number of PVs in advance that carry the details of the real storage that is available for use. PVs exist in the API and are available for use.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"binding_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.2.2. Bind claims\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen you create a PVC, you request a specific amount of storage, specify the required access mode, and create a storage class to describe and classify the storage. The control loop in the master watches for new PVCs and binds the new PVC to an appropriate PV. If an appropriate PV does not exist, a provisioner for the storage class creates one.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe size of all PVs might exceed your PVC size. This is especially true with manually provisioned PVs. To minimize the excess, OpenShift Container Platform binds to the smallest PV that matches all other criteria.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tClaims remain unbound indefinitely if a matching volume does not exist or can not be created with any available provisioner servicing a storage class. Claims are bound as matching volumes become available. For example, a cluster with many manually provisioned 50Gi volumes would not match a PVC requesting 100Gi. The PVC can be bound when a 100Gi PV is added to the cluster.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"using-pods_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.2.3. Use pods and claimed PVs\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tPods use claims as volumes. The cluster inspects the claim to find the bound volume and mounts that volume for a pod. For those volumes that support multiple access modes, you must specify which mode applies when you use the claim as a volume in a pod.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tOnce you have a claim and that claim is bound, the bound PV belongs to you for as long as you need it. You can schedule pods and access claimed PVs by including \u003Ccode class=\"literal\">persistentVolumeClaim\u003C/code> in the pod’s volumes block.\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\tIf you attach persistent volumes that have high file counts to pods, those pods can fail or can take a long time to start. For more information, see \u003Ca class=\"link\" href=\"https://access.redhat.com/solutions/6221251\">When using Persistent Volumes with high file counts in OpenShift, why do pods fail to start or take an excessive amount of time to achieve \"Ready\" state?\u003C/a>.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"pvcprotection_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.2.4. Storage Object in Use Protection\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe Storage Object in Use Protection feature ensures that PVCs in active use by a pod and PVs that are bound to PVCs are not removed from the system, as this can result in data loss.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tStorage Object in Use Protection is enabled by default.\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\tA PVC is in active use by a pod when a \u003Ccode class=\"literal\">Pod\u003C/code> object exists that uses the PVC.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\tIf a user deletes a PVC that is in active use by a pod, the PVC is not removed immediately. PVC removal is postponed until the PVC is no longer actively used by any pods. Also, if a cluster admin deletes a PV that is bound to a PVC, the PV is not removed immediately. PV removal is postponed until the PV is no longer bound to a PVC.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"releasing_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.2.5. Release a persistent volume\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen you are finished with a volume, you can delete the PVC object from the API, which allows reclamation of the resource. The volume is considered released when the claim is deleted, but it is not yet available for another claim. The previous claimant’s data remains on the volume and must be handled according to policy.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"reclaiming_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.2.6. Reclaim policy for persistent volumes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe reclaim policy of a persistent volume tells the cluster what to do with the volume after it is released. A volume’s reclaim policy can be \u003Ccode class=\"literal\">Retain\u003C/code>, \u003Ccode class=\"literal\">Recycle\u003C/code>, or \u003Ccode class=\"literal\">Delete\u003C/code>.\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\t\u003Ccode class=\"literal\">Retain\u003C/code> reclaim policy allows manual reclamation of the resource for those volume plugins that support it.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ccode class=\"literal\">Recycle\u003C/code> reclaim policy recycles the volume back into the pool of unbound persistent volumes once it is released from its claim.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\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\tThe \u003Ccode class=\"literal\">Recycle\u003C/code> reclaim policy is deprecated in OpenShift Container Platform 4. Dynamic provisioning is recommended for equivalent and better functionality.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ccode class=\"literal\">Delete\u003C/code> reclaim policy deletes both the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object from OpenShift Container Platform and the associated storage asset in external infrastructure, such as AWS EBS or VMware vSphere.\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\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tDynamically provisioned volumes are always deleted.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"reclaim-manual_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.2.7. Reclaiming a persistent volume manually\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen a persistent volume claim (PVC) is deleted, the persistent volume (PV) still exists and is considered \"released\". However, the PV is not yet available for another claim because the data of the previous claimant remains on the volume.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tTo manually reclaim the PV as a cluster administrator:\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\tDelete the PV.\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete pv &lt;pv-name&gt;\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe associated storage asset in the external infrastructure, such as an AWS EBS, GCE PD, Azure Disk, or Cinder volume, still exists after the PV is deleted.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tClean up the data on the associated storage asset.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tDelete the associated storage asset. Alternately, to reuse the same storage asset, create a new PV with the storage asset definition.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\tThe reclaimed PV is now available for use by another PVC.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"reclaim-policy_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.2.8. Changing the reclaim policy of a persistent volume\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTo change the reclaim policy of a persistent volume:\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\tList the persistent volumes in your cluster:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pv\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=\"screen\">NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE\n pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim1 manual 10s\n pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim2 manual 6s\n pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim3 manual 3s\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\tChoose one of your persistent volumes and change its reclaim policy:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc patch pv &lt;your-pv-name&gt; -p '{\"spec\":{\"persistentVolumeReclaimPolicy\":\"Retain\"}}'\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that your chosen persistent volume has the right policy:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pv\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=\"screen\">NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM STORAGECLASS REASON AGE\n pvc-b6efd8da-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim1 manual 10s\n pvc-b95650f8-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Delete Bound default/claim2 manual 6s\n pvc-bb3ca71d-b7b5-11e6-9d58-0ed433a7dd94 4Gi RWO Retain Bound default/claim3 manual 3s\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\tIn the preceding output, the volume bound to claim \u003Ccode class=\"literal\">default/claim3\u003C/code> now has a \u003Ccode class=\"literal\">Retain\u003C/code> reclaim policy. The volume will not be automatically deleted when a user deletes claim \u003Ccode class=\"literal\">default/claim3\u003C/code>.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-volumes_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">3.3. Persistent volumes\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tEach PV contains a \u003Ccode class=\"literal\">spec\u003C/code> and \u003Ccode class=\"literal\">status\u003C/code>, which is the specification and status of the volume, for example:\n\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>\u003Ccode class=\"literal\">PersistentVolume\u003C/code> object definition example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: pv0001 \u003Cspan id=\"CO1-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n capacity:\n storage: 5Gi \u003Cspan id=\"CO1-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n accessModes:\n - ReadWriteOnce \u003Cspan id=\"CO1-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n persistentVolumeReclaimPolicy: Retain \u003Cspan id=\"CO1-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n ...\nstatus:\n ...\u003C/pre>\n\n\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO1-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tName of the persistent volume.\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO1-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe amount of storage available to the volume.\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO1-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe access mode, defining the read-write and mount permissions.\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO1-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe reclaim policy, indicating how the resource should be handled once it is released.\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Csection class=\"section\" id=\"types-of-persistent-volumes_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.3.1. Types of PVs\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform supports the following persistent volume plugins:\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\tAWS Elastic Block Store (EBS)\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tAzure Disk\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tAzure File\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tCinder\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tFibre Channel\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tGCE Persistent Disk\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tHostPath\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tiSCSI\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tLocal volume\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tNFS\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenStack Manila\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tRed Hat OpenShift Container Storage\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tVMware vSphere\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"pv-capacity_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.3.2. Capacity\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tGenerally, a persistent volume (PV) has a specific storage capacity. This is set by using the \u003Ccode class=\"literal\">capacity\u003C/code> attribute of the PV.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCurrently, storage capacity is the only resource that can be set or requested. Future attributes may include IOPS, throughput, and so on.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"pv-access-modes_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.3.3. Access modes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tA persistent volume can be mounted on a host in any way supported by the resource provider. Providers have different capabilities and each PV’s access modes are set to the specific modes supported by that particular volume. For example, NFS can support multiple read-write clients, but a specific NFS PV might be exported on the server as read-only. Each PV gets its own set of access modes describing that specific PV’s capabilities.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tClaims are matched to volumes with similar access modes. The only two matching criteria are access modes and size. A claim’s access modes represent a request. Therefore, you might be granted more, but never less. For example, if a claim requests RWO, but the only volume available is an NFS PV (RWO+ROX+RWX), the claim would then match NFS because it supports RWO.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tDirect matches are always attempted first. The volume’s modes must match or contain more modes than you requested. The size must be greater than or equal to what is expected. If two types of volumes, such as NFS and iSCSI, have the same set of access modes, either of them can match a claim with those modes. There is no ordering between types of volumes and no way to choose one type over another.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAll volumes with the same modes are grouped, and then sorted by size, smallest to largest. The binder gets the group with matching modes and iterates over each, in size order, until one size matches.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe following table lists the access modes:\n\t\t\t\t\u003C/p>\u003Crh-table id=\"idm140708989985872\">\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccaption>Table 3.1. Access modes\u003C/caption>\u003Ccolgroup>\u003Ccol style=\"width: 20%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 20%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 60%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708979737040\" scope=\"col\">Access Mode\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708979735984\" scope=\"col\">CLI abbreviation\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708979734896\" scope=\"col\">Description\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979737040\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tReadWriteOnce\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=\"idm140708979735984\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">RWO\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=\"idm140708979734896\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tThe volume can be mounted as read-write by a single node.\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=\"idm140708979737040\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tReadOnlyMany\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=\"idm140708979735984\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">ROX\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=\"idm140708979734896\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tThe volume can be mounted as read-only by many nodes.\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=\"idm140708979737040\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tReadWriteMany\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=\"idm140708979735984\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">RWX\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=\"idm140708979734896\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tThe volume can be mounted as read-write by many nodes.\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>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tVolume access modes are descriptors of volume capabilities. They are not enforced constraints. The storage provider is responsible for runtime errors resulting from invalid use of the resource.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tFor example, NFS offers \u003Ccode class=\"literal\">ReadWriteOnce\u003C/code> access mode. You must mark the claims as \u003Ccode class=\"literal\">read-only\u003C/code> if you want to use the volume’s ROX capability. Errors in the provider show up at runtime as mount errors.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tiSCSI and Fibre Channel volumes do not currently have any fencing mechanisms. You must ensure the volumes are only used by one node at a time. In certain situations, such as draining a node, the volumes can be used simultaneously by two nodes. Before draining the node, first ensure the pods that use these volumes are deleted.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Crh-table id=\"idm140708993006672\">\u003Ctable class=\"gt-4-cols lt-7-rows\">\u003Ccaption>Table 3.2. Supported access modes for PVs\u003C/caption>\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=\"idm140708994209328\" scope=\"col\">Volume plugin\u003C/th>\u003Cth align=\"center\" valign=\"top\" id=\"idm140708994208240\" scope=\"col\">ReadWriteOnce \u003Csup>[1]\u003C/sup>\u003C/th>\u003Cth align=\"center\" valign=\"top\" id=\"idm140708989911072\" scope=\"col\">ReadOnlyMany\u003C/th>\u003Cth align=\"center\" valign=\"top\" id=\"idm140708989909984\" scope=\"col\">ReadWriteMany\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tAWS EBS \u003Csup>[2]\u003C/sup>\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp>  -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tAzure File\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tAzure Disk\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tCinder\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp>  -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFibre Channel\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp>  -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tGCE Persistent Disk\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp>  -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tHostPath\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp>  -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tiSCSI\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp>  -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tLocal volume\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp>  -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tNFS\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tOpenStack Manila\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tRed Hat OpenShift Container Storage\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708994209328\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tVMware vSphere\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708994208240\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989911072\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708989909984\">\n\u003Cdiv class=\"literallayout\">\u003Cp>  -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tReadWriteOnce (RWO) volumes cannot be mounted on multiple nodes. If a node fails, the system does not allow the attached RWO volume to be mounted on a new node because it is already assigned to the failed node. If you encounter a multi-attach error message as a result, force delete the pod on a shutdown or crashed node to avoid data loss in critical workloads, such as when dynamic persistent volumes are attached.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tUse a recreate deployment strategy for pods that rely on AWS EBS.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"pv-phase_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.3.4. Phase\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tVolumes can be found in one of the following phases:\n\t\t\t\t\u003C/p>\u003Crh-table id=\"idm140708989078816\">\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccaption>Table 3.3. Volume phases\u003C/caption>\u003Ccolgroup>\u003Ccol style=\"width: 33%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 67%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708990400256\" scope=\"col\">Phase\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708990399168\" scope=\"col\">Description\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708990400256\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tAvailable\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=\"idm140708990399168\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tA free resource not yet bound to a claim.\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=\"idm140708990400256\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBound\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=\"idm140708990399168\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tThe volume is bound to a claim.\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=\"idm140708990400256\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tReleased\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=\"idm140708990399168\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tThe claim was deleted, but the resource is not yet reclaimed by the cluster.\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=\"idm140708990400256\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFailed\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=\"idm140708990399168\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tThe volume has failed its automatic reclamation.\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>\u003Cp>\n\t\t\t\t\tYou can view the name of the PVC bound to the PV by running:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pv &lt;pv-claim&gt;\u003C/pre>\u003Csection class=\"section\" id=\"pv-mount-options_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">3.3.4.1. Mount options\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can specify mount options while mounting a PV by using the attribute \u003Ccode class=\"literal\">mountOptions\u003C/code>.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tFor example:\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Mount options example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: pv0001\nspec:\n capacity:\n storage: 1Gi\n accessModes:\n - ReadWriteOnce\n mountOptions: \u003Cspan id=\"CO2-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n - nfsvers=4.1\n nfs:\n path: /tmp\n server: 172.17.0.2\n persistentVolumeReclaimPolicy: Retain\n claimRef:\n name: claim1\n namespace: default\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO2-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tSpecified mount options are used while mounting the PV to the disk.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe following PV types support mount options:\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\tAWS Elastic Block Store (EBS)\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tAzure Disk\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tAzure File\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tCinder\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tGCE Persistent Disk\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tiSCSI\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tLocal volume\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tNFS\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tRed Hat OpenShift Container Storage (Ceph RBD only)\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tVMware vSphere\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\tFibre Channel and HostPath PVs do not support mount options.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-volume-claims_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">3.4. Persistent volume claims\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tEach \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object contains a \u003Ccode class=\"literal\">spec\u003C/code> and \u003Ccode class=\"literal\">status\u003C/code>, which is the specification and status of the persistent volume claim (PVC), for example:\n\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>\u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object definition example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">kind: PersistentVolumeClaim\napiVersion: v1\nmetadata:\n name: myclaim \u003Cspan id=\"CO3-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n accessModes:\n - ReadWriteOnce \u003Cspan id=\"CO3-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n resources:\n requests:\n storage: 8Gi \u003Cspan id=\"CO3-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n storageClassName: gold \u003Cspan id=\"CO3-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\nstatus:\n ...\u003C/pre>\n\n\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO3-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tName of the PVC\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO3-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe access mode, defining the read-write and mount permissions\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO3-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tThe amount of storage available to the PVC\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO3-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\tName of the \u003Ccode class=\"literal\">StorageClass\u003C/code> required by the claim\n\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Csection class=\"section\" id=\"pvc-storage-class_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.4.1. Storage classes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tClaims can optionally request a specific storage class by specifying the storage class’s name in the \u003Ccode class=\"literal\">storageClassName\u003C/code> attribute. Only PVs of the requested class, ones with the same \u003Ccode class=\"literal\">storageClassName\u003C/code> as the PVC, can be bound to the PVC. The cluster administrator can configure dynamic provisioners to service one or more storage classes. The cluster administrator can create a PV on demand that matches the specifications in the PVC.\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 Cluster Storage Operator might install a default storage class depending on the platform in use. This storage class is owned and controlled by the operator. It cannot be deleted or modified beyond defining annotations and labels. If different behavior is desired, you must define a custom storage class.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\tThe cluster administrator can also set a default storage class for all PVCs. When a default storage class is configured, the PVC must explicitly ask for \u003Ccode class=\"literal\">StorageClass\u003C/code> or \u003Ccode class=\"literal\">storageClassName\u003C/code> annotations set to \u003Ccode class=\"literal\">\"\"\u003C/code> to be bound to a PV without a storage class.\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\tIf more than one storage class is marked as default, a PVC can only be created if the \u003Ccode class=\"literal\">storageClassName\u003C/code> is explicitly specified. Therefore, only one storage class should be set as the default.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"pvc-access-modes_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.4.2. Access modes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tClaims use the same conventions as volumes when requesting storage with specific access modes.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"pvc-resources_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.4.3. Resources\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tClaims, such as pods, can request specific quantities of a resource. In this case, the request is for storage. The same resource model applies to volumes and claims.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"pvc-claims-as-volumes_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.4.4. Claims as volumes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tPods access storage by using the claim as a volume. Claims must exist in the same namespace as the pod using the claim. The cluster finds the claim in the pod’s namespace and uses it to get the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> backing the claim. The volume is mounted to the host and into the pod, for example:\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Mount volume to the host and into the pod example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">kind: Pod\napiVersion: v1\nmetadata:\n name: mypod\nspec:\n containers:\n - name: myfrontend\n image: dockerfile/nginx\n volumeMounts:\n - mountPath: \"/var/www/html\" \u003Cspan id=\"CO4-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n name: mypd \u003Cspan id=\"CO4-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n volumes:\n - name: mypd\n persistentVolumeClaim:\n claimName: myclaim \u003Cspan id=\"CO4-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO4-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tPath to mount the volume inside the pod.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO4-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tName of the volume to mount. Do not mount to the container root, \u003Ccode class=\"literal\">/\u003C/code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged, such as the host \u003Ccode class=\"literal\">/dev/pts\u003C/code> files. It is safe to mount the host by using \u003Ccode class=\"literal\">/host\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO4-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tName of the PVC, that exists in the same namespace, to use.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"block-volume-support_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">3.5. Block volume support\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform can statically provision raw block volumes. These volumes do not have a file system, and can provide performance benefits for applications that either write to the disk directly or implement their own storage service.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tRaw block volumes are provisioned by specifying \u003Ccode class=\"literal\">volumeMode: Block\u003C/code> in the PV and PVC specification.\n\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\tPods using raw block volumes must be configured to allow privileged containers.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\tThe following table displays which volume plugins support block volumes.\n\t\t\t\u003C/p>\u003Crh-table id=\"idm140708995027312\">\u003Ctable class=\"gt-4-cols lt-7-rows\">\u003Ccaption>Table 3.4. Block volume support\u003C/caption>\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=\"idm140708993789776\" scope=\"col\">Volume Plugin\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708993788688\" scope=\"col\">Manually provisioned\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708993787600\" scope=\"col\">Dynamically provisioned\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708989889152\" scope=\"col\">Fully supported\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tAWS EBS\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tAzure Disk\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tAzure File\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tCinder\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tFibre Channel\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tGCP\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tHostPath\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tiSCSI\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tLocal volume\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tNFS\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tRed Hat OpenShift Container Storage\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993789776\"> \u003Cp>\n\t\t\t\t\t\t\t\tVMware vSphere\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993788688\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708993787600\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989889152\"> \u003Cp>\n\t\t\t\t\t\t\t\t✅\n\t\t\t\t\t\t\t\u003C/p>\n\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\tAny of the block volumes that can be provisioned manually, but are not provided as fully supported, are included as 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. For 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\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"block-volume-examples_understanding-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">3.5.1. Block volume examples\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>PV example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: block-pv\nspec:\n capacity:\n storage: 10Gi\n accessModes:\n - ReadWriteOnce\n volumeMode: Block \u003Cspan id=\"CO5-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n persistentVolumeReclaimPolicy: Retain\n fc:\n targetWWNs: [\"50060e801049cfd1\"]\n lun: 0\n readOnly: false\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO5-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\">volumeMode\u003C/code> must be set to \u003Ccode class=\"literal\">Block\u003C/code> to indicate that this PV is a raw block volume.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>PVC example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: block-pvc\nspec:\n accessModes:\n - ReadWriteOnce\n volumeMode: Block \u003Cspan id=\"CO6-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n resources:\n requests:\n storage: 10Gi\u003C/pre>\n\n\t\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\t\t\u003Ccode class=\"literal\">volumeMode\u003C/code> must be set to \u003Ccode class=\"literal\">Block\u003C/code> to indicate that a raw block PVC is requested.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>\u003Ccode class=\"literal\">Pod\u003C/code> specification example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: Pod\nmetadata:\n name: pod-with-block-volume\nspec:\n containers:\n - name: fc-container\n image: fedora:26\n command: [\"/bin/sh\", \"-c\"]\n args: [ \"tail -f /dev/null\" ]\n volumeDevices: \u003Cspan id=\"CO7-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n - name: data\n devicePath: /dev/xvda \u003Cspan id=\"CO7-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n volumes:\n - name: data\n persistentVolumeClaim:\n claimName: block-pvc \u003Cspan id=\"CO7-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\n\n\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\u003Ccode class=\"literal\">volumeDevices\u003C/code>, instead of \u003Ccode class=\"literal\">volumeMounts\u003C/code>, is used for block devices. Only \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> sources can be used with raw block volumes.\n\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\u003Ccode class=\"literal\">devicePath\u003C/code>, instead of \u003Ccode class=\"literal\">mountPath\u003C/code>, represents the path to the physical device where the raw block is mapped to the system.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO7-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe volume source must be of type \u003Ccode class=\"literal\">persistentVolumeClaim\u003C/code> and must match the name of the PVC as expected.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Crh-table id=\"idm140708989118912\">\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccaption>Table 3.5. Accepted values for volumeMode\u003C/caption>\u003Ccolgroup>\u003Ccol style=\"width: 33%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 67%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708990975168\" scope=\"col\">Value\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708990974080\" scope=\"col\">Default\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708990975168\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFilesystem\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=\"idm140708990974080\"> \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=\"idm140708990975168\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBlock\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=\"idm140708990974080\"> \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>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Crh-table id=\"idm140708990801520\">\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccaption>Table 3.6. Binding scenarios for block volumes\u003C/caption>\u003Ccolgroup>\u003Ccol style=\"width: 17%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 33%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 50%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708989995264\" scope=\"col\">PV \u003Ccode class=\"literal\">volumeMode\u003C/code>\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708989993856\" scope=\"col\">PVC \u003Ccode class=\"literal\">volumeMode\u003C/code>\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708989992448\" scope=\"col\">Binding result\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFilesystem\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFilesystem\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBind\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=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tUnspecified\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tUnspecified\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBind\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=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFilesystem\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tUnspecified\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBind\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=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tUnspecified\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFilesystem\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBind\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=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBlock\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBlock\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBind\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=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tUnspecified\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBlock\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tNo Bind\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=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBlock\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tUnspecified\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tNo Bind\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=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFilesystem\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBlock\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tNo Bind\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=\"idm140708989995264\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tBlock\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=\"idm140708989993856\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFilesystem\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=\"idm140708989992448\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tNo Bind\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>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tUnspecified values result in the default value of \u003Ccode class=\"literal\">Filesystem\u003C/code>.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"chapter\" id=\"configuring-persistent-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">Chapter 4. Configuring persistent storage\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"persistent-storage-aws\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.1. Persistent storage using AWS Elastic Block Store\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform supports AWS Elastic Block Store volumes (EBS). You can provision your OpenShift Container Platform cluster with persistent storage by using \u003Ca class=\"link\" href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html\">Amazon EC2\u003C/a>. Some familiarity with Kubernetes and AWS is assumed.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThe Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. AWS Elastic Block Store volumes can be provisioned dynamically. Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users.\n\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision AWS EBS storage.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tHigh-availability of storage in the infrastructure is left to the underlying storage provider.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\tFor OpenShift Container Platform, automatic migration from AWS EBS in-tree to the Container Storage Interface (CSI) driver is available as a Technology Preview (TP) feature. With migration enabled, volumes provisioned using the existing in-tree driver are automatically migrated to use the AWS EBS CSI driver. For more information, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration feature\u003C/a>.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"storage-create-EBS-storage-class_persistent-storage-aws\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.1.1. Creating the EBS storage class\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage classes are used to differentiate and delineate storage levels and usages. By defining a storage class, users can obtain dynamically provisioned persistent volumes.\n\t\t\t\t\u003C/p>\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 OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Storage Classes\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the storage class overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Storage Class\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\tDefine the desired options on the page that appears.\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\tEnter a name to reference the storage class.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter an optional description.\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 reclaim policy.\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 \u003Ccode class=\"literal\">kubernetes.io/aws-ebs\u003C/code> from the drop-down list.\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\tTo create the storage class with the equivalent CSI driver, select \u003Ccode class=\"literal\">ebs.csi.aws.com\u003C/code> from the drop-down list. For more details, see \u003Cspan class=\"emphasis\">\u003Cem>AWS Elastic Block Store CSI Driver Operator\u003C/em>\u003C/span>.\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 additional parameters for the storage class as desired.\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> to create the storage class.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"creating-the-persistent-volume-claim\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.1.2. Creating the persistent volume claim\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tStorage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform.\n\t\t\t\t\t\u003C/p>\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 OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Persistent Volume Claims\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the persistent volume claims overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Persistent Volume Claim\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\tDefine the desired options on the page that appears.\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\tSelect the storage class created previously from the drop-down menu.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter a unique name for the storage claim.\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 access mode. This determines the read and write access for the created storage claim.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tDefine the size of the storage claim.\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> to create the persistent volume claim and generate a persistent volume.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"volume-format-AWS_persistent-storage-aws\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.1.3. Volume format\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tBefore OpenShift Container Platform mounts the volume and passes it to a container, it checks that it contains a file system as specified by the \u003Ccode class=\"literal\">fsType\u003C/code> parameter in the persistent volume definition. If the device is not formatted with the file system, all data from the device is erased and the device is automatically formatted with the given file system.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThis allows using unformatted AWS volumes as persistent volumes, because OpenShift Container Platform formats them before the first use.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"maximum-number-of-ebs-volumes-on-a-node_persistent-storage-aws\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.1.4. Maximum number of EBS volumes on a node\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tBy default, OpenShift Container Platform supports a maximum of 39 EBS volumes attached to one node. This limit is consistent with the \u003Ca class=\"link\" href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/volume_limits.html#linux-specific-volume-limits\">AWS volume limits\u003C/a>. The volume limit depends on the instance type.\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\tAs a cluster administrator, you must use either in-tree or Container Storage Interface (CSI) volumes and their respective storage classes, but never both volume types at the same time. The maximum attached EBS volume number is counted separately for in-tree and CSI volumes.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section _additional-resources\" id=\"additional-resources_persistent-storage-aws\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.1.5. Additional resources\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tSee \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-ebs\">AWS Elastic Block Store CSI Driver Operator\u003C/a> for information about accessing additional storage options, such as volume snapshots, that are not possible with in-tree volume plugins.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-azure\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.2. Persistent storage using Azure\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform supports Microsoft Azure Disk volumes. You can provision your OpenShift Container Platform cluster with persistent storage using Azure. Some familiarity with Kubernetes and Azure is assumed. The Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. Azure Disk volumes can be provisioned dynamically. Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users.\n\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision Azure Disk storage.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tHigh availability of storage in the infrastructure is left to the underlying storage provider.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://azure.microsoft.com/en-us/services/storage/disks\">Microsoft Azure Disk\u003C/a>\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"storage-create-azure-storage-class_persistent-storage-azure\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.2.1. Creating the Azure storage class\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage classes are used to differentiate and delineate storage levels and usages. By defining a storage class, users can obtain dynamically provisioned persistent volumes.\n\t\t\t\t\u003C/p>\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 OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Storage Classes\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the storage class overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Storage Class\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\tDefine the desired options on the page that appears.\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\tEnter a name to reference the storage class.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter an optional description.\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 reclaim policy.\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 \u003Ccode class=\"literal\">kubernetes.io/azure-disk\u003C/code> from the drop down list.\n\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\tEnter the storage account type. This corresponds to your Azure storage account SKU tier. Valid options are \u003Ccode class=\"literal\">Premium_LRS\u003C/code>, \u003Ccode class=\"literal\">Standard_LRS\u003C/code>, \u003Ccode class=\"literal\">StandardSSD_LRS\u003C/code>, and \u003Ccode class=\"literal\">UltraSSD_LRS\u003C/code>.\n\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\tEnter the kind of account. Valid options are \u003Ccode class=\"literal\">shared\u003C/code>, \u003Ccode class=\"literal\">dedicated,\u003C/code> and \u003Ccode class=\"literal\">managed\u003C/code>.\n\t\t\t\t\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\t\t\t\t\tRed Hat only supports the use of \u003Ccode class=\"literal\">kind: Managed\u003C/code> in the storage class.\n\t\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\tWith \u003Ccode class=\"literal\">Shared\u003C/code> and \u003Ccode class=\"literal\">Dedicated\u003C/code>, Azure creates unmanaged disks, while OpenShift Container Platform creates a managed disk for machine OS (root) disks. But because Azure Disk does not allow the use of both managed and unmanaged disks on a node, unmanaged disks created with \u003Ccode class=\"literal\">Shared\u003C/code> or \u003Ccode class=\"literal\">Dedicated\u003C/code> cannot be attached to OpenShift Container Platform nodes.\n\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\tEnter additional parameters for the storage class as desired.\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> to create the storage class.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://kubernetes.io/docs/concepts/storage/storage-classes/#new-azure-disk-storage-class-starting-from-v1-7-2\">Azure Disk Storage Class\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"creating-the-persistent-volume-claim-2\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.2.2. Creating the persistent volume claim\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tStorage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform.\n\t\t\t\t\t\u003C/p>\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 OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Persistent Volume Claims\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the persistent volume claims overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Persistent Volume Claim\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\tDefine the desired options on the page that appears.\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\tSelect the storage class created previously from the drop-down menu.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter a unique name for the storage claim.\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 access mode. This determines the read and write access for the created storage claim.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tDefine the size of the storage claim.\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> to create the persistent volume claim and generate a persistent volume.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"volume-format-azure_persistent-storage-azure\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.2.3. Volume format\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tBefore OpenShift Container Platform mounts the volume and passes it to a container, it checks that it contains a file system as specified by the \u003Ccode class=\"literal\">fsType\u003C/code> parameter in the persistent volume definition. If the device is not formatted with the file system, all data from the device is erased and the device is automatically formatted with the given file system.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThis allows using unformatted Azure volumes as persistent volumes, because OpenShift Container Platform formats them before the first use.\n\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-azure-file\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.3. Persistent storage using Azure File\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform supports Microsoft Azure File volumes. You can provision your OpenShift Container Platform cluster with persistent storage using Azure. Some familiarity with Kubernetes and Azure is assumed.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThe Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. You can provision Azure File volumes dynamically.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tPersistent volumes are not bound to a single project or namespace, and you can share them across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace, and can be requested by users for use in applications.\n\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\tHigh availability of storage in the infrastructure is left to the underlying storage provider.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tAzure File volumes use Server Message Block.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://azure.microsoft.com/en-us/services/storage/files/\">Azure Files\u003C/a>\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"create-azure-file-secret_persistent-storage-azure-file\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.3.1. Create the Azure File share persistent volume claim\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTo create the persistent volume claim, you must first define a \u003Ccode class=\"literal\">Secret\u003C/code> object that contains the Azure account and key. This secret is used in the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> definition, and will be referenced by the persistent volume claim for use in applications.\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\tAn Azure File share exists.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe credentials to access this share, specifically the storage account and key, are available.\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\">Secret\u003C/code> object that contains the Azure File credentials:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create secret generic &lt;secret-name&gt; --from-literal=azurestorageaccountname=&lt;storage-account&gt; \\ \u003Cspan id=\"CO8-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n --from-literal=azurestorageaccountkey=&lt;storage-account-key&gt; \u003Cspan id=\"CO8-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\u003C/pre>\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 Azure File storage account name.\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 Azure File storage account key.\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\tCreate a \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object that references the \u003Ccode class=\"literal\">Secret\u003C/code> object you created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: \"v1\"\nkind: \"PersistentVolume\"\nmetadata:\n name: \"pv0001\" \u003Cspan id=\"CO9-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n capacity:\n storage: \"5Gi\" \u003Cspan id=\"CO9-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n accessModes:\n - \"ReadWriteOnce\"\n storageClassName: azure-file-sc\n azureFile:\n secretName: &lt;secret-name&gt; \u003Cspan id=\"CO9-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n shareName: share-1 \u003Cspan id=\"CO9-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n readOnly: false\u003C/pre>\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\tThe name of the persistent volume.\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\tThe size of this persistent volume.\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\tThe name of the secret that contains the Azure File share credentials.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO9-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 name of the Azure File share.\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\tCreate a \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object that maps to the persistent volume you created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: \"v1\"\nkind: \"PersistentVolumeClaim\"\nmetadata:\n name: \"claim1\" \u003Cspan id=\"CO10-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n accessModes:\n - \"ReadWriteOnce\"\n resources:\n requests:\n storage: \"5Gi\" \u003Cspan id=\"CO10-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n storageClassName: azure-file-sc \u003Cspan id=\"CO10-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n volumeName: \"pv0001\" \u003Cspan id=\"CO10-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\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 name of the persistent volume claim.\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 size of this persistent volume claim.\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 name of the storage class that is used to provision the persistent volume. Specify the storage class used in the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> definition.\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 name of the existing \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object that references the Azure File share.\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=\"create-azure-file-pod_persistent-storage-azure-file\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.3.2. Mount the Azure File share in a pod\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter the persistent volume claim has been created, it can be used inside by an application. The following example demonstrates mounting this share inside of a pod.\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\tA persistent volume claim exists that is mapped to the underlying Azure File share.\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 pod that mounts the existing persistent volume claim:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: Pod\nmetadata:\n name: pod-name \u003Cspan id=\"CO11-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n containers:\n ...\n volumeMounts:\n - mountPath: \"/data\" \u003Cspan id=\"CO11-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n name: azure-file-share\n volumes:\n - name: azure-file-share\n persistentVolumeClaim:\n claimName: claim1 \u003Cspan id=\"CO11-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\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\t\tThe name of the pod.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO11-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 path to mount the Azure File share inside the pod. Do not mount to the container root, \u003Ccode class=\"literal\">/\u003C/code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged, such as the host \u003Ccode class=\"literal\">/dev/pts\u003C/code> files. It is safe to mount the host by using \u003Ccode class=\"literal\">/host\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO11-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 name of the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object that has been previously created.\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>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.4. Persistent storage using Cinder\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform supports OpenStack Cinder. Some familiarity with Kubernetes and OpenStack is assumed.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tCinder volumes can be provisioned dynamically. Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users.\n\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision Cinder storage.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\tFor more information about how OpenStack Block Storage provides persistent block storage management for virtual hard drives, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openstack_platform/8/html-single/architecture_guide/index#comp-cinder\">OpenStack Cinder\u003C/a>.\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"persistent-storage-cinder-provisioning_persistent-storage-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.4.1. Manual provisioning with Cinder\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform.\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 Container Platform configured for Red Hat OpenStack Platform (RHOSP)\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tCinder volume ID\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"persistent-storage-cinder-creating-pv_persistent-storage-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.4.1.1. Creating the persistent volume\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou must define your persistent volume (PV) in an object definition before creating it in OpenShift Container Platform:\n\t\t\t\t\t\u003C/p>\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\tSave your object definition to a file.\n\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>cinder-persistentvolume.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: \"v1\"\nkind: \"PersistentVolume\"\nmetadata:\n name: \"pv0001\" \u003Cspan id=\"CO12-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n capacity:\n storage: \"5Gi\" \u003Cspan id=\"CO12-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n accessModes:\n - \"ReadWriteOnce\"\n cinder: \u003Cspan id=\"CO12-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n fsType: \"ext3\" \u003Cspan id=\"CO12-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n volumeID: \"f37a03aa-6212-4c62-a805-9ce139fab180\" \u003Cspan id=\"CO12-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\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=\"#CO12-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 volume that is used by persistent volume claims or pods.\n\t\t\t\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\t\t\t\tThe amount of storage allocated to this volume.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO12-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\tIndicates \u003Ccode class=\"literal\">cinder\u003C/code> for Red Hat OpenStack Platform (RHOSP) Cinder volumes.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO12-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 file system that is created when the volume is mounted for the first time.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO12-5\">\u003Cspan class=\"callout\">5\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe Cinder volume to use.\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\tDo not change the \u003Ccode class=\"literal\">fstype\u003C/code> parameter value after the volume is formatted and provisioned. Changing this value can result in data loss and pod failure.\n\t\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\t\tCreate the object definition file you saved in the previous step.\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f cinder-persistentvolume.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-cinder-pv-format_persistent-storage-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.4.1.2. Persistent volume formatting\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYou can use unformatted Cinder volumes as PVs because OpenShift Container Platform formats them before the first use.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tBefore OpenShift Container Platform mounts the volume and passes it to a container, the system checks that it contains a file system as specified by the \u003Ccode class=\"literal\">fsType\u003C/code> parameter in the PV definition. If the device is not formatted with the file system, all data from the device is erased and the device is automatically formatted with the given file system.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-cinder-volume-security_persistent-storage-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.4.1.3. Cinder volume security\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tIf you use Cinder PVs in your application, configure security for their deployment configurations.\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\tAn SCC must be created that uses the appropriate \u003Ccode class=\"literal\">fsGroup\u003C/code> strategy.\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 service account and add it to the SCC:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create serviceaccount &lt;service_account&gt;\u003C/pre>\u003Cpre class=\"programlisting language-terminal\">$ oc adm policy add-scc-to-user &lt;new_scc&gt; -z &lt;service_account&gt; -n &lt;project&gt;\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tIn your application’s deployment configuration, provide the service account name and \u003Ccode class=\"literal\">securityContext\u003C/code>:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: ReplicationController\nmetadata:\n name: frontend-1\nspec:\n replicas: 1 \u003Cspan id=\"CO13-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n selector: \u003Cspan id=\"CO13-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n name: frontend\n template: \u003Cspan id=\"CO13-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n metadata:\n labels: \u003Cspan id=\"CO13-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n name: frontend \u003Cspan id=\"CO13-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\n spec:\n containers:\n - image: openshift/hello-openshift\n name: helloworld\n ports:\n - containerPort: 8080\n protocol: TCP\n restartPolicy: Always\n serviceAccountName: &lt;service_account&gt; \u003Cspan id=\"CO13-6\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">6\u003C/span>\n securityContext:\n fsGroup: 7777 \u003Cspan id=\"CO13-7\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">7\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO13-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 number of copies of the pod to run.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO13-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 label selector of the pod to run.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO13-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 template for the pod that the controller creates.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\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\t\tThe labels on the pod. They must include labels from the label selector.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO13-5\">\u003Cspan class=\"callout\">5\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tThe maximum name length after expanding any parameters is 63 characters.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO13-6\">\u003Cspan class=\"callout\">6\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tSpecifies the service account you created.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO13-7\">\u003Cspan class=\"callout\">7\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\t\tSpecifies an \u003Ccode class=\"literal\">fsGroup\u003C/code> for the pods.\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>\u003Csection class=\"section\" id=\"persistent-storage-cinder-maximum-volume_persistent-storage-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.4.1.4. Maximum number of Cinder volumes on a node\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tBy default, OpenShift Container Platform supports a maximum of 256 Cinder volumes attached to one node, and the Cinder predicate that limits attachable volumes is disabled. To enable the predicate, add \u003Ccode class=\"literal\">MaxCinderVolumeCount\u003C/code> string to the \u003Ccode class=\"literal\">predicates\u003C/code> field in the scheduler policy.\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tFor more information on modifying the scheduler policy, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/nodes/#nodes-scheduler-default-modifying_nodes-scheduler-default\">Modifying scheduler policies\u003C/a>.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-fibre\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.5. Persistent storage using Fibre Channel\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform supports Fibre Channel, allowing you to provision your OpenShift Container Platform cluster with persistent storage using Fibre channel volumes. Some familiarity with Kubernetes and Fibre Channel is assumed.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThe Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure. Persistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users.\n\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\tHigh availability of storage in the infrastructure is left to the underlying storage provider.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_storage_devices/using-fibre-channel-devices_managing-storage-devices\">Using Fibre Channel devices\u003C/a>\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"provisioning-fibre_persistent-storage-fibre\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.5.1. Provisioning\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTo provision Fibre Channel volumes using the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> API the following must be available:\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\tThe \u003Ccode class=\"literal\">targetWWNs\u003C/code> (array of Fibre Channel target’s World Wide Names).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tA valid LUN number.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe filesystem type.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tA persistent volume and a LUN have a one-to-one mapping between them.\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\tFibre Channel LUNs must exist in the underlying infrastructure.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>\u003Ccode class=\"literal\">PersistentVolume\u003C/code> object definition\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: pv0001\nspec:\n capacity:\n storage: 1Gi\n accessModes:\n - ReadWriteOnce\n fc:\n wwids: [scsi-3600508b400105e210000900000490000] \u003Cspan id=\"CO14-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n targetWWNs: ['500a0981891b8dc5', '500a0981991b8dc5'] \u003Cspan id=\"CO14-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n lun: 2 \u003Cspan id=\"CO14-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n fsType: ext4\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO14-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tWorld wide identifiers (WWIDs). Either FC \u003Ccode class=\"literal\">\u003Cspan class=\"strong strong\">\u003Cstrong>wwids\u003C/strong>\u003C/span>\u003C/code> or a combination of FC \u003Ccode class=\"literal\">\u003Cspan class=\"strong strong\">\u003Cstrong>targetWWNs\u003C/strong>\u003C/span>\u003C/code> and \u003Ccode class=\"literal\">\u003Cspan class=\"strong strong\">\u003Cstrong>lun\u003C/strong>\u003C/span>\u003C/code> must be set, but not both simultaneously. The FC WWID identifier is recommended over the WWNs target because it is guaranteed to be unique for every storage device, and independent of the path that is used to access the device. The WWID identifier can be obtained by issuing a SCSI Inquiry to retrieve the Device Identification Vital Product Data (\u003Ccode class=\"literal\">\u003Cspan class=\"strong strong\">\u003Cstrong>page 0x83\u003C/strong>\u003C/span>\u003C/code>) or Unit Serial Number (\u003Ccode class=\"literal\">\u003Cspan class=\"strong strong\">\u003Cstrong>page 0x80\u003C/strong>\u003C/span>\u003C/code>). FC WWIDs are identified as \u003Ccode class=\"literal\">\u003Cspan class=\"strong strong\">\u003Cstrong>/dev/disk/by-id/\u003C/strong>\u003C/span>\u003C/code> to reference the data on the disk, even if the path to the device changes and even when accessing the device from different systems.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO14-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003Ca href=\"#CO14-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tFibre Channel WWNs are identified as \u003Ccode class=\"literal\">/dev/disk/by-path/pci-&lt;IDENTIFIER&gt;-fc-0x&lt;WWN&gt;-lun-&lt;LUN#&gt;\u003C/code>, but you do not need to provide any part of the path leading up to the \u003Ccode class=\"literal\">WWN\u003C/code>, including the \u003Ccode class=\"literal\">0x\u003C/code>, and anything after, including the \u003Ccode class=\"literal\">-\u003C/code> (hyphen).\n\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\tChanging the value of the \u003Ccode class=\"literal\">fstype\u003C/code> parameter after the volume has been formatted and provisioned can result in data loss and pod failure.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"enforcing-disk-quota_persistent-storage-fibre\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.5.1.1. Enforcing disk quotas\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tUse LUN partitions to enforce disk quotas and size constraints. Each LUN is mapped to a single persistent volume, and unique names must be used for persistent volumes.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tEnforcing quotas in this way allows the end user to request persistent storage by a specific amount, such as 10Gi, and be matched with a corresponding volume of equal or greater capacity.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"fibre-volume-security_persistent-storage-fibre\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.5.1.2. Fibre Channel volume security\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tUsers request storage with a persistent volume claim. This claim only lives in the user’s namespace, and can only be referenced by a pod within that same namespace. Any attempt to access a persistent volume across a namespace causes the pod to fail.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tEach Fibre Channel LUN must be accessible by all nodes in the cluster.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-flexvolume\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.6. Persistent storage using FlexVolume\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform supports FlexVolume, an out-of-tree plugin that uses an executable model to interface with drivers.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tTo use storage from a back-end that does not have a built-in plugin, you can extend OpenShift Container Platform through FlexVolume drivers and provide persistent storage to applications.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tPods interact with FlexVolume drivers through the \u003Ccode class=\"literal\">flexvolume\u003C/code> in-tree plugin.\n\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#expanding-persistent-volumes\">Expanding persistent volumes\u003C/a>\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"flexvolume-drivers_persistent-storage-flexvolume\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.6.1. About FlexVolume drivers\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tA FlexVolume driver is an executable file that resides in a well-defined directory on all nodes in the cluster. OpenShift Container Platform calls the FlexVolume driver whenever it needs to mount or unmount a volume represented by a \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object with \u003Ccode class=\"literal\">flexVolume\u003C/code> as the source.\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\tAttach and detach operations are not supported in OpenShift Container Platform for FlexVolume.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"flexvolume-driver-example_persistent-storage-flexvolume\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.6.2. FlexVolume driver example\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe first command-line argument of the FlexVolume driver is always an operation name. Other parameters are specific to each operation. Most of the operations take a JavaScript Object Notation (JSON) string as a parameter. This parameter is a complete JSON string, and not the name of a file with the JSON data.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe FlexVolume driver contains:\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\tAll \u003Ccode class=\"literal\">flexVolume.options\u003C/code>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tSome options from \u003Ccode class=\"literal\">flexVolume\u003C/code> prefixed by \u003Ccode class=\"literal\">kubernetes.io/\u003C/code>, such as \u003Ccode class=\"literal\">fsType\u003C/code> and \u003Ccode class=\"literal\">readwrite\u003C/code>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe content of the referenced secret, if specified, prefixed by \u003Ccode class=\"literal\">kubernetes.io/secret/\u003C/code>.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>FlexVolume driver JSON input example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-json\">{\n\t\"fooServer\": \"192.168.0.1:1234\", \u003Cspan id=\"CO15-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n \"fooVolumeName\": \"bar\",\n\t\"kubernetes.io/fsType\": \"ext4\", \u003Cspan id=\"CO15-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n\t\"kubernetes.io/readwrite\": \"ro\", \u003Cspan id=\"CO15-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n\t\"kubernetes.io/secret/&lt;key name&gt;\": \"&lt;key value&gt;\", \u003Cspan id=\"CO15-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n\t\"kubernetes.io/secret/&lt;another key name&gt;\": \"&lt;another key value&gt;\",\n}\u003C/pre>\n\n\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\tAll options from \u003Ccode class=\"literal\">flexVolume.options\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO15-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe value of \u003Ccode class=\"literal\">flexVolume.fsType\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO15-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\u003Ccode class=\"literal\">ro\u003C/code>/\u003Ccode class=\"literal\">rw\u003C/code> based on \u003Ccode class=\"literal\">flexVolume.readOnly\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO15-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tAll keys and their values from the secret referenced by \u003Ccode class=\"literal\">flexVolume.secretRef\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform expects JSON data on standard output of the driver. When not specified, the output describes the result of the operation.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>FlexVolume driver default output example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-json\">{\n\t\"status\": \"&lt;Success/Failure/Not supported&gt;\",\n\t\"message\": \"&lt;Reason for success/failure&gt;\"\n}\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp>\n\t\t\t\t\tExit code of the driver should be \u003Ccode class=\"literal\">0\u003C/code> for success and \u003Ccode class=\"literal\">1\u003C/code> for error.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tOperations should be idempotent, which means that the mounting of an already mounted volume should result in a successful operation.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"flexvolume-installing_persistent-storage-flexvolume\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.6.3. Installing FlexVolume drivers\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tFlexVolume drivers that are used to extend OpenShift Container Platform are executed only on the node. To implement FlexVolumes, a list of operations to call and the installation path are all that is 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\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tFlexVolume drivers must implement these operations:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">init\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tInitializes the driver. It is called during initialization of all nodes.\n\t\t\t\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\t\t\tArguments: none\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\tExecuted on: node\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\tExpected output: default JSON\n\t\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">mount\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tMounts a volume to directory. This can include anything that is necessary to mount the volume, including finding the device and then mounting the device.\n\t\t\t\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\t\t\tArguments: \u003Ccode class=\"literal\">&lt;mount-dir&gt;\u003C/code> \u003Ccode class=\"literal\">&lt;json&gt;\u003C/code>\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\tExecuted on: node\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\tExpected output: default JSON\n\t\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">unmount\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tUnmounts a volume from a directory. This can include anything that is necessary to clean up the volume after unmounting.\n\t\t\t\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\t\t\tArguments: \u003Ccode class=\"literal\">&lt;mount-dir&gt;\u003C/code>\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\tExecuted on: node\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\tExpected output: default JSON\n\t\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">mountdevice\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\tMounts a volume’s device to a directory where individual pods can then bind mount.\n\t\t\t\t\t\t\t\t\t\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tThis call-out does not pass \"secrets\" specified in the FlexVolume spec. If your driver requires secrets, do not implement this call-out.\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\tArguments: \u003Ccode class=\"literal\">&lt;mount-dir&gt;\u003C/code> \u003Ccode class=\"literal\">&lt;json&gt;\u003C/code>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tExecuted on: node\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tExpected output: default JSON\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">unmountdevice\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\t\tUnmounts a volume’s device from a directory.\n\t\t\t\t\t\t\t\t\t\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tArguments: \u003Ccode class=\"literal\">&lt;mount-dir&gt;\u003C/code>\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tExecuted on: node\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tExpected output: default JSON\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\tAll other operations should return JSON with \u003Ccode class=\"literal\">{\"status\": \"Not supported\"}\u003C/code> and exit code \u003Ccode class=\"literal\">1\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\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 install the FlexVolume driver:\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\tEnsure that the executable file exists on all nodes in the cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tPlace the executable file at the volume plugin path: \u003Ccode class=\"literal\">/etc/kubernetes/kubelet-plugins/volume/exec/&lt;vendor&gt;~&lt;driver&gt;/&lt;driver&gt;\u003C/code>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\tFor example, to install the FlexVolume driver for the storage \u003Ccode class=\"literal\">foo\u003C/code>, place the executable file at: \u003Ccode class=\"literal\">/etc/kubernetes/kubelet-plugins/volume/exec/openshift.com~foo/foo\u003C/code>.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"flexvolume-driver-consuming_persistent-storage-flexvolume\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.6.4. Consuming storage using FlexVolume drivers\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tEach \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object in OpenShift Container Platform represents one storage asset in the storage back-end, such as a volume.\n\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\">\n\t\t\t\t\t\t\tUse the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object to reference the installed storage.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Persistent volume object definition using FlexVolume drivers example\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: pv0001 \u003Cspan id=\"CO16-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n capacity:\n storage: 1Gi \u003Cspan id=\"CO16-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n accessModes:\n - ReadWriteOnce\n flexVolume:\n driver: openshift.com/foo \u003Cspan id=\"CO16-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n fsType: \"ext4\" \u003Cspan id=\"CO16-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n secretRef: foo-secret \u003Cspan id=\"CO16-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\n readOnly: true \u003Cspan id=\"CO16-6\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">6\u003C/span>\n options: \u003Cspan id=\"CO16-7\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">7\u003C/span>\n fooServer: 192.168.0.1:1234\n fooVolumeName: bar\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO16-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 volume. This is how it is identified through persistent volume claims or from pods. This name can be different from the name of the volume on back-end storage.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO16-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe amount of storage allocated to this volume.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO16-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe name of the driver. This field is mandatory.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\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\tThe file system that is present on the volume. This field is optional.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO16-5\">\u003Cspan class=\"callout\">5\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe reference to a secret. Keys and values from this secret are provided to the FlexVolume driver on invocation. This field is optional.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO16-6\">\u003Cspan class=\"callout\">6\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe read-only flag. This field is optional.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO16-7\">\u003Cspan class=\"callout\">7\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tThe additional options for the FlexVolume driver. In addition to the flags specified by the user in the \u003Ccode class=\"literal\">options\u003C/code> field, the following flags are also passed to the executable:\n\t\t\t\t\t\t\u003C/div>\u003Cpre class=\"literallayout\">\"fsType\":\"&lt;FS type&gt;\",\n\"readwrite\":\"&lt;rw&gt;\",\n\"secret/key1\":\"&lt;secret1&gt;\"\n...\n\"secret/keyN\":\"&lt;secretN&gt;\"\u003C/pre>\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\tSecrets are passed only to mount or unmount call-outs.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-gce\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.7. Persistent storage using GCE Persistent Disk\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform supports GCE Persistent Disk volumes (gcePD). You can provision your OpenShift Container Platform cluster with persistent storage using GCE. Some familiarity with Kubernetes and GCE is assumed.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThe Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tGCE Persistent Disk volumes can be provisioned dynamically.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tPersistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users.\n\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision gcePD storage.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tHigh availability of storage in the infrastructure is left to the underlying storage provider.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://cloud.google.com/compute/docs/disks/\">GCE Persistent Disk\u003C/a>\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"storage-create-GCE-storage-class_persistent-storage-gce\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.7.1. Creating the GCE storage class\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage classes are used to differentiate and delineate storage levels and usages. By defining a storage class, users can obtain dynamically provisioned persistent volumes.\n\t\t\t\t\u003C/p>\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 OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Storage Classes\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the storage class overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Storage Class\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\tDefine the desired options on the page that appears.\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\tEnter a name to reference the storage class.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter an optional description.\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 reclaim policy.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tSelect \u003Ccode class=\"literal\">kubernetes.io/gce-pd\u003C/code> from the drop-down list.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter additional parameters for the storage class as desired.\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> to create the storage class.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"creating-the-persistent-volume-claim-3\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.7.2. Creating the persistent volume claim\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Prerequisites\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tStorage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform.\n\t\t\t\t\t\u003C/p>\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 OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Persistent Volume Claims\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the persistent volume claims overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Persistent Volume Claim\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\tDefine the desired options on the page that appears.\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\tSelect the storage class created previously from the drop-down menu.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter a unique name for the storage claim.\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 access mode. This determines the read and write access for the created storage claim.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tDefine the size of the storage claim.\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> to create the persistent volume claim and generate a persistent volume.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"volume-format-GCE_persistent-storage-gce\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.7.3. Volume format\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tBefore OpenShift Container Platform mounts the volume and passes it to a container, it checks that it contains a file system as specified by the \u003Ccode class=\"literal\">fsType\u003C/code> parameter in the persistent volume definition. If the device is not formatted with the file system, all data from the device is erased and the device is automatically formatted with the given file system.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThis allows using unformatted GCE volumes as persistent volumes, because OpenShift Container Platform formats them before the first use.\n\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-hostpath\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.8. Persistent storage using hostPath\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tA hostPath volume in an OpenShift Container Platform cluster mounts a file or directory from the host node’s filesystem into your pod. Most pods will not need a hostPath volume, but it does offer a quick option for testing should an application require it.\n\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\tThe cluster administrator must configure pods to run as privileged. This grants access to pods in the same node.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"persistent-storage-hostpath-about_persistent-storage-hostpath\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.8.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform supports hostPath mounting for development and testing on a single-node cluster.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIn a production cluster, you would not use hostPath. Instead, a cluster administrator would provision a network resource, such as a GCE Persistent Disk volume, an NFS share, or an Amazon EBS volume. Network resources support the use of storage classes to set up dynamic provisioning.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tA hostPath volume must be provisioned statically.\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\tDo not mount to the container root, \u003Ccode class=\"literal\">/\u003C/code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged. It is safe to mount the host by using \u003Ccode class=\"literal\">/host\u003C/code>. The following example shows the \u003Ccode class=\"literal\">/\u003C/code> directory from the host being mounted into the container at \u003Ccode class=\"literal\">/host\u003C/code>.\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: Pod\nmetadata:\n name: test-host-mount\nspec:\n containers:\n - image: registry.access.redhat.com/ubi8/ubi\n name: test-container\n command: ['sh', '-c', 'sleep 3600']\n volumeMounts:\n - mountPath: /host\n name: host-slash\n volumes:\n - name: host-slash\n hostPath:\n path: /\n type: ''\u003C/pre>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"hostpath-static-provisioning_persistent-storage-hostpath\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.8.2. Statically provisioning hostPath volumes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tA pod that uses a hostPath volume must be referenced by manual (static) provisioning.\n\t\t\t\t\u003C/p>\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\tDefine the persistent volume (PV). Create a file, \u003Ccode class=\"literal\">pv.yaml\u003C/code>, with the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object definition:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\"> apiVersion: v1\n kind: PersistentVolume\n metadata:\n name: task-pv-volume \u003Cspan id=\"CO17-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n labels:\n type: local\n spec:\n storageClassName: manual \u003Cspan id=\"CO17-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n capacity:\n storage: 5Gi\n accessModes:\n - ReadWriteOnce \u003Cspan id=\"CO17-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n persistentVolumeReclaimPolicy: Retain\n hostPath:\n path: \"/mnt/data\" \u003Cspan id=\"CO17-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\u003C/pre>\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\tThe name of the volume. This name is how it is identified by persistent volume claims or pods.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO17-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tUsed to bind persistent volume claim requests to this persistent volume.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO17-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 volume can be mounted as \u003Ccode class=\"literal\">read-write\u003C/code> by a single node.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO17-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 configuration file specifies that the volume is at \u003Ccode class=\"literal\">/mnt/data\u003C/code> on the cluster’s node. Do not mount to the container root, \u003Ccode class=\"literal\">/\u003C/code>, or any path that is the same in the host and the container. This can corrupt your host system. It is safe to mount the host by using \u003Ccode class=\"literal\">/host\u003C/code>.\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\tCreate the PV from the file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f pv.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tDefine the persistent volume claim (PVC). Create a file, \u003Ccode class=\"literal\">pvc.yaml\u003C/code>, with the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object definition:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: task-pvc-volume\nspec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 1Gi\n storageClassName: manual\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate the PVC from the file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f pvc.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-hostpath-pod_persistent-storage-hostpath\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.8.3. Mounting the hostPath share in a privileged pod\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter the persistent volume claim has been created, it can be used inside by an application. The following example demonstrates mounting this share inside of a pod.\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\tA persistent volume claim exists that is mapped to the underlying hostPath share.\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 privileged pod that mounts the existing persistent volume claim:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: Pod\nmetadata:\n name: pod-name \u003Cspan id=\"CO18-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n containers:\n ...\n securityContext:\n privileged: true \u003Cspan id=\"CO18-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n volumeMounts:\n - mountPath: /data \u003Cspan id=\"CO18-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n name: hostpath-privileged\n ...\n securityContext: {}\n volumes:\n - name: hostpath-privileged\n persistentVolumeClaim:\n claimName: task-pvc-volume \u003Cspan id=\"CO18-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\u003C/pre>\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\t\t\tThe name of the pod.\n\t\t\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\t\t\tThe pod must run as privileged to access the node’s storage.\n\t\t\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\t\t\tThe path to mount the host path share inside the privileged pod. Do not mount to the container root, \u003Ccode class=\"literal\">/\u003C/code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged, such as the host \u003Ccode class=\"literal\">/dev/pts\u003C/code> files. It is safe to mount the host by using \u003Ccode class=\"literal\">/host\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO18-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 name of the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object that has been previously created.\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>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-iscsi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.9. Persistent storage using iSCSI\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tYou can provision your OpenShift Container Platform cluster with persistent storage using \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html-single/managing_storage_devices/index#getting-started-with-iscsi_managing-storage-devices\">iSCSI\u003C/a>. Some familiarity with Kubernetes and iSCSI is assumed.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThe Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure.\n\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\tHigh-availability of storage in the infrastructure is left to the underlying storage provider.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tWhen you use iSCSI on Amazon Web Services, you must update the default security policy to include TCP traffic between nodes on the iSCSI ports. By default, they are ports \u003Ccode class=\"literal\">860\u003C/code> and \u003Ccode class=\"literal\">3260\u003C/code>.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tUsers must ensure that the iSCSI initiator is already configured on all OpenShift Container Platform nodes by installing the \u003Ccode class=\"literal\">iscsi-initiator-utils\u003C/code> package and configuring their initiator name in \u003Ccode class=\"literal\">/etc/iscsi/initiatorname.iscsi\u003C/code>. The \u003Ccode class=\"literal\">iscsi-initiator-utils\u003C/code> package is already installed on deployments that use Red Hat Enterprise Linux CoreOS (RHCOS).\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFor more information, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html-single/managing_storage_devices/index#configuring-an-iscsi-initiator_managing-storage-devices\">Managing Storage Devices\u003C/a>.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"persistent-storage-iscsi-provisioning_persistent-storage-iscsi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.9.1. Provisioning\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tVerify that the storage exists in the underlying infrastructure before mounting it as a volume in OpenShift Container Platform. All that is required for the iSCSI is the iSCSI target portal, a valid iSCSI Qualified Name (IQN), a valid LUN number, the filesystem type, and the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> API.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>\u003Ccode class=\"literal\">PersistentVolume\u003C/code> object definition\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: iscsi-pv\nspec:\n capacity:\n storage: 1Gi\n accessModes:\n - ReadWriteOnce\n iscsi:\n targetPortal: 10.16.154.81:3260\n iqn: iqn.2014-12.example.server:storage.target00\n lun: 0\n fsType: 'ext4'\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"enforcing-disk-quotas-iscsi_persistent-storage-iscsi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.9.2. Enforcing disk quotas\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUse LUN partitions to enforce disk quotas and size constraints. Each LUN is one persistent volume. Kubernetes enforces unique names for persistent volumes.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tEnforcing quotas in this way allows the end user to request persistent storage by a specific amount (for example, \u003Ccode class=\"literal\">10Gi\u003C/code>) and be matched with a corresponding volume of equal or greater capacity.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"volume-security-iscsi_persistent-storage-iscsi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.9.3. iSCSI volume security\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tUsers request storage with a \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object. This claim only lives in the user’s namespace and can only be referenced by a pod within that same namespace. Any attempt to access a persistent volume claim across a namespace causes the pod to fail.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tEach iSCSI LUN must be accessible by all nodes in the cluster.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"challenge-handshake-authentication-protocol-chap-configuration\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.9.3.1. Challenge Handshake Authentication Protocol (CHAP) configuration\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tOptionally, OpenShift Container Platform can use CHAP to authenticate itself to iSCSI targets:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: iscsi-pv\nspec:\n capacity:\n storage: 1Gi\n accessModes:\n - ReadWriteOnce\n iscsi:\n targetPortal: 10.0.0.1:3260\n iqn: iqn.2016-04.test.com:storage.target00\n lun: 0\n fsType: ext4\n chapAuthDiscovery: true \u003Cspan id=\"CO19-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n chapAuthSession: true \u003Cspan id=\"CO19-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n secretRef:\n name: chap-secret \u003Cspan id=\"CO19-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\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\tEnable CHAP authentication of iSCSI discovery.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO19-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tEnable CHAP authentication of iSCSI session.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO19-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tSpecify name of Secrets object with user name + password. This \u003Ccode class=\"literal\">Secret\u003C/code> object must be available in all namespaces that can use the referenced volume.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"iscsi-multipath_persistent-storage-iscsi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.9.4. iSCSI multipathing\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tFor iSCSI-based storage, you can configure multiple paths by using the same IQN for more than one target portal IP address. Multipathing ensures access to the persistent volume when one or more of the components in a path fail.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo specify multi-paths in the pod specification, use the \u003Ccode class=\"literal\">portals\u003C/code> field. For example:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: iscsi-pv\nspec:\n capacity:\n storage: 1Gi\n accessModes:\n - ReadWriteOnce\n iscsi:\n targetPortal: 10.0.0.1:3260\n portals: ['10.0.2.16:3260', '10.0.2.17:3260', '10.0.2.18:3260'] \u003Cspan id=\"CO20-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n iqn: iqn.2016-04.test.com:storage.target00\n lun: 0\n fsType: ext4\n readOnly: false\u003C/pre>\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\tAdd additional target portals using the \u003Ccode class=\"literal\">portals\u003C/code> field.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"iscsi-custom-iqn_persistent-storage-iscsi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.9.5. iSCSI custom initiator IQN\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tConfigure the custom initiator iSCSI Qualified Name (IQN) if the iSCSI targets are restricted to certain IQNs, but the nodes that the iSCSI PVs are attached to are not guaranteed to have these IQNs.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo specify a custom initiator IQN, use \u003Ccode class=\"literal\">initiatorName\u003C/code> field.\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: iscsi-pv\nspec:\n capacity:\n storage: 1Gi\n accessModes:\n - ReadWriteOnce\n iscsi:\n targetPortal: 10.0.0.1:3260\n portals: ['10.0.2.16:3260', '10.0.2.17:3260', '10.0.2.18:3260']\n iqn: iqn.2016-04.test.com:storage.target00\n lun: 0\n initiatorName: iqn.2016-04.test.com:custom.iqn \u003Cspan id=\"CO21-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n fsType: ext4\n readOnly: false\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\tSpecify the name of the initiator.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-local-volume\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.10. Persistent storage using local volumes\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform can be provisioned with persistent storage by using local volumes. Local persistent volumes allow you to access local storage devices, such as a disk or partition, by using the standard persistent volume claim interface.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tLocal volumes can be used without manually scheduling pods to nodes because the system is aware of the volume node constraints. However, local volumes are still subject to the availability of the underlying node and are not suitable for all applications.\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\tLocal volumes can only be used as a statically created persistent volume.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"local-storage-install_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.10.1. Installing the Local Storage Operator\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe Local Storage Operator is not installed in OpenShift Container Platform by default. Use the following procedure to install and configure this Operator to enable local volumes 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\tAccess to the OpenShift Container Platform web console or command-line interface (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 the \u003Ccode class=\"literal\">openshift-local-storage\u003C/code> project:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc adm new-project openshift-local-storage\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: Allow local storage creation on infrastructure nodes.\n\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tYou might want to use the Local Storage Operator to create volumes on infrastructure nodes in support of components such as logging and monitoring.\n\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tYou must adjust the default node selector so that the Local Storage Operator includes the infrastructure nodes, and not just worker nodes.\n\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo block the Local Storage Operator from inheriting the cluster-wide default selector, enter the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc annotate project openshift-local-storage openshift.io/node-selector=''\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>From the UI\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tTo install the Local Storage Operator from the web console, follow these steps:\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\tLog 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\tNavigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Operators\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>OperatorHub\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tType \u003Cspan class=\"strong strong\">\u003Cstrong>Local Storage\u003C/strong>\u003C/span> into the filter box to locate the Local Storage Operator.\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>Install\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOn the \u003Cspan class=\"strong strong\">\u003Cstrong>Install Operator\u003C/strong>\u003C/span> page, select \u003Cspan class=\"strong strong\">\u003Cstrong>A specific namespace on the cluster\u003C/strong>\u003C/span>. Select \u003Cspan class=\"strong strong\">\u003Cstrong>openshift-local-storage\u003C/strong>\u003C/span> from the drop-down menu.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tAdjust the values for \u003Cspan class=\"strong strong\">\u003Cstrong>Update Channel\u003C/strong>\u003C/span> and \u003Cspan class=\"strong strong\">\u003Cstrong>Approval Strategy\u003C/strong>\u003C/span> to the values that you want.\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>Install\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\tOnce finished, the Local Storage Operator will be listed in the \u003Cspan class=\"strong strong\">\u003Cstrong>Installed Operators\u003C/strong>\u003C/span> section of the web console.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"orderedlist\">\u003Cp class=\"title\">\u003Cstrong>From the CLI\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tInstall the Local Storage Operator from the CLI.\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\tRun the following command to get the OpenShift Container Platform major and minor version. It is required for the \u003Ccode class=\"literal\">channel\u003C/code> value in the next step.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ OC_VERSION=$(oc version -o yaml | grep openshiftVersion | \\\n grep -o '[0-9]*[.][0-9]*' | head -1)\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCreate an object YAML file to define an Operator group and subscription for the Local Storage Operator, such as \u003Ccode class=\"literal\">openshift-local-storage.yaml\u003C/code>:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example openshift-local-storage.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: operators.coreos.com/v1\nkind: OperatorGroup\nmetadata:\n name: local-operator-group\n namespace: openshift-local-storage\nspec:\n targetNamespaces:\n - openshift-local-storage\n---\napiVersion: operators.coreos.com/v1alpha1\nkind: Subscription\nmetadata:\n name: local-storage-operator\n namespace: openshift-local-storage\nspec:\n channel: \"${OC_VERSION}\"\n installPlanApproval: Automatic \u003Cspan id=\"CO22-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n name: local-storage-operator\n source: redhat-operators\n sourceNamespace: openshift-marketplace\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\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\tThe user approval policy for an install plan.\n\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate the Local Storage Operator object by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f openshift-local-storage.yaml\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAt this point, the Operator Lifecycle Manager (OLM) is now aware of the Local Storage Operator. A ClusterServiceVersion (CSV) for the Operator should appear in the target namespace, and APIs provided by the Operator should be available for creation.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify local storage installation by checking that all pods and the Local Storage Operator have been created:\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\tCheck that all the required pods have been created:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc -n openshift-local-storage 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\t\n\u003Cpre class=\"programlisting language-terminal\">NAME READY STATUS RESTARTS AGE\nlocal-storage-operator-746bf599c9-vlt5t 1/1 Running 0 19m\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\tCheck the ClusterServiceVersion (CSV) YAML manifest to see that the Local Storage Operator is available in the \u003Ccode class=\"literal\">openshift-local-storage\u003C/code> project:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get csvs -n openshift-local-storage\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\t\n\u003Cpre class=\"programlisting language-terminal\">NAME DISPLAY VERSION REPLACES PHASE\nlocal-storage-operator.4.2.26-202003230335 Local Storage 4.2.26-202003230335 Succeeded\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>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter all checks have passed, the Local Storage Operator is installed successfully.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"local-volume-cr_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.10.2. Provisioning local volumes by using the Local Storage Operator\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tLocal volumes cannot be created by dynamic provisioning. Instead, persistent volumes can be created by the Local Storage Operator. The local volume provisioner looks for any file system or block volume devices at the paths specified in the defined resource.\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 Local Storage Operator is installed.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tYou have a local disk that meets the following conditions:\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\tIt is attached to a node.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tIt is not mounted.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tIt does not contain partitions.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\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 the local volume resource. This resource must define the nodes and paths to the local volumes.\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\tDo not use different storage class names for the same device. Doing so will create multiple persistent volumes (PVs).\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example: Filesystem\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: \"local.storage.openshift.io/v1\"\nkind: \"LocalVolume\"\nmetadata:\n name: \"local-disks\"\n namespace: \"openshift-local-storage\" \u003Cspan id=\"CO23-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n nodeSelector: \u003Cspan id=\"CO23-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n nodeSelectorTerms:\n - matchExpressions:\n - key: kubernetes.io/hostname\n operator: In\n values:\n - ip-10-0-140-183\n - ip-10-0-158-139\n - ip-10-0-164-33\n storageClassDevices:\n - storageClassName: \"local-sc\" \u003Cspan id=\"CO23-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n volumeMode: Filesystem \u003Cspan id=\"CO23-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n fsType: xfs \u003Cspan id=\"CO23-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\n devicePaths: \u003Cspan id=\"CO23-6\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">6\u003C/span>\n - /path/to/device \u003Cspan id=\"CO23-7\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">7\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=\"#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\tThe namespace where the Local Storage Operator is installed.\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\tOptional: A node selector containing a list of nodes where the local storage volumes are attached. This example uses the node hostnames, obtained from \u003Ccode class=\"literal\">oc get node\u003C/code>. If a value is not defined, then the Local Storage Operator will attempt to find matching disks on all available nodes.\n\t\t\t\t\t\t\t\t\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\tThe name of the storage class to use when creating persistent volume objects. The Local Storage Operator automatically creates the storage class if it does not exist. Be sure to use a storage class that uniquely identifies this set of local volumes.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO23-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 volume mode, either \u003Ccode class=\"literal\">Filesystem\u003C/code> or \u003Ccode class=\"literal\">Block\u003C/code>, that defines the type of local volumes.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO23-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 file system that is created when the local volume is mounted for the first time.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO23-6\">\u003Cspan class=\"callout\">6\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe path containing a list of local storage devices to choose from.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO23-7\">\u003Cspan class=\"callout\">7\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tReplace this value with your actual local disks filepath to the \u003Ccode class=\"literal\">LocalVolume\u003C/code> resource \u003Ccode class=\"literal\">by-id\u003C/code>, such as \u003Ccode class=\"literal\">/dev/disk/by-id/wwn\u003C/code>. PVs are created for these local disks when the provisioner is deployed successfully.\n\t\t\t\t\t\t\t\t\u003C/div>\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\t\t\tA raw block volume (\u003Ccode class=\"literal\">volumeMode: block\u003C/code>) is not formatted with a file system. You should use this mode only if any application running on the pod can use raw block devices.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example: Block\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: \"local.storage.openshift.io/v1\"\nkind: \"LocalVolume\"\nmetadata:\n name: \"local-disks\"\n namespace: \"openshift-local-storage\" \u003Cspan id=\"CO24-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n nodeSelector: \u003Cspan id=\"CO24-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n nodeSelectorTerms:\n - matchExpressions:\n - key: kubernetes.io/hostname\n operator: In\n values:\n - ip-10-0-136-143\n - ip-10-0-140-255\n - ip-10-0-144-180\n storageClassDevices:\n - storageClassName: \"localblock-sc\" \u003Cspan id=\"CO24-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n volumeMode: Block \u003Cspan id=\"CO24-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n devicePaths: \u003Cspan id=\"CO24-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\n - /path/to/device \u003Cspan id=\"CO24-6\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">6\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=\"#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\tThe namespace where the Local Storage Operator is installed.\n\t\t\t\t\t\t\t\t\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: A node selector containing a list of nodes where the local storage volumes are attached. This example uses the node hostnames, obtained from \u003Ccode class=\"literal\">oc get node\u003C/code>. If a value is not defined, then the Local Storage Operator will attempt to find matching disks on all available nodes.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO24-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 name of the storage class to use when creating persistent volume objects.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO24-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 volume mode, either \u003Ccode class=\"literal\">Filesystem\u003C/code> or \u003Ccode class=\"literal\">Block\u003C/code>, that defines the type of local volumes.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO24-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 path containing a list of local storage devices to choose from.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO24-6\">\u003Cspan class=\"callout\">6\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tReplace this value with your actual local disks filepath to the \u003Ccode class=\"literal\">LocalVolume\u003C/code> resource \u003Ccode class=\"literal\">by-id\u003C/code>, such as \u003Ccode class=\"literal\">dev/disk/by-id/wwn\u003C/code>. PVs are created for these local disks when the provisioner is deployed successfully.\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\tCreate the local volume resource in your OpenShift Container Platform cluster. Specify the file you just created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f &lt;local-volume&gt;.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the provisioner was created and that the corresponding daemon sets were created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get all -n openshift-local-storage\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 STATUS RESTARTS AGE\npod/diskmaker-manager-9wzms 1/1 Running 0 5m43s\npod/diskmaker-manager-jgvjp 1/1 Running 0 5m43s\npod/diskmaker-manager-tbdsj 1/1 Running 0 5m43s\npod/local-storage-operator-7db4bd9f79-t6k87 1/1 Running 0 14m\n\nNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\nservice/local-storage-operator-metrics ClusterIP 172.30.135.36 &lt;none&gt; 8383/TCP,8686/TCP 14m\n\nNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE\ndaemonset.apps/diskmaker-manager 3 3 3 3 3 &lt;none&gt; 5m43s\n\nNAME READY UP-TO-DATE AVAILABLE AGE\ndeployment.apps/local-storage-operator 1/1 1 1 14m\n\nNAME DESIRED CURRENT READY AGE\nreplicaset.apps/local-storage-operator-7db4bd9f79 1 1 1 14m\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\tNote the desired and current number of daemon set processes. A desired count of \u003Ccode class=\"literal\">0\u003C/code> indicates that the label selectors were invalid.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the persistent volumes were created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pv\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 CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE\nlocal-pv-1cec77cf 100Gi RWO Delete Available local-sc 88m\nlocal-pv-2ef7cd2a 100Gi RWO Delete Available local-sc 82m\nlocal-pv-3fa1c73 100Gi RWO Delete Available local-sc 48m\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\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\tEditing the \u003Ccode class=\"literal\">LocalVolume\u003C/code> object does not change the \u003Ccode class=\"literal\">fsType\u003C/code> or \u003Ccode class=\"literal\">volumeMode\u003C/code> of existing persistent volumes because doing so might result in a destructive operation.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"local-create-cr-manual_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.10.3. Provisioning local volumes without the Local Storage Operator\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tLocal volumes cannot be created by dynamic provisioning. Instead, persistent volumes can be created by defining the persistent volume (PV) in an object definition. The local volume provisioner looks for any file system or block volume devices at the paths specified in the defined resource.\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\tManual provisioning of PVs includes the risk of potential data leaks across PV reuse when PVCs are deleted. The Local Storage Operator is recommended for automating the life cycle of devices when provisioning local PVs.\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\tLocal disks are attached to the OpenShift Container Platform nodes.\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\tDefine the PV. Create a file, such as \u003Ccode class=\"literal\">example-pv-filesystem.yaml\u003C/code> or \u003Ccode class=\"literal\">example-pv-block.yaml\u003C/code>, with the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object definition. This resource must define the nodes and paths to the local volumes.\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\tDo not use different storage class names for the same device. Doing so will create multiple PVs.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>example-pv-filesystem.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: example-pv-filesystem\nspec:\n capacity:\n storage: 100Gi\n volumeMode: Filesystem \u003Cspan id=\"CO25-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n accessModes:\n - ReadWriteOnce\n persistentVolumeReclaimPolicy: Delete\n storageClassName: local-storage \u003Cspan id=\"CO25-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n local:\n path: /dev/xvdf \u003Cspan id=\"CO25-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n nodeAffinity:\n required:\n nodeSelectorTerms:\n - matchExpressions:\n - key: kubernetes.io/hostname\n operator: In\n values:\n - example-node\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\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\tThe volume mode, either \u003Ccode class=\"literal\">Filesystem\u003C/code> or \u003Ccode class=\"literal\">Block\u003C/code>, that defines the type of PVs.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO25-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 storage class to use when creating PV resources. Use a storage class that uniquely identifies this set of PVs.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO25-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 path containing a list of local storage devices to choose from, or a directory. You can only specify a directory with \u003Ccode class=\"literal\">Filesystem\u003C/code> \u003Ccode class=\"literal\">volumeMode\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\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\t\t\tA raw block volume (\u003Ccode class=\"literal\">volumeMode: block\u003C/code>) is not formatted with a file system. Use this mode only if any application running on the pod can use raw block devices.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>example-pv-block.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: example-pv-block\nspec:\n capacity:\n storage: 100Gi\n volumeMode: Block \u003Cspan id=\"CO26-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n accessModes:\n - ReadWriteOnce\n persistentVolumeReclaimPolicy: Delete\n storageClassName: local-storage \u003Cspan id=\"CO26-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n local:\n path: /dev/xvdf \u003Cspan id=\"CO26-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n nodeAffinity:\n required:\n nodeSelectorTerms:\n - matchExpressions:\n - key: kubernetes.io/hostname\n operator: In\n values:\n - example-node\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\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\tThe volume mode, either \u003Ccode class=\"literal\">Filesystem\u003C/code> or \u003Ccode class=\"literal\">Block\u003C/code>, that defines the type of PVs.\n\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\tThe name of the storage class to use when creating PV resources. Be sure to use a storage class that uniquely identifies this set of PVs.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO26-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 path containing a list of local storage devices to choose from.\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\tCreate the PV resource in your OpenShift Container Platform cluster. Specify the file you just created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f &lt;example-pv&gt;.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the local PV was created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pv\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 CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE\nexample-pv-filesystem 100Gi RWO Delete Available local-storage 3m47s\nexample-pv1 1Gi RWO Delete Bound local-storage/pvc1 local-storage 12h\nexample-pv2 1Gi RWO Delete Bound local-storage/pvc2 local-storage 12h\nexample-pv3 1Gi RWO Delete Bound local-storage/pvc3 local-storage 12h\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=\"create-local-pvc_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.10.4. Creating the local volume persistent volume claim\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tLocal volumes must be statically created as a persistent volume claim (PVC) to be accessed by the pod.\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\tPersistent volumes have been created using the local volume provisioner.\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 the PVC using the corresponding storage class:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">kind: PersistentVolumeClaim\napiVersion: v1\nmetadata:\n name: local-pvc-name \u003Cspan id=\"CO27-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n accessModes:\n - ReadWriteOnce\n volumeMode: Filesystem \u003Cspan id=\"CO27-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n resources:\n requests:\n storage: 100Gi \u003Cspan id=\"CO27-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n storageClassName: local-sc \u003Cspan id=\"CO27-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\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\tName of the PVC.\n\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\tThe type of the PVC. Defaults to \u003Ccode class=\"literal\">Filesystem\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO27-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 amount of storage available to the PVC.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO27-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tName of the storage class required by the claim.\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\tCreate the PVC in the OpenShift Container Platform cluster, specifying the file you just created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f &lt;local-pvc&gt;.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"local-pod_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.10.5. Attach the local claim\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tAfter a local volume has been mapped to a persistent volume claim it can be specified inside of a resource.\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\tA persistent volume claim exists in the same namespace.\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\tInclude the defined claim in the resource spec. The following example declares the persistent volume claim inside a pod:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: Pod\nspec:\n ...\n containers:\n volumeMounts:\n - name: local-disks \u003Cspan id=\"CO28-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n mountPath: /data \u003Cspan id=\"CO28-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n volumes:\n - name: localpvc\n persistentVolumeClaim:\n claimName: local-pvc-name \u003Cspan id=\"CO28-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\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\tThe name of the volume to mount.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO28-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 path inside the pod where the volume is mounted. Do not mount to the container root, \u003Ccode class=\"literal\">/\u003C/code>, or any path that is the same in the host and the container. This can corrupt your host system if the container is sufficiently privileged, such as the host \u003Ccode class=\"literal\">/dev/pts\u003C/code> files. It is safe to mount the host by using \u003Ccode class=\"literal\">/host\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO28-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 name of the existing persistent volume claim to use.\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\tCreate the resource in the OpenShift Container Platform cluster, specifying the file you just created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f &lt;local-pod&gt;.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"local-storage-discovery_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.10.6. Automating discovery and provisioning for local storage devices\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe Local Storage Operator automates local storage discovery and provisioning. With this feature, you can simplify installation when dynamic provisioning is not available during deployment, such as with bare metal, VMware, or AWS store instances with attached devices.\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\tAutomatic discovery and provisioning 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>\u003Cp>\n\t\t\t\t\tUse the following procedure to automatically discover local devices, and to automatically provision local volumes for selected devices.\n\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition warning\" state=\"danger\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Warning\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tUse the \u003Ccode class=\"literal\">LocalVolumeSet\u003C/code> object with caution. When you automatically provision persistent volumes (PVs) from local disks, the local PVs might claim all devices that match. If you are using a \u003Ccode class=\"literal\">LocalVolumeSet\u003C/code> object, make sure the Local Storage Operator is the only entity managing local devices on the node.\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\tYou have cluster administrator permissions.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the Local Storage Operator.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have attached local disks to OpenShift Container Platform nodes.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have access to the OpenShift Container Platform web console and the \u003Ccode class=\"literal\">oc\u003C/code> command-line interface (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\tTo enable automatic discovery of local devices from the web console:\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=\"emphasis\">\u003Cem>Administrator\u003C/em>\u003C/span> perspective, navigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Operators\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Installed Operators\u003C/strong>\u003C/span> and click on the \u003Cspan class=\"strong strong\">\u003Cstrong>Local Volume Discovery\u003C/strong>\u003C/span> tab.\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 Local Volume Discovery\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\tSelect either \u003Cspan class=\"strong strong\">\u003Cstrong>All nodes\u003C/strong>\u003C/span> or \u003Cspan class=\"strong strong\">\u003Cstrong>Select nodes\u003C/strong>\u003C/span>, depending on whether you want to discover available disks on all or specific nodes.\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\tOnly worker nodes are available, regardless of whether you filter using \u003Cspan class=\"strong strong\">\u003Cstrong>All nodes\u003C/strong>\u003C/span> or \u003Cspan class=\"strong strong\">\u003Cstrong>Select nodes\u003C/strong>\u003C/span>.\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\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>\u003Cp>\n\t\t\t\t\tA local volume discovery instance named \u003Ccode class=\"literal\">auto-discover-devices\u003C/code> is displayed.\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\tTo display a continuous list of available devices on a node:\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\tLog in to the OpenShift Container Platform web console.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tNavigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Compute\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Nodes\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\tClick the node name that you want to open. The \"Node Details\" page is displayed.\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 the \u003Cspan class=\"strong strong\">\u003Cstrong>Disks\u003C/strong>\u003C/span> tab to display the list of the selected devices.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe device list updates continuously as local disks are added or removed. You can filter the devices by name, status, type, model, capacity, and mode.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo automatically provision local volumes for the discovered devices from the web console:\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\tNavigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Operators\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Installed Operators\u003C/strong>\u003C/span> and select \u003Cspan class=\"strong strong\">\u003Cstrong>Local Storage\u003C/strong>\u003C/span> from the list of Operators.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tSelect \u003Cspan class=\"strong strong\">\u003Cstrong>Local Volume Set\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Create Local Volume Set\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\tEnter a volume set name and a storage class name.\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\tChoose \u003Cspan class=\"strong strong\">\u003Cstrong>All nodes\u003C/strong>\u003C/span> or \u003Cspan class=\"strong strong\">\u003Cstrong>Select nodes\u003C/strong>\u003C/span> to apply filters accordingly.\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\tOnly worker nodes are available, regardless of whether you filter using \u003Cspan class=\"strong strong\">\u003Cstrong>All nodes\u003C/strong>\u003C/span> or \u003Cspan class=\"strong strong\">\u003Cstrong>Select nodes\u003C/strong>\u003C/span>.\n\t\t\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\t\t\tSelect the disk type, mode, size, and limit you want to apply to the local volume set, and click \u003Cspan class=\"strong strong\">\u003Cstrong>Create\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tA message displays after several minutes, indicating that the \"Operator reconciled successfully.\"\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" start=\"3\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tAlternatively, to provision local volumes for the discovered devices from the CLI:\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 an object YAML file to define the local volume set, such as \u003Ccode class=\"literal\">local-volume-set.yaml\u003C/code>, as shown in the following example:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: local.storage.openshift.io/v1alpha1\nkind: LocalVolumeSet\nmetadata:\n name: example-autodetect\nspec:\n nodeSelector:\n nodeSelectorTerms:\n - matchExpressions:\n - key: kubernetes.io/hostname\n operator: In\n values:\n - worker-0\n - worker-1\n storageClassName: example-storageclass \u003Cspan id=\"CO29-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n volumeMode: Filesystem\n fsType: ext4\n maxDeviceCount: 10\n deviceInclusionSpec:\n deviceTypes: \u003Cspan id=\"CO29-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n - disk\n - part\n deviceMechanicalProperties:\n - NonRotational\n minSize: 10G\n maxSize: 100G\n models:\n - SAMSUNG\n - Crucial_CT525MX3\n vendors:\n - ATA\n - ST2000LM\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\t\tDetermines the storage class that is created for persistent volumes that are provisioned from discovered devices. The Local Storage Operator automatically creates the storage class if it does not exist. Be sure to use a storage class that uniquely identifies this set of local volumes.\n\t\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\t\tWhen using the local volume set feature, the Local Storage Operator does not support the use of logical volume management (LVM) devices.\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\tCreate the local volume set object:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f local-volume-set.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tVerify that the local persistent volumes were dynamically provisioned based on the storage class:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pv\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\t\n\u003Cpre class=\"programlisting language-terminal\">NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE\nlocal-pv-1cec77cf 100Gi RWO Delete Available example-storageclass 88m\nlocal-pv-2ef7cd2a 100Gi RWO Delete Available example-storageclass 82m\nlocal-pv-3fa1c73 100Gi RWO Delete Available example-storageclass 48m\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>\u003C/ol>\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\tResults are deleted after they are removed from the node. Symlinks must be manually removed.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"local-tolerations_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.10.7. Using tolerations with Local Storage Operator pods\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTaints can be applied to nodes to prevent them from running general workloads. To allow the Local Storage Operator to use tainted nodes, you must add tolerations to the \u003Ccode class=\"literal\">Pod\u003C/code> or \u003Ccode class=\"literal\">DaemonSet\u003C/code> definition. This allows the created resources to run on these tainted nodes.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tYou apply tolerations to the Local Storage Operator pod through the \u003Ccode class=\"literal\">LocalVolume\u003C/code> resource and apply taints to a node through the node specification. A taint on a node instructs the node to repel all pods that do not tolerate the taint. Using a specific taint that is not on other pods ensures that the Local Storage Operator pod can also run on that node.\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\tTaints and tolerations consist of a key, value, and effect. As an argument, it is expressed as \u003Ccode class=\"literal\">key=value:effect\u003C/code>. An operator allows you to leave one of these parameters empty.\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 Local Storage Operator is installed.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tLocal disks are attached to OpenShift Container Platform nodes with a taint.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tTainted nodes are expected to provision local storage.\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 configure local volumes for scheduling on tainted nodes:\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\tModify the YAML file that defines the \u003Ccode class=\"literal\">Pod\u003C/code> and add the \u003Ccode class=\"literal\">LocalVolume\u003C/code> spec, as shown in the following example:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\"> apiVersion: \"local.storage.openshift.io/v1\"\n kind: \"LocalVolume\"\n metadata:\n name: \"local-disks\"\n namespace: \"openshift-local-storage\"\n spec:\n tolerations:\n - key: localstorage \u003Cspan id=\"CO30-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n operator: Equal \u003Cspan id=\"CO30-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n value: \"localstorage\" \u003Cspan id=\"CO30-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n storageClassDevices:\n - storageClassName: \"localblock-sc\"\n volumeMode: Block \u003Cspan id=\"CO30-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n devicePaths: \u003Cspan id=\"CO30-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\n - /dev/xvdg\u003C/pre>\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\tSpecify the key that you added to the node.\n\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\tSpecify the \u003Ccode class=\"literal\">Equal\u003C/code> operator to require the \u003Ccode class=\"literal\">key\u003C/code>/\u003Ccode class=\"literal\">value\u003C/code> parameters to match. If operator is \u003Ccode class=\"literal\">Exists\u003C/code>, the system checks that the key exists and ignores the value. If operator is \u003Ccode class=\"literal\">Equal\u003C/code>, then the key and value must match.\n\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\tSpecify the value \u003Ccode class=\"literal\">local\u003C/code> of the tainted node.\n\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\tThe volume mode, either \u003Ccode class=\"literal\">Filesystem\u003C/code> or \u003Ccode class=\"literal\">Block\u003C/code>, defining the type of the local volumes.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO30-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 path containing a list of local storage devices to choose from.\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\tOptional: To create local persistent volumes on only tainted nodes, modify the YAML file and add the \u003Ccode class=\"literal\">LocalVolume\u003C/code> spec, as shown in the following example:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">spec:\n tolerations:\n - key: node-role.kubernetes.io/master\n operator: Exists\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\tThe defined tolerations will be passed to the resulting daemon sets, allowing the diskmaker and provisioner pods to be created for nodes that contain the specified taints.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"deleting-the-local-storage-operator-resources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.10.8. Deleting the Local Storage Operator resources\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"local-removing-device_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.10.8.1. Removing a local volume or local volume set\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tOccasionally, local volumes and local volume sets must be deleted. While removing the entry in the resource and deleting the persistent volume is typically enough, if you want to reuse the same device path or have it managed by a different storage class, then additional steps are needed.\n\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\tThe following procedure outlines an example for removing a local volume. The same procedure can also be used to remove symlinks for a local volume set custom resource.\n\t\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\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tThe persistent volume must be in a \u003Ccode class=\"literal\">Released\u003C/code> or \u003Ccode class=\"literal\">Available\u003C/code> state.\n\t\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition warning\" state=\"danger\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Warning\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\tDeleting a persistent volume that is still in use can result in data loss or corruption.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\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\tEdit the previously created local volume to remove any unwanted disks.\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\tEdit the cluster resource:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc edit localvolume &lt;name&gt; -n openshift-local-storage\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\tNavigate to the lines under \u003Ccode class=\"literal\">devicePaths\u003C/code>, and delete any representing unwanted disks.\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\tDelete any persistent volumes created.\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete pv &lt;pv-name&gt;\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tDelete any symlinks on the node.\n\t\t\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition warning\" state=\"danger\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Warning\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\t\t\tThe following step involves accessing a node as the root user. Modifying the state of the node beyond the steps in this procedure could result in cluster instability.\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\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tCreate a debug pod on the node:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc debug node/&lt;node-name&gt;\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tChange your root directory to \u003Ccode class=\"literal\">/host\u003C/code>:\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ chroot /host\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\tNavigate to the directory containing the local volume symlinks.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ cd /mnt/openshift-local-storage/&lt;sc-name&gt; \u003Cspan id=\"CO31-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO31-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\tThe name of the storage class used to create the local volumes.\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\tDelete the symlink belonging to the removed device.\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ rm &lt;symlink&gt;\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"local-storage-uninstall_persistent-storage-local\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.10.8.2. Uninstalling the Local Storage Operator\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tTo uninstall the Local Storage Operator, you must remove the Operator and all created resources in the \u003Ccode class=\"literal\">openshift-local-storage\u003C/code> project.\n\t\t\t\t\t\u003C/p>\u003Crh-alert class=\"admonition warning\" state=\"danger\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Warning\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\t\tUninstalling the Local Storage Operator while local storage PVs are still in use is not recommended. While the PVs will remain after the Operator’s removal, there might be indeterminate behavior if the Operator is uninstalled and reinstalled without removing the PVs and local storage resources.\n\t\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\t\tAccess to the OpenShift Container Platform web console.\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\tDelete any local volume resources installed in the project, such as \u003Ccode class=\"literal\">localvolume\u003C/code>, \u003Ccode class=\"literal\">localvolumeset\u003C/code>, and \u003Ccode class=\"literal\">localvolumediscovery\u003C/code>:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete localvolume --all --all-namespaces\n$ oc delete localvolumeset --all --all-namespaces\n$ oc delete localvolumediscovery --all --all-namespaces\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tUninstall the Local Storage Operator from the web console.\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\tLog in to the OpenShift Container Platform web console.\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\tNavigate to \u003Cspan class=\"strong strong\">\u003Cstrong>Operators\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Installed Operators\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\tType \u003Cspan class=\"strong strong\">\u003Cstrong>Local Storage\u003C/strong>\u003C/span> into the filter box to locate the Local Storage Operator.\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\tClick the Options menu \n\t\t\t\t\t\t\t\t\t\t\u003Cspan class=\"inlinemediaobject\">\u003Cimg src=\"https://access.redhat.com/webassets/avalon/d/OpenShift_Container_Platform-4.8-Storage-en-US/images/f468284ec3cc9bf27e6bd2c83849ca50/kebab.png\" alt=\"kebab\"/>\u003C/span>\n\t\t\t\t\t\t\t\t\t\t at the end of the Local Storage Operator.\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\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Uninstall Operator\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\tClick \u003Cspan class=\"strong strong\">\u003Cstrong>Remove\u003C/strong>\u003C/span> in the window that appears.\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\tThe PVs created by the Local Storage Operator will remain in the cluster until deleted. After these volumes are no longer in use, delete them by running the following command:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete pv &lt;pv-name&gt;\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tDelete the \u003Ccode class=\"literal\">openshift-local-storage\u003C/code> project:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete project openshift-local-storage\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-nfs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.11. Persistent storage using NFS\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform clusters can be provisioned with persistent storage using NFS. Persistent volumes (PVs) and persistent volume claims (PVCs) provide a convenient method for sharing a volume across a project. While the NFS-specific information contained in a PV definition could also be defined directly in a \u003Ccode class=\"literal\">Pod\u003C/code> definition, doing so does not create the volume as a distinct cluster resource, making the volume more susceptible to conflicts.\n\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-nfs\">Network File System (NFS)\u003C/a>\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"persistent-storage-nfs-provisioning_persistent-storage-nfs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.11.1. Provisioning\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage must exist in the underlying infrastructure before it can be mounted as a volume in OpenShift Container Platform. To provision NFS volumes, a list of NFS servers and export paths are all that is required.\n\t\t\t\t\u003C/p>\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 an object definition for the PV:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: pv0001 \u003Cspan id=\"CO32-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n capacity:\n storage: 5Gi \u003Cspan id=\"CO32-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n accessModes:\n - ReadWriteOnce \u003Cspan id=\"CO32-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n nfs: \u003Cspan id=\"CO32-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n path: /tmp \u003Cspan id=\"CO32-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\n server: 172.17.0.2 \u003Cspan id=\"CO32-6\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">6\u003C/span>\n persistentVolumeReclaimPolicy: Retain \u003Cspan id=\"CO32-7\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">7\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO32-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 name of the volume. This is the PV identity in various \u003Ccode class=\"literal\">oc &lt;command&gt; pod\u003C/code> commands.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO32-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 amount of storage allocated to this volume.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO32-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThough this appears to be related to controlling access to the volume, it is actually used similarly to labels and used to match a PVC to a PV. Currently, no access rules are enforced based on the \u003Ccode class=\"literal\">accessModes\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO32-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 volume type being used, in this case the \u003Ccode class=\"literal\">nfs\u003C/code> plugin.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO32-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 path that is exported by the NFS server.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO32-6\">\u003Cspan class=\"callout\">6\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe hostname or IP address of the NFS server.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO32-7\">\u003Cspan class=\"callout\">7\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThe reclaim policy for the PV. This defines what happens to a volume when released.\n\t\t\t\t\t\t\t\t\u003C/div>\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\t\t\tEach NFS volume must be mountable by all schedulable nodes in the cluster.\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\tVerify that the PV was created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pv\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 LABELS CAPACITY ACCESSMODES STATUS CLAIM REASON AGE\npv0001 &lt;none&gt; 5Gi RWO Available 31s\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\tCreate a persistent volume claim that binds to the new PV:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: nfs-claim1\nspec:\n accessModes:\n - ReadWriteOnce \u003Cspan id=\"CO33-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n resources:\n requests:\n storage: 5Gi \u003Cspan id=\"CO33-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n volumeName: pv0001\n storageClassName: \"\"\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO33-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 access modes do not enforce security, but rather act as labels to match a PV to a PVC.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO33-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThis claim looks for PVs offering \u003Cspan class=\"strong strong\">\u003Cstrong>5Gi\u003C/strong>\u003C/span> or greater capacity.\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\tVerify that the persistent volume claim was created:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pvc\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 STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE\nnfs-claim1 Bound pv0001 5Gi RWO 2m\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=\"nfs-enforcing-disk-quota_persistent-storage-nfs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.11.2. Enforcing disk quotas\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can use disk partitions to enforce disk quotas and size constraints. Each partition can be its own export. Each export is one PV. OpenShift Container Platform enforces unique names for PVs, but the uniqueness of the NFS volume’s server and path is up to the administrator.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tEnforcing quotas in this way allows the developer to request persistent storage by a specific amount, such as 10Gi, and be matched with a corresponding volume of equal or greater capacity.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"nfs-volume-security_persistent-storage-nfs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.11.3. NFS volume security\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThis section covers NFS volume security, including matching permissions and SELinux considerations. The user is expected to understand the basics of POSIX permissions, process UIDs, supplemental groups, and SELinux.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tDevelopers request NFS storage by referencing either a PVC by name or the NFS volume plugin directly in the \u003Ccode class=\"literal\">volumes\u003C/code> section of their \u003Ccode class=\"literal\">Pod\u003C/code> definition.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe \u003Ccode class=\"literal\">/etc/exports\u003C/code> file on the NFS server contains the accessible NFS directories. The target NFS directory has POSIX owner and group IDs. The OpenShift Container Platform NFS plugin mounts the container’s NFS directory with the same POSIX ownership and permissions found on the exported NFS directory. However, the container is not run with its effective UID equal to the owner of the NFS mount, which is the desired behavior.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAs an example, if the target NFS directory appears on the NFS server as:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\" id=\"nfs-export\">$ ls -lZ /opt/nfs -d\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">drwxrws---. nfsnobody 5555 unconfined_u:object_r:usr_t:s0 /opt/nfs\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cpre class=\"programlisting language-terminal\">$ id nfsnobody\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cp>\n\t\t\t\t\tThen the container must match SELinux labels, and either run with a UID of \u003Ccode class=\"literal\">65534\u003C/code>, the \u003Ccode class=\"literal\">nfsnobody\u003C/code> owner, or with \u003Ccode class=\"literal\">5555\u003C/code> in its supplemental groups to access the directory.\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\tThe owner ID of \u003Ccode class=\"literal\">65534\u003C/code> is used as an example. Even though NFS’s \u003Ccode class=\"literal\">root_squash\u003C/code> maps \u003Ccode class=\"literal\">root\u003C/code>, uid \u003Ccode class=\"literal\">0\u003C/code>, to \u003Ccode class=\"literal\">nfsnobody\u003C/code>, uid \u003Ccode class=\"literal\">65534\u003C/code>, NFS exports can have arbitrary owner IDs. Owner \u003Ccode class=\"literal\">65534\u003C/code> is not required for NFS exports.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"storage-persistent-storage-nfs-group-ids_persistent-storage-nfs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.11.3.1. Group IDs\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe recommended way to handle NFS access, assuming it is not an option to change permissions on the NFS export, is to use supplemental groups. Supplemental groups in OpenShift Container Platform are used for shared storage, of which NFS is an example. In contrast, block storage such as iSCSI uses the \u003Ccode class=\"literal\">fsGroup\u003C/code> SCC strategy and the \u003Ccode class=\"literal\">fsGroup\u003C/code> value in the \u003Ccode class=\"literal\">securityContext\u003C/code> of the pod.\n\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\tTo gain access to persistent storage, it is generally preferable to use supplemental group IDs versus user IDs.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\t\tBecause the group ID on the example target NFS directory is \u003Ccode class=\"literal\">5555\u003C/code>, the pod can define that group ID using \u003Ccode class=\"literal\">supplementalGroups\u003C/code> under the \u003Ccode class=\"literal\">securityContext\u003C/code> definition of the pod. For example:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">spec:\n containers:\n - name:\n ...\n securityContext: \u003Cspan id=\"CO34-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n supplementalGroups: [5555] \u003Cspan id=\"CO34-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO34-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\">securityContext\u003C/code> must be defined at the pod level, not under a specific container.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO34-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tAn array of GIDs defined for the pod. In this case, there is one element in the array. Additional GIDs would be comma-separated.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAssuming there are no custom SCCs that might satisfy the pod requirements, the pod likely matches the \u003Ccode class=\"literal\">restricted\u003C/code> SCC. This SCC has the \u003Ccode class=\"literal\">supplementalGroups\u003C/code> strategy set to \u003Ccode class=\"literal\">RunAsAny\u003C/code>, meaning that any supplied group ID is accepted without range checking.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tAs a result, the above pod passes admissions and is launched. However, if group ID range checking is desired, a custom SCC is the preferred solution. A custom SCC can be created such that minimum and maximum group IDs are defined, group ID range checking is enforced, and a group ID of \u003Ccode class=\"literal\">5555\u003C/code> is allowed.\n\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\tTo use a custom SCC, you must first add it to the appropriate service account. For example, use the \u003Ccode class=\"literal\">default\u003C/code> service account in the given project unless another has been specified on the \u003Ccode class=\"literal\">Pod\u003C/code> specification.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"nfs-user-id_persistent-storage-nfs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.11.3.2. User IDs\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tUser IDs can be defined in the container image or in the \u003Ccode class=\"literal\">Pod\u003C/code> definition.\n\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\tIt is generally preferable to use supplemental group IDs to gain access to persistent storage versus using user IDs.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\t\tIn the example target NFS directory shown above, the container needs its UID set to \u003Ccode class=\"literal\">65534\u003C/code>, ignoring group IDs for the moment, so the following can be added to the \u003Ccode class=\"literal\">Pod\u003C/code> definition:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">spec:\n containers: \u003Cspan id=\"CO35-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n - name:\n ...\n securityContext:\n runAsUser: 65534 \u003Cspan id=\"CO35-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO35-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tPods contain a \u003Ccode class=\"literal\">securityContext\u003C/code> definition specific to each container and a pod’s \u003Ccode class=\"literal\">securityContext\u003C/code> which applies to all containers defined in the pod.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO35-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">65534\u003C/code> is the \u003Ccode class=\"literal\">nfsnobody\u003C/code> user.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAssuming that the project is \u003Ccode class=\"literal\">default\u003C/code> and the SCC is \u003Ccode class=\"literal\">restricted\u003C/code>, the user ID of \u003Ccode class=\"literal\">65534\u003C/code> as requested by the pod is not allowed. Therefore, the pod fails for the following reasons:\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\tIt requests \u003Ccode class=\"literal\">65534\u003C/code> as its user ID.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tAll SCCs available to the pod are examined to see which SCC allows a user ID of \u003Ccode class=\"literal\">65534\u003C/code>. While all policies of the SCCs are checked, the focus here is on user ID.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tBecause all available SCCs use \u003Ccode class=\"literal\">MustRunAsRange\u003C/code> for their \u003Ccode class=\"literal\">runAsUser\u003C/code> strategy, UID range checking is required.\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\">65534\u003C/code> is not included in the SCC or project’s user ID range.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\t\tIt is generally considered a good practice not to modify the predefined SCCs. The preferred way to fix this situation is to create a custom SCC A custom SCC can be created such that minimum and maximum user IDs are defined, UID range checking is still enforced, and the UID of \u003Ccode class=\"literal\">65534\u003C/code> is allowed.\n\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\tTo use a custom SCC, you must first add it to the appropriate service account. For example, use the \u003Ccode class=\"literal\">default\u003C/code> service account in the given project unless another has been specified on the \u003Ccode class=\"literal\">Pod\u003C/code> specification.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"nfs-selinux_persistent-storage-nfs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.11.3.3. SELinux\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tRed Hat Enterprise Linux (RHEL) and Red Hat Enterprise Linux CoreOS (RHCOS) systems are configured to use SELinux on remote NFS servers by default.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tFor non-RHEL and non-RHCOS systems, SELinux does not allow writing from a pod to a remote NFS server. The NFS volume mounts correctly but it is read-only. You will need to enable the correct SELinux permissions by using the following procedure.\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 \u003Ccode class=\"literal\">container-selinux\u003C/code> package must be installed. This package provides the \u003Ccode class=\"literal\">virt_use_nfs\u003C/code> SELinux boolean.\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\tEnable the \u003Ccode class=\"literal\">virt_use_nfs\u003C/code> boolean using the following command. The \u003Ccode class=\"literal\">-P\u003C/code> option makes this boolean persistent across reboots.\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\"># setsebool -P virt_use_nfs 1\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"export-settings\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.11.3.4. Export settings\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tTo enable arbitrary container users to read and write the volume, each exported volume on the NFS server should conform to the following conditions:\n\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\tEvery export must be exported using the following format:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">/&lt;example_fs&gt; *(rw,root_squash)\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tThe firewall must be configured to allow traffic to the mount point.\n\t\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\t\tFor NFSv4, configure the default port \u003Ccode class=\"literal\">2049\u003C/code> (\u003Cspan class=\"strong strong\">\u003Cstrong>nfs\u003C/strong>\u003C/span>).\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>NFSv4\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\"># iptables -I INPUT 1 -p tcp --dport 2049 -j ACCEPT\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\tFor NFSv3, there are three ports to configure: \u003Ccode class=\"literal\">2049\u003C/code> (\u003Cspan class=\"strong strong\">\u003Cstrong>nfs\u003C/strong>\u003C/span>), \u003Ccode class=\"literal\">20048\u003C/code> (\u003Cspan class=\"strong strong\">\u003Cstrong>mountd\u003C/strong>\u003C/span>), and \u003Ccode class=\"literal\">111\u003C/code> (\u003Cspan class=\"strong strong\">\u003Cstrong>portmapper\u003C/strong>\u003C/span>).\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>NFSv3\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\"># iptables -I INPUT 1 -p tcp --dport 2049 -j ACCEPT\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cpre class=\"programlisting language-terminal\"># iptables -I INPUT 1 -p tcp --dport 20048 -j ACCEPT\u003C/pre>\u003Cpre class=\"programlisting language-terminal\"># iptables -I INPUT 1 -p tcp --dport 111 -j ACCEPT\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe NFS export and directory must be set up so that they are accessible by the target pods. Either set the export to be owned by the container’s primary UID, or supply the pod group access using \u003Ccode class=\"literal\">supplementalGroups\u003C/code>, as shown in the group IDs above.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"nfs-reclaiming-resources_persistent-storage-nfs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.11.4. Reclaiming resources\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tNFS implements the OpenShift Container Platform \u003Ccode class=\"literal\">Recyclable\u003C/code> plugin interface. Automatic processes handle reclamation tasks based on policies set on each persistent volume.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tBy default, PVs are set to \u003Ccode class=\"literal\">Retain\u003C/code>.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tOnce claim to a PVC is deleted, and the PV is released, the PV object should not be reused. Instead, a new PV should be created with the same basic volume details as the original.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFor example, the administrator creates a PV named \u003Ccode class=\"literal\">nfs1\u003C/code>:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: nfs1\nspec:\n capacity:\n storage: 1Mi\n accessModes:\n - ReadWriteMany\n nfs:\n server: 192.168.1.1\n path: \"/\"\u003C/pre>\u003Cp>\n\t\t\t\t\tThe user creates \u003Ccode class=\"literal\">PVC1\u003C/code>, which binds to \u003Ccode class=\"literal\">nfs1\u003C/code>. The user then deletes \u003Ccode class=\"literal\">PVC1\u003C/code>, releasing claim to \u003Ccode class=\"literal\">nfs1\u003C/code>. This results in \u003Ccode class=\"literal\">nfs1\u003C/code> being \u003Ccode class=\"literal\">Released\u003C/code>. If the administrator wants to make the same NFS share available, they should create a new PV with the same NFS server details, but a different PV name:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: nfs2\nspec:\n capacity:\n storage: 1Mi\n accessModes:\n - ReadWriteMany\n nfs:\n server: 192.168.1.1\n path: \"/\"\u003C/pre>\u003Cp>\n\t\t\t\t\tDeleting the original PV and re-creating it with the same name is discouraged. Attempting to manually change the status of a PV from \u003Ccode class=\"literal\">Released\u003C/code> to \u003Ccode class=\"literal\">Available\u003C/code> causes errors and potential data loss.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"additional-configuration-and-troubleshooting\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.11.5. Additional configuration and troubleshooting\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tDepending on what version of NFS is being used and how it is configured, there may be additional configuration steps needed for proper export and security mapping. The following are some that may apply:\n\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: 67%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tNFSv4 mount incorrectly shows all files with ownership of \u003Ccode class=\"literal\">nobody:nobody\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\"> \u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\t\tCould be attributed to the ID mapping settings, found in \u003Ccode class=\"literal\">/etc/idmapd.conf\u003C/code> on your NFS.\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\tSee \u003Ca class=\"link\" href=\"https://access.redhat.com/solutions/33455\">this Red Hat Solution\u003C/a>.\n\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tDisabling ID mapping on NFSv4\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\"> \u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\t\tOn both the NFS client and server, run:\n\t\t\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\"># echo 'Y' &gt; /sys/module/nfsd/parameters/nfs4_disable_idmapping\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"red-hat-openshift-container-storage\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.12. Red Hat OpenShift Container Storage\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tRed Hat OpenShift Container Storage is a provider of agnostic persistent storage for OpenShift Container Platform supporting file, block, and object storage, either in-house or in hybrid clouds. As a Red Hat storage solution, Red Hat OpenShift Container Storage is completely integrated with OpenShift Container Platform for deployment, management, and monitoring.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tRed Hat OpenShift Container Storage provides its own documentation library. The complete set of Red Hat OpenShift Container Storage documentation identified below is available at \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/\">https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/\u003C/a>\n\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\tOpenShift Container Storage on top of Red Hat Hyperconverged Infrastructure (RHHI) for Virtualization, which uses hyperconverged nodes that host virtual machines installed with OpenShift Container Platform, is not a supported configuration. For more information about supported platforms, see the \u003Ca class=\"link\" href=\"https://access.redhat.com/articles/4731161\">Red Hat OpenShift Container Storage Supportability and Interoperability Guide\u003C/a>.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Crh-table>\u003Ctable class=\"lt-4-cols lt-7-rows\">\u003Ccolgroup>\u003Ccol style=\"width: 50%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 50%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708981944016\" scope=\"col\">If you are looking for Red Hat OpenShift Container Storage information about…​\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708981942784\" scope=\"col\">See the following Red Hat OpenShift Container Storage documentation:\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd colspan=\"2\" align=\"center\" valign=\"top\" headers=\"idm140708981944016 idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Cspan class=\"strong strong\">\u003Cstrong>Planning\u003C/strong>\u003C/span>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tWhat’s new, known issues, notable bug fixes, and Technology Previews\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/4.8_release_notes/\">Red Hat OpenShift Container Storage 4.8 Release Notes\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tSupported workloads, layouts, hardware and software requirements, sizing and scaling recommendations\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/planning_your_deployment/index\">Planning your Red Hat OpenShift Container Storage 4.8 deployment\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd colspan=\"2\" align=\"center\" valign=\"top\" headers=\"idm140708981944016 idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Cspan class=\"strong strong\">\u003Cstrong>Deploying\u003C/strong>\u003C/span>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying Red Hat OpenShift Container Storage using Amazon Web Services for local or cloud storage\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_amazon_web_services/index\">Deploying OpenShift Container Storage 4.8 using Amazon Web Services\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying Red Hat OpenShift Container Storage to local storage on bare metal infrastructure\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_bare_metal_infrastructure/\">Deploying OpenShift Container Storage 4.8 using bare metal infrastructure\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying Red Hat OpenShift Container Storage to use an external Red Hat Ceph Storage cluster\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_in_external_mode/\">Deploying OpenShift Container Storage 4.8 in external mode\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying and managing Red Hat OpenShift Container Storage on existing Google Cloud clusters\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_and_managing_openshift_container_storage_using_google_cloud/\">Deploying and managing OpenShift Container Storage 4.8 using Google Cloud\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying Red Hat OpenShift Container Storage to use local storage on IBM Z infrastructure\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_ibm_z_infrastructure/\">Deploying OpenShift Container Storage using IBM Z\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying Red Hat OpenShift Container Storage on IBM Power Systems\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_ibm_power_systems/\">Deploying OpenShift Container Storage using IBM Power Systems\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying Red Hat OpenShift Container Storage on IBM Cloud\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_data_foundation_using_ibm_cloud/\">Deploying OpenShift Data Foundation using IBM Cloud\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying and managing Red Hat OpenShift Container Storage on Red Hat OpenStack Platform (RHOSP)\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_and_managing_openshift_container_storage_using_red_hat_openstack_platform/\">Deploying and managing OpenShift Container Storage 4.8 using Red Hat OpenStack Platform\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying and managing Red Hat OpenShift Container Storage on Red Hat Virtualization (RHV)\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_using_red_hat_virtualization_platform/index\">Deploying and managing OpenShift Container Storage 4.8 using Red Hat Virtualization Platform\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tDeploying Red Hat OpenShift Container Storage on VMware vSphere clusters\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/deploying_openshift_container_storage_on_vmware_vsphere/\">Deploying OpenShift Container Storage 4.8 on VMware vSphere\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tUpdating Red Hat OpenShift Container Storage to the latest version\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/updating_openshift_container_storage/\">Updating OpenShift Container Storage\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd colspan=\"2\" align=\"center\" valign=\"top\" headers=\"idm140708981944016 idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Cspan class=\"strong strong\">\u003Cstrong>Managing\u003C/strong>\u003C/span>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tAllocating storage to core services and hosted applications in Red Hat OpenShift Container Storage, including snapshot and clone\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/managing_and_allocating_storage_resources/\">Managing and allocating resources\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tManaging storage resources across a hybrid cloud or multicloud environment using the Multicloud Object Gateway (NooBaa)\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/managing_hybrid_and_multicloud_resources/\">Managing hybrid and multicloud resources\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tSafely replacing storage devices for Red Hat OpenShift Container Storage\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/replacing_devices/\">Replacing devices\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tSafely replacing a node in a Red Hat OpenShift Container Storage cluster\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/replacing_nodes/\">Replacing nodes\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tScaling operations in Red Hat OpenShift Container Storage\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/scaling_storage/\">Scaling storage\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tMonitoring a Red Hat OpenShift Container Storage 4.8 cluster\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/monitoring_openshift_container_storage/\">Monitoring OpenShift Container Storage 4.8\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tTroubleshooting errors and issues\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/4.8/html/troubleshooting_openshift_container_storage/\">Troubleshooting OpenShift Container Storage 4.8\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981944016\"> \u003Cp>\n\t\t\t\t\t\t\t\tMigrating your OpenShift Container Platform cluster from version 3 to version 4\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708981942784\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html/migration_toolkit_for_containers/\">Migration Toolkit for Containers\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-using-vsphere\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">4.13. Persistent storage using VMware vSphere volumes\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform allows use of VMware vSphere’s Virtual Machine Disk (VMDK) volumes. You can provision your OpenShift Container Platform cluster with persistent storage using VMware vSphere. Some familiarity with Kubernetes and VMware vSphere is assumed.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tVMware vSphere volumes can be provisioned dynamically. OpenShift Container Platform creates the disk in vSphere and attaches this disk to the correct image.\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\tOpenShift Container Platform provisions new volumes as independent persistent disks that can freely attach and detach the volume on any node in the cluster. Consequently, you cannot back up volumes that use snapshots, or restore volumes from snapshots. See \u003Ca class=\"link\" href=\"https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.vm_admin.doc/GUID-53F65726-A23B-4CF0-A7D5-48E584B88613.html\">Snapshot Limitations\u003C/a> for more information.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\tThe Kubernetes persistent volume framework allows administrators to provision a cluster with persistent storage and gives users a way to request those resources without having any knowledge of the underlying infrastructure.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tPersistent volumes are not bound to a single project or namespace; they can be shared across the OpenShift Container Platform cluster. Persistent volume claims are specific to a project or namespace and can be requested by users.\n\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision vSphere storage.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://www.vmware.com/au/products/vsphere.html\">VMware vSphere\u003C/a>\n\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Csection class=\"section\" id=\"dynamically-provisioning-vmware-vsphere-volumes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.13.1. Dynamically provisioning VMware vSphere volumes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tDynamically provisioning VMware vSphere volumes is the recommended method.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"prerequisites\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.13.2. Prerequisites\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tAn OpenShift Container Platform cluster installed on a VMware vSphere version that meets the requirements for the components that you use. See \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/installing/#installing-a-cluster-on-vsphere-with-user-provisioned-infrastructure\">Installing a cluster on vSphere\u003C/a> for information about vSphere version support.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can use either of the following procedures to dynamically provision these volumes using the default storage class.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"vsphere-dynamic-provisioning_persistent-storage-efs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.13.2.1. Dynamically provisioning VMware vSphere volumes using the UI\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tOpenShift Container Platform installs a default storage class, named \u003Ccode class=\"literal\">thin\u003C/code>, that uses the \u003Ccode class=\"literal\">thin\u003C/code> disk format for provisioning volumes.\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\tStorage must exist in the underlying infrastructure before it can be mounted as a volume 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 OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Persistent Volume Claims\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 persistent volume claims overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Persistent Volume Claim\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\tDefine the required options on the resulting page.\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\tSelect the \u003Ccode class=\"literal\">thin\u003C/code> storage class.\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 unique name for the storage claim.\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 access mode to determine the read and write access for the created storage claim.\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\tDefine the size of the storage claim.\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> to create the persistent volume claim and generate a persistent volume.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"vsphere-dynamic-provisioning-cli_persistent-storage-efs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.13.2.2. Dynamically provisioning VMware vSphere volumes using the CLI\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tOpenShift Container Platform installs a default StorageClass, named \u003Ccode class=\"literal\">thin\u003C/code>, that uses the \u003Ccode class=\"literal\">thin\u003C/code> disk format for provisioning volumes.\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\tStorage must exist in the underlying infrastructure before it can be mounted as a volume 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 (CLI)\u003C/strong>\u003C/p>\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\tYou can define a VMware vSphere PersistentVolumeClaim by creating a file, \u003Ccode class=\"literal\">pvc.yaml\u003C/code>, with the following contents:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">kind: PersistentVolumeClaim\napiVersion: v1\nmetadata:\n name: pvc \u003Cspan id=\"CO36-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n accessModes:\n - ReadWriteOnce \u003Cspan id=\"CO36-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n resources:\n requests:\n storage: 1Gi \u003Cspan id=\"CO36-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO36-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 unique name that represents the persistent volume claim.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO36-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 access mode of the persistent volume claim. With \u003Ccode class=\"literal\">ReadWriteOnce\u003C/code>, the volume can be mounted with read and write permissions by a single node.\n\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO36-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 size of the persistent volume claim.\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\tCreate the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object from the file:\n\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f pvc.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"vsphere-static-provisioning_persistent-storage-efs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">4.13.3. Statically provisioning VMware vSphere volumes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTo statically provision VMware vSphere volumes you must create the virtual machine disks for reference by the persistent volume framework.\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\tStorage must exist in the underlying infrastructure before it can be mounted as a volume 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 the virtual machine disks. Virtual machine disks (VMDKs) must be created manually before statically provisioning VMware vSphere volumes. Use either of the following methods:\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\tCreate using \u003Ccode class=\"literal\">vmkfstools\u003C/code>. Access ESX through Secure Shell (SSH) and then use following command to create a VMDK volume:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ vmkfstools -c &lt;size&gt; /vmfs/volumes/&lt;datastore-name&gt;/volumes/&lt;disk-name&gt;.vmdk\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tCreate using \u003Ccode class=\"literal\">vmware-diskmanager\u003C/code>:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ shell vmware-vdiskmanager -c -t 0 -s &lt;size&gt; -a lsilogic &lt;disk-name&gt;.vmdk\u003C/pre>\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a persistent volume that references the VMDKs. Create a file, \u003Ccode class=\"literal\">pv1.yaml\u003C/code>, with the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object definition:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolume\nmetadata:\n name: pv1 \u003Cspan id=\"CO37-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n capacity:\n storage: 1Gi \u003Cspan id=\"CO37-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n accessModes:\n - ReadWriteOnce\n persistentVolumeReclaimPolicy: Retain\n vsphereVolume: \u003Cspan id=\"CO37-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n volumePath: \"[datastore1] volumes/myDisk\" \u003Cspan id=\"CO37-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n fsType: ext4 \u003Cspan id=\"CO37-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO37-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 name of the volume. This name is how it is identified by persistent volume claims or pods.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO37-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 amount of storage allocated to this volume.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO37-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 volume type used, with \u003Ccode class=\"literal\">vsphereVolume\u003C/code> for vSphere volumes. The label is used to mount a vSphere VMDK volume into pods. The contents of a volume are preserved when it is unmounted. The volume type supports VMFS and VSAN datastore.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO37-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 existing VMDK volume to use. If you used \u003Ccode class=\"literal\">vmkfstools\u003C/code>, you must enclose the datastore name in square brackets, \u003Ccode class=\"literal\">[]\u003C/code>, in the volume definition, as shown previously.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO37-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 file system type to mount. For example, ext4, xfs, or other file systems.\n\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\tChanging the value of the fsType parameter after the volume is formatted and provisioned can result in data loss and pod failure.\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\tCreate the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object from the file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f pv1.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a persistent volume claim that maps to the persistent volume you created in the previous step. Create a file, \u003Ccode class=\"literal\">pvc1.yaml\u003C/code>, with the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object definition:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: pvc1 \u003Cspan id=\"CO38-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nspec:\n accessModes:\n - ReadWriteOnce \u003Cspan id=\"CO38-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n resources:\n requests:\n storage: \"1Gi\" \u003Cspan id=\"CO38-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n volumeName: pv1 \u003Cspan id=\"CO38-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO38-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tA unique name that represents the persistent volume claim.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO38-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 access mode of the persistent volume claim. With ReadWriteOnce, the volume can be mounted with read and write permissions by a single node.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO38-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 size of the persistent volume claim.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO38-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 name of the existing persistent volume.\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\tCreate the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object from the file:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f pvc1.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Csection class=\"section\" id=\"vsphere-formatting-volumes_persistent-storage-efs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">4.13.3.1. Formatting VMware vSphere volumes\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tBefore OpenShift Container Platform mounts the volume and passes it to a container, it checks that the volume contains a file system that is specified by the \u003Ccode class=\"literal\">fsType\u003C/code> parameter value in the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> (PV) definition. If the device is not formatted with the file system, all data from the device is erased, and the device is automatically formatted with the specified file system.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tBecause OpenShift Container Platform formats them before the first use, you can use unformatted vSphere volumes as PVs.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"chapter\" id=\"using-container-storage-interface-csi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">Chapter 5. Using Container Storage Interface (CSI)\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"persistent-storage-csi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.1. Configuring CSI volumes\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tThe Container Storage Interface (CSI) allows OpenShift Container Platform to consume storage from storage back ends that implement the \u003Ca class=\"link\" href=\"https://github.com/container-storage-interface/spec\">CSI interface\u003C/a> as persistent storage.\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\tOpenShift Container Platform 4.8 supports version 1.3.0 of the \u003Ca class=\"link\" href=\"https://github.com/container-storage-interface/spec\">CSI specification\u003C/a>.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"persistent-storage-csi-architecture_persistent-storage-csi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.1.1. CSI Architecture\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tCSI drivers are typically shipped as container images. These containers are not aware of OpenShift Container Platform where they run. To use CSI-compatible storage back end in OpenShift Container Platform, the cluster administrator must deploy several components that serve as a bridge between OpenShift Container Platform and the storage driver.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe following diagram provides a high-level overview about the components running in pods in the OpenShift Container Platform cluster.\n\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-Storage-en-US/images/8984f70396bee6fae4a769322f541eab/csi-arch-rev1.png\" alt=\"Architecture of CSI components\"/>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tIt is possible to run multiple CSI drivers for different storage back ends. Each driver needs its own external controllers deployment and daemon set with the driver and CSI registrar.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"external-csi-contollers_persistent-storage-csi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.1.1.1. External CSI controllers\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tExternal CSI Controllers is a deployment that deploys one or more pods with five containers:\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 snapshotter container watches \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> and \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> objects and is responsible for the creation and deletion of \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> object.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe resizer container is a sidecar container that watches for \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> updates and triggers \u003Ccode class=\"literal\">ControllerExpandVolume\u003C/code> operations against a CSI endpoint if you request more storage on \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tAn external CSI attacher container translates \u003Ccode class=\"literal\">attach\u003C/code> and \u003Ccode class=\"literal\">detach\u003C/code> calls from OpenShift Container Platform to respective \u003Ccode class=\"literal\">ControllerPublish\u003C/code> and \u003Ccode class=\"literal\">ControllerUnpublish\u003C/code> calls to the CSI driver.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tAn external CSI provisioner container that translates \u003Ccode class=\"literal\">provision\u003C/code> and \u003Ccode class=\"literal\">delete\u003C/code> calls from OpenShift Container Platform to respective \u003Ccode class=\"literal\">CreateVolume\u003C/code> and \u003Ccode class=\"literal\">DeleteVolume\u003C/code> calls to the CSI driver.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tA CSI driver container\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe CSI attacher and CSI provisioner containers communicate with the CSI driver container using UNIX Domain Sockets, ensuring that no CSI communication leaves the pod. The CSI driver is not accessible from outside of the pod.\n\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\u003Ccode class=\"literal\">attach\u003C/code>, \u003Ccode class=\"literal\">detach\u003C/code>, \u003Ccode class=\"literal\">provision\u003C/code>, and \u003Ccode class=\"literal\">delete\u003C/code> operations typically require the CSI driver to use credentials to the storage backend. Run the CSI controller pods on infrastructure nodes so the credentials are never leaked to user processes, even in the event of a catastrophic security breach on a compute node.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\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 external attacher must also run for CSI drivers that do not support third-party \u003Ccode class=\"literal\">attach\u003C/code> or \u003Ccode class=\"literal\">detach\u003C/code> operations. The external attacher will not issue any \u003Ccode class=\"literal\">ControllerPublish\u003C/code> or \u003Ccode class=\"literal\">ControllerUnpublish\u003C/code> operations to the CSI driver. However, it still must run to implement the necessary OpenShift Container Platform attachment API.\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"csi-driver-daemonset_persistent-storage-csi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.1.1.2. CSI driver daemon set\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe CSI driver daemon set runs a pod on every node that allows OpenShift Container Platform to mount storage provided by the CSI driver to the node and use it in user workloads (pods) as persistent volumes (PVs). The pod with the CSI driver installed contains the following containers:\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\tA CSI driver registrar, which registers the CSI driver into the \u003Ccode class=\"literal\">openshift-node\u003C/code> service running on the node. The \u003Ccode class=\"literal\">openshift-node\u003C/code> process running on the node then directly connects with the CSI driver using the UNIX Domain Socket available on the node.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tA CSI driver.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe CSI driver deployed on the node should have as few credentials to the storage back end as possible. OpenShift Container Platform will only use the node plugin set of CSI calls such as \u003Ccode class=\"literal\">NodePublish\u003C/code>/\u003Ccode class=\"literal\">NodeUnpublish\u003C/code> and \u003Ccode class=\"literal\">NodeStage\u003C/code>/\u003Ccode class=\"literal\">NodeUnstage\u003C/code>, if these calls are implemented.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"csi-drivers-supported_persistent-storage-csi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.1.2. CSI drivers supported by OpenShift Container Platform\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform installs certain CSI drivers by default, giving users storage options that are not possible with in-tree volume plugins.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create CSI-provisioned persistent volumes that mount to these supported storage assets, OpenShift Container Platform installs the necessary CSI driver Operator, the CSI driver, and the required storage class by default. For more details about the default namespace of the Operator and driver, see the documentation for the specific CSI Driver Operator.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe following table describes the CSI drivers that are installed with OpenShift Container Platform and which CSI features they support, such as volume snapshots, cloning, and resize.\n\t\t\t\t\u003C/p>\u003Crh-table id=\"idm140708981398208\">\u003Ctable class=\"gt-4-cols lt-7-rows\">\u003Ccaption>Table 5.1. Supported CSI drivers and features in OpenShift Container Platform\u003C/caption>\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=\"idm140708979960832\" scope=\"col\">CSI driver\u003C/th>\u003Cth align=\"center\" valign=\"top\" id=\"idm140708979959744\" scope=\"col\">CSI volume snapshots\u003C/th>\u003Cth align=\"center\" valign=\"top\" id=\"idm140708979958656\" scope=\"col\">CSI cloning\u003C/th>\u003Cth align=\"center\" valign=\"top\" id=\"idm140708979957568\" scope=\"col\">CSI resize\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979960832\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tAWS EBS (Tech Preview)\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979959744\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979958656\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979957568\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979960832\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tGoogle Cloud Platform (GCP) persistent disk (PD)\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979959744\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979958656\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979957568\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979960832\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tMicrosoft Azure Disk (Tech Preview)\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979959744\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979958656\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979957568\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979960832\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tOpenStack Cinder\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979959744\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979958656\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979957568\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979960832\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tOpenShift Container Storage\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979959744\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979958656\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979957568\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979960832\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tOpenStack Manila\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979959744\">\n\u003Cdiv class=\"literallayout\">\u003Cp> ✅\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979958656\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979957568\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979960832\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tRed Hat Virtualization (oVirt)\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979959744\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979958656\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979957568\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979960832\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tVMware vSphere (Tech Preview)\n\t\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979959744\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979958656\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"center\" valign=\"top\" headers=\"idm140708979957568\">\n\u003Cdiv class=\"literallayout\">\u003Cp> -\u003C/p>\u003C/div>\n\t\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\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 your CSI driver is not listed in the preceding table, you must follow the installation instructions provided by your CSI storage vendor to use their supported CSI features.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"csi-dynamic-provisioning_persistent-storage-csi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.1.3. Dynamic provisioning\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tDynamic provisioning of persistent storage depends on the capabilities of the CSI driver and underlying storage back end. The provider of the CSI driver should document how to create a storage class in OpenShift Container Platform and the parameters available for configuration.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe created storage class can be configured to enable dynamic provisioning.\n\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\tCreate a default storage class that ensures all PVCs that do not require any special storage class are provisioned by the installed CSI driver.\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-shell\"># oc create -f - &lt;&lt; EOF\napiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n name: &lt;storage-class&gt; \u003Cspan id=\"CO39-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n annotations:\n storageclass.kubernetes.io/is-default-class: \"true\"\nprovisioner: &lt;provisioner-name&gt; \u003Cspan id=\"CO39-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nparameters:\nEOF\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO39-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 name of the storage class that will be created.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO39-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 CSI driver that has been installed\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=\"csi-example-usage_persistent-storage-csi\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.1.4. Example using the CSI driver\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe following example installs a default MySQL template without any changes to the template.\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 CSI driver has been deployed.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tA storage class has been created for dynamic provisioning.\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 the MySQL template:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\"># oc new-app mysql-persistent\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\">--&gt; Deploying template \"openshift/mysql-persistent\" to project default\n...\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cpre class=\"programlisting language-terminal\"># oc get pvc\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 STATUS VOLUME CAPACITY\nACCESS MODES STORAGECLASS AGE\nmysql Bound kubernetes-dynamic-pv-3271ffcb4e1811e8 1Gi\nRWO cinder 3s\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=\"ephemeral-storage-csi-inline\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.2. CSI inline ephemeral volumes\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tContainer Storage Interface (CSI) inline ephemeral volumes allow you to define a \u003Ccode class=\"literal\">Pod\u003C/code> spec that creates inline ephemeral volumes when a pod is deployed and delete them when a pod is destroyed.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThis feature is only available with supported Container Storage Interface (CSI) drivers.\n\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\tCSI inline ephemeral volumes 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\u003C/p>\u003Cp>\n\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\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"ephemeral-storage-csi-inline-overview_ephemeral-storage-csi-inline\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.2.1. Overview of CSI inline ephemeral volumes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTraditionally, volumes that are backed by Container Storage Interface (CSI) drivers can only be used with a \u003Ccode class=\"literal\">PersistentVolume\u003C/code> and \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object combination.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThis feature allows you to specify CSI volumes directly in the \u003Ccode class=\"literal\">Pod\u003C/code> specification, rather than in a \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object. Inline volumes are ephemeral and do not persist across pod restarts.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"support-limitations\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.2.1.1. Support limitations\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tBy default, OpenShift Container Platform supports CSI inline ephemeral volumes with these limitations:\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\tSupport is only available for CSI drivers. In-tree and FlexVolumes are not supported.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tOpenShift Container Platform does not include any CSI drivers. Use the CSI drivers provided by \u003Ca class=\"link\" href=\"https://kubernetes-csi.github.io/docs/drivers.html\">community or storage vendors\u003C/a>. Follow the installation instructions provided by the CSI driver.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tCSI drivers might not have implemented the inline volume functionality, including \u003Ccode class=\"literal\">Ephemeral\u003C/code> capacity. For details, see the CSI driver documentation.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"ephemeral-storage-csi-inline-pod_ephemeral-storage-csi-inline\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.2.2. Embedding a CSI inline ephemeral volume in the pod specification\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can embed a CSI inline ephemeral volume in the \u003Ccode class=\"literal\">Pod\u003C/code> specification in OpenShift Container Platform. At runtime, nested inline volumes follow the ephemeral lifecycle of their associated pods so that the CSI driver handles all phases of volume operations as pods are created and destroyed.\n\t\t\t\t\u003C/p>\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 the \u003Ccode class=\"literal\">Pod\u003C/code> object definition and save it to a file.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tEmbed the CSI inline ephemeral volume in the file.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>my-csi-app.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">kind: Pod\napiVersion: v1\nmetadata:\n name: my-csi-app\nspec:\n containers:\n - name: my-frontend\n image: busybox\n volumeMounts:\n - mountPath: \"/data\"\n name: my-csi-inline-vol\n command: [ \"sleep\", \"1000000\" ]\n volumes: \u003Cspan id=\"CO40-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n - name: my-csi-inline-vol\n csi:\n driver: inline.storage.kubernetes.io\n volumeAttributes:\n foo: bar\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO40-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 name of the volume that is used by pods.\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\tCreate the object definition file that you saved in the previous step.\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f my-csi-app.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.3. CSI volume snapshots\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tThis document describes how to use volume snapshots with supported Container Storage Interface (CSI) drivers to help protect against data loss in OpenShift Container Platform. Familiarity with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-volumes_understanding-persistent-storage\">persistent volumes\u003C/a> is suggested.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"persistent-storage-csi-snapshots-overview_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.1. Overview of CSI volume snapshots\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tA \u003Cspan class=\"emphasis\">\u003Cem>snapshot\u003C/em>\u003C/span> represents the state of the storage volume in a cluster at a particular point in time. Volume snapshots can be used to provision a new volume.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform supports CSI volume snapshots by default. However, a specific CSI driver is required.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tWith CSI volume snapshots, a cluster administrator can:\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\tDeploy a third-party CSI driver that supports snapshots.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tCreate a new persistent volume claim (PVC) from an existing volume snapshot.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tTake a snapshot of an existing PVC.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tRestore a snapshot as a different PVC.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tDelete an existing volume snapshot.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tWith CSI volume snapshots, an app developer can:\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\tUse volume snapshots as building blocks for developing application- or cluster-level storage backup solutions.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tRapidly rollback to a previous development version.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tUse storage more efficiently by not having to make a full copy each time.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tBe aware of the following when using volume snapshots:\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\tSupport is only available for CSI drivers. In-tree and FlexVolumes are not supported.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenShift Container Platform only ships with select CSI drivers. For CSI drivers that are not provided by an OpenShift Container Platform Driver Operator, it is recommended to use the CSI drivers provided by \u003Ca class=\"link\" href=\"https://kubernetes-csi.github.io/docs/drivers.html\">community or storage vendors\u003C/a>. Follow the installation instructions provided by the CSI driver.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tCSI drivers may or may not have implemented the volume snapshot functionality. CSI drivers that have provided support for volume snapshots will likely use the \u003Ccode class=\"literal\">csi-external-snapshotter\u003C/code> sidecar. See documentation provided by the CSI driver for details.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-snapshots-controller-sidecar_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.2. CSI snapshot controller and sidecar\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform provides a snapshot controller that is deployed into the control plane. In addition, your CSI driver vendor provides the CSI snapshot sidecar as a helper container that is installed during the CSI driver installation.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe CSI snapshot controller and sidecar provide volume snapshotting through the OpenShift Container Platform API. These external components run in the cluster.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe external controller is deployed by the CSI Snapshot Controller Operator.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"external-controller\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.3.2.1. External controller\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe CSI snapshot controller binds \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> and \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> objects. The controller manages dynamic provisioning by creating and deleting \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> objects.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"external-sidecar\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.3.2.2. External sidecar\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tYour CSI driver vendor provides the \u003Ccode class=\"literal\">csi-external-snapshotter\u003C/code> sidecar. This is a separate helper container that is deployed with the CSI driver. The sidecar manages snapshots by triggering \u003Ccode class=\"literal\">CreateSnapshot\u003C/code> and \u003Ccode class=\"literal\">DeleteSnapshot\u003C/code> operations. Follow the installation instructions provided by your vendor.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-snapshots-operator_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.3. About the CSI Snapshot Controller Operator\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe CSI Snapshot Controller Operator runs in the \u003Ccode class=\"literal\">openshift-cluster-storage-operator\u003C/code> namespace. It is installed by the Cluster Version Operator (CVO) in all clusters by default.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe CSI Snapshot Controller Operator installs the CSI snapshot controller, which runs in the \u003Ccode class=\"literal\">openshift-cluster-storage-operator\u003C/code> namespace.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"volume-snapshot-crds\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.3.3.1. Volume snapshot CRDs\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tDuring OpenShift Container Platform installation, the CSI Snapshot Controller Operator creates the following snapshot custom resource definitions (CRDs) in the \u003Ccode class=\"literal\">snapshot.storage.k8s.io/v1\u003C/code> API group:\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tA snapshot taken of a volume in the cluster that has been provisioned by a cluster administrator.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tSimilar to the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object, the \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> CRD is a cluster resource that points to a real snapshot in the storage back end.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tFor manually pre-provisioned snapshots, a cluster administrator creates a number of \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> CRDs. These carry the details of the real volume snapshot in the storage system.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> CRD is not namespaced and is for use by a cluster administrator.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">VolumeSnapshot\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tSimilar to the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object, the \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> CRD defines a developer request for a snapshot. The CSI Snapshot Controller Operator runs the CSI snapshot controller, which handles the binding of a \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> CRD with an appropriate \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> CRD. The binding is a one-to-one mapping.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> CRD is namespaced. A developer uses the CRD as a distinct request for a snapshot.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">VolumeSnapshotClass\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tAllows a cluster administrator to specify different attributes belonging to a \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> object. These attributes may differ among snapshots taken of the same volume on the storage system, in which case they would not be expressed by using the same storage class of a persistent volume claim.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">VolumeSnapshotClass\u003C/code> CRD defines the parameters for the \u003Ccode class=\"literal\">csi-external-snapshotter\u003C/code> sidecar to use when creating a snapshot. This allows the storage back end to know what kind of snapshot to dynamically create if multiple options are supported.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tDynamically provisioned snapshots use the \u003Ccode class=\"literal\">VolumeSnapshotClass\u003C/code> CRD to specify storage-provider-specific parameters to use when creating a snapshot.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">VolumeSnapshotContentClass\u003C/code> CRD is not namespaced and is for use by a cluster administrator to enable global configuration options for their storage back end.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-snapshots-provision_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.4. Volume snapshot provisioning\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThere are two ways to provision snapshots: dynamically and manually.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"snapshots-dynamic-provisioning_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.3.4.1. Dynamic provisioning\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tInstead of using a preexisting snapshot, you can request that a snapshot be taken dynamically from a persistent volume claim. Parameters are specified using a \u003Ccode class=\"literal\">VolumeSnapshotClass\u003C/code> CRD.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"snapshots-manual-provisioning_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.3.4.2. Manual provisioning\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAs a cluster administrator, you can manually pre-provision a number of \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> objects. These carry the real volume snapshot details available to cluster users.\n\t\t\t\t\t\u003C/p>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-snapshots-create_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.5. Creating a volume snapshot\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen you create a \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> object, OpenShift Container Platform creates a volume snapshot.\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\tLogged in to a running OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tA PVC created using a CSI driver that supports \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> objects.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tA storage class to provision the storage back end.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tNo pods are using the persistent volume claim (PVC) that you want to take a snapshot of.\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\tDo not create a volume snapshot of a PVC if a pod is using it. Doing so might cause data corruption because the PVC is not quiesced (paused). Be sure to first tear down a running pod to ensure consistent snapshots.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\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 dynamically create a volume snapshot:\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\tCreate a file with the \u003Ccode class=\"literal\">VolumeSnapshotClass\u003C/code> object described by the following YAML:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>volumesnapshotclass.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: snapshot.storage.k8s.io/v1\nkind: VolumeSnapshotClass\nmetadata:\n name: csi-hostpath-snap\ndriver: hostpath.csi.k8s.io \u003Cspan id=\"CO41-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\ndeletionPolicy: Delete\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO41-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 name of the CSI driver that is used to create snapshots of this \u003Ccode class=\"literal\">VolumeSnapshotClass\u003C/code> object. The name must be the same as the \u003Ccode class=\"literal\">Provisioner\u003C/code> field of the storage class that is responsible for the PVC that is being snapshotted.\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\tCreate the object you saved in the previous step by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f volumesnapshotclass.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate a \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> object:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>volumesnapshot-dynamic.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: snapshot.storage.k8s.io/v1\nkind: VolumeSnapshot\nmetadata:\n name: mysnap\nspec:\n volumeSnapshotClassName: csi-hostpath-snap \u003Cspan id=\"CO42-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n source:\n persistentVolumeClaimName: myclaim \u003Cspan id=\"CO42-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\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=\"#CO42-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 request for a particular class by the volume snapshot. If the \u003Ccode class=\"literal\">volumeSnapshotClassName\u003C/code> setting is absent and there is a default volume snapshot class, a snapshot is created with the default volume snapshot class name. But if the field is absent and no default volume snapshot class exists, then no snapshot is created.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO42-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 \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object bound to a persistent volume. This defines what you want to create a snapshot of. Required for dynamically provisioning a snapshot.\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\tCreate the object you saved in the previous step by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f volumesnapshot-dynamic.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\tTo manually provision a snapshot:\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\tProvide a value for the \u003Ccode class=\"literal\">volumeSnapshotContentName\u003C/code> parameter as the source for the snapshot, in addition to defining volume snapshot class as shown above.\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>volumesnapshot-manual.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: snapshot.storage.k8s.io/v1\nkind: VolumeSnapshot\nmetadata:\n name: snapshot-demo\nspec:\n source:\n volumeSnapshotContentName: mycontent \u003Cspan id=\"CO43-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\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=\"#CO43-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 \u003Ccode class=\"literal\">volumeSnapshotContentName\u003C/code> parameter is required for pre-provisioned snapshots.\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\tCreate the object you saved in the previous step by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f volumesnapshot-manual.yaml\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\tAfter the snapshot has been created in the cluster, additional details about the snapshot are available.\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\tTo display details about the volume snapshot that was created, enter the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc describe volumesnapshot mysnap\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe following example displays details about the \u003Ccode class=\"literal\">mysnap\u003C/code> volume snapshot:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>volumesnapshot.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: snapshot.storage.k8s.io/v1\nkind: VolumeSnapshot\nmetadata:\n name: mysnap\nspec:\n source:\n persistentVolumeClaimName: myclaim\n volumeSnapshotClassName: csi-hostpath-snap\nstatus:\n boundVolumeSnapshotContentName: snapcontent-1af4989e-a365-4286-96f8-d5dcd65d78d6 \u003Cspan id=\"CO44-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n creationTime: \"2020-01-29T12:24:30Z\" \u003Cspan id=\"CO44-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n readyToUse: true \u003Cspan id=\"CO44-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n restoreSize: 500Mi\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO44-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 pointer to the actual storage content that was created by the controller.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO44-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 time when the snapshot was created. The snapshot contains the volume content that was available at this indicated time.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO44-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tIf the value is set to \u003Ccode class=\"literal\">true\u003C/code>, the snapshot can be used to restore as a new PVC. \u003Cbr/> If the value is set to \u003Ccode class=\"literal\">false\u003C/code>, the snapshot was created. However, the storage back end needs to perform additional tasks to make the snapshot usable so that it can be restored as a new volume. For example, Amazon Elastic Block Store data might be moved to a different, less expensive location, which can take several minutes.\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\tTo verify that the volume snapshot was created, enter the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get volumesnapshotcontent\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe pointer to the actual content is displayed. If the \u003Ccode class=\"literal\">boundVolumeSnapshotContentName\u003C/code> field is populated, a \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> object exists and the snapshot was created.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tTo verify that the snapshot is ready, confirm that the \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> object has \u003Ccode class=\"literal\">readyToUse: true\u003C/code>.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-snapshots-delete_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.6. Deleting a volume snapshot\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can configure how OpenShift Container Platform deletes volume snapshots.\n\t\t\t\t\u003C/p>\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\tSpecify the deletion policy that you require in the \u003Ccode class=\"literal\">VolumeSnapshotClass\u003C/code> object, as shown in the following example:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>volumesnapshotclass.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: snapshot.storage.k8s.io/v1\nkind: VolumeSnapshotClass\nmetadata:\n name: csi-hostpath-snap\ndriver: hostpath.csi.k8s.io\ndeletionPolicy: Delete \u003Cspan id=\"CO45-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\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=\"#CO45-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tWhen deleting the volume snapshot, if the \u003Ccode class=\"literal\">Delete\u003C/code> value is set, the underlying snapshot is deleted along with the \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> object. If the \u003Ccode class=\"literal\">Retain\u003C/code> value is set, both the underlying snapshot and \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> object remain. \u003Cbr/> If the \u003Ccode class=\"literal\">Retain\u003C/code> value is set and the \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> object is deleted without deleting the corresponding \u003Ccode class=\"literal\">VolumeSnapshotContent\u003C/code> object, the content remains. The snapshot itself is also retained in the storage back end.\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\tDelete the volume snapshot by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete volumesnapshot &lt;volumesnapshot_name&gt;\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\">volumesnapshot.snapshot.storage.k8s.io \"mysnapshot\" deleted\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\tIf the deletion policy is set to \u003Ccode class=\"literal\">Retain\u003C/code>, delete the volume snapshot content by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc delete volumesnapshotcontent &lt;volumesnapshotcontent_name&gt;\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: If the \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> object is not successfully deleted, enter the following command to remove any finalizers for the leftover resource so that the delete operation can continue:\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\tOnly remove the finalizers if you are confident that there are no existing references from either persistent volume claims or volume snapshot contents to the \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> object. Even with the \u003Ccode class=\"literal\">--force\u003C/code> option, the delete operation does not delete snapshot objects until all finalizers are removed.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cpre class=\"programlisting language-terminal\">$ oc patch -n $PROJECT volumesnapshot/$NAME --type=merge -p '{\"metadata\": {\"finalizers\":null}}'\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\">volumesnapshotclass.snapshot.storage.k8s.io \"csi-ocs-rbd-snapclass\" deleted\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 finalizers are removed and the volume snapshot is deleted.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-snapshots-restore_persistent-storage-csi-snapshots\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.3.7. Restoring a volume snapshot\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> CRD content can be used to restore the existing volume to a previous state.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tAfter your \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> CRD is bound and the \u003Ccode class=\"literal\">readyToUse\u003C/code> value is set to \u003Ccode class=\"literal\">true\u003C/code>, you can use that resource to provision a new volume that is pre-populated with data from the snapshot. .Prerequisites * Logged in to a running OpenShift Container Platform cluster. * A persistent volume claim (PVC) created using a Container Storage Interface (CSI) driver that supports volume snapshots. * A storage class to provision the storage back end. * A volume snapshot has been created and is ready to use.\n\t\t\t\t\u003C/p>\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\tSpecify a \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> data source on a PVC as shown in the following:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>pvc-restore.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: myclaim-restore\nspec:\n storageClassName: csi-hostpath-sc\n dataSource:\n name: mysnap \u003Cspan id=\"CO46-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n kind: VolumeSnapshot \u003Cspan id=\"CO46-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n apiGroup: snapshot.storage.k8s.io \u003Cspan id=\"CO46-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 1Gi\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO46-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tName of the \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> object representing the snapshot to use as source.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO46-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tMust be set to the \u003Ccode class=\"literal\">VolumeSnapshot\u003C/code> value.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO46-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tMust be set to the \u003Ccode class=\"literal\">snapshot.storage.k8s.io\u003C/code> value.\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\tCreate a PVC by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f pvc-restore.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the restored PVC has been created by entering the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pvc\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tA new PVC such as \u003Ccode class=\"literal\">myclaim-restore\u003C/code> is displayed.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-cloning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.4. CSI volume cloning\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tVolume cloning duplicates an existing persistent volume to help protect against data loss in OpenShift Container Platform. This feature is only available with supported Container Storage Interface (CSI) drivers. You should be familiar with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-volumes_understanding-persistent-storage\">persistent volumes\u003C/a> before you provision a CSI volume clone.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"persistent-storage-csi-cloning-overview_persistent-storage-csi-cloning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.4.1. Overview of CSI volume cloning\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tA Container Storage Interface (CSI) volume clone is a duplicate of an existing persistent volume at a particular point in time.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tVolume cloning is similar to volume snapshots, although it is more efficient. For example, a cluster administrator can duplicate a cluster volume by creating another instance of the existing cluster volume.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCloning creates an exact duplicate of the specified volume on the back-end device, rather than creating a new empty volume. After dynamic provisioning, you can use a volume clone just as you would use any standard volume.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tNo new API objects are required for cloning. The existing \u003Ccode class=\"literal\">dataSource\u003C/code> field in the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object is expanded so that it can accept the name of an existing PersistentVolumeClaim in the same namespace.\n\t\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"support-limitations-2\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">5.4.1.1. Support limitations\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tBy default, OpenShift Container Platform supports CSI volume cloning with these limitations:\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 destination persistent volume claim (PVC) must exist in the same namespace as the source PVC.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tThe source and destination storage class must be the same.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tSupport is only available for CSI drivers. In-tree and FlexVolumes are not supported.\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tCSI drivers might not have implemented the volume cloning functionality. For details, see the CSI driver documentation.\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-cloning-provisioning_persistent-storage-csi-cloning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.4.2. Provisioning a CSI volume clone\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen you create a cloned persistent volume claim (PVC) API object, you trigger the provisioning of a CSI volume clone. The clone pre-populates with the contents of another PVC, adhering to the same rules as any other persistent volume. The one exception is that you must add a \u003Ccode class=\"literal\">dataSource\u003C/code> that references an existing PVC in the same namespace.\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 are logged in to a running OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYour PVC is created using a CSI driver that supports volume cloning.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYour storage back end is configured for dynamic provisioning. Cloning support is not available for static provisioners.\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 clone a PVC from an existing PVC:\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\tCreate and save a file with the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object described by the following YAML:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>pvc-clone.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: pvc-1-clone\n namespace: mynamespace\nspec:\n storageClassName: csi-cloning \u003Cspan id=\"CO47-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 5Gi\n dataSource:\n kind: PersistentVolumeClaim\n name: pvc-1\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO47-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 name of the storage class that provisions the storage back end. The default storage class can be used and \u003Ccode class=\"literal\">storageClassName\u003C/code> can be omitted in the spec.\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\tCreate the object you saved in the previous step by running the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f pvc-clone.yaml\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tA new PVC \u003Ccode class=\"literal\">pvc-1-clone\u003C/code> is created.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the volume clone was created and is ready by running the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pvc pvc-1-clone\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">pvc-1-clone\u003C/code> shows that it is \u003Ccode class=\"literal\">Bound\u003C/code>.\n\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tYou are now ready to use the newly cloned PVC to configure a pod.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tCreate and save a file with the \u003Ccode class=\"literal\">Pod\u003C/code> object described by the YAML. For example:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">kind: Pod\napiVersion: v1\nmetadata:\n name: mypod\nspec:\n containers:\n - name: myfrontend\n image: dockerfile/nginx\n volumeMounts:\n - mountPath: \"/var/www/html\"\n name: mypd\n volumes:\n - name: mypd\n persistentVolumeClaim:\n claimName: pvc-1-clone \u003Cspan id=\"CO48-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO48-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 cloned PVC created during the CSI volume cloning operation.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe created \u003Ccode class=\"literal\">Pod\u003C/code> object is now ready to consume, clone, snapshot, or delete your cloned PVC independently of its original \u003Ccode class=\"literal\">dataSource\u003C/code> PVC.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-migration\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.5. CSI automatic migration\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform provides automatic migration for supported in-tree volume plugins to their equivalent Container Storage Interface (CSI) drivers.\n\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\tCSI automatic migration 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\u003C/p>\u003Cp>\n\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\u003C/p>\u003C/div>\u003C/rh-alert>\u003Csection class=\"section\" id=\"persistent-storage-csi-migration-overview_persistent-storage-csi-migration\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.5.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWith the automatic migration feature enabled, volumes provisioned using in-tree storage plugins supported by this feature are migrated to their counterpart CSI drivers.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe following drivers are supported:\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\tAmazon Web Services (AWS) Elastic Block Storage (EBS)\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tOpenStack Cinder\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tCSI automatic migration should be seamless. Enabling this feature does not change how you use all existing API objects (for example, \u003Ccode class=\"literal\">PersistentVolumes\u003C/code>, \u003Ccode class=\"literal\">PersistentVolumeClaims\u003C/code>, and \u003Ccode class=\"literal\">StorageClasses\u003C/code>).\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tBy default, automatic migration is disabled.\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\tCSI automatic migration will be enabled by default in a future OpenShift Container Platform release, so it is highly recommended that you test it now and report any issues.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-migration-enable_persistent-storage-csi-migration\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.5.2. Enabling CSI automatic migration\u003C/h4>\u003C/div>\u003C/div>\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\tEnabling CSI automatic migration drains, and then restarts, all nodes in the cluster in sequence. This might take some time.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\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\tEnable feature gates (see \u003Cspan class=\"emphasis\">\u003Cem>Nodes → Working with clusters → Enabling features using feature gates\u003C/em>\u003C/span>).\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\tAfter turning on Technology Preview features using feature gates, they cannot be turned off. As a result, cluster upgrades are prevented.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe following configuration example enables CSI automatic migration to both CSI drivers (AWS EBS and Cinder):\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: config.openshift.io/v1\nkind: FeatureGate\nmetadata:\n name: cluster\nspec:\n featureSet: TechPreviewNoUpgrade \u003Cspan id=\"CO49-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n...\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO49-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tEnables automatic migration for AWS EBS and Cinder.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tYou can specify CSI automatic migration for a selected CSI driver by setting \u003Ccode class=\"literal\">CustomNoUpgrade\u003C/code> \u003Ccode class=\"literal\">featureSet\u003C/code> and for \u003Ccode class=\"literal\">featuregates\u003C/code> either:\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\tCSIMigrationAWS\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tCSIMigrationOpenStack\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe following configuration example enables automatic migration to the AWS EBS CSI driver only:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: config.openshift.io/v1\nkind: FeatureGate\nmetadata:\n name: cluster\nspec:\n featureSet: CustomNoUpgrade\n customNoUpgrade:\n enabled:\n - CSIMigrationAWS \u003Cspan id=\"CO50-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n ...\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO50-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tEnables automatic migration for AWS EBS only.\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 _additional-resources\" id=\"additional-resources\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.5.3. Additional resources\u003C/h4>\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/nodes/#nodes-cluster-enabling\">Enabling features using feature gates\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-ebs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.6. AWS Elastic Block Store CSI Driver Operator\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"overview\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.6.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for AWS Elastic Block Store (EBS).\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\tAWS EBS CSI Driver Operator 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>\u003Cp>\n\t\t\t\t\tFamiliarity with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage\">persistent storage\u003C/a> and \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi\">configuring CSI volumes\u003C/a> is recommended when working with a Container Storage Interface (CSI) Operator and driver.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create CSI-provisioned PVs that mount to AWS EBS storage assets, OpenShift Container Platform installs the AWS EBS CSI Driver Operator and the AWS EBS CSI driver by default in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace.\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\tThe \u003Cspan class=\"emphasis\">\u003Cem>AWS EBS CSI Driver Operator\u003C/em>\u003C/span> provides a StorageClass by default that you can use to create PVCs. You also have the option to create the AWS EBS StorageClass as described in \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-aws\">Persistent storage using AWS Elastic Block Store\u003C/a>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe \u003Cspan class=\"emphasis\">\u003Cem>AWS EBS CSI driver\u003C/em>\u003C/span> enables you to create and mount AWS EBS PVs.\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\">Note\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\t\tIf you installed the AWS EBS CSI Operator and driver on a OpenShift Container Platform 4.5 cluster, you must uninstall the 4.5 Operator and driver before you update to OpenShift Container Platform 4.8.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"csi-about_persistent-storage-csi-ebs\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.6.2. About CSI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins.\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision AWS EBS storage.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\tFor information about dynamically provisioning AWS EBS persistent volumes in OpenShift Container Platform, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-aws\">Persistent storage using AWS Elastic Block Store\u003C/a>.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" 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/storage/#persistent-storage-aws\">Persistent storage using AWS Elastic Block Store\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/storage/#persistent-storage-csi\">Configuring CSI volumes\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-azure-disk\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.7. Azure Disk CSI Driver Operator\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"overview-2\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.7.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for Microsoft Azure Disk Storage.\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\tAzure Disk CSI Driver Operator 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>\u003Cp>\n\t\t\t\t\tFamiliarity with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage\">persistent storage\u003C/a> and \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi\">configuring CSI volumes\u003C/a> is recommended when working with a CSI Operator and driver.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create CSI-provisioned PVs that mount to Azure Disk storage assets with this feature is enabled, OpenShift Container Platform installs the Azure Disk CSI Driver Operator and the Azure Disk CSI driver by default in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace.\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\tThe \u003Cspan class=\"emphasis\">\u003Cem>Azure Disk CSI Driver Operator\u003C/em>\u003C/span>, after being enabled, provides a storage class named \u003Ccode class=\"literal\">managed-csi\u003C/code> that you can use to create persistent volume claims (PVCs). The Azure Disk CSI Driver Operator supports dynamic volume provisioning by allowing storage volumes to be created on-demand, eliminating the need for cluster administrators to pre-provision storage.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe \u003Cspan class=\"emphasis\">\u003Cem>Azure Disk CSI driver\u003C/em>\u003C/span> enables you to create and mount Azure Disk PVs.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"csi-about_persistent-storage-csi-azure\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.7.2. About CSI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins.\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision Azure Disk storage.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in later versions of OpenShift Container Platform.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"csi-tp-enable_persistent-storage-csi-azure\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.7.3. Enabling the Azure CSI Driver Operator\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTo enable the Azure Container Storage Interface (CSI) Driver Operator, you must enable feature gates with the \u003Ccode class=\"literal\">TechPreviewNoUpgrade\u003C/code> feature set.\n\t\t\t\t\u003C/p>\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\tEnable feature gates with the \u003Ccode class=\"literal\">TechPreviewNoUpgrade\u003C/code> feature set (see \u003Cspan class=\"emphasis\">\u003Cem>Nodes\u003C/em>\u003C/span> → \u003Cspan class=\"emphasis\">\u003Cem>Enabling features using feature gates\u003C/em>\u003C/span>).\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\tAfter turning Technology Preview features on by using feature gates, they cannot be turned off and cluster upgrades are prevented.\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\tVerify the cluster operator storage:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get co storage\u003C/pre>\u003Cpre class=\"programlisting language-terminal\">NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE\nstorage 4.8.0-0.nightly-2021-04-30-201824 True False False 4h26m\u003C/pre>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">AVAILABLE\u003C/code> should be \"True\".\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\">PROGRESSING\u003C/code> should be \"False\".\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\">DEGRADED\u003C/code> should be \"False\".\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\tVerify the status of the pods in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace to ensure that they are running:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pod -n openshift-cluster-csi-drivers\u003C/pre>\u003Cpre class=\"programlisting language-terminal\">NAME READY STATUS RESTARTS AGE\nazure-disk-csi-driver-controller-5949bf45fd-pm4qb 11/11 Running 0 39m\nazure-disk-csi-driver-node-2tcxr 3/3 Running 0 53m\nazure-disk-csi-driver-node-2xjzm 3/3 Running 0 53m\nazure-disk-csi-driver-node-6wrgk 3/3 Running 0 53m\nazure-disk-csi-driver-node-frvx2 3/3 Running 0 53m\nazure-disk-csi-driver-node-lf5kb 3/3 Running 0 53m\nazure-disk-csi-driver-node-mqdhh 3/3 Running 0 53m\nazure-disk-csi-driver-operator-7d966fc6c5-x74x5 1/1 Running 0 44m\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the storage class is installed:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get storageclass\u003C/pre>\u003Cpre class=\"programlisting language-terminal\">NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nmanaged-premium (default) kubernetes.io/azure-disk Delete WaitForFirstConsumer true 76m\nmanaged-csi disk.csi.azure.com Delete WaitForFirstConsumer true 51m \u003Cspan id=\"CO51-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO51-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tAzure storage class\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" 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/storage/#persistent-storage-using-azure\">Persistent storage using Azure Disk\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/storage/#persistent-storage-csi\">Configuring CSI volumes\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/nodes/#\">Enabling features using feature gates\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-gcp-pd\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.8. GCP PD CSI Driver Operator\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"overview-3\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.8.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform can provision persistent volumes (PVs) using the Container Storage Interface (CSI) driver for Google Cloud Platform (GCP) persistent disk (PD) storage.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFamiliarity with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage\">persistent storage\u003C/a> and \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi\">configuring CSI volumes\u003C/a> is recommended when working with a Container Storage Interface (CSI) Operator and driver.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create CSI-provisioned persistent volumes (PVs) that mount to GCP PD storage assets, OpenShift Container Platform installs the GCP PD CSI Driver Operator and the GCP PD CSI driver by default in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace.\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\t\u003Cspan class=\"strong strong\">\u003Cstrong>GCP PD CSI Driver Operator\u003C/strong>\u003C/span>: By default, the Operator provides a storage class that you can use to create PVCs. You also have the option to create the GCP PD storage class as described in \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-using-gce\">Persistent storage using GCE Persistent Disk\u003C/a>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Cspan class=\"strong strong\">\u003Cstrong>GCP PD driver\u003C/strong>\u003C/span>: The driver enables you to create and mount GCP PD PVs.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision GCP PD storage.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"csi-about_persistent-storage-csi-gcp-pd\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.8.2. About CSI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-gcp-pd-storage-class-ref_persistent-storage-csi-gcp-pd\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.8.3. GCP PD CSI driver storage class parameters\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe Google Cloud Platform (GCP) persistent disk (PD) Container Storage Interface (CSI) driver uses the CSI \u003Ccode class=\"literal\">external-provisioner\u003C/code> sidecar as a controller. This is a separate helper container that is deployed with the CSI driver. The sidecar manages persistent volumes (PVs) by triggering the \u003Ccode class=\"literal\">CreateVolume\u003C/code> operation.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe GCP PD CSI driver uses the \u003Ccode class=\"literal\">csi.storage.k8s.io/fstype\u003C/code> parameter key to support dynamic provisioning. The following table describes all the GCP PD CSI storage class parameters that are supported by OpenShift Container Platform.\n\t\t\t\t\u003C/p>\u003Crh-table id=\"idm140708982650992\">\u003Ctable class=\"gt-4-cols lt-7-rows\">\u003Ccaption>Table 5.2. CreateVolume Parameters\u003C/caption>\u003Ccolgroup>\u003Ccol style=\"width: 18%; \" class=\"col_1\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 27%; \" class=\"col_2\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 18%; \" class=\"col_3\">\u003C!--Empty-->\u003C/col>\u003Ccol style=\"width: 36%; \" class=\"col_4\">\u003C!--Empty-->\u003C/col>\u003C/colgroup>\u003Cthead>\u003Ctr>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708983420736\" scope=\"col\">Parameter\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708983419648\" scope=\"col\">Values\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708983418560\" scope=\"col\">Default\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708983417472\" scope=\"col\">Description\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708983420736\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">type\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=\"idm140708983419648\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">pd-ssd\u003C/code> or \u003Ccode class=\"literal\">pd-standard\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=\"idm140708983418560\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">pd-standard\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=\"idm140708983417472\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tAllows you to choose between standard PVs or solid-state-drive PVs.\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=\"idm140708983420736\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">replication-type\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=\"idm140708983419648\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">none\u003C/code> or \u003Ccode class=\"literal\">regional-pd\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=\"idm140708983418560\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">none\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=\"idm140708983417472\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tAllows you to choose between zonal or regional PVs.\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=\"idm140708983420736\"> \u003Cp>\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">disk-encryption-kms-key\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=\"idm140708983419648\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tFully qualified resource identifier for the key to use to encrypt new disks.\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=\"idm140708983418560\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tEmpty string\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=\"idm140708983417472\"> \u003Cp>\n\t\t\t\t\t\t\t\t\tUses customer-managed encryption keys (CMEK) to encrypt new disks.\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>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-gcp-pd-encrypted-pv_persistent-storage-csi-gcp-pd\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.8.4. Creating a custom-encrypted persistent volume\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen you create a \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object, OpenShift Container Platform provisions a new persistent volume (PV) and creates a \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object. You can add a custom encryption key in Google Cloud Platform (GCP) to protect a PV in your cluster by encrypting the newly created PV.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFor encryption, the newly attached PV that you create uses customer-managed encryption keys (CMEK) on a cluster by using a new or existing Google Cloud Key Management Service (KMS) key.\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 are logged in to a running 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 Cloud KMS key ring and key version.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tFor more information about CMEK and Cloud KMS resources, see \u003Ca class=\"link\" href=\"https://cloud.google.com/kubernetes-engine/docs/how-to/using-cmek\">Using customer-managed encryption keys (CMEK)\u003C/a>.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tTo create a custom-encrypted PV, complete the following steps:\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\tCreate a storage class with the Cloud KMS key. The following example enables dynamic provisioning of encrypted volumes:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n name: csi-gce-pd-cmek\nprovisioner: pd.csi.storage.gke.io\nvolumeBindingMode: \"WaitForFirstConsumer\"\nallowVolumeExpansion: true\nparameters:\n type: pd-standard\n disk-encryption-kms-key: projects/&lt;key-project-id&gt;/locations/&lt;location&gt;/keyRings/&lt;key-ring&gt;/cryptoKeys/&lt;key&gt; \u003Cspan id=\"CO52-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO52-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tThis field must be the resource identifier for the key that will be used to encrypt new disks. Values are case-sensitive. For more information about providing key ID values, see \u003Ca class=\"link\" href=\"https://cloud.google.com/kms/docs/resource-hierarchy#retrieve_resource_id\">Retrieving a resource’s ID\u003C/a> and \u003Ca class=\"link\" href=\"https://cloud.google.com/kms/docs/getting-resource-ids\">Getting a Cloud KMS resource ID\u003C/a>.\n\t\t\t\t\t\t\t\t\u003C/div>\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\t\t\tYou cannot add the \u003Ccode class=\"literal\">disk-encryption-kms-key\u003C/code> parameter to an existing storage class. However, you can delete the storage class and recreate it with the same name and a different set of parameters. If you do this, the provisioner of the existing class must be \u003Ccode class=\"literal\">pd.csi.storage.gke.io\u003C/code>.\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\tDeploy the storage class on your OpenShift Container Platform cluster using the \u003Ccode class=\"literal\">oc\u003C/code> command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc describe storageclass csi-gce-pd-cmek\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: csi-gce-pd-cmek\nIsDefaultClass: No\nAnnotations: None\nProvisioner: pd.csi.storage.gke.io\nParameters: disk-encryption-kms-key=projects/key-project-id/locations/location/keyRings/ring-name/cryptoKeys/key-name,type=pd-standard\nAllowVolumeExpansion: true\nMountOptions: none\nReclaimPolicy: Delete\nVolumeBindingMode: WaitForFirstConsumer\nEvents: none\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\tCreate a file named \u003Ccode class=\"literal\">pvc.yaml\u003C/code> that matches the name of your storage class object that you created in the previous step:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">kind: PersistentVolumeClaim\napiVersion: v1\nmetadata:\n name: podpvc\nspec:\n accessModes:\n - ReadWriteOnce\n storageClassName: csi-gce-pd-cmek\n resources:\n requests:\n storage: 6Gi\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\tIf you marked the new storage class as default, you can omit the \u003Ccode class=\"literal\">storageClassName\u003C/code> field.\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 PVC on your cluster:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc apply -f pvc.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tGet the status of your PVC and verify that it is created and bound to a newly provisioned PV:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pvc\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 STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE\npodpvc Bound pvc-e36abf50-84f3-11e8-8538-42010a800002 10Gi RWO csi-gce-pd-cmek 9s\u003C/pre>\n\n\t\t\t\t\t\t\t\u003C/p>\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\t\tIf your storage class has the \u003Ccode class=\"literal\">volumeBindingMode\u003C/code> field set to \u003Ccode class=\"literal\">WaitForFirstConsumer\u003C/code>, you must create a pod to use the PVC before you can verify it.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/li>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\tYour CMEK-protected PV is now ready to use with your OpenShift Container Platform cluster.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" 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/storage/#persistent-storage-using-gce\">Persistent storage using GCE Persistent Disk\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/storage/#persistent-storage-csi\">Configuring CSI volumes\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.9. OpenStack Cinder CSI Driver Operator\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"overview-4\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.9.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for OpenStack Cinder.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFamiliarity with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage\">persistent storage\u003C/a> and \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi\">configuring CSI volumes\u003C/a> is recommended when working with a Container Storage Interface (CSI) Operator and driver.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create CSI-provisioned PVs that mount to OpenStack Cinder storage assets, OpenShift Container Platform installs the OpenStack Cinder CSI Driver Operator and the OpenStack Cinder CSI driver in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace.\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\tThe \u003Cspan class=\"emphasis\">\u003Cem>OpenStack Cinder CSI Driver Operator\u003C/em>\u003C/span> provides a CSI storage class that you can use to create PVCs.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe \u003Cspan class=\"emphasis\">\u003Cem>OpenStack Cinder CSI driver\u003C/em>\u003C/span> enables you to create and mount OpenStack Cinder PVs.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\tFor OpenShift Container Platform, automatic migration from OpenStack Cinder in-tree to the CSI driver is available as a Technology Preview (TP) feature. With migration enabled, volumes provisioned using the existing in-tree plugin are automatically migrated to use the OpenStack Cinder CSI driver. For more information, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration feature\u003C/a>.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"csi-about_persistent-storage-csi-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.9.2. About CSI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins.\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision Cinder storage.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-cinder_persistent-storage-csi-cinder\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.9.3. Making OpenStack Cinder CSI the default storage class\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe OpenStack Cinder CSI driver uses the \u003Ccode class=\"literal\">cinder.csi.openstack.org\u003C/code> parameter key to support dynamic provisioning.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo enable OpenStack Cinder CSI provisioning in OpenShift Container Platform, it is recommended that you overwrite the default in-tree storage class with \u003Ccode class=\"literal\">standard-csi\u003C/code>. Alternatively, you can create the persistent volume claim (PVC) and specify the storage class as \"standard-csi\".\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tIn OpenShift Container Platform, the default storage class references the in-tree Cinder driver. However, with CSI automatic migration enabled, volumes created using the default storage class actually use the CSI driver.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Procedure\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tUse the following steps to apply the \u003Ccode class=\"literal\">standard-csi\u003C/code> storage class by overwriting the default in-tree storage class.\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\tList the storage class:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get storageclass\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 PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nstandard(default) cinder.csi.openstack.org Delete WaitForFirstConsumer true 46h\nstandard-csi kubernetes.io/cinder Delete WaitForFirstConsumer true 46h\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\tChange the value of the annotation \u003Ccode class=\"literal\">storageclass.kubernetes.io/is-default-class\u003C/code> to \u003Ccode class=\"literal\">false\u003C/code> for the default storage class, as shown in the following example:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc patch storageclass standard -p '{\"metadata\": {\"annotations\": {\"storageclass.kubernetes.io/is-default-class\": \"false\"}}}'\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tMake another storage class the default by adding or modifying the annotation as \u003Ccode class=\"literal\">storageclass.kubernetes.io/is-default-class=true\u003C/code>.\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc patch storageclass standard-csi -p '{\"metadata\": {\"annotations\": {\"storageclass.kubernetes.io/is-default-class\": \"true\"}}}'\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the PVC is now referencing the CSI storage class by default:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get storageclass\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 PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nstandard kubernetes.io/cinder Delete WaitForFirstConsumer true 46h\nstandard-csi(default) cinder.csi.openstack.org Delete WaitForFirstConsumer true 46h\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 define a new PVC without having to specify the storage class:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: cinder-claim\nspec:\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 1Gi\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tA PVC that does not specify a specific storage class is automatically provisioned by using the default storage class.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tOptional: After the new file has been configured, create it in your cluster:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f cinder-claim.yaml\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" 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/storage/#persistent-storage-csi\">Configuring CSI volumes\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-manila\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.10. OpenStack Manila CSI Driver Operator\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"overview-5\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for the \u003Ca class=\"link\" href=\"https://wiki.openstack.org/wiki/Manila\">OpenStack Manila\u003C/a> shared file system service.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFamiliarity with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage\">persistent storage\u003C/a> and \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi\">configuring CSI volumes\u003C/a> is recommended when working with a Container Storage Interface (CSI) Operator and driver.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create CSI-provisioned PVs that mount to Manila storage assets, OpenShift Container Platform installs the Manila CSI Driver Operator and the Manila CSI driver by default on any OpenStack cluster that has the Manila service enabled.\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\tThe \u003Cspan class=\"emphasis\">\u003Cem>Manila CSI Driver Operator\u003C/em>\u003C/span> creates the required storage class that is needed to create PVCs for all available Manila share types. The Operator is installed in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe \u003Cspan class=\"emphasis\">\u003Cem>Manila CSI driver\u003C/em>\u003C/span> enables you to create and mount Manila PVs. The driver is installed in the \u003Ccode class=\"literal\">openshift-manila-csi-driver\u003C/code> namespace.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"csi-about_persistent-storage-csi-manila\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.2. About CSI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-manila-limitations_persistent-storage-csi-manila\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.3. Manila CSI Driver Operator limitations\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe following limitations apply to the Manila Container Storage Interface (CSI) Driver Operator:\n\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">Only NFS is supported\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tOpenStack Manila supports many network-attached storage protocols, such as NFS, CIFS, and CEPHFS, and these can be selectively enabled in the OpenStack cloud. The Manila CSI Driver Operator in OpenShift Container Platform only supports using the NFS protocol. If NFS is not available and enabled in the underlying OpenStack cloud, you cannot use the Manila CSI Driver Operator to provision storage for OpenShift Container Platform.\n\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">Snapshots are not supported if the back end is CephFS-NFS\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tTo take snapshots of persistent volumes (PVs) and revert volumes to snapshots, you must ensure that the Manila share type that you are using supports these features. A Red Hat OpenStack administrator must enable support for snapshots (\u003Ccode class=\"literal\">share type extra-spec snapshot_support\u003C/code>) and for creating shares from snapshots (\u003Ccode class=\"literal\">share type extra-spec create_share_from_snapshot_support\u003C/code>) in the share type associated with the storage class you intend to use.\n\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">FSGroups are not supported\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\tSince Manila CSI provides shared file systems for access by multiple readers and multiple writers, it does not support the use of FSGroups. This is true even for persistent volumes created with the ReadWriteOnce access mode. It is therefore important not to specify the \u003Ccode class=\"literal\">fsType\u003C/code> attribute in any storage class that you manually create for use with Manila CSI Driver.\n\t\t\t\t\t\t\t\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\tIn Red Hat OpenStack Platform 16.x and 17.x, the Shared File Systems service (Manila) with CephFS through NFS fully supports serving shares to OpenShift Container Platform through the Manila CSI. However, this solution is not intended for massive scale. Be sure to review important recommendations in \u003Ca class=\"link\" href=\"https://access.redhat.com/articles/6667651\">CephFS NFS Manila-CSI Workload Recommendations for Red Hat OpenStack Platform\u003C/a>.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-manila-dynamic-provisioning_persistent-storage-csi-manila\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.10.4. Dynamically provisioning Manila CSI volumes\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform installs a storage class for each available Manila share type.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tThe YAML files that are created are completely decoupled from Manila and from its Container Storage Interface (CSI) plugin. As an application developer, you can dynamically provision ReadWriteMany (RWX) storage and deploy pods with applications that safely consume the storage using YAML manifests.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tYou can use the same pod and persistent volume claim (PVC) definitions on-premise that you use with OpenShift Container Platform on AWS, GCP, Azure, and other platforms, with the exception of the storage class reference in the PVC definition.\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\tManila service is optional. If the service is not enabled in Red Hat OpenStack Platform (RHOSP), the Manila CSI driver is not installed and the storage classes for Manila are not created.\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\tRHOSP is deployed with appropriate Manila share infrastructure so that it can be used to dynamically provision and mount volumes in OpenShift Container Platform.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Procedure (UI)\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tTo dynamically create a Manila CSI volume using the web console:\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 OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Persistent Volume Claims\u003C/strong>\u003C/span>.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tIn the persistent volume claims overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Persistent Volume Claim\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\tDefine the required options on the resulting page.\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\tSelect the appropriate storage class.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter a unique name for the storage claim.\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 the access mode to specify read and write access for the PVC you are creating.\n\t\t\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\t\t\tUse RWX if you want the persistent volume (PV) that fulfills this PVC to be mounted to multiple pods on multiple nodes in the cluster.\n\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\tDefine the size of the storage claim.\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> to create the persistent volume claim and generate a persistent volume.\n\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Procedure (CLI)\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\tTo dynamically create a Manila CSI volume using the command-line interface (CLI):\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\tCreate and save a file with the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object described by the following YAML:\n\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>pvc-manila.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: pvc-manila\nspec:\n accessModes: \u003Cspan id=\"CO53-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n - ReadWriteMany\n resources:\n requests:\n storage: 10Gi\n storageClassName: csi-manila-gold \u003Cspan id=\"CO53-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\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=\"#CO53-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 RWX if you want the persistent volume (PV) that fulfills this PVC to be mounted to multiple pods on multiple nodes in the cluster.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO53-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 storage class that provisions the storage back end. Manila storage classes are provisioned by the Operator and have the \u003Ccode class=\"literal\">csi-manila-\u003C/code> prefix.\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\tCreate the object you saved in the previous step by running the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc create -f pvc-manila.yaml\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tA new PVC is created.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tTo verify that the volume was created and is ready, run the following command:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pvc pvc-manila\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">pvc-manila\u003C/code> shows that it is \u003Ccode class=\"literal\">Bound\u003C/code>.\n\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ol>\u003C/div>\u003Cp>\n\t\t\t\t\tYou can now use the new PVC to configure a pod.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" 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/storage/#persistent-storage-csi\">Configuring CSI volumes\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-csi-ovirt\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.11. Red Hat Virtualization CSI Driver Operator\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"overview-6\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.11.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform is capable of provisioning persistent volumes (PVs) using the Container Storage Interface (CSI) driver for Red Hat Virtualization (RHV).\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tFamiliarity with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage\">persistent storage\u003C/a> and \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi\">configuring CSI volumes\u003C/a> is recommended when working with a Container Storage Interface (CSI) Operator and driver.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create CSI-provisioned PVs that mount to RHV storage assets, OpenShift Container Platform installs the oVirt CSI Driver Operator and the oVirt CSI driver by default in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace.\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\tThe \u003Cspan class=\"emphasis\">\u003Cem>oVirt CSI Driver Operator\u003C/em>\u003C/span> provides a default \u003Ccode class=\"literal\">StorageClass\u003C/code> object that you can use to create Persistent Volume Claims (PVCs).\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tThe \u003Cspan class=\"emphasis\">\u003Cem>oVirt CSI driver\u003C/em>\u003C/span> enables you to create and mount oVirt PVs.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"csi-about_persistent-storage-csi-ovirt\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.11.2. About CSI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins.\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\tThe oVirt CSI driver does not support snapshots.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"ovirt-csi-driver-storage-class_persistent-storage-csi-ovirt\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.11.3. oVirt CSI driver storage class\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform creates a default object of type \u003Ccode class=\"literal\">StorageClass\u003C/code> named \u003Ccode class=\"literal\">ovirt-csi-sc\u003C/code> which is used for creating dynamically provisioned persistent volumes.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create additional storage classes for different configurations, create and save a file with the \u003Ccode class=\"literal\">StorageClass\u003C/code> object described by the following sample YAML:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n name: &lt;storage-class-name&gt; \u003Cspan id=\"CO54-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n annotations:\n storageclass.kubernetes.io/is-default-class: \"false\" \u003Cspan id=\"CO54-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nprovisioner: csi.ovirt.org\nparameters:\n storageDomainName: &lt;rhv-storage-domain-name&gt; \u003Cspan id=\"CO54-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n thinProvisioning: \"true\" \u003Cspan id=\"CO54-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n csi.storage.k8s.io/fstype: ext4 \u003Cspan id=\"CO54-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO54-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tName of the storage class.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO54-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tSet to \u003Ccode class=\"literal\">false\u003C/code> if the storage class is the default storage class in the cluster. If set to \u003Ccode class=\"literal\">true\u003C/code>, the existing default storage class must be edited and set to \u003Ccode class=\"literal\">false\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO54-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tRHV storage domain name to use.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO54-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tDisk must be thin provisioned.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO54-5\">\u003Cspan class=\"callout\">5\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tFile system type to be created.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-rhv_persistent-storage-csi-ovirt\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.11.4. Creating a persistent volume on RHV\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tWhen you create a \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> (PVC) object, OpenShift Container Platform provisions a new persistent volume (PV) and creates a \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object.\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 are logged in to a running OpenShift Container Platform cluster.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou provided the correct RHV credentials in \u003Ccode class=\"literal\">ovirt-credentials\u003C/code> secret.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have installed the oVirt CSI driver.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\tYou have defined at least one storage class.\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\tIf you are using the we console to dynamically create a persistent volume on RHV:\n\t\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\tIn the OpenShift Container Platform console, click \u003Cspan class=\"strong strong\">\u003Cstrong>Storage\u003C/strong>\u003C/span> → \u003Cspan class=\"strong strong\">\u003Cstrong>Persistent Volume Claims\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\tIn the persistent volume claims overview, click \u003Cspan class=\"strong strong\">\u003Cstrong>Create Persistent Volume Claim\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\tDefine the required options on the resulting page.\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 appropriate \u003Ccode class=\"literal\">StorageClass\u003C/code> object, which is \u003Ccode class=\"literal\">ovirt-csi-sc\u003C/code> by default.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tEnter a unique name for the storage claim.\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 access mode. Currently, RWO (ReadWriteOnce) is the only supported access mode.\n\t\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tDefine the size of the storage claim.\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 the Volume Mode:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">Filesystem\u003C/code>: Mounted into pods as a directory. This mode is the default.\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">Block\u003C/code>: Block device, without any file system on it\n\t\t\t\t\t\t\t\t\u003C/p>\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> to create the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object and generate a \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object.\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\tIf you are using the command-line interface (CLI) to dynamically create a RHV CSI volume:\n\t\t\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\t\t\tCreate and save a file with the \u003Ccode class=\"literal\">PersistentVolumeClaim\u003C/code> object described by the following sample YAML:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>pvc-ovirt.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n name: pvc-ovirt\nspec:\n storageClassName: ovirt-csi-sc \u003Cspan id=\"CO55-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: &lt;volume size&gt; \u003Cspan id=\"CO55-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n volumeMode: &lt;volume mode&gt; \u003Cspan id=\"CO55-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\n\n\t\t\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO55-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 required storage class.\n\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO55-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\tVolume size in GiB.\n\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO55-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\tSupported options:\n\t\t\t\t\t\t\t\t\t\t\u003C/div>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"circle\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">Filesystem\u003C/code>: Mounted into pods as a directory. This mode is the default.\n\t\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\t\t\u003Ccode class=\"literal\">Block\u003C/code>: Block device, without any file system on it.\n\t\t\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\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\tCreate the object you saved in the previous step by running the following command:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"screen\">$ oc create -f pvc-ovirt.yaml\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tTo verify that the volume was created and is ready, run the following command:\n\t\t\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"screen\">$ oc get pvc pvc-ovirt\u003C/pre>\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">pvc-ovirt\u003C/code> shows that it is Bound.\n\t\t\t\t\t\t\t\t\u003C/p>\u003C/li>\u003C/ol>\u003C/div>\u003C/li>\u003C/ul>\u003C/div>\u003Cdiv class=\"itemizedlist _additional-resources\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\u003Cul class=\"itemizedlist _additional-resources\" 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/storage/#persistent-storage-csi\">Configuring CSI volumes\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/storage/#csi-dynamic-provisioning_persistent-storage-csi\">Dynamic Provisioning\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"persistent-storage-vsphere\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">5.12. VMware vSphere CSI Driver Operator\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"overview-7\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.12.1. Overview\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOpenShift Container Platform can provision persistent volumes (PVs) using the Container Storage Interface (CSI) VMware vSphere driver for Virtual Machine Disk (VMDK) volumes.\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\tvSphere CSI Driver Operator 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>\u003Cp>\n\t\t\t\t\tFamiliarity with \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#understanding-persistent-storage\">persistent storage\u003C/a> and \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi\">configuring CSI volumes\u003C/a> is recommended when working with a CSI Operator and driver.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tTo create CSI-provisioned persistent volumes (PVs) that mount to vSphere storage assets, OpenShift Container Platform, after this feature is enabled, installs the vSphere CSI Driver Operator and the vSphere CSI driver by default in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace.\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\t\u003Cspan class=\"strong strong\">\u003Cstrong>vSphere CSI Driver Operator\u003C/strong>\u003C/span>: After being enabled, the Operator provides a storage class, called \u003Ccode class=\"literal\">thin-csi\u003C/code>, that you can use to create persistent volumes claims (PVCs). The vSphere CSI Driver Operator supports dynamic volume provisioning by allowing storage volumes to be created on-demand, eliminating the need for cluster administrators to pre-provision storage.\n\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\u003Cspan class=\"strong strong\">\u003Cstrong>vSphere CSI driver\u003C/strong>\u003C/span>: The driver enables you to create and mount vSphere PVs.\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\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\tOpenShift Container Platform defaults to using an in-tree (non-CSI) plugin to provision vSphere storage.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tIn future OpenShift Container Platform versions, volumes provisioned using existing in-tree plugins are planned for migration to their equivalent CSI driver. CSI automatic migration should be seamless. Migration does not change how you use all existing API objects, such as persistent volumes, persistent volume claims, and storage classes. For more information about migration, see \u003Ca class=\"link\" href=\"https://access.redhat.com/documentation/en-us/openshift_container_platform/4.8/html-single/storage/#persistent-storage-csi-migration\">CSI automatic migration\u003C/a>.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tAfter full migration, in-tree plugins will eventually be removed in future versions of OpenShift Container Platform.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"csi-about_persistent-storage-csi-vsphere\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.12.2. About CSI\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tStorage vendors have traditionally provided storage drivers as part of Kubernetes. With the implementation of the Container Storage Interface (CSI), third-party providers can instead deliver storage plugins using a standard interface without ever having to change the core Kubernetes code.\n\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\tCSI Operators give OpenShift Container Platform users storage options, such as volume snapshots, that are not possible with in-tree volume plugins.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"itemizedlist\">\u003Cp class=\"title\">\u003Cstrong>Additional resources\u003C/strong>\u003C/p>\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/storage/#persistent-storage-csi\">Configuring CSI volumes\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"csi-tp-enable_persistent-storage-csi-vsphere\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.12.3. Enabling the vSphere CSI Driver Operator\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTo enable the vSphere Container Storage Interface (CSI) Driver Operator, you must enable feature gates with the \u003Ccode class=\"literal\">TechPreviewNoUpgrade\u003C/code> feature set.\n\t\t\t\t\u003C/p>\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\tEnable feature gates with the \u003Ccode class=\"literal\">TechPreviewNoUpgrade\u003C/code> feature set (see \u003Cspan class=\"emphasis\">\u003Cem>Nodes\u003C/em>\u003C/span> → \u003Cspan class=\"emphasis\">\u003Cem>Enabling features using feature gates\u003C/em>\u003C/span>).\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\tAfter turning Technology Preview features on by using feature gates, they cannot be turned off and cluster upgrades are prevented.\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\tVerify the cluster operator storage:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get co storage\u003C/pre>\u003Cpre class=\"programlisting language-terminal\">NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE\nstorage 4.8.0-0.nightly-2021-04-30-201824 True False False 4h26m\u003C/pre>\u003Cdiv class=\"itemizedlist\">\u003Cul class=\"itemizedlist\" type=\"disc\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">AVAILABLE\u003C/code> should be \"True\".\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\">PROGRESSING\u003C/code> should be \"False\".\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\">DEGRADED\u003C/code> should be \"False\".\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\tVerify the status of the pods in the \u003Ccode class=\"literal\">openshift-cluster-csi-drivers\u003C/code> namespace to ensure that they are running:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get pod -n openshift-cluster-csi-drivers\u003C/pre>\u003Cpre class=\"programlisting language-terminal\">NAME READY STATUS RESTARTS AGE\nvmware-vsphere-csi-driver-controller-5646dbbf54-cnsx7 9/9 Running 0 4h29m\nvmware-vsphere-csi-driver-node-ch22q 3/3 Running 0 4h37m\nvmware-vsphere-csi-driver-node-gfjrb 3/3 Running 0 4h37m\nvmware-vsphere-csi-driver-node-ktlmp 3/3 Running 0 4h37m\nvmware-vsphere-csi-driver-node-lgksl 3/3 Running 0 4h37m\nvmware-vsphere-csi-driver-node-vb4gv 3/3 Running 0 4h37m\nvmware-vsphere-csi-driver-operator-7c7fc474c-p544t 1/1 Running 0 4h29m\u003C/pre>\u003C/li>\u003C/ol>\u003C/div>\u003Cpre class=\"programlisting language-terminal\">NAME READY STATUS RESTARTS AGE\nazure-disk-csi-driver-controller-5949bf45fd-pm4qb 11/11 Running 0 39m\nazure-disk-csi-driver-node-2tcxr 3/3 Running 0 53m\nazure-disk-csi-driver-node-2xjzm 3/3 Running 0 53m\nazure-disk-csi-driver-node-6wrgk 3/3 Running 0 53m\nazure-disk-csi-driver-node-frvx2 3/3 Running 0 53m\nazure-disk-csi-driver-node-lf5kb 3/3 Running 0 53m\nazure-disk-csi-driver-node-mqdhh 3/3 Running 0 53m\nazure-disk-csi-driver-operator-7d966fc6c5-x74x5 1/1 Running 0 44m\u003C/pre>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"1\">\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\t\tVerify that the storage class is installed:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get storageclass\u003C/pre>\u003Cpre class=\"programlisting language-terminal\">NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nthin (default) kubernetes.io/vsphere-volume Delete Immediate false 5h43m\nthin-csi csi.vsphere.vmware.com Delete WaitForFirstConsumer false 4h38m \u003Cspan id=\"CO56-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO56-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tvSphere storage class\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Cpre class=\"programlisting language-terminal\">NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE\nmanaged-premium (default) kubernetes.io/azure-disk Delete WaitForFirstConsumer true 76m\nmanaged-csi disk.csi.azure.com Delete WaitForFirstConsumer true 51m \u003Cspan id=\"CO57-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO57-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tAzure storage class\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section _additional-resources\" id=\"additional-resources-2\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">5.12.4. Additional resources\u003C/h4>\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/nodes/#\">Enabling features using feature gates\u003C/a>\n\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/section>\u003C/section>\u003C/section>\u003Csection class=\"chapter\" id=\"expanding-persistent-volumes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">Chapter 6. Expanding persistent volumes\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"add-volume-expansion_expanding-persistent-volumes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">6.1. Enabling volume expansion support\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tBefore you can expand persistent volumes, the \u003Ccode class=\"literal\">StorageClass\u003C/code> object must have the \u003Ccode class=\"literal\">allowVolumeExpansion\u003C/code> field set to \u003Ccode class=\"literal\">true\u003C/code>.\n\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\tEdit the \u003Ccode class=\"literal\">StorageClass\u003C/code> object and add the \u003Ccode class=\"literal\">allowVolumeExpansion\u003C/code> attribute by running the following command:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc edit storageclass &lt;storage_class_name&gt; \u003Cspan id=\"CO58-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO58-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tSpecifies the name of the storage class.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003Cp class=\"simpara\">\n\t\t\t\t\t\tThe following example demonstrates adding this line at the bottom of the storage class configuration.\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: storage.k8s.io/v1\nkind: StorageClass\n...\nparameters:\n type: gp2\nreclaimPolicy: Delete\nallowVolumeExpansion: true \u003Cspan id=\"CO59-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO59-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tSetting this attribute to \u003Ccode class=\"literal\">true\u003C/code> allows PVCs to be expanded after creation.\n\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=\"expanding-csi-volumes_expanding-persistent-volumes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">6.2. Expanding CSI volumes\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tYou can use the Container Storage Interface (CSI) to expand storage volumes after they have already been created.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tOpenShift Container Platform supports CSI volume expansion by default. However, a specific CSI driver is required.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tOpenShift Container Platform 4.8 supports version 1.1.0 of the \u003Ca class=\"link\" href=\"https://github.com/container-storage-interface/spec\">CSI specification\u003C/a>.\n\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\tExpanding CSI volumes 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\u003C/p>\u003Cp>\n\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\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"expanding-flexvolume_expanding-persistent-volumes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">6.3. Expanding FlexVolume with a supported driver\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tWhen using FlexVolume to connect to your back-end storage system, you can expand persistent storage volumes after they have already been created. This is done by manually updating the persistent volume claim (PVC) in OpenShift Container Platform.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tFlexVolume allows expansion if the driver is set with \u003Ccode class=\"literal\">RequiresFSResize\u003C/code> to \u003Ccode class=\"literal\">true\u003C/code>. The FlexVolume can be expanded on pod restart.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tSimilar to other volume types, FlexVolume volumes can also be expanded when in use by a pod.\n\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\tThe underlying volume driver supports resize.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tThe driver is set with the \u003Ccode class=\"literal\">RequiresFSResize\u003C/code> capability to \u003Ccode class=\"literal\">true\u003C/code>.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tDynamic provisioning is used.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tThe controlling \u003Ccode class=\"literal\">StorageClass\u003C/code> object has \u003Ccode class=\"literal\">allowVolumeExpansion\u003C/code> set to \u003Ccode class=\"literal\">true\u003C/code>.\n\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\tTo use resizing in the FlexVolume plugin, you must implement the \u003Ccode class=\"literal\">ExpandableVolumePlugin\u003C/code> interface using these methods:\n\t\t\t\t\t\u003C/p>\u003Cdiv class=\"variablelist\">\u003Cdl class=\"variablelist\">\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">RequiresFSResize\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\tIf \u003Ccode class=\"literal\">true\u003C/code>, updates the capacity directly. If \u003Ccode class=\"literal\">false\u003C/code>, calls the \u003Ccode class=\"literal\">ExpandFS\u003C/code> method to finish the filesystem resize.\n\t\t\t\t\t\t\t\t\u003C/dd>\u003Cdt>\u003Cspan class=\"term\">\u003Ccode class=\"literal\">ExpandFS\u003C/code>\u003C/span>\u003C/dt>\u003Cdd>\n\t\t\t\t\t\t\t\t\tIf \u003Ccode class=\"literal\">true\u003C/code>, calls \u003Ccode class=\"literal\">ExpandFS\u003C/code> to resize filesystem after physical volume expansion is done. The volume driver can also perform physical volume resize together with filesystem resize.\n\t\t\t\t\t\t\t\t\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ul>\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\tBecause OpenShift Container Platform does not support installation of FlexVolume plugins on control plane nodes (also known as the master nodes), it does not support control-plane expansion of FlexVolume.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"expanding-pvc-filesystem_expanding-persistent-volumes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">6.4. Expanding persistent volume claims (PVCs) with a file system\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tExpanding PVCs based on volume types that need file system resizing, such as GCE PD, EBS, and Cinder, is a two-step process. This process involves expanding volume objects in the cloud provider, and then expanding the file system on the actual node.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tExpanding the file system on the node only happens when a new pod is started with the volume.\n\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\tThe controlling \u003Ccode class=\"literal\">StorageClass\u003C/code> object must have \u003Ccode class=\"literal\">allowVolumeExpansion\u003C/code> set to \u003Ccode class=\"literal\">true\u003C/code>.\n\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\tEdit the PVC and request a new size by editing \u003Ccode class=\"literal\">spec.resources.requests\u003C/code>. For example, the following expands the \u003Ccode class=\"literal\">ebs\u003C/code> PVC to 8 Gi.\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">kind: PersistentVolumeClaim\napiVersion: v1\nmetadata:\n name: ebs\nspec:\n storageClass: \"storageClassWithFlagSet\"\n accessModes:\n - ReadWriteOnce\n resources:\n requests:\n storage: 8Gi \u003Cspan id=\"CO60-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO60-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tUpdating \u003Ccode class=\"literal\">spec.resources.requests\u003C/code> to a larger amount will expand the PVC.\n\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\tAfter the cloud provider object has finished resizing, the PVC is set to \u003Ccode class=\"literal\">FileSystemResizePending\u003C/code>. Check the condition by entering the following command:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc describe pvc &lt;pvc_name&gt;\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tWhen the cloud provider object has finished resizing, the \u003Ccode class=\"literal\">PersistentVolume\u003C/code> object reflects the newly requested size in \u003Ccode class=\"literal\">PersistentVolume.Spec.Capacity\u003C/code>. At this point, you can create or recreate a new pod from the PVC to finish the file system resizing. Once the pod is running, the newly requested size is available and the \u003Ccode class=\"literal\">FileSystemResizePending\u003C/code> condition is removed from the PVC.\n\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"expanding-recovering-from-failure_expanding-persistent-volumes\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">6.5. Recovering from failure when expanding volumes\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tIf expanding underlying storage fails, the OpenShift Container Platform administrator can manually recover the persistent volume claim (PVC) state and cancel the resize requests. Otherwise, the resize requests are continuously retried by the controller without administrator intervention.\n\t\t\t\u003C/p>\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\tMark the persistent volume (PV) that is bound to the PVC with the \u003Ccode class=\"literal\">Retain\u003C/code> reclaim policy. This can be done by editing the PV and changing \u003Ccode class=\"literal\">persistentVolumeReclaimPolicy\u003C/code> to \u003Ccode class=\"literal\">Retain\u003C/code>.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tDelete the PVC. This will be recreated later.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tTo ensure that the newly created PVC can bind to the PV marked \u003Ccode class=\"literal\">Retain\u003C/code>, manually edit the PV and delete the \u003Ccode class=\"literal\">claimRef\u003C/code> entry from the PV specs. This marks the PV as \u003Ccode class=\"literal\">Available\u003C/code>.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tRe-create the PVC in a smaller size, or a size that can be allocated by the underlying storage provider.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tSet the \u003Ccode class=\"literal\">volumeName\u003C/code> field of the PVC to the name of the PV. This binds the PVC to the provisioned PV only.\n\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\tRestore the reclaim policy on the PV.\n\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"chapter\" id=\"dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch2 class=\"title\">Chapter 7. Dynamic provisioning\u003C/h2>\u003C/div>\u003C/div>\u003C/div>\u003Csection class=\"section\" id=\"about_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">7.1. About dynamic provisioning\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tThe \u003Ccode class=\"literal\">StorageClass\u003C/code> resource object describes and classifies storage that can be requested, as well as provides a means for passing parameters for dynamically provisioned storage on demand. \u003Ccode class=\"literal\">StorageClass\u003C/code> objects can also serve as a management mechanism for controlling different levels of storage and access to the storage. Cluster Administrators (\u003Ccode class=\"literal\">cluster-admin\u003C/code>) or Storage Administrators (\u003Ccode class=\"literal\">storage-admin\u003C/code>) define and create the \u003Ccode class=\"literal\">StorageClass\u003C/code> objects that users can request without needing any detailed knowledge about the underlying storage volume sources.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tThe OpenShift Container Platform persistent volume framework enables this functionality and allows administrators to provision a cluster with persistent storage. The framework also gives users a way to request those resources without having any knowledge of the underlying infrastructure.\n\t\t\t\u003C/p>\u003Cp>\n\t\t\t\tMany storage types are available for use as persistent volumes in OpenShift Container Platform. While all of them can be statically provisioned by an administrator, some types of storage are created dynamically using the built-in provider and plugin APIs.\n\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"available-plug-ins_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">7.2. Available dynamic provisioning plugins\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tOpenShift Container Platform provides the following provisioner plugins, which have generic implementations for dynamic provisioning that use the cluster’s configured provider’s API to create new storage resources:\n\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=\"idm140708979909888\" scope=\"col\">Storage type\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708979908800\" scope=\"col\">Provisioner plugin name\u003C/th>\u003Cth align=\"left\" valign=\"top\" id=\"idm140708979907712\" scope=\"col\">Notes\u003C/th>\u003C/tr>\u003C/thead>\u003Ctbody>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979909888\"> \u003Cp>\n\t\t\t\t\t\t\t\tRed Hat OpenStack Platform (RHOSP) Cinder\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979908800\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kubernetes.io/cinder\u003C/code>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979907712\"> \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979909888\"> \u003Cp>\n\t\t\t\t\t\t\t\tRHOSP Manila Container Storage Interface (CSI)\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979908800\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">manila.csi.openstack.org\u003C/code>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979907712\"> \u003Cp>\n\t\t\t\t\t\t\t\tOnce installed, the OpenStack Manila CSI Driver Operator and ManilaDriver automatically create the required storage classes for all available Manila share types needed for dynamic provisioning.\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979909888\"> \u003Cp>\n\t\t\t\t\t\t\t\tAWS Elastic Block Store (EBS)\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979908800\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kubernetes.io/aws-ebs\u003C/code>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979907712\"> \u003Cp>\n\t\t\t\t\t\t\t\tFor dynamic provisioning when using multiple clusters in different zones, tag each node with \u003Ccode class=\"literal\">Key=kubernetes.io/cluster/&lt;cluster_name&gt;,Value=&lt;cluster_id&gt;\u003C/code> where \u003Ccode class=\"literal\">&lt;cluster_name&gt;\u003C/code> and \u003Ccode class=\"literal\">&lt;cluster_id&gt;\u003C/code> are unique per cluster.\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979909888\"> \u003Cp>\n\t\t\t\t\t\t\t\tAzure Disk\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979908800\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kubernetes.io/azure-disk\u003C/code>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979907712\"> \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979909888\"> \u003Cp>\n\t\t\t\t\t\t\t\tAzure File\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979908800\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kubernetes.io/azure-file\u003C/code>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979907712\"> \u003Cp>\n\t\t\t\t\t\t\t\tThe \u003Ccode class=\"literal\">persistent-volume-binder\u003C/code> service account requires permissions to create and get secrets to store the Azure storage account and keys.\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979909888\"> \u003Cp>\n\t\t\t\t\t\t\t\tGCE Persistent Disk (gcePD)\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979908800\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kubernetes.io/gce-pd\u003C/code>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979907712\"> \u003Cp>\n\t\t\t\t\t\t\t\tIn multi-zone configurations, it is advisable to run one OpenShift Container Platform cluster per GCE project to avoid PVs from being created in zones where no node in the current cluster exists.\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003C/tr>\u003Ctr>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979909888\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ca class=\"link\" href=\"https://www.vmware.com/support/vsphere.html\">VMware vSphere\u003C/a>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979908800\"> \u003Cp>\n\t\t\t\t\t\t\t\t\u003Ccode class=\"literal\">kubernetes.io/vsphere-volume\u003C/code>\n\t\t\t\t\t\t\t\u003C/p>\n\t\t\t\t\t\t\t \u003C/td>\u003Ctd align=\"left\" valign=\"top\" headers=\"idm140708979907712\"> \u003C/td>\u003C/tr>\u003C/tbody>\u003C/table>\u003C/rh-table>\u003Crh-alert class=\"admonition important\" state=\"warning\">\u003Cdiv class=\"admonition_header\" slot=\"header\">Important\u003C/div>\u003Cdiv>\u003Cp>\n\t\t\t\t\tAny chosen provisioner plugin also requires configuration for the relevant cloud, host, or third-party provider as per the relevant documentation.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/section>\u003Csection class=\"section\" id=\"defining-storage-classes_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">7.3. Defining a storage class\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\u003Ccode class=\"literal\">StorageClass\u003C/code> objects are currently a globally scoped object and must be created by \u003Ccode class=\"literal\">cluster-admin\u003C/code> or \u003Ccode class=\"literal\">storage-admin\u003C/code> users.\n\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\tThe Cluster Storage Operator might install a default storage class depending on the platform in use. This storage class is owned and controlled by the operator. It cannot be deleted or modified beyond defining annotations and labels. If different behavior is desired, you must define a custom storage class.\n\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\tThe following sections describe the basic definition for a \u003Ccode class=\"literal\">StorageClass\u003C/code> object and specific examples for each of the supported plugin types.\n\t\t\t\u003C/p>\u003Csection class=\"section\" id=\"basic-storage-class-definition_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.1. Basic StorageClass object definition\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe following resource shows the parameters and default values that you use to configure a storage class. This example uses the AWS ElasticBlockStore (EBS) object definition.\n\t\t\t\t\u003C/p>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Sample \u003Ccode class=\"literal\">StorageClass\u003C/code> definition\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">kind: StorageClass \u003Cspan id=\"CO61-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\napiVersion: storage.k8s.io/v1 \u003Cspan id=\"CO61-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\nmetadata:\n name: gp2 \u003Cspan id=\"CO61-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n annotations: \u003Cspan id=\"CO61-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n storageclass.kubernetes.io/is-default-class: 'true'\n ...\nprovisioner: kubernetes.io/aws-ebs \u003Cspan id=\"CO61-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\nparameters: \u003Cspan id=\"CO61-6\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">6\u003C/span>\n type: gp2\n...\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO61-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(required) The API object type.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO61-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(required) The current apiVersion.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO61-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(required) The name of the storage class.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO61-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(optional) Annotations for the storage class.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO61-5\">\u003Cspan class=\"callout\">5\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(required) The type of provisioner associated with this storage class.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO61-6\">\u003Cspan class=\"callout\">6\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(optional) The parameters required for the specific provisioner, this will change from plugin to plugin.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"storage-class-annotations_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.2. Storage class annotations\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tTo set a storage class as the cluster-wide default, add the following annotation to your storage class metadata:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">storageclass.kubernetes.io/is-default-class: \"true\"\u003C/pre>\u003Cp>\n\t\t\t\t\tFor example:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n annotations:\n storageclass.kubernetes.io/is-default-class: \"true\"\n...\u003C/pre>\u003Cp>\n\t\t\t\t\tThis enables any persistent volume claim (PVC) that does not specify a specific storage class to automatically be provisioned through the default storage class. However, your cluster can have more than one storage class, but only one of them can be the default storage class.\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\tThe beta annotation \u003Ccode class=\"literal\">storageclass.beta.kubernetes.io/is-default-class\u003C/code> is still working; however, it will be removed in a future release.\n\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003Cp>\n\t\t\t\t\tTo set a storage class description, add the following annotation to your storage class metadata:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">kubernetes.io/description: My Storage Class Description\u003C/pre>\u003Cp>\n\t\t\t\t\tFor example:\n\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n annotations:\n kubernetes.io/description: My Storage Class Description\n...\u003C/pre>\u003C/section>\u003Csection class=\"section\" id=\"openstack-cinder-storage-class_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.3. RHOSP Cinder object definition\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>cinder-storageclass.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">kind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n name: gold\nprovisioner: kubernetes.io/cinder\nparameters:\n type: fast \u003Cspan id=\"CO62-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n availability: nova \u003Cspan id=\"CO62-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n fsType: ext4 \u003Cspan id=\"CO62-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO62-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tVolume type created in Cinder. Default is empty.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO62-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tAvailability Zone. If not specified, volumes are generally round-robined across all active zones where the OpenShift Container Platform cluster has a node.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO62-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tFile system that is created on dynamically provisioned volumes. This value is copied to the \u003Ccode class=\"literal\">fsType\u003C/code> field of dynamically provisioned persistent volumes and the file system is created when the volume is mounted for the first time. The default value is \u003Ccode class=\"literal\">ext4\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"openstack-manila-csi-definition_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.4. RHOSP Manila Container Storage Interface (CSI) object definition\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tOnce installed, the OpenStack Manila CSI Driver Operator and ManilaDriver automatically create the required storage classes for all available Manila share types needed for dynamic provisioning.\n\t\t\t\t\u003C/p>\u003C/section>\u003Csection class=\"section\" id=\"aws-definition_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.5. AWS Elastic Block Store (EBS) object definition\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>aws-ebs-storageclass.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">kind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n name: slow\nprovisioner: kubernetes.io/aws-ebs\nparameters:\n type: io1 \u003Cspan id=\"CO63-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n iopsPerGB: \"10\" \u003Cspan id=\"CO63-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n encrypted: \"true\" \u003Cspan id=\"CO63-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n kmsKeyId: keyvalue \u003Cspan id=\"CO63-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\n fsType: ext4 \u003Cspan id=\"CO63-5\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">5\u003C/span>\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO63-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(required) Select from \u003Ccode class=\"literal\">io1\u003C/code>, \u003Ccode class=\"literal\">gp2\u003C/code>, \u003Ccode class=\"literal\">sc1\u003C/code>, \u003Ccode class=\"literal\">st1\u003C/code>. The default is \u003Ccode class=\"literal\">gp2\u003C/code>. See the \u003Ca class=\"link\" href=\"http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">AWS documentation\u003C/a> for valid Amazon Resource Name (ARN) values.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO63-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(optional) Only for \u003Cspan class=\"strong strong\">\u003Cstrong>io1\u003C/strong>\u003C/span> volumes. I/O operations per second per GiB. The AWS volume plugin multiplies this with the size of the requested volume to compute IOPS of the volume. The value cap is 20,000 IOPS, which is the maximum supported by AWS. See the \u003Ca class=\"link\" href=\"http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">AWS documentation\u003C/a> for further details.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO63-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(optional) Denotes whether to encrypt the EBS volume. Valid values are \u003Ccode class=\"literal\">true\u003C/code> or \u003Ccode class=\"literal\">false\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO63-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(optional) The full ARN of the key to use when encrypting the volume. If none is supplied, but \u003Ccode class=\"literal\">encypted\u003C/code> is set to \u003Ccode class=\"literal\">true\u003C/code>, then AWS generates a key. See the \u003Ca class=\"link\" href=\"http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html\">AWS documentation\u003C/a> for a valid ARN value.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO63-5\">\u003Cspan class=\"callout\">5\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t(optional) File system that is created on dynamically provisioned volumes. This value is copied to the \u003Ccode class=\"literal\">fsType\u003C/code> field of dynamically provisioned persistent volumes and the file system is created when the volume is mounted for the first time. The default value is \u003Ccode class=\"literal\">ext4\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"azure-disk-definition_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.6. Azure Disk object definition\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>azure-advanced-disk-storageclass.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n name: managed-premium\nprovisioner: kubernetes.io/azure-disk\nvolumeBindingMode: WaitForFirstConsumer \u003Cspan id=\"CO64-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nallowVolumeExpansion: true\nparameters:\n kind: Managed \u003Cspan id=\"CO64-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n storageaccounttype: Premium_LRS \u003Cspan id=\"CO64-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\nreclaimPolicy: Delete\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO64-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tUsing \u003Ccode class=\"literal\">WaitForFirstConsumer\u003C/code> is strongly recommended. This provisions the volume while allowing enough storage to schedule the pod on a free worker node from an available zone.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO64-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tPossible values are \u003Ccode class=\"literal\">Shared\u003C/code> (default), \u003Ccode class=\"literal\">Managed\u003C/code>, and \u003Ccode class=\"literal\">Dedicated\u003C/code>.\n\t\t\t\t\t\t\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\tRed Hat only supports the use of \u003Ccode class=\"literal\">kind: Managed\u003C/code> in the storage class.\n\t\t\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\tWith \u003Ccode class=\"literal\">Shared\u003C/code> and \u003Ccode class=\"literal\">Dedicated\u003C/code>, Azure creates unmanaged disks, while OpenShift Container Platform creates a managed disk for machine OS (root) disks. But because Azure Disk does not allow the use of both managed and unmanaged disks on a node, unmanaged disks created with \u003Ccode class=\"literal\">Shared\u003C/code> or \u003Ccode class=\"literal\">Dedicated\u003C/code> cannot be attached to OpenShift Container Platform nodes.\n\t\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/rh-alert>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO64-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tAzure storage account SKU tier. Default is empty. Note that Premium VMs can attach both \u003Ccode class=\"literal\">Standard_LRS\u003C/code> and \u003Ccode class=\"literal\">Premium_LRS\u003C/code> disks, Standard VMs can only attach \u003Ccode class=\"literal\">Standard_LRS\u003C/code> disks, Managed VMs can only attach managed disks, and unmanaged VMs can only attach unmanaged disks.\n\t\t\t\t\t\t\u003C/div>\u003Cdiv class=\"orderedlist\">\u003Col class=\"orderedlist\" type=\"a\">\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tIf \u003Ccode class=\"literal\">kind\u003C/code> is set to \u003Ccode class=\"literal\">Shared\u003C/code>, Azure creates all unmanaged disks in a few shared storage accounts in the same resource group as 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\tIf \u003Ccode class=\"literal\">kind\u003C/code> is set to \u003Ccode class=\"literal\">Managed\u003C/code>, Azure creates new managed disks.\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\tIf \u003Ccode class=\"literal\">kind\u003C/code> is set to \u003Ccode class=\"literal\">Dedicated\u003C/code> and a \u003Ccode class=\"literal\">storageAccount\u003C/code> is specified, Azure uses the specified storage account for the new unmanaged disk in the same resource group as the cluster. For this to work:\n\t\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\t\tThe specified storage account must be in the same region.\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\tAzure Cloud Provider must have write access to the storage account.\n\t\t\t\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\t\tIf \u003Ccode class=\"literal\">kind\u003C/code> is set to \u003Ccode class=\"literal\">Dedicated\u003C/code> and a \u003Ccode class=\"literal\">storageAccount\u003C/code> is not specified, Azure creates a new dedicated storage account for the new unmanaged disk in the same resource group as the cluster.\n\t\t\t\t\t\t\t\t\u003C/li>\u003C/ol>\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"azure-file-definition_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.7. Azure File object definition\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\tThe Azure File storage class uses secrets to store the Azure storage account name and the storage account key that are required to create an Azure Files share. These permissions are created as part of the following procedure.\n\t\t\t\t\u003C/p>\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\tDefine a \u003Ccode class=\"literal\">ClusterRole\u003C/code> object that allows access to create and view secrets:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n# name: system:azure-cloud-provider\n name: &lt;persistent-volume-binder-role&gt; \u003Cspan id=\"CO65-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nrules:\n- apiGroups: ['']\n resources: ['secrets']\n verbs: ['get','create']\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO65-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 name of the cluster role to view and create secrets.\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\tAdd the cluster role to the service account:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc adm policy add-cluster-role-to-user &lt;persistent-volume-binder-role&gt;\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\"> system:serviceaccount:kube-system:persistent-volume-binder\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\tCreate the Azure File \u003Ccode class=\"literal\">StorageClass\u003C/code> object:\n\t\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">kind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n name: &lt;azure-file&gt; \u003Cspan id=\"CO66-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nprovisioner: kubernetes.io/azure-file\nparameters:\n location: eastus \u003Cspan id=\"CO66-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n skuName: Standard_LRS \u003Cspan id=\"CO66-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\n storageAccount: &lt;storage-account&gt; \u003Cspan id=\"CO66-4\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">4\u003C/span>\nreclaimPolicy: Delete\nvolumeBindingMode: Immediate\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO66-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tName of the storage class. The persistent volume claim uses this storage class for provisioning the associated persistent volumes.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO66-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tLocation of the Azure storage account, such as \u003Ccode class=\"literal\">eastus\u003C/code>. Default is empty, meaning that a new Azure storage account will be created in the OpenShift Container Platform cluster’s location.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO66-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tSKU tier of the Azure storage account, such as \u003Ccode class=\"literal\">Standard_LRS\u003C/code>. Default is empty, meaning that a new Azure storage account will be created with the \u003Ccode class=\"literal\">Standard_LRS\u003C/code> SKU.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO66-4\">\u003Cspan class=\"callout\">4\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\t\tName of the Azure storage account. If a storage account is provided, then \u003Ccode class=\"literal\">skuName\u003C/code> and \u003Ccode class=\"literal\">location\u003C/code> are ignored. If no storage account is provided, then the storage class searches for any storage account that is associated with the resource group for any accounts that match the defined \u003Ccode class=\"literal\">skuName\u003C/code> and \u003Ccode class=\"literal\">location\u003C/code>.\n\t\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003Csection class=\"section\" id=\"azure-file-considerations_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch5 class=\"title\">7.3.7.1. Considerations when using Azure File\u003C/h5>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\t\t\tThe following file system features are not supported by the default Azure File storage class:\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\tSymlinks\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tHard links\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tExtended attributes\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tSparse files\n\t\t\t\t\t\t\t\u003C/li>\u003Cli class=\"listitem\">\n\t\t\t\t\t\t\t\tNamed pipes\n\t\t\t\t\t\t\t\u003C/li>\u003C/ul>\u003C/div>\u003Cp>\n\t\t\t\t\t\tAdditionally, the owner user identifier (UID) of the Azure File mounted directory is different from the process UID of the container. The \u003Ccode class=\"literal\">uid\u003C/code> mount option can be specified in the \u003Ccode class=\"literal\">StorageClass\u003C/code> object to define a specific user identifier to use for the mounted directory.\n\t\t\t\t\t\u003C/p>\u003Cp>\n\t\t\t\t\t\tThe following \u003Ccode class=\"literal\">StorageClass\u003C/code> object demonstrates modifying the user and group identifier, along with enabling symlinks for the mounted directory.\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-yaml\">kind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n name: azure-file\nmountOptions:\n - uid=1500 \u003Cspan id=\"CO67-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n - gid=1500 \u003Cspan id=\"CO67-2\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">2\u003C/span>\n - mfsymlinks \u003Cspan id=\"CO67-3\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">3\u003C/span>\nprovisioner: kubernetes.io/azure-file\nparameters:\n location: eastus\n skuName: Standard_LRS\nreclaimPolicy: Delete\nvolumeBindingMode: Immediate\u003C/pre>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO67-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tSpecifies the user identifier to use for the mounted directory.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO67-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tSpecifies the group identifier to use for the mounted directory.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO67-3\">\u003Cspan class=\"callout\">3\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\tEnables symlinks.\n\t\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"gce-persistentdisk-storage-class_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.8. GCE PersistentDisk (gcePD) object definition\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>gce-pd-storageclass.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">apiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n name: standard\nprovisioner: kubernetes.io/gce-pd\nparameters:\n type: pd-standard \u003Cspan id=\"CO68-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\n replication-type: none\nvolumeBindingMode: WaitForFirstConsumer\nallowVolumeExpansion: true\nreclaimPolicy: Delete\u003C/pre>\n\n\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO68-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tSelect either \u003Ccode class=\"literal\">pd-standard\u003C/code> or \u003Ccode class=\"literal\">pd-ssd\u003C/code>. The default is \u003Ccode class=\"literal\">pd-standard\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003Csection class=\"section\" id=\"vsphere-definition_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch4 class=\"title\">7.3.9. VMware vSphere object definition\u003C/h4>\u003C/div>\u003C/div>\u003C/div>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>vsphere-storageclass.yaml\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-yaml\">kind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n name: slow\nprovisioner: kubernetes.io/vsphere-volume \u003Cspan id=\"CO69-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nparameters:\n diskformat: thin \u003Cspan id=\"CO69-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=\"#CO69-1\">\u003Cspan class=\"callout\">1\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\tFor more information about using VMware vSphere with OpenShift Container Platform, see the \u003Ca class=\"link\" href=\"https://vmware.github.io/vsphere-storage-for-kubernetes/documentation/index.html\">VMware vSphere documentation\u003C/a>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003Cdt>\u003Ca href=\"#CO69-2\">\u003Cspan class=\"callout\">2\u003C/span>\u003C/a> \u003C/dt>\u003Cdd>\u003Cdiv class=\"para\">\n\t\t\t\t\t\t\t\u003Ccode class=\"literal\">diskformat\u003C/code>: \u003Ccode class=\"literal\">thin\u003C/code>, \u003Ccode class=\"literal\">zeroedthick\u003C/code> and \u003Ccode class=\"literal\">eagerzeroedthick\u003C/code> are all valid disk formats. See vSphere docs for additional details regarding the disk format types. The default value is \u003Ccode class=\"literal\">thin\u003C/code>.\n\t\t\t\t\t\t\u003C/div>\u003C/dd>\u003C/dl>\u003C/div>\u003C/section>\u003C/section>\u003Csection class=\"section\" id=\"change-default-storage-class_dynamic-provisioning\">\u003Cdiv class=\"titlepage\">\u003Cdiv>\u003Cdiv>\u003Ch3 class=\"title\">7.4. Changing the default storage class\u003C/h3>\u003C/div>\u003C/div>\u003C/div>\u003Cp>\n\t\t\t\tUse the following process to change the default storage class. For example you have two defined storage classes, \u003Ccode class=\"literal\">gp2\u003C/code> and \u003Ccode class=\"literal\">standard\u003C/code>, and you want to change the default storage class from \u003Ccode class=\"literal\">gp2\u003C/code> to \u003Ccode class=\"literal\">standard\u003C/code>.\n\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\tList the storage class:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get storageclass\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME TYPE\ngp2 (default) kubernetes.io/aws-ebs \u003Cspan id=\"CO70-1\">\u003C!--Empty-->\u003C/span>\u003Cspan class=\"callout\">1\u003C/span>\nstandard kubernetes.io/aws-ebs\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003Cdiv class=\"calloutlist\">\u003Cdl class=\"calloutlist\">\u003Cdt>\u003Ca href=\"#CO70-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\">(default)\u003C/code> denotes the default storage class.\n\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\tChange the value of the \u003Ccode class=\"literal\">storageclass.kubernetes.io/is-default-class\u003C/code> annotation to \u003Ccode class=\"literal\">false\u003C/code> for the default storage class:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc patch storageclass gp2 -p '{\"metadata\": {\"annotations\": {\"storageclass.kubernetes.io/is-default-class\": \"false\"}}}'\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\tMake another storage class the default by setting the \u003Ccode class=\"literal\">storageclass.kubernetes.io/is-default-class\u003C/code> annotation to \u003Ccode class=\"literal\">true\u003C/code>:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc patch storageclass standard -p '{\"metadata\": {\"annotations\": {\"storageclass.kubernetes.io/is-default-class\": \"true\"}}}'\u003C/pre>\u003C/li>\u003Cli class=\"listitem\">\u003Cp class=\"simpara\">\n\t\t\t\t\t\tVerify the changes:\n\t\t\t\t\t\u003C/p>\u003Cpre class=\"programlisting language-terminal\">$ oc get storageclass\u003C/pre>\u003Cdiv class=\"formalpara\">\u003Cp class=\"title\">\u003Cstrong>Example output\u003C/strong>\u003C/p>\u003Cp>\n\t\t\t\t\t\t\t\n\u003Cpre class=\"programlisting language-terminal\">NAME TYPE\ngp2 kubernetes.io/aws-ebs\nstandard (default) kubernetes.io/aws-ebs\u003C/pre>\n\n\t\t\t\t\t\t\u003C/p>\u003C/div>\u003C/li>\u003C/ol>\u003C/div>\u003C/section>\u003C/section>\u003Cdiv>\u003Cdiv xml:lang=\"en-US\" class=\"legalnotice\" id=\"idm140708991936208\">\u003Ch2 class=\"legalnotice\">\n \u003Ca id=#idm140708991936208 class=\"anchor-heading\">Legal Notice\u003C/a>\n \u003Cpf-tooltip position=\"top\">\n \u003Cbutton class=\"copy-link-btn\" aria-label=\"Copy link to clipboard\">\n \u003Cpf-icon class=\"link-icon\" set=\"fas\" icon=\"link\" size=\"sm\">\u003C/pf-icon>\n \u003C/button>\n \u003C/pf-tooltip>\n \u003C/h2> \u003Cbody>\n\u003Cdiv class=\"col-xs-12 col-sm-9 col-md-9 main\">\n \u003Cdiv class=\"paragraph lead\">\n\u003Cp>Copyright © 2024 Red Hat, Inc.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>OpenShift documentation is licensed under the Apache License 2.0 (\u003Ca href=\"https://www.apache.org/licenses/LICENSE-2.0\" class=\"bare\">https://www.apache.org/licenses/LICENSE-2.0\u003C/a>).\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>Modified versions must remove all Red Hat trademarks.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>Portions adapted from \u003Ca href=\"https://github.com/kubernetes-incubator/service-catalog/\" class=\"bare\">https://github.com/kubernetes-incubator/service-catalog/\u003C/a> with modifications by Red Hat.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>Linux® is the registered trademark of Linus Torvalds in the United States and other countries.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>Java® is a registered trademark of Oracle and/or its affiliates.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.\u003C/p>\n\u003C/div>\n\u003Cdiv class=\"paragraph\">\n\u003Cp>All other trademarks are the property of their respective owners.\u003C/p>\n\u003C/div>\n\u003C/div>\n\u003C/body>\u003C/div>\u003C/div>\u003C/div>\u003C/body>",[8,921,3451,3576,5075,5509,6065,6537,8282,9228,11223],{"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,"docTitle":18,"url":19,"sections":20},"About",1,"index",null,[],"about","/documentation/openshift_container_platform/4.8/html-single/about/index",[21,33,44,66],{"title":22,"visible":10,"weight":23,"urlFragment":24,"anchor":16,"singlePageAnchor":24,"subChapters":25,"docTitle":18,"url":32},"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-single/about/index#welcome-index",{"title":34,"visible":10,"weight":35,"urlFragment":36,"anchor":16,"singlePageAnchor":36,"subChapters":37,"docTitle":18,"url":43},"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-single/about/index#learn_more_about_openshift",{"title":45,"visible":10,"weight":46,"urlFragment":47,"anchor":16,"singlePageAnchor":47,"subChapters":48,"docTitle":18,"url":65},"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-single/about/index#oke-about",{"title":67,"visible":10,"weight":68,"urlFragment":69,"anchor":16,"singlePageAnchor":69,"subChapters":70,"docTitle":18,"url":74},"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-single/about/index#kubernetes-overview",{"title":76,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":77,"docTitle":78,"url":79,"sections":80},"Release notes",[],"release_notes","/documentation/openshift_container_platform/4.8/html-single/release_notes/index",[81],{"title":82,"visible":10,"weight":23,"urlFragment":83,"anchor":16,"singlePageAnchor":83,"subChapters":84,"docTitle":78,"url":375},"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-single/release_notes/index#ocp-4-8-release-notes",{"title":377,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":378,"docTitle":379,"url":380,"sections":381},"Architecture",[],"architecture","/documentation/openshift_container_platform/4.8/html-single/architecture/index",[382,393,408,419,433,451,466],{"title":383,"visible":10,"weight":23,"urlFragment":384,"anchor":16,"singlePageAnchor":384,"subChapters":385,"docTitle":379,"url":392},"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-single/architecture/index#architecture-overview",{"title":394,"visible":10,"weight":35,"urlFragment":379,"anchor":16,"singlePageAnchor":379,"subChapters":395,"docTitle":379,"url":407},"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-single/architecture/index#architecture",{"title":409,"visible":10,"weight":46,"urlFragment":410,"anchor":16,"singlePageAnchor":410,"subChapters":411,"docTitle":379,"url":418},"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-single/architecture/index#architecture-installation",{"title":420,"visible":10,"weight":68,"urlFragment":421,"anchor":16,"singlePageAnchor":421,"subChapters":422,"docTitle":379,"url":432},"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-single/architecture/index#control-plane",{"title":434,"visible":10,"weight":435,"urlFragment":436,"anchor":16,"singlePageAnchor":436,"subChapters":437,"docTitle":379,"url":450},"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-single/architecture/index#understanding-development",{"title":452,"visible":10,"weight":453,"urlFragment":454,"anchor":16,"singlePageAnchor":454,"subChapters":455,"docTitle":379,"url":465},"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-single/architecture/index#architecture-rhcos",{"title":467,"visible":10,"weight":468,"urlFragment":469,"anchor":16,"singlePageAnchor":469,"subChapters":470,"docTitle":379,"url":479},"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-single/architecture/index#admission-plug-ins",{"title":481,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":482,"docTitle":483,"url":484,"sections":485},"Security and compliance",[],"security_and_compliance","/documentation/openshift_container_platform/4.8/html-single/security_and_compliance/index",[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,"docTitle":483,"url":493},"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-single/security_and_compliance/index#security-compliance-overview",{"title":495,"visible":10,"weight":35,"urlFragment":496,"anchor":16,"singlePageAnchor":496,"subChapters":497,"docTitle":483,"url":578},"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-single/security_and_compliance/index#container-security-1",{"title":580,"visible":10,"weight":46,"urlFragment":581,"anchor":16,"singlePageAnchor":581,"subChapters":582,"docTitle":483,"url":601},"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-single/security_and_compliance/index#configuring-certificates",{"title":603,"visible":10,"weight":68,"urlFragment":604,"anchor":16,"singlePageAnchor":604,"subChapters":605,"docTitle":483,"url":672},"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-single/security_and_compliance/index#certificate-types-and-descriptions",{"title":674,"visible":10,"weight":435,"urlFragment":675,"anchor":16,"singlePageAnchor":675,"subChapters":676,"docTitle":483,"url":802},"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-single/security_and_compliance/index#compliance-operator",{"title":804,"visible":10,"weight":453,"urlFragment":805,"anchor":16,"singlePageAnchor":805,"subChapters":806,"docTitle":483,"url":856},"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-single/security_and_compliance/index#file-integrity-operator",{"title":858,"visible":10,"weight":468,"urlFragment":859,"anchor":16,"singlePageAnchor":859,"subChapters":860,"docTitle":483,"url":866},"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-single/security_and_compliance/index#audit-log-view",{"title":868,"visible":10,"weight":869,"urlFragment":870,"anchor":16,"singlePageAnchor":870,"subChapters":871,"docTitle":483,"url":874},"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-single/security_and_compliance/index#audit-log-policy-config",{"title":876,"visible":10,"weight":877,"urlFragment":878,"anchor":16,"singlePageAnchor":878,"subChapters":879,"docTitle":483,"url":885},"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-single/security_and_compliance/index#tls-security-profiles",{"title":887,"visible":10,"weight":888,"urlFragment":889,"anchor":16,"singlePageAnchor":889,"subChapters":890,"docTitle":483,"url":896},"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-single/security_and_compliance/index#seccomp-profiles",{"title":898,"visible":10,"weight":899,"urlFragment":900,"anchor":16,"singlePageAnchor":900,"subChapters":901,"docTitle":483,"url":903},"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-single/security_and_compliance/index#allowing-javascript-based-access-api-server",{"title":905,"visible":10,"weight":906,"urlFragment":907,"anchor":16,"singlePageAnchor":907,"subChapters":908,"docTitle":483,"url":912},"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-single/security_and_compliance/index#encrypting-etcd",{"title":914,"visible":10,"weight":915,"urlFragment":916,"anchor":16,"singlePageAnchor":916,"subChapters":917,"docTitle":483,"url":920},"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-single/security_and_compliance/index#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,"docTitle":927,"url":928,"sections":929},"Installing",[],"installing","/documentation/openshift_container_platform/4.8/html-single/installing/index",[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,"docTitle":927,"url":938},"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-single/installing/index#ocp-installation-overview",{"title":940,"visible":10,"weight":35,"urlFragment":941,"anchor":16,"singlePageAnchor":941,"subChapters":942,"docTitle":927,"url":951},"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-single/installing/index#installing-preparing",{"title":953,"visible":10,"weight":46,"urlFragment":954,"anchor":16,"singlePageAnchor":954,"subChapters":955,"docTitle":927,"url":973},"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-single/installing/index#installing-mirroring-installation-images",{"title":975,"visible":10,"weight":68,"urlFragment":976,"anchor":16,"singlePageAnchor":976,"subChapters":977,"docTitle":927,"url":1272},"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-single/installing/index#installing-on-aws",{"title":1274,"visible":10,"weight":435,"urlFragment":1275,"anchor":16,"singlePageAnchor":1275,"subChapters":1276,"docTitle":927,"url":1476},"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-single/installing/index#installing-on-azure",{"title":1478,"visible":10,"weight":453,"urlFragment":1479,"anchor":16,"singlePageAnchor":1479,"subChapters":1480,"docTitle":927,"url":1793},"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-single/installing/index#installing-on-gcp",{"title":1795,"visible":10,"weight":468,"urlFragment":1796,"anchor":16,"singlePageAnchor":1796,"subChapters":1797,"docTitle":927,"url":1974},"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-single/installing/index#installing-on-bare-metal",{"title":1976,"visible":10,"weight":869,"urlFragment":1977,"anchor":16,"singlePageAnchor":1977,"subChapters":1978,"docTitle":927,"url":2058},"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-single/installing/index#deploying-installer-provisioned-clusters-on-bare-metal",{"title":2060,"visible":10,"weight":877,"urlFragment":2061,"anchor":16,"singlePageAnchor":2061,"subChapters":2062,"docTitle":927,"url":2158},"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-single/installing/index#installing-with-z-vm-on-ibm-z-and-linuxone",{"title":2160,"visible":10,"weight":888,"urlFragment":2161,"anchor":16,"singlePageAnchor":2161,"subChapters":2162,"docTitle":927,"url":2266},"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-single/installing/index#installing-with-rhel-kvm-on-ibm-z-and-linuxone",{"title":2268,"visible":10,"weight":899,"urlFragment":2269,"anchor":16,"singlePageAnchor":2269,"subChapters":2270,"docTitle":927,"url":2372},"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-single/installing/index#installing-on-ibm-power-systems",{"title":2374,"visible":10,"weight":906,"urlFragment":2375,"anchor":16,"singlePageAnchor":2375,"subChapters":2376,"docTitle":927,"url":2675},"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-single/installing/index#installing-on-openstack",{"title":2677,"visible":10,"weight":915,"urlFragment":2678,"anchor":16,"singlePageAnchor":2678,"subChapters":2679,"docTitle":927,"url":2796},"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-single/installing/index#installing-on-rhv",{"title":2798,"visible":10,"weight":2799,"urlFragment":2800,"anchor":16,"singlePageAnchor":2800,"subChapters":2801,"docTitle":927,"url":3061},"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-single/installing/index#installing-on-vsphere",{"title":3063,"visible":10,"weight":3064,"urlFragment":3065,"anchor":16,"singlePageAnchor":3065,"subChapters":3066,"docTitle":927,"url":3329},"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-single/installing/index#installing-on-vmc",{"title":3331,"visible":10,"weight":3332,"urlFragment":3333,"anchor":16,"singlePageAnchor":3333,"subChapters":3334,"docTitle":927,"url":3385},"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-single/installing/index#installing-on-any-platform",{"title":3387,"visible":10,"weight":3388,"urlFragment":3389,"anchor":16,"singlePageAnchor":3389,"subChapters":3390,"docTitle":927,"url":3411},"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-single/installing/index#installation-configuration",{"title":3413,"visible":10,"weight":3414,"urlFragment":3415,"anchor":16,"singlePageAnchor":3415,"subChapters":3416,"docTitle":927,"url":3426},"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-single/installing/index#validating-an-installation",{"title":3428,"visible":10,"weight":3429,"urlFragment":3430,"anchor":16,"singlePageAnchor":3430,"subChapters":3431,"docTitle":927,"url":3438},"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-single/installing/index#installing-troubleshooting",{"title":3440,"visible":10,"weight":3441,"urlFragment":3442,"anchor":16,"singlePageAnchor":3442,"subChapters":3443,"docTitle":927,"url":3450},"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-single/installing/index#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,"docTitle":3457,"url":3458,"sections":3459},"Updating clusters",[],"updating_clusters","/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index",[3460,3466,3480,3494,3500,3508,3515,3528,3539],{"title":3461,"visible":10,"weight":23,"urlFragment":3462,"anchor":16,"singlePageAnchor":3462,"subChapters":3463,"docTitle":3457,"url":3465},"Understanding OpenShift Container Platform updates","understanding-openshift-updates",[3464],"update-common-terms_understanding-openshift-updates","/documentation/openshift_container_platform/4.8/html-single/updating_clusters/index#understanding-openshift-updates",{"title":3467,"visible":10,"weight":35,"urlFragment":3468,"anchor":16,"singlePageAnchor":3468,"subChapters":3469,"docTitle":3457,"url":3479},"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-single/updating_clusters/index#updating-clusters-overview",{"title":3481,"visible":10,"weight":46,"urlFragment":3482,"anchor":16,"singlePageAnchor":3482,"subChapters":3483,"docTitle":3457,"url":3493},"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-single/updating_clusters/index#understanding-upgrade-channels-releases",{"title":3495,"visible":10,"weight":68,"urlFragment":3496,"anchor":16,"singlePageAnchor":3496,"subChapters":3497,"docTitle":3457,"url":3499},"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-single/updating_clusters/index#preparing-eus-eus-upgrade",{"title":3501,"visible":10,"weight":435,"urlFragment":3502,"anchor":16,"singlePageAnchor":3502,"subChapters":3503,"docTitle":3457,"url":3507},"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-single/updating_clusters/index#updating-cluster-within-minor",{"title":3509,"visible":10,"weight":453,"urlFragment":3510,"anchor":16,"singlePageAnchor":3510,"subChapters":3511,"docTitle":3457,"url":3514},"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-single/updating_clusters/index#updating-cluster-cli",{"title":3516,"visible":10,"weight":468,"urlFragment":3517,"anchor":16,"singlePageAnchor":3517,"subChapters":3518,"docTitle":3457,"url":3527},"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-single/updating_clusters/index#update-using-custom-machine-config-pools",{"title":3529,"visible":10,"weight":869,"urlFragment":3530,"anchor":16,"singlePageAnchor":3530,"subChapters":3531,"docTitle":3457,"url":3538},"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-single/updating_clusters/index#updating-cluster-rhel-compute",{"title":3540,"visible":10,"weight":877,"urlFragment":3541,"anchor":16,"singlePageAnchor":3541,"subChapters":3542,"docTitle":3457,"url":3575},"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-single/updating_clusters/index#updating-a-cluster-in-a-disconnected-environment",{"title":3577,"visible":10,"categoryName":10,"sections":3578},"Configure",[3579,3803,4112,4680,4767],{"title":5,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":3580,"docTitle":3581,"url":3582,"sections":3583},[],"storage","#",[3584,3595,3604,3632,3708,3774,3784],{"title":3585,"visible":10,"weight":23,"urlFragment":3586,"anchor":16,"singlePageAnchor":3586,"subChapters":3587,"docTitle":3581,"url":3594},"OpenShift Container Platform storage overview","storage-overview",[3588,3589,3590,3591,3592,3593],"openshift-storage-common-terms_storage-overview","storage-types","ephemeral-storage","persistent-storage","container-storage-interface","dynamic-provisioning-overview","#storage-overview",{"title":3596,"visible":10,"weight":35,"urlFragment":3597,"anchor":16,"singlePageAnchor":3597,"subChapters":3598,"docTitle":3581,"url":3603},"Understanding ephemeral storage","understanding-ephemeral-storage",[3599,3600,3601,3602],"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","#understanding-ephemeral-storage",{"title":3605,"visible":10,"weight":46,"urlFragment":3606,"anchor":16,"singlePageAnchor":3606,"subChapters":3607,"docTitle":3581,"url":3631},"Understanding persistent storage","understanding-persistent-storage",[3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630],"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","#understanding-persistent-storage",{"title":3633,"visible":10,"weight":68,"urlFragment":3634,"anchor":16,"singlePageAnchor":3634,"subChapters":3635,"docTitle":3581,"url":3707},"Configuring persistent storage","configuring-persistent-storage",[3636,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,1006,3703,3704,3705,3706],"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","#configuring-persistent-storage",{"title":3709,"visible":10,"weight":435,"urlFragment":3710,"anchor":16,"singlePageAnchor":3710,"subChapters":3711,"docTitle":3581,"url":3773},"Using Container Storage Interface (CSI)","using-container-storage-interface-csi",[3712,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,1546,3743,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,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","#using-container-storage-interface-csi",{"title":3775,"visible":10,"weight":453,"urlFragment":3776,"anchor":16,"singlePageAnchor":3776,"subChapters":3777,"docTitle":3581,"url":3783},"Expanding persistent volumes","expanding-persistent-volumes",[3778,3779,3780,3781,3782],"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","#expanding-persistent-volumes",{"title":3785,"visible":10,"weight":468,"urlFragment":3786,"anchor":16,"singlePageAnchor":3786,"subChapters":3787,"docTitle":3581,"url":3802},"Dynamic provisioning","dynamic-provisioning",[3788,3789,3790,3791,3792,3793,3794,3795,3796,3797,3798,3799,3800,3801],"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","#dynamic-provisioning",{"title":3804,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":3805,"docTitle":3806,"url":3807,"sections":3808},"Authentication and authorization",[],"authentication_and_authorization","/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index",[3809,3817,3829,3843,3851,3859,3869,3945,3964,3971,3979,3990,3997,4005,4012,4033,4041,4070],{"title":3810,"visible":10,"weight":23,"urlFragment":3811,"anchor":16,"singlePageAnchor":3811,"subChapters":3812,"docTitle":3806,"url":3816},"Overview of authentication and authorization","overview-of-authentication-authorization",[3813,3814,3815],"openshift-auth-common-terms_overview-of-authentication-authorization","authentication-overview","authorization-overview","/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#overview-of-authentication-authorization",{"title":3818,"visible":10,"weight":35,"urlFragment":3819,"anchor":16,"singlePageAnchor":3819,"subChapters":3820,"docTitle":3806,"url":3828},"Understanding authentication","understanding-authentication",[3821,3822,3823,3824,3825,3826,3827],"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-single/authentication_and_authorization/index#understanding-authentication",{"title":3830,"visible":10,"weight":46,"urlFragment":3831,"anchor":16,"singlePageAnchor":3831,"subChapters":3832,"docTitle":3806,"url":3842},"Configuring the internal OAuth server","configuring-internal-oauth",[3833,3834,3835,3836,3837,3838,3839,3840,3841],"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-single/authentication_and_authorization/index#configuring-internal-oauth",{"title":3844,"visible":10,"weight":68,"urlFragment":3845,"anchor":16,"singlePageAnchor":3845,"subChapters":3846,"docTitle":3806,"url":3850},"Configuring OAuth clients","configuring-oauth-clients",[3847,3848,3849,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-single/authentication_and_authorization/index#configuring-oauth-clients",{"title":3852,"visible":10,"weight":435,"urlFragment":3853,"anchor":16,"singlePageAnchor":3853,"subChapters":3854,"docTitle":3806,"url":3858},"Managing user-owned OAuth access tokens","managing-oauth-access-tokens",[3855,3856,3857],"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-single/authentication_and_authorization/index#managing-oauth-access-tokens",{"title":3860,"visible":10,"weight":453,"urlFragment":3861,"anchor":16,"singlePageAnchor":3861,"subChapters":3862,"docTitle":3806,"url":3868},"Understanding identity provider configuration","understanding-identity-provider",[3863,3864,3865,3866,3867],"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-single/authentication_and_authorization/index#understanding-identity-provider",{"title":3870,"visible":10,"weight":468,"urlFragment":3871,"anchor":16,"singlePageAnchor":3871,"subChapters":3872,"docTitle":3806,"url":3944},"Configuring identity providers","configuring-identity-providers",[3873,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],"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-single/authentication_and_authorization/index#configuring-identity-providers",{"title":3946,"visible":10,"weight":869,"urlFragment":3947,"anchor":16,"singlePageAnchor":3947,"subChapters":3948,"docTitle":3806,"url":3963},"Using RBAC to define and apply permissions","using-rbac",[3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962],"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-single/authentication_and_authorization/index#using-rbac",{"title":3965,"visible":10,"weight":877,"urlFragment":3966,"anchor":16,"singlePageAnchor":3966,"subChapters":3967,"docTitle":3806,"url":3970},"Removing the kubeadmin user","removing-kubeadmin",[3968,3969],"understanding-kubeadmin_removing-kubeadmin","removing-kubeadmin_removing-kubeadmin","/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#removing-kubeadmin",{"title":3972,"visible":10,"weight":888,"urlFragment":3973,"anchor":16,"singlePageAnchor":3973,"subChapters":3974,"docTitle":3806,"url":3978},"Understanding and creating service accounts","understanding-and-creating-service-accounts",[3975,3976,3977],"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-single/authentication_and_authorization/index#understanding-and-creating-service-accounts",{"title":3980,"visible":10,"weight":899,"urlFragment":3981,"anchor":16,"singlePageAnchor":3981,"subChapters":3982,"docTitle":3806,"url":3989},"Using service accounts in applications","using-service-accounts",[3983,3984,3985,3986,3987,3988],"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-single/authentication_and_authorization/index#using-service-accounts",{"title":3991,"visible":10,"weight":906,"urlFragment":3992,"anchor":16,"singlePageAnchor":3992,"subChapters":3993,"docTitle":3806,"url":3996},"Using a service account as an OAuth client","using-service-accounts-as-oauth-client",[3994,3995],"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-single/authentication_and_authorization/index#using-service-accounts-as-oauth-client",{"title":3998,"visible":10,"weight":915,"urlFragment":3999,"anchor":16,"singlePageAnchor":3999,"subChapters":4000,"docTitle":3806,"url":4004},"Scoping tokens","tokens-scoping",[4001,4002,4003],"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-single/authentication_and_authorization/index#tokens-scoping",{"title":4006,"visible":10,"weight":2799,"urlFragment":4007,"anchor":16,"singlePageAnchor":4007,"subChapters":4008,"docTitle":3806,"url":4011},"Using bound service account tokens","bound-service-account-tokens",[4009,4010],"bound-sa-tokens-about_bound-service-account-tokens","bound-sa-tokens-configuring_bound-service-account-tokens","/documentation/openshift_container_platform/4.8/html-single/authentication_and_authorization/index#bound-service-account-tokens",{"title":4013,"visible":10,"weight":3064,"urlFragment":4014,"anchor":16,"singlePageAnchor":4014,"subChapters":4015,"docTitle":3806,"url":4032},"Managing security context constraints","managing-pod-security-policies",[4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031],"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-single/authentication_and_authorization/index#managing-pod-security-policies",{"title":4034,"visible":10,"weight":3332,"urlFragment":4035,"anchor":16,"singlePageAnchor":4035,"subChapters":4036,"docTitle":3806,"url":4040},"Impersonating the system:admin user","impersonating-system-admin",[4037,4038,4039],"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-single/authentication_and_authorization/index#impersonating-system-admin",{"title":4042,"visible":10,"weight":3388,"urlFragment":4043,"anchor":16,"singlePageAnchor":4043,"subChapters":4044,"docTitle":3806,"url":4069},"Syncing LDAP groups","ldap-syncing",[4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068],"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-single/authentication_and_authorization/index#ldap-syncing",{"title":4071,"visible":10,"weight":3414,"urlFragment":4072,"anchor":16,"singlePageAnchor":4072,"subChapters":4073,"docTitle":3806,"url":4111},"Managing cloud provider credentials","managing-cloud-provider-credentials",[4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,1598,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,1626,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110],"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-single/authentication_and_authorization/index#managing-cloud-provider-credentials",{"title":4113,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":4114,"docTitle":4115,"url":4116,"sections":4117},"Networking",[],"networking","/documentation/openshift_container_platform/4.8/html-single/networking/index",[4118,4127,4133,4141,4154,4165,4200,4209,4217,4230,4239,4250,4286,4339,4411,4478,4553,4575,4614,4643,4650,4659,4671],{"title":4119,"visible":10,"weight":23,"urlFragment":4120,"anchor":16,"singlePageAnchor":4120,"subChapters":4121,"docTitle":4115,"url":4126},"Understanding networking","understanding-networking",[4122,4123,4124,4125],"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-single/networking/index#understanding-networking",{"title":4128,"visible":10,"weight":35,"urlFragment":4129,"anchor":16,"singlePageAnchor":4129,"subChapters":4130,"docTitle":4115,"url":4132},"Accessing hosts","accessing-hosts",[4131],"accessing-hosts-on-aws_accessing-hosts","/documentation/openshift_container_platform/4.8/html-single/networking/index#accessing-hosts",{"title":4134,"visible":10,"weight":46,"urlFragment":4135,"anchor":16,"singlePageAnchor":4135,"subChapters":4136,"docTitle":4115,"url":4140},"Networking Operators overview","networking-operators-overview",[4137,4138,4139],"networking-operators-overview-cluster-network-operator","networking-operators-overview-dns-operator","networking-operators-overview-ingress-operator","/documentation/openshift_container_platform/4.8/html-single/networking/index#networking-operators-overview",{"title":4142,"visible":10,"weight":68,"urlFragment":4143,"anchor":16,"singlePageAnchor":4143,"subChapters":4144,"docTitle":4115,"url":4153},"Cluster Network Operator in OpenShift Container Platform","cluster-network-operator",[4145,4146,4147,4148,4149,4150,4151,4152],"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-single/networking/index#cluster-network-operator",{"title":4155,"visible":10,"weight":435,"urlFragment":4156,"anchor":16,"singlePageAnchor":4156,"subChapters":4157,"docTitle":4115,"url":4164},"DNS Operator in OpenShift Container Platform","dns-operator",[4158,4159,4160,4161,4162,4163],"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-single/networking/index#dns-operator",{"title":4166,"visible":10,"weight":453,"urlFragment":4167,"anchor":16,"singlePageAnchor":4167,"subChapters":4168,"docTitle":4115,"url":4199},"Ingress Operator in OpenShift Container Platform","configuring-ingress",[4169,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,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-single/networking/index#configuring-ingress",{"title":4201,"visible":10,"weight":468,"urlFragment":4202,"anchor":16,"singlePageAnchor":4202,"subChapters":4203,"docTitle":4115,"url":4208},"Verifying connectivity to an endpoint","verifying-connectivity-endpoint",[4204,4205,4206,4207],"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-single/networking/index#verifying-connectivity-endpoint",{"title":4210,"visible":10,"weight":869,"urlFragment":4211,"anchor":16,"singlePageAnchor":4211,"subChapters":4212,"docTitle":4115,"url":4216},"Configuring the node port service range","configuring-node-port-service-range",[4213,4214,4215],"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-single/networking/index#configuring-node-port-service-range",{"title":4218,"visible":10,"weight":877,"urlFragment":4219,"anchor":16,"singlePageAnchor":4219,"subChapters":4220,"docTitle":4115,"url":4229},"Configuring IP failover","configuring-ipfailover",[4221,4222,4223,4224,4225,4226,4227,4228],"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-single/networking/index#configuring-ipfailover",{"title":4231,"visible":10,"weight":888,"urlFragment":4232,"anchor":16,"singlePageAnchor":4232,"subChapters":4233,"docTitle":4115,"url":4238},"Using the Stream Control Transmission Protocol (SCTP) on a bare metal cluster","using-sctp",[4234,4235,4236,4237],"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-single/networking/index#using-sctp",{"title":4240,"visible":10,"weight":899,"urlFragment":4241,"anchor":16,"singlePageAnchor":4241,"subChapters":4242,"docTitle":4115,"url":4249},"Configuring PTP hardware","configuring-ptp",[4243,4244,4245,4246,4247,4248],"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-single/networking/index#configuring-ptp",{"title":4251,"visible":10,"weight":906,"urlFragment":4252,"anchor":16,"singlePageAnchor":4252,"subChapters":4253,"docTitle":4115,"url":4285},"Network policy","network-policy",[4254,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],"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-single/networking/index#network-policy",{"title":4287,"visible":10,"weight":915,"urlFragment":4288,"anchor":16,"singlePageAnchor":4288,"subChapters":4289,"docTitle":4115,"url":4338},"Multiple networks","multiple-networks",[4290,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],"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-single/networking/index#multiple-networks",{"title":4340,"visible":10,"weight":2799,"urlFragment":4341,"anchor":16,"singlePageAnchor":4341,"subChapters":4342,"docTitle":4115,"url":4410},"Hardware networks","hardware-networks",[4343,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],"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-single/networking/index#hardware-networks",{"title":4412,"visible":10,"weight":3064,"urlFragment":4413,"anchor":16,"singlePageAnchor":4413,"subChapters":4414,"docTitle":4115,"url":4477},"OpenShift SDN default CNI network provider","openshift-sdn-default-cni-network-provider",[4415,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,1006,4470,4471,4472,4473,4474,4475,4476],"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-single/networking/index#openshift-sdn-default-cni-network-provider",{"title":4479,"visible":10,"weight":3332,"urlFragment":4480,"anchor":16,"singlePageAnchor":4480,"subChapters":4481,"docTitle":4115,"url":4552},"OVN-Kubernetes default CNI network provider","ovn-kubernetes-default-cni-network-provider",[4482,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],"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-single/networking/index#ovn-kubernetes-default-cni-network-provider",{"title":4554,"visible":10,"weight":3388,"urlFragment":4555,"anchor":16,"singlePageAnchor":4555,"subChapters":4556,"docTitle":4115,"url":4574},"Configuring Routes","configuring-routes",[4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567,4568,4569,4570,4571,4572,4573],"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-single/networking/index#configuring-routes",{"title":4576,"visible":10,"weight":3414,"urlFragment":4577,"anchor":16,"singlePageAnchor":4577,"subChapters":4578,"docTitle":4115,"url":4613},"Configuring ingress cluster traffic","configuring-ingress-cluster-traffic",[4579,4580,1017,4581,4582,4583,4584,4585,4586,4587,4588,4589,1038,4590,4591,4592,4593,1598,4594,4595,1089,4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,1114,4610,4611,4612],"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-single/networking/index#configuring-ingress-cluster-traffic",{"title":4615,"visible":10,"weight":3429,"urlFragment":4616,"anchor":16,"singlePageAnchor":4616,"subChapters":4617,"docTitle":4115,"url":4642},"Kubernetes NMState","kubernetes-nmstate",[4618,4619,4620,4621,4622,4623,4624,4625,4626,4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641],"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-single/networking/index#kubernetes-nmstate",{"title":4644,"visible":10,"weight":3441,"urlFragment":4645,"anchor":16,"singlePageAnchor":4645,"subChapters":4646,"docTitle":4115,"url":4649},"Configuring the cluster-wide proxy","enable-cluster-wide-proxy",[1142,4647,4648],"nw-proxy-configure-object_config-cluster-wide-proxy","nw-proxy-remove_config-cluster-wide-proxy","/documentation/openshift_container_platform/4.8/html-single/networking/index#enable-cluster-wide-proxy",{"title":4651,"visible":10,"weight":4652,"urlFragment":4653,"anchor":16,"singlePageAnchor":4653,"subChapters":4654,"docTitle":4115,"url":4658},"Configuring a custom PKI",22,"configuring-a-custom-pki",[4655,4656,4657],"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-single/networking/index#configuring-a-custom-pki",{"title":4660,"visible":10,"weight":4661,"urlFragment":4662,"anchor":16,"singlePageAnchor":4662,"subChapters":4663,"docTitle":4115,"url":4670},"Load balancing on RHOSP",23,"load-balancing-openstack",[4664,4665,4666,4667,4668,4669],"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-single/networking/index#load-balancing-openstack",{"title":4672,"visible":10,"weight":4673,"urlFragment":4674,"anchor":16,"singlePageAnchor":4674,"subChapters":4675,"docTitle":4115,"url":4679},"Associating secondary interfaces metrics to network attachments",24,"associating-secondary-interfaces-metrics-to-network-attachments",[4676,4677,4678],"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-single/networking/index#associating-secondary-interfaces-metrics-to-network-attachments",{"title":4681,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":4682,"docTitle":4683,"url":4684,"sections":4685},"Registry",[],"registry","/documentation/openshift_container_platform/4.8/html-single/registry/index",[4686,4698,4710,4750,4760],{"title":4687,"visible":10,"weight":23,"urlFragment":4688,"anchor":16,"singlePageAnchor":4688,"subChapters":4689,"docTitle":4683,"url":4697},"OpenShift Container Platform registry overview","registry-overview",[4690,4691,4692,4693,4694,4695,4696],"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-single/registry/index#registry-overview",{"title":4699,"visible":10,"weight":35,"urlFragment":4700,"anchor":16,"singlePageAnchor":4700,"subChapters":4701,"docTitle":4683,"url":4709},"Image Registry Operator in OpenShift Container Platform","configuring-registry-operator",[4702,4703,4704,4705,4706,4707,4708,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-single/registry/index#configuring-registry-operator",{"title":4711,"visible":10,"weight":46,"urlFragment":4712,"anchor":16,"singlePageAnchor":4712,"subChapters":4713,"docTitle":4683,"url":4749},"Setting up and configuring the registry","setting-up-and-configuring-the-registry",[4714,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],"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-single/registry/index#setting-up-and-configuring-the-registry",{"title":4751,"visible":10,"weight":68,"urlFragment":4752,"anchor":16,"singlePageAnchor":4752,"subChapters":4753,"docTitle":4683,"url":4759},"Accessing the registry","accessing-the-registry",[1006,4754,4755,4756,4757,4758],"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-single/registry/index#accessing-the-registry",{"title":4761,"visible":10,"weight":435,"urlFragment":4762,"anchor":16,"singlePageAnchor":4762,"subChapters":4763,"docTitle":4683,"url":4766},"Exposing the registry","securing-exposing-registry",[4764,4765],"registry-exposing-default-registry-manually_securing-exposing-registry","registry-exposing-secure-registry-manually_securing-exposing-registry","/documentation/openshift_container_platform/4.8/html-single/registry/index#securing-exposing-registry",{"title":4768,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":4769,"docTitle":4770,"url":4771,"sections":4772},"Post-installation configuration",[],"post-installation_configuration","/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index",[4773,4779,4788,4811,4867,4953,4990,5019,5054,5062],{"title":4774,"visible":10,"weight":23,"urlFragment":4775,"anchor":16,"singlePageAnchor":4775,"subChapters":4776,"docTitle":4770,"url":4778},"Post-installation configuration overview","post-install-configuration-overview",[4777],"post-install-tasks","/documentation/openshift_container_platform/4.8/html-single/post-installation_configuration/index#post-install-configuration-overview",{"title":4780,"visible":10,"weight":35,"urlFragment":4781,"anchor":16,"singlePageAnchor":4781,"subChapters":4782,"docTitle":4770,"url":4787},"Configuring a private cluster","configuring-private-cluster",[4783,4784,4785,4786],"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-single/post-installation_configuration/index#configuring-private-cluster",{"title":4789,"visible":10,"weight":46,"urlFragment":4790,"anchor":16,"singlePageAnchor":4790,"subChapters":4791,"docTitle":4770,"url":4810},"Post-installation machine configuration tasks","post-install-machine-configuration-tasks",[4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803,4804,4805,4806,4807,4808,4809],"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-single/post-installation_configuration/index#post-install-machine-configuration-tasks",{"title":4812,"visible":10,"weight":68,"urlFragment":4813,"anchor":16,"singlePageAnchor":4813,"subChapters":4814,"docTitle":4770,"url":4866},"Post-installation cluster tasks","post-install-cluster-tasks",[4815,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],"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-single/post-installation_configuration/index#post-install-cluster-tasks",{"title":4868,"visible":10,"weight":435,"urlFragment":4869,"anchor":16,"singlePageAnchor":4869,"subChapters":4870,"docTitle":4770,"url":4952},"Post-installation node tasks","post-install-node-tasks",[4871,4872,4873,4874,4875,4876,4877,4878,4879,4880,1006,4881,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],"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-single/post-installation_configuration/index#post-install-node-tasks",{"title":4954,"visible":10,"weight":453,"urlFragment":4955,"anchor":16,"singlePageAnchor":4955,"subChapters":4956,"docTitle":4770,"url":4989},"Post-installation network configuration","post-install-network-configuration",[4957,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],"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-single/post-installation_configuration/index#post-install-network-configuration",{"title":4991,"visible":10,"weight":468,"urlFragment":4992,"anchor":16,"singlePageAnchor":4992,"subChapters":4993,"docTitle":4770,"url":5018},"Post-installation storage configuration","post-install-storage-configuration",[4994,4995,4996,4997,4998,4999,5000,5001,5002,5003,5004,5005,5006,5007,5008,5009,5010,5011,4683,5012,5013,5014,5015,5016,5017],"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-single/post-installation_configuration/index#post-install-storage-configuration",{"title":5020,"visible":10,"weight":869,"urlFragment":5021,"anchor":16,"singlePageAnchor":5021,"subChapters":5022,"docTitle":4770,"url":5053},"Preparing for users","post-install-preparing-for-users",[5023,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],"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-single/post-installation_configuration/index#post-install-preparing-for-users",{"title":5055,"visible":10,"weight":877,"urlFragment":5056,"anchor":16,"singlePageAnchor":5056,"subChapters":5057,"docTitle":4770,"url":5061},"Configuring alert notifications","configuring-alert-notifications",[5058,5059,5060],"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-single/post-installation_configuration/index#configuring-alert-notifications",{"title":5063,"visible":10,"weight":888,"urlFragment":5064,"anchor":16,"singlePageAnchor":5064,"subChapters":5065,"docTitle":4770,"url":5074},"Configuring additional devices in an IBM Z or LinuxONE environment","post-install-configure-additional-devices-ibmz",[5066,5067,5068,5069,5070,5071,5072,5073],"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-single/post-installation_configuration/index#post-install-configure-additional-devices-ibmz",{"title":5076,"visible":10,"categoryName":10,"sections":5077},"Migrate",[5078,5308],{"title":5079,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5080,"docTitle":5081,"url":5082,"sections":5083},"Migrating from version 3 to 4",[],"migrating_from_version_3_to_4","/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index",[5084,5099,5104,5117,5126,5137,5167,5194,5202,5211,5223,5261],{"title":5085,"visible":10,"weight":23,"urlFragment":5086,"anchor":16,"singlePageAnchor":5086,"subChapters":5087,"docTitle":5081,"url":5098},"Migration from OpenShift Container Platform 3 to 4 overview","migration-from-version-3-to-4-overview",[5088,5089,5090,5091,5092,5093,5094,5095,5096,5097],"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-single/migrating_from_version_3_to_4/index#migration-from-version-3-to-4-overview",{"title":5100,"visible":10,"weight":35,"urlFragment":5101,"anchor":16,"singlePageAnchor":5101,"subChapters":5102,"docTitle":5081,"url":5103},"About migrating from OpenShift Container Platform 3 to 4","about-migrating-from-3-to-4",[],"/documentation/openshift_container_platform/4.8/html-single/migrating_from_version_3_to_4/index#about-migrating-from-3-to-4",{"title":5105,"visible":10,"weight":46,"urlFragment":5106,"anchor":16,"singlePageAnchor":5106,"subChapters":5107,"docTitle":5081,"url":5116},"Differences between OpenShift Container Platform 3 and 4","planning-migration-3-4",[5108,5109,5110,5111,5112,5113,5114,5115],"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-single/migrating_from_version_3_to_4/index#planning-migration-3-4",{"title":5118,"visible":10,"weight":68,"urlFragment":5119,"anchor":16,"singlePageAnchor":5119,"subChapters":5120,"docTitle":5081,"url":5125},"Network considerations","planning-considerations-3-4",[5121,5122,5123,5124],"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-single/migrating_from_version_3_to_4/index#planning-considerations-3-4",{"title":5127,"visible":10,"weight":435,"urlFragment":5128,"anchor":16,"singlePageAnchor":5128,"subChapters":5129,"docTitle":5081,"url":5136},"About the Migration Toolkit for Containers","about-mtc-3-4",[5130,5131,5132,5133,5134,5135],"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-single/migrating_from_version_3_to_4/index#about-mtc-3-4",{"title":5138,"visible":10,"weight":453,"urlFragment":5139,"anchor":16,"singlePageAnchor":5139,"subChapters":5140,"docTitle":5081,"url":5166},"Installing the Migration Toolkit for Containers","installing-3-4",[5141,5142,5143,5144,5145,5146,5147,5148,5149,5150,5151,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164,5165],"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-single/migrating_from_version_3_to_4/index#installing-3-4",{"title":5168,"visible":10,"weight":468,"urlFragment":5169,"anchor":16,"singlePageAnchor":5169,"subChapters":5170,"docTitle":5081,"url":5193},"Installing the Migration Toolkit for Containers in a restricted network environment","installing-restricted-3-4",[5171,5172,5173,5174,5175,5176,5177,5178,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192],"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-single/migrating_from_version_3_to_4/index#installing-restricted-3-4",{"title":5195,"visible":10,"weight":869,"urlFragment":5196,"anchor":16,"singlePageAnchor":5196,"subChapters":5197,"docTitle":5081,"url":5201},"Upgrading the Migration Toolkit for Containers","upgrading-3-4",[5198,5199,5200],"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-single/migrating_from_version_3_to_4/index#upgrading-3-4",{"title":5203,"visible":10,"weight":877,"urlFragment":5204,"anchor":16,"singlePageAnchor":5204,"subChapters":5205,"docTitle":5081,"url":5210},"Premigration checklists","premigration-checklists-3-4",[5206,5207,5208,5209],"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-single/migrating_from_version_3_to_4/index#premigration-checklists-3-4",{"title":5212,"visible":10,"weight":888,"urlFragment":5213,"anchor":16,"singlePageAnchor":5213,"subChapters":5214,"docTitle":5081,"url":5222},"Migrating your applications","migrating-applications-3-4",[5215,5216,5217,5218,5219,5220,5221],"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-single/migrating_from_version_3_to_4/index#migrating-applications-3-4",{"title":5224,"visible":10,"weight":899,"urlFragment":5225,"anchor":16,"singlePageAnchor":5225,"subChapters":5226,"docTitle":5081,"url":5260},"Advanced migration options","advanced-migration-options-3-4",[5227,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],"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-single/migrating_from_version_3_to_4/index#advanced-migration-options-3-4",{"title":5262,"visible":10,"weight":906,"urlFragment":5263,"anchor":16,"singlePageAnchor":5263,"subChapters":5264,"docTitle":5081,"url":5307},"Troubleshooting","troubleshooting-3-4",[5265,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],"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-single/migrating_from_version_3_to_4/index#troubleshooting-3-4",{"title":5309,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5310,"docTitle":5311,"url":5312,"sections":5313},"Migration Toolkit for Containers",[],"migration_toolkit_for_containers","/documentation/openshift_container_platform/4.8/html-single/migration_toolkit_for_containers/index",[5314,5324,5340,5369,5395,5402,5409,5417,5428,5465],{"title":5127,"visible":10,"weight":23,"urlFragment":5315,"anchor":16,"singlePageAnchor":5315,"subChapters":5316,"docTitle":5311,"url":5323},"about-mtc",[5317,5318,5319,5320,5321,5322],"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-single/migration_toolkit_for_containers/index#about-mtc",{"title":5325,"visible":10,"weight":35,"urlFragment":5326,"anchor":16,"singlePageAnchor":5326,"subChapters":5327,"docTitle":5311,"url":5339},"Migration Toolkit for Containers release notes","mtc-release-notes",[5328,5329,5330,5331,5332,5333,5334,5335,5336,5337,5338],"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-single/migration_toolkit_for_containers/index#mtc-release-notes",{"title":5138,"visible":10,"weight":46,"urlFragment":5341,"anchor":16,"singlePageAnchor":5341,"subChapters":5342,"docTitle":5311,"url":5368},"installing-mtc",[5343,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367],"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-single/migration_toolkit_for_containers/index#installing-mtc",{"title":5168,"visible":10,"weight":68,"urlFragment":5370,"anchor":16,"singlePageAnchor":5370,"subChapters":5371,"docTitle":5311,"url":5394},"installing-mtc-restricted",[5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385,5386,5387,5388,5389,5390,5391,5392,5393],"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-single/migration_toolkit_for_containers/index#installing-mtc-restricted",{"title":5195,"visible":10,"weight":435,"urlFragment":5396,"anchor":16,"singlePageAnchor":5396,"subChapters":5397,"docTitle":5311,"url":5401},"upgrading-mtc",[5398,5399,5400],"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-single/migration_toolkit_for_containers/index#upgrading-mtc",{"title":5203,"visible":10,"weight":453,"urlFragment":5403,"anchor":16,"singlePageAnchor":5403,"subChapters":5404,"docTitle":5311,"url":5408},"premigration-checklists-mtc",[5405,5406,5407],"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-single/migration_toolkit_for_containers/index#premigration-checklists-mtc",{"title":5118,"visible":10,"weight":468,"urlFragment":5410,"anchor":16,"singlePageAnchor":5410,"subChapters":5411,"docTitle":5311,"url":5416},"network-considerations-mtc",[5412,5413,5414,5415],"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-single/migration_toolkit_for_containers/index#network-considerations-mtc",{"title":5212,"visible":10,"weight":869,"urlFragment":5418,"anchor":16,"singlePageAnchor":5418,"subChapters":5419,"docTitle":5311,"url":5427},"migrating-applications-with-mtc",[5420,5421,5422,5423,5424,5425,5426],"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-single/migration_toolkit_for_containers/index#migrating-applications-with-mtc",{"title":5224,"visible":10,"weight":877,"urlFragment":5429,"anchor":16,"singlePageAnchor":5429,"subChapters":5430,"docTitle":5311,"url":5464},"advanced-migration-options-mtc",[5431,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],"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-single/migration_toolkit_for_containers/index#advanced-migration-options-mtc",{"title":5262,"visible":10,"weight":888,"urlFragment":5466,"anchor":16,"singlePageAnchor":5466,"subChapters":5467,"docTitle":5311,"url":5508},"troubleshooting-mtc",[5468,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],"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-single/migration_toolkit_for_containers/index#troubleshooting-mtc",{"title":5510,"visible":10,"categoryName":10,"sections":5511},"Manage",[5512,5651,5834,5964],{"title":5513,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5514,"docTitle":5515,"url":5516,"sections":5517},"Backup and restore",[],"backup_and_restore","/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index",[5518,5526,5532,5538,5629],{"title":5513,"visible":10,"weight":23,"urlFragment":5519,"anchor":16,"singlePageAnchor":5519,"subChapters":5520,"docTitle":5515,"url":5525},"backup-restore-overview",[5521,5522,5523,5524],"backup-restore-operations-overview","application-backup-restore-operations-overview","oadp-requirements","backing-up-and-restoring-applications","/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index#backup-restore-overview",{"title":5527,"visible":10,"weight":35,"urlFragment":5528,"anchor":16,"singlePageAnchor":5528,"subChapters":5529,"docTitle":5515,"url":5531},"Shutting down the cluster gracefully","graceful-shutdown-cluster",[1006,5530],"graceful-shutdown_graceful-shutdown-cluster","/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index#graceful-shutdown-cluster",{"title":5533,"visible":10,"weight":46,"urlFragment":5534,"anchor":16,"singlePageAnchor":5534,"subChapters":5535,"docTitle":5515,"url":5537},"Restarting the cluster gracefully","graceful-restart-cluster",[1017,5536],"graceful-restart_graceful-restart-cluster","/documentation/openshift_container_platform/4.8/html-single/backup_and_restore/index#graceful-restart-cluster",{"title":5539,"visible":10,"weight":68,"urlFragment":5540,"anchor":16,"singlePageAnchor":5540,"subChapters":5541,"docTitle":5515,"url":5628},"Application backup and restore","application-backup-and-restore",[5542,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],"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-single/backup_and_restore/index#application-backup-and-restore",{"title":5630,"visible":10,"weight":435,"urlFragment":5631,"anchor":16,"singlePageAnchor":5631,"subChapters":5632,"docTitle":5515,"url":5650},"Control plane backup and restore","control-plane-backup-and-restore",[5633,5634,5635,1038,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648,5649],"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-single/backup_and_restore/index#control-plane-backup-and-restore",{"title":5652,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5653,"docTitle":5654,"url":5655,"sections":5656},"Machine management",[],"machine_management","/documentation/openshift_container_platform/4.8/html-single/machine_management/index",[5657,5662,5704,5711,5720,5727,5740,5763,5781,5797,5820],{"title":5658,"visible":10,"weight":23,"urlFragment":5659,"anchor":16,"singlePageAnchor":5659,"subChapters":5660,"docTitle":5654,"url":5661},"Overview of machine management","overview-of-machine-management",[],"/documentation/openshift_container_platform/4.8/html-single/machine_management/index#overview-of-machine-management",{"title":5663,"visible":10,"weight":35,"urlFragment":5664,"anchor":16,"singlePageAnchor":5664,"subChapters":5665,"docTitle":5654,"url":5703},"Creating machine sets","creating-machine-sets",[5666,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],"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-single/machine_management/index#creating-machine-sets",{"title":5705,"visible":10,"weight":46,"urlFragment":5706,"anchor":16,"singlePageAnchor":5706,"subChapters":5707,"docTitle":5654,"url":5710},"Manually scaling a machine set","manually-scaling-machineset",[1006,5708,5709],"machineset-manually-scaling_manually-scaling-machineset","machineset-delete-policy_manually-scaling-machineset","/documentation/openshift_container_platform/4.8/html-single/machine_management/index#manually-scaling-machineset",{"title":5712,"visible":10,"weight":68,"urlFragment":5713,"anchor":16,"singlePageAnchor":5713,"subChapters":5714,"docTitle":5654,"url":5719},"Modifying a machine set","modifying-machineset",[5715,5716,5717,5718],"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-single/machine_management/index#modifying-machineset",{"title":5721,"visible":10,"weight":435,"urlFragment":5722,"anchor":16,"singlePageAnchor":5722,"subChapters":5723,"docTitle":5654,"url":5726},"Deleting a machine","deleting-machine",[5724,5725],"machine-delete_deleting-machine","additional-resources_unhealthy-etcd-member","/documentation/openshift_container_platform/4.8/html-single/machine_management/index#deleting-machine",{"title":5728,"visible":10,"weight":453,"urlFragment":5729,"anchor":16,"singlePageAnchor":5729,"subChapters":5730,"docTitle":5654,"url":5739},"Applying autoscaling to an OpenShift Container Platform cluster","applying-autoscaling",[5731,5732,5733,5734,5735,971,5736,5737,5738,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-single/machine_management/index#applying-autoscaling",{"title":5741,"visible":10,"weight":468,"urlFragment":5742,"anchor":16,"singlePageAnchor":5742,"subChapters":5743,"docTitle":5654,"url":5762},"Creating infrastructure machine sets","creating-infrastructure-machinesets",[5744,5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,4832,5758,5759,5760,5761],"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-single/machine_management/index#creating-infrastructure-machinesets",{"title":5764,"visible":10,"weight":869,"urlFragment":5765,"anchor":16,"singlePageAnchor":5765,"subChapters":5766,"docTitle":5654,"url":5780},"Adding RHEL compute machines to an OpenShift Container Platform cluster","adding-rhel-compute",[5767,5768,5769,5770,5771,5772,5773,5774,5775,5776,5777,5778,5779],"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-single/machine_management/index#adding-rhel-compute",{"title":5782,"visible":10,"weight":877,"urlFragment":5783,"anchor":16,"singlePageAnchor":5783,"subChapters":5784,"docTitle":5654,"url":5796},"Adding more RHEL compute machines to an OpenShift Container Platform cluster","more-rhel-compute",[5785,5786,5787,5788,5789,5790,5791,5792,5793,5794,5795],"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-single/machine_management/index#more-rhel-compute",{"title":5798,"visible":10,"weight":888,"urlFragment":5799,"anchor":16,"singlePageAnchor":5799,"subChapters":5800,"docTitle":5654,"url":5819},"User-provisioned infrastructure","user-provisioned-infrastructure-2",[5801,5802,5803,5804,5805,5806,5807,5808,5809,5810,5811,1017,5812,5813,5814,1038,5815,5816,5817,5818],"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-single/machine_management/index#user-provisioned-infrastructure-2",{"title":5821,"visible":10,"weight":899,"urlFragment":5822,"anchor":16,"singlePageAnchor":5822,"subChapters":5823,"docTitle":5654,"url":5833},"Deploying machine health checks","deploying-machine-health-checks",[5824,5825,5826,5827,4889,4890,5828,5829,5830,5831,5832],"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-single/machine_management/index#deploying-machine-health-checks",{"title":5835,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5836,"docTitle":5837,"url":5838,"sections":5839},"Metering",[],"metering","/documentation/openshift_container_platform/4.8/html-single/metering/index",[5840,5853,5865,5870,5900,5922,5929,5937,5956],{"title":5841,"visible":10,"weight":23,"urlFragment":5842,"anchor":16,"singlePageAnchor":5842,"subChapters":5843,"docTitle":5837,"url":5852},"About Metering","about-metering",[5844,5845,5846,5847,5848,5849,5850,5851],"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-single/metering/index#about-metering",{"title":5854,"visible":10,"weight":35,"urlFragment":5855,"anchor":16,"singlePageAnchor":5855,"subChapters":5856,"docTitle":5837,"url":5864},"Installing metering","installing-metering",[5857,5858,5859,5860,5861,1006,5862,5863],"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-single/metering/index#installing-metering",{"title":5866,"visible":10,"weight":46,"urlFragment":5867,"anchor":16,"singlePageAnchor":5867,"subChapters":5868,"docTitle":5837,"url":5869},"Upgrading metering","upgrading-metering",[1017],"/documentation/openshift_container_platform/4.8/html-single/metering/index#upgrading-metering",{"title":5871,"visible":10,"weight":68,"urlFragment":5872,"anchor":16,"singlePageAnchor":5872,"subChapters":5873,"docTitle":5837,"url":5899},"Configuring metering","configuring-metering",[5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892,5893,5894,5895,5896,5897,5898],"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-single/metering/index#configuring-metering",{"title":5901,"visible":10,"weight":435,"urlFragment":5902,"anchor":16,"singlePageAnchor":5902,"subChapters":5903,"docTitle":5837,"url":5921},"Reports","reports",[5904,5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920],"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-single/metering/index#reports",{"title":5923,"visible":10,"weight":453,"urlFragment":5924,"anchor":16,"singlePageAnchor":5924,"subChapters":5925,"docTitle":5837,"url":5928},"Using Metering","using-metering",[1038,5926,5927],"metering-writing-reports_using-metering","metering-viewing-report-results_using-metering","/documentation/openshift_container_platform/4.8/html-single/metering/index#using-metering",{"title":5930,"visible":10,"weight":468,"urlFragment":5931,"anchor":16,"singlePageAnchor":5931,"subChapters":5932,"docTitle":5837,"url":5936},"Examples of using metering","metering-usage-examples",[1089,5933,5934,5935],"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-single/metering/index#metering-usage-examples",{"title":5938,"visible":10,"weight":869,"urlFragment":5939,"anchor":16,"singlePageAnchor":5939,"subChapters":5940,"docTitle":5837,"url":5955},"Troubleshooting and debugging metering","metering-troubleshooting-debugging",[5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954],"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-single/metering/index#metering-troubleshooting-debugging",{"title":5957,"visible":10,"weight":877,"urlFragment":5958,"anchor":16,"singlePageAnchor":5958,"subChapters":5959,"docTitle":5837,"url":5963},"Uninstalling metering","metering-uninstall",[5960,5961,5962],"metering-remove","metering-uninstall_metering-uninstall","metering-uninstall-crds_metering-uninstall","/documentation/openshift_container_platform/4.8/html-single/metering/index#metering-uninstall",{"title":5965,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":5966,"docTitle":5967,"url":5968,"sections":5969},"Web console",[],"web_console","/documentation/openshift_container_platform/4.8/html-single/web_console/index",[5970,5979,5985,5991,5997,6012,6022,6028],{"title":5971,"visible":10,"weight":23,"urlFragment":5972,"anchor":16,"singlePageAnchor":5972,"subChapters":5973,"docTitle":5967,"url":5978},"Web Console Overview","web-console-overview",[5974,5975,5976,5977],"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-single/web_console/index#web-console-overview",{"title":5980,"visible":10,"weight":35,"urlFragment":5981,"anchor":16,"singlePageAnchor":5981,"subChapters":5982,"docTitle":5967,"url":5984},"Accessing the web console","web-console",[1006,5983],"web-console-overview_web-console","/documentation/openshift_container_platform/4.8/html-single/web_console/index#web-console",{"title":5986,"visible":10,"weight":46,"urlFragment":5987,"anchor":16,"singlePageAnchor":5987,"subChapters":5988,"docTitle":5967,"url":5990},"Using the OpenShift Container Platform dashboard to get cluster information","using-dashboard-to-get-cluster-info",[5989],"virt-about-the-overview-dashboard_using-dashboard-to-get-cluster-info","/documentation/openshift_container_platform/4.8/html-single/web_console/index#using-dashboard-to-get-cluster-info",{"title":5992,"visible":10,"weight":68,"urlFragment":5993,"anchor":16,"singlePageAnchor":5993,"subChapters":5994,"docTitle":5967,"url":5996},"Configuring the web console in OpenShift Container Platform","configuring-web-console",[1017,5995],"web-console-configuration_configuring-web-console","/documentation/openshift_container_platform/4.8/html-single/web_console/index#configuring-web-console",{"title":5998,"visible":10,"weight":435,"urlFragment":5999,"anchor":16,"singlePageAnchor":5999,"subChapters":6000,"docTitle":5967,"url":6011},"Customizing the web console in OpenShift Container Platform","customizing-web-console",[6001,6002,6003,6004,6005,6006,6007,6008,6009,6010],"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-single/web_console/index#customizing-web-console",{"title":6013,"visible":10,"weight":453,"urlFragment":6014,"anchor":16,"singlePageAnchor":6014,"subChapters":6015,"docTitle":5967,"url":6021},"About the web terminal in the web console","odc-about-web-terminal",[6016,6017,6018,6019,6020],"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-single/web_console/index#odc-about-web-terminal",{"title":6023,"visible":10,"weight":468,"urlFragment":6024,"anchor":16,"singlePageAnchor":6024,"subChapters":6025,"docTitle":5967,"url":6027},"Disabling the web console in OpenShift Container Platform","disabling-web-console",[1038,6026],"web-console-disable_disabling-web-console","/documentation/openshift_container_platform/4.8/html-single/web_console/index#disabling-web-console",{"title":6029,"visible":10,"weight":869,"urlFragment":6030,"anchor":16,"singlePageAnchor":6030,"subChapters":6031,"docTitle":5967,"url":6064},"Creating quick start tutorials in the web console","creating-quick-start-tutorials",[6032,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],"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-single/web_console/index#creating-quick-start-tutorials",{"title":6066,"visible":10,"categoryName":10,"sections":6067},"Reference",[6068],{"title":6069,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":6070,"docTitle":6071,"url":6072,"sections":6073},"CLI tools",[],"cli_tools","/documentation/openshift_container_platform/4.8/html-single/cli_tools/index",[6074,6080,6325,6408,6415,6506,6514],{"title":6075,"visible":10,"weight":23,"urlFragment":6076,"anchor":16,"singlePageAnchor":6076,"subChapters":6077,"docTitle":6071,"url":6079},"OpenShift Container Platform CLI tools overview","cli-tools-overview",[6078],"cli-tools-list","/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#cli-tools-overview",{"title":6081,"visible":10,"weight":35,"urlFragment":6082,"anchor":16,"singlePageAnchor":6082,"subChapters":6083,"docTitle":6071,"url":6324},"OpenShift CLI (oc)","openshift-cli-oc",[6084,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],"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-single/cli_tools/index#openshift-cli-oc",{"title":6326,"visible":10,"weight":46,"urlFragment":6327,"anchor":16,"singlePageAnchor":6327,"subChapters":6328,"docTitle":6071,"url":6407},"Developer CLI (odo)","developer-cli-odo",[6329,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,617,6356,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],"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-single/cli_tools/index#developer-cli-odo",{"title":6409,"visible":10,"weight":68,"urlFragment":6410,"anchor":16,"singlePageAnchor":6410,"subChapters":6411,"docTitle":6071,"url":6414},"Knative CLI for use with OpenShift Serverless","kn-cli-tools",[6412,6413],"kn-cli-tools-key-features","kn-cli-tools-installing-kn","/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#kn-cli-tools",{"title":6416,"visible":10,"weight":435,"urlFragment":6417,"anchor":16,"singlePageAnchor":6417,"subChapters":6418,"docTitle":6071,"url":6505},"Pipelines CLI (tkn)","pipelines-cli-tkn",[6419,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],"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-single/cli_tools/index#pipelines-cli-tkn",{"title":6507,"visible":10,"weight":453,"urlFragment":6508,"anchor":16,"singlePageAnchor":6508,"subChapters":6509,"docTitle":6071,"url":6513},"opm CLI","opm-cli",[6510,6511,6512],"olm-about-opm_opm-cli","olm-installing-opm_opm-cli","opm-addtl-resources","/documentation/openshift_container_platform/4.8/html-single/cli_tools/index#opm-cli",{"title":6515,"visible":10,"weight":468,"urlFragment":6516,"anchor":16,"singlePageAnchor":6516,"subChapters":6517,"docTitle":6071,"url":6536},"Operator SDK","operator-sdk",[6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535],"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-single/cli_tools/index#operator-sdk",{"title":6538,"visible":10,"categoryName":10,"sections":6539},"Develop",[6540,6810,7225,7433,7814,7876],{"title":6541,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":6542,"docTitle":6543,"url":6544,"sections":6545},"Building Applications",[],"building_applications","/documentation/openshift_container_platform/4.8/html-single/building_applications/index",[6546,6557,6583,6620,6636,6662,6714,6734,6744,6751,6762,6769,6786,6795,6801],{"title":6547,"visible":10,"weight":23,"urlFragment":6548,"anchor":16,"singlePageAnchor":6548,"subChapters":6549,"docTitle":6543,"url":6556},"Building applications overview","building-applications-overview",[6550,6551,6552,6553,6554,6555],"working-on-a-project","working-on-application","creating-application","maintaining-application","deploying-application","redhat-marketplace","/documentation/openshift_container_platform/4.8/html-single/building_applications/index#building-applications-overview",{"title":6558,"visible":10,"weight":35,"urlFragment":6559,"anchor":16,"singlePageAnchor":6559,"subChapters":6560,"docTitle":6543,"url":6582},"Projects","projects",[6561,6562,6563,6564,6565,6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581],"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-single/building_applications/index#projects",{"title":6584,"visible":10,"weight":46,"urlFragment":6585,"anchor":16,"singlePageAnchor":6585,"subChapters":6586,"docTitle":6543,"url":6619},"Creating Applications","creating-applications",[6587,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],"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-single/building_applications/index#creating-applications",{"title":6621,"visible":10,"weight":68,"urlFragment":6622,"anchor":16,"singlePageAnchor":6622,"subChapters":6623,"docTitle":6543,"url":6635},"Viewing application composition using the Topology view","odc-viewing-application-composition-using-topology-view",[1006,6624,6625,6626,6627,6628,6629,6630,6631,6632,6633,6634,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-single/building_applications/index#odc-viewing-application-composition-using-topology-view",{"title":6637,"visible":10,"weight":435,"urlFragment":6638,"anchor":16,"singlePageAnchor":6638,"subChapters":6639,"docTitle":6543,"url":6661},"Working with Helm charts","working-with-helm-charts",[6640,6641,6642,1598,6643,6644,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,1017,6658,6659,6660],"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-single/building_applications/index#working-with-helm-charts",{"title":6663,"visible":10,"weight":453,"urlFragment":6664,"anchor":16,"singlePageAnchor":6664,"subChapters":6665,"docTitle":6543,"url":6713},"Deployments","deployments",[6666,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],"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-single/building_applications/index#deployments",{"title":6715,"visible":10,"weight":468,"urlFragment":6716,"anchor":16,"singlePageAnchor":6716,"subChapters":6717,"docTitle":6543,"url":6733},"Quotas","quotas",[6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731,6732],"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-single/building_applications/index#quotas",{"title":6735,"visible":10,"weight":869,"urlFragment":6736,"anchor":16,"singlePageAnchor":6736,"subChapters":6737,"docTitle":6543,"url":6743},"Using config maps with applications","config-maps",[6738,6739,6740,6741,6742],"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-single/building_applications/index#config-maps",{"title":6745,"visible":10,"weight":877,"urlFragment":6746,"anchor":16,"singlePageAnchor":6746,"subChapters":6747,"docTitle":6543,"url":6750},"Monitoring project and application metrics using the Developer perspective","odc-monitoring-project-and-application-metrics-using-developer-perspective",[1038,6748,6749,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-single/building_applications/index#odc-monitoring-project-and-application-metrics-using-developer-perspective",{"title":6752,"visible":10,"weight":888,"urlFragment":6753,"anchor":16,"singlePageAnchor":6753,"subChapters":6754,"docTitle":6543,"url":6761},"Monitoring application health by using health checks","application-health",[6755,6756,6757,6758,6759,6760],"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-single/building_applications/index#application-health",{"title":6763,"visible":10,"weight":899,"urlFragment":6764,"anchor":16,"singlePageAnchor":6764,"subChapters":6765,"docTitle":6543,"url":6768},"Editing applications","odc-editing-applications",[1089,6766,6767],"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-single/building_applications/index#odc-editing-applications",{"title":6770,"visible":10,"weight":906,"urlFragment":6771,"anchor":16,"singlePageAnchor":6771,"subChapters":6772,"docTitle":6543,"url":6785},"Pruning objects to reclaim resources","pruning-objects",[6773,6774,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784],"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-single/building_applications/index#pruning-objects",{"title":6787,"visible":10,"weight":915,"urlFragment":6788,"anchor":16,"singlePageAnchor":6788,"subChapters":6789,"docTitle":6543,"url":6794},"Idling applications","idling-applications",[6790,6791,6792,6793],"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-single/building_applications/index#idling-applications",{"title":6796,"visible":10,"weight":2799,"urlFragment":6797,"anchor":16,"singlePageAnchor":6797,"subChapters":6798,"docTitle":6543,"url":6800},"Deleting applications","odc-deleting-applications",[6799],"odc-deleting-applications-using-developer-perspective_odc-deleting-applications","/documentation/openshift_container_platform/4.8/html-single/building_applications/index#odc-deleting-applications",{"title":6802,"visible":10,"weight":3064,"urlFragment":6803,"anchor":16,"singlePageAnchor":6803,"subChapters":6804,"docTitle":6543,"url":6809},"Using the Red Hat Marketplace","red-hat-marketplace",[6805,6806,6807,6808],"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-single/building_applications/index#red-hat-marketplace",{"title":6811,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":6812,"docTitle":6813,"url":6814,"sections":6815},"CI/CD",[],"cicd","/documentation/openshift_container_platform/4.8/html-single/cicd/index",[6816,6825,6975,6991,7100],{"title":6817,"visible":10,"weight":23,"urlFragment":6818,"anchor":16,"singlePageAnchor":6818,"subChapters":6819,"docTitle":6813,"url":6824},"OpenShift Container Platform CI/CD overview","ci-cd-overview",[6820,6821,6822,6823],"openshift-builds","openshift-pipelines","openshift-gitops","jenkins-ci-cd","/documentation/openshift_container_platform/4.8/html-single/cicd/index#ci-cd-overview",{"title":6826,"visible":10,"weight":35,"urlFragment":6827,"anchor":16,"singlePageAnchor":6827,"subChapters":6828,"docTitle":6813,"url":6974},"Builds","builds",[6829,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,1006,6913,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,1546,6962,6963,6964,6965,6966,6967,6968,6969,6970,6971,6972,6973,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-single/cicd/index#builds",{"title":6976,"visible":10,"weight":46,"urlFragment":6977,"anchor":16,"singlePageAnchor":6977,"subChapters":6978,"docTitle":6813,"url":6990},"Migrating from Jenkins to Tekton","migrating-from-jenkins-to-tekton",[6979,6980,6981,6982,6983,6984,6985,6986,6987,6988,6989],"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-single/cicd/index#migrating-from-jenkins-to-tekton",{"title":6992,"visible":10,"weight":68,"urlFragment":6993,"anchor":16,"singlePageAnchor":6993,"subChapters":6994,"docTitle":6813,"url":7099},"Pipelines","pipelines",[6995,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,1626,7052,7053,7054,7055,2636,7056,7057,7058,7059,1038,7060,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],"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-single/cicd/index#pipelines",{"title":7101,"visible":10,"weight":435,"urlFragment":7102,"anchor":16,"singlePageAnchor":7102,"subChapters":7103,"docTitle":6813,"url":7224},"GitOps","gitops",[7104,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],"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-single/cicd/index#gitops",{"title":7226,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":7227,"docTitle":7228,"url":7229,"sections":7230},"Images",[],"images","/documentation/openshift_container_platform/4.8/html-single/images/index",[7231,7250,7266,7278,7297,7317,7337,7343,7351,7364,7389,7403],{"title":7232,"visible":10,"weight":23,"urlFragment":7233,"anchor":16,"singlePageAnchor":7233,"subChapters":7234,"docTitle":7228,"url":7249},"Overview of images","overview-of-images",[7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248],"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-single/images/index#overview-of-images",{"title":7251,"visible":10,"weight":35,"urlFragment":7252,"anchor":16,"singlePageAnchor":7252,"subChapters":7253,"docTitle":7228,"url":7265},"Configuring the Cluster Samples Operator","configuring-samples-operator",[7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264],"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-single/images/index#configuring-samples-operator",{"title":7267,"visible":10,"weight":46,"urlFragment":7268,"anchor":16,"singlePageAnchor":7268,"subChapters":7269,"docTitle":7228,"url":7277},"Using the Cluster Samples Operator with an alternate registry","samples-operator-alt-registry",[7270,7271,7272,7273,7274,7275,7276],"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-single/images/index#samples-operator-alt-registry",{"title":7279,"visible":10,"weight":68,"urlFragment":7280,"anchor":16,"singlePageAnchor":7280,"subChapters":7281,"docTitle":7228,"url":7296},"Creating images","creating-images",[7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295],"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-single/images/index#creating-images",{"title":7298,"visible":10,"weight":435,"urlFragment":7299,"anchor":16,"singlePageAnchor":7299,"subChapters":7300,"docTitle":7228,"url":7316},"Managing images","managing-images",[7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312,7313,7314,7315],"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-single/images/index#managing-images",{"title":7318,"visible":10,"weight":453,"urlFragment":7319,"anchor":16,"singlePageAnchor":7319,"subChapters":7320,"docTitle":7228,"url":7336},"Managing image streams","managing-image-streams",[7321,7322,7323,7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335],"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-single/images/index#managing-image-streams",{"title":7338,"visible":10,"weight":468,"urlFragment":7339,"anchor":16,"singlePageAnchor":7339,"subChapters":7340,"docTitle":7228,"url":7342},"Using image streams with Kubernetes resources","using-imagestreams-with-kube-resources",[7341],"images-managing-images-enabling-imagestreams-kube_using-imagestreams-with-kube-resources","/documentation/openshift_container_platform/4.8/html-single/images/index#using-imagestreams-with-kube-resources",{"title":7344,"visible":10,"weight":869,"urlFragment":7345,"anchor":16,"singlePageAnchor":7345,"subChapters":7346,"docTitle":7228,"url":7350},"Triggering updates on image stream changes","triggering-updates-on-imagestream-changes",[7347,7348,7349],"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-single/images/index#triggering-updates-on-imagestream-changes",{"title":7352,"visible":10,"weight":877,"urlFragment":7353,"anchor":16,"singlePageAnchor":7353,"subChapters":7354,"docTitle":7228,"url":7363},"Image configuration resources","image-configuration",[7355,7356,7357,7358,7359,7360,7361,7362],"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-single/images/index#image-configuration",{"title":7365,"visible":10,"weight":888,"urlFragment":7366,"anchor":16,"singlePageAnchor":7366,"subChapters":7367,"docTitle":7228,"url":7388},"Using templates","using-templates",[7368,7369,7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387],"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-single/images/index#using-templates",{"title":7390,"visible":10,"weight":899,"urlFragment":7391,"anchor":16,"singlePageAnchor":7391,"subChapters":7392,"docTitle":7228,"url":7402},"Using Ruby on Rails","templates-using-ruby-on-rails",[1006,7393,7394,7395,7396,7397,7398,7399,7400,7401],"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-single/images/index#templates-using-ruby-on-rails",{"title":7404,"visible":10,"weight":906,"urlFragment":7405,"anchor":16,"singlePageAnchor":7405,"subChapters":7406,"docTitle":7228,"url":7432},"Using images","using-images",[7407,7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,1626,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431],"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-single/images/index#using-images",{"title":7434,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":7435,"docTitle":7436,"url":7437,"sections":7438},"Nodes",[],"nodes","/documentation/openshift_container_platform/4.8/html-single/nodes/index",[7439,7447,7528,7611,7628,7695,7747,7805],{"title":7440,"visible":10,"weight":23,"urlFragment":7441,"anchor":16,"singlePageAnchor":7441,"subChapters":7442,"docTitle":7436,"url":7446},"Overview of nodes","overview-of-nodes",[7443,7444,7445],"nodes-overview","pods-overview","containers-overview","/documentation/openshift_container_platform/4.8/html-single/nodes/index#overview-of-nodes",{"title":7448,"visible":10,"weight":35,"urlFragment":7449,"anchor":16,"singlePageAnchor":7449,"subChapters":7450,"docTitle":7436,"url":7527},"Working with pods","working-with-pods",[7451,7452,7453,1546,7454,7455,7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,1598,7474,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],"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-single/nodes/index#working-with-pods",{"title":7529,"visible":10,"weight":46,"urlFragment":7530,"anchor":16,"singlePageAnchor":7530,"subChapters":7531,"docTitle":7436,"url":7610},"Controlling pod placement onto nodes (scheduling)","controlling-pod-placement-onto-nodes-scheduling",[7532,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,1626,7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609],"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-single/nodes/index#controlling-pod-placement-onto-nodes-scheduling",{"title":7612,"visible":10,"weight":68,"urlFragment":7613,"anchor":16,"singlePageAnchor":7613,"subChapters":7614,"docTitle":7436,"url":7627},"Using Jobs and DaemonSets","using-jobs-and-daemonsets",[7615,7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626],"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-single/nodes/index#using-jobs-and-daemonsets",{"title":7629,"visible":10,"weight":435,"urlFragment":7630,"anchor":16,"singlePageAnchor":7630,"subChapters":7631,"docTitle":7436,"url":7694},"Working with nodes","working-with-nodes",[7632,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],"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-single/nodes/index#working-with-nodes",{"title":7696,"visible":10,"weight":453,"urlFragment":7697,"anchor":16,"singlePageAnchor":7697,"subChapters":7698,"docTitle":7436,"url":7746},"Working with containers","working-with-containers",[7699,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],"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-single/nodes/index#working-with-containers",{"title":7748,"visible":10,"weight":468,"urlFragment":7749,"anchor":16,"singlePageAnchor":7749,"subChapters":7750,"docTitle":7436,"url":7804},"Working with clusters","working-with-clusters",[7751,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],"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-single/nodes/index#working-with-clusters",{"title":7806,"visible":10,"weight":869,"urlFragment":7807,"anchor":16,"singlePageAnchor":7807,"subChapters":7808,"docTitle":7436,"url":7813},"Remote worker nodes on the network edge","remote-worker-nodes-on-the-network-edge",[7809,7810,7811,7812],"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-single/nodes/index#remote-worker-nodes-on-the-network-edge",{"title":7815,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":7816,"docTitle":7817,"url":7818,"sections":7819},"Sandboxed Containers Support for OpenShift",[],"sandboxed_containers_support_for_openshift","/documentation/openshift_container_platform/4.8/html-single/sandboxed_containers_support_for_openshift/index",[7820,7833,7841,7857,7869],{"title":7821,"visible":10,"weight":23,"urlFragment":7822,"anchor":16,"singlePageAnchor":7822,"subChapters":7823,"docTitle":7817,"url":7832},"{sandboxed-containers-first} 1.0 release notes","sandboxed-containers-4-8-release-notes",[7824,7825,7826,7827,7828,7829,7830,7831],"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-single/sandboxed_containers_support_for_openshift/index#sandboxed-containers-4-8-release-notes",{"title":7834,"visible":10,"weight":35,"urlFragment":7835,"anchor":16,"singlePageAnchor":7835,"subChapters":7836,"docTitle":7817,"url":7840},"Understanding OpenShift sandboxed containers","understanding-sandboxed-containers",[7837,7838,7839],"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-single/sandboxed_containers_support_for_openshift/index#understanding-sandboxed-containers",{"title":7842,"visible":10,"weight":46,"urlFragment":7843,"anchor":16,"singlePageAnchor":7843,"subChapters":7844,"docTitle":7817,"url":7856},"Deploying OpenShift sandboxed containers workloads","deploying-sandboxed-containers-workloads",[7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855],"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-single/sandboxed_containers_support_for_openshift/index#deploying-sandboxed-containers-workloads",{"title":7858,"visible":10,"weight":68,"urlFragment":7859,"anchor":16,"singlePageAnchor":7859,"subChapters":7860,"docTitle":7817,"url":7868},"Uninstalling OpenShift sandboxed containers","uninstalling-sandboxed-containers",[7861,7862,7863,7864,7865,7866,7867],"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-single/sandboxed_containers_support_for_openshift/index#uninstalling-sandboxed-containers",{"title":7870,"visible":10,"weight":435,"urlFragment":7871,"anchor":16,"singlePageAnchor":7871,"subChapters":7872,"docTitle":7817,"url":7875},"Upgrade OpenShift sandboxed containers","upgrade-sandboxed-containers",[7873,7874],"sandboxed-containers-upgrade-operator","sandboxed-containers-upgrade-artifacts","/documentation/openshift_container_platform/4.8/html-single/sandboxed_containers_support_for_openshift/index#upgrade-sandboxed-containers",{"title":7877,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":7878,"docTitle":7879,"url":7880,"sections":7881},"Operators",[],"operators","/documentation/openshift_container_platform/4.8/html-single/operators/index",[7882,7890,7996,8009,8064,8247],{"title":7883,"visible":10,"weight":23,"urlFragment":7884,"anchor":16,"singlePageAnchor":7884,"subChapters":7885,"docTitle":7879,"url":7889},"Operators overview","operators-overview",[7886,7887,7888],"operators-overview-developer-tasks","operators-overview-administrator-tasks","operators-overview-next-steps","/documentation/openshift_container_platform/4.8/html-single/operators/index#operators-overview",{"title":7891,"visible":10,"weight":35,"urlFragment":7892,"anchor":16,"singlePageAnchor":7892,"subChapters":7893,"docTitle":7879,"url":7995},"Understanding Operators","understanding-operators",[7894,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,1546,7966,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],"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-single/operators/index#understanding-operators",{"title":7997,"visible":10,"weight":46,"urlFragment":7998,"anchor":16,"singlePageAnchor":7998,"subChapters":7999,"docTitle":7879,"url":8008},"User tasks","user-tasks",[8000,8001,8002,8003,8004,8005,8006,8007],"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-single/operators/index#user-tasks",{"title":8010,"visible":10,"weight":68,"urlFragment":8011,"anchor":16,"singlePageAnchor":8011,"subChapters":8012,"docTitle":7879,"url":8063},"Administrator tasks","administrator-tasks",[8013,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],"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-single/operators/index#administrator-tasks",{"title":8065,"visible":10,"weight":435,"urlFragment":8066,"anchor":16,"singlePageAnchor":8066,"subChapters":8067,"docTitle":7879,"url":8246},"Developing Operators","developing-operators",[8068,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],"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-single/operators/index#developing-operators",{"title":8248,"visible":10,"weight":453,"urlFragment":8249,"anchor":16,"singlePageAnchor":8249,"subChapters":8250,"docTitle":7879,"url":8281},"Cluster Operators reference","cluster-operators-ref",[8251,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],"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-single/operators/index#cluster-operators-ref",{"title":8283,"visible":10,"categoryName":10,"sections":8284},"Monitor",[8285,8698,8807,9063],{"title":8286,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":8287,"docTitle":5014,"url":8288,"sections":8289},"Logging",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index",[8290,8419,8439,8448,8492,8498,8505,8532,8540,8546,8553,8561,8594,8600,8605,8609,8613,8618,8622,8626,8630,8634,8638,8642,8647,8652,8657,8691],{"title":8291,"visible":10,"weight":23,"urlFragment":8292,"anchor":16,"singlePageAnchor":8292,"subChapters":8293,"docTitle":5014,"url":8418},"Release notes for Logging","release-notes",[8294,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],"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-single/logging/index#release-notes",{"title":8420,"visible":10,"weight":35,"urlFragment":8421,"anchor":16,"singlePageAnchor":8421,"subChapters":8422,"docTitle":5014,"url":8438},"Understanding Red Hat OpenShift Logging","cluster-logging",[8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437],"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-single/logging/index#cluster-logging",{"title":8440,"visible":10,"weight":46,"urlFragment":8441,"anchor":16,"singlePageAnchor":8441,"subChapters":8442,"docTitle":5014,"url":8447},"Installing OpenShift Logging","cluster-logging-deploying",[8443,2703,8444,2730,8445,8446],"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-single/logging/index#cluster-logging-deploying",{"title":8449,"visible":10,"weight":68,"urlFragment":8450,"anchor":16,"singlePageAnchor":8450,"subChapters":8451,"docTitle":5014,"url":8491},"Configuring your Logging deployment","configuring-your-logging-deployment",[8452,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],"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-single/logging/index#configuring-your-logging-deployment",{"title":8493,"visible":10,"weight":435,"urlFragment":8494,"anchor":16,"singlePageAnchor":8494,"subChapters":8495,"docTitle":5014,"url":8497},"Viewing logs for a resource","vewing-resource-logs",[8496],"viewing-resource-logs-cli-console_viewing-resource-logs","/documentation/openshift_container_platform/4.8/html-single/logging/index#vewing-resource-logs",{"title":8499,"visible":10,"weight":453,"urlFragment":8500,"anchor":16,"singlePageAnchor":8500,"subChapters":8501,"docTitle":5014,"url":8504},"Viewing cluster logs by using Kibana","cluster-logging-visualizer-using",[8502,8503],"cluster-logging-visualizer-indices_cluster-logging-visualizer","cluster-logging-visualizer-kibana_cluster-logging-visualizer","/documentation/openshift_container_platform/4.8/html-single/logging/index#cluster-logging-visualizer-using",{"title":8506,"visible":10,"weight":468,"urlFragment":8507,"anchor":16,"singlePageAnchor":8507,"subChapters":8508,"docTitle":5014,"url":8531},"Forwarding logs to external third-party logging systems","cluster-logging-external",[8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530],"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-single/logging/index#cluster-logging-external",{"title":8533,"visible":10,"weight":869,"urlFragment":8534,"anchor":16,"singlePageAnchor":8534,"subChapters":8535,"docTitle":5014,"url":8539},"Enabling JSON logging","cluster-logging-enabling-json-logging",[8536,8537,8538],"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-single/logging/index#cluster-logging-enabling-json-logging",{"title":8541,"visible":10,"weight":877,"urlFragment":8542,"anchor":16,"singlePageAnchor":8542,"subChapters":8543,"docTitle":5014,"url":8545},"Collecting and storing Kubernetes events","cluster-logging-eventrouter",[8544],"cluster-logging-eventrouter-deploy_cluster-logging-eventrouter","/documentation/openshift_container_platform/4.8/html-single/logging/index#cluster-logging-eventrouter",{"title":8547,"visible":10,"weight":888,"urlFragment":8548,"anchor":16,"singlePageAnchor":8548,"subChapters":8549,"docTitle":5014,"url":8552},"Updating OpenShift Logging","cluster-logging-upgrading",[8550,8551],"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-single/logging/index#cluster-logging-upgrading",{"title":8554,"visible":10,"weight":899,"urlFragment":8555,"anchor":16,"singlePageAnchor":8555,"subChapters":8556,"docTitle":5014,"url":8560},"Viewing cluster dashboards","cluster-logging-dashboards",[8557,8558,8559],"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-single/logging/index#cluster-logging-dashboards",{"title":8562,"visible":10,"weight":906,"urlFragment":8563,"anchor":16,"singlePageAnchor":8563,"subChapters":8564,"docTitle":5014,"url":8593},"Troubleshooting Logging","troubleshooting-logging",[8565,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],"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-single/logging/index#troubleshooting-logging",{"title":8595,"visible":10,"weight":915,"urlFragment":8596,"anchor":16,"singlePageAnchor":8596,"subChapters":8597,"docTitle":5014,"url":8599},"Uninstalling OpenShift Logging","cluster-logging-uninstall",[8598],"cluster-logging-uninstall_cluster-logging-uninstall","/documentation/openshift_container_platform/4.8/html-single/logging/index#cluster-logging-uninstall",{"title":8601,"visible":10,"weight":2799,"urlFragment":8602,"anchor":16,"singlePageAnchor":8602,"subChapters":8603,"docTitle":5014,"url":8604},"Log Record Fields","cluster-logging-exported-fields",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#cluster-logging-exported-fields",{"title":8606,"visible":10,"weight":3064,"urlFragment":8606,"anchor":16,"singlePageAnchor":8606,"subChapters":8607,"docTitle":5014,"url":8608},"message",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#message",{"title":8610,"visible":10,"weight":3332,"urlFragment":8610,"anchor":16,"singlePageAnchor":8610,"subChapters":8611,"docTitle":5014,"url":8612},"structured",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#structured",{"title":8614,"visible":10,"weight":3388,"urlFragment":8615,"anchor":16,"singlePageAnchor":8615,"subChapters":8616,"docTitle":5014,"url":8617},"@timestamp","timestamp",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#timestamp",{"title":8619,"visible":10,"weight":3414,"urlFragment":8619,"anchor":16,"singlePageAnchor":8619,"subChapters":8620,"docTitle":5014,"url":8621},"hostname",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#hostname",{"title":8623,"visible":10,"weight":3429,"urlFragment":8623,"anchor":16,"singlePageAnchor":8623,"subChapters":8624,"docTitle":5014,"url":8625},"ipaddr4",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#ipaddr4",{"title":8627,"visible":10,"weight":3441,"urlFragment":8627,"anchor":16,"singlePageAnchor":8627,"subChapters":8628,"docTitle":5014,"url":8629},"ipaddr6",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#ipaddr6",{"title":8631,"visible":10,"weight":4652,"urlFragment":8631,"anchor":16,"singlePageAnchor":8631,"subChapters":8632,"docTitle":5014,"url":8633},"level",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#level",{"title":8635,"visible":10,"weight":4661,"urlFragment":8635,"anchor":16,"singlePageAnchor":8635,"subChapters":8636,"docTitle":5014,"url":8637},"pid",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#pid",{"title":8639,"visible":10,"weight":4673,"urlFragment":8639,"anchor":16,"singlePageAnchor":8639,"subChapters":8640,"docTitle":5014,"url":8641},"service",[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#service",{"title":8643,"visible":10,"weight":8644,"urlFragment":8643,"anchor":16,"singlePageAnchor":8643,"subChapters":8645,"docTitle":5014,"url":8646},"tags",25,[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#tags",{"title":8648,"visible":10,"weight":8649,"urlFragment":8648,"anchor":16,"singlePageAnchor":8648,"subChapters":8650,"docTitle":5014,"url":8651},"file",26,[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#file",{"title":8653,"visible":10,"weight":8654,"urlFragment":8653,"anchor":16,"singlePageAnchor":8653,"subChapters":8655,"docTitle":5014,"url":8656},"offset",27,[],"/documentation/openshift_container_platform/4.8/html-single/logging/index#offset",{"title":8658,"visible":10,"weight":8659,"urlFragment":8660,"anchor":16,"singlePageAnchor":8660,"subChapters":8661,"docTitle":5014,"url":8690},"kubernetes",28,"cluster-logging-exported-fields-kubernetes_cluster-logging-exported-fields",[8662,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],"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-single/logging/index#cluster-logging-exported-fields-kubernetes_cluster-logging-exported-fields",{"title":8692,"visible":10,"weight":8693,"urlFragment":8694,"anchor":16,"singlePageAnchor":8694,"subChapters":8695,"docTitle":5014,"url":8697},"OpenShift",29,"openshift",[8696],"openshift-labels","/documentation/openshift_container_platform/4.8/html-single/logging/index#openshift",{"title":8699,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":8700,"docTitle":8701,"url":8702,"sections":8703},"Monitoring",[],"monitoring","/documentation/openshift_container_platform/4.8/html-single/monitoring/index",[8704,8716,8739,8751,8764,8786,8793,8800],{"title":8705,"visible":10,"weight":23,"urlFragment":8706,"anchor":16,"singlePageAnchor":8706,"subChapters":8707,"docTitle":8701,"url":8715},"Monitoring overview","monitoring-overview",[8708,8709,8710,8711,8712,8713,8714,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-single/monitoring/index#monitoring-overview",{"title":8717,"visible":10,"weight":35,"urlFragment":8718,"anchor":16,"singlePageAnchor":8718,"subChapters":8719,"docTitle":8701,"url":8738},"Configuring the monitoring stack","configuring-the-monitoring-stack",[1006,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,3634,8730,8731,8732,8733,8734,8735,8736,8737,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-single/monitoring/index#configuring-the-monitoring-stack",{"title":8740,"visible":10,"weight":46,"urlFragment":8741,"anchor":16,"singlePageAnchor":8741,"subChapters":8742,"docTitle":8701,"url":8750},"Enabling monitoring for user-defined projects","enabling-monitoring-for-user-defined-projects",[8743,8744,8745,8746,8747,8748,8749,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-single/monitoring/index#enabling-monitoring-for-user-defined-projects",{"title":8752,"visible":10,"weight":68,"urlFragment":8753,"anchor":16,"singlePageAnchor":8753,"subChapters":8754,"docTitle":8701,"url":8763},"Managing metrics","managing-metrics",[8755,8756,8757,8758,8759,8760,8761,8762,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-single/monitoring/index#managing-metrics",{"title":8765,"visible":10,"weight":435,"urlFragment":8766,"anchor":16,"singlePageAnchor":8766,"subChapters":8767,"docTitle":8701,"url":8785},"Managing alerts","managing-alerts",[8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780,8781,8782,8783,8784,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-single/monitoring/index#managing-alerts",{"title":8787,"visible":10,"weight":453,"urlFragment":8788,"anchor":16,"singlePageAnchor":8788,"subChapters":8789,"docTitle":8701,"url":8792},"Reviewing monitoring dashboards","reviewing-monitoring-dashboards",[8790,8791,1112],"reviewing-monitoring-dashboards-admin_reviewing-monitoring-dashboards","reviewing-monitoring-dashboards-developer_reviewing-monitoring-dashboards","/documentation/openshift_container_platform/4.8/html-single/monitoring/index#reviewing-monitoring-dashboards",{"title":8794,"visible":10,"weight":468,"urlFragment":8795,"anchor":16,"singlePageAnchor":8795,"subChapters":8796,"docTitle":8701,"url":8799},"Accessing third-party UIs","accessing-third-party-uis",[8797,8798],"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-single/monitoring/index#accessing-third-party-uis",{"title":8801,"visible":10,"weight":869,"urlFragment":8802,"anchor":16,"singlePageAnchor":8802,"subChapters":8803,"docTitle":8701,"url":8806},"Troubleshooting monitoring issues","troubleshooting-monitoring-issues",[8804,8805],"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-single/monitoring/index#troubleshooting-monitoring-issues",{"title":8808,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":8809,"docTitle":8810,"url":8811,"sections":8812},"Scalability and performance",[],"scalability_and_performance","/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index",[8813,8830,8851,8863,8875,8886,8892,8900,8907,8922,8933,8943,8951,8958,8966,8977,8987,9037,9051],{"title":8814,"visible":10,"weight":23,"urlFragment":8815,"anchor":16,"singlePageAnchor":8815,"subChapters":8816,"docTitle":8810,"url":8829},"Recommended host practices","recommended-host-practices",[8817,8818,8819,8820,8821,8822,8823,8824,8825,8826,8827,8828,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-single/scalability_and_performance/index#recommended-host-practices",{"title":8831,"visible":10,"weight":35,"urlFragment":8832,"anchor":16,"singlePageAnchor":8832,"subChapters":8833,"docTitle":8810,"url":8850},"Recommended host practices for IBM Z & LinuxONE environments","ibm-z-recommended-host-practices",[8834,8835,8836,8837,8838,8839,8840,8841,8842,8843,8844,8845,8846,8847,8848,8849],"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-single/scalability_and_performance/index#ibm-z-recommended-host-practices",{"title":8852,"visible":10,"weight":46,"urlFragment":8853,"anchor":16,"singlePageAnchor":8853,"subChapters":8854,"docTitle":8810,"url":8862},"Recommended cluster scaling practices","recommended-cluster-scaling-practices",[8855,8856,8857,8858,8859,8860,4889,4890,8861],"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-single/scalability_and_performance/index#recommended-cluster-scaling-practices",{"title":8864,"visible":10,"weight":68,"urlFragment":8865,"anchor":16,"singlePageAnchor":8865,"subChapters":8866,"docTitle":8810,"url":8874},"Using the Node Tuning Operator","using-node-tuning-operator",[8867,8868,8869,8870,8871,8872,8873],"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-single/scalability_and_performance/index#using-node-tuning-operator",{"title":8876,"visible":10,"weight":435,"urlFragment":8877,"anchor":16,"singlePageAnchor":8877,"subChapters":8878,"docTitle":8810,"url":8885},"Using Cluster Loader","using_cluster_loader_node-tuning-operator",[8879,8880,8881,8882,8883,8884],"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-single/scalability_and_performance/index#using_cluster_loader_node-tuning-operator",{"title":8887,"visible":10,"weight":453,"urlFragment":8888,"anchor":16,"singlePageAnchor":8888,"subChapters":8889,"docTitle":8810,"url":8891},"Using CPU Manager","using-cpu-manager",[8890],"seting_up_cpu_manager_using-cpu-manager","/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#using-cpu-manager",{"title":8893,"visible":10,"weight":468,"urlFragment":8894,"anchor":16,"singlePageAnchor":8894,"subChapters":8895,"docTitle":8810,"url":8899},"Using Topology Manager","using-topology-manager",[8896,8897,8898],"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-single/scalability_and_performance/index#using-topology-manager",{"title":8901,"visible":10,"weight":869,"urlFragment":8902,"anchor":16,"singlePageAnchor":8902,"subChapters":8903,"docTitle":8810,"url":8906},"Scaling the Cluster Monitoring Operator","scaling-cluster-monitoring-operator",[8904,8905],"prometheus-database-storage-requirements_cluster-monitoring-operator","configuring-cluster-monitoring_cluster-monitoring-operator","/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#scaling-cluster-monitoring-operator",{"title":8908,"visible":10,"weight":877,"urlFragment":8909,"anchor":16,"singlePageAnchor":8909,"subChapters":8910,"docTitle":8810,"url":8921},"The Node Feature Discovery Operator","node-feature-discovery-operator",[8911,8912,8913,8914,8915,8916,8917,8918,8919,8920],"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-single/scalability_and_performance/index#node-feature-discovery-operator",{"title":8923,"visible":10,"weight":888,"urlFragment":8924,"anchor":16,"singlePageAnchor":8924,"subChapters":8925,"docTitle":8810,"url":8932},"The Driver Toolkit","driver-toolkit",[8926,8927,8928,8929,8930,8931],"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-single/scalability_and_performance/index#driver-toolkit",{"title":8934,"visible":10,"weight":899,"urlFragment":8935,"anchor":16,"singlePageAnchor":8935,"subChapters":8936,"docTitle":8810,"url":8942},"Planning your environment according to object maximums","planning-your-environment-according-to-object-maximums",[8937,8938,8939,8940,8941],"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-single/scalability_and_performance/index#planning-your-environment-according-to-object-maximums",{"title":8944,"visible":10,"weight":906,"urlFragment":8945,"anchor":16,"singlePageAnchor":8945,"subChapters":8946,"docTitle":8810,"url":8950},"Optimizing storage","optimizing-storage",[8947,8948,5011,4683,5012,5013,5014,5015,5016,8949],"available-persistent-storage-options_persistent-storage","recommended-configurable-storage-technology_persistent-storage","data-storage-management_persistent-storage","/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#optimizing-storage",{"title":8952,"visible":10,"weight":915,"urlFragment":8953,"anchor":16,"singlePageAnchor":8953,"subChapters":8954,"docTitle":8810,"url":8957},"Optimizing routing","routing-optimization",[8955,8956],"baseline-router-performance_routing-optimization","router-performance-optimizations_routing-optimization","/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#routing-optimization",{"title":8959,"visible":10,"weight":2799,"urlFragment":8960,"anchor":16,"singlePageAnchor":8960,"subChapters":8961,"docTitle":8810,"url":8965},"Optimizing networking","optimizing-networking",[8962,8963,8964],"optimizing-mtu_optimizing-networking","recommended-install-practices_optimizing-networking","ipsec-impact_optimizing-networking","/documentation/openshift_container_platform/4.8/html-single/scalability_and_performance/index#optimizing-networking",{"title":8967,"visible":10,"weight":3064,"urlFragment":8968,"anchor":16,"singlePageAnchor":8968,"subChapters":8969,"docTitle":8810,"url":8976},"Managing bare metal hosts","managing-bare-metal-hosts",[8970,8971,8972,8973,8974,8975],"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-single/scalability_and_performance/index#managing-bare-metal-hosts",{"title":8978,"visible":10,"weight":3332,"urlFragment":8979,"anchor":16,"singlePageAnchor":8979,"subChapters":8980,"docTitle":8810,"url":8986},"What huge pages do and how they are consumed by applications","what-huge-pages-do-and-how-they-are-consumed",[8981,8982,8983,8984,4903,8985],"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-single/scalability_and_performance/index#what-huge-pages-do-and-how-they-are-consumed",{"title":8988,"visible":10,"weight":3388,"urlFragment":8989,"anchor":16,"singlePageAnchor":8989,"subChapters":8990,"docTitle":8810,"url":9036},"Performance Addon Operator for low latency nodes","cnf-performance-addon-operator-for-low-latency-nodes",[8991,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],"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-single/scalability_and_performance/index#cnf-performance-addon-operator-for-low-latency-nodes",{"title":9038,"visible":10,"weight":3414,"urlFragment":9039,"anchor":16,"singlePageAnchor":9039,"subChapters":9040,"docTitle":8810,"url":9050},"Performing latency tests for platform verification","cnf-performing-platform-verification-latency-tests",[9041,9042,9043,9044,9045,9046,9047,9048,9049],"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-single/scalability_and_performance/index#cnf-performing-platform-verification-latency-tests",{"title":9052,"visible":10,"weight":3429,"urlFragment":9053,"anchor":16,"singlePageAnchor":9053,"subChapters":9054,"docTitle":8810,"url":9062},"Creating a performance profile","cnf-create-performance-profiles",[9055,9056,9057,9058,9059,9060,9061],"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-single/scalability_and_performance/index#cnf-create-performance-profiles",{"title":9064,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":9065,"docTitle":9066,"url":9067,"sections":9068},"Support",[],"support","/documentation/openshift_container_platform/4.8/html-single/support/index",[9069,9078,9084,9094,9128,9145,9151],{"title":9070,"visible":10,"weight":23,"urlFragment":9071,"anchor":16,"singlePageAnchor":9071,"subChapters":9072,"docTitle":9066,"url":9077},"Support overview","support-overview",[9073,9074,9075,9076],"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-single/support/index#support-overview",{"title":9079,"visible":10,"weight":35,"urlFragment":9080,"anchor":16,"singlePageAnchor":9080,"subChapters":9081,"docTitle":9066,"url":9083},"Managing your cluster resources","managing-cluster-resources",[9082],"support-cluster-resources_managing-cluster-resources","/documentation/openshift_container_platform/4.8/html-single/support/index#managing-cluster-resources",{"title":9085,"visible":10,"weight":46,"urlFragment":9086,"anchor":16,"singlePageAnchor":9086,"subChapters":9087,"docTitle":9066,"url":9093},"Getting support","getting-support",[9088,9089,9090,9091,9092],"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-single/support/index#getting-support",{"title":9095,"visible":10,"weight":68,"urlFragment":9096,"anchor":16,"singlePageAnchor":9096,"subChapters":9097,"docTitle":9066,"url":9127},"Remote health monitoring with connected clusters","remote-health-monitoring-with-connected-clusters",[9098,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],"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-single/support/index#remote-health-monitoring-with-connected-clusters",{"title":9129,"visible":10,"weight":435,"urlFragment":9130,"anchor":16,"singlePageAnchor":9130,"subChapters":9131,"docTitle":9066,"url":9144},"Gathering data about your cluster","gathering-cluster-data",[9132,9133,9134,9135,9136,9137,9138,9139,9140,9141,9142,9143],"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-single/support/index#gathering-cluster-data",{"title":9146,"visible":10,"weight":453,"urlFragment":9147,"anchor":16,"singlePageAnchor":9147,"subChapters":9148,"docTitle":9066,"url":9150},"Summarizing cluster specifications","summarizing-cluster-specifications",[9149],"summarizing-cluster-specifications-through-clusterversion_summarizing-cluster-specifications","/documentation/openshift_container_platform/4.8/html-single/support/index#summarizing-cluster-specifications",{"title":5262,"visible":10,"weight":468,"urlFragment":5612,"anchor":16,"singlePageAnchor":5612,"subChapters":9152,"docTitle":9066,"url":9227},[9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163,9164,9165,9166,1546,9167,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,1598,9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,1626,9221,9222,9223,9224,9225,9226],"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-single/support/index#troubleshooting",{"title":9229,"visible":10,"categoryName":10,"sections":9230},"Integration",[9231,9868,9956,10502,11107],{"title":9232,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":9233,"docTitle":9234,"url":9235,"sections":9236},"Service Mesh",[],"service_mesh","/documentation/openshift_container_platform/4.8/html-single/service_mesh/index",[9237,9670],{"title":9238,"visible":10,"weight":23,"urlFragment":9239,"anchor":16,"singlePageAnchor":9239,"subChapters":9240,"docTitle":9234,"url":9669},"Service Mesh 2.x","service-mesh-2-x",[9241,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,971,9338,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,1006,9370,9371,9372,9373,9374,9375,9376,9377,997,9378,9379,9380,1015,9381,9382,9383,9384,9385,9386,9387,9388,9389,1546,1036,9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,1062,9404,1017,9405,9406,9407,9408,1112,9409,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],"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-single/service_mesh/index#service-mesh-2-x",{"title":9671,"visible":10,"weight":35,"urlFragment":9672,"anchor":16,"singlePageAnchor":9672,"subChapters":9673,"docTitle":9234,"url":9867},"Service Mesh 1.x","service-mesh-1-x",[9674,9675,9676,9677,9678,1038,9679,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,1140,9739,9740,9741,9742,9743,9744,9745,9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,1089,9758,9759,9760,9761,1172,9762,1114,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776,9777,1292,9778,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,1598,9808,1142,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822,9823,9824,9825,9826,9827,1174,9828,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],"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-single/service_mesh/index#service-mesh-1-x",{"title":9869,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":9870,"docTitle":9871,"url":9872,"sections":9873},"Distributed tracing",[],"distributed_tracing","/documentation/openshift_container_platform/4.8/html-single/distributed_tracing/index",[9874,9904,9913],{"title":9875,"visible":10,"weight":23,"urlFragment":9876,"anchor":16,"singlePageAnchor":9876,"subChapters":9877,"docTitle":9871,"url":9903},"Distributed tracing release notes","distr-tracing-release-notes",[9878,9879,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,9890,9891,9892,9893,9894,9895,9896,9897,9898,9899,9900,9901,9902],"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-single/distributed_tracing/index#distr-tracing-release-notes",{"title":9905,"visible":10,"weight":35,"urlFragment":9906,"anchor":16,"singlePageAnchor":9906,"subChapters":9907,"docTitle":9871,"url":9912},"Distributed tracing architecture","distributed-tracing-architecture",[9908,9909,9910,9911],"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-single/distributed_tracing/index#distributed-tracing-architecture",{"title":9914,"visible":10,"weight":46,"urlFragment":9915,"anchor":16,"singlePageAnchor":9915,"subChapters":9916,"docTitle":9871,"url":9955},"Distributed tracing installation","distributed-tracing-installation",[9917,1006,9918,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],"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-single/distributed_tracing/index#distributed-tracing-installation",{"title":9957,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":9958,"docTitle":9959,"url":9960,"sections":9961},"Serverless",[],"serverless","/documentation/openshift_container_platform/4.8/html-single/serverless/index",[9962,10015,10039,10067,10122,10250,10328,10347,10356,10367,10385,10490],{"title":76,"visible":10,"weight":23,"urlFragment":9963,"anchor":16,"singlePageAnchor":9963,"subChapters":9964,"docTitle":9959,"url":10014},"serverless-release-notes",[9965,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],"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-single/serverless/index#serverless-release-notes",{"title":10016,"visible":10,"weight":35,"urlFragment":10017,"anchor":16,"singlePageAnchor":10017,"subChapters":10018,"docTitle":9959,"url":10038},"Discover","discover",[10019,10020,10021,10022,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033,10034,10035,10036,10037],"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-single/serverless/index#discover",{"title":922,"visible":10,"weight":46,"urlFragment":10040,"anchor":16,"singlePageAnchor":10040,"subChapters":10041,"docTitle":9959,"url":10066},"install",[10042,10043,10044,10045,10046,10047,10048,10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064,10065],"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-single/serverless/index#install",{"title":10068,"visible":10,"weight":68,"urlFragment":10069,"anchor":16,"singlePageAnchor":10069,"subChapters":10070,"docTitle":9959,"url":10121},"Knative CLI","knative-cli",[10071,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],"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-single/serverless/index#knative-cli",{"title":6538,"visible":10,"weight":435,"urlFragment":10123,"anchor":16,"singlePageAnchor":10123,"subChapters":10124,"docTitle":9959,"url":10249},"develop",[10125,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],"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-single/serverless/index#develop",{"title":10251,"visible":10,"weight":453,"urlFragment":10252,"anchor":16,"singlePageAnchor":10252,"subChapters":10253,"docTitle":9959,"url":10327},"Administer","administer",[10254,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],"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-single/serverless/index#administer",{"title":8283,"visible":10,"weight":468,"urlFragment":10329,"anchor":16,"singlePageAnchor":10329,"subChapters":10330,"docTitle":9959,"url":10346},"monitor",[10331,10332,10333,10334,10335,10336,10337,10338,10339,10340,10341,10342,10343,10344,10345],"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-single/serverless/index#monitor",{"title":10348,"visible":10,"weight":869,"urlFragment":10349,"anchor":16,"singlePageAnchor":10349,"subChapters":10350,"docTitle":9959,"url":10355},"Tracing requests","serverless-tracing",[10351,10352,10353,10354],"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-single/serverless/index#serverless-tracing",{"title":10357,"visible":10,"weight":877,"urlFragment":10358,"anchor":16,"singlePageAnchor":10358,"subChapters":10359,"docTitle":9959,"url":10366},"OpenShift Serverless support","serverless-support",[10360,10361,10362,10363,10364,10365],"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-single/serverless/index#serverless-support",{"title":10368,"visible":10,"weight":888,"urlFragment":10369,"anchor":16,"singlePageAnchor":10369,"subChapters":10370,"docTitle":9959,"url":10384},"Security","security",[10371,10372,10373,10374,10375,10376,10377,10378,10379,10380,10381,10382,10383],"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-single/serverless/index#security",{"title":10386,"visible":10,"weight":899,"urlFragment":10387,"anchor":16,"singlePageAnchor":10387,"subChapters":10388,"docTitle":9959,"url":10489},"Functions","functions",[10389,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],"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-single/serverless/index#functions",{"title":10491,"visible":10,"weight":906,"urlFragment":10492,"anchor":16,"singlePageAnchor":10492,"subChapters":10493,"docTitle":9959,"url":10501},"Integrations","integrations",[10494,10495,10496,10497,10498,10499,10500],"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-single/serverless/index#integrations",{"title":10503,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":10504,"docTitle":10505,"url":10506,"sections":10507},"OpenShift Virtualization",[],"openshift_virtualization","/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index",[10508,10515,10523,10541,10593,10604,10613,10620,10946,10976,10998,11024,11050],{"title":10509,"visible":10,"weight":23,"urlFragment":10510,"anchor":16,"singlePageAnchor":10510,"subChapters":10511,"docTitle":10505,"url":10514},"About OpenShift Virtualization","about-virt",[10512,10513],"virt-what-you-can-do-with-virt_about-virt","virt-supported-cluster-version_about-virt","/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#about-virt",{"title":10516,"visible":10,"weight":35,"urlFragment":10517,"anchor":16,"singlePageAnchor":10517,"subChapters":10518,"docTitle":10505,"url":10522},"Start here with OpenShift Virtualization","start-here-with-openshift-virtualization",[10519,10520,10521],"virt-learn-more-cluster-administrator","virt-learn-more-virtualization-administrator","virt-learn-more-developer","/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#start-here-with-openshift-virtualization",{"title":10524,"visible":10,"weight":46,"urlFragment":10525,"anchor":16,"singlePageAnchor":10525,"subChapters":10526,"docTitle":10505,"url":10540},"OpenShift Virtualization release notes","openshift-virtualization-release-notes",[10527,10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539],"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-single/openshift_virtualization/index#openshift-virtualization-release-notes",{"title":10542,"visible":10,"weight":68,"urlFragment":10543,"anchor":16,"singlePageAnchor":10543,"subChapters":10544,"docTitle":10505,"url":10592},"Installing OpenShift Virtualization","installing-openshift-virtualization",[10545,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,971,10580,10581,10582,10583,10584,10585,1006,10586,10587,10588,10589,10590,10591],"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-single/openshift_virtualization/index#installing-openshift-virtualization",{"title":10594,"visible":10,"weight":435,"urlFragment":10595,"anchor":16,"singlePageAnchor":10595,"subChapters":10596,"docTitle":10505,"url":10603},"Updating OpenShift Virtualization","upgrading-openshift-virtualization",[10597,10598,10599,10600,10601,10602],"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-single/openshift_virtualization/index#upgrading-openshift-virtualization",{"title":10605,"visible":10,"weight":453,"urlFragment":10606,"anchor":16,"singlePageAnchor":10606,"subChapters":10607,"docTitle":10505,"url":10612},"Additional security privileges granted for kubevirt-controller and virt-launcher","virt-additional-security-privileges-controller-and-launcher",[10608,10609,10610,10611,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-single/openshift_virtualization/index#virt-additional-security-privileges-controller-and-launcher",{"title":10614,"visible":10,"weight":468,"urlFragment":10615,"anchor":16,"singlePageAnchor":10615,"subChapters":10616,"docTitle":10505,"url":10619},"Using the CLI tools","virt-using-the-cli-tools",[1017,10617,10618],"virt-virtctl-commands_virt-using-the-cli-tools","virt-openshift-client-commands_virt-using-the-cli-tools","/documentation/openshift_container_platform/4.8/html-single/openshift_virtualization/index#virt-using-the-cli-tools",{"title":10621,"visible":10,"weight":869,"urlFragment":10622,"anchor":16,"singlePageAnchor":10622,"subChapters":10623,"docTitle":10505,"url":10945},"Virtual machines","virtual-machines",[10624,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,1038,10688,10689,10690,10691,10692,1598,10693,10694,10695,10696,10697,10698,10699,1089,10700,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,1114,10728,10729,10730,10731,10732,10733,1142,10734,10735,10736,10737,1174,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751,10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,10762,1223,10763,10764,10765,10766,10767,1299,10768,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,1309,10797,10798,10799,1329,10800,10801,10802,10803,10804,1352,10805,10806,10807,10808,10809,1375,10810,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,1402,10838,10839,10840,997,10841,1430,10842,1015,10843,1505,10844,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,1515,10878,10879,10880,10881,1535,10882,10883,10884,10885,10886,10887,1581,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,1626,10904,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,1036,10931,10932,10933,10934,10935,10936,10937,10938,10939,10940,10941,10942,10943,10944],"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-single/openshift_virtualization/index#virtual-machines",{"title":10947,"visible":10,"weight":877,"urlFragment":10948,"anchor":16,"singlePageAnchor":10948,"subChapters":10949,"docTitle":10505,"url":10975},"Virtual machine templates","virtual-machine-templates",[10950,10951,10952,10953,10954,10955,10956,10957,10958,10959,10960,10961,10962,10963,10964,10965,10966,10967,10968,10969,10970,10971,1607,10972,10973,10974],"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-single/openshift_virtualization/index#virtual-machine-templates",{"title":10977,"visible":10,"weight":888,"urlFragment":10978,"anchor":16,"singlePageAnchor":10978,"subChapters":10979,"docTitle":10505,"url":10997},"Live migration","live-migration",[10980,10981,10982,10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996],"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-single/openshift_virtualization/index#live-migration",{"title":10999,"visible":10,"weight":899,"urlFragment":11000,"anchor":16,"singlePageAnchor":11000,"subChapters":11001,"docTitle":10505,"url":11023},"Node maintenance","node-maintenance",[11002,11003,11004,11005,11006,11007,11008,11009,11010,11011,11012,11013,11014,11015,11016,11017,11018,11019,11020,11021,11022],"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-single/openshift_virtualization/index#node-maintenance",{"title":11025,"visible":10,"weight":906,"urlFragment":11026,"anchor":16,"singlePageAnchor":11026,"subChapters":11027,"docTitle":10505,"url":11049},"Node networking","node-networking",[11028,11029,11030,11031,11032,11033,11034,11035,4628,11036,11037,11038,11039,11040,11041,11042,11043,11044,11045,11046,11047,11048],"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-single/openshift_virtualization/index#node-networking",{"title":11051,"visible":10,"weight":915,"urlFragment":11052,"anchor":16,"singlePageAnchor":11052,"subChapters":11053,"docTitle":10505,"url":11106},"Logging, events, and monitoring","logging-events-and-monitoring",[11054,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],"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-single/openshift_virtualization/index#logging-events-and-monitoring",{"title":11108,"visible":10,"weight":14,"urlFragment":15,"anchor":16,"singlePageAnchor":16,"subChapters":11109,"docTitle":11110,"url":11111,"sections":11112},"Windows Container Support for OpenShift",[],"windows_container_support_for_openshift","/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index",[11113,11118,11145,11158,11167,11188,11197,11203,11210,11216],{"title":11114,"visible":10,"weight":23,"urlFragment":11115,"anchor":16,"singlePageAnchor":11115,"subChapters":11116,"docTitle":11110,"url":11117},"Red Hat OpenShift support for Windows Containers overview","windows-container-overview",[],"/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#windows-container-overview",{"title":11119,"visible":10,"weight":35,"urlFragment":11120,"anchor":16,"singlePageAnchor":11120,"subChapters":11121,"docTitle":11110,"url":11144},"Windows Container Support for Red Hat OpenShift release notes","windows-containers-release-notes-3-x",[11122,9086,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,11135,11136,11137,11138,11139,11140,11141,11142,11143],"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-single/windows_container_support_for_openshift/index#windows-containers-release-notes-3-x",{"title":11146,"visible":10,"weight":46,"urlFragment":11147,"anchor":16,"singlePageAnchor":11147,"subChapters":11148,"docTitle":11110,"url":11157},"Understanding Windows container workloads","understanding-windows-container-workloads",[11149,11150,11151,11152,11153,11154,11155,11156],"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-single/windows_container_support_for_openshift/index#understanding-windows-container-workloads",{"title":11159,"visible":10,"weight":68,"urlFragment":11160,"anchor":16,"singlePageAnchor":11160,"subChapters":11161,"docTitle":11110,"url":11166},"Enabling Windows container workloads","enabling-windows-container-workloads",[11162,11163,11164,11165,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-single/windows_container_support_for_openshift/index#enabling-windows-container-workloads",{"title":11168,"visible":10,"weight":435,"urlFragment":11169,"anchor":16,"singlePageAnchor":11169,"subChapters":11170,"docTitle":11110,"url":11187},"Creating Windows MachineSet objects","creating-windows-machineset-objects",[11171,11172,11173,11174,1598,11175,11176,11177,11178,1626,11179,11180,11181,11182,11183,11184,11185,11186,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-single/windows_container_support_for_openshift/index#creating-windows-machineset-objects",{"title":11189,"visible":10,"weight":453,"urlFragment":11190,"anchor":16,"singlePageAnchor":11190,"subChapters":11191,"docTitle":11110,"url":11196},"Scheduling Windows container workloads","scheduling-windows-workloads",[11192,11193,11194,11195],"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-single/windows_container_support_for_openshift/index#scheduling-windows-workloads",{"title":11198,"visible":10,"weight":468,"urlFragment":11199,"anchor":16,"singlePageAnchor":11199,"subChapters":11200,"docTitle":11110,"url":11202},"Windows node upgrades","windows-node-upgrades",[11201],"wmco-upgrades_windows-node-upgrades","/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#windows-node-upgrades",{"title":11204,"visible":10,"weight":869,"urlFragment":11205,"anchor":16,"singlePageAnchor":11205,"subChapters":11206,"docTitle":11110,"url":11209},"Using Bring-Your-Own-Host (BYOH) Windows instances as nodes","byoh-windows-instance",[11207,11208],"configuring-byoh-windows-instance","removing-byoh-windows-instance","/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#byoh-windows-instance",{"title":11211,"visible":10,"weight":877,"urlFragment":11212,"anchor":16,"singlePageAnchor":11212,"subChapters":11213,"docTitle":11110,"url":11215},"Removing Windows nodes","removing-windows-nodes",[11214],"machine-delete_removing-windows-nodes","/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#removing-windows-nodes",{"title":11217,"visible":10,"weight":888,"urlFragment":11218,"anchor":16,"singlePageAnchor":11218,"subChapters":11219,"docTitle":11110,"url":11222},"Disabling Windows container workloads","disabling-windows-container-workloads",[11220,11221],"uninstalling-wmco_disabling-windows-container-workloads","deleting-wmco-namespace_disabling-windows-container-workloads","/documentation/openshift_container_platform/4.8/html-single/windows_container_support_for_openshift/index#disabling-windows-container-workloads",{"title":11224,"urlFragment":11225,"singlePageAnchor":16,"anchor":11225,"docTitle":3581,"url":11226},"Legal Notice","legal-notice","/documentation/openshift_container_platform/4.8/html/storage/legal-notice",[11228,11231,11234],{"text":11229,"link":11230},"OpenShift Container Platform","/documentation/openshift_container_platform/",{"text":11232,"link":11233},"4.8","/documentation/openshift_container_platform/4.8/",{"text":5},{"name":5,"translations":11236,"productVersion":11241,"singlePage":11242,"pdf":11245,"publishingStatus":11247},[11237,11238,11239,11240],"en-us","ko-kr","zh-cn","ja-jp",{"name":11232},{"contentUrl":11243,"name":5,"new":11244,"url":3581},"https://d2bhdhkti9t3uj.cloudfront.net/html/322cd6cc-eee2-4254-880e-5608620ae314/3e58034bc043e0059b762f051c7dd6c7.html","https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/html-single/storage/index",{"url":11246},"https://docs.redhat.com/en/documentation/openshift_container_platform/4.8/pdf/storage/OpenShift_Container_Platform-4.8-Storage-en-US.pdf","PUBLISHED",[11249,11253,11257,11261,11265,11269,11273,11277,11281,11285,11288,11292,11296,11300,11304,11308,11312,11316,11320,11324,11328,11332,11336,11340,11344,11348,11352,11356,11360],{"name":11250,"new":11251,"url":11250,"urlAliases":11252},"4.17","https://docs.redhat.com/en/documentation/openshift_container_platform/4.17",[],{"name":11254,"new":11255,"url":11254,"urlAliases":11256},"4.16","https://docs.redhat.com/en/documentation/openshift_container_platform/4.16",[],{"name":11258,"new":11259,"url":11258,"urlAliases":11260},"4.15","https://docs.redhat.com/en/documentation/openshift_container_platform/4.15",[],{"name":11262,"new":11263,"url":11262,"urlAliases":11264},"4.14","https://docs.redhat.com/en/documentation/openshift_container_platform/4.14",[],{"name":11266,"new":11267,"url":11266,"urlAliases":11268},"4.13","https://docs.redhat.com/en/documentation/openshift_container_platform/4.13",[],{"name":11270,"new":11271,"url":11270,"urlAliases":11272},"4.12","https://docs.redhat.com/en/documentation/openshift_container_platform/4.12",[],{"name":11274,"new":11275,"url":11274,"urlAliases":11276},"4.11","https://docs.redhat.com/en/documentation/openshift_container_platform/4.11",[],{"name":11278,"new":11279,"url":11278,"urlAliases":11280},"4.10","https://docs.redhat.com/en/documentation/openshift_container_platform/4.10",[],{"name":11282,"new":11283,"url":11282,"urlAliases":11284},"4.9","https://docs.redhat.com/en/documentation/openshift_container_platform/4.9",[],{"name":11232,"new":11286,"url":11232,"urlAliases":11287},"https://docs.redhat.com/en/documentation/openshift_container_platform/4.8",[],{"name":11289,"new":11290,"url":11289,"urlAliases":11291},"4.7","https://docs.redhat.com/en/documentation/openshift_container_platform/4.7",[],{"name":11293,"new":11294,"url":11293,"urlAliases":11295},"4.6","https://docs.redhat.com/en/documentation/openshift_container_platform/4.6",[],{"name":11297,"new":11298,"url":11297,"urlAliases":11299},"4.5","https://docs.redhat.com/en/documentation/openshift_container_platform/4.5",[],{"name":11301,"new":11302,"url":11301,"urlAliases":11303},"4.4","https://docs.redhat.com/en/documentation/openshift_container_platform/4.4",[],{"name":11305,"new":11306,"url":11305,"urlAliases":11307},"4.3","https://docs.redhat.com/en/documentation/openshift_container_platform/4.3",[],{"name":11309,"new":11310,"url":11309,"urlAliases":11311},"4.2","https://docs.redhat.com/en/documentation/openshift_container_platform/4.2",[],{"name":11313,"new":11314,"url":11313,"urlAliases":11315},"4.1","https://docs.redhat.com/en/documentation/openshift_container_platform/4.1",[],{"name":11317,"new":11318,"url":11317,"urlAliases":11319},"3.11","https://docs.redhat.com/en/documentation/openshift_container_platform/3.11",[],{"name":11321,"new":11322,"url":11321,"urlAliases":11323},"3.10","https://docs.redhat.com/en/documentation/openshift_container_platform/3.10",[],{"name":11325,"new":11326,"url":11325,"urlAliases":11327},"3.9","https://docs.redhat.com/en/documentation/openshift_container_platform/3.9",[],{"name":11329,"new":11330,"url":11329,"urlAliases":11331},"3.7","https://docs.redhat.com/en/documentation/openshift_container_platform/3.7",[],{"name":11333,"new":11334,"url":11333,"urlAliases":11335},"3.6","https://docs.redhat.com/en/documentation/openshift_container_platform/3.6",[],{"name":11337,"new":11338,"url":11337,"urlAliases":11339},"3.5","https://docs.redhat.com/en/documentation/openshift_container_platform/3.5",[],{"name":11341,"new":11342,"url":11341,"urlAliases":11343},"3.4","https://docs.redhat.com/en/documentation/openshift_container_platform/3.4",[],{"name":11345,"new":11346,"url":11345,"urlAliases":11347},"3.3","https://docs.redhat.com/en/documentation/openshift_container_platform/3.3",[],{"name":11349,"new":11350,"url":11349,"urlAliases":11351},"3.2","https://docs.redhat.com/en/documentation/openshift_container_platform/3.2",[],{"name":11353,"new":11354,"url":11353,"urlAliases":11355},"3.1","https://docs.redhat.com/en/documentation/openshift_container_platform/3.1",[],{"name":11357,"new":11358,"url":11357,"urlAliases":11359},"3.0","https://docs.redhat.com/en/documentation/openshift_container_platform/3.0",[],{"name":11361,"new":11362,"url":11361,"urlAliases":11363},"2","https://docs.redhat.com/en/documentation/openshift_container_platform/2",[],{"about/index":11365,"release_notes/index":11366,"architecture/index":11367,"security_and_compliance/index":11368,"installing/index":11369,"updating_clusters/index":11370,"storage/index":11371,"authentication_and_authorization/index":11372,"networking/index":11373,"registry/index":11374,"post-installation_configuration/index":11375,"migrating_from_version_3_to_4/index":11376,"migration_toolkit_for_containers/index":11377,"backup_and_restore/index":11378,"machine_management/index":11379,"metering/index":11380,"web_console/index":11381,"cli_tools/index":11382,"building_applications/index":11383,"cicd/index":11384,"images/index":11385,"nodes/index":11386,"sandboxed_containers_support_for_openshift/index":11387,"operators/index":11388,"logging/index":11389,"monitoring/index":11390,"scalability_and_performance/index":11391,"support/index":11392,"service_mesh/index":11393,"distributed_tracing/index":11394,"serverless/index":11395,"openshift_virtualization/index":11396,"windows_container_support_for_openshift/index":11397},{"prevt":16,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":16},{"prevt":16,"next":16},{"prevt":16,"next":16},{"prevt":16,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":16},{"prevt":16,"next":15},{"prevt":15,"next":16},{"prevt":16,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":16},{"prevt":16,"next":16},{"prevt":16,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":16},{"prevt":16,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":16},{"prevt":16,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":15},{"prevt":15,"next":16},{"product":16,"version":16},{"storage":11400},[11244],{"products":11402},[11403,11404,11405,11406,11407,11408,11409,11410,11411,11412,11413,11414,11415],"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",[11417,11419,11422,11424,11426,11428,11430,11432,11434,11436,11439,11442,11445,11448,11451,11454,11457,11460,11463,11466,11469,11472,11475,11478,11481,11483,11486,11489,11492,11495,11498,11501,11504,11507,11510,11513,11516,11519,11522,11524,11526,11528,11530,11532,11534,11536,11539],{"title":11418,"visible":10,"weight":14,"urlFragment":3586,"anchor":3588,"singlePageAnchor":3588},"modules/openshift-storage-common-terms.adoc",{"title":11420,"visible":10,"weight":23,"urlFragment":3586,"anchor":3589,"singlePageAnchor":3589,"subChapters":11421},"Storage Types",[3590,3591],{"title":11423,"visible":10,"weight":35,"urlFragment":3586,"anchor":3592,"singlePageAnchor":3592},"Container Storage Interface (CSI)",{"title":11425,"visible":10,"weight":46,"urlFragment":3586,"anchor":3593,"singlePageAnchor":3593},"Dynamic Provisioning",{"title":11427,"visible":10,"weight":14,"urlFragment":3597,"anchor":3599,"singlePageAnchor":3599},"Overview",{"title":11429,"visible":10,"weight":23,"urlFragment":3597,"anchor":3600,"singlePageAnchor":3600},"Types of ephemeral storage",{"title":11431,"visible":10,"weight":35,"urlFragment":3597,"anchor":3601,"singlePageAnchor":3601},"Ephemeral storage management",{"title":11433,"visible":10,"weight":46,"urlFragment":3597,"anchor":3602,"singlePageAnchor":3602},"Monitoring ephemeral storage",{"title":11435,"visible":10,"weight":14,"urlFragment":3606,"anchor":3608,"singlePageAnchor":3608},"Persistent storage overview",{"title":11437,"visible":10,"weight":23,"urlFragment":3606,"anchor":3609,"singlePageAnchor":3609,"subChapters":11438},"Lifecycle of a volume and claim",[3610,3611,3612,3613,3614,3615,3616,3617],{"title":11440,"visible":10,"weight":35,"urlFragment":3606,"anchor":3618,"singlePageAnchor":3618,"subChapters":11441},"Persistent volumes",[3619,3620,3621,3622,3623],{"title":11443,"visible":10,"weight":46,"urlFragment":3606,"anchor":3624,"singlePageAnchor":3624,"subChapters":11444},"Persistent volume claims",[3625,3626,3627,3628],{"title":11446,"visible":10,"weight":68,"urlFragment":3606,"anchor":3629,"singlePageAnchor":3629,"subChapters":11447},"Block volume support",[3630],{"title":11449,"visible":10,"weight":14,"urlFragment":3634,"anchor":3636,"singlePageAnchor":3636,"subChapters":11450},"Persistent storage using AWS Elastic Block Store",[3637,3638,3639,3640,3641],{"title":11452,"visible":10,"weight":23,"urlFragment":3634,"anchor":3642,"singlePageAnchor":3642,"subChapters":11453},"Persistent storage using Azure",[3643,3644,3645],{"title":11455,"visible":10,"weight":35,"urlFragment":3634,"anchor":3646,"singlePageAnchor":3646,"subChapters":11456},"Persistent storage using Azure File",[3647,3648],{"title":11458,"visible":10,"weight":46,"urlFragment":3634,"anchor":3649,"singlePageAnchor":3649,"subChapters":11459},"Persistent storage using Cinder",[3650,3651,3652,3653,3654],{"title":11461,"visible":10,"weight":68,"urlFragment":3634,"anchor":3655,"singlePageAnchor":3655,"subChapters":11462},"Persistent storage using Fibre Channel",[3656,3657,3658],{"title":11464,"visible":10,"weight":435,"urlFragment":3634,"anchor":3659,"singlePageAnchor":3659,"subChapters":11465},"Persistent storage using FlexVolume",[3660,3661,3662,3663],{"title":11467,"visible":10,"weight":453,"urlFragment":3634,"anchor":3664,"singlePageAnchor":3664,"subChapters":11468},"Persistent storage using GCE Persistent Disk",[3665,3666,3667],{"title":11470,"visible":10,"weight":468,"urlFragment":3634,"anchor":3668,"singlePageAnchor":3668,"subChapters":11471},"Persistent storage using hostPath",[3669,3670,3671],{"title":11473,"visible":10,"weight":869,"urlFragment":3634,"anchor":3672,"singlePageAnchor":3672,"subChapters":11474},"Persistent storage using iSCSI",[3673,3674,3675,3676,3677,3678],{"title":11476,"visible":10,"weight":877,"urlFragment":3634,"anchor":3679,"singlePageAnchor":3679,"subChapters":11477},"Persistent storage using local volumes",[3680,3681,3682,3683,3684,3685,3686,3687,3688,3689],{"title":11479,"visible":10,"weight":888,"urlFragment":3634,"anchor":3690,"singlePageAnchor":3690,"subChapters":11480},"Persistent storage using NFS",[3691,3692,3693,3694,3695,3696,3697,3698,3699],{"title":11482,"visible":10,"weight":899,"urlFragment":3634,"anchor":3700,"singlePageAnchor":3700},"Red Hat OpenShift Container Storage",{"title":11484,"visible":10,"weight":906,"urlFragment":3634,"anchor":3701,"singlePageAnchor":3701,"subChapters":11485},"Persistent storage using VMware vSphere volumes",[3702,1006,3703,3704,3705,3706],{"title":11487,"visible":10,"weight":14,"urlFragment":3710,"anchor":3712,"singlePageAnchor":3712,"subChapters":11488},"Configuring CSI volumes",[3713,3714,3715,3716,3717,3718],{"title":11490,"visible":10,"weight":23,"urlFragment":3710,"anchor":3719,"singlePageAnchor":3719,"subChapters":11491},"CSI inline ephemeral volumes",[3720,3721,3722],{"title":11493,"visible":10,"weight":35,"urlFragment":3710,"anchor":3723,"singlePageAnchor":3723,"subChapters":11494},"CSI volume snapshots",[3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735],{"title":11496,"visible":10,"weight":46,"urlFragment":3710,"anchor":3736,"singlePageAnchor":3736,"subChapters":11497},"CSI volume cloning",[3737,3738,3739],{"title":11499,"visible":10,"weight":68,"urlFragment":3710,"anchor":3740,"singlePageAnchor":3740,"subChapters":11500},"CSI automatic migration",[3741,3742,1546],{"title":11502,"visible":10,"weight":435,"urlFragment":3710,"anchor":3743,"singlePageAnchor":3743,"subChapters":11503},"AWS Elastic Block Store CSI Driver Operator",[3744,3745],{"title":11505,"visible":10,"weight":453,"urlFragment":3710,"anchor":3746,"singlePageAnchor":3746,"subChapters":11506},"Azure Disk CSI Driver Operator",[3747,3748,3749],{"title":11508,"visible":10,"weight":468,"urlFragment":3710,"anchor":3750,"singlePageAnchor":3750,"subChapters":11509},"GCP PD CSI Driver Operator",[3751,3752,3753,3754],{"title":11511,"visible":10,"weight":869,"urlFragment":3710,"anchor":3755,"singlePageAnchor":3755,"subChapters":11512},"OpenStack Cinder CSI Driver Operator",[3756,3757,3758],{"title":11514,"visible":10,"weight":877,"urlFragment":3710,"anchor":3759,"singlePageAnchor":3759,"subChapters":11515},"OpenStack Manila CSI Driver Operator",[3760,3761,3762,3763],{"title":11517,"visible":10,"weight":888,"urlFragment":3710,"anchor":3764,"singlePageAnchor":3764,"subChapters":11518},"Red Hat Virtualization CSI Driver Operator",[3765,3766,3767,3768],{"title":11520,"visible":10,"weight":899,"urlFragment":3710,"anchor":3769,"singlePageAnchor":3769,"subChapters":11521},"VMware vSphere CSI Driver Operator",[3770,3771,3772,1598],{"title":11523,"visible":10,"weight":14,"urlFragment":3776,"anchor":3778,"singlePageAnchor":3778},"Enabling volume expansion support",{"title":11525,"visible":10,"weight":23,"urlFragment":3776,"anchor":3779,"singlePageAnchor":3779},"Expanding CSI volumes",{"title":11527,"visible":10,"weight":35,"urlFragment":3776,"anchor":3780,"singlePageAnchor":3780},"Expanding FlexVolume with a supported driver",{"title":11529,"visible":10,"weight":46,"urlFragment":3776,"anchor":3781,"singlePageAnchor":3781},"Expanding persistent volume claims (PVCs) with a file system",{"title":11531,"visible":10,"weight":68,"urlFragment":3776,"anchor":3782,"singlePageAnchor":3782},"Recovering from failure when expanding volumes",{"title":11533,"visible":10,"weight":14,"urlFragment":3786,"anchor":3788,"singlePageAnchor":3788},"About dynamic provisioning",{"title":11535,"visible":10,"weight":23,"urlFragment":3786,"anchor":3789,"singlePageAnchor":3789},"Available dynamic provisioning plugins",{"title":11537,"visible":10,"weight":35,"urlFragment":3786,"anchor":3790,"singlePageAnchor":3790,"subChapters":11538},"Defining a storage class",[3791,3792,3793,3794,3795,3796,3797,3798,3799,3800],{"title":11540,"visible":10,"weight":46,"urlFragment":3786,"anchor":3801,"singlePageAnchor":3801},"Changing the default storage class",{"default":11542},[11543,11552,11558,11567,11575,11583,11590,11598,11605,11610],{"nid":11544,"type":11545,"langcode":11546,"Published":14,"title":11547,"Created":11548,"Updated":11549,"body_value":16,"field_documentation banner_text_value":16,"field_documentation banner_text_format":16,"field_paths_value":11550,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":11551},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":11553,"type":11545,"langcode":11546,"Published":14,"title":11547,"Created":11554,"Updated":11555,"body_value":16,"field_documentation banner_text_value":16,"field_documentation banner_text_format":16,"field_paths_value":11556,"field_documentation_training_url_uri":16,"field_title_title_id":16,"field_rebrand banner_link_uri":11557},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":11559,"type":11560,"langcode":11546,"Published":14,"title":11561,"Created":11562,"Updated":11563,"body_value":16,"field_documentation banner_text_value":11564,"field_documentation banner_text_format":11565,"field_paths_value":11566,"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":11568,"type":11569,"langcode":11546,"Published":14,"title":11570,"Created":11571,"Updated":11572,"body_value":16,"field_documentation banner_text_value":11573,"field_documentation banner_text_format":11565,"field_paths_value":11574,"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":11576,"type":11577,"langcode":11546,"Published":14,"title":11578,"Created":11579,"Updated":11580,"body_value":16,"field_documentation banner_text_value":11581,"field_documentation banner_text_format":11565,"field_paths_value":11582,"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":11584,"type":11577,"langcode":11546,"Published":14,"title":11585,"Created":11586,"Updated":11587,"body_value":16,"field_documentation banner_text_value":11588,"field_documentation banner_text_format":11565,"field_paths_value":11589,"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":11591,"type":11592,"langcode":11546,"Published":14,"title":11593,"Created":11594,"Updated":11595,"body_value":16,"field_documentation banner_text_value":11596,"field_documentation banner_text_format":11565,"field_paths_value":11597,"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":11599,"type":11592,"langcode":11546,"Published":14,"title":11600,"Created":11601,"Updated":11602,"body_value":16,"field_documentation banner_text_value":11603,"field_documentation banner_text_format":11565,"field_paths_value":11604,"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":11606,"type":11592,"langcode":11546,"Published":14,"title":11607,"Created":11604,"Updated":11604,"body_value":16,"field_documentation banner_text_value":11608,"field_documentation banner_text_format":11565,"field_paths_value":11609,"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":11599,"alertType":11611,"type":11612,"langcode":11546,"Published":14,"title":11613,"Created":11614,"Updated":11614,"body_value":16,"field_documentation banner_text_value":11615,"field_documentation banner_text_format":11565,"field_paths_value":11616,"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":11618},"Red Hat OpenShift Container Platform",["Reactive",11620],{"$snuxt-i18n-meta":11621,"$sisLoading":11622,"$sisSinglePage":10,"$sisInFocusMode":11622,"$smobileTocOpen":11622,"$sisLargeTOC":10,"$scurrentChapter":15,"$scurrentSection":15,"$scurrentSubSection":11604},{},false,["Set"],["ShallowReactive",11625],{"rFVLKcOK8e":16,"uUstF4AIyn":16,"MdHNSZP4nR":16,"Pn02PlJOas":16},"/en/documentation/openshift_container_platform/4.8/html-single/storage/index"]</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>

Pages: 1 2 3 4 5 6 7 8 9 10