| <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><style data-href="/jkube/styles.5c9b852c43e28f117cb7.css">@import url(https://fonts.googleapis.com/css?family=Libre+Franklin:100,300,400,600,700,|Roboto:300,400,500,700|Jura);@import url(https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css);@import url(https://unpkg.com/@coreui/icons/css/brand.min.css);code[class*=language-],pre[class*=language-]{color:#657b83;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-]::selection,code[class*=language-] ::selection,pre[class*=language-]::selection,pre[class*=language-] ::selection{background:#073642}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-],pre[class*=language-]{background-color:#fdf6e3}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#93a1a1}.token.punctuation{color:#586e75}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#268bd2}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string,.token.url{color:#2aa198}.token.entity{color:#657b83;background:#eee8d5}.token.atrule,.token.attr-value,.token.keyword{color:#859900}.token.class-name,.token.function{color:#b58900}.token.important,.token.regex,.token.variable{color:#cb4b16}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body,html{font-family:Libre Franklin,Roboto,sans-serif}body{margin:0;padding:0;outline:0;background:#f1f2f2;font-size:16px;color:#222}h1{font-size:3rem}h1,h2{margin-top:0;font-family:Roboto,sans-serif;font-weight:300}h2{font-size:2rem}h3{font-size:1.5rem;font-weight:300}a{color:#525c86}a:focus,a:hover{color:#222}.eclipse-jkube-footer{padding:16px;border-top:10px solid #222;background-color:#292c2f;font-size:19.2px;font-family:Roboto,sans-serif;font-weight:300;line-height:1.5}.eclipse-jkube-footer .eclipse-jkube-footer__logo-jkube{display:flex;flex-direction:column;max-width:1170px;margin:0 auto 16px}.eclipse-jkube-footer .eclipse-jkube-footer__logo-jkube .eclipse-jkube-footer__logo-jkube-image{width:160px}.eclipse-jkube-footer .eclipse-jkube-footer__logo-jkube .eclipse-jkube-footer__logo-jkube-tagline{color:#939598}.eclipse-jkube-footer .eclipse-jkube-footer__links{max-width:1170px;margin:0 auto 16px;display:flex;flex-wrap:wrap}.eclipse-jkube-footer .eclipse-jkube-footer__links .eclipse-jkube-footer__links-list{padding:0;margin:0 48px 16px 0;list-style:none}.eclipse-jkube-footer .eclipse-jkube-footer__links .eclipse-jkube-footer__links-list li a{transition:color .1s linear;color:#f1f2f2}.eclipse-jkube-footer .eclipse-jkube-footer__links .eclipse-jkube-footer__links-list li:first-child a,.eclipse-jkube-footer .eclipse-jkube-footer__links .eclipse-jkube-footer__links-list li a:hover{color:#939598}.eclipse-jkube-footer .eclipse-jkube-footer__links .eclipse-jkube-footer__links-list li:first-child a:hover{color:#525c86}.eclipse-jkube-footer .eclipse-jkube-footer__links a{text-decoration:none}.eclipse-jkube-footer .eclipse-jkube-footer__copyright{max-width:1170px;margin:0 auto 16px;font-family:Roboto,sans-serif;color:#939598}.eclipse-jkube__header{display:block;position:relative;height:175px;background-color:#292c2f}@media (min-width:700px){.eclipse-jkube__header{height:105px}}.eclipse-jkube__header .eclipse-jkube__header-trade-mark{font-size:.5em;font-size:.3em;line-height:2.5;vertical-align:top}.eclipse-jkube__header .eclipse-jkube__header-container{position:relative;margin:0 auto;padding:0 16px;height:100%;max-width:1170px}@media (min-width:700px){.eclipse-jkube__header .eclipse-jkube__header-container{display:flex;flex-wrap:nowrap;height:105px}}.eclipse-jkube__header .eclipse-jkube__header-logo{display:flex;justify-content:center;align-items:center;font-size:32px;font-weight:400;color:#f1f2f2}@media (min-width:501px){.eclipse-jkube__header .eclipse-jkube__header-logo{font-size:50px}}.eclipse-jkube__header .eclipse-jkube__header-logo-eclipse-image{height:65px}@media (min-width:501px){.eclipse-jkube__header .eclipse-jkube__header-logo-eclipse-image{height:90px}}.eclipse-jkube__header .eclipse-jkube__header-logo-eclipse-image img{max-height:100%;max-width:100%}.eclipse-jkube__header .eclipse-jkube__header-logo-jkube{height:50px}@media (min-width:501px){.eclipse-jkube__header .eclipse-jkube__header-logo-jkube{height:65px}}.eclipse-jkube__header .eclipse-jkube__header-logo-jkube-image{height:100%}.eclipse-jkube__header .eclipse-jkube__header-logo:hover{color:#f1f2f2}.eclipse-jkube__header .eclipse-jkube__header-content{flex:1 0;min-width:1px;display:flex;justify-content:center;align-items:center}@media (min-width:501px){.eclipse-jkube__header .eclipse-jkube__header-content{justify-content:flex-end}}.eclipse-jkube__header .eclipse-jkube__header-content ul{display:flex;flex-wrap:wrap;align-items:center;justify-content:center}@media (min-width:700px){.eclipse-jkube__header .eclipse-jkube__header-content ul{justify-content:flex-start}}.eclipse-jkube__header .eclipse-jkube__header-content ul li{margin:4px 0;padding-right:16px;list-style:none;color:#f1f2f2;font-size:20px}.eclipse-jkube__header .eclipse-jkube__header-content .eclipse-jkube__header-stars{display:block;width:85px;height:20px;line-height:20px}.eclipse-jkube__header a{color:#f1f2f2;text-decoration:none}.eclipse-jkube__header a:hover{color:#dd8623;transition:color .3s}.quick-start-card{border:1px solid #d6d6d6;padding:16px}.quick-start-card .quick-start-card__title{margin:0;padding:0}.quick-start-card .quick-start-card__title a{text-decoration:none}.quick-start-card .quick-start-card__title a:active,.quick-start-card .quick-start-card__title a:hover{text-decoration:underline}.quick-start-card .quick-start-card__technologies{margin:16px 0 0;padding:0}.quick-start-card .quick-start-card__technologies-item{display:inline-flex;align-items:center;padding:.25rem .3rem;border-radius:.2rem;font-size:.8rem;margin:0 0 .5rem;background:#dd8623;color:#222}.quick-start-card .quick-start-card__technologies-item:not(:last-child){margin-right:.5rem}.quick-start-card .quick-start-card__technologies-item-icon{display:inline-block;height:.8rem;margin-right:.2rem}.quick-start-card .quick-start-card__description p{margin-top:0}.quick-start-card .quick-start-card__links a{display:inline-block;text-decoration:none;padding:.3rem .5rem;border-radius:.2rem;border:1px solid #d6d6d6;background:#d6d6d6;color:#222}.quick-start-card .quick-start-card__links a:active,.quick-start-card .quick-start-card__links a:hover{background-color:#f1f2f2}.eclipse-jkube{display:flex;flex-direction:column;min-height:100vh}.eclipse-jkube__main{flex:1 1}@media (min-width:1170px){.eclipse-jkube__main{overflow-x:hidden}}.eclipse-jkube__main .eclipse-jkube__content{margin:0 16px}@media (min-width:1170px){.eclipse-jkube__main .eclipse-jkube__content{max-width:1154px;margin:0 auto}}.eclipse-jkube__main .eclipse-jkube__content img{max-width:100%}.eclipse-jkube__main .eclipse-jkube__content :not(pre)>code[class*=language-],.eclipse-jkube__main .eclipse-jkube__content pre[class*=language-]{background-color:transparent}.eclipse-jkube__main .eclipse-jkube__content .hero{margin:0 -16px 16px;display:block;background-color:#272727;background-image:url(/jkube/static/cubes-8e1e59c337437947105e6668f1f3790a.jpg);background-size:cover;color:#f1f2f2}@media (min-width:1170px){.eclipse-jkube__main .eclipse-jkube__content .hero{position:relative;width:100vw;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw}}.eclipse-jkube__main .eclipse-jkube__content .hero .hero-content{padding:16px;background-color:rgba(39,39,39,.7)}@media (min-width:1170px){.eclipse-jkube__main .eclipse-jkube__content .hero .hero-content{padding:16px calc((100% - 1170px)/2)}}.eclipse-jkube__main .eclipse-jkube__content .hero .hero-content .getting-involved{color:#f1f2f2;margin:0 -16px;padding:0 16px;display:flex;justify-content:flex-end}.eclipse-jkube__main .eclipse-jkube__content .hero .hero-content h1{font-size:2.5rem;font-family:Libre Franklin,Roboto,sans-serif;font-weight:400}.eclipse-jkube__main .eclipse-jkube__content .section-dark{background-color:#404040;color:#f1f2f2;margin:0 -16px;padding:16px}@media (min-width:1170px){.eclipse-jkube__main .eclipse-jkube__content .section-dark{position:relative;width:100vw;left:50%;right:50%;margin-left:-50vw;margin-right:-50vw;padding:16px calc((100% - 1170px)/2)}}@media (min-width:1170px){.eclipse-jkube__main .eclipse-jkube__content .section-dark>*{padding:0 calc((100% - 1170px)/2)}}.eclipse-jkube__main .eclipse-jkube__content .highlight{display:flex;align-items:center}.eclipse-jkube__main .eclipse-jkube__content .highlight>p{margin:16px 32px;display:none}@media (min-width:501px){.eclipse-jkube__main .eclipse-jkube__content .highlight>p{display:block}}.eclipse-jkube__main .eclipse-jkube__content .highlight>p img{max-width:100px}.eclipse-jkube__main .eclipse-jkube__content .highlight-description{flex:1 1;min-width:1px}.eclipse-jkube__main .eclipse-jkube__content .highlight ul{flex:1 1;min-width:1px;margin:0;padding:0}.eclipse-jkube__main .eclipse-jkube__content .highlight li{list-style:none;margin:16px 0}.eclipse-jkube__main .eclipse-jkube__content .calendar{position:relative;overflow:hidden;padding-bottom:75%;margin-bottom:16px}@media (min-width:666.66667px){.eclipse-jkube__main .eclipse-jkube__content .calendar{padding-bottom:0;height:500px}}.eclipse-jkube__main .eclipse-jkube__content .calendar iframe{position:absolute;top:0;height:100%;max-height:500px;width:100%}.eclipse-jkube__documentation{margin:0}@media screen and (min-width:768px){.eclipse-jkube__documentation{position:absolute;top:105px;bottom:0;width:100%;overflow:auto}}.eclipse-jkube__documentation .eclipse-jkube__documentation-content{position:relative;padding:16px;overflow:hidden}.eclipse-jkube__documentation .eclipse-jkube__documentation-content article,.eclipse-jkube__documentation .eclipse-jkube__documentation-content aside,.eclipse-jkube__documentation .eclipse-jkube__documentation-content details,.eclipse-jkube__documentation .eclipse-jkube__documentation-content figcaption,.eclipse-jkube__documentation .eclipse-jkube__documentation-content figure,.eclipse-jkube__documentation .eclipse-jkube__documentation-content footer,.eclipse-jkube__documentation .eclipse-jkube__documentation-content header,.eclipse-jkube__documentation .eclipse-jkube__documentation-content hgroup,.eclipse-jkube__documentation .eclipse-jkube__documentation-content main,.eclipse-jkube__documentation .eclipse-jkube__documentation-content nav,.eclipse-jkube__documentation .eclipse-jkube__documentation-content section{display:block}.eclipse-jkube__documentation .eclipse-jkube__documentation-content audio,.eclipse-jkube__documentation .eclipse-jkube__documentation-content video{display:inline-block}.eclipse-jkube__documentation .eclipse-jkube__documentation-content audio:not([controls]){display:none;height:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a{background:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a:focus{outline:thin dotted}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a:active,.eclipse-jkube__documentation .eclipse-jkube__documentation-content a:hover{outline:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1{font-size:2em;margin:.67em 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content abbr[title]{border-bottom:1px dotted}.eclipse-jkube__documentation .eclipse-jkube__documentation-content dfn{font-style:italic}.eclipse-jkube__documentation .eclipse-jkube__documentation-content hr{box-sizing:content-box}.eclipse-jkube__documentation .eclipse-jkube__documentation-content mark{background:#ff0;color:#000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content code,.eclipse-jkube__documentation .eclipse-jkube__documentation-content kbd,.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre,.eclipse-jkube__documentation .eclipse-jkube__documentation-content samp{font-family:monospace;font-size:1em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre{white-space:pre-wrap}.eclipse-jkube__documentation .eclipse-jkube__documentation-content q{quotes:"\201C" "\201D" "\2018" "\2019"}.eclipse-jkube__documentation .eclipse-jkube__documentation-content small{font-size:80%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content sub,.eclipse-jkube__documentation .eclipse-jkube__documentation-content sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.eclipse-jkube__documentation .eclipse-jkube__documentation-content sup{top:-.5em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content sub{bottom:-.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content img{border:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content svg:not(:root){overflow:hidden}.eclipse-jkube__documentation .eclipse-jkube__documentation-content figure{margin:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content legend{border:0;padding:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content button,.eclipse-jkube__documentation .eclipse-jkube__documentation-content input,.eclipse-jkube__documentation .eclipse-jkube__documentation-content select,.eclipse-jkube__documentation .eclipse-jkube__documentation-content textarea{font-family:inherit;font-size:100%;margin:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content button,.eclipse-jkube__documentation .eclipse-jkube__documentation-content input{line-height:normal}.eclipse-jkube__documentation .eclipse-jkube__documentation-content button,.eclipse-jkube__documentation .eclipse-jkube__documentation-content select{text-transform:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content button,.eclipse-jkube__documentation .eclipse-jkube__documentation-content html input[type=button],.eclipse-jkube__documentation .eclipse-jkube__documentation-content input[type=reset],.eclipse-jkube__documentation .eclipse-jkube__documentation-content input[type=submit]{-webkit-appearance:button;cursor:pointer}.eclipse-jkube__documentation .eclipse-jkube__documentation-content button[disabled],.eclipse-jkube__documentation .eclipse-jkube__documentation-content html input[disabled]{cursor:default}.eclipse-jkube__documentation .eclipse-jkube__documentation-content input[type=checkbox],.eclipse-jkube__documentation .eclipse-jkube__documentation-content input[type=radio]{box-sizing:border-box;padding:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content button::-moz-focus-inner,.eclipse-jkube__documentation .eclipse-jkube__documentation-content input::-moz-focus-inner{border:0;padding:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content textarea{overflow:auto;vertical-align:top}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table{border-collapse:collapse;border-spacing:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content *,.eclipse-jkube__documentation .eclipse-jkube__documentation-content :after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content :before{box-sizing:border-box}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body,.eclipse-jkube__documentation .eclipse-jkube__documentation-content html{font-size:100%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a:hover{cursor:pointer}.eclipse-jkube__documentation .eclipse-jkube__documentation-content embed,.eclipse-jkube__documentation .eclipse-jkube__documentation-content img,.eclipse-jkube__documentation .eclipse-jkube__documentation-content object{max-width:100%;height:auto}.eclipse-jkube__documentation .eclipse-jkube__documentation-content embed,.eclipse-jkube__documentation .eclipse-jkube__documentation-content object{height:100%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content img{-ms-interpolation-mode:bicubic}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .left{float:left!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .right{float:right!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .text-left{text-align:left!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .text-right{text-align:right!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .text-center{text-align:center!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .text-justify{text-align:justify!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .hide{display:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content img,.eclipse-jkube__documentation .eclipse-jkube__documentation-content object,.eclipse-jkube__documentation .eclipse-jkube__documentation-content svg{display:inline-block;vertical-align:middle}.eclipse-jkube__documentation .eclipse-jkube__documentation-content textarea{height:auto;min-height:50px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content select{width:100%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .center{margin-left:auto;margin-right:auto}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .stretch{width:100%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock td.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .audioblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .dlist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .hdlist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .olist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .openblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .paragraph>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .qlist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .stemblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .subheader,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .ulist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .videoblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.tableblock>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content dd,.eclipse-jkube__documentation .eclipse-jkube__documentation-content div,.eclipse-jkube__documentation .eclipse-jkube__documentation-content dl,.eclipse-jkube__documentation .eclipse-jkube__documentation-content dt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content form,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6,.eclipse-jkube__documentation .eclipse-jkube__documentation-content li,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol,.eclipse-jkube__documentation .eclipse-jkube__documentation-content p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre,.eclipse-jkube__documentation .eclipse-jkube__documentation-content td,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul{margin:0;padding:0;direction:ltr}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a{color:#2156a5;text-decoration:underline;line-height:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a:focus,.eclipse-jkube__documentation .eclipse-jkube__documentation-content a:hover{color:#1d4b8f}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a img{border:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}.eclipse-jkube__documentation .eclipse-jkube__documentation-content p aside{font-size:.875em;line-height:1.35;font-style:italic}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6{font-family:Open Sans,DejaVu Sans,sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle small,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title small,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1 small,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2 small,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3 small,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4 small,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5 small,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6 small{font-size:60%;color:#e99b8f;line-height:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1{font-size:2.125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2{font-size:1.6875em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3{font-size:1.375em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5{font-size:1.125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6{font-size:1em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content em,.eclipse-jkube__documentation .eclipse-jkube__documentation-content i{font-style:italic;line-height:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content b,.eclipse-jkube__documentation .eclipse-jkube__documentation-content strong{font-weight:700;line-height:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content small{font-size:60%;line-height:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content code{font-family:Droid Sans Mono,DejaVu Sans Mono,monospace;font-weight:400;color:rgba(0,0,0,.9)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content dl,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul{margin-left:1.5em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul li ol,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul li ul{margin-left:1.25em;margin-bottom:0;font-size:1em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.circle li ul,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.disc li ul,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.square li ul{list-style:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.square{list-style-type:square}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.circle{list-style-type:circle}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.disc{list-style-type:disc}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol li ol,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol li ul{margin-left:1.25em;margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content dl dt{margin-bottom:.3125em;font-weight:700}.eclipse-jkube__documentation .eclipse-jkube__documentation-content dl dd{margin-bottom:1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content abbr,.eclipse-jkube__documentation .eclipse-jkube__documentation-content acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}.eclipse-jkube__documentation .eclipse-jkube__documentation-content abbr{text-transform:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote cite:before{content:"\2014 "}.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote cite a,.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote cite a:visited{color:rgba(0,0,0,.6)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}@media screen and (min-width:768px){.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6{line-height:1.2}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1{font-size:2.75em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2{font-size:2.3125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3{font-size:1.6875em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4{font-size:1.4375em}}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tfoot,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table thead{background:#f7f8f7}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tfoot tr td,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tfoot tr th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table thead tr td,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table thead tr th{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tr td,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tr th{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tr.alt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tr.even{background:#f8f8f7}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tbody tr td,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tfoot tr td,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tfoot tr th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table thead tr th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tr td{display:table-cell;line-height:1.6}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6{line-height:1.2;word-spacing:-.05em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1 strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2 strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3 strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4 strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5 strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6 strong{font-weight:400}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .clearfix:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .clearfix:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .float-group:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .float-group:before{content:" ";display:table}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .clearfix:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .float-group:after{clear:both}.eclipse-jkube__documentation .eclipse-jkube__documentation-content :not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}.eclipse-jkube__documentation .eclipse-jkube__documentation-content :not(pre)>code.nobreak{word-wrap:normal}.eclipse-jkube__documentation .eclipse-jkube__documentation-content :not(pre)>code.nowrap{white-space:nowrap}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre{color:rgba(0,0,0,.9);font-family:Droid Sans Mono,DejaVu Sans Mono,monospace;line-height:1.45;text-rendering:optimizeSpeed}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre code,.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre pre{color:inherit;font-size:inherit;line-height:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre>code{display:block}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre.nowrap,.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre.nowrap pre{white-space:pre;word-wrap:normal}.eclipse-jkube__documentation .eclipse-jkube__documentation-content em em{font-style:normal}.eclipse-jkube__documentation .eclipse-jkube__documentation-content strong strong{font-weight:400}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .keyseq{color:rgba(51,51,51,.8)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content kbd{font-family:Droid Sans Mono,DejaVu Sans Mono,monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .keyseq kbd:first-child{margin-left:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .keyseq kbd:last-child{margin-right:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .menuref,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .menuseq{color:#000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .menuref,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .menuseq b:not(.caret){font-weight:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .menuseq{word-spacing:-.02em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .menuseq b.caret{font-size:1.25em;line-height:.8}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .menuseq i.caret{font-weight:700;text-align:center;width:.45em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content b.button:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content b.button:before{position:relative;top:-1px;font-weight:400}.eclipse-jkube__documentation .eclipse-jkube__documentation-content b.button:before{content:"[";padding:0 3px 0 2px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content b.button:after{content:"]";padding:0 2px 0 3px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content p a>code:hover{color:rgba(0,0,0,.9)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header:before{content:" ";display:table}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes:after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header:after{clear:both}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content{margin-top:1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content:before{content:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header>h1:only-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header .details span:first-child{margin-left:-.125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header .details span.email a{color:rgba(0,0,0,.85)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header .details br{display:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header .details br+span:before{content:"\A0\2013\A0"}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header .details br+span.author:before{content:"\A0\22C5\A0";color:rgba(0,0,0,.85)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header .details br+span#revremark:before{content:"\A0|\A0"}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header #revnumber{text-transform:capitalize}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header #revnumber:after{content:"\A0"}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc>ul{margin-left:.125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc ul.sectlevel0>li>a{font-style:italic}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc ul{font-family:Open Sans,DejaVu Sans,sans-serif;list-style-type:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc li{line-height:1.3334;margin-top:.3334em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc a{text-decoration:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc a:active{text-decoration:underline}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle{color:#7a2518;font-size:1.2em}@media screen and (min-width:768px){.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle{font-size:1.375em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.toc2{padding-left:15em;padding-right:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2>ul{font-size:.9em;margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2 ul ul{margin-left:0;padding-left:1em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.toc2.toc-right{padding-left:0;padding-right:15em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}@media screen and (min-width:1280px){.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.toc2{padding-left:20em;padding-right:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2{width:20em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2 #toctitle{font-size:1.375em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2>ul{font-size:.95em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc.toc2 ul ul{padding-left:1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.toc2.toc-right{padding-left:0;padding-right:20em}}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content #toc>:first-child{margin-top:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content #toc>:last-child{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer-text{color:hsla(0,0%,100%,.8);line-height:1.44}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content{margin-bottom:.625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sect1{padding-bottom:.625em}@media screen and (min-width:768px){.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content{margin-bottom:1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sect1{padding-bottom:1.25em}}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sect1:last-child{padding-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sect1+.sect1{border-top:1px solid #e7e7e9}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content h1>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content h1>a.anchor:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle>a.anchor:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title>a.anchor:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2>a.anchor:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3>a.anchor:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4>a.anchor:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5>a.anchor:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6>a.anchor:before{content:"\A7";font-size:.85em;display:block;padding-top:.1em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content h1:hover>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content h1>a.anchor:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle:hover>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle>a.anchor:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title:hover>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title>a.anchor:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2:hover>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2>a.anchor:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3:hover>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3>a.anchor:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4:hover>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4>a.anchor:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5:hover>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5>a.anchor:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6:hover>a.anchor,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6>a.anchor:hover{visibility:visible}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content h1>a.link,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle>a.link,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title>a.link,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2>a.link,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3>a.link,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4>a.link,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5>a.link,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6>a.link{color:#ba3925;text-decoration:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content h1>a.link:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle>a.link:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title>a.link:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2>a.link:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3>a.link:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h4>a.link:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h5>a.link:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h6>a.link:hover{color:#a53221}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .audioblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .stemblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .videoblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content details{margin-bottom:1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock td.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .audioblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .dlist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .hdlist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .olist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .openblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .paragraph>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .qlist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .stemblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .ulist>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .videoblock>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.tableblock>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #preamble>.sectionbody>[class=paragraph]:first-of-type p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .paragraph.lead>p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.tableblock #preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock>table td.icon{text-align:center;width:80px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock>table td.icon img{max-width:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock>table td.icon .title{font-weight:700;font-family:Open Sans,DejaVu Sans,sans-serif;text-transform:uppercase}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content>:first-child{margin-top:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content>:last-child{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>:first-child{margin-top:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>:last-child{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content .olist>ol>li:last-child>:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content .qlist>ol>li:last-child>:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content .ulist>ul>li:last-child>:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content>:last-child>:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content .olist>ol>li:last-child>:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content .qlist>ol>li:last-child>:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content .ulist>ul>li:last-child>:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>:last-child>:last-child{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.content>pre,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock pre{border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}@media screen and (min-width:768px){.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.content>pre,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock pre{font-size:.90625em}}@media screen and (min-width:1280px){.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.content>pre,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock pre{font-size:1em}}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.content>pre:not(.highlight),.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.content>pre[class=highlight],.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.content>pre[class^="highlight "],.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock pre{background:#f7f7f8}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock>.content{position:relative}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock code[data-lang]:before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock:hover code[data-lang]:before{display:block}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock.terminal pre .command:before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock.terminal pre .command:not([data-prompt]):before{content:"$"}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock pre.highlightjs{padding:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock pre.highlightjs>code{padding:1em;border-radius:4px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock pre.prettyprint{border-width:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .prettyprint{background:#f7f7f8}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre.prettyprint .linenums{line-height:1.45;margin-left:2em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre.prettyprint li code[data-lang]:before{opacity:1}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre.prettyprint li:not(:first-child) code[data-lang]:before{display:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.linenotable td.code{padding-left:.75em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.linenotable td.linenos{border-right:1px solid;opacity:.35;padding-right:.5em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre.pygments .lineno{border-right:1px solid;opacity:.35;display:inline-block;margin-right:.75em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre.pygments .lineno:before{content:"";margin-right:-.125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock{margin:0 1em 1.25em 1.5em;display:table}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock blockquote{margin:0;padding:0;border:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock blockquote:before{content:"\201C";float:left;font-size:2.75em;font-weight:700;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock{margin:0 1em 1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock pre{font-family:Open Sans,DejaVu Sans,sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock pre strong{font-weight:400}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .attribution,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .attribution br,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock .attribution br{display:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .attribution cite,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.abstract blockquote:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.excerpt blockquote:before,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .quoteblock blockquote:before{display:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.abstract blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.abstract p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.excerpt blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.excerpt p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .quoteblock blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .quoteblock p{line-height:1.6;word-spacing:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.abstract{margin:0 1em 1.25em;display:block}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.excerpt>blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.excerpt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .quoteblock{margin-left:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.excerpt blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.excerpt p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .quoteblock blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock.excerpt .attribution,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.tableblock{max-width:100%;border-collapse:separate}.eclipse-jkube__documentation .eclipse-jkube__documentation-content p.tableblock:last-child{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.tableblock>.content>:last-child{margin-bottom:-1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.tableblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.tableblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th.tableblock{border:0 solid #dedede}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-all>tbody>tr>.tableblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-all>thead>tr>.tableblock{border-width:0 1px 1px 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-rows>tbody>tr>.tableblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-rows>thead>tr>.tableblock{border-width:0 0 1px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-all>*>tr>.tableblock:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-all>tbody>tr:last-child>.tableblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-all>thead:last-child>tr>.tableblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-rows>tbody>tr:last-child>.tableblock,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.frame-all{border-width:1px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.frame-sides{border-width:0 1px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.frame-ends,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.frame-topbot{border-width:1px 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.stripes-all tr,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.stripes-even tr:nth-of-type(2n),.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.stripes-hover tr:hover,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table.stripes-odd tr:nth-of-type(odd){background:#f8f8f7}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.halign-left,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th.halign-left{text-align:left}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.halign-right,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th.halign-right{text-align:right}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.halign-center,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th.halign-center{text-align:center}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.valign-top,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th.valign-top{vertical-align:top}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.valign-bottom,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th.valign-bottom{vertical-align:bottom}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.valign-middle,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th.valign-middle{vertical-align:middle}.eclipse-jkube__documentation .eclipse-jkube__documentation-content table tfoot th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content table thead th{font-weight:700}.eclipse-jkube__documentation .eclipse-jkube__documentation-content tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}.eclipse-jkube__documentation .eclipse-jkube__documentation-content tbody tr th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content tbody tr th p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content tfoot tr th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content tfoot tr th p{color:rgba(0,0,0,.8);font-weight:700}.eclipse-jkube__documentation .eclipse-jkube__documentation-content p.tableblock>code:only-child{background:none;padding:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content p.tableblock{font-size:1em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol{margin-left:1.75em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul li ol{margin-left:1.5em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content dl dd{margin-left:1.125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content dl dd:last-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content dl dd:last-child>:last-child{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .olist .olist,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .olist .ulist,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .ulist .olist,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .ulist .ulist,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol>li p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol dd,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul>li p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul dd{margin-bottom:.625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.no-bullet,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.none,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.unnumbered,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.unstyled,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.checklist,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.no-bullet,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.none,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.unstyled{list-style-type:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.no-bullet,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.unnumbered,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.no-bullet{margin-left:.625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.unstyled,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.unstyled{margin-left:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.checklist{margin-left:.625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.checklist li>p:first-child>.fa-check-square-o:first-child,.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.checklist li>p:first-child>.fa-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.checklist li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ul.inline>li{margin-left:1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .unstyled dl dt{font-weight:400;font-style:normal}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.arabic{list-style-type:decimal}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.decimal{list-style-type:decimal-leading-zero}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.loweralpha{list-style-type:lower-alpha}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.upperalpha{list-style-type:upper-alpha}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.lowerroman{list-style-type:lower-roman}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.upperroman{list-style-type:upper-roman}.eclipse-jkube__documentation .eclipse-jkube__documentation-content ol.lowergreek{list-style-type:lower-greek}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .colist>table,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .hdlist>table{border:0;background:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .colist>table>tbody>tr,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .hdlist>table>tbody>tr{background:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.hdlist1,.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.hdlist2{vertical-align:top;padding:0 .625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.hdlist1{font-weight:700;padding-bottom:1.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock+.colist,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .literalblock+.colist{margin-top:-.5em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .colist td:not([class]):first-child img{max-width:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .colist td:not([class]):last-child{padding:.25em 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .thumb{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock.left{margin:.25em .625em 1.25em 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock.right{margin:.25em 0 1.25em .625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock>.title{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock.th,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock.thumb{border-width:6px}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock.th>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .imageblock.thumb>.title{padding:0 .125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .image.left,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .image.left{margin-right:.625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .image.right{margin-left:.625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a.image{text-decoration:none;display:inline-block}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a.image object{pointer-events:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content sup.footnote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content sup.footnoteref{font-size:.875em;position:static;vertical-align:super}.eclipse-jkube__documentation .eclipse-jkube__documentation-content sup.footnote a,.eclipse-jkube__documentation .eclipse-jkube__documentation-content sup.footnoteref a{text-decoration:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content sup.footnote a:active,.eclipse-jkube__documentation .eclipse-jkube__documentation-content sup.footnoteref a:active{text-decoration:underline}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes .footnote a:first-of-type{font-weight:700;text-decoration:none;margin-left:-1.05em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes .footnote:last-of-type{margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .gist .file-data>table td.line-data{width:99%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content div.unbreakable{page-break-inside:avoid}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .big{font-size:larger}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .small{font-size:smaller}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .underline{text-decoration:underline}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .overline{text-decoration:overline}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .line-through{text-decoration:line-through}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .aqua{color:#00bfbf}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .aqua-background{background:#00fafa}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .black{color:#000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .black-background{background:#000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .blue{color:#0000bf}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .blue-background{background:#0000fa}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .fuchsia{color:#bf00bf}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .fuchsia-background{background:#fa00fa}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .gray{color:#606060}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .gray-background{background:#7d7d7d}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .green{color:#006000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .green-background{background:#007d00}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .lime{color:#00bf00}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .lime-background{background:#00fa00}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .maroon{color:#600000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .maroon-background{background:#7d0000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .navy{color:#000060}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .navy-background{background:#00007d}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .olive{color:#606000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .olive-background{background:#7d7d00}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .purple{color:#600060}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .purple-background{background:#7d007d}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .red{color:#bf0000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .red-background{background:#fa0000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .silver{color:#909090}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .silver-background{background:#bcbcbc}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .teal{color:#006060}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .teal-background{background:#007d7d}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .white{color:#bfbfbf}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .white-background{background:#fafafa}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .yellow{color:#bfbf00}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .yellow-background{background:#fafa00}.eclipse-jkube__documentation .eclipse-jkube__documentation-content span.icon>.fa{cursor:default}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a span.icon>.fa{cursor:inherit}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock td.icon .icon-note:before{content:"\F05A";color:#19407c}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock td.icon .icon-tip:before{content:"\F0EB";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock td.icon .icon-warning:before{content:"\F071";color:#bf6900}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock td.icon .icon-caution:before{content:"\F06D";color:#bf3400}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .admonitionblock td.icon .icon-important:before{content:"\F06A";color:#bf0000}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:Open Sans,DejaVu Sans,sans-serif;font-style:normal;font-weight:700}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .conum[data-value] *{color:#fff!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .conum[data-value]+b{display:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .conum[data-value]:after{content:attr(data-value)}.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre .conum[data-value]{position:relative;top:-.125em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content b.conum *{color:inherit!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .conum:not([data-value]):empty{display:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content div.footnote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content dt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.content,.eclipse-jkube__documentation .eclipse-jkube__documentation-content th.tableblock{text-rendering:optimizeLegibility}.eclipse-jkube__documentation .eclipse-jkube__documentation-content h1,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2,.eclipse-jkube__documentation .eclipse-jkube__documentation-content p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content span.alt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.content{letter-spacing:-.01em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content div.footnote strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content p strong,.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.content strong{letter-spacing:-.005em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content dt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content span.alt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.content{font-size:1.0625rem}.eclipse-jkube__documentation .eclipse-jkube__documentation-content p{margin-bottom:1.25rem}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock dt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock td.content,.eclipse-jkube__documentation .eclipse-jkube__documentation-content p.tableblock{font-size:1em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .print-only{display:none!important}@page{.eclipse-jkube__documentation .eclipse-jkube__documentation-content{margin:1.25cm .75cm}}@media print{.eclipse-jkube__documentation .eclipse-jkube__documentation-content *{box-shadow:none!important;text-shadow:none!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content html{font-size:80%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a{color:inherit!important;text-decoration:underline!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a.bare,.eclipse-jkube__documentation .eclipse-jkube__documentation-content a[href^="#"],.eclipse-jkube__documentation .eclipse-jkube__documentation-content a[href^="mailto:"]{text-decoration:none!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content a[href^="http:"]:not(.bare):after,.eclipse-jkube__documentation .eclipse-jkube__documentation-content a[href^="https:"]:not(.bare):after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content abbr[title]:after{content:" (" attr(title) ")"}.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content img,.eclipse-jkube__documentation .eclipse-jkube__documentation-content object,.eclipse-jkube__documentation .eclipse-jkube__documentation-content pre,.eclipse-jkube__documentation .eclipse-jkube__documentation-content svg,.eclipse-jkube__documentation .eclipse-jkube__documentation-content tr{page-break-inside:avoid}.eclipse-jkube__documentation .eclipse-jkube__documentation-content thead{display:table-header-group}.eclipse-jkube__documentation .eclipse-jkube__documentation-content svg{max-width:100%}.eclipse-jkube__documentation .eclipse-jkube__documentation-content blockquote,.eclipse-jkube__documentation .eclipse-jkube__documentation-content dt,.eclipse-jkube__documentation .eclipse-jkube__documentation-content p,.eclipse-jkube__documentation .eclipse-jkube__documentation-content td.content{font-size:1em;orphans:3;widows:3}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toctitle,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock>.content>.title,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h2,.eclipse-jkube__documentation .eclipse-jkube__documentation-content h3{page-break-after:avoid}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .exampleblock>.content,.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sidebarblock{background:none!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #header{text-align:center}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #header .details{border:0!important;display:block;padding:0!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #header .details span:first-child{margin-left:0!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #header .details br{display:block}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #header .details br+span:before{content:none!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #preamble,.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book #toc,.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book .sect1>h2,.eclipse-jkube__documentation .eclipse-jkube__documentation-content body.book h1.sect0{page-break-before:always}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .listingblock code[data-lang]:before{display:block}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer{padding:0 .9375em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .hide-on-print{display:none!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .print-only{display:block!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .hide-for-print{display:none!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .show-for-print{display:inherit!important}}@media amzn-kf8,print{.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header>h1:first-child{margin-top:1.25rem}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sect1{padding:0!important}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .sect1+.sect1{border:0}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer{background:none}.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer-text{color:rgba(0,0,0,.6);font-size:.9em}}@media amzn-kf8{.eclipse-jkube__documentation .eclipse-jkube__documentation-content #content,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footer,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #footnotes,.eclipse-jkube__documentation .eclipse-jkube__documentation-content #header{padding:0}}@media screen and (min-width:768px){.eclipse-jkube__documentation .eclipse-jkube__documentation-content{padding-left:21em}.eclipse-jkube__documentation .eclipse-jkube__documentation-content .toc{position:fixed;width:20em;left:0;top:105px;bottom:0;z-index:1000;padding:0 16px;border-right:1px solid #efefed;border-top-width:0!important;border-bottom-width:0!important;overflow:auto}}.eclipse-jkube__documentation .eclipse-jkube__documentation-content i.fa{font-style:normal}.eclipse-jkube__quickstarts{padding:0}.eclipse-jkube__quickstarts-item{list-style:none}.eclipse-jkube__quickstarts-item:not(:last-child){margin-bottom:16px}</style><meta name="generator" content="Gatsby 2.24.12"/><title data-react-helmet="true">org.eclipse.jkube/openshift-maven-plugin</title><meta data-react-helmet="true" charSet="UTF-8"/><meta data-react-helmet="true" name="description" content=""/><style type="text/css"> |
| .anchor.before { |
| position: absolute; |
| top: 0; |
| left: 0; |
| transform: translateX(-100%); |
| padding-right: 4px; |
| } |
| .anchor.after { |
| display: inline-block; |
| padding-left: 4px; |
| } |
| h1 .anchor svg, |
| h2 .anchor svg, |
| h3 .anchor svg, |
| h4 .anchor svg, |
| h5 .anchor svg, |
| h6 .anchor svg { |
| visibility: hidden; |
| } |
| h1:hover .anchor svg, |
| h2:hover .anchor svg, |
| h3:hover .anchor svg, |
| h4:hover .anchor svg, |
| h5:hover .anchor svg, |
| h6:hover .anchor svg, |
| h1 .anchor:focus svg, |
| h2 .anchor:focus svg, |
| h3 .anchor:focus svg, |
| h4 .anchor:focus svg, |
| h5 .anchor:focus svg, |
| h6 .anchor:focus svg { |
| visibility: visible; |
| } |
| </style><script> |
| document.addEventListener("DOMContentLoaded", function(event) { |
| var hash = window.decodeURI(location.hash.replace('#', '')) |
| if (hash !== '') { |
| var element = document.getElementById(hash) |
| if (element) { |
| var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop |
| var clientTop = document.documentElement.clientTop || document.body.clientTop || 0 |
| var offset = element.getBoundingClientRect().top + scrollTop - clientTop |
| // Wait for the browser to finish rendering before scrolling. |
| setTimeout((function() { |
| window.scrollTo(0, offset - 0) |
| }), 0) |
| } |
| } |
| }) |
| </script><link as="script" rel="preload" href="/jkube/webpack-runtime-5e7a06a902090b1f37ba.js"/><link as="script" rel="preload" href="/jkube/framework-fd2b85530eec85104a39.js"/><link as="script" rel="preload" href="/jkube/app-d7398b08e923fe8a3caa.js"/><link as="script" rel="preload" href="/jkube/styles-c2fe8482057191dca484.js"/><link as="script" rel="preload" href="/jkube/commons-8b827618f0536ebfeda2.js"/><link as="script" rel="preload" href="/jkube/component---src-templates-doc-jsx-5366dbd1b50f3447a412.js"/><link as="fetch" rel="preload" href="/jkube/page-data/docs/openshift-maven-plugin/page-data.json" crossorigin="anonymous"/><link as="fetch" rel="preload" href="/jkube/page-data/app-data.json" crossorigin="anonymous"/></head><body><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><div class="eclipse-jkube"><header class="eclipse-jkube__header"><div class="eclipse-jkube__header-container"><a class="eclipse-jkube__header-logo" href="/jkube/"><div class="eclipse-jkube__header-logo-eclipse-image"><img src="/jkube/static/EF_WHT-OR_png-d0fd43ad31261ee9693a060be920e71e.png" alt="Eclipse Foundation"/></div><div class="eclipse-jkube__header-logo-jkube"><img class="eclipse-jkube__header-logo-jkube-image" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI0LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyOTEuMiA4OC41IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyOTEuMiA4OC41OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuamt1YmUtaWNvbi1vdXRlcntmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDt9Cgkuamt1YmUtaWNvbi1pbm5lciwgLmprdWJlLWljb24tb3V0ZXJ7ZmlsbDojRkZGRkZGO30KCS5qa3ViZS10ZXh0e2ZpbGw6ICNGRkZGRkY7fQo8L3N0eWxlPgo8Zz4KCTxwYXRoIGNsYXNzPSJqa3ViZS10ZXh0IiBkPSJNMTAwLjIsMjMuMWgyMS43djI4LjFjMCwzLTAuOCw1LjgtMi4zLDguNGMtMS41LDIuNi0zLjYsNC42LTYuMiw2LjFjLTIuNiwxLjUtNS41LDIuMi04LjUsMi4yYy0zLjEsMC01LjktMC43LTguNS0yLjIKCQljLTIuNi0xLjUtNC43LTMuNS02LjItNi4xYy0xLjUtMi42LTIuMy01LjQtMi4zLTguNGgxMS4yYzAsMS41LDAuNiwyLjgsMS43LDMuOXMyLjUsMS42LDQuMSwxLjZjMS42LDAsMi45LTAuNSw0LjEtMS42CgkJYzEuMS0xLjEsMS43LTIuNCwxLjctMy45di0xN2gtMTAuNVYyMy4xeiIvPgoJPHBhdGggY2xhc3M9ImprdWJlLXRleHQiIGQ9Ik0xNjMuMywyM2wtMTguMywxOS43bDE4LDI0LjNIMTQ5bC0xMS44LTE2bDAsMHYxNS43aC0xMS4yVjIzaDExLjJ2MTEuNkwxNDcuOSwyM0gxNjMuM3oiLz4KCTxwYXRoIGNsYXNzPSJqa3ViZS10ZXh0IiBkPSJNMTk4LDM1LjFjLTAuMywyLjYtMC40LDQuOS0wLjQsOC4ydjE3YzAsMy44LDAuMSw2LDAuNCw4LjJIMTg3di0yLjRjMC0wLjMsMC0xLjEsMC4xLTEuNWMtMy42LDMuNC02LjgsNC43LTExLjQsNC43CgkJYy0zLjcsMC02LjYtMS04LjctMy4xYy0yLjItMi4yLTMuMS00LjktMy4xLTkuMlY0My4zYzAtMy4yLTAuMi01LjktMC40LTguMmgxMS40Yy0wLjMsMi42LTAuNCw0LjktMC40LDguMnYxMS4zCgkJYzAsMi4zLDAuMiwzLjIsMC45LDQuMWMwLjgsMSwyLDEuNSwzLjYsMS41YzMsMCw2LjEtMi4xLDguMi01LjdWNDMuM2MwLTMuMS0wLjEtNS40LTAuNC04LjJIMTk4eiIvPgoJPHBhdGggY2xhc3M9ImprdWJlLXRleHQiIGQ9Ik0yMDMuNyw2OC42YzAuMy0yLjYsMC40LTQuOSwwLjQtOC42VjMxLjVjMC00LTAuMS02LTAuNC04LjZoMTEuMWMtMC4zLDIuNi0wLjQsNC42LTAuNCw4LjZ2NC42YzAsMC44LDAsMS4zLTAuMSwyLjEKCQljMy4yLTIuOSw2LjgtNC4xLDExLjMtNC4xYzEwLDAsMTUuOCw2LjQsMTUuOCwxNy4yYzAsNS45LTEuNywxMC42LTQuOSwxMy45Yy0yLjksMi45LTYuNiw0LjMtMTEuNCw0LjNjLTQuNiwwLTcuMi0wLjktMTAuOC0zLjkKCQljMCwwLjIsMC4xLDAuOSwwLjEsMS4ydjEuOEgyMDMuN3ogTTIyMy4yLDQyLjRjLTUsMC04LjYsMy44LTguNiw5LjJjMCw1LjQsMy42LDkuNiw4LjMsOS42YzQuOCwwLDgtMy45LDgtOS43CgkJQzIzMC45LDQ1LjgsMjI4LDQyLjQsMjIzLjIsNDIuNHoiLz4KCTxwYXRoIGNsYXNzPSJqa3ViZS10ZXh0IiBkPSJNMjU0LjYsNTQuOWMwLjUsNC40LDMuMSw2LjgsNy41LDYuOGMyLjIsMCw0LjEtMC43LDUuNS0yYzAuOC0wLjgsMS4yLTEuNCwxLjYtMi44bDkuNiwyLjdjLTEuMywyLjktMi4xLDQuMS0zLjYsNS43CgkJYy0zLjEsMy4xLTcuNSw0LjctMTMsNC43Yy01LjQsMC05LjYtMS41LTEyLjctNC43Yy0zLjItMy4zLTUtOC01LTEzLjRjMC0xMC45LDctMTguMSwxNy41LTE4LjFjOC42LDAsMTQuNiw0LjcsMTYuNSwxMi45CgkJYzAuNCwxLjgsMC43LDQuMSwwLjgsNy4yYzAsMC4yLDAsMC41LDAuMSwxLjFIMjU0LjZ6IE0yNjguOSw0Ny4zYy0wLjgtMy41LTMuMS01LjQtNi45LTUuNGMtMy45LDAtNi4zLDEuOC03LjIsNS40SDI2OC45eiIvPgo8L2c+CjxnPgoJPHBhdGggY2xhc3M9ImprdWJlLWljb24tb3V0ZXIiIGQ9Ik05LjMsNTkuOGMwLjksMC44LDIuNSwxLjUsMy41LDIuMWwyMS42LDEyLjVjMSwwLjYsMi41LDEuNiwzLjYsMnYtNi4zTDE0LjgsNTYuNmwwLTI2LjgKCQljLTEuNi0wLjQtNC4yLTIuNy01LjYtMi45TDkuMyw1OS44eiIvPgoJPHBhdGggY2xhc3M9ImprdWJlLWljb24tb3V0ZXIiIGQ9Ik02OSw1OS44bC0wLjEtMzNjLTEuNSwwLjUtMy45LDIuNi01LjUsM2wwLDI2LjljLTAuOCwwLjgtNC45LDIuOS02LjEsMy42TDQ1LDY3LjNjLTUuMSwzLTQuOCwyLTQuOCw0LjkKCQlsMC4xLDQuMkw2OSw1OS44eiIvPgoJPHBhdGggY2xhc3M9ImprdWJlLWljb24tb3V0ZXIiIGQ9Ik0xNS45LDI4YzEuOS0wLjcsNC4zLTIuNCw2LTMuNGMxLjktMS4xLDMuOC0yLjIsNS43LTMuM2MyLjEtMS4yLDMuNy0yLjIsNS44LTMuNGMxLjctMC45LDQuMS0yLjYsNS43LTMuMgoJCWwxNC4zLDguMmMyLjQsMS40LDQuNywyLjcsNy4yLDQuMWMyLjEsMS4yLDEuNiwxLDMuNy0wLjFjMS0wLjYsMi43LTEuNCwzLjQtMi4xQzY3LDI0LjEsMzkuNCw4LjMsMzkuMiw4LjMKCQlDMzksOC4zLDExLjQsMjQsMTAuNSwyNC45TDE1LjksMjh6Ii8+CjwvZz4KPHBhdGggY2xhc3M9ImprdWJlLWljb24taW5uZXIiIGQ9Ik0zOS4yLDE3LjhMMTcuOCwzMC4xdjI0LjdsMjEuNCwxMi4zbDIxLjQtMTIuM1YzMC4xTDM5LjIsMTcuOHogTTQ2LjYsNDYuOGMwLDEuOC0wLjUsMy42LTEuNCw1LjEKCWMtMC45LDEuNi0yLjIsMi44LTMuOCwzLjdjLTEuNiwwLjktMy4zLDEuNC01LjIsMS40Yy0xLjksMC0zLjYtMC41LTUuMi0xLjRjLTEuNi0wLjktMi45LTIuMi0zLjgtMy43Yy0wLjktMS42LTEuNC0zLjMtMS40LTUuMWg2LjgKCWMwLDAuOSwwLjMsMS43LDEsMi40czEuNSwxLDIuNSwxYzEsMCwxLjgtMC4zLDIuNS0xYzAuNy0wLjcsMS0xLjUsMS0yLjRWMzYuNWgtNi40di02LjhoMTMuM1Y0Ni44eiIvPgo8L3N2Zz4K" alt="JKube"/><span class="eclipse-jkube__header-trade-mark">â„¢</span></div></a><div class="eclipse-jkube__header-content"><ul><li><a href="/jkube/docs">Docs</a></li><li><a href="/jkube/demos">Demos</a></li><li><a href="/jkube/community">Community</a></li><li><a href="/jkube/contributing">Contributing</a></li><li><a class="eclipse-jkube__header-stars" href="https://github.com/eclipse/jkube" title="eclipse/jkube" target="_blank" rel="nofollow noopener noreferrer"><img src="https://img.shields.io/github/stars/eclipse/jkube?style=social" alt="eclipse/jkube stargazers"/></a></li></ul></div></div></header><div class="eclipse-jkube__documentation book toc2 toc-left"><div class="eclipse-jkube__documentation-content"><div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>© 2020 The original authors.</p> |
| </div> |
| <div id="toc" class="toc"> |
| <div id="toctitle" class="title">openshift-maven-plugin</div> |
| <ul class="sectlevel1"> |
| <li><a href="#introduction">1. Introduction</a> |
| <ul class="sectlevel2"> |
| <li><a href="#building-images">1.1. Building Images</a></li> |
| <li><a href="#resource-descriptors">1.2. Kubernetes Resources</a></li> |
| <li><a href="#_configuration">1.3. Configuration</a></li> |
| <li><a href="#_examples">1.4. Examples</a> |
| <ul class="sectlevel3"> |
| <li><a href="#zero-config">1.4.1. Zero-Config</a></li> |
| <li><a href="#_xml_configuration">1.4.2. XML Configuration</a></li> |
| <li><a href="#_resource_fragments">1.4.3. Resource Fragments</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="#compatibility-with-OpenShift">2. Compatibility with OpenShift</a> |
| <ul class="sectlevel2"> |
| <li><a href="#openshift-compatibility">2.1. OpenShift Compatibility</a></li> |
| </ul> |
| </li> |
| <li><a href="#installation">3. Installation</a></li> |
| <li><a href="#goals">4. Goals Overview</a></li> |
| <li><a href="#goals-overview-build">5. Build Goals</a> |
| <ul class="sectlevel2"> |
| <li><a href="#jkube:resource">5.1. <strong>oc:resource</strong></a> |
| <ul class="sectlevel3"> |
| <li><a href="#resource-labels-annotations">5.1.1. Labels and Annotations</a></li> |
| <li><a href="#resource-secrets">5.1.2. Secrets</a></li> |
| <li><a href="#resource-validation">5.1.3. Resource Validation</a></li> |
| <li><a href="#resource-route-generation">5.1.4. Route Generation</a></li> |
| <li><a href="#Supported-Properties-Resource">5.1.5. Supported Properties for Resource goal</a></li> |
| </ul> |
| </li> |
| <li><a href="#jkube:build">5.2. <strong>oc:build</strong></a> |
| <ul class="sectlevel3"> |
| <li><a href="#build-kubernetes">5.2.1. Kubernetes Build</a></li> |
| <li><a href="#build-openshift">5.2.2. OpenShift Build</a></li> |
| <li><a href="#build-goal-configuration">5.2.3. Configuration (XML)</a></li> |
| <li><a href="#_kubernetes_access_configuration">5.2.4. Kubernetes Access Configuration</a></li> |
| <li><a href="#_image_configuration">5.2.5. Image Configuration</a></li> |
| <li><a href="#build-configuration">5.2.6. Build Configuration</a></li> |
| <li><a href="#build-assembly">5.2.7. Assembly</a></li> |
| <li><a href="#misc-env">5.2.8. Environment and Labels</a></li> |
| <li><a href="#misc-startup">5.2.9. Startup Arguments</a></li> |
| <li><a href="#build-buildargs">5.2.10. Build Args</a></li> |
| <li><a href="#build-healthcheck">5.2.11. Healthcheck</a></li> |
| </ul> |
| </li> |
| <li><a href="#jkube:push">5.3. <strong>oc:push</strong></a></li> |
| <li><a href="#jkube:apply">5.4. <strong>oc:apply</strong></a> |
| <ul class="sectlevel3"> |
| <li><a href="#Supported-Properties-Apply">5.4.1. Supported Properties For Apply goal</a></li> |
| </ul> |
| </li> |
| <li><a href="#jkube:helm">5.5. <strong>oc:helm</strong></a></li> |
| </ul> |
| </li> |
| <li><a href="#goals-overview-develop">6. Development Goals</a> |
| <ul class="sectlevel2"> |
| <li><a href="#jkube:deploy">6.1. <strong>oc:deploy</strong></a></li> |
| <li><a href="#jkube:undeploy">6.2. <strong>oc:undeploy</strong></a></li> |
| <li><a href="#jkube:log">6.3. <strong>oc:log</strong></a> |
| <ul class="sectlevel3"> |
| <li><a href="#Supported-Properties-Log">6.3.1. Supported Properties for Log goal</a></li> |
| </ul> |
| </li> |
| <li><a href="#jkube:debug">6.4. <strong>oc:debug</strong></a> |
| <ul class="sectlevel3"> |
| <li><a href="#_speeding_up_debugging">6.4.1. Speeding up debugging</a></li> |
| <li><a href="#_debugging_with_suspension">6.4.2. Debugging with suspension</a></li> |
| <li><a href="#Supported-Properties-Debug">6.4.3. Supported Properties For Debug Goal</a></li> |
| </ul> |
| </li> |
| <li><a href="#jkube:watch">6.5. <strong>oc:watch</strong></a> |
| <ul class="sectlevel3"> |
| <li><a href="#watcher-spring-boot">6.5.1. Spring Boot</a></li> |
| <li><a href="#watcher-docker-image">6.5.2. Docker Image</a></li> |
| <li><a href="#Supported-Properties-Watch">6.5.3. Supported Properties for Watch goal</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="#generators">7. Generators</a> |
| <ul class="sectlevel2"> |
| <li><a href="#generators-default">7.1. Default Generators</a> |
| <ul class="sectlevel3"> |
| <li><a href="#generator-java-exec">7.1.1. Java Applications</a></li> |
| <li><a href="#generator-spring-boot">7.1.2. Spring Boot</a></li> |
| <li><a href="#generator-wildfly-swarm">7.1.3. Wildfly Swarm</a></li> |
| <li><a href="#generator-thorntail-v2">7.1.4. Thorntail v2</a></li> |
| <li><a href="#generator-vertx">7.1.5. Vert.x</a></li> |
| <li><a href="#generator-karaf">7.1.6. Karaf</a></li> |
| <li><a href="#generator-webapp">7.1.7. Web Applications</a></li> |
| <li><a href="#generator-quarkus">7.1.8. Quarkus</a></li> |
| <li><a href="#generator-openliberty">7.1.9. Open Liberty</a></li> |
| <li><a href="#generator-wildfly-jar">7.1.10. Wildfly JAR Generator</a></li> |
| </ul> |
| </li> |
| <li><a href="#generators-api">7.2. Generator API</a></li> |
| </ul> |
| </li> |
| <li><a href="#enrichers">8. Enrichers</a> |
| <ul class="sectlevel2"> |
| <li><a href="#enrichers-default">8.1. Default Enrichers</a> |
| <ul class="sectlevel3"> |
| <li><a href="#enrichers-generic">8.1.1. Generic Enrichers</a></li> |
| <li><a href="#enrichers-specific">8.1.2. Specific Enrichers</a></li> |
| </ul> |
| </li> |
| <li><a href="#_enricher_api">8.2. Enricher API</a></li> |
| </ul> |
| </li> |
| <li><a href="#profiles">9. Profiles</a> |
| <ul class="sectlevel2"> |
| <li><a href="#generator-enricher-definition">9.1. Generator and Enricher definitions</a></li> |
| <li><a href="#profiles-lookup-order">9.2. Lookup order</a></li> |
| <li><a href="#profiles-using">9.3. Using Profiles</a></li> |
| <li><a href="#profiles-predefined">9.4. Predefined Profiles</a></li> |
| <li><a href="#profiles-extended">9.5. Extending Profiles</a></li> |
| </ul> |
| </li> |
| <li><a href="#access-configuration">10. Access configuration</a> |
| <ul class="sectlevel2"> |
| <li><a href="#_docker_access">10.1. Docker Access</a></li> |
| <li><a href="#_openshift_and_kubernetes_access">10.2. OpenShift and Kubernetes Access</a></li> |
| </ul> |
| </li> |
| <li><a href="#registry">11. Registry handling</a></li> |
| <li><a href="#authentication">12. Authentication</a> |
| <ul class="sectlevel2"> |
| <li><a href="#_pull_vs_push_authentication">12.1. Pull vs. Push Authentication</a></li> |
| <li><a href="#_openshift_authentication">12.2. OpenShift Authentication</a></li> |
| <li><a href="#password-encryption">12.3. Password encryption</a></li> |
| <li><a href="#extended-authentication">12.4. Extended Authentication</a></li> |
| </ul> |
| </li> |
| <li><a href="#volume-configuration">13. Volume Configuration</a></li> |
| <li><a href="#integrations">14. Integrations</a> |
| <ul class="sectlevel2"> |
| <li><a href="#integrations.dekorate">14.1. Dekorate</a></li> |
| <li><a href="#_jib_java_image_builder">14.2. JIB (Java Image Builder)</a></li> |
| </ul> |
| </li> |
| <li><a href="#faq">15. FAQ</a> |
| <ul class="sectlevel2"> |
| <li><a href="#_general_questions">15.1. General questions</a> |
| <ul class="sectlevel3"> |
| <li><a href="#_how_do_i_define_an_environment_variable">15.1.1. How do I define an environment variable?</a></li> |
| <li><a href="#_how_do_i_define_a_system_property">15.1.2. How do I define a system property?</a></li> |
| <li><a href="#_how_do_i_mount_a_config_file_from_a_configmap">15.1.3. How do I mount a config file from a ConfigMap?</a></li> |
| <li><a href="#_how_do_i_use_a_persistent_volume">15.1.4. How do I use a Persistent Volume?</a></li> |
| <li><a href="#_how_do_i_generate_ingress_for_my_generated_service">15.1.5. How do I generate Ingress for my generated Service?</a></li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li><a href="#appendix">16. Appendix</a> |
| <ul class="sectlevel2"> |
| <li><a href="#_kindfilename_type_mapping">16.1. Kind/Filename Type Mapping</a></li> |
| <li><a href="#_custom_kindfilename_mapping">16.2. Custom Kind/Filename Mapping</a></li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="introduction">1. Introduction</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>The <strong>openshift-maven-plugin</strong> brings your Java applications on to |
| <a href="https://www.openshift.com/">OpenShift</a>. |
| It provides a tight integration into <a href="http://maven.apache.org">Maven</a> and benefits from the build configuration already provided. |
| This plugin focus on two tasks: <em>Building Docker images</em> and <em>creating Kubernetes resource descriptors</em>. |
| It can be configured very flexibly and supports multiple configuration models for creating: A <em>Zero-Config</em> setup allows for a quick ramp-up with some opinionated defaults. |
| For more advanced requirements, an <em>XML configuration</em> provides additional configuration options which can be added to the <code>pom.xml</code>. |
| For the full power, in order to tune all facets of the creation, external <em>resource fragments</em> and <em>Dockerfiles</em> can be used.</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="building-images">1.1. Building Images</h3> |
| <div class="paragraph"> |
| <p>The <a href="#jkube:build"><strong>oc:build</strong></a> goal is for creating Docker images containing the actual application. These then can be deployed later on Kubernetes or OpenShift. |
| It is easy to include build artifacts and their dependencies into these images. |
| This plugin uses the assembly descriptor format similar to the one used in |
| <a href="http://maven.apache.org/plugins/maven-assembly-plugin/">maven-assembly-plugin</a> to specify the content which will be added |
| to the image. |
| That images can then be pushed to public or private Docker registries with <a href="#jkube:push"><strong>oc:push</strong></a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Depending on the operational mode, for building the actual image either a Docker daemon is used directly or an <a href="https://docs.openshift.com/enterprise/3.0/architecture/core_concepts/builds_and_image_streams.html#docker-build">OpenShift Docker Build</a> is performed.</p> |
| </div> |
| <div class="paragraph"> |
| <p>A special <a href="#jkube:watch"><strong>oc:watch</strong></a> goal allows for reacting to code changes to automatically recreate images or copy new artifacts into running containers.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="resource-descriptors">1.2. Kubernetes Resources</h3> |
| <div class="paragraph"> |
| <p>Kubernetes resource descriptors can be created or generated from <a href="#jkube:resource"><strong>oc:resource</strong></a>. |
| These files are packaged within the Maven artifacts and can be deployed to a running orchestration platform with <a href="#jkube:apply"><strong>oc:apply</strong></a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Typically you only specify a small part of the real resource descriptors which will be enriched by this plugin with various extra information taken from the <code>pom.xml</code>. |
| This drastically reduces boilerplate code for common scenarios.</p> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="_configuration">1.3. Configuration</h3> |
| <div class="paragraph"> |
| <p>As mentioned already there are three levels of configuration:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><strong>Zero-Config</strong> mode makes some very opinionated decisions based on what is present in the pom.xml like what base image to use or which ports to expose. |
| This is great for starting up things and for keeping quickstart applications small and tidy.</p> |
| </li> |
| <li> |
| <p><strong>XML plugin configuration</strong> mode is similar to what <a href="https://dmp.fabric8.io/#example">docker-maven-plugin</a> provides. |
| This allows for type-safe configuration with IDE support, but only a subset of possible resource descriptor features is provided.</p> |
| </li> |
| <li> |
| <p><strong>Kubernetes & OpenShift resource fragments</strong> are user provided YAML files that can be <em>enriched</em> by the plugin. This allows expert users to use a plain configuration file with all their capabilities, but also to add project specific build information and avoid boilerplate code.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>The following table gives an overview of the different models</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 1. Configuration Models</caption> |
| <colgroup> |
| <col style="width: 12.5%;"> |
| <col style="width: 50%;"> |
| <col style="width: 37.5%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Model</th> |
| <th class="tableblock halign-left valign-top">Docker Images</th> |
| <th class="tableblock halign-left valign-top">Resource Descriptors</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Zero-Config</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#generators">Generators</a> are used to create Docker image configurations. Generators can detect certain aspects of |
| the build (e.g. whether Spring Boot is used) and then choose some opinionated defaults like the base image, which |
| ports to expose and the startup command. They can be configured, but offer only a few options.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Default <a href="#enrichers">Enrichers</a> will create a default <em>Service</em> and <em>Deployment</em> (<em>DeploymentConfig</em> for OpenShift) |
| when no other resource objects are provided. Depending on the image they can detect which port to expose in the |
| service. As with Generators, Enrichers support a limited set of configuration options.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>XML configuration</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">openshift-maven-plugin inherits the XML based configuration for building images from the |
| <a href="https://dmp.fabric8.io/#docker:build">docker-maven-plugin</a> and provides the same functionality. It supports an |
| <a href="http://maven.apache.org/components/plugins/maven-assembly-plugin/assembly.html">assembly descriptor</a> for specifying the |
| content of the Docker image.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">A subset of possible resource objects can be configured with a dedicated XML syntax. With a decent IDE you get |
| autocompletion on most objects and inline documentation for the available configuration elements. The provided |
| configuration can be still enhanced by Enhancers which is useful for adding e.g. labels and annotations containing |
| build or other information.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>Resource Fragments</strong> and <strong>Dockerfiles</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Similarly to the docker-maven-plugin, openshift-maven-plugin supports <a href="#external-dockerfile">external Dockerfiles</a> too, which are |
| referenced from the plugin configuration.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Resource descriptors can be provided as external YAML files which will build a base skeleton for the applicable resource.</p> |
| <p class="tableblock"> The "skeleton" is then post-processed by <a href="#enrichers">Enrichers</a> which will complete the skeleton by adding the fields |
| each enricher is responsible of (labels, annotations, port information, etc.). Maven properties within these files |
| are resolved to their values.</p> |
| <p class="tableblock"> With this model you can use every Kubernetes / OpenShift resource objects with all their flexibility, but still get the benefit |
| of adding build information.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <div class="sect2"> |
| <h3 id="_examples">1.4. Examples</h3> |
| <div class="paragraph"> |
| <p>Let’s have a look at some code. The following examples will demonstrate all three configurations variants:</p> |
| </div> |
| <div class="sect3"> |
| <h4 id="zero-config">1.4.1. Zero-Config</h4> |
| <div class="paragraph"> |
| <p>This minimal but full working example <code>pom.xml</code> shows how a simple spring boot application can be dockerized and |
| prepared for Kubernetes. The full example can be found in directory |
| <a href="https://github.com/eclipse/jkube/tree/master/quickstarts/maven/zero-config">quickstarts/maven/zero-config</a>.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><project> |
| <modelVersion>4.0.0</modelVersion> |
| |
| <groupId>org.eclipse.jkube</groupId> |
| <artifactId>jkube-maven-sample-zero-config</artifactId> |
| <version>1.0.1</version> |
| <packaging>jar</packaging> |
| |
| <parent> |
| <groupId>org.springframework.boot</groupId> |
| <artifactId>spring-boot-starter-parent</artifactId> <i class="conum" data-value="1"></i><b>(1)</b> |
| <version>1.5.5.RELEASE</version> |
| </parent> |
| |
| <dependencies> |
| <dependency> |
| <groupId>org.springframework.boot</groupId> |
| <artifactId>spring-boot-starter-web</artifactId> <i class="conum" data-value="2"></i><b>(2)</b> |
| </dependency> |
| </dependencies> |
| |
| <build> |
| <plugins> |
| <plugin> |
| <groupId>org.springframework.boot</groupId> |
| <artifactId>spring-boot-maven-plugin</artifactId> <i class="conum" data-value="3"></i><b>(3)</b> |
| </plugin> |
| <plugin> |
| <groupId>org.eclipse.jkube</groupId> |
| <artifactId>openshift-maven-plugin</artifactId> <i class="conum" data-value="4"></i><b>(4)</b> |
| <version>1.0.1</version> |
| </plugin> |
| </plugins> |
| </build> |
| </project></code></pre> |
| </div> |
| </div> |
| <div class="colist arabic"> |
| <table> |
| <tr> |
| <td><i class="conum" data-value="1"></i><b>1</b></td> |
| <td>This minimalistic spring boot application uses the spring-boot parent POM for setting up dependencies and plugins</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="2"></i><b>2</b></td> |
| <td>The Spring Boot web starter dependency enables a simple embedded Tomcat for serving Spring MVC apps</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="3"></i><b>3</b></td> |
| <td>The <code>spring-boot-maven-plugin</code> is responsible for repackaging the application into a fat jar, including all dependencies and the embedded Tomcat</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="4"></i><b>4</b></td> |
| <td>The <code>openshift-maven-plugin</code> enables the automatic generation of a Docker image and Kubernetes / OpenShift descriptors including this Spring application.</td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>This setup make some opinionated decisions for you:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>As base image <a href="https://quay.io/repository/jkube/jkube-java-binary-s2i">jkube/jkube-java-binary-s2i</a> |
| is chosen which enables <a href="https://www.jolokia.org">Jolokia</a> and <a href="https://github.com/prometheus/jmx_exporter">jmx_exporter</a>. |
| It also comes with a sophisticated <a href="https://github.com/jboss-openshift/cct_module/tree/master/jboss/container/java/run/bash">startup script</a>.</p> |
| </li> |
| <li> |
| <p>It will create a Kubernetes <a href="http://kubernetes.io/docs/user-guide/deployments/">Deployment</a> and a |
| <a href="http://kubernetes.io/docs/user-guide/services/">Service</a> as resource objects</p> |
| </li> |
| <li> |
| <p>It exports port 8080 as the application service port (and 8778 and 9779 for Jolokia and jmx_exporter access, respectively)</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>These choices can be influenced by configuration options as described in <a href="#generator-spring-boot">Spring Boot Generator</a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>To start the Docker image build, you simply run</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-bash" data-lang="bash">mvn package oc:build</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>This will create the Docker image against a running Docker daemon (which must be accessible either via Unix Socket or |
| with the URL set in <code>DOCKER_HOST</code>). Alternatively, when connected to an OpenShift cluster then a <a href="https://docs.openshift.com/enterprise/3.0/using_images/s2i_images/index.html">S2I</a> build will be performed on OpenShift which at the end creates an |
| <a href="https://docs.openshift.com/enterprise/3.1/architecture/core_concepts/builds_and_image_streams.html">ImageStream</a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>To deploy the resources to the cluster call</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-bash" data-lang="bash">mvn oc:resource oc:deploy</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>By default a <em>Service</em> and a <em>Deployment</em> object pointing to the created Docker image is created. When running in OpenShift mode, a <em>Service</em> and <em>DeploymentConfig</em> which refers the <em>ImageStream</em> created with <code>oc:build</code> will be installed.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Of course you can bind all those jkube-goals to execution phases as well, so that they are called along with standard lifecycle goals like <code>install</code>. For example, to bind the building of the Kubernetes resource files and the Docker images, add the following goals to the execution of the openshift-maven-plugin:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example for lifecycle bindings</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><plugin> |
| <groupId>org.eclipse.jkube</groupId> |
| <artifactId>openshift-maven-plugin</artifactId> |
| |
| <!-- ... --> |
| |
| <executions> |
| <execution> |
| <goals> |
| <goal>resource</goal> |
| <goal>build</goal> |
| </goals> |
| </execution> |
| </executions> |
| </plugin></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>If you’d also like to automatically deploy to Kubernetes each time you do a <code>mvn install</code> you can add the <code>apply</code> goal:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example for lifecycle bindings with automatic deploys for mvn install</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><plugin> |
| <groupId>org.eclipse.jkube</groupId> |
| <artifactId>openshift-maven-plugin</artifactId> |
| |
| <!-- ... --> |
| |
| <executions> |
| <execution> |
| <goals> |
| <goal>resource</goal> |
| <goal>build</goal> |
| <goal>apply</goal> |
| </goals> |
| </execution> |
| </executions> |
| </plugin></code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_xml_configuration">1.4.2. XML Configuration</h4> |
| <div class="admonitionblock warning"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-warning" title="Warning"></i> |
| </td> |
| <td class="content"> |
| XML based configuration is only partially implemented and is not recommended for use right now. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>Although the Zero-config mode and its generators can be tweaked with options up to a certain degree, many cases require more flexibility. For such instances, an XML-based plugin configuration can be used, in a way similar to the |
| <a href="https://dmp.fabric8.io/#configuration">XML configuration</a> used by <code>docker-maven-plugin</code>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The plugin configuration can be roughly divided into the following sections:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Global configuration options are responsible for tuning the behaviour of plugin goals</p> |
| </li> |
| <li> |
| <p><code><images></code> defines which Docker <a href="#image-configuration">images</a> are used and configured. This section is similar to the |
| <a href="https://dmp.fabric8.io//#image-configuration">image configuration</a> of the <code>docker-maven-plugin</code>, except that <code><run></code> |
| and <code><external></code> sub-elements are ignored)</p> |
| </li> |
| <li> |
| <p><code><resource></code> defines the resource descriptors for deploying on an OpenShift or Kuberneres cluster.</p> |
| </li> |
| <li> |
| <p><code><generator></code> configures <a href="#generators">generators</a> which are responsible for creating images. Generators are used as an alternative to a dedicated <code><images></code> section.</p> |
| </li> |
| <li> |
| <p><code><enricher></code> configures various aspects of <a href="#enrichers">enrichers</a> for creating or enhancing resource descriptors.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>A working example can be found in the |
| <a href="https://github.com/eclipse/jkube/tree/master/quickstarts/maven/xml-config">quickstarts/maven/xml-config</a> directory. |
| An extract of the plugin configuration is shown below:</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example for an XML configuration</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><configuration> |
| <namespace>test-ns</namespace> |
| <images> <i class="conum" data-value="1"></i><b>(1)</b> |
| <image> |
| <name>xml-config-demo:1.0.0</name> |
| <!-- "alias" is used to correlate to the containers in the pod spec --> |
| <alias>camel-app</alias> |
| <build> |
| <from>fabric8/java-centos-openjdk8-jre</from> |
| <assembly> |
| <inline> |
| <baseDirectory>/deployments</baseDirectory> |
| </inline> |
| </assembly> |
| <env> |
| <JAVA_LIB_DIR>/deployments</JAVA_LIB_DIR> |
| <JAVA_MAIN_CLASS>org.apache.camel.cdi.Main</JAVA_MAIN_CLASS> |
| </env> |
| </build> |
| </image> |
| </images> |
| |
| <resources> <i class="conum" data-value="2"></i><b>(2)</b> |
| <labels> <i class="conum" data-value="3"></i><b>(3)</b> |
| <all> |
| <group>quickstarts</group> |
| </all> |
| </labels> |
| |
| <replicas>2</replicas> <i class="conum" data-value="4"></i><b>(4)</b> |
| <controllerName>${project.artifactId}</controllerName> <i class="conum" data-value="5"></i><b>(5)</b> |
| |
| <services> <i class="conum" data-value="6"></i><b>(6)</b> |
| <service> |
| <name>camel-service</name> |
| <headless>true</headless> |
| </service> |
| </services> |
| |
| <serviceAccounts> |
| <serviceAccount> |
| <name>build-robot</name> |
| </serviceAccount> |
| </serviceAccounts> |
| </resources> |
| </configuration></code></pre> |
| </div> |
| </div> |
| <div class="colist arabic"> |
| <table> |
| <tr> |
| <td><i class="conum" data-value="1"></i><b>1</b></td> |
| <td>Standard XML configuration for building one single Docker image</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="2"></i><b>2</b></td> |
| <td>Kubernetes / OpenShift resources to create</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="3"></i><b>3</b></td> |
| <td>Labels which should be applied globally to all resource objects</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="4"></i><b>4</b></td> |
| <td>Number of replicas desired</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="5"></i><b>5</b></td> |
| <td>Name of controller created by plugin</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="6"></i><b>6</b></td> |
| <td>One or more <a href="http://kubernetes.io/docs/user-guide/services/">Service</a> definitions.</td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>The XML resource configuration is based on plain Kubernetes resource objects. When targeting OpenShift, Kubernetes resource descriptors will be automatically converted to their OpenShift counterparts, e.g. a Kubernetes <a href="http://kubernetes.io/docs/user-guide/deployments/">Deployment</a> will be converted to an OpenShift <a href="https://docs.openshift.com/container-platform/4.1/applications/deployments/what-deployments-are.html#deployments-and-deploymentconfigs_what-deployments-are">DeploymentConfig</a>.</p> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="_resource_fragments">1.4.3. Resource Fragments</h4> |
| <div class="paragraph"> |
| <p>The third configuration option is to use an external configuration in form of YAML resource descriptors which are located in the <code>src/main/jkube</code> directory. Each resource gets its own file, which contains a skeleton of a resource descriptor. The plugin will pick up the resource, enrich it and then combine all to a single <code>kubernetes.yml</code> and <code>openshift.yml</code> file. Within these descriptor files you are can freely use any Kubernetes feature.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Note: In order to support simultaneously both OpenShift and Kubernetes, there is currently no way to specify OpenShift-only features this way, though this might change in future releases.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Let’s have a look at an example from |
| <a href="https://github.com/eclipse/jkube/tree/master/quickstarts/maven/external-resources">quickstarts/maven/external-resources</a>. |
| This is a plain Spring Boot application, whose images are auto generated like in the <a href="#zero-config">Zero-Config</a> case. |
| The resource fragments are in <code>src/main/jkube</code>.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example fragment "deployment.yml"</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-yaml" data-lang="yaml">spec: |
| replicas: 1 |
| template: |
| spec: |
| volumes: |
| - name: config |
| gitRepo: |
| repository: 'https://github.com/jstrachan/sample-springboot-config.git' |
| revision: 667ee4db6bc842b127825351e5c9bae5a4fb2147 |
| directory: . |
| containers: |
| - volumeMounts: |
| - name: config |
| mountPath: /app/config |
| env: |
| - name: KUBERNETES_NAMESPACE |
| valueFrom: |
| fieldRef: |
| apiVersion: v1 |
| fieldPath: metadata.namespace |
| serviceAccount: ribbon</code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>As you can see, there is no <code>metadata</code> section as would be expected for Kubernetes resources because it will be automatically added by the <code>openshift-maven-plugin</code>. The object’s <code>Kind</code>, if not given, is automatically derived from the |
| filename. In this case, the <code>openshift-maven-plugin</code> will create a <code>Deployment</code> because the file is called <code>deployment.yml</code>. Similar mappings between file names and resource type exist for each supported resource kind, the |
| complete list of which (along with associated abbreviations) can be found in the <a href="#appendix-kind-mapping">Appendix</a>.</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| Now that sidecar containers are supported in this plugin(if <code>jkube.sidecar</code> is enabled), be careful whenever you’re supplying container name in the resource fragment. If container specified in resource fragment doesn’t have a name or it’s name is equal to default fmp generated application’s container name; it would not be treated as sidecar and it would be merged into main container. However, You can override plugin’s default name for main container via <code>jkube.generator.alias</code> property. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <hr> |
| <div class="paragraph"> |
| <p>Additionally, if you name your fragment using a name prefix followed by a dash and the mapped file name, the plugin will automatically use that name for your resource. So, for example, if you name your deployment fragment |
| <code>myapp-deployment.yml</code>, the plugin will name your resource <code>myapp</code>. In the absence of such provided name for your resource, a name will be automatically derived from your project’s metadata (in particular, its <code>artifactId</code> as specified in your POM).</p> |
| </div> |
| <div class="paragraph"> |
| <p>No image is also referenced in this example because the plugin also fills in the image details based on the configured image you are building with (either from a generator or from a dedicated image plugin configuration, as seen before).</p> |
| </div> |
| <div class="admonitionblock note"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <i class="fa icon-note" title="Note"></i> |
| </td> |
| <td class="content"> |
| For building images there is also an alternative mode using external Dockerfiles, in addition to the XML based configuration. Refer to <a href="#build-overview">oc:build</a> for details. |
| </td> |
| </tr> |
| </table> |
| </div> |
| <hr> |
| <div class="paragraph"> |
| <p>Enrichment of resource fragments can be fine-tuned by using profile sub-directories. For more details see <a href="#profiles">Profiles</a>.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Now that we have seen some examples of the various ways how this plugin can be used, the following sections will describe the plugin goals and extension points in detail.</p> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="compatibility-with-OpenShift">2. Compatibility with OpenShift</h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="openshift-compatibility">2.1. OpenShift Compatibility</h3> |
| <table class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 2. OpenShift Compatibility</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 25%;"> |
| <col style="width: 25%;"> |
| <col style="width: 25%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">OMP</th> |
| <th class="tableblock halign-left valign-top">OpenShift 4.4</th> |
| <th class="tableblock halign-left valign-top">OpenShift 4.2</th> |
| <th class="tableblock halign-left valign-top">OpenShift 3.11</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">OMP 1.0.1</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">OMP 1.0.0</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">OMP 0.2.0</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">OMP 0.1.1</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">OMP 0.1.0</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">✓</p></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="installation">3. Installation</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>This plugin is available from Maven central and can be connected to |
| pre- and post-integration phase as seen below. The configuration and |
| available goals are described below.</p> |
| </div> |
| <div class="paragraph"> |
| <p>By default, Maven will only search for plugins in the <code>org.apache.maven.plugins</code> and <code>org.codehaus.mojo</code> packages. In order to resolve the provider for the JKube plugin goals, you need to edit <code>~/.m2/settings.xml</code> and add the <code>org.eclipse.jkube</code> namespace so the <code><pluginGroups></code> configuration.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><settings> |
| ... |
| |
| <pluginGroups> |
| <pluginGroup>org.eclipse.jkube</pluginGroup> |
| </pluginGroups> |
| |
| ... |
| </settings></code></pre> |
| </div> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><plugin> |
| <groupId>org.eclipse.jkube</groupId> |
| <artifactId>openshift-maven-plugin</artifactId> |
| <version>1.0.1</version> |
| |
| <configuration> |
| .... |
| <images> |
| <!-- A single's image configuration --> |
| <image> |
| ... |
| <build> |
| .... |
| </build> |
| </image> |
| .... |
| </images> |
| </configuration> |
| |
| <!-- Connect oc:resource, oc:build and oc:helm to lifecycle phases --> |
| <executions> |
| <execution> |
| <id>jkube</id> |
| <goals> |
| <goal>resource</goal> |
| <goal>build</goal> |
| <goal>helm</goal> |
| </goals> |
| </execution> |
| </executions> |
| </plugin></code></pre> |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="goals">4. Goals Overview</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>This plugin supports a rich set for providing a smooth Java developer experience. These goals can be categorized in multiple groups:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><a href="#goals-build">Build goals</a> are all about creating and managing Kubernetes build artifacts like Docker images or S2I builds.</p> |
| </li> |
| <li> |
| <p><a href="#goals-develop">Development goals</a> target help not only in deploying resource descriptors to the development cluster but also to manage the lifecycle of the development cluster as well.</p> |
| </li> |
| </ul> |
| </div> |
| <table id="goals-build" class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 3. Build Goals</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Goal</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:build"><strong>oc:build</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Build images</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:push"><strong>oc:push</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Push images to a registry</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:resource"><strong>oc:resource</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Create Kubernetes or OpenShift resource descriptors</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:apply"><strong>oc:apply</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Apply resources to a running cluster</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <table id="goals-develop" class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 4. Development Goals</caption> |
| <colgroup> |
| <col style="width: 25%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Goal</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:deploy"><strong>oc:deploy</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Deploy resources descriptors to a cluster after creating them and building the app. Same as <a href="#jkube:apply"><strong>oc:apply</strong></a> except that it runs in the background.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:undeploy"><strong>oc:undeploy</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Undeploy and remove resources descriptors from a cluster.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:watch"><strong>oc:watch</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Watch for file changes and perform rebuilds and redeployments</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:log"><strong>oc:log</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Show the logs of the running application</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong><a href="#jkube:debug"><strong>oc:debug</strong></a></strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Enable remote debugging</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>Depending on whether the OpenShift or Kubernetes operational mode is used, the workflow and the performed actions differs :</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 5. Workflows</caption> |
| <colgroup> |
| <col style="width: 11.1111%;"> |
| <col style="width: 44.4444%;"> |
| <col style="width: 44.4445%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Use Case</th> |
| <th class="tableblock halign-left valign-top">Kubernetes</th> |
| <th class="tableblock halign-left valign-top">OpenShift</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Build</p></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p><code>oc:build</code> <code>oc:push</code></p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Creates an image against an exposed Docker daemon (with a <code>docker.tar</code>)</p> |
| </li> |
| <li> |
| <p>Pushes the image to a registry which is then referenced from the configuration</p> |
| </li> |
| </ul> |
| </div></div></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p><code>oc:build</code></p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Creates or uses a <code>BuildConfig</code></p> |
| </li> |
| <li> |
| <p>Creates or uses an <code>ImageStream</code> which can be referenced by the deployment descriptors in a <code>DeploymenConfig</code></p> |
| </li> |
| <li> |
| <p>Starts an OpenShift build with a <code>docker.tar</code> as input</p> |
| </li> |
| </ul> |
| </div></div></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Deploy</p></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p><code>oc:deploy</code></p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Applies a Kubernetes resource descriptor to cluster</p> |
| </li> |
| </ul> |
| </div></div></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p><code>oc:deploy</code></p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Applies an OpenShift resource descriptor to a cluster</p> |
| </li> |
| </ul> |
| </div></div></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="goals-overview-build">5. Build Goals</h2> |
| <div class="sectionbody"> |
| <div class="sect2"> |
| <h3 id="jkube:resource">5.1. <strong>oc:resource</strong></h3> |
| <div class="paragraph"> |
| <p>This goal generates Kubernetes resources based on your project. It can either be opinionated defaults or |
| based on the configuration provided in XML config or resource fragments in <code>src/main/jkube</code>. |
| Generated resources are in <code>target/classes/META-INF/jkube/openshift</code> directory.</p> |
| </div> |
| <div class="sect3"> |
| <h4 id="resource-labels-annotations">5.1.1. Labels and Annotations</h4> |
| <div class="paragraph"> |
| <p>Labels and annotations can be easily added to any resource object. This is best explained by an example.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example for label and annotations</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><plugin> |
| <!-- ... --> |
| <configuration> |
| <!-- ... --> |
| <resources> |
| <labels> <i class="conum" data-value="1"></i><b>(1)</b> |
| <all> <i class="conum" data-value="1"></i><b>(1)</b> |
| <property> <i class="conum" data-value="2"></i><b>(2)</b> |
| <name>organisation</name> |
| <value>unesco</value> |
| </property> |
| </all> |
| <service> <i class="conum" data-value="3"></i><b>(3)</b> |
| <property> |
| <name>database</name> |
| <value>mysql</value> |
| </property> |
| <property> |
| <name>persistent</name> |
| <value>true</value> |
| </property> |
| </service> |
| <replicaSet> <i class="conum" data-value="4"></i><b>(4)</b> |
| <!-- ... --> |
| </replicaSet> |
| <pod> <i class="conum" data-value="5"></i><b>(5)</b> |
| <!-- ... --> |
| </pod> |
| <deployment> <i class="conum" data-value="6"></i><b>(6)</b> |
| <!-- ... --> |
| </deployment> |
| </labels> |
| |
| <annotations> <i class="conum" data-value="7"></i><b>(7)</b> |
| <!-- ... --> |
| </annotations> |
| <remotes> <i class="conum" data-value="8"></i><b>(8)</b> |
| <remote>https://gist.githubusercontent.com/lordofthejars/ac2823cec7831697d09444bbaa76cd50/raw/e4b43f1b6494766dfc635b5959af7730c1a58a93/deployment.yaml</remote> |
| </remotes> |
| </resource> |
| </configuration> |
| </plugin></code></pre> |
| </div> |
| </div> |
| <div class="colist arabic"> |
| <table> |
| <tr> |
| <td><i class="conum" data-value="1"></i><b>1</b></td> |
| <td><code><labels></code> section with <code><resources></code> contains labels which should be applied to objects of various kinds</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="2"></i><b>2</b></td> |
| <td>Within <code><all></code> labels which should be applied to <strong>every</strong> object can be specified</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="3"></i><b>3</b></td> |
| <td><code><service></code> labels are used to label services</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="4"></i><b>4</b></td> |
| <td><code><replicaSet></code> labels are for replica set and replication controller</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="5"></i><b>5</b></td> |
| <td><code><pod></code> holds labels for pod specifications in replication controller, replica sets and deployments</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="6"></i><b>6</b></td> |
| <td><code><deployment></code> is for labels on deployments (kubernetes) and deployment configs (openshift)</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="7"></i><b>7</b></td> |
| <td>The subelements are also available for specifying annotations.</td> |
| </tr> |
| <tr> |
| <td><i class="conum" data-value="8"></i><b>8</b></td> |
| <td><code><remotes></code> you can set location of fragments as <code>URL</code>.</td> |
| </tr> |
| </table> |
| </div> |
| <div class="paragraph"> |
| <p>Labels and annotations can be specified in free form as a map. In this map, the element name is the name of the label or annotation respectively, whereas the content is the value to set.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The following subelements are possible for <code><labels></code> and <code><annotations></code> :</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 6. Label and annotation configuration</caption> |
| <colgroup> |
| <col style="width: 14.2857%;"> |
| <col style="width: 85.7143%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Element</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>all</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">All entries specified in the <code><all></code> sections are applied to all resource objects created. |
| This also implies build object like image stream and build configs which are created implicitly for an <a href="#build-openshift">Kubernetes build</a>.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>deployment</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Labels and annotations applied to <code>Deployment</code> (for Kubernetes). |
| And <code>DeploymentConfig</code> (for OpenShift) objects.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>pod</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Labels and annotations applied pod specification as used in <code>ReplicationController</code>, <code>ReplicaSets</code>, <code>Deployments</code> and <code>DeploymentConfigs</code> objects.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>replicaSet</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Labels and annotations applied to <code>ReplicaSet</code> and <code>ReplicationController</code> objects.</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>service</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Labels and annotations applied to <code>Service</code> objects.</p></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <div class="sect3"> |
| <h4 id="resource-secrets">5.1.2. Secrets</h4> |
| <div class="paragraph"> |
| <p>Once you’ve configured some docker registry credentials into <code>~/.m2/setting.xml</code>, as explained in the |
| <a href="#authentication">Authentication</a> section, you can create Kubernetes secrets from a server declaration.</p> |
| </div> |
| <div class="paragraph"> |
| <p><strong>XML configuration</strong></p> |
| </div> |
| <div class="paragraph"> |
| <p>You can create a secret using xml configuration in the <code>pom.xml</code> file. It should contain the following fields:</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <colgroup> |
| <col style="width: 12.5%;"> |
| <col style="width: 12.5%;"> |
| <col style="width: 75%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">key</th> |
| <th class="tableblock halign-left valign-top">required</th> |
| <th class="tableblock halign-left valign-top">description</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>dockerServerId</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">the server id which is configured in |
| <code>~/.m2/setting.xml</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>name</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">this will be used as name of the kubernetes secret resource</p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>namespace</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">the secret resource will be applied to the specific |
| namespace, if provided</p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>This is best explained by an example.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example for XML configuration</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><properties> |
| <jkube.docker.registry>docker.io</docker.registry> |
| </properties></code></pre> |
| </div> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><configuration> |
| <resources> |
| <secrets> |
| <secret> |
| <dockerServerId>${docker.registry}</dockerServerId> |
| <name>mydockerkey</name> |
| </secret> |
| </secrets> |
| </resources> |
| </configuration></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p><strong>Yaml fragment with annotation</strong></p> |
| </div> |
| <div class="paragraph"> |
| <p>You can create a secret using a yaml fragment. You can reference the docker server id with an annotation |
| <code>maven.jkube.io/dockerServerId</code>. The yaml fragment file should be put under |
| the <code>src/main/jkube/</code> folder.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-yaml" data-lang="yaml">apiVersion: v1 |
| kind: Secret |
| metadata: |
| name: mydockerkey |
| namespace: default |
| annotations: |
| maven.jkube.io/dockerServerId: ${docker.registry} |
| type: kubernetes.io/dockercfg</code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="resource-validation">5.1.3. Resource Validation</h4> |
| <div class="paragraph"> |
| <p>Resource goal also validates the generated resource descriptors using API specification of <a href="https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json">Kubernetes</a>.</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 7. Validation Configuration</caption> |
| <colgroup> |
| <col style="width: 12.5%;"> |
| <col style="width: 75%;"> |
| <col style="width: 12.5%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Element</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| <th class="tableblock halign-left valign-top">Property</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>skipResourceValidation</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">If value is set to <code>true</code> then resource validation is skipped. This may be useful if resource validation is failing |
| for some reason but you still want to continue the deployment.</p> |
| <p class="tableblock"> Default is <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.skipResourceValidation</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>failOnValidationError</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">If value is set to <code>true</code> then any validation error will block the plugin execution. A warning will be printed |
| otherwise.</p> |
| <p class="tableblock"> Default is <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.failOnValidationError</code></p></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| <div class="sect3"> |
| <h4 id="resource-route-generation">5.1.4. Route Generation</h4> |
| <div class="paragraph"> |
| <p>When the <code>oc:resource</code> goal is run, an Kubernetes |
| <a href="https://docs.openshift.org/latest/architecture/networking/routes.html">Route</a> descriptor (<code>route.yml</code>) will also be |
| generated along the service if an Kubernetes cluster is targeted. |
| If you do not want to generate a Route descriptor, you can set the <code>jkube.openshift.generateRoute</code> property to <code>false</code>.</p> |
| </div> |
| <table class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 8. Route Generation Configuration</caption> |
| <colgroup> |
| <col style="width: 12.5%;"> |
| <col style="width: 75%;"> |
| <col style="width: 12.5%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Element</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| <th class="tableblock halign-left valign-top">Property</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>generateRoute</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">If value is set to <code>false</code> then no Route descriptor will be generated. |
| By default it is set to <code>true</code>, which will create a <code>route.yml</code> descriptor and also add Route resource to <code>openshift.yml</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.openshift.generateRoute</code></p> |
| <p class="tableblock"> <code>jkube.enricher.jkube-openshift-route.generateRoute</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>tlsTermination</strong></p></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p>tlsTermination indicates termination type. The following values are supported:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>edge (default)</p> |
| </li> |
| <li> |
| <p>passthrough</p> |
| </li> |
| <li> |
| <p>reencrypt</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>See <a href="https://docs.openshift.com/container-platform/3.11/architecture/networking/routes.html#secured-routes" class="bare">https://docs.openshift.com/container-platform/3.11/architecture/networking/routes.html#secured-routes</a> or <a href="https://docs.openshift.com/container-platform/latest/networking/routes/secured-routes.html" class="bare">https://docs.openshift.com/container-platform/latest/networking/routes/secured-routes.html</a></p> |
| </div></div></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.enricher.jkube-openshift-route.tlsTermination</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>tlsInsecureEdgeTerminationPolicy</strong></p></td> |
| <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> |
| <p>tlsInsecureEdgeTerminationPolicy indicates the desired behavior for insecure connections to a route. |
| While each router may make its own decisions on which ports to expose, this is normally port 80.</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Allow - traffic is sent to the server on the insecure port (default)</p> |
| </li> |
| <li> |
| <p>Disable - no traffic is allowed on the insecure port.</p> |
| </li> |
| <li> |
| <p>Redirect - clients are redirected to the secure port.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>See <a href="https://docs.openshift.com/container-platform/latest/rest_api/network_apis/route-route-openshift-io-v1.html" class="bare">https://docs.openshift.com/container-platform/latest/rest_api/network_apis/route-route-openshift-io-v1.html</a></p> |
| </div></div></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.enricher.jkube-openshift-route.tlsInsecureEdgeTerminationPolicy</code></p></td> |
| </tr> |
| </tbody> |
| </table> |
| <div class="paragraph"> |
| <p>Below is an example of generating a Route with "edge" termination and "Allow" insecureEdgeTerminationPolicy: |
| .Example for generating route resource by configuring it in <code>pom.xml</code></p> |
| </div> |
| <div class="listingblock"> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><plugin> |
| <groupId>org.eclipse.jkube</groupId> |
| <artifactId>openshift-maven-plugin</artifactId> |
| <version>1.0.1</version> |
| <configuration> |
| <enricher> |
| <config> |
| <jkube-openshift-route> |
| <generateRoute>true</generateRoute> |
| <tlsInsecureEdgeTerminationPolicy>Allow</tlsInsecureEdgeTerminationPolicy> |
| <tlsTermination>edge</tlsTermination> |
| </jkube-openshift-route> |
| </config> |
| </enricher> |
| </configuration> |
| </plugin></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>Adding certificates for routes is not directly supported in the pom, but can be added via a yaml fragment.</p> |
| </div> |
| <div class="paragraph"> |
| <p>If you do not want to generate a Route descriptor, you can also specify so in the plugin configuration in your POM as seen below.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example for not generating route resource by configuring it in <code>pom.xml</code></div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-xml" data-lang="xml"><plugin> |
| <groupId>org.eclipse.jkube</groupId> |
| <artifactId>openshift-maven-plugin</artifactId> |
| <version>1.0.1</version> |
| <configuration> |
| <enricher> |
| <config> |
| <jkube-openshift-route> |
| <generateRoute>false</generateRoute> |
| </jkube-openshift-route> |
| </config> |
| </enricher> |
| </configuration> |
| </plugin></code></pre> |
| </div> |
| </div> |
| <div class="paragraph"> |
| <p>If you are using resource fragments, then also you can configure it in your Service resource fragment (e.g. <code>service.yml</code>). |
| You need to add an <code>expose</code> label to the <code>metadata</code> section of your service and set it to <code>false</code>.</p> |
| </div> |
| <div class="listingblock"> |
| <div class="title">Example for not generating route resource by configuring it in resource fragments</div> |
| <div class="content"> |
| <pre class="highlight"><code class="language-yaml" data-lang="yaml">metadata: |
| annotations: |
| api.service.kubernetes.io/path: /hello |
| labels: |
| expose: "false" |
| spec: |
| type: LoadBalancer</code></pre> |
| </div> |
| </div> |
| </div> |
| <div class="sect3"> |
| <h4 id="Supported-Properties-Resource">5.1.5. Supported Properties for Resource goal</h4> |
| <table class="tableblock frame-all grid-all stretch"> |
| <caption class="title">Table 9. Options available with resource goal</caption> |
| <colgroup> |
| <col style="width: 12.5%;"> |
| <col style="width: 75%;"> |
| <col style="width: 12.5%;"> |
| </colgroup> |
| <thead> |
| <tr> |
| <th class="tableblock halign-left valign-top">Element</th> |
| <th class="tableblock halign-left valign-top">Description</th> |
| <th class="tableblock halign-left valign-top">Property</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>enableAutomaticTrigger</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">If the value is set to <code>false</code> then automatic deployments would be disabled.</p> |
| <p class="tableblock"> Defaults to <code>true</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.openshift.enableAutomaticTrigger</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>deployTimeoutSeconds</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The OpenShift deploy timeout in seconds.</p> |
| <p class="tableblock"> Defaults to <code>3600</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.openshift.deployTimeoutSeconds</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>imageChangeTriggers</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Add ImageChange triggers to DeploymentConfigs when on openshift.</p> |
| <p class="tableblock"> Defaults to <code>true</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.openshift.imageChangeTriggers</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>trimImageInContainerSpec</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">If set to true it would set the container image reference to "", this is done to handle weird behavior of OpenShift |
| 3.7 in which subsequent rollouts lead to ImagePullErr.</p> |
| <p class="tableblock"> Defaults to <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.openshift.trimImageInContainerSpec</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>enrichAllWithImageChangeTrigger</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Adds ImageChangeTriggers with respect to all containers specified inside DeploymentConfig.</p> |
| <p class="tableblock"> Defaults to <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.openshift.enrichAllWithImageChangeTrigger</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>profile</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Profile to use. A profile contains the enrichers and generators to use as well as their configuration. Profiles are |
| looked up in the classpath and can be provided as yaml files.</p> |
| <p class="tableblock"> Defaults to <code>default</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.profile</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>sidecar</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Whether to enable sidecar behavior or not. By default pod specs are merged into main application container.</p> |
| <p class="tableblock"> Defaults to <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.sidecar</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>skipHealthCheck</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Whether to skip health checks addition in generated resources or not.</p> |
| <p class="tableblock"> Defaults to <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.skipHealthCheck</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>workDir</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The JKube working directory. Defaults to <code>${project.build.directory}/jkube</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.workDir</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>environment</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Environment name where resources are placed. For example, if you set this property to dev and resourceDir is the |
| default one, plugin will look at <code>src/main/jkube/dev</code>.</p> |
| <p class="tableblock"> Defaults to <code>null</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.environment</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>useProjectClassPath</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should we use the project’s compile time classpath to scan for additional enrichers/generators.</p> |
| <p class="tableblock"> Defaults to <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.useProjectClassPath</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>resourceDir</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Folder where to find project specific files.</p> |
| <p class="tableblock"> Defaults to <code>${basedir}/src/main/jkube</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.resourceDir</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>targetDir</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The generated Kubernetes manifests target direcotry.</p> |
| <p class="tableblock"> Defaults to <code>${project.build.outputDirectory}/META-INF/jkube</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.targetDir</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>resourceType</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">The artifact type for attaching the generated resource file to the project. Can be either 'json' or 'yaml'.</p> |
| <p class="tableblock"> Defaults to <code>yaml</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.resourceType</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>mergeWithDekorate</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">When resource generation is delegated to Dekorate, should JKube resources be merged with Dekorate generated ones.</p> |
| <p class="tableblock"> Defaults to <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.mergeWithDekorate</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>interpolateTemplateParameters</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Interpolate parameter values from <code>*template.yml</code> fragments in the generated resource list (<code>kubernetes.yml</code>).</p> |
| <p class="tableblock"> This is useful when using JKube in combination with Helm.</p> |
| <p class="tableblock"> Placeholders for variables defined in template files can be used in the different resource fragments. Helm generated |
| charts will contain these placeholders/parameters.</p> |
| <p class="tableblock"> For <code>resource</code> goal, these placeholders are replaced in the |
| aggregated resource list YAML file (not in the individual generated resources) if this option is enabled.</p> |
| <p class="tableblock"> Defaults to <code>true</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.interpolateTemplateParameters</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>skipResource</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Skip resource generation.</p> |
| <p class="tableblock"> Defaults to <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.skip.resource</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>createExternalUrls</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Should we create external Ingress for any LoadBalancer Services which don’t already have them.</p> |
| <p class="tableblock"> Defaults to <code>false</code>.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.createExternalUrls</code></p></td> |
| </tr> |
| <tr> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><strong>domain</strong></p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock">Domain added to the Service ID when creating Kubernetes Ingresses or OpenShift routes.</p></td> |
| <td class="tableblock halign-left valign-top"><p class="tableblock"><code>jkube.domain</code></p></td> |
| </tr> |
| </tbody> |
| </table> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="jkube:build">5.2. <strong>oc:build</strong></h3> |
| <div class="paragraph"> |
| <p>This goal is for building Docker images.</p> |
| </div> |
| <div class="sect3"> |
| <h4 id="build-kubernetes">5.2.1. Kubernetes Build</h4> |
| |