diff --git a/docs/.vuepress/config.js b/.vuepress/config.js
similarity index 93%
rename from docs/.vuepress/config.js
rename to .vuepress/config.js
index f652dda..2bfd39b 100644
--- a/docs/.vuepress/config.js
+++ b/.vuepress/config.js
@@ -4,9 +4,19 @@ module.exports = {
markdown: {
toc: { includeLevel: [2, 3] }
},
+ dest: 'docs',
+ serviceWorker: true,
+ plugins: [
+ [
+ '@vuepress/google-analytics',
+ {
+ ga: 'UA-144196556-1',
+ }
+ ]
+ ],
themeConfig: {
nav: [
- { text: '首页', link: '/overview/' },
+ { text: '简介', link: '/overview/' },
{ text: '安装', link: '/install/' },
{ text: '使用', link: '/guide/' },
{ text: '支持', link: '/support/' },
diff --git a/.vuepress/dist/.nojekyll b/.vuepress/dist/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/.vuepress/dist/404.html b/.vuepress/dist/404.html
new file mode 100644
index 0000000..91ebac6
--- /dev/null
+++ b/.vuepress/dist/404.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+ Kuboard
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.vuepress/dist/CNAME b/.vuepress/dist/CNAME
new file mode 100644
index 0000000..5565f60
--- /dev/null
+++ b/.vuepress/dist/CNAME
@@ -0,0 +1 @@
+eip.work
\ No newline at end of file
diff --git a/.vuepress/dist/assets/css/0.styles.5203916d.css b/.vuepress/dist/assets/css/0.styles.5203916d.css
new file mode 100644
index 0000000..321ab2a
--- /dev/null
+++ b/.vuepress/dist/assets/css/0.styles.5203916d.css
@@ -0,0 +1 @@
+#nprogress{pointer-events:none}#nprogress .bar{background:#3eaf7c;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #3eaf7c,0 0 5px #3eaf7c;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#3eaf7c transparent transparent #3eaf7c;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#3eaf7c;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #389d70}.home .hero .action-button:hover{background-color:#4abf8a}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#3eaf7c}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:1.5rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#3eaf7c}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #3eaf7c;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#3eaf7c}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #46bd87}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}}.page-edit,.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit,.page-nav{padding:2rem}}@media (max-width:419px){.page-edit,.page-nav{padding:1.5rem}}.page{padding-bottom:2rem;display:block}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#aaa}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-heading.clickable:hover{color:#3eaf7c}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#3eaf7c}a.sidebar-link.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;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}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number,div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#3eaf7c}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.badge[data-v-c13ee5b0]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-c13ee5b0],.badge.tip[data-v-c13ee5b0],.badge[data-v-c13ee5b0]{background-color:#42b983}.badge.error[data-v-c13ee5b0]{background-color:#da5961}.badge.warn[data-v-c13ee5b0],.badge.warning[data-v-c13ee5b0],.badge.yellow[data-v-c13ee5b0]{background-color:#e7c000}.badge+.badge[data-v-c13ee5b0]{margin-left:5px}
\ No newline at end of file
diff --git a/docs/install/install-kind.assets/1563696697515.png b/.vuepress/dist/assets/img/1563696697515.94512132.png
similarity index 100%
rename from docs/install/install-kind.assets/1563696697515.png
rename to .vuepress/dist/assets/img/1563696697515.94512132.png
diff --git a/docs/install/install-kind.assets/1563697667480.png b/.vuepress/dist/assets/img/1563697667480.8c846298.png
similarity index 100%
rename from docs/install/install-kind.assets/1563697667480.png
rename to .vuepress/dist/assets/img/1563697667480.8c846298.png
diff --git a/docs/install/install-kind.assets/1563698644736.png b/.vuepress/dist/assets/img/1563698644736.d67b2e09.png
similarity index 100%
rename from docs/install/install-kind.assets/1563698644736.png
rename to .vuepress/dist/assets/img/1563698644736.d67b2e09.png
diff --git a/docs/install/install-kind.assets/1563698714557.png b/.vuepress/dist/assets/img/1563698714557.fa1eeb1c.png
similarity index 100%
rename from docs/install/install-kind.assets/1563698714557.png
rename to .vuepress/dist/assets/img/1563698714557.fa1eeb1c.png
diff --git a/docs/install/install-kind.assets/1563698865448.png b/.vuepress/dist/assets/img/1563698865448.2cbaf53a.png
similarity index 100%
rename from docs/install/install-kind.assets/1563698865448.png
rename to .vuepress/dist/assets/img/1563698865448.2cbaf53a.png
diff --git a/docs/install/install-kubernetes.assets/image-20190713075717350.png b/.vuepress/dist/assets/img/image-20190713075717350.df5244cd.png
similarity index 100%
rename from docs/install/install-kubernetes.assets/image-20190713075717350.png
rename to .vuepress/dist/assets/img/image-20190713075717350.df5244cd.png
diff --git a/docs/install/install-common-vm.assets/image-20190715085036593.png b/.vuepress/dist/assets/img/image-20190715085036593.ab4a32ff.png
similarity index 100%
rename from docs/install/install-common-vm.assets/image-20190715085036593.png
rename to .vuepress/dist/assets/img/image-20190715085036593.ab4a32ff.png
diff --git a/docs/install/install-k8s.assets/image-20190715101542756.png b/.vuepress/dist/assets/img/image-20190715101542756.5934c00e.png
similarity index 100%
rename from docs/install/install-k8s.assets/image-20190715101542756.png
rename to .vuepress/dist/assets/img/image-20190715101542756.5934c00e.png
diff --git a/docs/install/install-k8s.assets/image-20190715193838012.png b/.vuepress/dist/assets/img/image-20190715193838012.eca23618.png
similarity index 100%
rename from docs/install/install-k8s.assets/image-20190715193838012.png
rename to .vuepress/dist/assets/img/image-20190715193838012.eca23618.png
diff --git a/docs/overview/README.assets/image-20190716234146419.png b/.vuepress/dist/assets/img/image-20190716234146419.bd87cdff.png
similarity index 100%
rename from docs/overview/README.assets/image-20190716234146419.png
rename to .vuepress/dist/assets/img/image-20190716234146419.bd87cdff.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190717113807552.png b/.vuepress/dist/assets/img/image-20190717113807552.b3fe5f7d.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190717113807552.png
rename to .vuepress/dist/assets/img/image-20190717113807552.b3fe5f7d.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190717114304953.png b/.vuepress/dist/assets/img/image-20190717114304953.854b47d8.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190717114304953.png
rename to .vuepress/dist/assets/img/image-20190717114304953.854b47d8.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190717114354610.png b/.vuepress/dist/assets/img/image-20190717114354610.6d522c25.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190717114354610.png
rename to .vuepress/dist/assets/img/image-20190717114354610.6d522c25.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190717115020848.png b/.vuepress/dist/assets/img/image-20190717115020848.eec5a17e.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190717115020848.png
rename to .vuepress/dist/assets/img/image-20190717115020848.eec5a17e.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190717115403374.png b/.vuepress/dist/assets/img/image-20190717115403374.48894c27.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190717115403374.png
rename to .vuepress/dist/assets/img/image-20190717115403374.48894c27.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190717115457614.png b/.vuepress/dist/assets/img/image-20190717115457614.c7f0d044.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190717115457614.png
rename to .vuepress/dist/assets/img/image-20190717115457614.c7f0d044.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190717115829821.png b/.vuepress/dist/assets/img/image-20190717115829821.63b81f36.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190717115829821.png
rename to .vuepress/dist/assets/img/image-20190717115829821.63b81f36.png
diff --git a/docs/guide/example/import.assets/image-20190717193548703.png b/.vuepress/dist/assets/img/image-20190717193548703.5167e3b9.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190717193548703.png
rename to .vuepress/dist/assets/img/image-20190717193548703.5167e3b9.png
diff --git a/docs/guide/example/monitor.assets/image-20190718104156232.png b/.vuepress/dist/assets/img/image-20190718104156232.8f0c70ed.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190718104156232.png
rename to .vuepress/dist/assets/img/image-20190718104156232.8f0c70ed.png
diff --git a/docs/guide/example/monitor.assets/image-20190718104729472.png b/.vuepress/dist/assets/img/image-20190718104729472.ef92267c.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190718104729472.png
rename to .vuepress/dist/assets/img/image-20190718104729472.ef92267c.png
diff --git a/docs/guide/example/monitor.assets/image-20190718105420599.png b/.vuepress/dist/assets/img/image-20190718105420599.71e5df51.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190718105420599.png
rename to .vuepress/dist/assets/img/image-20190718105420599.71e5df51.png
diff --git a/docs/guide/example/monitor.assets/image-20190718105641651.png b/.vuepress/dist/assets/img/image-20190718105641651.16549369.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190718105641651.png
rename to .vuepress/dist/assets/img/image-20190718105641651.16549369.png
diff --git a/docs/guide/example/monitor.assets/image-20190718120957255.png b/.vuepress/dist/assets/img/image-20190718120957255.0e01130f.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190718120957255.png
rename to .vuepress/dist/assets/img/image-20190718120957255.0e01130f.png
diff --git a/docs/guide/example/monitor.assets/image-20190718121133160.png b/.vuepress/dist/assets/img/image-20190718121133160.0d0a8e13.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190718121133160.png
rename to .vuepress/dist/assets/img/image-20190718121133160.0d0a8e13.png
diff --git a/docs/install/install-k8s.assets/image-20190718175957160.png b/.vuepress/dist/assets/img/image-20190718175957160.f5abe01a.png
similarity index 100%
rename from docs/install/install-k8s.assets/image-20190718175957160.png
rename to .vuepress/dist/assets/img/image-20190718175957160.f5abe01a.png
diff --git a/docs/guide/cluster/computing.assets/image-20190720224950653.png b/.vuepress/dist/assets/img/image-20190720224950653.857d1b1e.png
similarity index 100%
rename from docs/guide/cluster/computing.assets/image-20190720224950653.png
rename to .vuepress/dist/assets/img/image-20190720224950653.857d1b1e.png
diff --git a/docs/guide/cluster/computing.assets/image-20190720225123111.png b/.vuepress/dist/assets/img/image-20190720225123111.c2b02f0c.png
similarity index 100%
rename from docs/guide/cluster/computing.assets/image-20190720225123111.png
rename to .vuepress/dist/assets/img/image-20190720225123111.c2b02f0c.png
diff --git a/docs/guide/cluster/computing.assets/image-20190720225222622.png b/.vuepress/dist/assets/img/image-20190720225222622.2081299f.png
similarity index 100%
rename from docs/guide/cluster/computing.assets/image-20190720225222622.png
rename to .vuepress/dist/assets/img/image-20190720225222622.2081299f.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190720232405147.png b/.vuepress/dist/assets/img/image-20190720232405147.8fc011f9.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190720232405147.png
rename to .vuepress/dist/assets/img/image-20190720232405147.8fc011f9.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190720233322837.png b/.vuepress/dist/assets/img/image-20190720233322837.998be85a.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190720233322837.png
rename to .vuepress/dist/assets/img/image-20190720233322837.998be85a.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190720233348284.png b/.vuepress/dist/assets/img/image-20190720233348284.2360801d.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190720233348284.png
rename to .vuepress/dist/assets/img/image-20190720233348284.2360801d.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190720233412812.png b/.vuepress/dist/assets/img/image-20190720233412812.4f5ce20f.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190720233412812.png
rename to .vuepress/dist/assets/img/image-20190720233412812.4f5ce20f.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190720233436465.png b/.vuepress/dist/assets/img/image-20190720233436465.6d8cf61e.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190720233436465.png
rename to .vuepress/dist/assets/img/image-20190720233436465.6d8cf61e.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190720233512996.png b/.vuepress/dist/assets/img/image-20190720233512996.d7ba2b19.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190720233512996.png
rename to .vuepress/dist/assets/img/image-20190720233512996.d7ba2b19.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190721000526434.png b/.vuepress/dist/assets/img/image-20190721000526434.cfdf2d30.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190721000526434.png
rename to .vuepress/dist/assets/img/image-20190721000526434.cfdf2d30.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190721000759925.png b/.vuepress/dist/assets/img/image-20190721000759925.bb32a332.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190721000759925.png
rename to .vuepress/dist/assets/img/image-20190721000759925.bb32a332.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190721000822458.png b/.vuepress/dist/assets/img/image-20190721000822458.5797bca7.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190721000822458.png
rename to .vuepress/dist/assets/img/image-20190721000822458.5797bca7.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190721000847954.png b/.vuepress/dist/assets/img/image-20190721000847954.6f05e4b8.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190721000847954.png
rename to .vuepress/dist/assets/img/image-20190721000847954.6f05e4b8.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190721000919933.png b/.vuepress/dist/assets/img/image-20190721000919933.3a1d313e.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190721000919933.png
rename to .vuepress/dist/assets/img/image-20190721000919933.3a1d313e.png
diff --git a/docs/guide/namespace/multi-env.assets/image-20190721085144545.png b/.vuepress/dist/assets/img/image-20190721085144545.25f25dda.png
similarity index 100%
rename from docs/guide/namespace/multi-env.assets/image-20190721085144545.png
rename to .vuepress/dist/assets/img/image-20190721085144545.25f25dda.png
diff --git a/docs/guide/namespace/multi-env.assets/image-20190721090118542.png b/.vuepress/dist/assets/img/image-20190721090118542.46c31055.png
similarity index 100%
rename from docs/guide/namespace/multi-env.assets/image-20190721090118542.png
rename to .vuepress/dist/assets/img/image-20190721090118542.46c31055.png
diff --git a/docs/guide/namespace/multi-env.assets/image-20190721090753742.png b/.vuepress/dist/assets/img/image-20190721090753742.28d009f3.png
similarity index 100%
rename from docs/guide/namespace/multi-env.assets/image-20190721090753742.png
rename to .vuepress/dist/assets/img/image-20190721090753742.28d009f3.png
diff --git a/docs/guide/namespace/multi-env.assets/image-20190721090840925.png b/.vuepress/dist/assets/img/image-20190721090840925.a5231632.png
similarity index 100%
rename from docs/guide/namespace/multi-env.assets/image-20190721090840925.png
rename to .vuepress/dist/assets/img/image-20190721090840925.a5231632.png
diff --git a/docs/guide/namespace/multi-env.assets/image-20190721090935511.png b/.vuepress/dist/assets/img/image-20190721090935511.80fb3864.png
similarity index 100%
rename from docs/guide/namespace/multi-env.assets/image-20190721090935511.png
rename to .vuepress/dist/assets/img/image-20190721090935511.80fb3864.png
diff --git a/docs/guide/namespace/multi-env.assets/image-20190721091005130.png b/.vuepress/dist/assets/img/image-20190721091005130.330e9f1d.png
similarity index 100%
rename from docs/guide/namespace/multi-env.assets/image-20190721091005130.png
rename to .vuepress/dist/assets/img/image-20190721091005130.330e9f1d.png
diff --git a/docs/guide/namespace/adjustion.assets/image-20190721100715898.png b/.vuepress/dist/assets/img/image-20190721100715898.f0faa9aa.png
similarity index 100%
rename from docs/guide/namespace/adjustion.assets/image-20190721100715898.png
rename to .vuepress/dist/assets/img/image-20190721100715898.f0faa9aa.png
diff --git a/docs/guide/diagonize/events.assets/image-20190721101812895.png b/.vuepress/dist/assets/img/image-20190721101812895.8f059471.png
similarity index 100%
rename from docs/guide/diagonize/events.assets/image-20190721101812895.png
rename to .vuepress/dist/assets/img/image-20190721101812895.8f059471.png
diff --git a/docs/guide/diagonize/events.assets/image-20190721101954560.png b/.vuepress/dist/assets/img/image-20190721101954560.176c574c.png
similarity index 100%
rename from docs/guide/diagonize/events.assets/image-20190721101954560.png
rename to .vuepress/dist/assets/img/image-20190721101954560.176c574c.png
diff --git a/docs/guide/diagonize/events.assets/image-20190721103324863.png b/.vuepress/dist/assets/img/image-20190721103324863.72744076.png
similarity index 100%
rename from docs/guide/diagonize/events.assets/image-20190721103324863.png
rename to .vuepress/dist/assets/img/image-20190721103324863.72744076.png
diff --git a/docs/guide/diagonize/events.assets/image-20190721104153954.png b/.vuepress/dist/assets/img/image-20190721104153954.74fb88ec.png
similarity index 100%
rename from docs/guide/diagonize/events.assets/image-20190721104153954.png
rename to .vuepress/dist/assets/img/image-20190721104153954.74fb88ec.png
diff --git a/docs/guide/diagonize/logs.assets/image-20190721104348908.png b/.vuepress/dist/assets/img/image-20190721104348908.ce6e526d.png
similarity index 100%
rename from docs/guide/diagonize/logs.assets/image-20190721104348908.png
rename to .vuepress/dist/assets/img/image-20190721104348908.ce6e526d.png
diff --git a/docs/guide/diagonize/logs.assets/image-20190721104415732.png b/.vuepress/dist/assets/img/image-20190721104415732.07ea4278.png
similarity index 100%
rename from docs/guide/diagonize/logs.assets/image-20190721104415732.png
rename to .vuepress/dist/assets/img/image-20190721104415732.07ea4278.png
diff --git a/docs/guide/diagonize/logs.assets/image-20190721104522870.png b/.vuepress/dist/assets/img/image-20190721104522870.6c74e0bb.png
similarity index 100%
rename from docs/guide/diagonize/logs.assets/image-20190721104522870.png
rename to .vuepress/dist/assets/img/image-20190721104522870.6c74e0bb.png
diff --git a/docs/guide/namespace/secrets.assets/image-20190721110355464.png b/.vuepress/dist/assets/img/image-20190721110355464.25f25dda.png
similarity index 100%
rename from docs/guide/namespace/secrets.assets/image-20190721110355464.png
rename to .vuepress/dist/assets/img/image-20190721110355464.25f25dda.png
diff --git a/docs/guide/namespace/secrets.assets/image-20190721110543437.png b/.vuepress/dist/assets/img/image-20190721110543437.8cbe188d.png
similarity index 100%
rename from docs/guide/namespace/secrets.assets/image-20190721110543437.png
rename to .vuepress/dist/assets/img/image-20190721110543437.8cbe188d.png
diff --git a/docs/guide/namespace/secrets.assets/image-20190721111004189.png b/.vuepress/dist/assets/img/image-20190721111011798.b9cc73b4.png
similarity index 100%
rename from docs/guide/namespace/secrets.assets/image-20190721111004189.png
rename to .vuepress/dist/assets/img/image-20190721111011798.b9cc73b4.png
diff --git a/docs/guide/namespace/secrets.assets/image-20190721111537218.png b/.vuepress/dist/assets/img/image-20190721111540512.b0a58451.png
similarity index 100%
rename from docs/guide/namespace/secrets.assets/image-20190721111537218.png
rename to .vuepress/dist/assets/img/image-20190721111540512.b0a58451.png
diff --git a/docs/guide/namespace/secrets.assets/image-20190721111642221.png b/.vuepress/dist/assets/img/image-20190721111642221.f9c06dc3.png
similarity index 100%
rename from docs/guide/namespace/secrets.assets/image-20190721111642221.png
rename to .vuepress/dist/assets/img/image-20190721111642221.f9c06dc3.png
diff --git a/docs/guide/namespace/configMap.assets/image-20190721112353077.png b/.vuepress/dist/assets/img/image-20190721112353077.b907aa89.png
similarity index 100%
rename from docs/guide/namespace/configMap.assets/image-20190721112353077.png
rename to .vuepress/dist/assets/img/image-20190721112353077.b907aa89.png
diff --git a/docs/guide/namespace/configMap.assets/image-20190721112624128.png b/.vuepress/dist/assets/img/image-20190721112624128.7aa6b8f1.png
similarity index 100%
rename from docs/guide/namespace/configMap.assets/image-20190721112624128.png
rename to .vuepress/dist/assets/img/image-20190721112624128.7aa6b8f1.png
diff --git a/docs/guide/namespace/configMap.assets/image-20190721113050608.png b/.vuepress/dist/assets/img/image-20190721113050608.97e0f110.png
similarity index 100%
rename from docs/guide/namespace/configMap.assets/image-20190721113050608.png
rename to .vuepress/dist/assets/img/image-20190721113050608.97e0f110.png
diff --git a/docs/guide/namespace/configMap.assets/image-20190721113155991.png b/.vuepress/dist/assets/img/image-20190721113155991.f3ecd62f.png
similarity index 100%
rename from docs/guide/namespace/configMap.assets/image-20190721113155991.png
rename to .vuepress/dist/assets/img/image-20190721113155991.f3ecd62f.png
diff --git a/docs/guide/namespace/pvc.assets/image-20190721113708689.png b/.vuepress/dist/assets/img/image-20190721113708689.f9b42a11.png
similarity index 100%
rename from docs/guide/namespace/pvc.assets/image-20190721113708689.png
rename to .vuepress/dist/assets/img/image-20190721113708689.f9b42a11.png
diff --git a/docs/guide/namespace/pvc.assets/image-20190721113810235.png b/.vuepress/dist/assets/img/image-20190721113810235.59d55672.png
similarity index 100%
rename from docs/guide/namespace/pvc.assets/image-20190721113810235.png
rename to .vuepress/dist/assets/img/image-20190721113810235.59d55672.png
diff --git a/docs/guide/namespace/pvc.assets/image-20190721114112644.png b/.vuepress/dist/assets/img/image-20190721114112644.526de44c.png
similarity index 100%
rename from docs/guide/namespace/pvc.assets/image-20190721114112644.png
rename to .vuepress/dist/assets/img/image-20190721114112644.526de44c.png
diff --git a/docs/guide/namespace/pvc.assets/image-20190721114211751.png b/.vuepress/dist/assets/img/image-20190721114211751.e1a07115.png
similarity index 100%
rename from docs/guide/namespace/pvc.assets/image-20190721114211751.png
rename to .vuepress/dist/assets/img/image-20190721114211751.e1a07115.png
diff --git a/docs/overview/why-kuboard.assets/image-20190721154650916.jpg b/.vuepress/dist/assets/img/image-20190721154650916.3f63fdcb.jpg
similarity index 100%
rename from docs/overview/why-kuboard.assets/image-20190721154650916.jpg
rename to .vuepress/dist/assets/img/image-20190721154650916.3f63fdcb.jpg
diff --git a/docs/overview/concepts.assets/image-20190722162249531.png b/.vuepress/dist/assets/img/image-20190722162249531.e826dfb9.png
similarity index 100%
rename from docs/overview/concepts.assets/image-20190722162249531.png
rename to .vuepress/dist/assets/img/image-20190722162249531.e826dfb9.png
diff --git a/docs/overview/concepts.assets/image-20190722165648180.png b/.vuepress/dist/assets/img/image-20190722165648180.fe018998.png
similarity index 100%
rename from docs/overview/concepts.assets/image-20190722165648180.png
rename to .vuepress/dist/assets/img/image-20190722165648180.fe018998.png
diff --git a/docs/overview/concepts.assets/image-20190722172356943.png b/.vuepress/dist/assets/img/image-20190722172356943.9a901574.png
similarity index 100%
rename from docs/overview/concepts.assets/image-20190722172356943.png
rename to .vuepress/dist/assets/img/image-20190722172356943.9a901574.png
diff --git a/docs/overview/concepts.assets/image-20190722182005060.png b/.vuepress/dist/assets/img/image-20190722182005060.8e560b34.png
similarity index 100%
rename from docs/overview/concepts.assets/image-20190722182005060.png
rename to .vuepress/dist/assets/img/image-20190722182005060.8e560b34.png
diff --git a/docs/overview/concepts.assets/image-20190722183329825.png b/.vuepress/dist/assets/img/image-20190722183329825.63739750.png
similarity index 100%
rename from docs/overview/concepts.assets/image-20190722183329825.png
rename to .vuepress/dist/assets/img/image-20190722183329825.63739750.png
diff --git a/docs/overview/concepts.assets/image-20190722183750444.png b/.vuepress/dist/assets/img/image-20190722183750444.973f7dfa.png
similarity index 100%
rename from docs/overview/concepts.assets/image-20190722183750444.png
rename to .vuepress/dist/assets/img/image-20190722183750444.973f7dfa.png
diff --git a/docs/overview/concepts.assets/image-20190722184943431.png b/.vuepress/dist/assets/img/image-20190722184943431.f2f72e7c.png
similarity index 100%
rename from docs/overview/concepts.assets/image-20190722184943431.png
rename to .vuepress/dist/assets/img/image-20190722184943431.f2f72e7c.png
diff --git a/docs/overview/concepts.assets/image-20190722185113938.png b/.vuepress/dist/assets/img/image-20190722185113938.4d31e54b.png
similarity index 100%
rename from docs/overview/concepts.assets/image-20190722185113938.png
rename to .vuepress/dist/assets/img/image-20190722185113938.4d31e54b.png
diff --git a/docs/guide/namespace/workload.assets/image-20190722223454676.png b/.vuepress/dist/assets/img/image-20190722223454676.b545b43f.png
similarity index 100%
rename from docs/guide/namespace/workload.assets/image-20190722223454676.png
rename to .vuepress/dist/assets/img/image-20190722223454676.b545b43f.png
diff --git a/docs/guide/namespace/workload.assets/image-20190722223551308.png b/.vuepress/dist/assets/img/image-20190722223551308.ed106a2a.png
similarity index 100%
rename from docs/guide/namespace/workload.assets/image-20190722223551308.png
rename to .vuepress/dist/assets/img/image-20190722223551308.ed106a2a.png
diff --git a/docs/guide/namespace/workload.assets/image-20190722223605920.png b/.vuepress/dist/assets/img/image-20190722223605920.3e762b29.png
similarity index 100%
rename from docs/guide/namespace/workload.assets/image-20190722223605920.png
rename to .vuepress/dist/assets/img/image-20190722223605920.3e762b29.png
diff --git a/docs/guide/namespace/workload.assets/image-20190722224029397.png b/.vuepress/dist/assets/img/image-20190722224029397.abc44209.png
similarity index 100%
rename from docs/guide/namespace/workload.assets/image-20190722224029397.png
rename to .vuepress/dist/assets/img/image-20190722224029397.abc44209.png
diff --git a/docs/guide/namespace/workload.assets/image-20190722225347491.png b/.vuepress/dist/assets/img/image-20190722225347491.984fabae.png
similarity index 100%
rename from docs/guide/namespace/workload.assets/image-20190722225347491.png
rename to .vuepress/dist/assets/img/image-20190722225347491.984fabae.png
diff --git a/docs/guide/namespace/workload.assets/image-20190722225454029.png b/.vuepress/dist/assets/img/image-20190722225454029.73400267.png
similarity index 100%
rename from docs/guide/namespace/workload.assets/image-20190722225454029.png
rename to .vuepress/dist/assets/img/image-20190722225454029.73400267.png
diff --git a/docs/guide/namespace/workload.assets/image-20190722230511430.png b/.vuepress/dist/assets/img/image-20190722230511430.ed459354.png
similarity index 100%
rename from docs/guide/namespace/workload.assets/image-20190722230511430.png
rename to .vuepress/dist/assets/img/image-20190722230511430.ed459354.png
diff --git a/docs/guide/namespace/workload.assets/image-20190722231246540.png b/.vuepress/dist/assets/img/image-20190722231246540.ebf13194.png
similarity index 100%
rename from docs/guide/namespace/workload.assets/image-20190722231246540.png
rename to .vuepress/dist/assets/img/image-20190722231246540.ebf13194.png
diff --git a/docs/overview/README.assets/image-20190723104717575.png b/.vuepress/dist/assets/img/image-20190723104717575.0f52fe3c.png
similarity index 100%
rename from docs/overview/README.assets/image-20190723104717575.png
rename to .vuepress/dist/assets/img/image-20190723104717575.0f52fe3c.png
diff --git a/docs/overview/why-kuboard.assets/image-20190723105039358.png b/.vuepress/dist/assets/img/image-20190723105039358.91eef75a.png
similarity index 100%
rename from docs/overview/why-kuboard.assets/image-20190723105039358.png
rename to .vuepress/dist/assets/img/image-20190723105039358.91eef75a.png
diff --git a/docs/guide/cluster/namespace-create.assets/image-20190723105606081.png b/.vuepress/dist/assets/img/image-20190723105606081.bc471512.png
similarity index 100%
rename from docs/guide/cluster/namespace-create.assets/image-20190723105606081.png
rename to .vuepress/dist/assets/img/image-20190723105606081.bc471512.png
diff --git a/docs/guide/cluster/namespace-create.assets/image-20190723105644937.png b/.vuepress/dist/assets/img/image-20190723105644937.968b1660.png
similarity index 100%
rename from docs/guide/cluster/namespace-create.assets/image-20190723105644937.png
rename to .vuepress/dist/assets/img/image-20190723105644937.968b1660.png
diff --git a/docs/guide/cluster/namespace-create.assets/image-20190723105722999.png b/.vuepress/dist/assets/img/image-20190723105722999.5b6c9bae.png
similarity index 100%
rename from docs/guide/cluster/namespace-create.assets/image-20190723105722999.png
rename to .vuepress/dist/assets/img/image-20190723105722999.5b6c9bae.png
diff --git a/docs/guide/cluster/namespace-create.assets/image-20190723105748435.png b/.vuepress/dist/assets/img/image-20190723105748435.1cb3ad0d.png
similarity index 100%
rename from docs/guide/cluster/namespace-create.assets/image-20190723105748435.png
rename to .vuepress/dist/assets/img/image-20190723105748435.1cb3ad0d.png
diff --git a/docs/guide/cluster/namespace-create.assets/image-20190723105809872.png b/.vuepress/dist/assets/img/image-20190723105809872.61add376.png
similarity index 100%
rename from docs/guide/cluster/namespace-create.assets/image-20190723105809872.png
rename to .vuepress/dist/assets/img/image-20190723105809872.61add376.png
diff --git a/docs/guide/cluster/namespace-create.assets/image-20190723105830318.png b/.vuepress/dist/assets/img/image-20190723105830318.43414c56.png
similarity index 100%
rename from docs/guide/cluster/namespace-create.assets/image-20190723105830318.png
rename to .vuepress/dist/assets/img/image-20190723105830318.43414c56.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190723112105018.png b/.vuepress/dist/assets/img/image-20190723112105018.a27c638f.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190723112105018.png
rename to .vuepress/dist/assets/img/image-20190723112105018.a27c638f.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190723112143032.png b/.vuepress/dist/assets/img/image-20190723112143032.7a5220bd.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190723112143032.png
rename to .vuepress/dist/assets/img/image-20190723112143032.7a5220bd.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190723112204681.png b/.vuepress/dist/assets/img/image-20190723112204681.8279ca8f.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190723112204681.png
rename to .vuepress/dist/assets/img/image-20190723112204681.8279ca8f.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190723113250521.png b/.vuepress/dist/assets/img/image-20190723113250521.3b80f3d2.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190723113250521.png
rename to .vuepress/dist/assets/img/image-20190723113250521.3b80f3d2.png
diff --git a/docs/guide/cluster/storage-create.assets/image-20190723113312360.png b/.vuepress/dist/assets/img/image-20190723113312360.a3a51c0c.png
similarity index 100%
rename from docs/guide/cluster/storage-create.assets/image-20190723113312360.png
rename to .vuepress/dist/assets/img/image-20190723113312360.a3a51c0c.png
diff --git a/docs/guide/example/pre-condition.assets/image-20190723115721514.png b/.vuepress/dist/assets/img/image-20190723115721514.bf981ef3.png
similarity index 100%
rename from docs/guide/example/pre-condition.assets/image-20190723115721514.png
rename to .vuepress/dist/assets/img/image-20190723115721514.bf981ef3.png
diff --git a/docs/guide/example/busybox.assets/image-20190723115852719.png b/.vuepress/dist/assets/img/image-20190723115852719.f1658660.png
similarity index 100%
rename from docs/guide/example/busybox.assets/image-20190723115852719.png
rename to .vuepress/dist/assets/img/image-20190723115852719.f1658660.png
diff --git a/docs/guide/example/busybox.assets/image-20190723115912645.png b/.vuepress/dist/assets/img/image-20190723115912645.393d67ff.png
similarity index 100%
rename from docs/guide/example/busybox.assets/image-20190723115912645.png
rename to .vuepress/dist/assets/img/image-20190723115912645.393d67ff.png
diff --git a/docs/guide/example/busybox.assets/image-20190723115940862.png b/.vuepress/dist/assets/img/image-20190723115940862.dfeacc57.png
similarity index 100%
rename from docs/guide/example/busybox.assets/image-20190723115940862.png
rename to .vuepress/dist/assets/img/image-20190723115940862.dfeacc57.png
diff --git a/docs/guide/example/busybox.assets/image-20190723120011972.png b/.vuepress/dist/assets/img/image-20190723120011972.0f0914c5.png
similarity index 100%
rename from docs/guide/example/busybox.assets/image-20190723120011972.png
rename to .vuepress/dist/assets/img/image-20190723120011972.0f0914c5.png
diff --git a/docs/guide/example/busybox.assets/image-20190723120050894.png b/.vuepress/dist/assets/img/image-20190723120050894.9b1d6350.png
similarity index 100%
rename from docs/guide/example/busybox.assets/image-20190723120050894.png
rename to .vuepress/dist/assets/img/image-20190723120050894.9b1d6350.png
diff --git a/docs/guide/example/busybox.assets/image-20190723120104474.png b/.vuepress/dist/assets/img/image-20190723120104474.617a620a.png
similarity index 100%
rename from docs/guide/example/busybox.assets/image-20190723120104474.png
rename to .vuepress/dist/assets/img/image-20190723120104474.617a620a.png
diff --git a/docs/guide/example/busybox.assets/image-20190723120125425.png b/.vuepress/dist/assets/img/image-20190723120125425.a46d7874.png
similarity index 100%
rename from docs/guide/example/busybox.assets/image-20190723120125425.png
rename to .vuepress/dist/assets/img/image-20190723120125425.a46d7874.png
diff --git a/docs/guide/example/import.assets/image-20190723120730196.png b/.vuepress/dist/assets/img/image-20190723120730196.9793d8ec.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723120730196.png
rename to .vuepress/dist/assets/img/image-20190723120730196.9793d8ec.png
diff --git a/docs/guide/example/import.assets/image-20190723120753533.png b/.vuepress/dist/assets/img/image-20190723120753533.081b6d6b.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723120753533.png
rename to .vuepress/dist/assets/img/image-20190723120753533.081b6d6b.png
diff --git a/docs/guide/example/import.assets/image-20190723120832778.png b/.vuepress/dist/assets/img/image-20190723120832778.e154bccd.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723120832778.png
rename to .vuepress/dist/assets/img/image-20190723120832778.e154bccd.png
diff --git a/docs/guide/example/import.assets/image-20190723120912377.png b/.vuepress/dist/assets/img/image-20190723120912377.e1404406.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723120912377.png
rename to .vuepress/dist/assets/img/image-20190723120912377.e1404406.png
diff --git a/docs/guide/example/import.assets/image-20190723120926747.png b/.vuepress/dist/assets/img/image-20190723120926747.c9754776.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723120926747.png
rename to .vuepress/dist/assets/img/image-20190723120926747.c9754776.png
diff --git a/docs/guide/example/import.assets/image-20190723120956821.png b/.vuepress/dist/assets/img/image-20190723120956821.69bcdbbe.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723120956821.png
rename to .vuepress/dist/assets/img/image-20190723120956821.69bcdbbe.png
diff --git a/docs/guide/example/import.assets/image-20190723121019167.png b/.vuepress/dist/assets/img/image-20190723121019167.81af1060.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723121019167.png
rename to .vuepress/dist/assets/img/image-20190723121019167.81af1060.png
diff --git a/docs/guide/example/import.assets/image-20190723121035917.png b/.vuepress/dist/assets/img/image-20190723121035917.8a2b1320.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723121035917.png
rename to .vuepress/dist/assets/img/image-20190723121035917.8a2b1320.png
diff --git a/docs/guide/example/import.assets/image-20190723121055648.png b/.vuepress/dist/assets/img/image-20190723121055648.2c6ba8d1.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723121055648.png
rename to .vuepress/dist/assets/img/image-20190723121055648.2c6ba8d1.png
diff --git a/docs/guide/example/import.assets/image-20190723121117514.png b/.vuepress/dist/assets/img/image-20190723121117514.ef774d3a.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723121117514.png
rename to .vuepress/dist/assets/img/image-20190723121117514.ef774d3a.png
diff --git a/docs/guide/example/import.assets/image-20190723121132991.png b/.vuepress/dist/assets/img/image-20190723121132991.69146097.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723121132991.png
rename to .vuepress/dist/assets/img/image-20190723121132991.69146097.png
diff --git a/docs/guide/example/import.assets/image-20190723121412027.png b/.vuepress/dist/assets/img/image-20190723121412027.6888452e.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723121412027.png
rename to .vuepress/dist/assets/img/image-20190723121412027.6888452e.png
diff --git a/docs/guide/example/import.assets/image-20190723121433809.png b/.vuepress/dist/assets/img/image-20190723121433809.7a1b4b00.png
similarity index 100%
rename from docs/guide/example/import.assets/image-20190723121433809.png
rename to .vuepress/dist/assets/img/image-20190723121433809.7a1b4b00.png
diff --git a/docs/guide/example/monitor.assets/image-20190723150525017.png b/.vuepress/dist/assets/img/image-20190723150525017.378015c8.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723150525017.png
rename to .vuepress/dist/assets/img/image-20190723150525017.378015c8.png
diff --git a/docs/guide/example/monitor.assets/image-20190723150616633.png b/.vuepress/dist/assets/img/image-20190723150616633.17a9797e.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723150616633.png
rename to .vuepress/dist/assets/img/image-20190723150616633.17a9797e.png
diff --git a/docs/guide/example/monitor.assets/image-20190723150853277.png b/.vuepress/dist/assets/img/image-20190723150853277.c168bc57.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723150853277.png
rename to .vuepress/dist/assets/img/image-20190723150853277.c168bc57.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151045112.png b/.vuepress/dist/assets/img/image-20190723151045112.5329884a.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151045112.png
rename to .vuepress/dist/assets/img/image-20190723151045112.5329884a.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151103353.png b/.vuepress/dist/assets/img/image-20190723151103353.3c29b906.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151103353.png
rename to .vuepress/dist/assets/img/image-20190723151103353.3c29b906.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151339137.png b/.vuepress/dist/assets/img/image-20190723151339137.5f756564.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151339137.png
rename to .vuepress/dist/assets/img/image-20190723151339137.5f756564.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151357262.png b/.vuepress/dist/assets/img/image-20190723151357262.e79d2b6c.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151357262.png
rename to .vuepress/dist/assets/img/image-20190723151357262.e79d2b6c.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151422460.png b/.vuepress/dist/assets/img/image-20190723151422460.f02b1a28.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151422460.png
rename to .vuepress/dist/assets/img/image-20190723151422460.f02b1a28.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151711230.png b/.vuepress/dist/assets/img/image-20190723151711230.c3dd4c41.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151711230.png
rename to .vuepress/dist/assets/img/image-20190723151711230.c3dd4c41.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151804727.png b/.vuepress/dist/assets/img/image-20190723151804727.287fa561.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151804727.png
rename to .vuepress/dist/assets/img/image-20190723151804727.287fa561.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151845303.png b/.vuepress/dist/assets/img/image-20190723151845303.f2b8415a.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151845303.png
rename to .vuepress/dist/assets/img/image-20190723151845303.f2b8415a.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151902003.png b/.vuepress/dist/assets/img/image-20190723151902003.1ef39b19.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151902003.png
rename to .vuepress/dist/assets/img/image-20190723151902003.1ef39b19.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151914994.png b/.vuepress/dist/assets/img/image-20190723151914994.fa026f01.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151914994.png
rename to .vuepress/dist/assets/img/image-20190723151914994.fa026f01.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151932871.png b/.vuepress/dist/assets/img/image-20190723151932871.cbc894da.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151932871.png
rename to .vuepress/dist/assets/img/image-20190723151932871.cbc894da.png
diff --git a/docs/guide/example/monitor.assets/image-20190723151951910.png b/.vuepress/dist/assets/img/image-20190723151951910.c3248933.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723151951910.png
rename to .vuepress/dist/assets/img/image-20190723151951910.c3248933.png
diff --git a/docs/guide/example/monitor.assets/image-20190723152020605.png b/.vuepress/dist/assets/img/image-20190723152020605.31eccc82.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723152020605.png
rename to .vuepress/dist/assets/img/image-20190723152020605.31eccc82.png
diff --git a/docs/guide/example/monitor.assets/image-20190723152040219.png b/.vuepress/dist/assets/img/image-20190723152040219.45660f67.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723152040219.png
rename to .vuepress/dist/assets/img/image-20190723152040219.45660f67.png
diff --git a/docs/guide/example/monitor.assets/image-20190723152124196.png b/.vuepress/dist/assets/img/image-20190723152124196.9ef1af43.png
similarity index 100%
rename from docs/guide/example/monitor.assets/image-20190723152124196.png
rename to .vuepress/dist/assets/img/image-20190723152124196.9ef1af43.png
diff --git a/docs/install/install-common-vm.assets/image2019-07-15_09.01.21.png b/.vuepress/dist/assets/img/image2019-07-15_09.01.21.1ac5bd70.png
similarity index 100%
rename from docs/install/install-common-vm.assets/image2019-07-15_09.01.21.png
rename to .vuepress/dist/assets/img/image2019-07-15_09.01.21.1ac5bd70.png
diff --git a/docs/install/install-kubernetes.assets/image2019-6-10_15-36-29.png b/.vuepress/dist/assets/img/image2019-6-10_15-36-29.2870ee7d.png
similarity index 100%
rename from docs/install/install-kubernetes.assets/image2019-6-10_15-36-29.png
rename to .vuepress/dist/assets/img/image2019-6-10_15-36-29.2870ee7d.png
diff --git a/docs/overview/README.assets/kuboard_qq.png b/.vuepress/dist/assets/img/kuboard_qq.45e78dbf.png
similarity index 100%
rename from docs/overview/README.assets/kuboard_qq.png
rename to .vuepress/dist/assets/img/kuboard_qq.45e78dbf.png
diff --git a/.vuepress/dist/assets/img/search.83621669.svg b/.vuepress/dist/assets/img/search.83621669.svg
new file mode 100644
index 0000000..03d8391
--- /dev/null
+++ b/.vuepress/dist/assets/img/search.83621669.svg
@@ -0,0 +1 @@
+
diff --git a/.vuepress/dist/assets/js/10.220e5a4f.js b/.vuepress/dist/assets/js/10.220e5a4f.js
new file mode 100644
index 0000000..7aa2b74
--- /dev/null
+++ b/.vuepress/dist/assets/js/10.220e5a4f.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{191:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105606081.bc471512.png"},192:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105644937.968b1660.png"},193:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105722999.5b6c9bae.png"},194:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105748435.1cb3ad0d.png"},195:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105809872.61add376.png"},196:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105830318.43414c56.png"},337:function(t,a,e){"use strict";e.r(a);var s=e(0),r=Object(s.a)({},function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"名称空间管理"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#名称空间管理","aria-hidden":"true"}},[t._v("#")]),t._v(" 名称空间管理")]),t._v(" "),s("h2",{attrs:{id:"创建名称空间"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#创建名称空间","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建名称空间")]),t._v(" "),s("h3",{attrs:{id:"前提"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[t._v("#")]),t._v(" 前提")]),t._v(" "),s("p",[t._v("必须具备如下条件:")]),t._v(" "),s("ul",[s("li",[t._v("Kubernetes 集群")]),t._v(" "),s("li",[t._v("已在集群中安装 Kuboard")]),t._v(" "),s("li",[t._v("已进入 Kuboard 操作界面 "),s("a",{attrs:{href:"/install/install-dashboard"}},[t._v("安装并进入 Kuboard")])])]),t._v(" "),s("p",[t._v("假设您已经进入了 Kuboard 界面,如下图所示:")]),t._v(" "),s("p",[s("img",{attrs:{src:e(191),alt:"image-20190723105606081"}})]),t._v(" "),s("h3",{attrs:{id:"准备"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#准备","aria-hidden":"true"}},[t._v("#")]),t._v(" 准备")]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("创建")])]),t._v(" 按钮,创建名称空间")])]),t._v(" "),s("p",[t._v("并填写:")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("字段名称")]),t._v(" "),s("th",[t._v("填写内容")]),t._v(" "),s("th",[t._v("说明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("名称")]),t._v(" "),s("td",[t._v("example")]),t._v(" "),s("td",[t._v("Kubernetes 的 namespace 名称")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(192),alt:"image-20190723105644937"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("保存")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(193),alt:"image-20190723105722999"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("应用")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(194),alt:"image-20190723105748435"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("完成")])])]),t._v(" "),s("p",[t._v("此时可在名称空间列表中查看到刚刚创建好的名称空间 "),s("em",[t._v("example")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(195),alt:"image-20190723105809872"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[t._v("example")]),t._v(" 名称空间")]),t._v(" "),s("p",[t._v("点击 "),s("em",[t._v("example")]),t._v(" 名称空间后,可进入该名称空间的页面。刚刚初始化的名称空间的界面布局如下图所示:")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(196),alt:"image-20190723105830318"}})])])},[],!1,null,null,null);a.default=r.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/11.9507e20e.js b/.vuepress/dist/assets/js/11.9507e20e.js
new file mode 100644
index 0000000..993b43c
--- /dev/null
+++ b/.vuepress/dist/assets/js/11.9507e20e.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{274:function(a,t,s){a.exports=s.p+"assets/img/image-20190721085144545.25f25dda.png"},275:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090118542.46c31055.png"},276:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090753742.28d009f3.png"},277:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090840925.a5231632.png"},278:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090935511.80fb3864.png"},279:function(a,t,s){a.exports=s.p+"assets/img/image-20190721091005130.330e9f1d.png"},355:function(a,t,s){"use strict";s.r(t);var e=s(0),r=Object(e.a)({},function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"多环境"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#多环境","aria-hidden":"true"}},[a._v("#")]),a._v(" 多环境")]),a._v(" "),e("p",[a._v("在实际开发项目的过程中,我们必然会碰到如下场景:")]),a._v(" "),e("ol",[e("li",[a._v("创建一个开发环境,并在其中完成应用部署")]),a._v(" "),e("li",[a._v("创建一个测试环境,再次完成应用部署")]),a._v(" "),e("li",[a._v("创建一个准上线环境,再次完成应用部署")]),a._v(" "),e("li",[a._v("创建一个生产环境,再次完成应用部署")])]),a._v(" "),e("p",[a._v("当我们的微服务系统较为复杂时,一个环境中可能需要部署许多(几十个甚至更多)的微服务部署单元,这个时候,重复在多套环境中执行部署任务就会变得容易出错。")]),a._v(" "),e("p",[a._v("Kuboard 针对这种场景,提供了导出配置、导入配置的功能,以便运维人员可以轻易的复制多套部署环境。")]),a._v(" "),e("h2",{attrs:{id:"导出配置"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#导出配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 导出配置")]),a._v(" "),e("h3",{attrs:{id:"前提"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[a._v("#")]),a._v(" 前提")]),a._v(" "),e("p",[a._v("必须满足如下条件:")]),a._v(" "),e("ul",[e("li",[a._v("您已经通过 kuboard 的 "),e("a",{attrs:{href:"/guide/namespace/workload"}},[a._v("创建工作负载")]),a._v(" 功能完成了微服务的部署。")])]),a._v(" "),e("blockquote",[e("p",[a._v("部署微服务过程中,您还可能用到 kuboard 的配置编辑功能、Secrets 编辑功能 等。")])]),a._v(" "),e("p",[a._v("假设您已完成微服务部署,并已进入 namespace 界面,如下图所示:")]),a._v(" "),e("p",[e("img",{attrs:{src:s(274),alt:"image-20190721085144545"}})]),a._v(" "),e("h3",{attrs:{id:"操作步骤"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#操作步骤","aria-hidden":"true"}},[a._v("#")]),a._v(" 操作步骤")]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("导出工作负载")])]),a._v(" "),e("ul",[e("li",[a._v("选择要导出的分层")]),a._v(" "),e("li",[a._v("点击 "),e("em",[e("strong",[a._v("刷新")])])]),a._v(" "),e("li",[a._v("选择要导出的工作负载")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(275),alt:"image-20190721090118542"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])]),a._v(" "),e("p",[a._v("选择要导出的配置(configMap)信息")])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(276),alt:"image-20190721090753742"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])]),a._v(" "),e("p",[a._v("选择要导出的 Secrets")])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(277),alt:"image-20190721090840925"}})]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(278),alt:"image-20190721090935511"}})]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("确定")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(279),alt:"image-20190721091005130"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("查看已导出文件")]),a._v(" "),e("p",[a._v("导出文件的命名格式为 kuboard_namespace_date_time.yaml,例如:")]),a._v(" "),e("p",[a._v("kuboard_example_2019_07_21_09_09_47.yaml")]),a._v(" "),e("p",[a._v("导出文件的内容如下所示:")]),a._v(" "),e("div",{staticClass:"language-yaml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yaml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("---")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" apps/v1\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" StatefulSet\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("metadata")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("namespace")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" example\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("annotations")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/workload")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/displayName")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" 服务注册\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/service")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" ClusterIP\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/ingress")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'true'")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("labels")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/layer")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("spec")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("selector")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("matchLabels")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/layer")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("template")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("metadata")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("...")]),a._v("\n")])])])])]),a._v(" "),e("blockquote",[e("p",[a._v("该文件可以通过 kubectl apply -f 命令直接执行,但是建议使用 kuboard 进行导入,以便在导入时在线编辑在特定于新环境的配置信息。")])]),a._v(" "),e("h2",{attrs:{id:"导入配置"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#导入配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 导入配置")]),a._v(" "),e("h3",{attrs:{id:"前提-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#前提-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 前提")]),a._v(" "),e("p",[a._v("您已经通过 kuboard 导出了配置文件,或者从别处获取到 kuboard 导出的配置文件")]),a._v(" "),e("h3",{attrs:{id:"操作步骤-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#操作步骤-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 操作步骤")]),a._v(" "),e("p",[a._v("请参考 "),e("a",{attrs:{href:"/guide/example/import"}},[a._v("导入 example 微服务")])])])},[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/12.12300972.js b/.vuepress/dist/assets/js/12.12300972.js
new file mode 100644
index 0000000..03e7220
--- /dev/null
+++ b/.vuepress/dist/assets/js/12.12300972.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{262:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112353077.b907aa89.png"},263:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112624128.7aa6b8f1.png"},264:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113050608.97e0f110.png"},265:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113155991.f3ecd62f.png"},28:function(t,a,_){t.exports=_.p+"assets/img/image-20190721110355464.25f25dda.png"},343:function(t,a,_){"use strict";_.r(a);var v=_(0),e=Object(v.a)({},function(){var t=this,a=t.$createElement,v=t._self._c||a;return v("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[v("h1",{attrs:{id:"配置"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#配置","aria-hidden":"true"}},[t._v("#")]),t._v(" 配置")]),t._v(" "),v("p",[t._v("配置: Kubernetes ConfigMap")]),t._v(" "),v("h1",{attrs:{id:"查看配置列表"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#查看配置列表","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看配置列表")]),t._v(" "),v("p",[t._v("假设您已进入名称空间界面,如下图所示:")]),t._v(" "),v("p",[v("img",{attrs:{src:_(28),alt:"image-20190721110355464"}})]),t._v(" "),v("p",[t._v("配置列表位于图中左侧中部,点击 "),v("em",[v("strong",[t._v("放大")])]),t._v(" 按钮,可以将列表显示到更大的区域,如下图所示:")]),t._v(" "),v("blockquote",[v("p",[t._v("点击 "),v("strong",[t._v("配置")]),t._v(" 可以刷新该列表")])]),t._v(" "),v("p",[v("img",{attrs:{src:_(262),alt:"image-20190721112353077"}})]),t._v(" "),v("h1",{attrs:{id:"创建配置"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#创建配置","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建配置")]),t._v(" "),v("ul",[v("li",[v("p",[t._v("点击 "),v("em",[v("strong",[t._v("配置 / 创建")])])]),t._v(" "),v("p",[t._v("填写表单如下所示:")])])]),t._v(" "),v("table",[v("thead",[v("tr",[v("th",[t._v("字段名称")]),t._v(" "),v("th",[t._v("填写内容")]),t._v(" "),v("th",[t._v("说明")])])]),t._v(" "),v("tbody",[v("tr",[v("td",[t._v("名称")]),t._v(" "),v("td",[t._v("my-config-map")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("配置标签 - 名称")]),t._v(" "),v("td",[t._v("my-config-map")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("配置标签 - 内容")]),t._v(" "),v("td",[t._v("configmap")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("配置数据 - 名称")]),t._v(" "),v("td",[t._v("EUREKA_URL")]),t._v(" "),v("td")]),t._v(" "),v("tr",[v("td",[t._v("配置数据 - 内容")]),t._v(" "),v("td",[t._v("http://cloud-eureka:9200/eureka")]),t._v(" "),v("td")])])]),t._v(" "),v("p",[v("img",{attrs:{src:_(263),alt:"image-20190721112624128"}})]),t._v(" "),v("ul",[v("li",[v("p",[t._v("点击 "),v("em",[v("strong",[t._v("保存")])])]),t._v(" "),v("p",[t._v("配置信息创建成功")])])]),t._v(" "),v("p",[v("img",{attrs:{src:_(264),alt:"image-20190721113050608"}})]),t._v(" "),v("h1",{attrs:{id:"查看-编辑-删除-配置"}},[v("a",{staticClass:"header-anchor",attrs:{href:"#查看-编辑-删除-配置","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看/编辑/删除 配置")]),t._v(" "),v("ul",[v("li",[t._v("点击列表中的 "),v("em",[v("strong",[t._v("my-config-map")])])])]),t._v(" "),v("p",[v("img",{attrs:{src:_(265),alt:"image-20190721113155991"}})]),t._v(" "),v("p",[t._v("编辑、删除操作可直接按照提示完成")])])},[],!1,null,null,null);a.default=e.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/13.18715a5b.js b/.vuepress/dist/assets/js/13.18715a5b.js
new file mode 100644
index 0000000..b8b99e4
--- /dev/null
+++ b/.vuepress/dist/assets/js/13.18715a5b.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{266:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113708689.f9b42a11.png"},267:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113810235.59d55672.png"},268:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114112644.526de44c.png"},269:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114211751.e1a07115.png"},28:function(t,a,v){t.exports=v.p+"assets/img/image-20190721110355464.25f25dda.png"},349:function(t,a,v){"use strict";v.r(a);var _=v(0),e=Object(_.a)({},function(){var t=this,a=t.$createElement,_=t._self._c||a;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("h1",{attrs:{id:"存储卷声明"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#存储卷声明","aria-hidden":"true"}},[t._v("#")]),t._v(" 存储卷声明")]),t._v(" "),_("p",[t._v("存储卷声明: Kubernetes Persistent Volume Claim")]),t._v(" "),_("h1",{attrs:{id:"查看存储卷声明列表"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#查看存储卷声明列表","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看存储卷声明列表")]),t._v(" "),_("p",[t._v("假设您已进入名称空间界面,如下图所示:")]),t._v(" "),_("p",[_("img",{attrs:{src:v(28),alt:"image-20190721110355464"}})]),t._v(" "),_("p",[t._v("存储卷声明列表位于图中左下角,点击 "),_("em",[_("strong",[t._v("放大")])]),t._v(" 按钮,可以将列表显示到更大的区域,如下图所示:")]),t._v(" "),_("blockquote",[_("p",[t._v("点击 "),_("strong",[t._v("存储卷声明")]),t._v(" 可以刷新该列表")])]),t._v(" "),_("p",[_("img",{attrs:{src:v(266),alt:"image-20190721113708689"}})]),t._v(" "),_("h1",{attrs:{id:"创建存储卷声明"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#创建存储卷声明","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建存储卷声明")]),t._v(" "),_("ul",[_("li",[_("p",[t._v("点击 "),_("em",[_("strong",[t._v("存储卷声明 / 创建")])])]),t._v(" "),_("p",[t._v("填写表单如下:")])])]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[t._v("字段名称")]),t._v(" "),_("th",[t._v("填写内容")]),t._v(" "),_("th",[t._v("说明")])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("存储卷声明")]),t._v(" "),_("td",[t._v("my-pvc")]),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("存储类")]),t._v(" "),_("td",[t._v("cluster-storage")]),t._v(" "),_("td",[t._v("如果不存在,则需要提前 "),_("a",{attrs:{href:"./guide/cluster/storage?id=%E5%88%9B%E5%BB%BA%E5%AD%98%E5%82%A8%E7%B1%BB"}},[t._v("创建存储类")])])]),t._v(" "),_("tr",[_("td",[t._v("分配模式")]),t._v(" "),_("td",[t._v("动态分配")]),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("读写模式")]),t._v(" "),_("td",[t._v("可被多节点读写")]),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("总量")]),t._v(" "),_("td",[t._v("2Gi")]),t._v(" "),_("td")])])]),t._v(" "),_("p",[_("img",{attrs:{src:v(267),alt:"image-20190721113810235"}})]),t._v(" "),_("ul",[_("li",[_("p",[t._v("点击 "),_("em",[_("strong",[t._v("保存")])])]),t._v(" "),_("p",[t._v("存储卷声明创建成功")])])]),t._v(" "),_("p",[_("img",{attrs:{src:v(268),alt:"image-20190721114112644"}})]),t._v(" "),_("h1",{attrs:{id:"查看-编辑-删除-存储卷声明"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#查看-编辑-删除-存储卷声明","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看/编辑/删除 存储卷声明")]),t._v(" "),_("ul",[_("li",[t._v("点击 "),_("em",[_("strong",[t._v("my-pvc")])])])]),t._v(" "),_("p",[_("img",{attrs:{src:v(269),alt:"image-20190721114211751"}})]),t._v(" "),_("p",[t._v("编辑、删除操作可直接按照提示完成")])])},[],!1,null,null,null);a.default=e.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/14.8a57a37e.js b/.vuepress/dist/assets/js/14.8a57a37e.js
new file mode 100644
index 0000000..c92b5a5
--- /dev/null
+++ b/.vuepress/dist/assets/js/14.8a57a37e.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{270:function(t,e,r){t.exports=r.p+"assets/img/image-20190721110543437.8cbe188d.png"},271:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111011798.b9cc73b4.png"},272:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111540512.b0a58451.png"},273:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111642221.f9c06dc3.png"},28:function(t,e,r){t.exports=r.p+"assets/img/image-20190721110355464.25f25dda.png"},351:function(t,e,r){"use strict";r.r(e);var s=r(0),v=Object(s.a)({},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" Secrets")]),t._v(" "),s("h1",{attrs:{id:"查看-secrets-列表"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-secrets-列表","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 Secrets 列表")]),t._v(" "),s("p",[t._v("假设您已进入名称空间界面,如下图所示:")]),t._v(" "),s("p",[s("img",{attrs:{src:r(28),alt:"image-20190721110355464"}})]),t._v(" "),s("p",[t._v("Secrets 列表位于图中左上角,点击 "),s("em",[s("strong",[t._v("放大")])]),t._v(" 按钮,可以将列表显示到更大的区域,如下图所示:")]),t._v(" "),s("blockquote",[s("p",[t._v("点击 "),s("strong",[t._v("Secrets")]),t._v(" 可以刷新该列表")])]),t._v(" "),s("p",[s("img",{attrs:{src:r(270),alt:"image-20190721110543437"}})]),t._v(" "),s("h1",{attrs:{id:"创建-secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#创建-secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建 Secrets")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("Secrets / 创建")])])]),t._v(" "),s("p",[t._v("填写表单如下:")])])]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("字段名称")]),t._v(" "),s("th",[t._v("填写内容")]),t._v(" "),s("th",[t._v("说明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("名称")]),t._v(" "),s("td",[t._v("my-docker-repository")]),t._v(" "),s("td",[t._v("Secrets的名称")])]),t._v(" "),s("tr",[s("td",[t._v("类型")]),t._v(" "),s("td",[t._v("docker仓库密码")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("docker server")]),t._v(" "),s("td",[t._v("https://my-docker-repository.com")]),t._v(" "),s("td",[t._v("请填写 docker 仓库的全路径")])]),t._v(" "),s("tr",[s("td",[t._v("docker username")]),t._v(" "),s("td",[t._v("my-docker-user")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("docker password")]),t._v(" "),s("td",[t._v("mypassword")]),t._v(" "),s("td")])])]),t._v(" "),s("p",[s("img",{attrs:{src:r(271),alt:"image-20190721111011798"}})]),t._v(" "),s("blockquote",[s("p",[t._v("当前 Kuboard 支持如下类型 Secrets 的创建:")]),t._v(" "),s("ul",[s("li",[t._v("docker仓库密码")]),t._v(" "),s("li",[t._v("当您的镜像存储在私有仓库时,您在创建工作负载时可能需要配置 imagePullSecrets 用来访问镜像仓库")]),t._v(" "),s("li",[t._v("Opaque")]),t._v(" "),s("li",[t._v("密码")]),t._v(" "),s("li",[t._v("TLS")]),t._v(" "),s("li",[t._v("当您为 Ingress 启用 HTTPS 时,您需要将域名的的 TLS 证书存入 Secrets")])])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击保存")]),t._v(" "),s("p",[t._v("Secrets 创建成功,如下图所示:")])])]),t._v(" "),s("p",[s("img",{attrs:{src:r(272),alt:"image-20190721111540512"}})]),t._v(" "),s("h1",{attrs:{id:"查看-编辑-删除-secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-编辑-删除-secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看/编辑/删除 Secrets")]),t._v(" "),s("ul",[s("li",[t._v("点击 my-docker-repository")])]),t._v(" "),s("p",[s("img",{attrs:{src:r(273),alt:"image-20190721111642221"}})]),t._v(" "),s("p",[t._v("编辑、删除操作可直接按照提示完成")])])},[],!1,null,null,null);e.default=v.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/15.2e50c2f6.js b/.vuepress/dist/assets/js/15.2e50c2f6.js
new file mode 100644
index 0000000..740923e
--- /dev/null
+++ b/.vuepress/dist/assets/js/15.2e50c2f6.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{30:function(a,s,e){a.exports=e.p+"assets/img/image-20190715085036593.ab4a32ff.png"},31:function(a,s,e){a.exports=e.p+"assets/img/image2019-07-15_09.01.21.1ac5bd70.png"},311:function(a,s,e){a.exports=e.p+"assets/img/image-20190718175957160.f5abe01a.png"},312:function(a,s,e){a.exports=e.p+"assets/img/image-20190715101542756.5934c00e.png"},313:function(a,s,e){a.exports=e.p+"assets/img/image-20190715193838012.eca23618.png"},340:function(a,s,e){"use strict";e.r(s);var t=e(0),r=Object(t.a)({},function(){var a=this,s=a.$createElement,t=a._self._c||s;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"安装-kubernetes-用于测试"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-kubernetes-用于测试","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 Kubernetes 用于测试")]),a._v(" "),t("p",[a._v("如果您想拥有一个供个人学习测试使用的 kubernetes 集群,推荐的做法是在阿里云采购如下配置:")]),a._v(" "),t("ul",[t("li",[a._v("3台 2核4G 的ECS(突发性能实例 t5 ecs.t5-c1m2.large,或同等配置)")]),a._v(" "),t("li",[a._v("100G EFS")])]),a._v(" "),t("p",[a._v("Kuboard 的在线 demo 环境使用的是如下拓扑结构,本文档描述了如何在阿里云完成该 demo 环境的搭建。(推荐阿里云是因为,阿里云是当下技术爱好者最容易接触到的云环境,拥有一个3节点 Kubernetes 集群,每天的成本不超过12元,且,停机状态下不收费,非常适合于技术爱好者学习时使用。)")]),a._v(" "),t("p",[t("a",{attrs:{href:"https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg",target:"_blank",rel:"noopener noreferrer"}},[a._v("领取阿里云最高2000元红包"),t("OutboundLink")],1)]),a._v(" "),t("p",[t("a",{attrs:{href:"http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi02djZiZiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjhiYTU3YmI1LWFiMTctNDM1NS1hNTM0LTQ0Njk4NGY0NzFlZiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.DcXNIp0RKha1zkV4ga_QlGfcvMLGx2LOyzX-0VeboC3FojKFhxnfBeoda-zTeh6ugJlSM4kQYrRcof1Kx8Mg3-UgofNmgRySbDEVKtJZyMUoHqLmySKUIn8sbX8q83RNcqwcvY-fM8-w8HSuzU7Td7WWNuZrlCL4q_LQDYIBet1nlQ83YsENKNE8rsZQFDw8YM0MH6BEZLdwyhaboy_jjYbsU7kv8gks3aIX4lh1Fs9ZFQpC_6B0_MZvb7rEeG2M8QWXoUkDoL5JCKu6Wot5GlWf0kDMxIsViggP0NmSDTKh6kIvCkT2FZ2I4guEcjE_EjBpdOS6Abta22tzLlPKhg",target:"_blank",rel:"noopener noreferrer"}},[a._v("Kuboard 在线体验"),t("OutboundLink")],1),a._v("\n为保证环境的稳定性,在线 Demo 中只提供只读权限。"),t("span",{staticStyle:{color:"#F56C6C","font-weight":"500"}},[a._v("(请在PC浏览器中打开)")])]),a._v(" "),t("p",[t("img",{attrs:{src:e(311),alt:"image-20190718175957160"}})]),a._v(" "),t("h2",{attrs:{id:"制作标准机镜像"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[a._v("#")]),a._v(" 制作标准机镜像")]),a._v(" "),t("p",[a._v("通过使用标准机镜像,可以")]),a._v(" "),t("ul",[t("li",[t("strong",[a._v("避免重复执行对测试机安装必要软件的过程")])]),a._v(" "),t("li",[t("strong",[a._v("以一种相对标准化的过程管理测试机的维护")])])]),a._v(" "),t("p",[a._v("标准机镜像中预装了如下内容:")]),a._v(" "),t("ul",[t("li",[a._v("docker")]),a._v(" "),t("li",[a._v("gitlab-runner")]),a._v(" "),t("li",[a._v("kubernetes images")])]),a._v(" "),t("p",[a._v("本文档描述的安装过程已基于 centos 7.6 验证")]),a._v(" "),t("p",[a._v("标准机镜像的制作过程描述如下:")]),a._v(" "),t("h3",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装docker")]),a._v(" "),t("p",[t("strong",[a._v("卸载旧版本")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum remove docker "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-client "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-client-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-common "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-latest-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-engine-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-engine\n")])])]),t("p",[t("strong",[a._v("下载依赖包及安装包")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm\n")])])]),t("p",[t("strong",[a._v("安装")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" docker\n")])])]),t("p",[t("strong",[a._v("启动 docker 服务")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" systemctl start docker\n")])])]),t("p",[t("strong",[a._v("检查 docker 版本")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker version\n")])])]),t("p",[t("strong",[a._v("参考文档")])]),a._v(" "),t("p",[a._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),a._v(" "),t("p",[a._v("https://docs.docker.com/install/linux/linux-postinstall/")]),a._v(" "),t("h3",{attrs:{id:"安装-nfs-utils"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 nfs-utils")]),a._v(" "),t("p",[t("strong",[a._v("执行安装命令")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" nfs-utils\n")])])]),t("p",[a._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),a._v(" "),t("h3",{attrs:{id:"k8s基本配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[a._v("#")]),a._v(" K8S基本配置")]),a._v(" "),t("p",[t("strong",[a._v("配置K8S的yum源")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v("EOF "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" /etc/yum.repos.d/kubernetes.repo\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("kubernetes"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("name")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Kubernetes\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("baseurl")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("repo_gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("gpgkey")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),t("p",[t("strong",[a._v("关闭swap、防火墙")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("swapoff -a\n")])])]),t("p",[t("strong",[a._v("关闭SeLinux")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("setenforce "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n")])])]),t("p",[t("strong",[a._v("修改 /etc/sysctl.conf")])]),a._v(" "),t("p",[t("code",[a._v("vim /etc/sysctl.conf")])]),a._v(" "),t("p",[a._v("向其中添加")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),t("p",[a._v("如下图所示")]),a._v(" "),t("p",[t("img",{attrs:{src:e(30),alt:"image-20190715085036593",title:":size=600x445"}})]),a._v(" "),t("p",[t("strong",[a._v("安装kubelet、kubeadm、kubectl")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0\n")])])]),t("p",[t("strong",[a._v("修改docker Cgroup Driver为systemd")])]),a._v(" "),t("p",[t("code",[a._v("vim /usr/lib/systemd/system/docker.service")])]),a._v(" "),t("p",[a._v("向其中他添加")]),a._v(" "),t("p",[t("code",[a._v("--exec-opt native.cgroupdriver=systemd")])]),a._v(" "),t("p",[a._v("如下图所示")]),a._v(" "),t("p",[t("img",{attrs:{src:e(31),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),a._v(" "),t("p",[a._v("重启 docker")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("systemctl daemon-reload\nsystemctl restart docker\n")])])]),t("p",[t("strong",[a._v("启动kubelet")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" kubelet "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" systemctl start kubelet\n")])])]),t("p",[t("strong",[a._v("加载 kubernetes 镜像")])]),a._v(" "),t("p",[a._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),a._v(" "),t("p",[a._v("执行以下命令添加docker k8s国内镜像源")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sh")]),a._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),t("p",[t("strong",[a._v("拉取k8s相关镜像")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0\ndocker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0\ndocker pull mirrorgooglecontainers/kube-scheduler:v1.15.0\ndocker pull mirrorgooglecontainers/kube-proxy:v1.15.0\ndocker pull mirrorgooglecontainers/pause:3.1\ndocker pull mirrorgooglecontainers/etcd:3.3.10\ndocker pull coredns/coredns:1.3.1\n")])])]),t("p",[t("strong",[a._v("更改镜像名为k8s官网镜像")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0\ndocker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0\ndocker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0\ndocker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0\ndocker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1\ndocker tag eb516548c180 k8s.gcr.io/coredns:1.3.1\ndocker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10\n")])])]),t("p",[t("strong",[a._v("制作镜像")])]),a._v(" "),t("p",[a._v("请参考阿里云基于ECS "),t("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[a._v("制作虚拟机镜像"),t("OutboundLink")],1),a._v(" 的文档")]),a._v(" "),t("h2",{attrs:{id:"初始化-master-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-master-节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化 master 节点")]),a._v(" "),t("h3",{attrs:{id:"在-demo-master-a-1-机器上执行"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#在-demo-master-a-1-机器上执行","aria-hidden":"true"}},[a._v("#")]),a._v(" 在 demo-master-a-1 机器上执行")]),a._v(" "),t("p",[a._v("以下命令以 root 身份执行")]),a._v(" "),t("p",[t("strong",[a._v("配置 apiserver.demo 的域名")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.demo"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\n")])])]),t("blockquote",[t("p",[a._v("请替换其中的 x.x.x.x 为您的 demo-master-a-1 的实际 ip 地址")])]),a._v(" "),t("p",[t("strong",[a._v("创建 /root/k8s/kubeadm-config.yaml")])]),a._v(" "),t("div",{staticClass:"language-yaml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" kubeadm.k8s.io/v1beta1\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" ClusterConfiguration\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kubernetesVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" v1.15.0\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("controlPlaneEndpoint")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"apiserver.demo:6443"')]),a._v("\n\n")])])]),t("p",[t("strong",[a._v("初始化 apiserver")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm init --config"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("kubeadm-config.yaml --upload-certs\n")])])]),t("p",[a._v("执行结果如下图所示:")]),a._v(" "),t("p",[t("img",{attrs:{src:e(312),alt:"image-20190715101542756",title:":size=800x388"}})]),a._v(" "),t("p",[t("strong",[a._v("初始化 root 用户的 kubectl 配置")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" -rf /root/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("mkdir")]),a._v(" /root/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cp")]),a._v(" -i /etc/kubernetes/admin.conf /root/.kube/config\n")])])]),t("p",[t("strong",[a._v("安装 calico")])]),a._v(" "),t("p",[a._v("(需要在安全组–ServerFarm需要为集群服务器器端口6443建立安全组规则)")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl apply -f "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\nhttps://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml\n")])])]),t("blockquote",[t("p",[a._v("安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/")])]),a._v(" "),t("p",[t("strong",[a._v("等待calico安装就绪:")])]),a._v(" "),t("p",[a._v("执行如下命令,等待3-10分钟,直到所有的容器组处于 Running 状态")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("watch")]),a._v(" kubectl get pod -n kube-system\n")])])]),t("h3",{attrs:{id:"检查-apiserver初始化结果"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查-apiserver初始化结果","aria-hidden":"true"}},[a._v("#")]),a._v(" 检查 apiserver初始化结果")]),a._v(" "),t("p",[a._v("在第一个master节点 demo-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl get nodes\n")])])]),t("h2",{attrs:{id:"初始化-worker节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-worker节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化 worker节点")]),a._v(" "),t("h3",{attrs:{id:"获得-join命令参数"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#获得-join命令参数","aria-hidden":"true"}},[a._v("#")]),a._v(" 获得 join命令参数")]),a._v(" "),t("p",[t("strong",[a._v("在 master 节点 demo-master-a-1 节点执行")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm token create --print-join-command\n")])])]),t("p",[a._v("可获取kubeadm join 命令及参数,如下所示")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("h3",{attrs:{id:"初始化worker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化worker","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化worker")]),a._v(" "),t("p",[t("strong",[a._v("针对所有的 worker 节点执行")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.demo"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\nkubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("blockquote",[t("ul",[t("li",[t("p",[a._v("将 x.x.x.x 替换为 loader balancer 的实际 ip")])]),a._v(" "),t("li",[t("p",[a._v("将 kubeadm join 命令后的参数替换为上一个步骤中实际从 demo-master-a-1 节点获得的参数")])])])]),a._v(" "),t("h3",{attrs:{id:"检查-apiserver初始化结果-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查-apiserver初始化结果-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 检查 apiserver初始化结果")]),a._v(" "),t("p",[a._v("在第一个master节点 demo-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl get nodes\n")])])]),t("p",[t("img",{attrs:{src:e(313),alt:"image-20190715193838012"}})]),a._v(" "),t("h2",{attrs:{id:"移除-worker-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移除-worker-节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 移除 worker 节点")]),a._v(" "),t("blockquote",[t("p",[a._v("正常情况下,您无需移除 worker 节点")])]),a._v(" "),t("p",[a._v("在准备移除的 worker 节点上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm reset\n")])])]),t("p",[a._v("在第一个 master 节点 demo-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl delete node demo-worker-x-x\n")])])]),t("blockquote",[t("ul",[t("li",[a._v("将 demo-worker-x-x 替换为要移除的 worker 节点的名字")]),a._v(" "),t("li",[a._v("worker 节点的名字可以通过在第一个 master 节点 demo-master-a-1 上执行 kubectl get nodes 命令获得")])])]),a._v(" "),t("h2",{attrs:{id:"安装-ingress-controller"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 Ingress Controller")]),a._v(" "),t("blockquote",[t("p",[a._v("ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),a._v(" "),t("p",[a._v("Ingress Controllers官网介绍:"),t("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/"),t("OutboundLink")],1)]),a._v(" "),t("p",[a._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),a._v(" "),t("p",[a._v("kubernetes支持多种Ingress Controllers,本文推荐使用")]),a._v(" "),t("p",[a._v("https://github.com/nginxinc/kubernetes-ingress")])]),a._v(" "),t("h3",{attrs:{id:"在-demo-master-a-1-上执行"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#在-demo-master-a-1-上执行","aria-hidden":"true"}},[a._v("#")]),a._v(" 在 demo-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),t("h3",{attrs:{id:"配置域名解析"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置域名解析","aria-hidden":"true"}},[a._v("#")]),a._v(" 配置域名解析")]),a._v(" "),t("p",[a._v("将域名 *.demo.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z")]),a._v(" "),t("h3",{attrs:{id:"验证配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#验证配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 验证配置")]),a._v(" "),t("p",[a._v("在浏览器访问 a.demo.yourdomain.com,将得到 404 NotFound 错误页面")])])},[],!1,null,null,null);s.default=r.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/16.1a0359d4.js b/.vuepress/dist/assets/js/16.1a0359d4.js
new file mode 100644
index 0000000..7f33316
--- /dev/null
+++ b/.vuepress/dist/assets/js/16.1a0359d4.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{288:function(a,t,s){a.exports=s.p+"assets/img/1563696697515.94512132.png"},289:function(a,t,s){a.exports=s.p+"assets/img/1563697667480.8c846298.png"},290:function(a,t,s){a.exports=s.p+"assets/img/1563698644736.d67b2e09.png"},291:function(a,t,s){a.exports=s.p+"assets/img/1563698714557.fa1eeb1c.png"},292:function(a,t,s){a.exports=s.p+"assets/img/1563698865448.2cbaf53a.png"},350:function(a,t,s){"use strict";s.r(t);var e=s(0),r=Object(e.a)({},function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"在单机使用-kind-安装-kubernetes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#在单机使用-kind-安装-kubernetes","aria-hidden":"true"}},[a._v("#")]),a._v(" 在单机使用 kind 安装 Kubernetes")]),a._v(" "),e("p",[a._v("本文旨在通过使用 kind 搭建本地 k8s 集群环境,为技术爱好者提供快速上手 Kuboard 的基本实践方式。")]),a._v(" "),e("h2",{attrs:{id:"环境简介"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#环境简介","aria-hidden":"true"}},[a._v("#")]),a._v(" 环境简介")]),a._v(" "),e("p",[a._v("本地搭建 k8s 集群需要 kind 工具及 docker 环境。")]),a._v(" "),e("p",[a._v("建议硬件配置:2核 cpu,8G 内存")]),a._v(" "),e("p",[a._v("ps: 以下均为在 Linux 平台实践,其他平台可参考文章中链接。")]),a._v(" "),e("h3",{attrs:{id:"kind-简介与安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kind-简介与安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kind 简介与安装")]),a._v(" "),e("p",[a._v("kind:https://kind.sigs.k8s.io/ 是一个使用 Docker 容器运行本地 Kubernetes 集群的工具。\nps:本文使用kind V0.4.0")]),a._v(" "),e("p",[a._v("安装:")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("linux:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -Lo ./kind-linux-amd64 https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-linux-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" +x ./kind-linux-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" ./kind-linux-amd64 /usr/local/bin/kind\n")])])])]),a._v(" "),e("li",[e("p",[a._v("win:")]),a._v(" "),e("div",{staticClass:"language-powershell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-powershell"}},[e("code",[a._v("curl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("Lo kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe https:"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("github"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("com"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kubernetes"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("sigs"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("releases"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("download"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("v0"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("4"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("0"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("Move-Item")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("\\kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe c:\\some"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("dir")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-in")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("your"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("PATH\\kind"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe\n")])])])]),a._v(" "),e("li",[e("p",[a._v("mac:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -Lo ./kind-darwin-amd64 https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-darwin-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" +x ./kind-darwin-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" ./kind-darwin-amd64 /usr/local/bin/kind\n")])])])])]),a._v(" "),e("h3",{attrs:{id:"docker-环境"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#docker-环境","aria-hidden":"true"}},[a._v("#")]),a._v(" docker 环境")]),a._v(" "),e("p",[a._v("Kind 的主要功能目前需要有 Docker 环境的支持,可参考 Docker 官方文档:https://links.jianshu.com/go?to=https%3A%2F%2Fdocs.docker.com%2Finstall%2F 进行安装。")]),a._v(" "),e("h3",{attrs:{id:"kubectl-安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kubectl-安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kubectl 安装")]),a._v(" "),e("p",[a._v("kubectl https://kubernetes.io/docs/tasks/tools/install-kubectl/ 是 Kubernetes 命令行工具,可以在 Kubernetes 上部署和管理应用程序")]),a._v(" "),e("p",[a._v("Linux:")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl\nchmod +x ./kubectl\nsudo mv ./kubectl /usr/local/bin/kubectl\n")])])]),e("p",[a._v("ps: 由于网络问题多次尝试可下载成功")]),a._v(" "),e("h2",{attrs:{id:"k8s-集群搭建"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#k8s-集群搭建","aria-hidden":"true"}},[a._v("#")]),a._v(" k8s 集群搭建")]),a._v(" "),e("h3",{attrs:{id:"准备-kind-搭建集群配置文件-kind-config-yaml"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#准备-kind-搭建集群配置文件-kind-config-yaml","aria-hidden":"true"}},[a._v("#")]),a._v(" 准备 kind 搭建集群配置文件 kind-config.yaml")]),a._v(" "),e("div",{staticClass:"language-yaml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yaml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" Cluster\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" kind.sigs.k8s.io/v1alpha3\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("nodes")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("role")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" control"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("plane\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("role")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" worker\n")])])]),e("h3",{attrs:{id:"使用-kind-搭建集群"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#使用-kind-搭建集群","aria-hidden":"true"}},[a._v("#")]),a._v(" 使用 kind 搭建集群")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kind create cluster --config kind-config.yaml\n")])])]),e("h3",{attrs:{id:"创建成功"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#创建成功","aria-hidden":"true"}},[a._v("#")]),a._v(" 创建成功")]),a._v(" "),e("p",[e("img",{attrs:{src:s(288),alt:"1563696697515"}})]),a._v(" "),e("p",[a._v("按照提示配置环境变量")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v('export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"\n')])])]),e("p",[a._v("查看集群信息")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl cluster-info\n")])])]),e("p",[e("img",{attrs:{src:s(289),alt:"1563697667480"}})]),a._v(" "),e("h2",{attrs:{id:"kuboard-安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kuboard-安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kuboard 安装")]),a._v(" "),e("p",[a._v("官方安装地址:http://kuboard.cn/#/install/install-dashboard")]),a._v(" "),e("h3",{attrs:{id:"获取并修改-yaml-文件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#获取并修改-yaml-文件","aria-hidden":"true"}},[a._v("#")]),a._v(" 获取并修改 yaml 文件")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml\n")])])]),e("p",[a._v("修改文件 kuboard.yaml 中 Ingress 的 host 为空")]),a._v(" "),e("h3",{attrs:{id:"执行安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#执行安装","aria-hidden":"true"}},[a._v("#")]),a._v(" 执行安装")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl apply -f kuboard.yaml \n")])])]),e("h3",{attrs:{id:"查看启动状态"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#查看启动状态","aria-hidden":"true"}},[a._v("#")]),a._v(" 查看启动状态")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl get pods -n kube-system --watch\n")])])]),e("p",[a._v("等待 kuboard 启动成功")]),a._v(" "),e("h3",{attrs:{id:"访问-kuboard-页面"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#访问-kuboard-页面","aria-hidden":"true"}},[a._v("#")]),a._v(" 访问 kuboard 页面")]),a._v(" "),e("p",[a._v("待启动成功后,需要做 80 端口转发,通过浏览器访问 kuboard")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl port-forward service/kuboard 9080:80 -n kube-system\n")])])]),e("p",[a._v("获取登录 token")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl -n kube-system describe secret "),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("kubectl -n kube-system get secret "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("grep")]),a._v(" kuboard-user "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{print "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$1")]),a._v("}'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(" \n")])])]),e("p",[e("img",{attrs:{src:s(290),alt:"1563698644736"}})]),a._v(" "),e("p",[a._v("浏览器中访问 http://localhost:9080")]),a._v(" "),e("p",[e("img",{attrs:{src:s(291),alt:"1563698714557"}})]),a._v(" "),e("p",[a._v("将获取的 token 复制到浏览器中,访问成功")]),a._v(" "),e("p",[e("img",{attrs:{src:s(292),alt:"1563698865448"}})])])},[],!1,null,null,null);t.default=r.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/17.bd1a9a3b.js b/.vuepress/dist/assets/js/17.bd1a9a3b.js
new file mode 100644
index 0000000..20b69a7
--- /dev/null
+++ b/.vuepress/dist/assets/js/17.bd1a9a3b.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{29:function(e,r,a){e.exports=a.p+"assets/img/kuboard_qq.45e78dbf.png"},294:function(e,r,a){e.exports=a.p+"assets/img/image-20190721154650916.3f63fdcb.jpg"},295:function(e,r,a){e.exports=a.p+"assets/img/image-20190723105039358.91eef75a.png"},296:function(e,r,a){e.exports=a.p+"assets/img/image-20190721000759925.bb32a332.png"},345:function(e,r,a){"use strict";a.r(r);var t=a(0),s=Object(t.a)({},function(){var e=this,r=e.$createElement,t=e._self._c||r;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h2",{attrs:{id:"为什么选择-kuboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#为什么选择-kuboard","aria-hidden":"true"}},[e._v("#")]),e._v(" 为什么选择 Kuboard")]),e._v(" "),t("p",[e._v("Kubernetes 已然是当下容器编排领域事实上的标准,各大云服务商都急于推出 Kubernetes 服务,互联网公司也纷纷跟进,将自己的应用容器化,并使用 Kubernetes 编排。")]),e._v(" "),t("p",[e._v("在 Kubernetes 图形化工具方面,我们已经获得了极大的可选择空间:")]),e._v(" "),t("ul",[t("li",[e._v("各云服务商自己推出的 Kubernetes 服务所搭载的管理控制台,例如 阿里云的 Kubernetes 服务,青云推出的 KubeSphere,其他云服务商的 CaaS 类服务")]),e._v(" "),t("li",[e._v("Kubernetes 官方的图形管理界面 Kubernetes Dashboard")]),e._v(" "),t("li",[e._v("面向企业私有化部署的 Rancher")])]),e._v(" "),t("p",[e._v("什么场景下更适合选择 Kuboard 呢?")]),e._v(" "),t("h2",{attrs:{id:"kubernetes-入门学习者"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-入门学习者","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 入门学习者")]),e._v(" "),t("p",[e._v("\tKuboard类似于 Kubernetes Dashboard,是一款轻量级产品,按照 Kuboard 的文档,您可以很快地搭建一套学习 Kubernetes 用的集群环境,您也可以在自己已经有的集群上轻易地完成 Kuboard 的安装。")]),e._v(" "),t("p",[e._v("\t对于 K8S 入门学习者来说,看了那么多 Kubernetes 文章,了解了许多的跟 apiserver、etcd、pod、container、service、ingress、storage class等各种概念,都不如比不上自己动手搭一套 K8S 环境,并在其上部署一套微服务应用的效果好。Kuboard 完全采用场景化的设计,操作过程更适合人们的思考方式。例如,集群概览的展示方式、名称空间的展示方式。")]),e._v(" "),t("h3",{attrs:{id:"集群概览"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#集群概览","aria-hidden":"true"}},[e._v("#")]),e._v(" 集群概览")]),e._v(" "),t("p",[e._v("在 Kuboard 中,集群概览的展现形式如下:")]),e._v(" "),t("p",[e._v("\t计算资源、存储资源并列在集群概览的下层,上层则是运行于计算资源与存储资源上的名称空间(应用)。")]),e._v(" "),t("p",[t("img",{attrs:{src:a(75),alt:"集群概览"}})]),e._v(" "),t("h3",{attrs:{id:"名称空间"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#名称空间","aria-hidden":"true"}},[e._v("#")]),e._v(" 名称空间")]),e._v(" "),t("p",[e._v("在 Kuboard 中,名称空间的展示形式如下:")]),e._v(" "),t("p",[e._v("\t以微服务参考分层架构的形式,将所有的微服务分为如下几层:")]),e._v(" "),t("ul",[t("li",[e._v("展现层\n"),t("ul",[t("li",[e._v("终端用户访问的 Web 应用")])])]),e._v(" "),t("li",[e._v("API网关层\n"),t("ul",[t("li",[e._v("Spring Cloud Gateway / Zuul /Kong 等接口网关")])])]),e._v(" "),t("li",[e._v("微服务层\n"),t("ul",[t("li",[e._v("Spring Boot 微服务,或 PHP / Python 实现的微服务")])])]),e._v(" "),t("li",[e._v("持久层\n"),t("ul",[t("li",[e._v("MySQL 数据库等(开发及测试环境里,将MySQL部署于 Kubernetes 可以极大地降低环境维护的任务量)")])])]),e._v(" "),t("li",[e._v("中间件层\n"),t("ul",[t("li",[e._v("消息队列")]),e._v(" "),t("li",[e._v("服务注册 Eureka / Zookeeper / Consul 等")])])]),e._v(" "),t("li",[e._v("监控层\n"),t("ul",[t("li",[e._v("Prometheus + Grafana")]),e._v(" "),t("li",[e._v("Pinpooint 等")])])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(294),alt:"image-20190721154650916"}})]),e._v(" "),t("p",[e._v("\t更为贴心的,当某一个工作负载存在部署方面的问题时, Kuboard 将以红色高亮出该工作负载,并配有合适的方式辅助用户定位错误信息。")]),e._v(" "),t("h3",{attrs:{id:"无需手写-yaml"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#无需手写-yaml","aria-hidden":"true"}},[e._v("#")]),e._v(" 无需手写 Yaml")]),e._v(" "),t("p",[e._v("\t学习 Kubernetes 时,需要花费许多的时间,在理解一个概念之后,模仿着写一个 yaml 文件,再使用 kubectl 应用该文件。")]),e._v(" "),t("p",[e._v("\t使用 Kuboard 提供的工作负载编辑器,可以直观的完成应用的部署")]),e._v(" "),t("p",[t("img",{attrs:{src:a(295),alt:"image-20190723105039358"}})]),e._v(" "),t("h2",{attrs:{id:"kubernetes-日常运维人员"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-日常运维人员","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 日常运维人员")]),e._v(" "),t("p",[e._v("\tkubectl 的命令敲了许多遍了?yaml 文件越来越多,结构越来越复杂?又要部署一套测试环境,用来进行 UAT 测试?")]),e._v(" "),t("h3",{attrs:{id:"纯图形界面运维-kubernetes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#纯图形界面运维-kubernetes","aria-hidden":"true"}},[e._v("#")]),e._v(" 纯图形界面运维 Kubernetes")]),e._v(" "),t("p",[e._v("在作者的日常运维工作中,除了 kubectl port-forward 还需要回到命令行界面以外,其他运维任务已经全部在 Kuboard 中轻松完成。更让人期待的是,Kuboard 作者还计划实现 port-forward 的功能,如此一来,作者日后就完全不再需要使用 kubectl 了。")]),e._v(" "),t("h3",{attrs:{id:"多环境复制"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#多环境复制","aria-hidden":"true"}},[e._v("#")]),e._v(" 多环境复制")]),e._v(" "),t("p",[e._v("为了能够是你的一套 yaml 文件适应多种部署(开发环境、测试环境、UAT环境、生产环境),您一定尝试过各种办法,例如 helmer chart, kustomize, kubectl apply -k directory_name,但是您本来可以更轻松地完成这样的任务的。")]),e._v(" "),t("p",[e._v("Kuboard 提供了 工作负载导出和导入的功能,0 yaml文件,轻松复制多个环境。")]),e._v(" "),t("h3",{attrs:{id:"应用升级"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#应用升级","aria-hidden":"true"}},[e._v("#")]),e._v(" 应用升级")]),e._v(" "),t("p",[e._v("Kuboard 提供批量修改容器镜像版本的功能,轻松升级应用程序的版本。")]),e._v(" "),t("p",[t("img",{attrs:{src:a(296),alt:"image-20190721000759925"}})]),e._v(" "),t("h2",{attrs:{id:"_0-侵入性"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_0-侵入性","aria-hidden":"true"}},[e._v("#")]),e._v(" 0 侵入性")]),e._v(" "),t("p",[e._v("\tRancher 为了支持多云管理(MeSos,Docker Swarm,Kubernetes等),引入了一系列复杂的概念,又需要新增安装 Rancher Server、Rancher Agent等,本来学习 Kubernetes 已然不堪重负,Rancher再把多云整合到一起来,无疑又增加了学习和使用的复杂性。如果您只是打算使用 Kubernetes 的话,也许并不需要选择 Rancher 这样重量级的产品。Kuboard 仅仅依赖于原生 Kubernetes,可以运行在各种公有云、私有云上,您也可以自己基于物理机、vsphere、vmware等已经有的基础设施搭建 Kubernetes,轻松实现现有 Infrastructure 的容器化改造。")]),e._v(" "),t("h2",{attrs:{id:"更多资料"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#更多资料","aria-hidden":"true"}},[e._v("#")]),e._v(" 更多资料")]),e._v(" "),t("p",[e._v("Kuboard 官网 http://kuboard.cn")]),e._v(" "),t("p",[e._v("Kuboard QQ 群")]),e._v(" "),t("p",[t("img",{attrs:{src:a(29),alt:"Kuboard QQ 群"}})])])},[],!1,null,null,null);r.default=s.exports},75:function(e,r,a){e.exports=a.p+"assets/img/image-20190716234146419.bd87cdff.png"}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/18.a8f155b7.js b/.vuepress/dist/assets/js/18.a8f155b7.js
new file mode 100644
index 0000000..4025028
--- /dev/null
+++ b/.vuepress/dist/assets/js/18.a8f155b7.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{200:function(t,a,e){t.exports=e.p+"assets/img/image-20190721104153954.74fb88ec.png"},201:function(t,a,e){t.exports=e.p+"assets/img/image-20190721101812895.8f059471.png"},202:function(t,a,e){t.exports=e.p+"assets/img/image-20190721101954560.176c574c.png"},203:function(t,a,e){t.exports=e.p+"assets/img/image-20190721103324863.72744076.png"},332:function(t,a,e){"use strict";e.r(a);var r=e(0),s=Object(r.a)({},function(){var t=this,a=t.$createElement,r=t._self._c||a;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"集群事件"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#集群事件","aria-hidden":"true"}},[t._v("#")]),t._v(" 集群事件")]),t._v(" "),r("p",[t._v("通过观察 KUberetes 集群事件,可以快速诊断部署时发生的问题。")]),t._v(" "),r("p",[t._v("Kuboard 建立了与 kubernetes apiserver 的长连接,可以在第一时间将集群中的事件更新以通知的形式显示在 dashboad 上。")]),t._v(" "),r("h2",{attrs:{id:"错误事件提示"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#错误事件提示","aria-hidden":"true"}},[t._v("#")]),t._v(" 错误事件提示")]),t._v(" "),r("p",[t._v("如果存在与某一个工作负载相关的错误事件,名称空间界面中,将以红色显示该工作负载,如下图所示:")]),t._v(" "),r("p",[r("img",{attrs:{src:e(200),alt:"image-20190721104153954"}})]),t._v(" "),r("h2",{attrs:{id:"全局事件"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#全局事件","aria-hidden":"true"}},[t._v("#")]),t._v(" 全局事件")]),t._v(" "),r("h3",{attrs:{id:"查看全局事件"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#查看全局事件","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看全局事件")]),t._v(" "),r("p",[t._v("在任何页面点击界面左上角的 "),r("em",[r("strong",[t._v("事件")])]),t._v(" 按钮,进入事件列表页:")]),t._v(" "),r("p",[r("img",{attrs:{src:e(201),alt:"image-20190721101812895"}})]),t._v(" "),r("h3",{attrs:{id:"删除事件"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#删除事件","aria-hidden":"true"}},[t._v("#")]),t._v(" 删除事件")]),t._v(" "),r("ul",[r("li",[t._v("点击全局事件列表中的 "),r("em",[r("strong",[t._v("类型")])]),t._v(" 标签,")])]),t._v(" "),r("p",[r("img",{attrs:{src:e(202),alt:"image-20190721101954560"}})]),t._v(" "),r("ul",[r("li",[t._v("点击 "),r("em",[r("strong",[t._v("确定")])])])]),t._v(" "),r("p",[t._v("该事件已删除。如果事件对应的错误原因没有被解决,该事件又会在下一次 kubernetes 调度系统资源的时候重新出现。")]),t._v(" "),r("h2",{attrs:{id:"微服务上下文相关的事件"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#微服务上下文相关的事件","aria-hidden":"true"}},[t._v("#")]),t._v(" 微服务上下文相关的事件")]),t._v(" "),r("p",[t._v("打开工作负载页面,如下图所示:")]),t._v(" "),r("p",[t._v("容器组信息中包含了与该容器组相关的所有集群事件。")]),t._v(" "),r("p",[r("img",{attrs:{src:e(203),alt:"image-20190721103324863"}})])])},[],!1,null,null,null);a.default=s.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/19.a9589cfd.js b/.vuepress/dist/assets/js/19.a9589cfd.js
new file mode 100644
index 0000000..751d535
--- /dev/null
+++ b/.vuepress/dist/assets/js/19.a9589cfd.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{30:function(a,s,e){a.exports=e.p+"assets/img/image-20190715085036593.ab4a32ff.png"},31:function(a,s,e){a.exports=e.p+"assets/img/image2019-07-15_09.01.21.1ac5bd70.png"},314:function(a,s,e){a.exports=e.p+"assets/img/image-20190713075717350.df5244cd.png"},315:function(a,s,e){a.exports=e.p+"assets/img/image2019-6-10_15-36-29.2870ee7d.png"},338:function(a,s,e){"use strict";e.r(s);var t=e(0),r=Object(t.a)({},function(){var a=this,s=a.$createElement,t=a._self._c||s;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"安装-kubernetes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-kubernetes","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 Kubernetes")]),a._v(" "),t("h1",{attrs:{id:"介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#介绍","aria-hidden":"true"}},[a._v("#")]),a._v(" 介绍")]),a._v(" "),t("p",[a._v("kubernetes 安装有多种选择,本文档描述的集群安装具备如下特点:")]),a._v(" "),t("ul",[t("li",[a._v("使用 kubernetes 1.15.0")]),a._v(" "),t("li",[a._v("三个 master 组成主节点集群,通过内网 loader balancer 实现负载均衡")]),a._v(" "),t("li",[a._v("多个 worker 组成工作节点集群,通过外网 loader balancer 实现负载均衡")]),a._v(" "),t("li",[a._v("使用 calico 作为网络插件")]),a._v(" "),t("li",[a._v("使用 nginx-ingress 作为 kubernetes ingress controller")])]),a._v(" "),t("p",[t("a",{attrs:{href:"https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg",target:"_blank",rel:"noopener noreferrer"}},[a._v("领取阿里云最高2000元红包"),t("OutboundLink")],1)]),a._v(" "),t("p",[a._v("下图为 kubernetes 安装的拓扑图")]),a._v(" "),t("p",[t("img",{attrs:{src:e(314),alt:"image-20190713075717350"}})]),a._v(" "),t("ul",[t("li",[a._v("标准机用于制作 centos 镜像,该镜像预先安装了 docker / kubelet / kubectl / kubeadm, 并预先下载了 kubernetes 所需的 docker image")]),a._v(" "),t("li",[a._v("跳板机用于通过 ssh 端口访问标准机、master 节点、worker 节点的 shell,如果您所使用的环境中,可以直接访问各节点的 shell,也可以无需跳板机")]),a._v(" "),t("li",[a._v("NAT y.y.y.y将 apiserver 的6443端口映射到外网,如果您始终只在 master 节点上执行 kubectl 命令,则无需做此映射")]),a._v(" "),t("li",[a._v("Load Balancer z.z.z.z 是 kubernetes 的 Ingress 外网映射,通常是必须的")])]),a._v(" "),t("h1",{attrs:{id:"安装步骤"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装步骤","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装步骤")]),a._v(" "),t("h2",{attrs:{id:"制作标准机镜像"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[a._v("#")]),a._v(" 制作标准机镜像")]),a._v(" "),t("p",[a._v("通过使用标准机镜像,可以")]),a._v(" "),t("ul",[t("li",[t("strong",[a._v("避免重复执行对测试机安装必要软件的过程")])]),a._v(" "),t("li",[t("strong",[a._v("以一种相对标准化的过程管理测试机的维护")])])]),a._v(" "),t("p",[a._v("标准机镜像中预装了如下内容:")]),a._v(" "),t("ul",[t("li",[a._v("docker")]),a._v(" "),t("li",[a._v("gitlab-runner")]),a._v(" "),t("li",[a._v("kubernetes images")])]),a._v(" "),t("p",[a._v("本文档描述的安装过程已基于 centos 7.6 验证")]),a._v(" "),t("p",[a._v("标准机镜像的制作过程描述如下:")]),a._v(" "),t("h3",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装docker")]),a._v(" "),t("p",[t("strong",[a._v("卸载旧版本")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum remove docker "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-client "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-client-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-common "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-latest-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-engine-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-engine\n")])])]),t("p",[t("strong",[a._v("下载依赖包及安装包")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm\n")])])]),t("p",[t("strong",[a._v("安装")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" docker\n")])])]),t("p",[t("strong",[a._v("启动 docker 服务")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" systemctl start docker\n")])])]),t("p",[t("strong",[a._v("检查 docker 版本")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker version\n")])])]),t("p",[t("strong",[a._v("参考文档")])]),a._v(" "),t("p",[a._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),a._v(" "),t("p",[a._v("https://docs.docker.com/install/linux/linux-postinstall/")]),a._v(" "),t("h3",{attrs:{id:"安装-nfs-utils"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 nfs-utils")]),a._v(" "),t("p",[t("strong",[a._v("执行安装命令")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" nfs-utils\n")])])]),t("p",[a._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),a._v(" "),t("h3",{attrs:{id:"k8s基本配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[a._v("#")]),a._v(" K8S基本配置")]),a._v(" "),t("p",[t("strong",[a._v("配置K8S的yum源")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v("EOF "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" /etc/yum.repos.d/kubernetes.repo\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("kubernetes"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("name")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Kubernetes\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("baseurl")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("repo_gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("gpgkey")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),t("p",[t("strong",[a._v("关闭swap、防火墙")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("swapoff -a\n")])])]),t("p",[t("strong",[a._v("关闭SeLinux")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("setenforce "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n")])])]),t("p",[t("strong",[a._v("修改 /etc/sysctl.conf")])]),a._v(" "),t("p",[t("code",[a._v("vim /etc/sysctl.conf")])]),a._v(" "),t("p",[a._v("向其中添加")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),t("p",[a._v("如下图所示")]),a._v(" "),t("p",[t("img",{attrs:{src:e(30),alt:"image-20190715085036593",title:":size=600x445"}})]),a._v(" "),t("p",[t("strong",[a._v("安装kubelet、kubeadm、kubectl")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0\n")])])]),t("p",[t("strong",[a._v("修改docker Cgroup Driver为systemd")])]),a._v(" "),t("p",[t("code",[a._v("vim /usr/lib/systemd/system/docker.service")])]),a._v(" "),t("p",[a._v("向其中他添加")]),a._v(" "),t("p",[t("code",[a._v("--exec-opt native.cgroupdriver=systemd")])]),a._v(" "),t("p",[a._v("如下图所示")]),a._v(" "),t("p",[t("img",{attrs:{src:e(31),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),a._v(" "),t("p",[a._v("重启 docker")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("systemctl daemon-reload\nsystemctl restart docker\n")])])]),t("p",[t("strong",[a._v("启动kubelet")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" kubelet "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" systemctl start kubelet\n")])])]),t("p",[t("strong",[a._v("加载 kubernetes 镜像")])]),a._v(" "),t("p",[a._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),a._v(" "),t("p",[a._v("执行以下命令添加docker k8s国内镜像源")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sh")]),a._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),t("p",[t("strong",[a._v("拉取k8s相关镜像")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0\ndocker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0\ndocker pull mirrorgooglecontainers/kube-scheduler:v1.15.0\ndocker pull mirrorgooglecontainers/kube-proxy:v1.15.0\ndocker pull mirrorgooglecontainers/pause:3.1\ndocker pull mirrorgooglecontainers/etcd:3.3.10\ndocker pull coredns/coredns:1.3.1\n")])])]),t("p",[t("strong",[a._v("更改镜像名为k8s官网镜像")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0\ndocker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0\ndocker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0\ndocker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0\ndocker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1\ndocker tag eb516548c180 k8s.gcr.io/coredns:1.3.1\ndocker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10\n")])])]),t("p",[t("strong",[a._v("制作镜像")])]),a._v(" "),t("p",[a._v("请参考阿里云基于ECS "),t("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[a._v("制作虚拟机镜像"),t("OutboundLink")],1),a._v(" 的文档")]),a._v(" "),t("h2",{attrs:{id:"初始化api-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化api-server","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化API Server")]),a._v(" "),t("h3",{attrs:{id:"创建-apiserver-的-elb(私网)"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#创建-apiserver-的-elb(私网)","aria-hidden":"true"}},[a._v("#")]),a._v(" 创建 ApiServer 的 ELB(私网)")]),a._v(" "),t("p",[a._v("监听端口:6443 / TCP")]),a._v(" "),t("p",[a._v("后端资源组:包含 apple-master-a-1, apple-master-b-1, apple-master-b-2")]),a._v(" "),t("p",[a._v("后端端口:6443")]),a._v(" "),t("p",[a._v("开启 按源地址保持会话")]),a._v(" "),t("p",[a._v("假设完成创建以后,ELB的 ip 地址为 x.x.x.x")]),a._v(" "),t("h3",{attrs:{id:"初始化第一个master节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化第一个master节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化第一个master节点")]),a._v(" "),t("p",[a._v("在 apple-master-a-1机器上执行")]),a._v(" "),t("p",[t("strong",[a._v("配置 apiserver.apple 的域名")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\n")])])]),t("blockquote",[t("p",[a._v("请替换其中的 x.x.x.x 为您的负载均衡服务器的实际 ip 地址")])]),a._v(" "),t("p",[t("strong",[a._v("创建 /root/k8s/kubeadm-config.yaml")])]),a._v(" "),t("div",{staticClass:"language-yaml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" kubeadm.k8s.io/v1beta1\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" ClusterConfiguration\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kubernetesVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" v1.14.3\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("controlPlaneEndpoint")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"apiserver.apple:6443"')]),a._v("\n\n")])])]),t("p",[t("strong",[a._v("初始化 apiserver")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm init --config"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("/root/k8s/kubeadm-config.yaml --upload-certs\n\n")])])]),t("p",[a._v("执行结果如下图所示:")]),a._v(" "),t("p",[t("img",{attrs:{src:e(315),alt:"image2019-6-10_15-36-29"}})]),a._v(" "),t("p",[t("strong",[a._v("初始化 gitlab-runner 用户的 kubectl 配置")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" -rf /home/gitlab-runner/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("mkdir")]),a._v(" /home/gitlab-runner/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cp")]),a._v(" -i /etc/kubernetes/admin.conf /home/gitlab-runner/.kube/config\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("chown")]),a._v(" -R gitlab-runner:gitlab-runner /home/gitlab-runner/.kube\n")])])]),t("p",[t("strong",[a._v("安装 calico")])]),a._v(" "),t("p",[a._v("(需要在安全组–ServerFarm需要为集群服务器器端口6443建立安全组规则)")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl apply -f "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\t\thttps://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml\n")])])]),t("blockquote",[t("p",[a._v("安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/")])]),a._v(" "),t("p",[t("strong",[a._v("等待calico安装就绪:")])]),a._v(" "),t("p",[a._v("执行如下命令,等待3-10分钟,直到所有的容器组处于 Running 状态")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("watch")]),a._v(" kubectl get pod -n kube-system\n")])])]),t("h3",{attrs:{id:"初始化第二、三个master节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化第二、三个master节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化第二、三个master节点")]),a._v(" "),t("p",[a._v("在 apple-master-b-1 和 apple-master-b-2 机器上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\n")])])]),t("p",[a._v("执行 (以下命令行在初始化 apple-master-a-1 时,被打印在控制台上,执行时应该使用控制台打印出的命令参数)")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token ejwx62.vqwog6il5p83uk7y "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--experimental-control-plane --certificate-key 70eb87e62f052d2d5de759969d5b42f372d0ad798f98df38f7fe73efdf63a13c\n")])])]),t("h3",{attrs:{id:"检查-apiserver初始化结果"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查-apiserver初始化结果","aria-hidden":"true"}},[a._v("#")]),a._v(" 检查 apiserver初始化结果")]),a._v(" "),t("p",[a._v("在第一个master节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl get nodes\n")])])]),t("h2",{attrs:{id:"初始化-worker节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-worker节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化 worker节点")]),a._v(" "),t("h3",{attrs:{id:"获得-join命令参数"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#获得-join命令参数","aria-hidden":"true"}},[a._v("#")]),a._v(" 获得 join命令参数")]),a._v(" "),t("p",[t("strong",[a._v("在第一个master节点 apple-master-a-1 节点执行")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\nkubeadm token create --print-join-command\n")])])]),t("p",[a._v("可获取kubeadm join 命令及参数,如下所示")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("h3",{attrs:{id:"初始化worker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化worker","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化worker")]),a._v(" "),t("p",[t("strong",[a._v("针对所有的 worker 节点执行")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\nkubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("blockquote",[t("ul",[t("li",[t("p",[a._v("将 x.x.x.x 替换为 loader balancer 的实际 ip")])]),a._v(" "),t("li",[t("p",[a._v("将 kubeadm join 命令后的参数替换为上一个步骤中实际从 apple-master-a-1 节点获得的参数")])])])]),a._v(" "),t("h3",{attrs:{id:"检查-apiserver初始化结果-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查-apiserver初始化结果-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 检查 apiserver初始化结果")]),a._v(" "),t("p",[a._v("在第一个master节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl get nodes\n")])])]),t("h2",{attrs:{id:"移除-worker-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移除-worker-节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 移除 worker 节点")]),a._v(" "),t("blockquote",[t("p",[a._v("正常情况下,您无需移除 worker 节点")])]),a._v(" "),t("p",[a._v("在准备移除的 worker 节点上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\t\nkubeadm reset\n")])])]),t("p",[a._v("在第一个 master 节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl delete node apple-worker-x-x\n")])])]),t("blockquote",[t("ul",[t("li",[a._v("将 apple-worker-x-x 替换为要移除的 worker 节点的名字")]),a._v(" "),t("li",[a._v("worker 节点的名字可以通过在第一个 master 节点 apple-master-a-1 上执行 kubectl get nodes 命令获得")])])]),a._v(" "),t("h2",{attrs:{id:"安装-ingress-controller"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 Ingress Controller")]),a._v(" "),t("blockquote",[t("p",[a._v("ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),a._v(" "),t("p",[a._v("Ingress Controllers官网介绍:"),t("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/"),t("OutboundLink")],1)]),a._v(" "),t("p",[a._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),a._v(" "),t("p",[a._v("kubernetes支持多种Ingress Controllers,本文推荐使用")]),a._v(" "),t("p",[a._v("https://github.com/nginxinc/kubernetes-ingress")])]),a._v(" "),t("h3",{attrs:{id:"在-apple-master-a-1-上执行"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#在-apple-master-a-1-上执行","aria-hidden":"true"}},[a._v("#")]),a._v(" 在 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),t("h3",{attrs:{id:"在iaas云控制台完成如下配置(公网elb)"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#在iaas云控制台完成如下配置(公网elb)","aria-hidden":"true"}},[a._v("#")]),a._v(" 在IaaS云控制台完成如下配置("),t("strong",[a._v("公网ELB")]),a._v(")")]),a._v(" "),t("p",[a._v("创建负载均衡 ELB:")]),a._v(" "),t("p",[a._v(" 监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持")]),a._v(" "),t("p",[a._v(" 服务器资源池 1: apple-worker-x-x 的所有节点的 80端口")]),a._v(" "),t("p",[a._v(" 监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持")]),a._v(" "),t("p",[a._v(" 服务器资源池 2: apple-worker-x-x 的所有节点的443端口")]),a._v(" "),t("p",[a._v("假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z")]),a._v(" "),t("h3",{attrs:{id:"配置域名解析"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置域名解析","aria-hidden":"true"}},[a._v("#")]),a._v(" 配置域名解析")]),a._v(" "),t("p",[a._v("将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z")]),a._v(" "),t("h3",{attrs:{id:"验证配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#验证配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 验证配置")]),a._v(" "),t("p",[a._v("在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面")])])},[],!1,null,null,null);s.default=r.exports}}]);
\ No newline at end of file
diff --git a/.vuepress/dist/assets/js/2.690d1a4c.js b/.vuepress/dist/assets/js/2.690d1a4c.js
new file mode 100644
index 0000000..5e325aa
--- /dev/null
+++ b/.vuepress/dist/assets/js/2.690d1a4c.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[,,,,,,,,,,function(t,e,n){var r=n(44)("wks"),i=n(45),o=n(12).Symbol,a="function"==typeof o;(t.exports=function(t){return r[t]||(r[t]=a&&o[t]||(a?o:i)("Symbol."+t))}).store=r},function(t,e,n){var r=n(12),i=n(32),o=n(15),a=n(25),s=n(48),u=function(t,e,n){var c,l,f,p,h=t&u.F,d=t&u.G,v=t&u.S,g=t&u.P,m=t&u.B,b=d?r:v?r[e]||(r[e]={}):(r[e]||{}).prototype,y=d?i:i[e]||(i[e]={}),x=y.prototype||(y.prototype={});for(c in d&&(n=e),n)f=((l=!h&&b&&void 0!==b[c])?b:n)[c],p=m&&l?s(f,r):g&&"function"==typeof f?s(Function.call,f):f,b&&a(b,c,f,t&u.U),y[c]!=f&&o(y,c,p),g&&x[c]!=f&&(x[c]=f)};r.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e,n){var r=n(101)("wks"),i=n(102),o=n(21).Symbol,a="function"==typeof o;(t.exports=function(t){return r[t]||(r[t]=a&&o[t]||(a?o:i)("Symbol."+t))}).store=r},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){var r=n(24),i=n(46);t.exports=n(18)?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(17);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){t.exports=!n(14)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,n){"use strict";n.d(e,"d",function(){return r}),n.d(e,"a",function(){return o}),n.d(e,"i",function(){return a}),n.d(e,"f",function(){return u}),n.d(e,"g",function(){return c}),n.d(e,"h",function(){return l}),n.d(e,"b",function(){return f}),n.d(e,"e",function(){return p}),n.d(e,"k",function(){return h}),n.d(e,"l",function(){return d}),n.d(e,"c",function(){return v}),n.d(e,"j",function(){return g});const r=/#.*$/,i=/\.(md|html)$/,o=/\/$/,a=/^(https?:|mailto:|tel:)/;function s(t){return decodeURI(t).replace(r,"").replace(i,"")}function u(t){return a.test(t)}function c(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function f(t){if(u(t))return t;const e=t.match(r),n=e?e[0]:"",i=s(t);return o.test(i)?t:i+".html"+n}function p(t,e){const n=t.hash,i=function(t){const e=t.match(r);if(e)return e[0]}(e);return(!i||n===i)&&s(t.path)===s(e)}function h(t,e,n){if(u(e))return{type:"external",path:e};n&&(e=function(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const o=t.replace(/^\//,"").split("/");for(let t=0;t({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}(t);const s=a.sidebar||o.sidebar;if(s){const{base:t,config:n}=function(t,e){if(Array.isArray(e))return{base:"/",config:e};for(const r in e)if(0===(n=t,/(\.html|\/)$/.test(n)?n:n+"/").indexOf(encodeURI(r)))return{base:r,config:e[r]};var n;return{}}(e,s);return n?n.map(e=>(function t(e,n,r,i=1){if("string"==typeof e)return h(n,e,r);if(Array.isArray(e))return Object.assign(h(n,e[0],r),{title:e[1]});{i>3&&console.error("[vuepress] detected a too deep nested sidebar group.");const o=e.children||[];return 0===o.length&&e.path?Object.assign(h(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,children:o.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}})(e,i,t)):[]}return[]}function v(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e){var n=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(t,e){var n=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=n)},function(t,e){t.exports={}},function(t,e,n){var r=n(16),i=n(79),o=n(81),a=Object.defineProperty;e.f=n(18)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(12),i=n(15),o=n(26),a=n(45)("src"),s=n(115),u=(""+s).split("toString");n(32).inspectSource=function(t){return s.call(t)},(t.exports=function(t,e,n,s){var c="function"==typeof n;c&&(o(n,"name")||i(n,"name",e)),t[e]!==n&&(c&&(o(n,a)||i(n,a,t[e]?""+t[e]:u.join(String(e)))),t===r?t[e]=n:s?t[e]?t[e]=n:i(t,e,n):(delete t[e],i(t,e,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||s.call(this)})},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(40),i=n(58);t.exports=n(42)?function(t,e,n){return r.f(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},,,,,function(t,e){var n=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=n)},function(t,e,n){var r=n(82),i=n(20);t.exports=function(t){return r(i(t))}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e,n){var r=n(36),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e,n){var r=n(20);t.exports=function(t){return Object(r(t))}},function(t,e,n){"use strict";var r=n(11),i=n(52)(3);r(r.P+r.F*!n(39)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},function(t,e,n){"use strict";var r=n(14);t.exports=function(t,e){return!!t&&r(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,n){var r=n(41),i=n(152),o=n(153),a=Object.defineProperty;e.f=n(42)?Object.defineProperty:function(t,e,n){if(r(t),e=o(e,!0),r(n),i)try{return a(t,e,n)}catch(t){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(t[e]=n.value),t}},function(t,e,n){var r=n(57);t.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},function(t,e,n){t.exports=!n(95)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},function(t,e,n){var r=n(32),i=n(12),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n(78)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){t.exports={}},function(t,e,n){var r=n(116);t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(83),i=n(51);t.exports=Object.keys||function(t){return r(t,i)}},function(t,e,n){var r=n(44)("keys"),i=n(45);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var r=n(48),i=n(82),o=n(37),a=n(35),s=n(124);t.exports=function(t,e){var n=1==t,u=2==t,c=3==t,l=4==t,f=6==t,p=5==t||f,h=e||s;return function(e,s,d){for(var v,g,m=o(e),b=i(m),y=r(s,d,3),x=a(b.length),_=0,k=n?h(e,x):u?h(e,0):void 0;x>_;_++)if((p||_ in b)&&(g=y(v=b[_],_,m),t))if(n)k[_]=g;else if(g)switch(t){case 3:return!0;case 5:return v;case 6:return _;case 2:k.push(v)}else if(l)return!1;return f?-1:c||l?l:k}}},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){var r=n(21),i=n(22),o=n(94),a=n(27),s=n(43),u=function(t,e,n){var c,l,f,p=t&u.F,h=t&u.G,d=t&u.S,v=t&u.P,g=t&u.B,m=t&u.W,b=h?i:i[e]||(i[e]={}),y=b.prototype,x=h?r:d?r[e]:(r[e]||{}).prototype;for(c in h&&(n=e),n)(l=!p&&x&&void 0!==x[c])&&s(b,c)||(f=l?x[c]:n[c],b[c]=h&&"function"!=typeof x[c]?n[c]:g&&l?o(f,r):m&&x[c]==f?function(t){var e=function(e,n,r){if(this instanceof t){switch(arguments.length){case 0:return new t;case 1:return new t(e);case 2:return new t(e,n)}return new t(e,n,r)}return t.apply(this,arguments)};return e.prototype=t.prototype,e}(f):v&&"function"==typeof f?o(Function.call,f):f,v&&((b.virtual||(b.virtual={}))[c]=f,t&u.R&&y&&!y[c]&&a(y,c,f)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(164),i=n(61);t.exports=function(t){return r(i(t))}},function(t,e,n){var r=n(101)("keys"),i=n(102);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},,,,,function(t,e,n){for(var r=n(111),i=n(49),o=n(25),a=n(12),s=n(15),u=n(47),c=n(10),l=c("iterator"),f=c("toStringTag"),p=u.Array,h={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(h),v=0;vu;)r(s,n=e[u++])&&(~o(c,n)||c.push(n));return c}},function(t,e,n){var r=n(33),i=n(35),o=n(120);t.exports=function(t){return function(e,n,a){var s,u=r(e),c=i(u.length),l=o(a,c);if(t&&n!=n){for(;c>l;)if((s=u[l++])!=s)return!0}else for(;c>l;l++)if((t||l in u)&&u[l]===n)return t||l||0;return!t&&-1}}},function(t,e,n){var r=n(24).f,i=n(26),o=n(10)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},function(t,e,n){var r=n(37),i=n(49);n(123)("keys",function(){return function(t){return i(r(t))}})},function(t,e,n){var r=n(34);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){"use strict";var r=n(16),i=n(35),o=n(89),a=n(90);n(91)("match",1,function(t,e,n,s){return[function(n){var r=t(this),i=null==n?void 0:n[e];return void 0!==i?i.call(n,r):new RegExp(n)[e](String(r))},function(t){var e=s(n,t,this);if(e.done)return e.value;var u=r(t),c=String(this);if(!u.global)return a(u,c);var l=u.unicode;u.lastIndex=0;for(var f,p=[],h=0;null!==(f=a(u,c));){var d=String(f[0]);p[h]=d,""===d&&(u.lastIndex=o(c,i(u.lastIndex),l)),h++}return 0===h?null:p}]})},function(t,e,n){"use strict";var r=n(129)(!0);t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},function(t,e,n){"use strict";var r=n(130),i=RegExp.prototype.exec;t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var o=n.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,n){"use strict";n(131);var r=n(25),i=n(15),o=n(14),a=n(20),s=n(10),u=n(92),c=s("species"),l=!o(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),f=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var n="ab".split(t);return 2===n.length&&"a"===n[0]&&"b"===n[1]}();t.exports=function(t,e,n){var p=s(t),h=!o(function(){var e={};return e[p]=function(){return 7},7!=""[t](e)}),d=h?!o(function(){var e=!1,n=/a/;return n.exec=function(){return e=!0,null},"split"===t&&(n.constructor={},n.constructor[c]=function(){return n}),n[p](""),!e}):void 0;if(!h||!d||"replace"===t&&!l||"split"===t&&!f){var v=/./[p],g=n(a,p,""[t],function(t,e,n,r,i){return e.exec===u?h&&!i?{done:!0,value:v.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}}),m=g[0],b=g[1];r(String.prototype,t,m),i(RegExp.prototype,p,2==e?function(t,e){return b.call(t,this,e)}:function(t){return b.call(t,this)})}}},function(t,e,n){"use strict";var r,i,o=n(93),a=RegExp.prototype.exec,s=String.prototype.replace,u=a,c=(r=/a/,i=/b*/g,a.call(r,"a"),a.call(i,"a"),0!==r.lastIndex||0!==i.lastIndex),l=void 0!==/()??/.exec("")[1];(c||l)&&(u=function(t){var e,n,r,i,u=this;return l&&(n=new RegExp("^"+u.source+"$(?!\\s)",o.call(u))),c&&(e=u.lastIndex),r=a.call(u,t),c&&r&&(u.lastIndex=u.global?r.index+r[0].length:e),l&&r&&r.length>1&&s.call(r[0],n,function(){for(i=1;i=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){"use strict";var r=n(99),i=n(56),o=n(158),a=n(27),s=n(23),u=n(159),c=n(104),l=n(168),f=n(13)("iterator"),p=!([].keys&&"next"in[].keys()),h=function(){return this};t.exports=function(t,e,n,d,v,g,m){u(n,e,d);var b,y,x,_=function(t){if(!p&&t in O)return O[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},k=e+" Iterator",S="values"==v,w=!1,O=t.prototype,C=O[f]||O["@@iterator"]||v&&O[v],L=C||_(v),$=v?S?_("entries"):L:void 0,j="Array"==e&&O.entries||C;if(j&&(x=l(j.call(new t)))!==Object.prototype&&x.next&&(c(x,k,!0),r||"function"==typeof x[f]||a(x,f,h)),S&&C&&"values"!==C.name&&(w=!0,L=function(){return C.call(this)}),r&&!m||!p&&!w&&O[f]||a(O,f,L),s[e]=L,s[k]=h,v)if(b={values:S?L:_("values"),keys:g?L:_("keys"),entries:$},m)for(y in b)y in O||o(O,y,b[y]);else i(i.P+i.F*(p||w),e,b);return b}},function(t,e){t.exports=!0},function(t,e,n){var r=n(60),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){var r=n(22),i=n(21),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n(99)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var r=n(40).f,i=n(43),o=n(13)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,o)&&r(t,o,{configurable:!0,value:e})}},function(t,e,n){var r=n(61);t.exports=function(t){return Object(r(t))}},function(t,e,n){var r=n(59),i=n(13)("toStringTag"),o="Arguments"==r(function(){return arguments}());t.exports=function(t){var e,n,a;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?n:o?r(e):"Object"==(a=r(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,n){"use strict";var r=n(16),i=n(37),o=n(35),a=n(36),s=n(89),u=n(90),c=Math.max,l=Math.min,f=Math.floor,p=/\$([$&`']|\d\d?|<[^>]*>)/g,h=/\$([$&`']|\d\d?)/g;n(91)("replace",2,function(t,e,n,d){return[function(r,i){var o=t(this),a=null==r?void 0:r[e];return void 0!==a?a.call(r,o,i):n.call(String(o),r,i)},function(t,e){var i=d(n,t,this,e);if(i.done)return i.value;var f=r(t),p=String(this),h="function"==typeof e;h||(e=String(e));var g=f.global;if(g){var m=f.unicode;f.lastIndex=0}for(var b=[];;){var y=u(f,p);if(null===y)break;if(b.push(y),!g)break;""===String(y[0])&&(f.lastIndex=s(p,o(f.lastIndex),m))}for(var x,_="",k=0,S=0;S=k&&(_+=p.slice(k,O)+A,k=O+w.length)}return _+p.slice(k)}];function v(t,e,r,o,a,s){var u=r+t.length,c=o.length,l=h;return void 0!==a&&(a=i(a),l=p),n.call(s,l,function(n,i){var s;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,r);case"'":return e.slice(u);case"<":s=a[i.slice(1,-1)];break;default:var l=+i;if(0===l)return n;if(l>c){var p=f(l/10);return 0===p?n:p<=c?void 0===o[p-1]?i.charAt(1):o[p-1]+i.charAt(1):n}s=o[l-1]}return void 0===s?"":s})}})},function(t,e,n){"use strict";var r=n(11),i=n(52)(1);r(r.P+r.F*!n(39)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},function(t,e,n){"use strict";n.r(e);n(38);var r=n(19),i={name:"SidebarGroup",props:["item","open","collapsable","depth"],components:{DropdownTransition:n(110).a},beforeCreate:function(){this.$options.components.SidebarLinks=n(109).default},methods:{isActive:r.e}},o=(n(187),n(0)),a=Object(o.a)(i,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?n("router-link",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):n("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),n("DropdownTransition",[t.open||!t.collapsable?n("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,sidebarDepth:t.item.sidebarDepth,depth:t.depth+1}}):t._e()],1)],1)},[],!1,null,null,null).exports;n(108);function s(t,e,n,r){return t("router-link",{props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}},n)}function u(t,e,n,i,o){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1;return!e||a>o?null:t("ul",{class:"sidebar-sub-headers"},e.map(function(e){var c=Object(r.e)(i,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[s(t,n+"#"+e.slug,e.title,c),u(t,e.children,n,i,o,a+1)])}))}var c={functional:!0,props:["item","sidebarDepth"],render:function(t,e){var n=e.parent,i=n.$page,o=(n.$site,n.$route),a=n.$themeConfig,c=n.$themeLocaleConfig,l=e.props,f=l.item,p=l.sidebarDepth,h=Object(r.e)(o,f.path),d="auto"===f.type?h||f.children.some(function(t){return Object(r.e)(o,f.basePath+"#"+t.slug)}):h,v="external"===f.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,f.path,f.title||f.path):s(t,f.path,f.title||f.path,d),g=i.frontmatter.sidebarDepth||p||c.sidebarDepth||a.sidebarDepth,m=null==g?1:g,b=c.displayAllHeaders||a.displayAllHeaders;return"auto"===f.type?[v,u(t,f.children,f.basePath,o,m)]:(d||b)&&f.headers&&!r.d.test(f.path)?[v,u(t,Object(r.c)(f.headers),f.path,o,m)]:v}};n(188);var l={name:"SidebarLinks",components:{SidebarGroup:a,SidebarLink:Object(o.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth"],data:function(){return{openGroupIndex:0}},created:function(){this.refreshIndex()},watch:{$route:function(){this.refreshIndex()}},methods:{refreshIndex:function(){var t=function(t,e){for(var n=0;n-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(r.e)(this.$route,t.regularPath)}}},f=Object(o.a)(l,function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,function(e,r){return n("li",{key:r},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:r===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(r)}}}):n("SidebarLink",{attrs:{sidebarDepth:t.sidebarDepth,item:e}})],1)}),0):t._e()},[],!1,null,null,null);e.default=f.exports},function(t,e,n){"use strict";var r={name:"DropdownTransition",methods:{setHeight:function(t){t.style.height=t.scrollHeight+"px"},unsetHeight:function(t){t.style.height=""}}},i=(n(182),n(0)),o=Object(i.a)(r,function(){var t=this.$createElement;return(this._self._c||t)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)},[],!1,null,null,null);e.a=o.exports},function(t,e,n){"use strict";var r=n(112),i=n(113),o=n(47),a=n(33);t.exports=n(114)(Array,"Array",function(t,e){this._t=a(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(t,e,n){var r=n(10)("unscopables"),i=Array.prototype;null==i[r]&&n(15)(i,r,{}),t.exports=function(t){i[r][t]=!0}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){"use strict";var r=n(78),i=n(11),o=n(25),a=n(15),s=n(47),u=n(117),c=n(85),l=n(122),f=n(10)("iterator"),p=!([].keys&&"next"in[].keys()),h=function(){return this};t.exports=function(t,e,n,d,v,g,m){u(n,e,d);var b,y,x,_=function(t){if(!p&&t in O)return O[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},k=e+" Iterator",S="values"==v,w=!1,O=t.prototype,C=O[f]||O["@@iterator"]||v&&O[v],L=C||_(v),$=v?S?_("entries"):L:void 0,j="Array"==e&&O.entries||C;if(j&&(x=l(j.call(new t)))!==Object.prototype&&x.next&&(c(x,k,!0),r||"function"==typeof x[f]||a(x,f,h)),S&&C&&"values"!==C.name&&(w=!0,L=function(){return C.call(this)}),r&&!m||!p&&!w&&O[f]||a(O,f,L),s[e]=L,s[k]=h,v)if(b={values:S?L:_("values"),keys:g?L:_("keys"),entries:$},m)for(y in b)y in O||o(O,y,b[y]);else i(i.P+i.F*(p||w),e,b);return b}},function(t,e,n){t.exports=n(44)("native-function-to-string",Function.toString)},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){"use strict";var r=n(118),i=n(46),o=n(85),a={};n(15)(a,n(10)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(a,{next:i(1,n)}),o(t,e+" Iterator")}},function(t,e,n){var r=n(16),i=n(119),o=n(51),a=n(50)("IE_PROTO"),s=function(){},u=function(){var t,e=n(80)("iframe"),r=o.length;for(e.style.display="none",n(121).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write("
+