diff --git a/.vuepress/theme/layouts/Layout.vue b/.vuepress/theme/layouts/Layout.vue index dde3cf2..c2d9d38 100644 --- a/.vuepress/theme/layouts/Layout.vue +++ b/.vuepress/theme/layouts/Layout.vue @@ -19,7 +19,7 @@ --> -
Copyright © 2019-present Huanqing Shao
+
Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
diff --git a/README.md b/README.md index f3e5a33..d93c493 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,6 @@ features: details: 展现层/网关层/服务层/持久层/中间件层/监控层 - title: 上下文关联监控 details: 资源层监控/中间件层监控/链路层监控 -footer: Copyright © 2019-present Huanqing Shao +footer: Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2 --- diff --git a/docs/404.html b/docs/404.html index d83598f..e9bd49a 100644 --- a/docs/404.html +++ b/docs/404.html @@ -7,11 +7,11 @@ - - + + -

404

How did we get here?
Take me home.
- +

404

Looks like we've got some broken links.
Take me home.
+ diff --git a/docs/assets/css/0.styles.a88308ce.css b/docs/assets/css/0.styles.10e5d9a9.css similarity index 99% rename from docs/assets/css/0.styles.a88308ce.css rename to docs/assets/css/0.styles.10e5d9a9.css index 32138e9..dc09a35 100644 --- a/docs/assets/css/0.styles.a88308ce.css +++ b/docs/assets/css/0.styles.10e5d9a9.css @@ -1 +1 @@ -#nprogress{pointer-events:none}#nprogress .bar{background:#007af5;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 #007af5,0 0 5px #007af5;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:#007af5 transparent transparent #007af5;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)}}.go-to-top[data-v-67a9666a]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#007af5;z-index:1}.go-to-top[data-v-67a9666a]:hover{color:#45a2ff}@media (max-width:959px){.go-to-top[data-v-67a9666a]{display:none}}.fade-enter-active[data-v-67a9666a],.fade-leave-active[data-v-67a9666a]{transition:opacity .3s}.fade-enter[data-v-67a9666a],.fade-leave-to[data-v-67a9666a]{opacity:0}.reading-progress[data-v-7681808f]{position:fixed;z-index:1000;background:transparent;overflow:hidden}.reading-progress .progress[data-v-7681808f]{width:100%;height:100%;background:#007af5;background-image:none;transition:transform .2s ease-out}.top[data-v-7681808f]{top:0;left:0;right:0;width:100%;height:3px}.bottom[data-v-7681808f]{bottom:0;left:0;right:0;width:100%;height:3px}.left[data-v-7681808f]{left:0;top:0;bottom:0;width:3px;height:100%}.right[data-v-7681808f]{right:0;top:0;bottom:0;width:3px;height:100%}.el-tabs__header{padding:0;position:relative;margin:15px 0}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#3eaf7c;z-index:1;transition:transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;transition:all .15s}.el-tabs__new-tab .el-icon-plus{transform:scale(.8)}.el-tabs__new-tab:hover{color:#3eaf7c}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399;width:20px;text-align:center}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus.is-active.is-focus:not(:active){box-shadow:inset 0 0 2px 2px #3eaf7c;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#3eaf7c}.el-tabs__item:hover{color:#3eaf7c;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);margin-top:15px}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#3eaf7c;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#3eaf7c}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border:1px solid #e4e7ed;border-bottom:none;border-left:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:none;border-top:1px solid #e4e7ed;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:none;border-top:1px solid #e4e7ed;border-left:1px solid #fff}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}.icon.outbound{color:#aaa;vertical-align:middle;top:-1px}.icon.outbound,.search-box{display:inline-block;position:relative}.search-box{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:#007af5}.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:#007af5}@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:#007af5}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #007af5;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:#007af5}.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 #0b85ff}}.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:#007af5;border-left-color:#007af5}.sidebar-heading.clickable:hover{color:#007af5}.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:#007af5}a.sidebar-link.active{font-weight:600;color:#007af5;border-left-color:#007af5}.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}.bottom-description[data-v-61e379b0]{text-align:center;font-size:.8rem;color:#909399;margin-top:2rem}.side-nav-item[data-v-61e379b0]{margin-bottom:-2px;margin-left:15px;display:inline-block;line-height:1.4rem;white-space:nowrap;font-size:1rem;cursor:pointer}.side-nav-item a[data-v-61e379b0]{color:#2c3e50}.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:#007af5}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#606266;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:#606266;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:#606266}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:#007af5}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}}.content__default{max-width:1000px!important}p img{border:1px solid #d7dae2}.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:#007af5;vertical-align:top;margin-left:.5rem;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #006edd}.home .hero .action-button:hover{background-color:#1187ff;color:#fff}.home .hero .action-button2{color:#007af5;background-color:#fff;border:1px solid #007af5}.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}}.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 +#nprogress{pointer-events:none}#nprogress .bar{background:#007af5;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 #007af5,0 0 5px #007af5;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:#007af5 transparent transparent #007af5;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)}}.go-to-top[data-v-67a9666a]{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;color:#007af5;z-index:1}.go-to-top[data-v-67a9666a]:hover{color:#45a2ff}@media (max-width:959px){.go-to-top[data-v-67a9666a]{display:none}}.fade-enter-active[data-v-67a9666a],.fade-leave-active[data-v-67a9666a]{transition:opacity .3s}.fade-enter[data-v-67a9666a],.fade-leave-to[data-v-67a9666a]{opacity:0}.reading-progress[data-v-7681808f]{position:fixed;z-index:1000;background:transparent;overflow:hidden}.reading-progress .progress[data-v-7681808f]{width:100%;height:100%;background:#007af5;background-image:none;transition:transform .2s ease-out}.top[data-v-7681808f]{top:0;left:0;right:0;width:100%;height:3px}.bottom[data-v-7681808f]{bottom:0;left:0;right:0;width:100%;height:3px}.left[data-v-7681808f]{left:0;top:0;bottom:0;width:3px;height:100%}.right[data-v-7681808f]{right:0;top:0;bottom:0;width:3px;height:100%}.el-tabs__header{padding:0;position:relative;margin:15px 0}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#3eaf7c;z-index:1;transition:transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;transition:all .15s}.el-tabs__new-tab .el-icon-plus{transform:scale(.8)}.el-tabs__new-tab:hover{color:#3eaf7c}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap:after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399;width:20px;text-align:center}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus.is-active.is-focus:not(:active){box-shadow:inset 0 0 2px 2px #3eaf7c;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#3eaf7c}.el-tabs__item:hover{color:#3eaf7c;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);margin-top:15px}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#3eaf7c;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#3eaf7c}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--left .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card .el-tabs__item:last-child,.el-tabs--top.el-tabs--card .el-tabs__item:last-child,.el-tabs--top .el-tabs--left .el-tabs__item:last-child,.el-tabs--top .el-tabs--right .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border:1px solid #e4e7ed;border-bottom:none;border-left:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:none;border-top:1px solid #e4e7ed;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:none;border-top:1px solid #e4e7ed;border-left:1px solid #fff}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translateX(-100%)}to{opacity:1;transform-origin:0 0;transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;transform:translateX(0);opacity:1}to{transform-origin:0 0;transform:translateX(-100%);opacity:0}}.icon.outbound{color:#aaa;vertical-align:middle;top:-1px}.icon.outbound,.search-box{display:inline-block;position:relative}.search-box{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:#007af5}.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:#007af5}@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:#007af5}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #007af5;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:#007af5}.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 #0b85ff}}.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:#007af5;border-left-color:#007af5}.sidebar-heading.clickable:hover{color:#007af5}.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:#007af5}a.sidebar-link.active{font-weight:600;color:#007af5;border-left-color:#007af5}.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}.bottom-description[data-v-73c41bb9]{text-align:center;font-size:.8rem;color:#909399;margin-top:2rem}.side-nav-item[data-v-73c41bb9]{margin-bottom:-2px;margin-left:15px;display:inline-block;line-height:1.4rem;white-space:nowrap;font-size:1rem;cursor:pointer}.side-nav-item a[data-v-73c41bb9]{color:#2c3e50}.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:#007af5}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#606266;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:#606266;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:#606266}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:#007af5}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}}.content__default{max-width:1000px!important}p img{border:1px solid #d7dae2}.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:#007af5;vertical-align:top;margin-left:.5rem;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #006edd}.home .hero .action-button:hover{background-color:#1187ff;color:#fff}.home .hero .action-button2{color:#007af5;background-color:#fff;border:1px solid #007af5}.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}}.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/assets/js/10.48622ecc.js b/docs/assets/js/10.95ba08b2.js similarity index 99% rename from docs/assets/js/10.48622ecc.js rename to docs/assets/js/10.95ba08b2.js index cafa0a0..0405d2e 100644 --- a/docs/assets/js/10.48622ecc.js +++ b/docs/assets/js/10.95ba08b2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{315:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223454676.b545b43f.png"},316:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223551308.ed106a2a.png"},317:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223605920.3e762b29.png"},318:function(t,e,a){t.exports=a.p+"assets/img/image-20190722231246540.ebf13194.png"},319:function(t,e,a){t.exports=a.p+"assets/img/image-20190722224029397.abc44209.png"},320:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225347491.984fabae.png"},321:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225454029.73400267.png"},322:function(t,e,a){t.exports=a.p+"assets/img/image-20190722230511430.ed459354.png"},384:function(t,e,a){"use strict";a.r(e);var r=a(0),s=Object(r.a)({},function(){var t=this,e=t.$createElement,r=t._self._c||e;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("h2",{attrs:{id:"创建-查看-编辑工作负载"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建-查看-编辑工作负载","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建/查看/编辑工作负载")]),t._v(" "),r("p",[t._v("请参考 "),r("a",{attrs:{href:"/guide/example/busybox"}},[t._v("创建 busybox")])]),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("伸缩操作,通过调整工作负载的 replicas 大小,来控制该工作负载运行容器组的数量。")]),t._v(" "),r("ul",[r("li",[t._v("假设您已进入工作负载查看界面,如下图所示:")])]),t._v(" "),r("p",[r("img",{attrs:{src:a(315),alt:"image-20190722223454676"}})]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("伸缩")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("填写表单")]),t._v(" "),r("p",[t._v("副本数: 目标容器组数量")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(316),alt:"image-20190722223551308"}})]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("确定")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("等待,知道伸缩操作执行完毕。")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(317),alt:"image-20190722223605920"}})]),t._v(" "),r("h2",{attrs:{id:"删除容器组"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#删除容器组","aria-hidden":"true"}},[t._v("#")]),t._v(" 删除容器组")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("删除容器组")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("可删除该容器组。")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("容器组被删除之后,Kubernetes Workload Controller 将要重新创建一个容器组,用于替代被删除的容器组;被删除容器组原有的状态将丢失,新容器组重新从 镜像中加载启动;")])]),t._v(" "),r("li",[r("p",[t._v("Kuboard 的工作负载编辑器,默认将容器组的 imagePullPolicy 设置为 Alwarys,因此,每次在容器组启动的时候,Kubenetes 都会尝试从镜像仓库中抓取最新镜像;")])])])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(318),alt:"image-20190722231246540"}})]),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("在诊断工作负载的问题时,Kuboard主要提供三种手段:")]),t._v(" "),r("h3",{attrs:{id:"事件:-kubernetes-部署相关问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#事件:-kubernetes-部署相关问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 事件: Kubernetes 部署相关问题")]),t._v(" "),r("p",[t._v("如下图所示,图中提示")]),t._v(" "),r("blockquote",[r("p",[t._v("错误内容:Error: ErrImagePull 该容器组抓取镜像失败")]),t._v(" "),r("p",[t._v("失败原因:pull access denied for busy-box, repository does not exist or may require 'docker login'")])]),t._v(" "),r("p",[t._v("对于这样的错误,需要技术人员检查:")]),t._v(" "),r("ul",[r("li",[t._v("容器所在节点与镜像仓库之间的网络连通性")]),t._v(" "),r("li",[t._v("容器镜像拼写是否正确")]),t._v(" "),r("li",[t._v("如果为私有仓库,是否在工作负载编辑器中正确配置了 docker 仓库用户名密码")])]),t._v(" "),r("p",[t._v("!> Kuboard 监听了 Kubernetes 集群的事件变化,您无需刷新页面,即可在工作负载编辑器的容器组界面区域看到该容器相关的最新事件。")]),t._v(" "),r("p",[t._v("通过 Kubernetes 事件所指示出来的问题,通常是集群本身配置的问题,或者是创建工作负载时的参数填写问题,解决这样的问题需要的是 Kubernetes 集群相关的知识和背景,"),r("strong",[t._v("通常运维人员可以独立解决此类问题")]),t._v("。")]),t._v(" "),r("p",[r("img",{attrs:{src:a(319),alt:"image-20190722224029397"}})]),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("如下图所示,假设您已进入工作负载查看界面:")]),t._v(" "),r("p",[r("img",{attrs:{src:a(320),alt:"image-20190722225347491"}})]),t._v(" "),r("ul",[r("li",[t._v("点击其中的 "),r("em",[r("strong",[t._v("日志")])]),t._v(" 按钮")])]),t._v(" "),r("p",[t._v("可查看该容器的运行时日志,如下图所示:")]),t._v(" "),r("p",[r("img",{attrs:{src:a(321),alt:"image-20190722225454029"}})]),t._v(" "),r("p",[r("strong",[t._v("容器运行时问题定位及解决")])]),t._v(" "),r("p",[t._v("日志所指示出来的错误,可能有两类原因:")]),t._v(" "),r("ul",[r("li",[t._v("将其容器部署到 Kubernetes 时,参数配置填写错误")]),t._v(" "),r("li",[t._v("容器内应用程序自身的 BUG")])]),t._v(" "),r("p",[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("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("终端")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("可进入该容器的交互式命令界面")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(322),alt:"image-20190722230511430"}})]),t._v(" "),r("p",[r("strong",[t._v("适用场景")])]),t._v(" "),r("p",[t._v("在交互式终端里,"),r("strong",[t._v("运维人员")]),t._v("可以:")]),t._v(" "),r("ul",[r("li",[t._v("通过 ping / curl 等命令,测试网络连通性,测试 Kubernetes 的服务 DNS 解析是否正确")]),t._v(" "),r("li",[t._v("通过 export 命令检查该容器的环境变量的设置是否正确")])]),t._v(" "),r("p",[r("strong",[t._v("开发人员")]),t._v(" 可以:")]),t._v(" "),r("ul",[r("li",[t._v("通过 ls / cat / vi 等命令,查看该容器是否包含了最新的代码变更")]),t._v(" "),r("li",[t._v("通过 vi 等命令,临时对容器中的配置文件进行修改,并在验证这种修改有效之后,才将其正式更新到代码库")])])])},[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{315:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223454676.b545b43f.png"},316:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223551308.ed106a2a.png"},317:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223605920.3e762b29.png"},318:function(t,e,a){t.exports=a.p+"assets/img/image-20190722231246540.ebf13194.png"},319:function(t,e,a){t.exports=a.p+"assets/img/image-20190722224029397.abc44209.png"},320:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225347491.984fabae.png"},321:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225454029.73400267.png"},322:function(t,e,a){t.exports=a.p+"assets/img/image-20190722230511430.ed459354.png"},380:function(t,e,a){"use strict";a.r(e);var r=a(0),s=Object(r.a)({},function(){var t=this,e=t.$createElement,r=t._self._c||e;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("h2",{attrs:{id:"创建-查看-编辑工作负载"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建-查看-编辑工作负载","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建/查看/编辑工作负载")]),t._v(" "),r("p",[t._v("请参考 "),r("a",{attrs:{href:"/guide/example/busybox"}},[t._v("创建 busybox")])]),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("伸缩操作,通过调整工作负载的 replicas 大小,来控制该工作负载运行容器组的数量。")]),t._v(" "),r("ul",[r("li",[t._v("假设您已进入工作负载查看界面,如下图所示:")])]),t._v(" "),r("p",[r("img",{attrs:{src:a(315),alt:"image-20190722223454676"}})]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("伸缩")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("填写表单")]),t._v(" "),r("p",[t._v("副本数: 目标容器组数量")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(316),alt:"image-20190722223551308"}})]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("确定")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("等待,知道伸缩操作执行完毕。")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(317),alt:"image-20190722223605920"}})]),t._v(" "),r("h2",{attrs:{id:"删除容器组"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#删除容器组","aria-hidden":"true"}},[t._v("#")]),t._v(" 删除容器组")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("删除容器组")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("可删除该容器组。")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("容器组被删除之后,Kubernetes Workload Controller 将要重新创建一个容器组,用于替代被删除的容器组;被删除容器组原有的状态将丢失,新容器组重新从 镜像中加载启动;")])]),t._v(" "),r("li",[r("p",[t._v("Kuboard 的工作负载编辑器,默认将容器组的 imagePullPolicy 设置为 Alwarys,因此,每次在容器组启动的时候,Kubenetes 都会尝试从镜像仓库中抓取最新镜像;")])])])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(318),alt:"image-20190722231246540"}})]),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("在诊断工作负载的问题时,Kuboard主要提供三种手段:")]),t._v(" "),r("h3",{attrs:{id:"事件:-kubernetes-部署相关问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#事件:-kubernetes-部署相关问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 事件: Kubernetes 部署相关问题")]),t._v(" "),r("p",[t._v("如下图所示,图中提示")]),t._v(" "),r("blockquote",[r("p",[t._v("错误内容:Error: ErrImagePull 该容器组抓取镜像失败")]),t._v(" "),r("p",[t._v("失败原因:pull access denied for busy-box, repository does not exist or may require 'docker login'")])]),t._v(" "),r("p",[t._v("对于这样的错误,需要技术人员检查:")]),t._v(" "),r("ul",[r("li",[t._v("容器所在节点与镜像仓库之间的网络连通性")]),t._v(" "),r("li",[t._v("容器镜像拼写是否正确")]),t._v(" "),r("li",[t._v("如果为私有仓库,是否在工作负载编辑器中正确配置了 docker 仓库用户名密码")])]),t._v(" "),r("p",[t._v("!> Kuboard 监听了 Kubernetes 集群的事件变化,您无需刷新页面,即可在工作负载编辑器的容器组界面区域看到该容器相关的最新事件。")]),t._v(" "),r("p",[t._v("通过 Kubernetes 事件所指示出来的问题,通常是集群本身配置的问题,或者是创建工作负载时的参数填写问题,解决这样的问题需要的是 Kubernetes 集群相关的知识和背景,"),r("strong",[t._v("通常运维人员可以独立解决此类问题")]),t._v("。")]),t._v(" "),r("p",[r("img",{attrs:{src:a(319),alt:"image-20190722224029397"}})]),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("如下图所示,假设您已进入工作负载查看界面:")]),t._v(" "),r("p",[r("img",{attrs:{src:a(320),alt:"image-20190722225347491"}})]),t._v(" "),r("ul",[r("li",[t._v("点击其中的 "),r("em",[r("strong",[t._v("日志")])]),t._v(" 按钮")])]),t._v(" "),r("p",[t._v("可查看该容器的运行时日志,如下图所示:")]),t._v(" "),r("p",[r("img",{attrs:{src:a(321),alt:"image-20190722225454029"}})]),t._v(" "),r("p",[r("strong",[t._v("容器运行时问题定位及解决")])]),t._v(" "),r("p",[t._v("日志所指示出来的错误,可能有两类原因:")]),t._v(" "),r("ul",[r("li",[t._v("将其容器部署到 Kubernetes 时,参数配置填写错误")]),t._v(" "),r("li",[t._v("容器内应用程序自身的 BUG")])]),t._v(" "),r("p",[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("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("终端")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("可进入该容器的交互式命令界面")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(322),alt:"image-20190722230511430"}})]),t._v(" "),r("p",[r("strong",[t._v("适用场景")])]),t._v(" "),r("p",[t._v("在交互式终端里,"),r("strong",[t._v("运维人员")]),t._v("可以:")]),t._v(" "),r("ul",[r("li",[t._v("通过 ping / curl 等命令,测试网络连通性,测试 Kubernetes 的服务 DNS 解析是否正确")]),t._v(" "),r("li",[t._v("通过 export 命令检查该容器的环境变量的设置是否正确")])]),t._v(" "),r("p",[r("strong",[t._v("开发人员")]),t._v(" 可以:")]),t._v(" "),r("ul",[r("li",[t._v("通过 ls / cat / vi 等命令,查看该容器是否包含了最新的代码变更")]),t._v(" "),r("li",[t._v("通过 vi 等命令,临时对容器中的配置文件进行修改,并在验证这种修改有效之后,才将其正式更新到代码库")])])])},[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/11.c8285acb.js b/docs/assets/js/11.32fc5ebf.js similarity index 95% rename from docs/assets/js/11.c8285acb.js rename to docs/assets/js/11.32fc5ebf.js index 9b6faa6..ac6a930 100644 --- a/docs/assets/js/11.c8285acb.js +++ b/docs/assets/js/11.32fc5ebf.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{141:function(t,e,i){},143:function(t,e,i){},208:function(t,e,i){t.exports=i.p+"assets/img/kuboard_qq.45e78dbf.png"},209:function(t,e,i){t.exports=i.p+"assets/img/image-20190723104717575.f44900d3.png"},210:function(t,e,i){"use strict";var s=i(141);i.n(s).a},212:function(t,e,i){"use strict";var s=i(143);i.n(s).a},353:function(t,e,i){"use strict";var s=i(161),a=i(208),n=i.n(a),r=i(209),o=i.n(r),l={name:"Sidebar",props:["items"],components:{SidebarLinks:s.default},data:function(){return{kuboard_qq_img:n.a,demo_img:o.a}}},c=(i(210),i(0)),v=Object(c.a)(l,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("aside",{staticClass:"sidebar"},[t._t("top"),t._v(" "),i("SidebarLinks",{attrs:{depth:0,items:t.items}}),t._v(" "),t._t("bottom"),t._v(" "),i("div",{staticStyle:{"text-align":"center","margin-top":"5vh"}},[i("strong",[t._v("在线体验")]),t._v(" "),i("div",[i("a",{attrs:{target:"_blank",href:"http://demo.eip.work/#/login?isReadOnly=true&token="+t.$site.themeConfig.kuboardToken}},[i("p",[i("img",{staticStyle:{width:"226px",height:"127px"},attrs:{src:t.demo_img}})])])]),t._v(" "),t._m(0),t._v(" "),i("strong",[t._v("在线提问")]),t._v(" "),i("p",[i("img",{attrs:{src:t.kuboard_qq_img}})])])],2)},[function(){var t=this.$createElement,e=this._self._c||t;return e("p",[e("strong",[e("a",{attrs:{href:"https://github.com/shaohq/kuboard-issues/issues",target:"_blank"}},[this._v("提交 BUG")])])])}],!1,null,null,null);e.a=v.exports},356:function(t,e,i){"use strict";i.r(e);i(38);var s={components:{ParentLayout:i(352).a},methods:{activeLinkStyle:function(t){return 0===this.$page.path.indexOf(t)?"border-bottom: 2px solid #0b85ff;":""}}},a=(i(212),i(0)),n=Object(a.a)(s,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("ParentLayout",[i("div",{attrs:{slot:"sidebar-top"},slot:"sidebar-top"},[i("div",{staticStyle:{"text-align":"center","margin-top":"20px"}},[i("div",{staticClass:"side-nav-item",style:t.activeLinkStyle("/overview/")+"margin-left: 0;"},[i("a",{staticClass:"nav-link",attrs:{href:"/overview/"}},[t._v("简介")])]),t._v(" "),i("div",{staticClass:"side-nav-item",style:t.activeLinkStyle("/install/")},[i("a",{staticClass:"nav-link router-link-exact-active router-link-active",attrs:{href:"/install/install-dashboard"}},[t._v("安装")])]),t._v(" "),i("div",{staticClass:"side-nav-item",style:t.activeLinkStyle("/guide/")},[i("a",{staticClass:"nav-link",attrs:{href:"/guide/"}},[t._v("使用")])]),t._v(" "),i("div",{staticClass:"side-nav-item",style:t.activeLinkStyle("/micro-service/")},[i("a",{staticClass:"nav-link",attrs:{href:"/micro-service/spring-cloud/"}},[t._v("微服务")])])])]),t._v(" "),i("div",{staticClass:"bottom-description",attrs:{slot:"page-bottom"},slot:"page-bottom"},[t._v("Copyright © 2019-present Huanqing Shao")])])},[],!1,null,"61e379b0",null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{141:function(t,e,i){},143:function(t,e,i){},208:function(t,e,i){t.exports=i.p+"assets/img/kuboard_qq.45e78dbf.png"},209:function(t,e,i){t.exports=i.p+"assets/img/image-20190723104717575.f44900d3.png"},210:function(t,e,i){"use strict";var s=i(141);i.n(s).a},212:function(t,e,i){"use strict";var s=i(143);i.n(s).a},353:function(t,e,i){"use strict";var s=i(161),a=i(208),n=i.n(a),r=i(209),o=i.n(r),l={name:"Sidebar",props:["items"],components:{SidebarLinks:s.default},data:function(){return{kuboard_qq_img:n.a,demo_img:o.a}}},c=(i(210),i(0)),v=Object(c.a)(l,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("aside",{staticClass:"sidebar"},[t._t("top"),t._v(" "),i("SidebarLinks",{attrs:{depth:0,items:t.items}}),t._v(" "),t._t("bottom"),t._v(" "),i("div",{staticStyle:{"text-align":"center","margin-top":"5vh"}},[i("strong",[t._v("在线体验")]),t._v(" "),i("div",[i("a",{attrs:{target:"_blank",href:"http://demo.eip.work/#/login?isReadOnly=true&token="+t.$site.themeConfig.kuboardToken}},[i("p",[i("img",{staticStyle:{width:"226px",height:"127px"},attrs:{src:t.demo_img}})])])]),t._v(" "),t._m(0),t._v(" "),i("strong",[t._v("在线提问")]),t._v(" "),i("p",[i("img",{attrs:{src:t.kuboard_qq_img}})])])],2)},[function(){var t=this.$createElement,e=this._self._c||t;return e("p",[e("strong",[e("a",{attrs:{href:"https://github.com/shaohq/kuboard-issues/issues",target:"_blank"}},[this._v("提交 BUG")])])])}],!1,null,null,null);e.a=v.exports},356:function(t,e,i){"use strict";i.r(e);i(38);var s={components:{ParentLayout:i(352).a},methods:{activeLinkStyle:function(t){return 0===this.$page.path.indexOf(t)?"border-bottom: 2px solid #0b85ff;":""}}},a=(i(212),i(0)),n=Object(a.a)(s,function(){var t=this,e=t.$createElement,i=t._self._c||e;return i("ParentLayout",[i("div",{attrs:{slot:"sidebar-top"},slot:"sidebar-top"},[i("div",{staticStyle:{"text-align":"center","margin-top":"20px"}},[i("div",{staticClass:"side-nav-item",style:t.activeLinkStyle("/overview/")+"margin-left: 0;"},[i("a",{staticClass:"nav-link",attrs:{href:"/overview/"}},[t._v("简介")])]),t._v(" "),i("div",{staticClass:"side-nav-item",style:t.activeLinkStyle("/install/")},[i("a",{staticClass:"nav-link router-link-exact-active router-link-active",attrs:{href:"/install/install-dashboard"}},[t._v("安装")])]),t._v(" "),i("div",{staticClass:"side-nav-item",style:t.activeLinkStyle("/guide/")},[i("a",{staticClass:"nav-link",attrs:{href:"/guide/"}},[t._v("使用")])]),t._v(" "),i("div",{staticClass:"side-nav-item",style:t.activeLinkStyle("/micro-service/")},[i("a",{staticClass:"nav-link",attrs:{href:"/micro-service/spring-cloud/"}},[t._v("微服务")])])])]),t._v(" "),i("div",{staticClass:"bottom-description",attrs:{slot:"page-bottom"},slot:"page-bottom"},[t._v("Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2")])])},[],!1,null,"73c41bb9",null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/12.e04a5176.js b/docs/assets/js/12.fd26a3df.js similarity index 98% rename from docs/assets/js/12.e04a5176.js rename to docs/assets/js/12.fd26a3df.js index 49739a3..4370f05 100644 --- a/docs/assets/js/12.e04a5176.js +++ b/docs/assets/js/12.fd26a3df.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{216:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105606081.bc471512.png"},217:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105644937.968b1660.png"},218:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105722999.5b6c9bae.png"},219:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105748435.1cb3ad0d.png"},220:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105809872.61add376.png"},221:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105830318.43414c56.png"},394: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(216),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(217),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(218),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(219),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(220),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(221),alt:"image-20190723105830318"}})])])},[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{216:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105606081.bc471512.png"},217:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105644937.968b1660.png"},218:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105722999.5b6c9bae.png"},219:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105748435.1cb3ad0d.png"},220:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105809872.61add376.png"},221:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105830318.43414c56.png"},377: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(216),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(217),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(218),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(219),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(220),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(221),alt:"image-20190723105830318"}})])])},[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/13.40b53244.js b/docs/assets/js/13.5ae79232.js similarity index 90% rename from docs/assets/js/13.40b53244.js rename to docs/assets/js/13.5ae79232.js index 72e9c7f..11a7206 100644 --- a/docs/assets/js/13.40b53244.js +++ b/docs/assets/js/13.5ae79232.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{305:function(a,t,s){a.exports=s.p+"assets/img/image-20190721085144545.25f25dda.png"},306:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090118542.46c31055.png"},307:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090753742.28d009f3.png"},308:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090840925.a5231632.png"},309:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090935511.80fb3864.png"},310:function(a,t,s){a.exports=s.p+"assets/img/image-20190721091005130.330e9f1d.png"},375: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(305),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(306),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(307),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(308),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(309),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(310),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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{301:function(a,t,s){a.exports=s.p+"assets/img/image-20190721085144545.25f25dda.png"},302:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090118542.46c31055.png"},303:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090753742.28d009f3.png"},304:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090840925.a5231632.png"},305:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090935511.80fb3864.png"},306:function(a,t,s){a.exports=s.p+"assets/img/image-20190721091005130.330e9f1d.png"},374: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(301),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(302),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(303),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(304),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(305),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(306),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/docs/assets/js/14.ae083438.js b/docs/assets/js/14.71b75ecf.js similarity index 96% rename from docs/assets/js/14.ae083438.js rename to docs/assets/js/14.71b75ecf.js index e7907c9..acf1bae 100644 --- a/docs/assets/js/14.ae083438.js +++ b/docs/assets/js/14.71b75ecf.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{326:function(e,A,t){e.exports=t.p+"assets/img/d7ce07842371eab180725bab5164ec17.d58ea9cc.png"},327:function(e,A){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAhCAYAAAC4JqlRAAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAB1WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KOXS2agAAAWdJREFUWAntk91NhUAUhC8WYB92YQEWYQhWYLQKW4AnOrAA+7AGn3khAXeu+ZIJOfws8mAim9x7dmfnzAy7cLmc4zyB/34CxdwBtG172/f9+3R/HMfPsiyfhDdN8zoMw12aflVV9TLlblmHAeq6fi6K4m1NIAW59qcgI1ww1mv1JiIk84cIn2IYuynYlDu3DgM4WeL8HGeO4d4QqwEwWqq/CXFIAIXbGyJ8CZPYR9K8l3Du4CoIpH6wSOuwE0AcYzcFg+M1DNB13aOTcucYbgkRXoEMEck1dz4BXAsM3mwAEbyRhtyKoWuBSSu8AkycCJZbMXathOklv47FAGJ440/Lsf+LV+BWPIljW+Y8gPeDqX9zAJFdROu1gZH3gdGbFUBNLoZIVDFyPpjzswOo2UVdjDlGzgODQ90VQM0ujpgqRr4P5jzmuwNIwE20xshxMO1HY/UzjJrAXNzn0T7YWc8TOE/gz53AN34Bn5aWTdpfAAAAAElFTkSuQmCC"},328:function(e,A){e.exports="data:image/png;base64,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"},329:function(e,A){e.exports="data:image/png;base64,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"},330:function(e,A,t){e.exports=t.p+"assets/img/03d07039d9fc80c0f692d6176f65936e.7af9fab5.gif"},331:function(e,A,t){e.exports=t.p+"assets/img/e7a273fcdc03d2417b354b60c253552f.19ae82d9.gif"},398:function(e,A,t){"use strict";t.r(A);var r=t(0),l=Object(r.a)({},function(){var e=this,A=e.$createElement,r=e._self._c||A;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"十分钟带你理解kubernetes核心概念"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#十分钟带你理解kubernetes核心概念","aria-hidden":"true"}},[e._v("#")]),e._v(" 十分钟带你理解Kubernetes核心概念")]),e._v(" "),r("blockquote",[r("p",[e._v("转载信息:")]),e._v(" "),r("p",[r("a",{attrs:{href:"http://www.dockone.io/article/932",target:"_blank",rel:"noopener noreferrer"}},[e._v("译文链接"),r("OutboundLink")],1),e._v(" 译者:崔婧雯")]),e._v(" "),r("p",[r("a",{attrs:{href:"http://omerio.com/2015/12/18/learn-the-kubernetes-key-concepts-in-10-minutes/",target:"_blank",rel:"noopener noreferrer"}},[e._v("原文链接"),r("OutboundLink")],1),e._v(" 作者:Omer Dawelbeit")])]),e._v(" "),r("p",[e._v("本文将会简单介绍Kubernetes的核心概念。因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍。相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概念。我们发现一些概念(比如Service)如果没有图表的辅助就很难全面地理解。在合适的地方我们也会提供Kubernetes文档的链接以便读者深入学习。")]),e._v(" "),r("h2",{attrs:{id:"什么是kubernetes?"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#什么是kubernetes?","aria-hidden":"true"}},[e._v("#")]),e._v(" 什么是Kubernetes?")]),e._v(" "),r("p",[e._v("Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。\n使用Kubernetes可以:")]),e._v(" "),r("ul",[r("li",[e._v("自动化容器的部署和复制")]),e._v(" "),r("li",[e._v("随时扩展或收缩容器规模")]),e._v(" "),r("li",[e._v("将容器组织成组,并且提供容器间的负载均衡")]),e._v(" "),r("li",[e._v("很容易地升级应用程序容器的新版本")]),e._v(" "),r("li",[e._v("提供容器弹性,如果容器失效就替换它,等等...")])]),e._v(" "),r("h2",{attrs:{id:"集群"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#集群","aria-hidden":"true"}},[e._v("#")]),e._v(" 集群")]),e._v(" "),r("p",[e._v("集群是一组节点,这些节点可以是物理服务器或者虚拟机,之上安装了Kubernetes平台。下图展示这样的集群。注意该图为了强调核心概念有所简化。这里可以看到一个典型的Kubernetes架构图。")]),e._v(" "),r("p",[r("img",{attrs:{src:t(326),alt:"1.png"}})]),e._v(" "),r("p",[e._v("上图可以看到如下组件,使用特别的图标表示Service和Label:")]),e._v(" "),r("ul",[r("li",[e._v("PodContainer(容器)")]),e._v(" "),r("li",[e._v("Label("),r("img",{attrs:{src:t(327),alt:"label"}}),e._v(")(标签)")]),e._v(" "),r("li",[e._v("Replication Controller(复制控制器)")]),e._v(" "),r("li",[e._v("Service("),r("img",{attrs:{src:t(328),alt:"enter image description here"}}),e._v(")(服务)")]),e._v(" "),r("li",[e._v("Node(节点)")]),e._v(" "),r("li",[e._v("Kubernetes Master(Kubernetes主节点)")])]),e._v(" "),r("h2",{attrs:{id:"pod"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pod","aria-hidden":"true"}},[e._v("#")]),e._v(" Pod")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Pod"),r("OutboundLink")],1),e._v("(上图绿色方框)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。你可能会有这些问题:")]),e._v(" "),r("ul",[r("li",[e._v("如果Pod是短暂的,那么我怎么才能持久化容器数据使其能够跨重启而存在呢? 是的,Kubernetes支持 "),r("em",[r("strong",[e._v("卷")])]),e._v(" 的概念,因此可以使用持久化的卷类型。")]),e._v(" "),r("li",[e._v("是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么?可以手动创建单个Pod,但是也可以使用Replication Controller使用Pod模板创建出多份拷贝,下文会详细介绍。")]),e._v(" "),r("li",[e._v("如果Pod是短暂的,那么重启时IP地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?这时可以使用Service,下文会详细介绍。")])]),e._v(" "),r("h2",{attrs:{id:"label"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#label","aria-hidden":"true"}},[e._v("#")]),e._v(" Label")]),e._v(" "),r("p",[e._v("正如图所示,一些Pod有Label("),r("img",{attrs:{src:t(329),alt:"enter image description here"}}),e._v(')。一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。比如,你可能创建了一个"tier"和“app”标签,通过Label('),r("strong",[e._v("tier=frontend, app=myapp")]),e._v(")来标记前端Pod容器,使用Label("),r("strong",[e._v("tier=backend, app=myapp")]),e._v(")标记后台Pod。然后可以使用 "),r("a",{attrs:{href:"https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Selectors"),r("OutboundLink")],1),e._v(" 选择带有特定Label的Pod,并且将Service或者Replication Controller应用到上面。")]),e._v(" "),r("h2",{attrs:{id:"replication-controller"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#replication-controller","aria-hidden":"true"}},[e._v("#")]),e._v(" Replication Controller")]),e._v(" "),r("p",[r("em",[e._v("是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么,能否将Pods划到逻辑组里?")])]),e._v(" "),r("p",[e._v("Replication Controller确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Replication Controller并且指定3个副本,它会创建3个Pod,并且持续监控它们。如果某个Pod不响应,那么Replication Controller会替换它,保持总数为3.如下面的动画所示:")]),e._v(" "),r("p",[r("img",{attrs:{src:t(330),alt:"2.gif"}})]),e._v(" "),r("p",[e._v("如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Replication Controller会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Replication Controller会立刻启动2个新Pod,保证总数为5。还可以按照这样的方式缩小Pod,这个特性在执行滚动 "),r("a",{attrs:{href:"https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#rolling_updates",target:"_blank",rel:"noopener noreferrer"}},[e._v("升级"),r("OutboundLink")],1),e._v(" 时很有用。")]),e._v(" "),r("p",[e._v("当创建Replication Controller时,需要指定两个东西:")]),e._v(" "),r("ol",[r("li",[e._v("Pod模板:用来创建Pod副本的模板")]),e._v(" "),r("li",[e._v("Label:Replication Controller需要监控的Pod的标签。现在已经创建了Pod的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是Service。")])]),e._v(" "),r("div",{staticClass:"tip custom-block"},[r("p",[e._v("最新 Kubernetes 版本里,推荐使用 Deployment")])]),e._v(" "),r("h2",{attrs:{id:"service"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#service","aria-hidden":"true"}},[e._v("#")]),e._v(" Service")]),e._v(" "),r("p",[r("em",[e._v("如果Pods是短暂的,那么重启时IP地址可能会改变,怎么才能从前端容器正确可靠地指向后台容器呢?")]),e._v(" "),r("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/service/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Service"),r("OutboundLink")],1),e._v(" "),r("strong",[e._v("抽象")]),e._v("\n现在,假定有2个后台Pod,并且定义后台Service的名称为‘backend-service’,lable选择器为()。 的Service会完成如下两件重要的事情:")]),e._v(" "),r("ul",[r("li",[e._v("会为Service创建一个本地集群的DNS入口,因此前端Pod只需要DNS查找主机名为 ‘backend-service’,就能够解析出前端应用程序可用的IP地址。")]),e._v(" "),r("li",[e._v("现在前端已经得到了后台服务的IP地址,但是它应该访问2个后台Pod的哪一个呢?Service在这2个后台Pod之间提供透明的负载均衡,会将请求分发给其中的任意一个(如下面的动画所示)。通过每个Node上运行的代理(kube-proxy)完成。")])]),e._v(" "),r("p",[e._v("下述动画展示了Service的功能。注意该图作了很多简化。如果不进入网络配置,那么达到透明的负载均衡目标所涉及的底层网络和路由相对先进。如果有兴趣,有更深入的介绍。")]),e._v(" "),r("p",[r("img",{attrs:{src:t(331),alt:"3.gif"}})]),e._v(" "),r("p",[e._v("每个节点都运行如下Kubernetes关键组件:")]),e._v(" "),r("ul",[r("li",[e._v("Kubelet:是主节点代理。")]),e._v(" "),r("li",[e._v("Kube-proxy:Service使用其将链接路由到Pod,如上文所述。")]),e._v(" "),r("li",[e._v("Docker或Rocket:Kubernetes使用的容器技术来创建容器。")])]),e._v(" "),r("h3",{attrs:{id:"kubernetes-master"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-master","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes Master")]),e._v(" "),r("p",[e._v("集群拥有一个Kubernetes Master(紫色方框)。Kubernetes Master提供集群的独特视角,并且拥有一系列组件,比如Kubernetes API Server。API Server提供可以用来和集群交互的REST端点。master节点包括用来创建和复制Pod的Replication Controller。")])])},[],!1,null,null,null);A.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{327:function(e,A,t){e.exports=t.p+"assets/img/d7ce07842371eab180725bab5164ec17.d58ea9cc.png"},328:function(e,A){e.exports="data:image/png;base64,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"},329:function(e,A){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAoCAYAAACSN4jeAAAKQWlDQ1BJQ0MgUHJvZmlsZQAASA2dlndUU9kWh8+9N73QEiIgJfQaegkg0jtIFQRRiUmAUAKGhCZ2RAVGFBEpVmRUwAFHhyJjRRQLg4Ji1wnyEFDGwVFEReXdjGsJ7601896a/cdZ39nnt9fZZ+9917oAUPyCBMJ0WAGANKFYFO7rwVwSE8vE9wIYEAEOWAHA4WZmBEf4RALU/L09mZmoSMaz9u4ugGS72yy/UCZz1v9/kSI3QyQGAApF1TY8fiYX5QKUU7PFGTL/BMr0lSkyhjEyFqEJoqwi48SvbPan5iu7yZiXJuShGlnOGbw0noy7UN6aJeGjjAShXJgl4GejfAdlvVRJmgDl9yjT0/icTAAwFJlfzOcmoWyJMkUUGe6J8gIACJTEObxyDov5OWieAHimZ+SKBIlJYqYR15hp5ejIZvrxs1P5YjErlMNN4Yh4TM/0tAyOMBeAr2+WRQElWW2ZaJHtrRzt7VnW5mj5v9nfHn5T/T3IevtV8Sbsz55BjJ5Z32zsrC+9FgD2JFqbHbO+lVUAtG0GQOXhrE/vIADyBQC03pzzHoZsXpLE4gwnC4vs7GxzAZ9rLivoN/ufgm/Kv4Y595nL7vtWO6YXP4EjSRUzZUXlpqemS0TMzAwOl89k/fcQ/+PAOWnNycMsnJ/AF/GF6FVR6JQJhIlou4U8gViQLmQKhH/V4X8YNicHGX6daxRodV8AfYU5ULhJB8hvPQBDIwMkbj96An3rWxAxCsi+vGitka9zjzJ6/uf6Hwtcim7hTEEiU+b2DI9kciWiLBmj34RswQISkAd0oAo0gS4wAixgDRyAM3AD3iAAhIBIEAOWAy5IAmlABLJBPtgACkEx2AF2g2pwANSBetAEToI2cAZcBFfADXALDIBHQAqGwUswAd6BaQiC8BAVokGqkBakD5lC1hAbWgh5Q0FQOBQDxUOJkBCSQPnQJqgYKoOqoUNQPfQjdBq6CF2D+qAH0CA0Bv0BfYQRmALTYQ3YALaA2bA7HAhHwsvgRHgVnAcXwNvhSrgWPg63whfhG/AALIVfwpMIQMgIA9FGWAgb8URCkFgkAREha5EipAKpRZqQDqQbuY1IkXHkAwaHoWGYGBbGGeOHWYzhYlZh1mJKMNWYY5hWTBfmNmYQM4H5gqVi1bGmWCesP3YJNhGbjS3EVmCPYFuwl7ED2GHsOxwOx8AZ4hxwfrgYXDJuNa4Etw/XjLuA68MN4SbxeLwq3hTvgg/Bc/BifCG+Cn8cfx7fjx/GvyeQCVoEa4IPIZYgJGwkVBAaCOcI/YQRwjRRgahPdCKGEHnEXGIpsY7YQbxJHCZOkxRJhiQXUiQpmbSBVElqIl0mPSa9IZPJOmRHchhZQF5PriSfIF8lD5I/UJQoJhRPShxFQtlOOUq5QHlAeUOlUg2obtRYqpi6nVpPvUR9Sn0vR5Mzl/OX48mtk6uRa5Xrl3slT5TXl3eXXy6fJ18hf0r+pvy4AlHBQMFTgaOwVqFG4bTCPYVJRZqilWKIYppiiWKD4jXFUSW8koGStxJPqUDpsNIlpSEaQtOledK4tE20Otpl2jAdRzek+9OT6cX0H+i99AllJWVb5SjlHOUa5bPKUgbCMGD4M1IZpYyTjLuMj/M05rnP48/bNq9pXv+8KZX5Km4qfJUilWaVAZWPqkxVb9UU1Z2qbapP1DBqJmphatlq+9Uuq43Pp893ns+dXzT/5PyH6rC6iXq4+mr1w+o96pMamhq+GhkaVRqXNMY1GZpumsma5ZrnNMe0aFoLtQRa5VrntV4wlZnuzFRmJbOLOaGtru2nLdE+pN2rPa1jqLNYZ6NOs84TXZIuWzdBt1y3U3dCT0svWC9fr1HvoT5Rn62fpL9Hv1t/ysDQINpgi0GbwaihiqG/YZ5ho+FjI6qRq9Eqo1qjO8Y4Y7ZxivE+41smsImdSZJJjclNU9jU3lRgus+0zwxr5mgmNKs1u8eisNxZWaxG1qA5wzzIfKN5m/krCz2LWIudFt0WXyztLFMt6ywfWSlZBVhttOqw+sPaxJprXWN9x4Zq42Ozzqbd5rWtqS3fdr/tfTuaXbDdFrtOu8/2DvYi+yb7MQc9h3iHvQ732HR2KLuEfdUR6+jhuM7xjOMHJ3snsdNJp9+dWc4pzg3OowsMF/AX1C0YctFx4bgccpEuZC6MX3hwodRV25XjWuv6zE3Xjed2xG3E3dg92f24+ysPSw+RR4vHlKeT5xrPC16Il69XkVevt5L3Yu9q76c+Oj6JPo0+E752vqt9L/hh/QL9dvrd89fw5/rX+08EOASsCegKpARGBFYHPgsyCRIFdQTDwQHBu4IfL9JfJFzUFgJC/EN2hTwJNQxdFfpzGC4sNKwm7Hm4VXh+eHcELWJFREPEu0iPyNLIR4uNFksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNclrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyRBJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10zPSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTkmuRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41lG99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mPZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFtxWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sTq+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3OHS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm99Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAB1WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KOXS2agAAAtlJREFUWAntV79rIkEUfv5qJKKW11hYCFdeI1hbeSCYJiFWQQwYFfO3qAlioSgSA4KFdQ61sbOKjUXAwFncdSpyBvx1Owsjs+7bvZ3du73jcEH2ve99897n25nZWYDTderAn+2AhaavVqsvm83mo+BbKWbW3Wq1bu12+5fr6+vPtKadGsL9w9nZmf3q6oqBzDGfnp6sq9XqE1vN9O6wxdXs/1tYr9eDQqEAs9lMrQlcMXaOcQ2k5Hw+T02o1+uifXd3d8D0GoYeZafTQetut1sU5wENCXt7e0Nr3d/fozgPaEgYTyFeriFhSnveX59jwsaINoJdEChBA6i7Y7Q46Q7tEGvTuAYNKEWXMFqUCjrOnM1mRYjyjuNafG5htFg6nVbMb7PZIJFIiPGHhwdFnlqAS1ixWBRzRSIRcDgcannB5XJBKBQC4cQCtVpNlYsFNQtrt9uw2+3A5/NBIBDAcsmwYDAIfr8f5vM5DAYDWVwNUBT2+voKpEPkH4/HY5hOp0Ae0fn5uVo+WSwajYLb7YbhcCjmWK/XQDbg0Wgk47IA+q6k84gQ2TlCJzWbQIstHADFlzzpOr263S6Qn9ICknVsMpnQsZL77e2txOd1crkcOuT5+RnFZcL6/T5KLJVKKK4VfHx8RKmLxQLFZcJQ1m8AhTM9VxaZsFgshiZQ27fIIZFc9DyGJbi8vMRg8Hg8KC4T5vV6UaLSvkUWyn6/F8eQEyy7cI4TWSyHj7JDKBwOH2zWQPtLV0qz2YR4PM7yJbaSiOVyCcIXl4RLHLoAWq0WXFxcyOIsIOsYG1QTxfKO7UqlcgxJ/F+JImRVYZJsJjuGhGUyGVQunQpoUCNoSBjZApxOp6RUMpmU+HoddPLzJLu5ueGha+Ya6pjmKjqI/6yww6MUzlp7Yf/ZNRqNHzr+oKEh7+/vTuFI9Z1NItmKy+XyVyG4YQlm2MKb41sqlQqZUetUw/QO/AQEcsyxO1XX/gAAAABJRU5ErkJggg=="},330:function(e,A){e.exports="data:image/png;base64,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"},331:function(e,A,t){e.exports=t.p+"assets/img/03d07039d9fc80c0f692d6176f65936e.7af9fab5.gif"},332:function(e,A,t){e.exports=t.p+"assets/img/e7a273fcdc03d2417b354b60c253552f.19ae82d9.gif"},376:function(e,A,t){"use strict";t.r(A);var r=t(0),l=Object(r.a)({},function(){var e=this,A=e.$createElement,r=e._self._c||A;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"十分钟带你理解kubernetes核心概念"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#十分钟带你理解kubernetes核心概念","aria-hidden":"true"}},[e._v("#")]),e._v(" 十分钟带你理解Kubernetes核心概念")]),e._v(" "),r("blockquote",[r("p",[e._v("转载信息:")]),e._v(" "),r("p",[r("a",{attrs:{href:"http://www.dockone.io/article/932",target:"_blank",rel:"noopener noreferrer"}},[e._v("译文链接"),r("OutboundLink")],1),e._v(" 译者:崔婧雯")]),e._v(" "),r("p",[r("a",{attrs:{href:"http://omerio.com/2015/12/18/learn-the-kubernetes-key-concepts-in-10-minutes/",target:"_blank",rel:"noopener noreferrer"}},[e._v("原文链接"),r("OutboundLink")],1),e._v(" 作者:Omer Dawelbeit")])]),e._v(" "),r("p",[e._v("本文将会简单介绍Kubernetes的核心概念。因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍。相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概念。我们发现一些概念(比如Service)如果没有图表的辅助就很难全面地理解。在合适的地方我们也会提供Kubernetes文档的链接以便读者深入学习。")]),e._v(" "),r("h2",{attrs:{id:"什么是kubernetes?"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#什么是kubernetes?","aria-hidden":"true"}},[e._v("#")]),e._v(" 什么是Kubernetes?")]),e._v(" "),r("p",[e._v("Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。\n使用Kubernetes可以:")]),e._v(" "),r("ul",[r("li",[e._v("自动化容器的部署和复制")]),e._v(" "),r("li",[e._v("随时扩展或收缩容器规模")]),e._v(" "),r("li",[e._v("将容器组织成组,并且提供容器间的负载均衡")]),e._v(" "),r("li",[e._v("很容易地升级应用程序容器的新版本")]),e._v(" "),r("li",[e._v("提供容器弹性,如果容器失效就替换它,等等...")])]),e._v(" "),r("h2",{attrs:{id:"集群"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#集群","aria-hidden":"true"}},[e._v("#")]),e._v(" 集群")]),e._v(" "),r("p",[e._v("集群是一组节点,这些节点可以是物理服务器或者虚拟机,之上安装了Kubernetes平台。下图展示这样的集群。注意该图为了强调核心概念有所简化。这里可以看到一个典型的Kubernetes架构图。")]),e._v(" "),r("p",[r("img",{attrs:{src:t(327),alt:"1.png"}})]),e._v(" "),r("p",[e._v("上图可以看到如下组件,使用特别的图标表示Service和Label:")]),e._v(" "),r("ul",[r("li",[e._v("PodContainer(容器)")]),e._v(" "),r("li",[e._v("Label("),r("img",{attrs:{src:t(328),alt:"label"}}),e._v(")(标签)")]),e._v(" "),r("li",[e._v("Replication Controller(复制控制器)")]),e._v(" "),r("li",[e._v("Service("),r("img",{attrs:{src:t(329),alt:"enter image description here"}}),e._v(")(服务)")]),e._v(" "),r("li",[e._v("Node(节点)")]),e._v(" "),r("li",[e._v("Kubernetes Master(Kubernetes主节点)")])]),e._v(" "),r("h2",{attrs:{id:"pod"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#pod","aria-hidden":"true"}},[e._v("#")]),e._v(" Pod")]),e._v(" "),r("p",[r("a",{attrs:{href:"https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Pod"),r("OutboundLink")],1),e._v("(上图绿色方框)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。你可能会有这些问题:")]),e._v(" "),r("ul",[r("li",[e._v("如果Pod是短暂的,那么我怎么才能持久化容器数据使其能够跨重启而存在呢? 是的,Kubernetes支持 "),r("em",[r("strong",[e._v("卷")])]),e._v(" 的概念,因此可以使用持久化的卷类型。")]),e._v(" "),r("li",[e._v("是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么?可以手动创建单个Pod,但是也可以使用Replication Controller使用Pod模板创建出多份拷贝,下文会详细介绍。")]),e._v(" "),r("li",[e._v("如果Pod是短暂的,那么重启时IP地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?这时可以使用Service,下文会详细介绍。")])]),e._v(" "),r("h2",{attrs:{id:"label"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#label","aria-hidden":"true"}},[e._v("#")]),e._v(" Label")]),e._v(" "),r("p",[e._v("正如图所示,一些Pod有Label("),r("img",{attrs:{src:t(330),alt:"enter image description here"}}),e._v(')。一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。比如,你可能创建了一个"tier"和“app”标签,通过Label('),r("strong",[e._v("tier=frontend, app=myapp")]),e._v(")来标记前端Pod容器,使用Label("),r("strong",[e._v("tier=backend, app=myapp")]),e._v(")标记后台Pod。然后可以使用 "),r("a",{attrs:{href:"https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Selectors"),r("OutboundLink")],1),e._v(" 选择带有特定Label的Pod,并且将Service或者Replication Controller应用到上面。")]),e._v(" "),r("h2",{attrs:{id:"replication-controller"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#replication-controller","aria-hidden":"true"}},[e._v("#")]),e._v(" Replication Controller")]),e._v(" "),r("p",[r("em",[e._v("是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么,能否将Pods划到逻辑组里?")])]),e._v(" "),r("p",[e._v("Replication Controller确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Replication Controller并且指定3个副本,它会创建3个Pod,并且持续监控它们。如果某个Pod不响应,那么Replication Controller会替换它,保持总数为3.如下面的动画所示:")]),e._v(" "),r("p",[r("img",{attrs:{src:t(331),alt:"2.gif"}})]),e._v(" "),r("p",[e._v("如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Replication Controller会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Replication Controller会立刻启动2个新Pod,保证总数为5。还可以按照这样的方式缩小Pod,这个特性在执行滚动 "),r("a",{attrs:{href:"https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#rolling_updates",target:"_blank",rel:"noopener noreferrer"}},[e._v("升级"),r("OutboundLink")],1),e._v(" 时很有用。")]),e._v(" "),r("p",[e._v("当创建Replication Controller时,需要指定两个东西:")]),e._v(" "),r("ol",[r("li",[e._v("Pod模板:用来创建Pod副本的模板")]),e._v(" "),r("li",[e._v("Label:Replication Controller需要监控的Pod的标签。现在已经创建了Pod的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是Service。")])]),e._v(" "),r("div",{staticClass:"tip custom-block"},[r("p",[e._v("最新 Kubernetes 版本里,推荐使用 Deployment")])]),e._v(" "),r("h2",{attrs:{id:"service"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#service","aria-hidden":"true"}},[e._v("#")]),e._v(" Service")]),e._v(" "),r("p",[r("em",[e._v("如果Pods是短暂的,那么重启时IP地址可能会改变,怎么才能从前端容器正确可靠地指向后台容器呢?")]),e._v(" "),r("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/service/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Service"),r("OutboundLink")],1),e._v(" "),r("strong",[e._v("抽象")]),e._v("\n现在,假定有2个后台Pod,并且定义后台Service的名称为‘backend-service’,lable选择器为()。 的Service会完成如下两件重要的事情:")]),e._v(" "),r("ul",[r("li",[e._v("会为Service创建一个本地集群的DNS入口,因此前端Pod只需要DNS查找主机名为 ‘backend-service’,就能够解析出前端应用程序可用的IP地址。")]),e._v(" "),r("li",[e._v("现在前端已经得到了后台服务的IP地址,但是它应该访问2个后台Pod的哪一个呢?Service在这2个后台Pod之间提供透明的负载均衡,会将请求分发给其中的任意一个(如下面的动画所示)。通过每个Node上运行的代理(kube-proxy)完成。")])]),e._v(" "),r("p",[e._v("下述动画展示了Service的功能。注意该图作了很多简化。如果不进入网络配置,那么达到透明的负载均衡目标所涉及的底层网络和路由相对先进。如果有兴趣,有更深入的介绍。")]),e._v(" "),r("p",[r("img",{attrs:{src:t(332),alt:"3.gif"}})]),e._v(" "),r("p",[e._v("每个节点都运行如下Kubernetes关键组件:")]),e._v(" "),r("ul",[r("li",[e._v("Kubelet:是主节点代理。")]),e._v(" "),r("li",[e._v("Kube-proxy:Service使用其将链接路由到Pod,如上文所述。")]),e._v(" "),r("li",[e._v("Docker或Rocket:Kubernetes使用的容器技术来创建容器。")])]),e._v(" "),r("h3",{attrs:{id:"kubernetes-master"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-master","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes Master")]),e._v(" "),r("p",[e._v("集群拥有一个Kubernetes Master(紫色方框)。Kubernetes Master提供集群的独特视角,并且拥有一系列组件,比如Kubernetes API Server。API Server提供可以用来和集群交互的REST端点。master节点包括用来创建和复制Pod的Replication Controller。")])])},[],!1,null,null,null);A.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/15.f24a3d7b.js b/docs/assets/js/15.f69e0361.js similarity index 98% rename from docs/assets/js/15.f24a3d7b.js rename to docs/assets/js/15.f69e0361.js index 40d9893..c40e082 100644 --- a/docs/assets/js/15.f24a3d7b.js +++ b/docs/assets/js/15.f69e0361.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{111:function(t,a,_){t.exports=_.p+"assets/img/image-20190721110355464.25f25dda.png"},297:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112353077.b907aa89.png"},298:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112624128.7aa6b8f1.png"},299:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113050608.97e0f110.png"},300:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113155991.f3ecd62f.png"},362: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:_(111),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:_(297),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:_(298),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:_(299),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:_(300),alt:"image-20190721113155991"}})]),t._v(" "),v("p",[t._v("编辑、删除操作可直接按照提示完成")])])},[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{111:function(t,a,_){t.exports=_.p+"assets/img/image-20190721110355464.25f25dda.png"},297:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112353077.b907aa89.png"},298:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112624128.7aa6b8f1.png"},299:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113050608.97e0f110.png"},300:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113155991.f3ecd62f.png"},372: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:_(111),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:_(297),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:_(298),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:_(299),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:_(300),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/docs/assets/js/16.d1fd1a68.js b/docs/assets/js/16.b573c9f3.js similarity index 84% rename from docs/assets/js/16.d1fd1a68.js rename to docs/assets/js/16.b573c9f3.js index b428edd..1b7ae93 100644 --- a/docs/assets/js/16.d1fd1a68.js +++ b/docs/assets/js/16.b573c9f3.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{111:function(t,a,v){t.exports=v.p+"assets/img/image-20190721110355464.25f25dda.png"},301:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113708689.f9b42a11.png"},302:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113810235.59d55672.png"},303:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114112644.526de44c.png"},304:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114211751.e1a07115.png"},371: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(111),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(301),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(302),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(303),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(304),alt:"image-20190721114211751"}})]),t._v(" "),_("p",[t._v("编辑、删除操作可直接按照提示完成")])])},[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{111:function(t,a,v){t.exports=v.p+"assets/img/image-20190721110355464.25f25dda.png"},307:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113708689.f9b42a11.png"},308:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113810235.59d55672.png"},309:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114112644.526de44c.png"},310:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114211751.e1a07115.png"},375: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(111),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(307),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(308),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(309),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(310),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/docs/assets/js/20.5af0e778.js b/docs/assets/js/20.78eca6e0.js similarity index 82% rename from docs/assets/js/20.5af0e778.js rename to docs/assets/js/20.78eca6e0.js index 9dd9289..5189ba9 100644 --- a/docs/assets/js/20.5af0e778.js +++ b/docs/assets/js/20.78eca6e0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{237:function(t,a,e){t.exports=e.p+"assets/img/image-20190721104153954.74fb88ec.png"},238:function(t,a,e){t.exports=e.p+"assets/img/image-20190721101812895.8f059471.png"},239:function(t,a,e){t.exports=e.p+"assets/img/image-20190721101954560.176c574c.png"},240:function(t,a,e){t.exports=e.p+"assets/img/image-20190721103324863.72744076.png"},373: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(237),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(238),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(239),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(240),alt:"image-20190721103324863"}})])])},[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{234:function(t,a,e){t.exports=e.p+"assets/img/image-20190721104153954.74fb88ec.png"},235:function(t,a,e){t.exports=e.p+"assets/img/image-20190721101812895.8f059471.png"},236:function(t,a,e){t.exports=e.p+"assets/img/image-20190721101954560.176c574c.png"},237:function(t,a,e){t.exports=e.p+"assets/img/image-20190721103324863.72744076.png"},396: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(234),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(235),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(236),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(237),alt:"image-20190721103324863"}})])])},[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/23.eb01e090.js b/docs/assets/js/23.a6ac5f5d.js similarity index 83% rename from docs/assets/js/23.eb01e090.js rename to docs/assets/js/23.a6ac5f5d.js index 0b1e5eb..cb08d78 100644 --- a/docs/assets/js/23.eb01e090.js +++ b/docs/assets/js/23.a6ac5f5d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{234:function(t,e,a){t.exports=a.p+"assets/img/image-20190721104348908.ce6e526d.png"},235:function(t,e,a){t.exports=a.p+"assets/img/image-20190721104415732.07ea4278.png"},236:function(t,e,a){t.exports=a.p+"assets/img/image-20190721104522870.6c74e0bb.png"},397:function(t,e,a){"use strict";a.r(e);var s=a(0),r=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:"日志及终端"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#日志及终端","aria-hidden":"true"}},[t._v("#")]),t._v(" 日志及终端")]),t._v(" "),s("h1",{attrs:{id:"日志"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#日志","aria-hidden":"true"}},[t._v("#")]),t._v(" 日志")]),t._v(" "),s("p",[t._v("通过 Kuboard 可以实时跟踪容器的日志信息。")]),t._v(" "),s("p",[t._v("假设您已经进入 "),s("em",[s("strong",[t._v("工作负载")])]),t._v(" 详情页,如下图所示:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(234),alt:"image-20190721104348908"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击容器信息中的 "),s("em",[s("strong",[t._v("日志")])]),t._v(" 按钮")]),t._v(" "),s("p",[t._v("可进入日志追踪界面,如下图所示:")])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(235),alt:"image-20190721104415732"}})]),t._v(" "),s("h1",{attrs:{id:"终端"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#终端","aria-hidden":"true"}},[t._v("#")]),t._v(" 终端")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击容器信息中的 "),s("em",[s("strong",[t._v("终端")])]),t._v(" 按钮")]),t._v(" "),s("p",[t._v("可进入终端界面,如下图所示:")]),t._v(" "),s("blockquote",[s("ul",[s("li",[s("p",[t._v("在终端中,可以执行的 shell 命令取决于该容器预装的命令。许多容器为了精简自身的大小,只保留了最基本的命令。")])]),t._v(" "),s("li",[s("p",[t._v("通常会进入终端执行如下诊断操作:")]),t._v(" "),s("ul",[s("li",[t._v("export 命令查看容器内的环境变量是否被正确设置")]),t._v(" "),s("li",[t._v("ping, curl 命令检查容器内与集群内其他服务,集群外服务的网络连通性")]),t._v(" "),s("li",[t._v("vi 命令,临时修改容器内应用程序的配置,并在容器内重启应用程序,以临时性的尝试修复问题,如果有效再将修改更新到应用程序代码或者 Dockerfile")])])])])])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(236),alt:"image-20190721104522870"}})])])},[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{238:function(t,e,a){t.exports=a.p+"assets/img/image-20190721104348908.ce6e526d.png"},239:function(t,e,a){t.exports=a.p+"assets/img/image-20190721104415732.07ea4278.png"},240:function(t,e,a){t.exports=a.p+"assets/img/image-20190721104522870.6c74e0bb.png"},397:function(t,e,a){"use strict";a.r(e);var s=a(0),r=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:"日志及终端"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#日志及终端","aria-hidden":"true"}},[t._v("#")]),t._v(" 日志及终端")]),t._v(" "),s("h1",{attrs:{id:"日志"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#日志","aria-hidden":"true"}},[t._v("#")]),t._v(" 日志")]),t._v(" "),s("p",[t._v("通过 Kuboard 可以实时跟踪容器的日志信息。")]),t._v(" "),s("p",[t._v("假设您已经进入 "),s("em",[s("strong",[t._v("工作负载")])]),t._v(" 详情页,如下图所示:")]),t._v(" "),s("p",[s("img",{attrs:{src:a(238),alt:"image-20190721104348908"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击容器信息中的 "),s("em",[s("strong",[t._v("日志")])]),t._v(" 按钮")]),t._v(" "),s("p",[t._v("可进入日志追踪界面,如下图所示:")])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(239),alt:"image-20190721104415732"}})]),t._v(" "),s("h1",{attrs:{id:"终端"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#终端","aria-hidden":"true"}},[t._v("#")]),t._v(" 终端")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击容器信息中的 "),s("em",[s("strong",[t._v("终端")])]),t._v(" 按钮")]),t._v(" "),s("p",[t._v("可进入终端界面,如下图所示:")]),t._v(" "),s("blockquote",[s("ul",[s("li",[s("p",[t._v("在终端中,可以执行的 shell 命令取决于该容器预装的命令。许多容器为了精简自身的大小,只保留了最基本的命令。")])]),t._v(" "),s("li",[s("p",[t._v("通常会进入终端执行如下诊断操作:")]),t._v(" "),s("ul",[s("li",[t._v("export 命令查看容器内的环境变量是否被正确设置")]),t._v(" "),s("li",[t._v("ping, curl 命令检查容器内与集群内其他服务,集群外服务的网络连通性")]),t._v(" "),s("li",[t._v("vi 命令,临时修改容器内应用程序的配置,并在容器内重启应用程序,以临时性的尝试修复问题,如果有效再将修改更新到应用程序代码或者 Dockerfile")])])])])])])]),t._v(" "),s("p",[s("img",{attrs:{src:a(240),alt:"image-20190721104522870"}})])])},[],!1,null,null,null);e.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/28.26f57086.js b/docs/assets/js/28.b1a5c5c7.js similarity index 94% rename from docs/assets/js/28.26f57086.js rename to docs/assets/js/28.b1a5c5c7.js index ab845b0..7e4e38c 100644 --- a/docs/assets/js/28.26f57086.js +++ b/docs/assets/js/28.b1a5c5c7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{106:function(t,e,r){t.exports=r.p+"assets/img/kuboard_qq.45e78dbf.png"},380:function(t,e,r){"use strict";r.r(e);var s=r(0),a=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:"概述"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#概述","aria-hidden":"true"}},[t._v("#")]),t._v(" 概述")]),t._v(" "),s("p",[t._v("已经有 Kubernetes 集群,请直接 "),s("a",{attrs:{href:"install-dashboard"}},[t._v("安装 Kuboard")]),t._v("。")]),t._v(" "),s("p",[t._v("还没有 Kubernetes 集群:")]),t._v(" "),s("ul",[s("li",[t._v("Kubernetes初学者,请 "),s("a",{attrs:{href:"install-k8s"}},[t._v("安装 Kubernetes 单Master节点")])]),t._v(" "),s("li",[t._v("打算用于生产环境?请 "),s("a",{attrs:{href:"install-kubernetes"}},[t._v("安装 Kubernetes 高可用")])])]),t._v(" "),s("br"),t._v(" "),s("p",[s("strong",[t._v("在线提问")])]),t._v(" "),s("p",[s("img",{attrs:{src:r(106),alt:"Kuboard 兴趣群二维码"}})])])},[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{106:function(t,e,r){t.exports=r.p+"assets/img/kuboard_qq.45e78dbf.png"},382:function(t,e,r){"use strict";r.r(e);var s=r(0),a=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:"概述"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#概述","aria-hidden":"true"}},[t._v("#")]),t._v(" 概述")]),t._v(" "),s("p",[t._v("已经有 Kubernetes 集群,请直接 "),s("a",{attrs:{href:"install-dashboard"}},[t._v("安装 Kuboard")]),t._v("。")]),t._v(" "),s("p",[t._v("还没有 Kubernetes 集群:")]),t._v(" "),s("ul",[s("li",[t._v("Kubernetes初学者,请 "),s("a",{attrs:{href:"install-k8s"}},[t._v("安装 Kubernetes 单Master节点")])]),t._v(" "),s("li",[t._v("打算用于生产环境?请 "),s("a",{attrs:{href:"install-kubernetes"}},[t._v("安装 Kubernetes 高可用")])])]),t._v(" "),s("br"),t._v(" "),s("p",[s("strong",[t._v("在线提问")])]),t._v(" "),s("p",[s("img",{attrs:{src:r(106),alt:"Kuboard 兴趣群二维码"}})])])},[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/3.ba12b6ca.js b/docs/assets/js/3.703f0de7.js similarity index 99% rename from docs/assets/js/3.ba12b6ca.js rename to docs/assets/js/3.703f0de7.js index 0f460ab..d723057 100644 --- a/docs/assets/js/3.ba12b6ca.js +++ b/docs/assets/js/3.703f0de7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{145:function(t,a,e){t.exports=e.p+"assets/img/image-20190723121433809.7a1b4b00.png"},261:function(t,a,e){t.exports=e.p+"assets/img/image-20190723150525017.378015c8.png"},262:function(t,a,e){t.exports=e.p+"assets/img/image-20190723150616633.17a9797e.png"},263:function(t,a,e){t.exports=e.p+"assets/img/image-20190723150853277.c168bc57.png"},264:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151045112.5329884a.png"},265:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151103353.3c29b906.png"},266:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151339137.5f756564.png"},267:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151357262.e79d2b6c.png"},268:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151422460.f02b1a28.png"},269:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151711230.c3dd4c41.png"},270:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151804727.287fa561.png"},271:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151845303.f2b8415a.png"},272:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151902003.1ef39b19.png"},273:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151914994.fa026f01.png"},274:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151932871.cbc894da.png"},275:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151951910.c3248933.png"},276:function(t,a,e){t.exports=e.p+"assets/img/image-20190723152020605.31eccc82.png"},277:function(t,a,e){t.exports=e.p+"assets/img/image-20190723152040219.45660f67.png"},278:function(t,a,e){t.exports=e.p+"assets/img/image-20190723152124196.9ef1af43.png"},279:function(t,a,e){t.exports=e.p+"assets/img/image-20190718104156232.8f0c70ed.png"},280:function(t,a,e){t.exports=e.p+"assets/img/image-20190718104729472.ef92267c.png"},281:function(t,a,e){t.exports=e.p+"assets/img/image-20190718105420599.71e5df51.png"},282:function(t,a,e){t.exports=e.p+"assets/img/image-20190718105641651.16549369.png"},283:function(t,a,e){t.exports=e.p+"assets/img/image-20190718120957255.0e01130f.png"},284:function(t,a,e){t.exports=e.p+"assets/img/image-20190718121133160.0d0a8e13.png"},365:function(t,a,e){"use strict";e.r(a);var s=e(0),i=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:"监控-example"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#监控-example","aria-hidden":"true"}},[t._v("#")]),t._v(" 监控 example "),s("Badge",{attrs:{text:"alpha",type:"warn"}})],1),t._v(" "),s("h2",{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("已完成 "),s("a",{attrs:{href:"/guide/example/import"}},[t._v("导入 example 微服务")])])]),t._v(" "),s("div",{staticClass:"warning custom-block"},[s("p",[t._v("监控套件相关的功能目前处于 alpha 状态,虽然在实际投产项目中取得了非常好的效果,但是产品化封装还需要进一步改进。")])]),t._v(" "),s("p",[t._v("假设您已进入 example 名称空间,如下图所示:")]),t._v(" "),s("p",[s("img",{attrs:{src:e(145),alt:"image-20190723121433809"}})]),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("ul",[s("li",[t._v("在 master 节点执行")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("kubectl -n kube-system create secret generic etcd-certs --from-file"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/etc/kubernetes/pki/etcd/server.crt --from-file"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/etc/kubernetes/pki/etcd/server.key\n")])])]),s("ul",[s("li",[t._v("将鼠标移到 "),s("em",[s("strong",[t._v("设置")])]),t._v(" 菜单")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(261),alt:"image-20190723150525017"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("监控套件 - example")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(262),alt:"image-20190723150616633"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("全局监控套件 / 查找并安装")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(263),alt:"image-20190723150853277"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("资源层监控套件 / 安装")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(264),alt:"image-20190723151045112"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("全局监控套件 / 资源层监控套件 / 安装")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(265),alt:"image-20190723151103353"}})]),t._v(" "),s("ul",[s("li",[t._v("根据向导提示,完成工作负载的导入")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(266),alt:"image-20190723151339137"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("资源层监控套件 / 初始化")])])]),t._v(" "),s("p",[t._v("由于下载镜像需要时间,您可能需要等待5-10分钟后,才能成功执行初始化。初始化成功的话,您将看到如下提示信息。")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(267),alt:"image-20190723151357262"}})]),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("名称空间监控套件 example / 查找并安装")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(268),alt:"image-20190723151422460"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("重复前述过程,安装监控套件")]),t._v(" "),s("p",[t._v("重复前述过程,完成如下监控套件的安装和初始化:")]),t._v(" "),s("ul",[s("li",[t._v("Pinpoint 监控套件")]),t._v(" "),s("li",[t._v("Prometheus 监控套件")]),t._v(" "),s("li",[t._v("熔断及限流 Sentinel")])]),t._v(" "),s("p",[t._v("安装完成后,界面如下图所示:")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(269),alt:"image-20190723151711230"}})]),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",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("后退")])])]),t._v(" "),s("p",[t._v("回到名称空间后,可查看到刚才安装监控套件时导入的监控层工作负载。")]),t._v(" "),s("blockquote",[s("p",[t._v("全局监控套件安装在 kube-system 名称空间")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(270),alt:"image-20190723151804727"}})]),t._v(" "),s("h2",{attrs:{id:"重启-example-容器组"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#重启-example-容器组","aria-hidden":"true"}},[t._v("#")]),t._v(" 重启 example 容器组")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击导航栏中的 "),s("em",[s("strong",[t._v("容器组列表")])])]),t._v(" "),s("p",[t._v("在筛选条件中选择")]),t._v(" "),s("ul",[s("li",[t._v("展现层")]),t._v(" "),s("li",[t._v("网关层")]),t._v(" "),s("li",[t._v("服务层")]),t._v(" "),s("li",[t._v("持久层")]),t._v(" "),s("li",[t._v("中间件")])]),t._v(" "),s("p",[t._v("并点击刷新")]),t._v(" "),s("blockquote",[s("ul",[s("li",[s("p",[t._v("Kuboard 创建工作负载时,默认将其 imagePullPolicy 设置为 "),s("strong",[t._v("Always")]),t._v(";")])]),t._v(" "),s("li",[s("p",[t._v("删除容器组时,Kubernetes 将为该工作负载启动一个新的容器组,以尽可能地使工作负载的容器组数量等于该工作负载期望的副本数(replicas);")])]),t._v(" "),s("li",[s("p",[t._v("Kubernetes 在启动容器组时,根据 imagePullPolicy 的设置 Always,将会尝试从镜像仓库抓取最新镜像,这一特性,可以用于开发环境和测试环境的版本更新,因为您的 devops 系统肯能不会为 daily build 生成新的镜像标签;")])]),t._v(" "),s("li",[s("p",[t._v("此处删除容器组的目的是,重新启动容器,以便容器中的监控探针能够检测到其对应监控套件的存在。")])])])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(271),alt:"image-20190723151845303"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("在列表中选择")]),t._v(" "),s("p",[t._v("选中如下容器组:")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("cloud-eureka-0")])]),t._v(" "),s("li",[s("p",[t._v("db-example-xxxxxx-xxxx")])]),t._v(" "),s("li",[s("p",[t._v("gateway-example-xxxxxx-xxxx")])]),t._v(" "),s("li",[s("p",[t._v("svc-example-xxxxxx-xxxx")])]),t._v(" "),s("li",[s("p",[t._v("web-example-xxxxxx-xxxx")])])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(272),alt:"image-20190723151902003"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("删除")])]),t._v(" 按钮")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(273),alt:"image-20190723151914994"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("确定")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(274),alt:"image-20190723151932871"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("应用")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(275),alt:"image-20190723151951910"}})]),t._v(" "),s("ul",[s("li",[t._v("等待,直到容器组调整完成")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(276),alt:"image-20190723152020605"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("后退")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(277),alt:"image-20190723152040219"}})]),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("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("展现层 / web-example")])])]),t._v(" "),s("p",[t._v("如果您在下图中没有看到 "),s("em",[s("strong",[t._v("Nginx 监控")])]),t._v(", "),s("em",[s("strong",[t._v("容器组监控")])]),t._v(" 等,请刷新您的页面,因为监控套件初始化之后需要刷新页面才能加载并显示。")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(278),alt:"image-20190723152124196"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("所在节点监控")])])]),t._v(" "),s("p",[t._v("可查看所在节点的资源使用情况监控信息")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(279),alt:"image-20190718104156232"}})]),t._v(" "),s("h3",{attrs:{id:"查看中间件层监控信息"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看中间件层监控信息","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看中间件层监控信息")]),t._v(" "),s("h4",{attrs:{id:"查看-nginx-监控"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-nginx-监控","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 Nginx 监控")]),t._v(" "),s("ul",[s("li",[t._v("点击 Nginx 监控")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(280),alt:"image-20190718104729472"}})]),t._v(" "),s("h4",{attrs:{id:"查看-mysql-监控"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-mysql-监控","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 MySQL 监控")]),t._v(" "),s("ul",[s("li",[t._v("返回 "),s("em",[s("strong",[t._v("example")])]),t._v(" 名称空间")]),t._v(" "),s("li",[t._v("点击 "),s("em",[s("strong",[t._v("持久层 / example db")])])]),t._v(" "),s("li",[t._v("点击 "),s("em",[s("strong",[t._v("MySQL 监控")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(281),alt:"image-20190718105420599"}})]),t._v(" "),s("h4",{attrs:{id:"查看-jvm-监控"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-jvm-监控","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 JVM 监控")]),t._v(" "),s("ul",[s("li",[t._v("返回 "),s("em",[s("strong",[t._v("example")])]),t._v(" 名称空间")]),t._v(" "),s("li",[t._v("点击 "),s("em",[s("strong",[t._v("微服务层 / example")])])]),t._v(" "),s("li",[t._v("点击 "),s("em",[s("strong",[t._v("Java 虚拟机监控")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(282),alt:"image-20190718105641651"}})]),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("微服务层 / example")])]),t._v(" 中点击 "),s("em",[s("strong",[t._v("链路追踪")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(283),alt:"image-20190718120957255"}})]),t._v(" "),s("p",[s("img",{attrs:{src:e(284),alt:"image-20190718121133160"}})])])},[],!1,null,null,null);a.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{145:function(t,a,e){t.exports=e.p+"assets/img/image-20190723121433809.7a1b4b00.png"},261:function(t,a,e){t.exports=e.p+"assets/img/image-20190723150525017.378015c8.png"},262:function(t,a,e){t.exports=e.p+"assets/img/image-20190723150616633.17a9797e.png"},263:function(t,a,e){t.exports=e.p+"assets/img/image-20190723150853277.c168bc57.png"},264:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151045112.5329884a.png"},265:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151103353.3c29b906.png"},266:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151339137.5f756564.png"},267:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151357262.e79d2b6c.png"},268:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151422460.f02b1a28.png"},269:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151711230.c3dd4c41.png"},270:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151804727.287fa561.png"},271:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151845303.f2b8415a.png"},272:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151902003.1ef39b19.png"},273:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151914994.fa026f01.png"},274:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151932871.cbc894da.png"},275:function(t,a,e){t.exports=e.p+"assets/img/image-20190723151951910.c3248933.png"},276:function(t,a,e){t.exports=e.p+"assets/img/image-20190723152020605.31eccc82.png"},277:function(t,a,e){t.exports=e.p+"assets/img/image-20190723152040219.45660f67.png"},278:function(t,a,e){t.exports=e.p+"assets/img/image-20190723152124196.9ef1af43.png"},279:function(t,a,e){t.exports=e.p+"assets/img/image-20190718104156232.8f0c70ed.png"},280:function(t,a,e){t.exports=e.p+"assets/img/image-20190718104729472.ef92267c.png"},281:function(t,a,e){t.exports=e.p+"assets/img/image-20190718105420599.71e5df51.png"},282:function(t,a,e){t.exports=e.p+"assets/img/image-20190718105641651.16549369.png"},283:function(t,a,e){t.exports=e.p+"assets/img/image-20190718120957255.0e01130f.png"},284:function(t,a,e){t.exports=e.p+"assets/img/image-20190718121133160.0d0a8e13.png"},366:function(t,a,e){"use strict";e.r(a);var s=e(0),i=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:"监控-example"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#监控-example","aria-hidden":"true"}},[t._v("#")]),t._v(" 监控 example "),s("Badge",{attrs:{text:"alpha",type:"warn"}})],1),t._v(" "),s("h2",{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("已完成 "),s("a",{attrs:{href:"/guide/example/import"}},[t._v("导入 example 微服务")])])]),t._v(" "),s("div",{staticClass:"warning custom-block"},[s("p",[t._v("监控套件相关的功能目前处于 alpha 状态,虽然在实际投产项目中取得了非常好的效果,但是产品化封装还需要进一步改进。")])]),t._v(" "),s("p",[t._v("假设您已进入 example 名称空间,如下图所示:")]),t._v(" "),s("p",[s("img",{attrs:{src:e(145),alt:"image-20190723121433809"}})]),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("ul",[s("li",[t._v("在 master 节点执行")])]),t._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[t._v("kubectl -n kube-system create secret generic etcd-certs --from-file"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/etc/kubernetes/pki/etcd/server.crt --from-file"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("/etc/kubernetes/pki/etcd/server.key\n")])])]),s("ul",[s("li",[t._v("将鼠标移到 "),s("em",[s("strong",[t._v("设置")])]),t._v(" 菜单")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(261),alt:"image-20190723150525017"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("监控套件 - example")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(262),alt:"image-20190723150616633"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("全局监控套件 / 查找并安装")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(263),alt:"image-20190723150853277"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("资源层监控套件 / 安装")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(264),alt:"image-20190723151045112"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("全局监控套件 / 资源层监控套件 / 安装")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(265),alt:"image-20190723151103353"}})]),t._v(" "),s("ul",[s("li",[t._v("根据向导提示,完成工作负载的导入")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(266),alt:"image-20190723151339137"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("资源层监控套件 / 初始化")])])]),t._v(" "),s("p",[t._v("由于下载镜像需要时间,您可能需要等待5-10分钟后,才能成功执行初始化。初始化成功的话,您将看到如下提示信息。")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(267),alt:"image-20190723151357262"}})]),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("名称空间监控套件 example / 查找并安装")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(268),alt:"image-20190723151422460"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("重复前述过程,安装监控套件")]),t._v(" "),s("p",[t._v("重复前述过程,完成如下监控套件的安装和初始化:")]),t._v(" "),s("ul",[s("li",[t._v("Pinpoint 监控套件")]),t._v(" "),s("li",[t._v("Prometheus 监控套件")]),t._v(" "),s("li",[t._v("熔断及限流 Sentinel")])]),t._v(" "),s("p",[t._v("安装完成后,界面如下图所示:")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(269),alt:"image-20190723151711230"}})]),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",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("后退")])])]),t._v(" "),s("p",[t._v("回到名称空间后,可查看到刚才安装监控套件时导入的监控层工作负载。")]),t._v(" "),s("blockquote",[s("p",[t._v("全局监控套件安装在 kube-system 名称空间")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(270),alt:"image-20190723151804727"}})]),t._v(" "),s("h2",{attrs:{id:"重启-example-容器组"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#重启-example-容器组","aria-hidden":"true"}},[t._v("#")]),t._v(" 重启 example 容器组")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击导航栏中的 "),s("em",[s("strong",[t._v("容器组列表")])])]),t._v(" "),s("p",[t._v("在筛选条件中选择")]),t._v(" "),s("ul",[s("li",[t._v("展现层")]),t._v(" "),s("li",[t._v("网关层")]),t._v(" "),s("li",[t._v("服务层")]),t._v(" "),s("li",[t._v("持久层")]),t._v(" "),s("li",[t._v("中间件")])]),t._v(" "),s("p",[t._v("并点击刷新")]),t._v(" "),s("blockquote",[s("ul",[s("li",[s("p",[t._v("Kuboard 创建工作负载时,默认将其 imagePullPolicy 设置为 "),s("strong",[t._v("Always")]),t._v(";")])]),t._v(" "),s("li",[s("p",[t._v("删除容器组时,Kubernetes 将为该工作负载启动一个新的容器组,以尽可能地使工作负载的容器组数量等于该工作负载期望的副本数(replicas);")])]),t._v(" "),s("li",[s("p",[t._v("Kubernetes 在启动容器组时,根据 imagePullPolicy 的设置 Always,将会尝试从镜像仓库抓取最新镜像,这一特性,可以用于开发环境和测试环境的版本更新,因为您的 devops 系统肯能不会为 daily build 生成新的镜像标签;")])]),t._v(" "),s("li",[s("p",[t._v("此处删除容器组的目的是,重新启动容器,以便容器中的监控探针能够检测到其对应监控套件的存在。")])])])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(271),alt:"image-20190723151845303"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("在列表中选择")]),t._v(" "),s("p",[t._v("选中如下容器组:")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("cloud-eureka-0")])]),t._v(" "),s("li",[s("p",[t._v("db-example-xxxxxx-xxxx")])]),t._v(" "),s("li",[s("p",[t._v("gateway-example-xxxxxx-xxxx")])]),t._v(" "),s("li",[s("p",[t._v("svc-example-xxxxxx-xxxx")])]),t._v(" "),s("li",[s("p",[t._v("web-example-xxxxxx-xxxx")])])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(272),alt:"image-20190723151902003"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("删除")])]),t._v(" 按钮")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(273),alt:"image-20190723151914994"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("确定")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(274),alt:"image-20190723151932871"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("应用")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(275),alt:"image-20190723151951910"}})]),t._v(" "),s("ul",[s("li",[t._v("等待,直到容器组调整完成")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(276),alt:"image-20190723152020605"}})]),t._v(" "),s("ul",[s("li",[t._v("点击 "),s("em",[s("strong",[t._v("后退")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(277),alt:"image-20190723152040219"}})]),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("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("展现层 / web-example")])])]),t._v(" "),s("p",[t._v("如果您在下图中没有看到 "),s("em",[s("strong",[t._v("Nginx 监控")])]),t._v(", "),s("em",[s("strong",[t._v("容器组监控")])]),t._v(" 等,请刷新您的页面,因为监控套件初始化之后需要刷新页面才能加载并显示。")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(278),alt:"image-20190723152124196"}})]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("所在节点监控")])])]),t._v(" "),s("p",[t._v("可查看所在节点的资源使用情况监控信息")])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(279),alt:"image-20190718104156232"}})]),t._v(" "),s("h3",{attrs:{id:"查看中间件层监控信息"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看中间件层监控信息","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看中间件层监控信息")]),t._v(" "),s("h4",{attrs:{id:"查看-nginx-监控"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-nginx-监控","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 Nginx 监控")]),t._v(" "),s("ul",[s("li",[t._v("点击 Nginx 监控")])]),t._v(" "),s("p",[s("img",{attrs:{src:e(280),alt:"image-20190718104729472"}})]),t._v(" "),s("h4",{attrs:{id:"查看-mysql-监控"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-mysql-监控","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 MySQL 监控")]),t._v(" "),s("ul",[s("li",[t._v("返回 "),s("em",[s("strong",[t._v("example")])]),t._v(" 名称空间")]),t._v(" "),s("li",[t._v("点击 "),s("em",[s("strong",[t._v("持久层 / example db")])])]),t._v(" "),s("li",[t._v("点击 "),s("em",[s("strong",[t._v("MySQL 监控")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(281),alt:"image-20190718105420599"}})]),t._v(" "),s("h4",{attrs:{id:"查看-jvm-监控"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-jvm-监控","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 JVM 监控")]),t._v(" "),s("ul",[s("li",[t._v("返回 "),s("em",[s("strong",[t._v("example")])]),t._v(" 名称空间")]),t._v(" "),s("li",[t._v("点击 "),s("em",[s("strong",[t._v("微服务层 / example")])])]),t._v(" "),s("li",[t._v("点击 "),s("em",[s("strong",[t._v("Java 虚拟机监控")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(282),alt:"image-20190718105641651"}})]),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("微服务层 / example")])]),t._v(" 中点击 "),s("em",[s("strong",[t._v("链路追踪")])])])]),t._v(" "),s("p",[s("img",{attrs:{src:e(283),alt:"image-20190718120957255"}})]),t._v(" "),s("p",[s("img",{attrs:{src:e(284),alt:"image-20190718121133160"}})])])},[],!1,null,null,null);a.default=i.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/31.15ae61c1.js b/docs/assets/js/31.c6fd3342.js similarity index 83% rename from docs/assets/js/31.15ae61c1.js rename to docs/assets/js/31.c6fd3342.js index 33f8d31..5df7bde 100644 --- a/docs/assets/js/31.15ae61c1.js +++ b/docs/assets/js/31.c6fd3342.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{332:function(t,r,a){t.exports=a.p+"assets/img/kuboard_qq.45e78dbf.png"},376:function(t,r,a){"use strict";a.r(r);var e=a(0),s=Object(e.a)({},function(){var t=this,r=t.$createElement,e=t._self._c||r;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"支持"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#支持","aria-hidden":"true"}},[t._v("#")]),t._v(" 支持")]),t._v(" "),e("h2",{attrs:{id:"提交-bug"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#提交-bug","aria-hidden":"true"}},[t._v("#")]),t._v(" 提交 BUG")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/shaohq/kuboard-issues/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("提交 BUG"),e("OutboundLink")],1),t._v(" 后,通常会在第二天得到 Kuboard 作者的答复。")]),t._v(" "),e("h2",{attrs:{id:"在线提问"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#在线提问","aria-hidden":"true"}},[t._v("#")]),t._v(" 在线提问")]),t._v(" "),e("p",[t._v("QQ 群")]),t._v(" "),e("p",[e("img",{attrs:{src:a(332),alt:"kuboard_qq"}})])])},[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{326:function(t,r,a){t.exports=a.p+"assets/img/kuboard_qq.45e78dbf.png"},398:function(t,r,a){"use strict";a.r(r);var e=a(0),s=Object(e.a)({},function(){var t=this,r=t.$createElement,e=t._self._c||r;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"支持"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#支持","aria-hidden":"true"}},[t._v("#")]),t._v(" 支持")]),t._v(" "),e("h2",{attrs:{id:"提交-bug"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#提交-bug","aria-hidden":"true"}},[t._v("#")]),t._v(" 提交 BUG")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://github.com/shaohq/kuboard-issues/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("提交 BUG"),e("OutboundLink")],1),t._v(" 后,通常会在第二天得到 Kuboard 作者的答复。")]),t._v(" "),e("h2",{attrs:{id:"在线提问"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#在线提问","aria-hidden":"true"}},[t._v("#")]),t._v(" 在线提问")]),t._v(" "),e("p",[t._v("QQ 群")]),t._v(" "),e("p",[e("img",{attrs:{src:a(326),alt:"kuboard_qq"}})])])},[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/34.a35b82ff.js b/docs/assets/js/34.638cc37d.js similarity index 92% rename from docs/assets/js/34.a35b82ff.js rename to docs/assets/js/34.638cc37d.js index 344427a..7a66466 100644 --- a/docs/assets/js/34.a35b82ff.js +++ b/docs/assets/js/34.638cc37d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{370:function(t,e,r){"use strict";r.r(e);var s=r(0),a=Object(s.a)({},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"kubernetes-devops"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-devops","aria-hidden":"true"}},[t._v("#")]),t._v(" Kubernetes + DevOps")]),t._v(" "),r("p",[t._v("如何继承 DevOps ?")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://www.wjx.top/jq/43453748.aspx",target:"_blank",rel:"noopener noreferrer"}},[t._v("文档准备好后,请通知我"),r("OutboundLink")],1)]),t._v(" "),r("div",[r("script",{attrs:{type:"text/javascript",src:"https://www.wjx.top/handler/jqemed.ashx?activity=43453748&width=760&source=iframe"}})])])},[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{394:function(t,e,r){"use strict";r.r(e);var s=r(0),a=Object(s.a)({},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"kubernetes-devops"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-devops","aria-hidden":"true"}},[t._v("#")]),t._v(" Kubernetes + DevOps")]),t._v(" "),r("p",[t._v("如何继承 DevOps ?")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://www.wjx.top/jq/43453748.aspx",target:"_blank",rel:"noopener noreferrer"}},[t._v("文档准备好后,请通知我"),r("OutboundLink")],1)]),t._v(" "),r("div",[r("script",{attrs:{type:"text/javascript",src:"https://www.wjx.top/handler/jqemed.ashx?activity=43453748&width=760&source=iframe"}})])])},[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/35.f0dbd389.js b/docs/assets/js/35.2886039d.js similarity index 96% rename from docs/assets/js/35.f0dbd389.js rename to docs/assets/js/35.2886039d.js index c6144e7..4640d42 100644 --- a/docs/assets/js/35.f0dbd389.js +++ b/docs/assets/js/35.2886039d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{377:function(e,t,r){"use strict";r.r(t);var a=r(0),s=Object(a.a)({},function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"使用手册"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#使用手册","aria-hidden":"true"}},[e._v("#")]),e._v(" 使用手册")]),e._v(" "),r("p",[r("strong",[e._v("Kuboard 的设计目标")])]),e._v(" "),r("ul",[r("li",[e._v("降低 Kubernetes 学习门槛,让初学者先把 Kubernetes 用起来,再逐步理解 Kubernetes 中的各种概念")]),e._v(" "),r("li",[e._v("提高 Kubernetes 运维的便捷性,让资深 Kubernetes 运维人员脱离 kubectl 命令行,直接在 Kuboard 界面中完成日常运维工作")])]),e._v(" "),r("p",[r("strong",[e._v("熟悉 Kuboard 的最佳途径")])]),e._v(" "),r("ul",[r("li",[r("p",[e._v("创建一个最简单的工作负载")]),e._v(" "),r("p",[r("a",{attrs:{href:"example/busybox"}},[e._v("创建 busybox")])])]),e._v(" "),r("li",[r("p",[e._v("导入一套最简单的 Spring Cloud 微服务工作负载")]),e._v(" "),r("p",[r("a",{attrs:{href:"example/import"}},[e._v("导入 example")])])]),e._v(" "),r("li",[r("p",[e._v("根据微服务上下文查看监控结果")]),e._v(" "),r("p",[r("a",{attrs:{href:"example/monitor"}},[e._v("在微服务上下文中监控 example")]),e._v(" "),r("Badge",{attrs:{text:"alpha",type:"warn"}})],1)])]),e._v(" "),r("p",[r("strong",[e._v("Kuboard 可用于")])]),e._v(" "),r("ul",[r("li",[e._v("管理 Kubernetes 集群")]),e._v(" "),r("li",[e._v("管理部署于 Kubernetes 的微服务")]),e._v(" "),r("li",[e._v("诊断集群中的问题")]),e._v(" "),r("li",[e._v("监控部署于 Kubernetes 的微服务")])])])},[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{370:function(e,t,r){"use strict";r.r(t);var a=r(0),s=Object(a.a)({},function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"使用手册"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#使用手册","aria-hidden":"true"}},[e._v("#")]),e._v(" 使用手册")]),e._v(" "),r("p",[r("strong",[e._v("Kuboard 的设计目标")])]),e._v(" "),r("ul",[r("li",[e._v("降低 Kubernetes 学习门槛,让初学者先把 Kubernetes 用起来,再逐步理解 Kubernetes 中的各种概念")]),e._v(" "),r("li",[e._v("提高 Kubernetes 运维的便捷性,让资深 Kubernetes 运维人员脱离 kubectl 命令行,直接在 Kuboard 界面中完成日常运维工作")])]),e._v(" "),r("p",[r("strong",[e._v("熟悉 Kuboard 的最佳途径")])]),e._v(" "),r("ul",[r("li",[r("p",[e._v("创建一个最简单的工作负载")]),e._v(" "),r("p",[r("a",{attrs:{href:"example/busybox"}},[e._v("创建 busybox")])])]),e._v(" "),r("li",[r("p",[e._v("导入一套最简单的 Spring Cloud 微服务工作负载")]),e._v(" "),r("p",[r("a",{attrs:{href:"example/import"}},[e._v("导入 example")])])]),e._v(" "),r("li",[r("p",[e._v("根据微服务上下文查看监控结果")]),e._v(" "),r("p",[r("a",{attrs:{href:"example/monitor"}},[e._v("在微服务上下文中监控 example")]),e._v(" "),r("Badge",{attrs:{text:"alpha",type:"warn"}})],1)])]),e._v(" "),r("p",[r("strong",[e._v("Kuboard 可用于")])]),e._v(" "),r("ul",[r("li",[e._v("管理 Kubernetes 集群")]),e._v(" "),r("li",[e._v("管理部署于 Kubernetes 的微服务")]),e._v(" "),r("li",[e._v("诊断集群中的问题")]),e._v(" "),r("li",[e._v("监控部署于 Kubernetes 的微服务")])])])},[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/36.c18cd9ce.js b/docs/assets/js/36.99a592e7.js similarity index 98% rename from docs/assets/js/36.c18cd9ce.js rename to docs/assets/js/36.99a592e7.js index 56949d0..816d22e 100644 --- a/docs/assets/js/36.c18cd9ce.js +++ b/docs/assets/js/36.99a592e7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{396:function(t,v,_){"use strict";_.r(v);var r=_(0),e=Object(r.a)({},function(){var t=this,v=t.$createElement,_=t._self._c||v;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("微服务环境中,各个服务都通过 TCP / UDP 端口的形式提供访问。按调用者所在位置、通信协议的形式来划分,大致有如下几种情况:")]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[t._v("调用者所在位置")]),t._v(" "),_("th",[t._v("通信协议")]),t._v(" "),_("th",[t._v("临时性")]),t._v(" "),_("th",[t._v("常见场景")]),t._v(" "),_("th",[t._v("推荐配置方式")])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("VPC外")]),t._v(" "),_("td",[t._v("http / https")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[t._v("用户从互联网(亦可能是公司内网)"),_("br"),t._v("访问 web 页面,或者 restful 接口")]),t._v(" "),_("td",[t._v("Kubernetes Ingress"),_("br"),t._v("(可在Kuboard中直接配置 "),_("em",[_("strong",[t._v("互联网入口")])]),t._v(" )")])]),t._v(" "),_("tr",[_("td",[t._v("VPC外")]),t._v(" "),_("td",[t._v("tcp / udp")]),t._v(" "),_("td",[t._v("临时性")]),t._v(" "),_("td",[t._v("例如,开发者临时需要访问数据库端口、Redis端口等;")]),t._v(" "),_("td",[t._v("在客户端所在机器配置 kubectl,"),_("br"),t._v("并"),_("span",{staticStyle:{color:"#F56C6C"}},[t._v("通过 kubectl port-forwad 进行端口转发")])])]),t._v(" "),_("tr",[_("td",[t._v("VPC外")]),t._v(" "),_("td",[t._v("tcp / udp")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[t._v("暂不讨论")]),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("VPC内/集群外")]),t._v(" "),_("td",[t._v("http / https")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[t._v("通过接口网关为周边系统提供服务")]),t._v(" "),_("td",[t._v("Kubernetes Service NodePort"),_("br"),t._v("(可在Kuboard中直接配置 "),_("em",[_("strong",[t._v("访问方式/VPC内访问")])]),t._v(" )")])]),t._v(" "),_("tr",[_("td",[t._v("VPC内/集群外")]),t._v(" "),_("td",[t._v("tcp / udp")]),t._v(" "),_("td",[t._v("同上")]),t._v(" "),_("td",[t._v("同上")]),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("集群内")]),t._v(" "),_("td",[t._v("http / https")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[_("strong",[t._v("场景1")]),t._v(":Web层访问微服务网关"),_("br"),t._v(" "),_("strong",[t._v("场景2")]),t._v(":微服务网关调用微服务,微服务之间的互相调用等。")]),t._v(" "),_("td",[_("strong",[t._v("场景1")]),t._v(":Kubernetes Service ClusterIP "),_("br"),t._v("(可在Kuboard中直接配置 "),_("em",[_("strong",[t._v("访问方式/集群内访问")])]),t._v(" )"),_("br"),t._v(" "),_("strong",[t._v("场景2")]),t._v(":Spring Cloud中使用Eureka/Consul等服务发现"),_("br"),t._v("(Kuboard中 "),_("em",[_("strong",[t._v("访问方式/不配置")])]),t._v(" )")])]),t._v(" "),_("tr",[_("td",[t._v("集群内")]),t._v(" "),_("td",[t._v("tcp / udp")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[t._v("微服务访问数据库、微服务访问Redis等")]),t._v(" "),_("td",[t._v("Kubernetes Service ClusterIP "),_("br"),t._v("(可在Kuboard中直接配置 "),_("em",[_("strong",[t._v("访问方式/集群内访问")])]),t._v(" )")])])])]),t._v(" "),_("h2",{attrs:{id:"feature-planned"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#feature-planned","aria-hidden":"true"}},[t._v("#")]),t._v(" Feature planned")]),t._v(" "),_("p",[t._v("在作者使用 Kuboard 的运维实践中,有如下两个场景不能脱离 kubeadm / kubectl 命令行:")]),t._v(" "),_("ul",[_("li",[t._v("初始化集群 / 向集群添加节点")]),t._v(" "),_("li",[t._v("开发者临时需要访问数据库端口、Redis端口时,通过 kubectl port-forward 进行端口转发")])]),t._v(" "),_("p",[t._v("Kuboard 计划实现类似 kubectl port-forward 的功能,提高问题诊断过程中的便利性。")])])},[],!1,null,null,null);v.default=e.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{373:function(t,v,_){"use strict";_.r(v);var r=_(0),e=Object(r.a)({},function(){var t=this,v=t.$createElement,_=t._self._c||v;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("微服务环境中,各个服务都通过 TCP / UDP 端口的形式提供访问。按调用者所在位置、通信协议的形式来划分,大致有如下几种情况:")]),t._v(" "),_("table",[_("thead",[_("tr",[_("th",[t._v("调用者所在位置")]),t._v(" "),_("th",[t._v("通信协议")]),t._v(" "),_("th",[t._v("临时性")]),t._v(" "),_("th",[t._v("常见场景")]),t._v(" "),_("th",[t._v("推荐配置方式")])])]),t._v(" "),_("tbody",[_("tr",[_("td",[t._v("VPC外")]),t._v(" "),_("td",[t._v("http / https")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[t._v("用户从互联网(亦可能是公司内网)"),_("br"),t._v("访问 web 页面,或者 restful 接口")]),t._v(" "),_("td",[t._v("Kubernetes Ingress"),_("br"),t._v("(可在Kuboard中直接配置 "),_("em",[_("strong",[t._v("互联网入口")])]),t._v(" )")])]),t._v(" "),_("tr",[_("td",[t._v("VPC外")]),t._v(" "),_("td",[t._v("tcp / udp")]),t._v(" "),_("td",[t._v("临时性")]),t._v(" "),_("td",[t._v("例如,开发者临时需要访问数据库端口、Redis端口等;")]),t._v(" "),_("td",[t._v("在客户端所在机器配置 kubectl,"),_("br"),t._v("并"),_("span",{staticStyle:{color:"#F56C6C"}},[t._v("通过 kubectl port-forwad 进行端口转发")])])]),t._v(" "),_("tr",[_("td",[t._v("VPC外")]),t._v(" "),_("td",[t._v("tcp / udp")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[t._v("暂不讨论")]),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("VPC内/集群外")]),t._v(" "),_("td",[t._v("http / https")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[t._v("通过接口网关为周边系统提供服务")]),t._v(" "),_("td",[t._v("Kubernetes Service NodePort"),_("br"),t._v("(可在Kuboard中直接配置 "),_("em",[_("strong",[t._v("访问方式/VPC内访问")])]),t._v(" )")])]),t._v(" "),_("tr",[_("td",[t._v("VPC内/集群外")]),t._v(" "),_("td",[t._v("tcp / udp")]),t._v(" "),_("td",[t._v("同上")]),t._v(" "),_("td",[t._v("同上")]),t._v(" "),_("td")]),t._v(" "),_("tr",[_("td",[t._v("集群内")]),t._v(" "),_("td",[t._v("http / https")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[_("strong",[t._v("场景1")]),t._v(":Web层访问微服务网关"),_("br"),t._v(" "),_("strong",[t._v("场景2")]),t._v(":微服务网关调用微服务,微服务之间的互相调用等。")]),t._v(" "),_("td",[_("strong",[t._v("场景1")]),t._v(":Kubernetes Service ClusterIP "),_("br"),t._v("(可在Kuboard中直接配置 "),_("em",[_("strong",[t._v("访问方式/集群内访问")])]),t._v(" )"),_("br"),t._v(" "),_("strong",[t._v("场景2")]),t._v(":Spring Cloud中使用Eureka/Consul等服务发现"),_("br"),t._v("(Kuboard中 "),_("em",[_("strong",[t._v("访问方式/不配置")])]),t._v(" )")])]),t._v(" "),_("tr",[_("td",[t._v("集群内")]),t._v(" "),_("td",[t._v("tcp / udp")]),t._v(" "),_("td",[t._v("日常性")]),t._v(" "),_("td",[t._v("微服务访问数据库、微服务访问Redis等")]),t._v(" "),_("td",[t._v("Kubernetes Service ClusterIP "),_("br"),t._v("(可在Kuboard中直接配置 "),_("em",[_("strong",[t._v("访问方式/集群内访问")])]),t._v(" )")])])])]),t._v(" "),_("h2",{attrs:{id:"feature-planned"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#feature-planned","aria-hidden":"true"}},[t._v("#")]),t._v(" Feature planned")]),t._v(" "),_("p",[t._v("在作者使用 Kuboard 的运维实践中,有如下两个场景不能脱离 kubeadm / kubectl 命令行:")]),t._v(" "),_("ul",[_("li",[t._v("初始化集群 / 向集群添加节点")]),t._v(" "),_("li",[t._v("开发者临时需要访问数据库端口、Redis端口时,通过 kubectl port-forward 进行端口转发")])]),t._v(" "),_("p",[t._v("Kuboard 计划实现类似 kubectl port-forward 的功能,提高问题诊断过程中的便利性。")])])},[],!1,null,null,null);v.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/37.b9bbffc9.js b/docs/assets/js/37.15829647.js similarity index 93% rename from docs/assets/js/37.b9bbffc9.js rename to docs/assets/js/37.15829647.js index 41213ff..a4e8355 100644 --- a/docs/assets/js/37.b9bbffc9.js +++ b/docs/assets/js/37.15829647.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{366:function(t,a,e){"use strict";e.r(a);var r=e(0),l=Object(r.a)({},function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"监控套件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#监控套件","aria-hidden":"true"}},[t._v("#")]),t._v(" 监控套件 "),e("Badge",{attrs:{text:"alpha",type:"warn"}})],1),t._v(" "),e("p",[t._v("文档建设中...")]),t._v(" "),e("blockquote",[e("ul",[e("li",[t._v("请参考 "),e("a",{attrs:{href:"/guide/example/monitor"}},[t._v("监控 example")]),t._v(" "),e("Badge",{attrs:{text:"alpha",type:"warn"}}),t._v(" 体验 Kuboard 在监控套件方面的设想")],1),t._v(" "),e("li",[t._v("监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作")])])])])},[],!1,null,null,null);a.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{365:function(t,a,e){"use strict";e.r(a);var r=e(0),l=Object(r.a)({},function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"监控套件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#监控套件","aria-hidden":"true"}},[t._v("#")]),t._v(" 监控套件 "),e("Badge",{attrs:{text:"alpha",type:"warn"}})],1),t._v(" "),e("p",[t._v("文档建设中...")]),t._v(" "),e("blockquote",[e("ul",[e("li",[t._v("请参考 "),e("a",{attrs:{href:"/guide/example/monitor"}},[t._v("监控 example")]),t._v(" "),e("Badge",{attrs:{text:"alpha",type:"warn"}}),t._v(" 体验 Kuboard 在监控套件方面的设想")],1),t._v(" "),e("li",[t._v("监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作")])])])])},[],!1,null,null,null);a.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/38.c75f623c.js b/docs/assets/js/38.d769f9c2.js similarity index 93% rename from docs/assets/js/38.c75f623c.js rename to docs/assets/js/38.d769f9c2.js index 9eaf05f..f4c8607 100644 --- a/docs/assets/js/38.c75f623c.js +++ b/docs/assets/js/38.d769f9c2.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{372:function(t,a,e){"use strict";e.r(a);var r=e(0),l=Object(r.a)({},function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"自定义监控套件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#自定义监控套件","aria-hidden":"true"}},[t._v("#")]),t._v(" 自定义监控套件 "),e("Badge",{attrs:{text:"alpha",type:"warn"}})],1),t._v(" "),e("p",[t._v("文档建设中...")]),t._v(" "),e("blockquote",[e("ul",[e("li",[t._v("请参考 "),e("a",{attrs:{href:"/guide/example/monitor"}},[t._v("监控 example")]),t._v(" "),e("Badge",{attrs:{text:"alpha",type:"warn"}}),t._v(" 体验 Kuboard 在监控套件方面的设想")],1),t._v(" "),e("li",[t._v("监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作")])])])])},[],!1,null,null,null);a.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{364:function(t,a,e){"use strict";e.r(a);var r=e(0),l=Object(r.a)({},function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"自定义监控套件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#自定义监控套件","aria-hidden":"true"}},[t._v("#")]),t._v(" 自定义监控套件 "),e("Badge",{attrs:{text:"alpha",type:"warn"}})],1),t._v(" "),e("p",[t._v("文档建设中...")]),t._v(" "),e("blockquote",[e("ul",[e("li",[t._v("请参考 "),e("a",{attrs:{href:"/guide/example/monitor"}},[t._v("监控 example")]),t._v(" "),e("Badge",{attrs:{text:"alpha",type:"warn"}}),t._v(" 体验 Kuboard 在监控套件方面的设想")],1),t._v(" "),e("li",[t._v("监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作")])])])])},[],!1,null,null,null);a.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/39.7e92c81d.js b/docs/assets/js/39.722b7242.js similarity index 96% rename from docs/assets/js/39.7e92c81d.js rename to docs/assets/js/39.722b7242.js index 5367b88..bdf2629 100644 --- a/docs/assets/js/39.7e92c81d.js +++ b/docs/assets/js/39.722b7242.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{374:function(a,t,r){"use strict";r.r(t);var e=r(0),s=Object(e.a)({},function(){var a=this,t=a.$createElement,r=a._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[r("h1",{attrs:{id:"应用管理"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#应用管理","aria-hidden":"true"}},[a._v("#")]),a._v(" 应用管理")]),a._v(" "),r("h2",{attrs:{id:"创建工作负载"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建工作负载","aria-hidden":"true"}},[a._v("#")]),a._v(" 创建工作负载")]),a._v(" "),r("h2",{attrs:{id:"删除工作负载"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#删除工作负载","aria-hidden":"true"}},[a._v("#")]),a._v(" 删除工作负载")]),a._v(" "),r("h2",{attrs:{id:"伸缩"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#伸缩","aria-hidden":"true"}},[a._v("#")]),a._v(" 伸缩")]),a._v(" "),r("h2",{attrs:{id:"升级工作负载版本"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#升级工作负载版本","aria-hidden":"true"}},[a._v("#")]),a._v(" 升级工作负载版本")]),a._v(" "),r("h2",{attrs:{id:"环境迁移"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#环境迁移","aria-hidden":"true"}},[a._v("#")]),a._v(" 环境迁移")]),a._v(" "),r("h3",{attrs:{id:"导出"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#导出","aria-hidden":"true"}},[a._v("#")]),a._v(" 导出")]),a._v(" "),r("h3",{attrs:{id:"导入"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#导入","aria-hidden":"true"}},[a._v("#")]),a._v(" 导入")])])},[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{371:function(a,t,r){"use strict";r.r(t);var e=r(0),s=Object(e.a)({},function(){var a=this,t=a.$createElement,r=a._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[r("h1",{attrs:{id:"应用管理"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#应用管理","aria-hidden":"true"}},[a._v("#")]),a._v(" 应用管理")]),a._v(" "),r("h2",{attrs:{id:"创建工作负载"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建工作负载","aria-hidden":"true"}},[a._v("#")]),a._v(" 创建工作负载")]),a._v(" "),r("h2",{attrs:{id:"删除工作负载"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#删除工作负载","aria-hidden":"true"}},[a._v("#")]),a._v(" 删除工作负载")]),a._v(" "),r("h2",{attrs:{id:"伸缩"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#伸缩","aria-hidden":"true"}},[a._v("#")]),a._v(" 伸缩")]),a._v(" "),r("h2",{attrs:{id:"升级工作负载版本"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#升级工作负载版本","aria-hidden":"true"}},[a._v("#")]),a._v(" 升级工作负载版本")]),a._v(" "),r("h2",{attrs:{id:"环境迁移"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#环境迁移","aria-hidden":"true"}},[a._v("#")]),a._v(" 环境迁移")]),a._v(" "),r("h3",{attrs:{id:"导出"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#导出","aria-hidden":"true"}},[a._v("#")]),a._v(" 导出")]),a._v(" "),r("h3",{attrs:{id:"导入"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#导入","aria-hidden":"true"}},[a._v("#")]),a._v(" 导入")])])},[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/40.86bf7b32.js b/docs/assets/js/40.ac5bf3e7.js similarity index 98% rename from docs/assets/js/40.86bf7b32.js rename to docs/assets/js/40.ac5bf3e7.js index 31888cb..248e6dd 100644 --- a/docs/assets/js/40.86bf7b32.js +++ b/docs/assets/js/40.ac5bf3e7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{382:function(e,r,s){"use strict";s.r(r);var t=s(0),a=Object(t.a)({},function(){var e=this,r=e.$createElement,s=e._self._c||r;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h2",{attrs:{id:"安装-ingress-controller"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[e._v("#")]),e._v(" 安装 Ingress Controller")]),e._v(" "),s("blockquote",[s("p",[e._v("ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),e._v(" "),s("p",[e._v("Ingress Controllers官网介绍:"),s("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/"),s("OutboundLink")],1)]),e._v(" "),s("p",[e._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),e._v(" "),s("p",[e._v("kubernetes支持多种Ingress Controllers,本文推荐使用")]),e._v(" "),s("p",[e._v("https://github.com/nginxinc/kubernetes-ingress")])]),e._v(" "),s("h3",{attrs:{id:"在-apple-master-a-1-上执行"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#在-apple-master-a-1-上执行","aria-hidden":"true"}},[e._v("#")]),e._v(" 在 apple-master-a-1 上执行")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("su")]),e._v(" - gitlab-runner\nkubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),s("h3",{attrs:{id:"在iaas云控制台完成如下配置(公网elb)"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#在iaas云控制台完成如下配置(公网elb)","aria-hidden":"true"}},[e._v("#")]),e._v(" 在IaaS云控制台完成如下配置("),s("strong",[e._v("公网ELB")]),e._v(")")]),e._v(" "),s("p",[e._v("创建负载均衡 ELB:")]),e._v(" "),s("p",[e._v("​ 监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持")]),e._v(" "),s("p",[e._v("​ 服务器资源池 1: apple-worker-x-x 的所有节点的 80端口")]),e._v(" "),s("p",[e._v("​ 监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持")]),e._v(" "),s("p",[e._v("​ 服务器资源池 2: apple-worker-x-x 的所有节点的443端口")]),e._v(" "),s("p",[e._v("假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z")]),e._v(" "),s("h3",{attrs:{id:"配置域名解析"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置域名解析","aria-hidden":"true"}},[e._v("#")]),e._v(" 配置域名解析")]),e._v(" "),s("p",[e._v("将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z")]),e._v(" "),s("h3",{attrs:{id:"验证配置"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#验证配置","aria-hidden":"true"}},[e._v("#")]),e._v(" 验证配置")]),e._v(" "),s("p",[e._v("在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面")])])},[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{384:function(e,r,s){"use strict";s.r(r);var t=s(0),a=Object(t.a)({},function(){var e=this,r=e.$createElement,s=e._self._c||r;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h2",{attrs:{id:"安装-ingress-controller"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[e._v("#")]),e._v(" 安装 Ingress Controller")]),e._v(" "),s("blockquote",[s("p",[e._v("ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),e._v(" "),s("p",[e._v("Ingress Controllers官网介绍:"),s("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/",target:"_blank",rel:"noopener noreferrer"}},[e._v("https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/"),s("OutboundLink")],1)]),e._v(" "),s("p",[e._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),e._v(" "),s("p",[e._v("kubernetes支持多种Ingress Controllers,本文推荐使用")]),e._v(" "),s("p",[e._v("https://github.com/nginxinc/kubernetes-ingress")])]),e._v(" "),s("h3",{attrs:{id:"在-apple-master-a-1-上执行"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#在-apple-master-a-1-上执行","aria-hidden":"true"}},[e._v("#")]),e._v(" 在 apple-master-a-1 上执行")]),e._v(" "),s("div",{staticClass:"language-bash extra-class"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[e._v("su")]),e._v(" - gitlab-runner\nkubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),s("h3",{attrs:{id:"在iaas云控制台完成如下配置(公网elb)"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#在iaas云控制台完成如下配置(公网elb)","aria-hidden":"true"}},[e._v("#")]),e._v(" 在IaaS云控制台完成如下配置("),s("strong",[e._v("公网ELB")]),e._v(")")]),e._v(" "),s("p",[e._v("创建负载均衡 ELB:")]),e._v(" "),s("p",[e._v("​ 监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持")]),e._v(" "),s("p",[e._v("​ 服务器资源池 1: apple-worker-x-x 的所有节点的 80端口")]),e._v(" "),s("p",[e._v("​ 监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持")]),e._v(" "),s("p",[e._v("​ 服务器资源池 2: apple-worker-x-x 的所有节点的443端口")]),e._v(" "),s("p",[e._v("假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z")]),e._v(" "),s("h3",{attrs:{id:"配置域名解析"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#配置域名解析","aria-hidden":"true"}},[e._v("#")]),e._v(" 配置域名解析")]),e._v(" "),s("p",[e._v("将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z")]),e._v(" "),s("h3",{attrs:{id:"验证配置"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#验证配置","aria-hidden":"true"}},[e._v("#")]),e._v(" 验证配置")]),e._v(" "),s("p",[e._v("在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面")])])},[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/41.9ba8deb2.js b/docs/assets/js/41.31c3cf0b.js similarity index 87% rename from docs/assets/js/41.9ba8deb2.js rename to docs/assets/js/41.31c3cf0b.js index ed3eada..fba1563 100644 --- a/docs/assets/js/41.9ba8deb2.js +++ b/docs/assets/js/41.31c3cf0b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{392:function(t,e,s){"use strict";s.r(e);var r=s(0),n=Object(r.a)({},function(){var t=this.$createElement,e=this._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"创建-kube-dns-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#创建-kube-dns-service","aria-hidden":"true"}},[this._v("#")]),this._v(" 创建 kube-dns Service")])])},[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{390:function(t,e,s){"use strict";s.r(e);var r=s(0),n=Object(r.a)({},function(){var t=this.$createElement,e=this._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"创建-kube-dns-service"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#创建-kube-dns-service","aria-hidden":"true"}},[this._v("#")]),this._v(" 创建 kube-dns Service")])])},[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/42.74be8f5e.js b/docs/assets/js/42.113effc0.js similarity index 98% rename from docs/assets/js/42.74be8f5e.js rename to docs/assets/js/42.113effc0.js index 0ea8262..a570450 100644 --- a/docs/assets/js/42.74be8f5e.js +++ b/docs/assets/js/42.113effc0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{390:function(n,s,e){"use strict";e.r(s);var a=e(0),t=Object(a.a)({},function(){var n=this,s=n.$createElement,e=n._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":n.$parent.slotKey}},[e("h1",{attrs:{id:"安装-kuboard-失败时如何诊断"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装-kuboard-失败时如何诊断","aria-hidden":"true"}},[n._v("#")]),n._v(" 安装 Kuboard 失败时如何诊断")]),n._v(" "),e("p",[n._v("少数情况下,您可能会碰到安装 Kuboard 失败的情况,请按照如下步骤进行诊断")]),n._v(" "),e("h2",{attrs:{id:"诊断步骤"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#诊断步骤","aria-hidden":"true"}},[n._v("#")]),n._v(" 诊断步骤")]),n._v(" "),e("p",[e("strong",[n._v("检查 Kuboard 容器组状态")])]),n._v(" "),e("p",[n._v("执行命令")]),n._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[n._v("kubectl get pods -n kube-system\n")])])]),e("p",[n._v("输出结果如下所示:")]),n._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[n._v("NAME READY STATUS RESTARTS AGE\ncalico-kube-controllers-7c4d64d599-67hkh "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("0")]),n._v(" 13h\ncalico-node-9sf77 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\ncalico-node-p8sxb "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("2")]),n._v(" 8d\ncalico-node-w472g "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\ncoredns-5c98db65d4-9hwnj "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\ncoredns-5c98db65d4-dr86j "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\netcd-demo-master-a-1 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkube-apiserver-demo-master-a-1 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkube-controller-manager-demo-master-a-1 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkube-proxy-4tfrx "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("2")]),n._v(" 8d\nkube-proxy-ps676 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("2")]),n._v(" 8d\nkube-proxy-x8v4p "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkube-scheduler-demo-master-a-1 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkuboard-7bb8d57995-nkqzw "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("0")]),n._v(" 2d20h\n")])])]),e("div",{staticClass:"tip custom-block"},[e("p",[n._v("根据 Kubernetes 安装方式不同、节点数量不同,您得到的输出结果会与样例结果有差异")]),n._v(" "),e("p",[n._v("请对结果做如下检查:")]),n._v(" "),e("ul",[e("li",[n._v("kuboard-xxxxxxxxxx-xxxxx 的 STATUS 是否为 Runnning")])])]),n._v(" "),e("p",[e("strong",[n._v("检查 Kuboard 容器组日志")])]),n._v(" "),e("p",[n._v("执行命令,请使用实际 kuboard 容器组的名称替换命令中的 kuboard-xxxxxxxxxx-xxxxx")]),n._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[n._v("kubectl logs -f kuboard-xxxxxxxxxx-xxxxx -n kube-system\n")])])]),e("p",[n._v('如果您得到如下错误信息: host not found in resolver "kube-dns.kube-system.svc.cluster.local"')]),n._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[n._v('2019/07/26 23:09:33 [emerg] 1#1: host not found in resolver "kube-dns.kube-system.svc.cluster.local" in /etc/nginx/conf.d/nginx.80.conf:36\nnginx: [emerg] host not found in resolver "kube-dns.kube-system.svc.cluster.local" in /etc/nginx/conf.d/nginx.80.conf:36\n')])])]),e("p",[n._v("请 "),e("a",{attrs:{href:"install-dashboard-diagonize-kube-dns"}},[n._v("创建 kube-dns Service")])])])},[],!1,null,null,null);s.default=t.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{392:function(n,s,e){"use strict";e.r(s);var a=e(0),t=Object(a.a)({},function(){var n=this,s=n.$createElement,e=n._self._c||s;return e("ContentSlotsDistributor",{attrs:{"slot-key":n.$parent.slotKey}},[e("h1",{attrs:{id:"安装-kuboard-失败时如何诊断"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装-kuboard-失败时如何诊断","aria-hidden":"true"}},[n._v("#")]),n._v(" 安装 Kuboard 失败时如何诊断")]),n._v(" "),e("p",[n._v("少数情况下,您可能会碰到安装 Kuboard 失败的情况,请按照如下步骤进行诊断")]),n._v(" "),e("h2",{attrs:{id:"诊断步骤"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#诊断步骤","aria-hidden":"true"}},[n._v("#")]),n._v(" 诊断步骤")]),n._v(" "),e("p",[e("strong",[n._v("检查 Kuboard 容器组状态")])]),n._v(" "),e("p",[n._v("执行命令")]),n._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[n._v("kubectl get pods -n kube-system\n")])])]),e("p",[n._v("输出结果如下所示:")]),n._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[n._v("NAME READY STATUS RESTARTS AGE\ncalico-kube-controllers-7c4d64d599-67hkh "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("0")]),n._v(" 13h\ncalico-node-9sf77 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\ncalico-node-p8sxb "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("2")]),n._v(" 8d\ncalico-node-w472g "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\ncoredns-5c98db65d4-9hwnj "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\ncoredns-5c98db65d4-dr86j "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\netcd-demo-master-a-1 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkube-apiserver-demo-master-a-1 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkube-controller-manager-demo-master-a-1 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkube-proxy-4tfrx "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("2")]),n._v(" 8d\nkube-proxy-ps676 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("2")]),n._v(" 8d\nkube-proxy-x8v4p "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkube-scheduler-demo-master-a-1 "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("3")]),n._v(" 8d\nkuboard-7bb8d57995-nkqzw "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("1")]),n._v("/1 Running "),e("span",{pre:!0,attrs:{class:"token number"}},[n._v("0")]),n._v(" 2d20h\n")])])]),e("div",{staticClass:"tip custom-block"},[e("p",[n._v("根据 Kubernetes 安装方式不同、节点数量不同,您得到的输出结果会与样例结果有差异")]),n._v(" "),e("p",[n._v("请对结果做如下检查:")]),n._v(" "),e("ul",[e("li",[n._v("kuboard-xxxxxxxxxx-xxxxx 的 STATUS 是否为 Runnning")])])]),n._v(" "),e("p",[e("strong",[n._v("检查 Kuboard 容器组日志")])]),n._v(" "),e("p",[n._v("执行命令,请使用实际 kuboard 容器组的名称替换命令中的 kuboard-xxxxxxxxxx-xxxxx")]),n._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[n._v("kubectl logs -f kuboard-xxxxxxxxxx-xxxxx -n kube-system\n")])])]),e("p",[n._v('如果您得到如下错误信息: host not found in resolver "kube-dns.kube-system.svc.cluster.local"')]),n._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[n._v('2019/07/26 23:09:33 [emerg] 1#1: host not found in resolver "kube-dns.kube-system.svc.cluster.local" in /etc/nginx/conf.d/nginx.80.conf:36\nnginx: [emerg] host not found in resolver "kube-dns.kube-system.svc.cluster.local" in /etc/nginx/conf.d/nginx.80.conf:36\n')])])]),e("p",[n._v("请 "),e("a",{attrs:{href:"install-dashboard-diagonize-kube-dns"}},[n._v("创建 kube-dns Service")])])])},[],!1,null,null,null);s.default=t.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/5.018119fe.js b/docs/assets/js/5.1fe86328.js similarity index 85% rename from docs/assets/js/5.018119fe.js rename to docs/assets/js/5.1fe86328.js index 5e86ced..021053f 100644 --- a/docs/assets/js/5.018119fe.js +++ b/docs/assets/js/5.1fe86328.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{144:function(e,t,a){e.exports=a.p+"assets/img/image-20190723115721514.bf981ef3.png"},145:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121433809.7a1b4b00.png"},241:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120730196.9793d8ec.png"},242:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120753533.081b6d6b.png"},243:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120832778.e154bccd.png"},244:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120912377.e1404406.png"},245:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120926747.c9754776.png"},246:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120956821.69bcdbbe.png"},247:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121019167.81af1060.png"},248:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121035917.8a2b1320.png"},249:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121055648.2c6ba8d1.png"},250:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121117514.ef774d3a.png"},251:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121132991.69146097.png"},252:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121412027.6888452e.png"},253:function(e,t,a){e.exports=a.p+"assets/img/image-20190717193548703.5167e3b9.png"},368:function(e,t,a){"use strict";a.r(t);var r=a(0),s=Object(r.a)({},function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"导入-example-微服务"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#导入-example-微服务","aria-hidden":"true"}},[e._v("#")]),e._v(" 导入 example 微服务")]),e._v(" "),r("h2",{attrs:{id:"前提"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[e._v("#")]),e._v(" 前提")]),e._v(" "),r("p",[e._v("必须具备如下条件:")]),e._v(" "),r("ul",[r("li",[e._v("Kubernetes 集群 (安装在阿里云,本文将使用阿里云的 NFS 服务作为存储资源,Kuboard 也可以运行在其他云环境或者私有环境中。)")]),e._v(" "),r("li",[e._v("已在集群中安装 Kuboard")])]),e._v(" "),r("h2",{attrs:{id:"创建存储资源"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建存储资源","aria-hidden":"true"}},[e._v("#")]),e._v(" 创建存储资源")]),e._v(" "),r("p",[e._v("example中用到了存储卷声明,请在 Kuboard 中 "),r("a",{attrs:{href:"/guide/cluster/storage?id=%E5%88%9B%E5%BB%BA%E5%AD%98%E5%82%A8%E7%B1%BB"}},[e._v("创建存储类")]),e._v(" ,否则不能完成 example 的导入操作。")]),e._v(" "),r("h2",{attrs:{id:"创建名称空间"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建名称空间","aria-hidden":"true"}},[e._v("#")]),e._v(" 创建名称空间")]),e._v(" "),r("p",[e._v("创建新的名称空间,用来导入 exmaple。可参考 "),r("a",{attrs:{href:"/guide/cluster/namespace?id=%E5%88%9B%E5%BB%BA%E5%90%8D%E7%A7%B0%E7%A9%BA%E9%97%B4"}},[e._v("创建名称空间")])]),e._v(" "),r("p",[e._v("假设您已经进入了 Kuboard 名称空间界面,如下图所示:")]),e._v(" "),r("p",[r("img",{attrs:{src:a(144),alt:"image-20190723115721514"}})]),e._v(" "),r("h2",{attrs:{id:"导入-example"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#导入-example","aria-hidden":"true"}},[e._v("#")]),e._v(" 导入 example")]),e._v(" "),r("ul",[r("li",[e._v("下载 "),r("a",{attrs:{href:e.$withBase("/kuboard_example.yaml"),download:"kuboard_example.yaml"}},[e._v("kuboard_example.yaml")]),e._v(" 文件")])]),e._v(" "),r("blockquote",[r("p",[e._v("在 Kuboard 中,您无需手写 yaml 文件,此 yaml 文件的内容生成步骤如下:")]),e._v(" "),r("ul",[r("li",[e._v("通过 "),r("a",{attrs:{href:"busybox"}},[e._v("创建工作负载")]),e._v(" 完成微服务应用的部署")]),e._v(" "),r("li",[e._v("通过 "),r("strong",[e._v("导出工作负载")]),e._v(" 将名称空间中的微服务配置导出到一个 yaml 文件中")])])]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("导入工作负载")])]),e._v(" 按钮")])]),e._v(" "),r("p",[r("img",{attrs:{src:a(241),alt:"image-20190723120730196"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("上传文件")])]),e._v(" 按钮")]),e._v(" "),r("p",[e._v("并选择刚才下载的 export_example.yaml 文件")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(242),alt:"image-20190723120753533"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("默认选择所有的工作负载")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(243),alt:"image-20190723120832778"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("默认选择所有要导入的配置,example中没有使用到配置信息")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(244),alt:"image-20190723120912377"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("默认选择所有 Secrets")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(245),alt:"image-20190723120926747"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("填写表单:")])])]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("字段名称")]),e._v(" "),r("th",[e._v("填写内容")]),e._v(" "),r("th",[e._v("说明")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[e._v("数据卷类型")]),e._v(" "),r("td",[e._v("db-example-storage")]),e._v(" "),r("td",[e._v("NFS:容器组直连NFS"),r("br"),e._v("存储卷声明:容器组使用存储卷声明")])]),e._v(" "),r("tr",[r("td",[e._v("是否新建存储卷声明")]),e._v(" "),r("td",[e._v("创建新存储卷声明")]),e._v(" "),r("td",[e._v("使用已有存储卷声明:可以使用事先创建好的存储卷声明"),r("br"),e._v("创建新存储卷声明:可以创建新存储卷声明")])]),e._v(" "),r("tr",[r("td",[e._v("分配模式")]),e._v(" "),r("td",[e._v("动态分配")]),e._v(" "),r("td")]),e._v(" "),r("tr",[r("td",[e._v("读写模式")]),e._v(" "),r("td",[e._v("可被多节点读写")]),e._v(" "),r("td",[e._v("只能被单节点读写、可被多节点只读、可被多节点读写")])]),e._v(" "),r("tr",[r("td",[e._v("总量")]),e._v(" "),r("td",[e._v("2Gi")]),e._v(" "),r("td",[e._v("2Gi代表 2G空间")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(246),alt:"image-20190723120956821"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("填写表单:")])])]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("字段名称")]),e._v(" "),r("th",[e._v("填写内容")]),e._v(" "),r("th",[e._v("说明")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[e._v("cloud-eureka域名")]),e._v(" "),r("td",[e._v("cloud-eureka.example.demo.eip.work")]),e._v(" "),r("td",[e._v("使用您自己的域名,"),r("br"),e._v("在测试环境建议使用如下域名格式:"),r("br"),e._v("workloadname.namespace-name.cluster-name.domain.com"),r("br"),e._v("该域名应该解析到您worker节点的外网地址,或者worker 节点 80/443 端口对应负载均衡服务器的外网地址。")])]),e._v(" "),r("tr",[r("td",[e._v("web-example")]),e._v(" "),r("td",[e._v("web-example.example.demo.eip")]),e._v(" "),r("td")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(247),alt:"image-20190723121019167"}})]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(248),alt:"image-20190723121035917"}})]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("确定")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(249),alt:"image-20190723121055648"}})]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("应用")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(250),alt:"image-20190723121117514"}})]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("完成")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(251),alt:"image-20190723121132991"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("已完成")])])]),e._v(" "),r("p",[e._v("可再名称空间中查看到刚才导入的 example 的所有工作负载及存储卷声明")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(145),alt:"image-20190723121433809"}})]),e._v(" "),r("h2",{attrs:{id:"验证-web-example"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#验证-web-example","aria-hidden":"true"}},[e._v("#")]),e._v(" 验证 web-example")]),e._v(" "),r("ul",[r("li",[e._v("点击工作负载 "),r("em",[r("strong",[e._v("web-example")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(252),alt:"image-20190723121412027"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 互联网入口中的域名 "),r("em",[r("strong",[e._v("http://web-example.example.demo.eip.work")])])]),e._v(" "),r("p",[r("strong",[e._v("Example 部署成功")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(253),alt:"image-20190717193548703"}})]),e._v(" "),r("blockquote",[r("p",[e._v("web-example容器的日志中会出现如下异常,错误原因是,example使用了一个监控套件,该监控套件要求将容器注册到monitor-eureka中,当下我们并没有安装该监控套件。此错误并不影响 example 程序的使用。暂时忽略该异常。")]),e._v(" "),r("div",{staticClass:"language- extra-class"},[r("pre",{pre:!0,attrs:{class:"language-text"}},[r("code",[e._v("[DiscoveryClient-InstanceInfoReplicator-0] WARN com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient - Request execution failed with message: java.net.UnknownHostException: monitor-eureka\n[DiscoveryClient-InstanceInfoReplicator-0] WARN com.netflix.discovery.DiscoveryClient - DiscoveryClient_WEB-ADMIN/web-example-7f668c75db-j7ncx - registration failed Cannot execute request on any known server\ncom.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server\n at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)\n at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)\n at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)\n at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)\n at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)\n at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829)\n at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121)\n at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n at java.util.concurrent.FutureTask.run(FutureTask.java:266)\n at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)\n at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at java.lang.Thread.run(Thread.java:748)\n")])])])])])},[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{144:function(e,t,a){e.exports=a.p+"assets/img/image-20190723115721514.bf981ef3.png"},145:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121433809.7a1b4b00.png"},248:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120730196.9793d8ec.png"},249:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120753533.081b6d6b.png"},250:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120832778.e154bccd.png"},251:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120912377.e1404406.png"},252:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120926747.c9754776.png"},253:function(e,t,a){e.exports=a.p+"assets/img/image-20190723120956821.69bcdbbe.png"},254:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121019167.81af1060.png"},255:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121035917.8a2b1320.png"},256:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121055648.2c6ba8d1.png"},257:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121117514.ef774d3a.png"},258:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121132991.69146097.png"},259:function(e,t,a){e.exports=a.p+"assets/img/image-20190723121412027.6888452e.png"},260:function(e,t,a){e.exports=a.p+"assets/img/image-20190717193548703.5167e3b9.png"},367:function(e,t,a){"use strict";a.r(t);var r=a(0),s=Object(r.a)({},function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[r("h1",{attrs:{id:"导入-example-微服务"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#导入-example-微服务","aria-hidden":"true"}},[e._v("#")]),e._v(" 导入 example 微服务")]),e._v(" "),r("h2",{attrs:{id:"前提"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[e._v("#")]),e._v(" 前提")]),e._v(" "),r("p",[e._v("必须具备如下条件:")]),e._v(" "),r("ul",[r("li",[e._v("Kubernetes 集群 (安装在阿里云,本文将使用阿里云的 NFS 服务作为存储资源,Kuboard 也可以运行在其他云环境或者私有环境中。)")]),e._v(" "),r("li",[e._v("已在集群中安装 Kuboard")])]),e._v(" "),r("h2",{attrs:{id:"创建存储资源"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建存储资源","aria-hidden":"true"}},[e._v("#")]),e._v(" 创建存储资源")]),e._v(" "),r("p",[e._v("example中用到了存储卷声明,请在 Kuboard 中 "),r("a",{attrs:{href:"/guide/cluster/storage?id=%E5%88%9B%E5%BB%BA%E5%AD%98%E5%82%A8%E7%B1%BB"}},[e._v("创建存储类")]),e._v(" ,否则不能完成 example 的导入操作。")]),e._v(" "),r("h2",{attrs:{id:"创建名称空间"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建名称空间","aria-hidden":"true"}},[e._v("#")]),e._v(" 创建名称空间")]),e._v(" "),r("p",[e._v("创建新的名称空间,用来导入 exmaple。可参考 "),r("a",{attrs:{href:"/guide/cluster/namespace?id=%E5%88%9B%E5%BB%BA%E5%90%8D%E7%A7%B0%E7%A9%BA%E9%97%B4"}},[e._v("创建名称空间")])]),e._v(" "),r("p",[e._v("假设您已经进入了 Kuboard 名称空间界面,如下图所示:")]),e._v(" "),r("p",[r("img",{attrs:{src:a(144),alt:"image-20190723115721514"}})]),e._v(" "),r("h2",{attrs:{id:"导入-example"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#导入-example","aria-hidden":"true"}},[e._v("#")]),e._v(" 导入 example")]),e._v(" "),r("ul",[r("li",[e._v("下载 "),r("a",{attrs:{href:e.$withBase("/kuboard_example.yaml"),download:"kuboard_example.yaml"}},[e._v("kuboard_example.yaml")]),e._v(" 文件")])]),e._v(" "),r("blockquote",[r("p",[e._v("在 Kuboard 中,您无需手写 yaml 文件,此 yaml 文件的内容生成步骤如下:")]),e._v(" "),r("ul",[r("li",[e._v("通过 "),r("a",{attrs:{href:"busybox"}},[e._v("创建工作负载")]),e._v(" 完成微服务应用的部署")]),e._v(" "),r("li",[e._v("通过 "),r("strong",[e._v("导出工作负载")]),e._v(" 将名称空间中的微服务配置导出到一个 yaml 文件中")])])]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("导入工作负载")])]),e._v(" 按钮")])]),e._v(" "),r("p",[r("img",{attrs:{src:a(248),alt:"image-20190723120730196"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("上传文件")])]),e._v(" 按钮")]),e._v(" "),r("p",[e._v("并选择刚才下载的 export_example.yaml 文件")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(249),alt:"image-20190723120753533"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("默认选择所有的工作负载")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(250),alt:"image-20190723120832778"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("默认选择所有要导入的配置,example中没有使用到配置信息")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(251),alt:"image-20190723120912377"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("默认选择所有 Secrets")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(252),alt:"image-20190723120926747"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("填写表单:")])])]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("字段名称")]),e._v(" "),r("th",[e._v("填写内容")]),e._v(" "),r("th",[e._v("说明")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[e._v("数据卷类型")]),e._v(" "),r("td",[e._v("db-example-storage")]),e._v(" "),r("td",[e._v("NFS:容器组直连NFS"),r("br"),e._v("存储卷声明:容器组使用存储卷声明")])]),e._v(" "),r("tr",[r("td",[e._v("是否新建存储卷声明")]),e._v(" "),r("td",[e._v("创建新存储卷声明")]),e._v(" "),r("td",[e._v("使用已有存储卷声明:可以使用事先创建好的存储卷声明"),r("br"),e._v("创建新存储卷声明:可以创建新存储卷声明")])]),e._v(" "),r("tr",[r("td",[e._v("分配模式")]),e._v(" "),r("td",[e._v("动态分配")]),e._v(" "),r("td")]),e._v(" "),r("tr",[r("td",[e._v("读写模式")]),e._v(" "),r("td",[e._v("可被多节点读写")]),e._v(" "),r("td",[e._v("只能被单节点读写、可被多节点只读、可被多节点读写")])]),e._v(" "),r("tr",[r("td",[e._v("总量")]),e._v(" "),r("td",[e._v("2Gi")]),e._v(" "),r("td",[e._v("2Gi代表 2G空间")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(253),alt:"image-20190723120956821"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])]),e._v(" "),r("p",[e._v("填写表单:")])])]),e._v(" "),r("table",[r("thead",[r("tr",[r("th",[e._v("字段名称")]),e._v(" "),r("th",[e._v("填写内容")]),e._v(" "),r("th",[e._v("说明")])])]),e._v(" "),r("tbody",[r("tr",[r("td",[e._v("cloud-eureka域名")]),e._v(" "),r("td",[e._v("cloud-eureka.example.demo.eip.work")]),e._v(" "),r("td",[e._v("使用您自己的域名,"),r("br"),e._v("在测试环境建议使用如下域名格式:"),r("br"),e._v("workloadname.namespace-name.cluster-name.domain.com"),r("br"),e._v("该域名应该解析到您worker节点的外网地址,或者worker 节点 80/443 端口对应负载均衡服务器的外网地址。")])]),e._v(" "),r("tr",[r("td",[e._v("web-example")]),e._v(" "),r("td",[e._v("web-example.example.demo.eip")]),e._v(" "),r("td")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(254),alt:"image-20190723121019167"}})]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("下一步")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(255),alt:"image-20190723121035917"}})]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("确定")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(256),alt:"image-20190723121055648"}})]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("应用")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(257),alt:"image-20190723121117514"}})]),e._v(" "),r("ul",[r("li",[e._v("点击 "),r("em",[r("strong",[e._v("完成")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(258),alt:"image-20190723121132991"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 "),r("em",[r("strong",[e._v("已完成")])])]),e._v(" "),r("p",[e._v("可再名称空间中查看到刚才导入的 example 的所有工作负载及存储卷声明")])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(145),alt:"image-20190723121433809"}})]),e._v(" "),r("h2",{attrs:{id:"验证-web-example"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#验证-web-example","aria-hidden":"true"}},[e._v("#")]),e._v(" 验证 web-example")]),e._v(" "),r("ul",[r("li",[e._v("点击工作负载 "),r("em",[r("strong",[e._v("web-example")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(259),alt:"image-20190723121412027"}})]),e._v(" "),r("ul",[r("li",[r("p",[e._v("点击 互联网入口中的域名 "),r("em",[r("strong",[e._v("http://web-example.example.demo.eip.work")])])]),e._v(" "),r("p",[r("strong",[e._v("Example 部署成功")])])])]),e._v(" "),r("p",[r("img",{attrs:{src:a(260),alt:"image-20190717193548703"}})]),e._v(" "),r("blockquote",[r("p",[e._v("web-example容器的日志中会出现如下异常,错误原因是,example使用了一个监控套件,该监控套件要求将容器注册到monitor-eureka中,当下我们并没有安装该监控套件。此错误并不影响 example 程序的使用。暂时忽略该异常。")]),e._v(" "),r("div",{staticClass:"language- extra-class"},[r("pre",{pre:!0,attrs:{class:"language-text"}},[r("code",[e._v("[DiscoveryClient-InstanceInfoReplicator-0] WARN com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient - Request execution failed with message: java.net.UnknownHostException: monitor-eureka\n[DiscoveryClient-InstanceInfoReplicator-0] WARN com.netflix.discovery.DiscoveryClient - DiscoveryClient_WEB-ADMIN/web-example-7f668c75db-j7ncx - registration failed Cannot execute request on any known server\ncom.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server\n at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)\n at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)\n at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59)\n at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77)\n at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56)\n at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:829)\n at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121)\n at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n at java.util.concurrent.FutureTask.run(FutureTask.java:266)\n at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)\n at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n at java.lang.Thread.run(Thread.java:748)\n")])])])])])},[],!1,null,null,null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/7.fd07507c.js b/docs/assets/js/7.aa7720c7.js similarity index 99% rename from docs/assets/js/7.fd07507c.js rename to docs/assets/js/7.aa7720c7.js index d0850f8..5cfa6ef 100644 --- a/docs/assets/js/7.fd07507c.js +++ b/docs/assets/js/7.aa7720c7.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{285:function(t,e,s){t.exports=s.p+"assets/img/image-20190720232405147.8fc011f9.png"},286:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233322837.998be85a.png"},287:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233348284.2360801d.png"},288:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233412812.4f5ce20f.png"},289:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233436465.6d8cf61e.png"},290:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233512996.d7ba2b19.png"},291:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000526434.cfdf2d30.png"},292:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000759925.bb32a332.png"},293:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000822458.5797bca7.png"},294:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000847954.6f05e4b8.png"},295:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000919933.3a1d313e.png"},296:function(t,e,s){t.exports=s.p+"assets/img/image-20190721100715898.f0faa9aa.png"},364:function(t,e,s){"use strict";s.r(e);var a=s(0),v=Object(a.a)({},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"日常调整"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#日常调整","aria-hidden":"true"}},[t._v("#")]),t._v(" 日常调整")]),t._v(" "),a("h2",{attrs:{id:"前提"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[t._v("#")]),t._v(" 前提")]),t._v(" "),a("p",[t._v("必须具备如下条件:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Kubernetes 集群")])]),t._v(" "),a("li",[a("p",[t._v("已在集群中安装 Kuboard")])])]),t._v(" "),a("p",[t._v("假设您一进入 "),a("em",[a("strong",[t._v("example")])]),t._v(" 名称空间页面,如下图所示:")]),t._v(" "),a("p",[a("img",{attrs:{src:s(285),alt:"image-20190720232405147"}})]),t._v(" "),a("h2",{attrs:{id:"批量删除容器组"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#批量删除容器组","aria-hidden":"true"}},[t._v("#")]),t._v(" 批量删除容器组")]),t._v(" "),a("p",[t._v("批量删除容器组特别适用于 "),a("strong",[t._v("开发测试环境的版本更新")]),t._v(" 场景,描述如下:")]),t._v(" "),a("ul",[a("li",[t._v("开发/测试环境中,开发人员提交代码")]),t._v(" "),a("li",[t._v("DevOps环境自动构建出 docker 镜像,并将 docker 镜像推送到仓库;\n"),a("ul",[a("li",[t._v("如果您的 devops 环境只在生成新的 branch 或者 tag 时,生成镜像的新 version,那么原镜像标签的实际镜像已发生改变。")])])]),t._v(" "),a("li",[t._v("从 Kubernetes 中删除该镜像的 容器组")]),t._v(" "),a("li",[t._v("Kubernetes 创建新的 容器组,并且该容器组重新从镜像仓库拉取最新的镜像")])]),t._v(" "),a("p",[t._v("在 Kuboard 中,"),a("em",[a("strong",[t._v("批量删除容器组")])]),t._v(" 的操作步骤为:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("在名称空间页面点击 "),a("em",[a("strong",[t._v("容器组列表")])])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("选择要筛选的应用分层,并点击刷新,")])]),t._v(" "),a("li",[a("p",[t._v("选择要删除的容器组")])])]),t._v(" "),a("p",[t._v("如下图所示:")])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(286),alt:"image-20190720233322837"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("删除")])]),t._v(" 按钮")])]),t._v(" "),a("p",[a("img",{attrs:{src:s(287),alt:"image-20190720233348284"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("确定")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(288),alt:"image-20190720233412812"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("应用")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(289),alt:"image-20190720233436465"}})]),t._v(" "),a("ul",[a("li",[a("p",[t._v("点击 "),a("em",[a("strong",[t._v("完成")])])]),t._v(" "),a("p",[t._v("并等待,直到 kubernetes 完成对容器组的调整操作")]),t._v(" "),a("blockquote",[a("p",[t._v("Kuboard 会自动监听 kubernetes 执行此调整操作时的变化,您无需刷新页面,只要等待结果即可。")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(290),alt:"image-20190720233512996"}})]),t._v(" "),a("h2",{attrs:{id:"批量调整镜像版本"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#批量调整镜像版本","aria-hidden":"true"}},[t._v("#")]),t._v(" 批量调整镜像版本")]),t._v(" "),a("p",[t._v("批量调整镜像版本适用于如下场景:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("需要更新容器所使用的镜像的版本号")]),t._v(" "),a("p",[t._v("通常是经过测试的版本,且 DevOps 环境在构建镜像时,为其生成了新的版本号")])])]),t._v(" "),a("p",[t._v("批量调整镜像版本的操作如下:")]),t._v(" "),a("ul",[a("li",[t._v("在名称空间页面点击 "),a("em",[a("strong",[t._v("调整镜像版本")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(291),alt:"image-20190721000526434"}})]),t._v(" "),a("ul",[a("li",[a("p",[t._v("在要调整的镜像上点击 "),a("em",[a("strong",[t._v("修改")])])]),t._v(" "),a("p",[t._v("并填写新的镜像版本号,如下图所示:")])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(292),alt:"image-20190721000759925"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("执行变更")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(293),alt:"image-20190721000822458"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("应用")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(294),alt:"image-20190721000847954"}})]),t._v(" "),a("ul",[a("li",[a("p",[t._v("点击 "),a("em",[a("strong",[t._v("完成")])])]),t._v(" "),a("p",[t._v("此时会进入容器组列表界面,请等待 Kubernetes 完成对容器组的调整(无需刷新页面)")])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(295),alt:"image-20190721000919933"}})]),t._v(" "),a("h2",{attrs:{id:"批量调整工作负载的副本数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#批量调整工作负载的副本数","aria-hidden":"true"}},[t._v("#")]),t._v(" 批量调整工作负载的副本数")]),t._v(" "),a("p",[a("em",[a("strong",[t._v("调整容器镜像版本")])]),t._v(" 的功能界面中,也可以用来调整工作负载的副本数,如下图所示:")]),t._v(" "),a("p",[a("img",{attrs:{src:s(296),alt:"image-20190721100715898"}})])])},[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{285:function(t,e,s){t.exports=s.p+"assets/img/image-20190720232405147.8fc011f9.png"},286:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233322837.998be85a.png"},287:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233348284.2360801d.png"},288:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233412812.4f5ce20f.png"},289:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233436465.6d8cf61e.png"},290:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233512996.d7ba2b19.png"},291:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000526434.cfdf2d30.png"},292:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000759925.bb32a332.png"},293:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000822458.5797bca7.png"},294:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000847954.6f05e4b8.png"},295:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000919933.3a1d313e.png"},296:function(t,e,s){t.exports=s.p+"assets/img/image-20190721100715898.f0faa9aa.png"},362:function(t,e,s){"use strict";s.r(e);var a=s(0),v=Object(a.a)({},function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"日常调整"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#日常调整","aria-hidden":"true"}},[t._v("#")]),t._v(" 日常调整")]),t._v(" "),a("h2",{attrs:{id:"前提"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[t._v("#")]),t._v(" 前提")]),t._v(" "),a("p",[t._v("必须具备如下条件:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("Kubernetes 集群")])]),t._v(" "),a("li",[a("p",[t._v("已在集群中安装 Kuboard")])])]),t._v(" "),a("p",[t._v("假设您一进入 "),a("em",[a("strong",[t._v("example")])]),t._v(" 名称空间页面,如下图所示:")]),t._v(" "),a("p",[a("img",{attrs:{src:s(285),alt:"image-20190720232405147"}})]),t._v(" "),a("h2",{attrs:{id:"批量删除容器组"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#批量删除容器组","aria-hidden":"true"}},[t._v("#")]),t._v(" 批量删除容器组")]),t._v(" "),a("p",[t._v("批量删除容器组特别适用于 "),a("strong",[t._v("开发测试环境的版本更新")]),t._v(" 场景,描述如下:")]),t._v(" "),a("ul",[a("li",[t._v("开发/测试环境中,开发人员提交代码")]),t._v(" "),a("li",[t._v("DevOps环境自动构建出 docker 镜像,并将 docker 镜像推送到仓库;\n"),a("ul",[a("li",[t._v("如果您的 devops 环境只在生成新的 branch 或者 tag 时,生成镜像的新 version,那么原镜像标签的实际镜像已发生改变。")])])]),t._v(" "),a("li",[t._v("从 Kubernetes 中删除该镜像的 容器组")]),t._v(" "),a("li",[t._v("Kubernetes 创建新的 容器组,并且该容器组重新从镜像仓库拉取最新的镜像")])]),t._v(" "),a("p",[t._v("在 Kuboard 中,"),a("em",[a("strong",[t._v("批量删除容器组")])]),t._v(" 的操作步骤为:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("在名称空间页面点击 "),a("em",[a("strong",[t._v("容器组列表")])])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("选择要筛选的应用分层,并点击刷新,")])]),t._v(" "),a("li",[a("p",[t._v("选择要删除的容器组")])])]),t._v(" "),a("p",[t._v("如下图所示:")])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(286),alt:"image-20190720233322837"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("删除")])]),t._v(" 按钮")])]),t._v(" "),a("p",[a("img",{attrs:{src:s(287),alt:"image-20190720233348284"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("确定")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(288),alt:"image-20190720233412812"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("应用")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(289),alt:"image-20190720233436465"}})]),t._v(" "),a("ul",[a("li",[a("p",[t._v("点击 "),a("em",[a("strong",[t._v("完成")])])]),t._v(" "),a("p",[t._v("并等待,直到 kubernetes 完成对容器组的调整操作")]),t._v(" "),a("blockquote",[a("p",[t._v("Kuboard 会自动监听 kubernetes 执行此调整操作时的变化,您无需刷新页面,只要等待结果即可。")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(290),alt:"image-20190720233512996"}})]),t._v(" "),a("h2",{attrs:{id:"批量调整镜像版本"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#批量调整镜像版本","aria-hidden":"true"}},[t._v("#")]),t._v(" 批量调整镜像版本")]),t._v(" "),a("p",[t._v("批量调整镜像版本适用于如下场景:")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("需要更新容器所使用的镜像的版本号")]),t._v(" "),a("p",[t._v("通常是经过测试的版本,且 DevOps 环境在构建镜像时,为其生成了新的版本号")])])]),t._v(" "),a("p",[t._v("批量调整镜像版本的操作如下:")]),t._v(" "),a("ul",[a("li",[t._v("在名称空间页面点击 "),a("em",[a("strong",[t._v("调整镜像版本")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(291),alt:"image-20190721000526434"}})]),t._v(" "),a("ul",[a("li",[a("p",[t._v("在要调整的镜像上点击 "),a("em",[a("strong",[t._v("修改")])])]),t._v(" "),a("p",[t._v("并填写新的镜像版本号,如下图所示:")])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(292),alt:"image-20190721000759925"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("执行变更")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(293),alt:"image-20190721000822458"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("应用")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(294),alt:"image-20190721000847954"}})]),t._v(" "),a("ul",[a("li",[a("p",[t._v("点击 "),a("em",[a("strong",[t._v("完成")])])]),t._v(" "),a("p",[t._v("此时会进入容器组列表界面,请等待 Kubernetes 完成对容器组的调整(无需刷新页面)")])])]),t._v(" "),a("p",[a("img",{attrs:{src:s(295),alt:"image-20190721000919933"}})]),t._v(" "),a("h2",{attrs:{id:"批量调整工作负载的副本数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#批量调整工作负载的副本数","aria-hidden":"true"}},[t._v("#")]),t._v(" 批量调整工作负载的副本数")]),t._v(" "),a("p",[a("em",[a("strong",[t._v("调整容器镜像版本")])]),t._v(" 的功能界面中,也可以用来调整工作负载的副本数,如下图所示:")]),t._v(" "),a("p",[a("img",{attrs:{src:s(296),alt:"image-20190721100715898"}})])])},[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/9.7ba1d108.js b/docs/assets/js/9.41808376.js similarity index 87% rename from docs/assets/js/9.7ba1d108.js rename to docs/assets/js/9.41808376.js index 0db69d8..c840ece 100644 --- a/docs/assets/js/9.7ba1d108.js +++ b/docs/assets/js/9.41808376.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{144:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115721514.bf981ef3.png"},254:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115852719.f1658660.png"},255:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115912645.393d67ff.png"},256:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115940862.dfeacc57.png"},257:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120011972.0f0914c5.png"},258:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120050894.9b1d6350.png"},259:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120104474.617a620a.png"},260:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120125425.a46d7874.png"},367:function(t,_,v){"use strict";v.r(_);var e=v(0),s=Object(e.a)({},function(){var t=this,_=t.$createElement,e=t._self._c||_;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"部署-busybox"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#部署-busybox","aria-hidden":"true"}},[t._v("#")]),t._v(" 部署 busybox")]),t._v(" "),e("h2",{attrs:{id:"前提"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[t._v("#")]),t._v(" 前提")]),t._v(" "),e("p",[t._v("必须具备如下条件:")]),t._v(" "),e("ul",[e("li",[t._v("Kubernetes 集群")]),t._v(" "),e("li",[t._v("已在集群中安装 Kuboard")])]),t._v(" "),e("p",[t._v("假设您已经进入了 Kuboard 名称空间界面,如下图所示。可参考 "),e("router-link",{attrs:{to:"/guide/cluster/namespace.html#创建名称空间"}},[t._v("创建名称空间")])],1),t._v(" "),e("p",[e("img",{attrs:{src:v(144),alt:"image-20190723115721514"}})]),t._v(" "),e("h2",{attrs:{id:"部署-busybox-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#部署-busybox-2","aria-hidden":"true"}},[t._v("#")]),t._v(" 部署 busybox")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://hub.docker.com/_/busybox",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看 busybox 介绍"),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("Busybox 是一个非常小巧(不到5M)的容器,此处用它来展示如何将一个 docker image 通过 Kuboard 部署到 kubernetes 集群中。")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("创建工作负载按钮")])])]),t._v(" "),e("p",[t._v("填写表单如下:")])])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("字段名称")]),t._v(" "),e("th",[t._v("填写内容")]),t._v(" "),e("th",[t._v("说明")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("服务类型")]),t._v(" "),e("td",[t._v("Deployment")]),t._v(" "),e("td",[t._v("Kubernetes 的 Deployment 类型")])]),t._v(" "),e("tr",[e("td",[t._v("服务分层")]),t._v(" "),e("td",[t._v("中间件")]),t._v(" "),e("td",[t._v("生成的Kuberenetes对象以 cloud- 作为前缀,"),e("br"),t._v("并显示在中间件分层中")])]),t._v(" "),e("tr",[e("td",[t._v("服务名称")]),t._v(" "),e("td",[t._v("busybox")]),t._v(" "),e("td",[t._v("显示在 Kuboard 中的名称")])]),t._v(" "),e("tr",[e("td",[t._v("副本数量")]),t._v(" "),e("td",[t._v("1")]),t._v(" "),e("td",[t._v("replicas")])]),t._v(" "),e("tr",[e("td",[t._v("容器名称")]),t._v(" "),e("td",[t._v("busybox")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[t._v("镜像")]),t._v(" "),e("td",[t._v("busybox:1.29")]),t._v(" "),e("td",[t._v("hub.docker.com 中的 busybox 镜像")])]),t._v(" "),e("tr",[e("td",[t._v("Command")]),t._v(" "),e("td",[t._v("sleep")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[t._v("Command")]),t._v(" "),e("td",[t._v("3600")]),t._v(" "),e("td")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(254),alt:"image-20190723115852719"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("完成表单填写后,点击 "),e("em",[e("strong",[t._v("保存")])])]),t._v(" "),e("p",[t._v("Kuboard 将对表单参数进行校验,通过后,方可执行对集群的变更操作。")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(255),alt:"image-20190723115912645"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("应用")])])]),t._v(" "),e("p",[t._v("Kuboard 执行对集群的变更操作,变更的过程中,产生的事件以通知消息的形式显示出来。")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(256),alt:"image-20190723115940862"}})]),t._v(" "),e("h2",{attrs:{id:"验证工作负载"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#验证工作负载","aria-hidden":"true"}},[t._v("#")]),t._v(" 验证工作负载")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("完成")])])]),t._v(" "),e("p",[t._v("点击完成后,可查看工作负载的信息。该界面分成四个区域:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("页头区")]),t._v(" "),e("p",[t._v("页头区包含对该工作负载(本案例中为 Deployment)的操作按钮。可执行的操作有:"),e("em",[e("strong",[t._v("编辑")])]),t._v(" / "),e("em",[e("strong",[t._v("伸缩")])]),t._v(" / "),e("em",[e("strong",[t._v("刷新")])]),t._v(" / "),e("em",[e("strong",[t._v("删除")])])])]),t._v(" "),e("li",[e("p",[t._v("工作负载基本信息")]),t._v(" "),e("p",[t._v("基本信息区显示了工作负载的 "),e("em",[e("strong",[t._v("基本信息")])]),t._v(" 、"),e("em",[e("strong",[t._v("运行时信息")])]),t._v("、"),e("em",[e("strong",[t._v("访问方式")])]),t._v("(Service)、"),e("em",[e("strong",[t._v("互联网入口")])]),t._v("(Ingress)")])]),t._v(" "),e("li",[e("p",[t._v("容器组列表")]),t._v(" "),e("p",[t._v("容器组列表区显示了该当前对应的所有容器组(Pod),容器组列表区监听集群的动态变化,当您执行伸缩操作、或者删除容器组操作时,无需刷新,就可以查看到最新的容器组信息。")])]),t._v(" "),e("li",[e("p",[t._v("容器组详情")]),t._v(" "),e("p",[t._v("容器组详情区显示了当前选中容器组的信息,其中包括:")]),t._v(" "),e("ul",[e("li",[t._v("容器组相关事件")]),t._v(" "),e("li",[t._v("容器组基本信息,及删除容器组的操作按钮。(此区域还包括容器组相关的监控操作,监控模块在后续的章节中介绍)")]),t._v(" "),e("li",[t._v("容器基本信息,及查看容器日志、打开容器终端的按钮。(此区域还包括容器相关的监控操作,监控模块在后续的章节中介绍)")])])])])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(257),alt:"image-20190723120011972"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("终端")])])]),t._v(" "),e("p",[t._v("此时打开了该容器的控制台,Kuboard 默认使用 /bin/bash 终端程序,而 busybox 镜像中并不包含 /bin/bash,因此您会看到一个如下图所示的错误提示:")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(258),alt:"image-20190723120050894"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("切换到 /bin/sh")])])]),t._v(" "),e("p",[t._v("点击屏幕左上角的 "),e("em",[e("strong",[t._v("切换到 /bin/sh")])])])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(259),alt:"image-20190723120104474"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("输入 "),e("em",[t._v("export")]),t._v(" 并回车")]),t._v(" "),e("p",[t._v("输入 "),e("em",[t._v("export")]),t._v(" 并回车后,可查看该容器当前的环境变量。您也可以在终端中执行任何容器内部的命令。在您完成容器的部署之后,终端界面是非常有效的问题诊断工具之一。")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(260),alt:"image-20190723120125425"}})])])},[],!1,null,null,null);_.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{144:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115721514.bf981ef3.png"},241:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115852719.f1658660.png"},242:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115912645.393d67ff.png"},243:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115940862.dfeacc57.png"},244:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120011972.0f0914c5.png"},245:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120050894.9b1d6350.png"},246:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120104474.617a620a.png"},247:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120125425.a46d7874.png"},368:function(t,_,v){"use strict";v.r(_);var e=v(0),s=Object(e.a)({},function(){var t=this,_=t.$createElement,e=t._self._c||_;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"部署-busybox"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#部署-busybox","aria-hidden":"true"}},[t._v("#")]),t._v(" 部署 busybox")]),t._v(" "),e("h2",{attrs:{id:"前提"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[t._v("#")]),t._v(" 前提")]),t._v(" "),e("p",[t._v("必须具备如下条件:")]),t._v(" "),e("ul",[e("li",[t._v("Kubernetes 集群")]),t._v(" "),e("li",[t._v("已在集群中安装 Kuboard")])]),t._v(" "),e("p",[t._v("假设您已经进入了 Kuboard 名称空间界面,如下图所示。可参考 "),e("router-link",{attrs:{to:"/guide/cluster/namespace.html#创建名称空间"}},[t._v("创建名称空间")])],1),t._v(" "),e("p",[e("img",{attrs:{src:v(144),alt:"image-20190723115721514"}})]),t._v(" "),e("h2",{attrs:{id:"部署-busybox-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#部署-busybox-2","aria-hidden":"true"}},[t._v("#")]),t._v(" 部署 busybox")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://hub.docker.com/_/busybox",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看 busybox 介绍"),e("OutboundLink")],1)]),t._v(" "),e("p",[t._v("Busybox 是一个非常小巧(不到5M)的容器,此处用它来展示如何将一个 docker image 通过 Kuboard 部署到 kubernetes 集群中。")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("创建工作负载按钮")])])]),t._v(" "),e("p",[t._v("填写表单如下:")])])]),t._v(" "),e("table",[e("thead",[e("tr",[e("th",[t._v("字段名称")]),t._v(" "),e("th",[t._v("填写内容")]),t._v(" "),e("th",[t._v("说明")])])]),t._v(" "),e("tbody",[e("tr",[e("td",[t._v("服务类型")]),t._v(" "),e("td",[t._v("Deployment")]),t._v(" "),e("td",[t._v("Kubernetes 的 Deployment 类型")])]),t._v(" "),e("tr",[e("td",[t._v("服务分层")]),t._v(" "),e("td",[t._v("中间件")]),t._v(" "),e("td",[t._v("生成的Kuberenetes对象以 cloud- 作为前缀,"),e("br"),t._v("并显示在中间件分层中")])]),t._v(" "),e("tr",[e("td",[t._v("服务名称")]),t._v(" "),e("td",[t._v("busybox")]),t._v(" "),e("td",[t._v("显示在 Kuboard 中的名称")])]),t._v(" "),e("tr",[e("td",[t._v("副本数量")]),t._v(" "),e("td",[t._v("1")]),t._v(" "),e("td",[t._v("replicas")])]),t._v(" "),e("tr",[e("td",[t._v("容器名称")]),t._v(" "),e("td",[t._v("busybox")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[t._v("镜像")]),t._v(" "),e("td",[t._v("busybox:1.29")]),t._v(" "),e("td",[t._v("hub.docker.com 中的 busybox 镜像")])]),t._v(" "),e("tr",[e("td",[t._v("Command")]),t._v(" "),e("td",[t._v("sleep")]),t._v(" "),e("td")]),t._v(" "),e("tr",[e("td",[t._v("Command")]),t._v(" "),e("td",[t._v("3600")]),t._v(" "),e("td")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(241),alt:"image-20190723115852719"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("完成表单填写后,点击 "),e("em",[e("strong",[t._v("保存")])])]),t._v(" "),e("p",[t._v("Kuboard 将对表单参数进行校验,通过后,方可执行对集群的变更操作。")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(242),alt:"image-20190723115912645"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("应用")])])]),t._v(" "),e("p",[t._v("Kuboard 执行对集群的变更操作,变更的过程中,产生的事件以通知消息的形式显示出来。")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(243),alt:"image-20190723115940862"}})]),t._v(" "),e("h2",{attrs:{id:"验证工作负载"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#验证工作负载","aria-hidden":"true"}},[t._v("#")]),t._v(" 验证工作负载")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("完成")])])]),t._v(" "),e("p",[t._v("点击完成后,可查看工作负载的信息。该界面分成四个区域:")]),t._v(" "),e("ul",[e("li",[e("p",[t._v("页头区")]),t._v(" "),e("p",[t._v("页头区包含对该工作负载(本案例中为 Deployment)的操作按钮。可执行的操作有:"),e("em",[e("strong",[t._v("编辑")])]),t._v(" / "),e("em",[e("strong",[t._v("伸缩")])]),t._v(" / "),e("em",[e("strong",[t._v("刷新")])]),t._v(" / "),e("em",[e("strong",[t._v("删除")])])])]),t._v(" "),e("li",[e("p",[t._v("工作负载基本信息")]),t._v(" "),e("p",[t._v("基本信息区显示了工作负载的 "),e("em",[e("strong",[t._v("基本信息")])]),t._v(" 、"),e("em",[e("strong",[t._v("运行时信息")])]),t._v("、"),e("em",[e("strong",[t._v("访问方式")])]),t._v("(Service)、"),e("em",[e("strong",[t._v("互联网入口")])]),t._v("(Ingress)")])]),t._v(" "),e("li",[e("p",[t._v("容器组列表")]),t._v(" "),e("p",[t._v("容器组列表区显示了该当前对应的所有容器组(Pod),容器组列表区监听集群的动态变化,当您执行伸缩操作、或者删除容器组操作时,无需刷新,就可以查看到最新的容器组信息。")])]),t._v(" "),e("li",[e("p",[t._v("容器组详情")]),t._v(" "),e("p",[t._v("容器组详情区显示了当前选中容器组的信息,其中包括:")]),t._v(" "),e("ul",[e("li",[t._v("容器组相关事件")]),t._v(" "),e("li",[t._v("容器组基本信息,及删除容器组的操作按钮。(此区域还包括容器组相关的监控操作,监控模块在后续的章节中介绍)")]),t._v(" "),e("li",[t._v("容器基本信息,及查看容器日志、打开容器终端的按钮。(此区域还包括容器相关的监控操作,监控模块在后续的章节中介绍)")])])])])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(244),alt:"image-20190723120011972"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("终端")])])]),t._v(" "),e("p",[t._v("此时打开了该容器的控制台,Kuboard 默认使用 /bin/bash 终端程序,而 busybox 镜像中并不包含 /bin/bash,因此您会看到一个如下图所示的错误提示:")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(245),alt:"image-20190723120050894"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("切换到 /bin/sh")])])]),t._v(" "),e("p",[t._v("点击屏幕左上角的 "),e("em",[e("strong",[t._v("切换到 /bin/sh")])])])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(246),alt:"image-20190723120104474"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("输入 "),e("em",[t._v("export")]),t._v(" 并回车")]),t._v(" "),e("p",[t._v("输入 "),e("em",[t._v("export")]),t._v(" 并回车后,可查看该容器当前的环境变量。您也可以在终端中执行任何容器内部的命令。在您完成容器的部署之后,终端界面是非常有效的问题诊断工具之一。")])])]),t._v(" "),e("p",[e("img",{attrs:{src:v(247),alt:"image-20190723120125425"}})])])},[],!1,null,null,null);_.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/app.721d6fe8.js b/docs/assets/js/app.f23e884f.js similarity index 65% rename from docs/assets/js/app.721d6fe8.js rename to docs/assets/js/app.f23e884f.js index 1d645b1..cb89e87 100644 --- a/docs/assets/js/app.721d6fe8.js +++ b/docs/assets/js/app.f23e884f.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],l=e[1],c=e[2],p=0,f=[];p0?r:n)(t)}},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){var r,o; +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],l=e[1],c=e[2],p=0,f=[];p0?r:n)(t)}},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){var r,o; /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */void 0===(o="function"==typeof(r=function(){var t,e,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(t,e,n){return tn?n:t}function i(t){return 100*(-1+t)}n.configure=function(t){var e,n;for(e in t)void 0!==(n=t[e])&&t.hasOwnProperty(e)&&(r[e]=n);return this},n.status=null,n.set=function(t){var e=n.isStarted();t=o(t,r.minimum,1),n.status=1===t?null:t;var l=n.render(!e),c=l.querySelector(r.barSelector),u=r.speed,p=r.easing;return l.offsetWidth,a(function(e){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,function(t,e,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+i(t)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+i(t)+"%,0)"}:{"margin-left":i(t)+"%"}).transition="all "+e+"ms "+n,o}(t,u,p)),1===t?(s(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout(function(){s(l,{transition:"all "+u+"ms linear",opacity:0}),setTimeout(function(){n.remove(),e()},u)},u)):setTimeout(e,u)}),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var t=function(){setTimeout(function(){n.status&&(n.trickle(),t())},r.trickleSpeed)};return r.trickle&&t(),this},n.done=function(t){return t||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(t){var e=n.status;return e?("number"!=typeof t&&(t=(1-e)*o(Math.random()*e,.1,.95)),e=o(e+t,0,.994),n.set(e)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},t=0,e=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&n.start(),t++,e++,r.always(function(){0==--e?(t=0,n.done()):n.set((t-e)/t)}),this):this},n.render=function(t){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var o,a=e.querySelector(r.barSelector),l=t?"-100":i(n.status||0),u=document.querySelector(r.parent);return s(a,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=e.querySelector(r.spinnerSelector))&&f(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(e),e},n.remove=function(){u(document.documentElement,"nprogress-busy"),u(document.querySelector(r.parent),"nprogress-custom-parent");var t=document.getElementById("nprogress");t&&f(t)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var t=document.body.style,e="WebkitTransform"in t?"Webkit":"MozTransform"in t?"Moz":"msTransform"in t?"ms":"OTransform"in t?"O":"";return e+"Perspective"in t?"translate3d":e+"Transform"in t?"translate":"margin"};var a=function(){var t=[];function e(){var n=t.shift();n&&n(e)}return function(n){t.push(n),1==t.length&&e()}}(),s=function(){var t=["Webkit","O","Moz","ms"],e={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(t,e){return e.toUpperCase()}),e[n]||(e[n]=function(e){var n=document.body.style;if(e in n)return e;for(var r,o=t.length,i=e.charAt(0).toUpperCase()+e.slice(1);o--;)if((r=t[o]+i)in n)return r;return e}(n))}function r(t,e,r){e=n(e),t.style[e]=r}return function(t,e){var n,o,i=arguments;if(2==i.length)for(n in e)void 0!==(o=e[n])&&e.hasOwnProperty(n)&&r(t,n,o);else r(t,i[1],i[2])}}();function l(t,e){var n="string"==typeof t?t:p(t);return n.indexOf(" "+e+" ")>=0}function c(t,e){var n=p(t),r=n+e;l(n,e)||(t.className=r.substring(1))}function u(t,e){var n,r=p(t);l(t,e)&&(n=r.replace(" "+e+" "," "),t.className=n.substring(1,n.length-1))}function p(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}function f(t){t&&t.parentNode&&t.parentNode.removeChild(t)}return n})?r.call(e,n,e,t):r)||(t.exports=o)},function(t,e,n){var r=n(26)("wks"),o=n(27),i=n(2).Symbol,a="function"==typeof i;(t.exports=function(t){return r[t]||(r[t]=a&&i[t]||(a?i:o)("Symbol."+t))}).store=r},function(t,e,n){var r=n(9),o=n(35);t.exports=n(3)?function(t,e,n){return r.f(t,e,o(1,n))}:function(t,e,n){return t[e]=n,t}},function(t,e,n){var r=n(2),o=n(18),i=n(8),a=n(27)("src"),s=n(81),l=(""+s).split("toString");n(21).inspectSource=function(t){return s.call(t)},(t.exports=function(t,e,n,s){var c="function"==typeof n;c&&(i(n,"name")||o(n,"name",e)),t[e]!==n&&(c&&(i(n,a)||o(n,a,t[e]?""+t[e]:l.join(String(e)))),t===r?t[e]=n:s?t[e]?t[e]=n:o(t,e,n):(delete t[e],o(t,e,n)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[a]||s.call(this)})},function(t,e,n){var r=n(44),o=n(7);t.exports=function(t){return r(o(t))}},function(t,e){var n=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=n)},function(t,e,n){"use strict";var r=n(5);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(12),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},function(t,e,n){var r=n(42);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,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(4);t.exports=function(t,e){if(!r(t))return t;var n,o;if(e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;if("function"==typeof(n=t.valueOf)&&!r(o=n.call(t)))return o;if(!e&&"function"==typeof(n=t.toString)&&!r(o=n.call(t)))return o;throw TypeError("Can't convert object to primitive value")}},function(t,e,n){var r=n(21),o=n(2),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n(61)?"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){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,n){var r=n(9).f,o=Function.prototype,i=/^\s*function ([^ (]*)/;"name"in o||n(3)&&r(o,"name",{configurable:!0,get:function(){try{return(""+this).match(i)[1]}catch(t){return""}}})},function(t,e){var n=t.exports={version:"2.6.9"};"number"==typeof __e&&(__e=n)},function(t,e,n){var r=n(7);t.exports=function(t){return Object(r(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,n){var r=n(59),o=n(95),i=n(96),a=Object.defineProperty;e.f=n(11)?Object.defineProperty:function(t,e,n){if(r(t),e=i(e,!0),r(n),o)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){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){var r=n(26)("keys"),o=n(27);t.exports=function(t){return r[t]||(r[t]=o(t))}},function(t,e,n){var r=n(24),o=n(44),i=n(32),a=n(23),s=n(86);t.exports=function(t,e){var n=1==t,l=2==t,c=3==t,u=4==t,p=6==t,f=5==t||p,d=e||s;return function(e,s,h){for(var v,m,g=i(e),y=o(g),b=r(s,h,3),_=a(y.length),w=0,x=n?d(e,_):l?d(e,0):void 0;_>w;w++)if((f||w in y)&&(m=b(v=y[w],w,g),t))if(n)x[w]=m;else if(m)switch(t){case 3:return!0;case 5:return v;case 6:return w;case 2:x.push(v)}else if(u)return!1;return p?-1:c||u?u:x}}},function(t,e,n){"use strict";var r=n(1),o=n(48)(!1),i=[].indexOf,a=!!i&&1/[1].indexOf(1,-0)<0;r(r.P+r.F*(a||!n(22)(i)),"Array",{indexOf:function(t){return a?i.apply(this,arguments)||0:o(this,t,arguments[1])}})},function(t,e,n){"use strict";var r=n(6),o=n(32),i=n(23),a=n(12),s=n(70),l=n(71),c=Math.max,u=Math.min,p=Math.floor,f=/\$([$&`']|\d\d?|<[^>]*>)/g,d=/\$([$&`']|\d\d?)/g;n(72)("replace",2,function(t,e,n,h){return[function(r,o){var i=t(this),a=null==r?void 0:r[e];return void 0!==a?a.call(r,i,o):n.call(String(i),r,o)},function(t,e){var o=h(n,t,this,e);if(o.done)return o.value;var p=r(t),f=String(this),d="function"==typeof e;d||(e=String(e));var m=p.global;if(m){var g=p.unicode;p.lastIndex=0}for(var y=[];;){var b=l(p,f);if(null===b)break;if(y.push(b),!m)break;""===String(b[0])&&(p.lastIndex=s(f,i(p.lastIndex),g))}for(var _,w="",x=0,k=0;k=x&&(w+=f.slice(x,$)+A,x=$+O.length)}return w+f.slice(x)}];function v(t,e,r,i,a,s){var l=r+t.length,c=i.length,u=d;return void 0!==a&&(a=o(a),u=f),n.call(s,u,function(n,o){var s;switch(o.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,r);case"'":return e.slice(l);case"<":s=a[o.slice(1,-1)];break;default:var u=+o;if(0===u)return n;if(u>c){var f=p(u/10);return 0===f?n:f<=c?void 0===i[f-1]?o.charAt(1):i[f-1]+o.charAt(1):n}s=i[u-1]}return void 0===s?"":s})}})},function(t,e,n){"use strict";var r=n(1),o=n(37)(2);r(r.P+r.F*!n(22)([].filter,!0),"Array",{filter:function(t){return o(this,t,arguments[1])}})},function(t,e,n){var r=n(1);r(r.S,"Array",{isArray:n(49)})},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,n){var r=n(79),o=n(35),i=n(20),a=n(25),s=n(8),l=n(45),c=Object.getOwnPropertyDescriptor;e.f=n(3)?c:function(t,e){if(t=i(t),e=a(e,!0),l)try{return c(t,e)}catch(t){}if(s(t,e))return o(!r.f.call(t,e),t[e])}},function(t,e,n){var r=n(10);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},function(t,e,n){t.exports=!n(3)&&!n(5)(function(){return 7!=Object.defineProperty(n(46)("div"),"a",{get:function(){return 7}}).a})},function(t,e,n){var r=n(4),o=n(2).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,e,n){var r=n(8),o=n(20),i=n(48)(!1),a=n(36)("IE_PROTO");t.exports=function(t,e){var n,s=o(t),l=0,c=[];for(n in s)n!=a&&r(s,n)&&c.push(n);for(;e.length>l;)r(s,n=e[l++])&&(~i(c,n)||c.push(n));return c}},function(t,e,n){var r=n(20),o=n(23),i=n(80);t.exports=function(t){return function(e,n,a){var s,l=r(e),c=o(l.length),u=i(a,c);if(t&&n!=n){for(;c>u;)if((s=l[u++])!=s)return!0}else for(;c>u;u++)if((t||u in l)&&l[u]===n)return t||u||0;return!t&&-1}}},function(t,e,n){var r=n(10);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,n){"use strict";var r,o,i=n(73),a=RegExp.prototype.exec,s=String.prototype.replace,l=a,c=(r=/a/,o=/b*/g,a.call(r,"a"),a.call(o,"a"),0!==r.lastIndex||0!==o.lastIndex),u=void 0!==/()??/.exec("")[1];(c||u)&&(l=function(t){var e,n,r,o,l=this;return u&&(n=new RegExp("^"+l.source+"$(?!\\s)",i.call(l))),c&&(e=l.lastIndex),r=a.call(l,t),c&&r&&(l.lastIndex=l.global?r.index+r[0].length:e),u&&r&&r.length>1&&s.call(r[0],n,function(){for(o=1;o=e||n<0||f&&t-u>=a}function w(){var t=m();if(_(t))return x(t);l=setTimeout(w,function(t){var n=e-(t-c);return f?v(n,a-(t-u)):n}(t))}function x(t){return l=void 0,d&&o?g(t):(o=i=void 0,s)}function k(){var t=m(),n=_(t);if(o=arguments,i=this,c=t,n){if(void 0===l)return function(t){return u=t,l=setTimeout(w,e),p?g(t):s}(c);if(f)return l=setTimeout(w,e),g(c)}return void 0===l&&(l=setTimeout(w,e)),s}return e=b(e)||0,y(r)&&(p=!!r.leading,a=(f="maxWait"in r)?h(b(r.maxWait)||0,e):a,d="trailing"in r?!!r.trailing:d),k.cancel=function(){void 0!==l&&clearTimeout(l),u=0,o=c=i=l=void 0},k.flush=function(){return void 0===l?s:x(m())},k}function y(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function b(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&d.call(t)==o}(t))return r;if(y(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=y(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(i,"");var n=s.test(t);return n||l.test(t)?c(t.slice(2),n?2:8):a.test(t)?r:+t}t.exports=function(t,e,r){var o=!0,i=!0;if("function"!=typeof t)throw new TypeError(n);return y(r)&&(o="leading"in r?!!r.leading:o,i="trailing"in r?!!r.trailing:i),g(t,e,{leading:o,maxWait:e,trailing:i})}},function(t,e){var n="Expected a function",r=NaN,o="[object Symbol]",i=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt,u="object"==typeof global&&global&&global.Object===Object&&global,p="object"==typeof self&&self&&self.Object===Object&&self,f=u||p||Function("return this")(),d=Object.prototype.toString,h=Math.max,v=Math.min,m=function(){return f.Date.now()};function g(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function y(t){if("number"==typeof t)return t;if(function(t){return"symbol"==typeof t||function(t){return!!t&&"object"==typeof t}(t)&&d.call(t)==o}(t))return r;if(g(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=g(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(i,"");var n=s.test(t);return n||l.test(t)?c(t.slice(2),n?2:8):a.test(t)?r:+t}t.exports=function(t,e,r){var o,i,a,s,l,c,u=0,p=!1,f=!1,d=!0;if("function"!=typeof t)throw new TypeError(n);function b(e){var n=o,r=i;return o=i=void 0,u=e,s=t.apply(r,n)}function _(t){var n=t-c;return void 0===c||n>=e||n<0||f&&t-u>=a}function w(){var t=m();if(_(t))return x(t);l=setTimeout(w,function(t){var n=e-(t-c);return f?v(n,a-(t-u)):n}(t))}function x(t){return l=void 0,d&&o?b(t):(o=i=void 0,s)}function k(){var t=m(),n=_(t);if(o=arguments,i=this,c=t,n){if(void 0===l)return function(t){return u=t,l=setTimeout(w,e),p?b(t):s}(c);if(f)return l=setTimeout(w,e),b(c)}return void 0===l&&(l=setTimeout(w,e)),s}return e=y(e)||0,g(r)&&(p=!!r.leading,a=(f="maxWait"in r)?h(y(r.maxWait)||0,e):a,d="trailing"in r?!!r.trailing:d),k.cancel=function(){void 0!==l&&clearTimeout(l),u=0,o=c=i=l=void 0},k.flush=function(){return void 0===l?s:x(m())},k}},function(t,e,n){t.exports=n(92)},function(t,e,n){"use strict";function r(){return(r=Object.assign||function(t){for(var e,n=1;ndocument.F=Object<\/script>"),t.close(),l=t.F;r--;)delete l.prototype[i[r]];return l()};t.exports=Object.create||function(t,e){var n;return null!==t?(s.prototype=r(t),n=new s,s.prototype=null,n[a]=t):n=l(),void 0===e?n:o(n,e)}},function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},function(t,e,n){"use strict";var r=n(1),o=n(37)(1);r(r.P+r.F*!n(22)([].map,!0),"Array",{map:function(t){return o(this,t,arguments[1])}})},function(t,e,n){var r=n(4),o=n(78).set;t.exports=function(t,e,n){var i,a=e.constructor;return a!==n&&"function"==typeof a&&(i=a.prototype)!==n.prototype&&r(i)&&o&&o(t,i),t}},function(t,e,n){var r=n(47),o=n(28).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,o)}},function(t,e,n){var r=n(1),o=n(7),i=n(5),a=n(82),s="["+a+"]",l=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),u=function(t,e,n){var o={},s=i(function(){return!!a[t]()||"​…"!="​…"[t]()}),l=o[t]=s?e(p):a[t];n&&(o[n]=l),r(r.P+r.F*s,"String",o)},p=u.trim=function(t,e){return t=String(o(t)),1&e&&(t=t.replace(l,"")),2&e&&(t=t.replace(c,"")),t};t.exports=u},function(t,e,n){var r=n(94);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,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},function(t,e,n){var r=n(29),o=n(33).document,i=r(o)&&r(o.createElement);t.exports=function(t){return i?o.createElement(t):{}}},function(t,e,n){"use strict";var r=n(97)(!0);t.exports=function(t,e,n){return e+(n?r(t,e).length:1)}},function(t,e,n){"use strict";var r=n(98),o=RegExp.prototype.exec;t.exports=function(t,e){var n=t.exec;if("function"==typeof n){var i=n.call(t,e);if("object"!=typeof i)throw new TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw new TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},function(t,e,n){"use strict";n(99);var r=n(19),o=n(18),i=n(5),a=n(7),s=n(17),l=n(51),c=s("species"),u=!i(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),p=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 f=s(t),d=!i(function(){var e={};return e[f]=function(){return 7},7!=""[t](e)}),h=d?!i(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[f](""),!e}):void 0;if(!d||!h||"replace"===t&&!u||"split"===t&&!p){var v=/./[f],m=n(a,f,""[t],function(t,e,n,r,o){return e.exec===l?d&&!o?{done:!0,value:v.call(e,n,r)}:{done:!0,value:t.call(n,e,r)}:{done:!1}}),g=m[0],y=m[1];r(String.prototype,t,g),o(RegExp.prototype,f,2==e?function(t,e){return y.call(t,this,e)}:function(t){return y.call(t,this)})}}},function(t,e,n){"use strict";var r=n(6);t.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,n){t.exports=n(102)},function(t,e,n){Promise.all([n.e(0),n.e(48)]).then(n.t.bind(null,103,7))},function(t,e,n){},function(t,e,n){"use strict";var r=n(2),o=n(8),i=n(10),a=n(65),s=n(25),l=n(5),c=n(66).f,u=n(43).f,p=n(9).f,f=n(67).trim,d=r.Number,h=d,v=d.prototype,m="Number"==i(n(62)(v)),g="trim"in String.prototype,y=function(t){var e=s(t,!1);if("string"==typeof e&&e.length>2){var n,r,o,i=(e=g?e.trim():f(e,3)).charCodeAt(0);if(43===i||45===i){if(88===(n=e.charCodeAt(2))||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:r=2,o=49;break;case 79:case 111:r=8,o=55;break;default:return+e}for(var a,l=e.slice(2),c=0,u=l.length;co)return NaN;return parseInt(l,r)}}return+e};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof d&&(m?l(function(){v.valueOf.call(n)}):"Number"!=i(n))?a(new h(y(e)),n,d):y(e)};for(var b,_=n(3)?c(h):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),w=0;_.length>w;w++)o(h,b=_[w])&&!o(d,b)&&p(d,b,u(h,b));d.prototype=v,v.constructor=d,n(19)(r,"Number",d)}},function(t,e,n){var r=n(4),o=n(6),i=function(t,e){if(o(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,r){try{(r=n(24)(Function.call,n(43).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,n){return i(t,n),e?t.__proto__=n:r(t,n),t}}({},!1):void 0),check:i}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,n){var r=n(12),o=Math.max,i=Math.min;t.exports=function(t,e){return(t=r(t))<0?o(t+e,0):i(t,e)}},function(t,e,n){t.exports=n(26)("native-function-to-string",Function.toString)},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,n){var r=n(9),o=n(6),i=n(56);t.exports=n(3)?Object.defineProperties:function(t,e){o(t);for(var n,a=i(e),s=a.length,l=0;s>l;)r.f(t,n=a[l++],e[n]);return t}},function(t,e,n){var r=n(2).document;t.exports=r&&r.documentElement},function(t,e,n){"use strict";var r=n(13);n.n(r).a},function(t,e,n){var r=n(87);t.exports=function(t,e){return new(r(t))(e)}},function(t,e,n){var r=n(4),o=n(49),i=n(17)("species");t.exports=function(t){var e;return o(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!o(e.prototype)||(e=void 0),r(e)&&null===(e=e[i])&&(e=void 0)),void 0===e?Array:e}},function(t,e,n){"use strict";var r=n(14);n.n(r).a},function(t,e,n){var r=n(1);r(r.P,"Function",{bind:n(90)})},function(t,e,n){"use strict";var r=n(42),o=n(4),i=n(91),a=[].slice,s={},l=function(t,e,n){if(!(e in s)){for(var r=[],o=0;o=c?t?"":void 0:(i=s.charCodeAt(l))<55296||i>56319||l+1===c||(a=s.charCodeAt(l+1))<56320||a>57343?t?s.charAt(l):i:t?s.slice(l,l+2):a-56320+(i-55296<<10)+65536}}},function(t,e,n){var r=n(10),o=n(17)("toStringTag"),i="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),o))?n:i?r(e):"Object"==(a=r(e))&&"function"==typeof e.callee?"Arguments":a}},function(t,e,n){"use strict";var r=n(51);n(1)({target:"RegExp",proto:!0,forced:r!==/./.exec},{exec:r})},function(t,e,n){},function(t,e,n){"use strict";var r=n(15);n.n(r).a},function(t,e,n){"use strict";n.r(e); /*! @@ -11,4 +11,4 @@ var r=Object.freeze({});function o(t){return null==t}function i(t){return null!= * vue-router v3.0.7 * (c) 2019 Evan You * @license MIT - */function Fo(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Do(t,e){for(var n in e)t[n]=e[n];return t}var zo={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,i=e.data;i.routerView=!0;for(var a=o.$createElement,s=n.name,l=o.$route,c=o._routerViewCache||(o._routerViewCache={}),u=0,p=!1;o&&o._routerRoot!==o;){var f=o.$vnode&&o.$vnode.data;f&&(f.routerView&&u++,f.keepAlive&&o._inactive&&(p=!0)),o=o.$parent}if(i.routerViewDepth=u,p)return a(c[s],i,r);var d=l.matched[u];if(!d)return c[s]=null,a();var h=c[s]=d.components[s];i.registerRouteInstance=function(t,e){var n=d.instances[s];(e&&n!==t||!e&&n===t)&&(d.instances[s]=e)},(i.hook||(i.hook={})).prepatch=function(t,e){d.instances[s]=e.componentInstance},i.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==d.instances[s]&&(d.instances[s]=t.componentInstance)};var v=i.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}(l,d.props&&d.props[s]);if(v){v=i.props=Do({},v);var m=i.attrs=i.attrs||{};for(var g in v)h.props&&g in h.props||(m[g]=v[g],delete v[g])}return a(h,i,r)}};var Bo=/[!'()*]/g,Vo=function(t){return"%"+t.charCodeAt(0).toString(16)},Zo=/%2C/g,Ho=function(t){return encodeURIComponent(t).replace(Bo,Vo).replace(Zo,",")},Wo=decodeURIComponent;function qo(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var n=t.replace(/\+/g," ").split("="),r=Wo(n.shift()),o=n.length>0?Wo(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function Yo(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void 0===n)return"";if(null===n)return Ho(e);if(Array.isArray(n)){var r=[];return n.forEach(function(t){void 0!==t&&(null===t?r.push(Ho(e)):r.push(Ho(e)+"="+Ho(t)))}),r.join("&")}return Ho(e)+"="+Ho(n)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}var Xo=/\/?$/;function Jo(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=Go(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:ei(e,o),matched:t?ti(t):[]};return n&&(a.redirectedFrom=ei(n,o)),Object.freeze(a)}function Go(t){if(Array.isArray(t))return t.map(Go);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=Go(t[n]);return e}return t}var Qo=Jo(null,{path:"/"});function ti(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function ei(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||Yo)(r)+o}function ni(t,e){return e===Qo?t===e:!!e&&(t.path&&e.path?t.path.replace(Xo,"")===e.path.replace(Xo,"")&&t.hash===e.hash&&ri(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&ri(t.query,e.query)&&ri(t.params,e.params)))}function ri(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(function(n){var r=t[n],o=e[n];return"object"==typeof r&&"object"==typeof o?ri(r,o):String(r)===String(o)})}var oi,ii=[String,Object],ai=[String,Array],si={name:"RouterLink",props:{to:{type:ii,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:ai,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,l={},c=n.options.linkActiveClass,u=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,f=null==u?"router-link-exact-active":u,d=null==this.activeClass?p:this.activeClass,h=null==this.exactActiveClass?f:this.exactActiveClass,v=i.path?Jo(null,i,null,n):a;l[h]=ni(r,v),l[d]=this.exact?l[h]:function(t,e){return 0===t.path.replace(Xo,"/").indexOf(e.path.replace(Xo,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=function(t){li(t)&&(e.replace?n.replace(i):n.push(i))},g={click:li};Array.isArray(this.event)?this.event.forEach(function(t){g[t]=m}):g[this.event]=m;var y={class:l};if("a"===this.tag)y.on=g,y.attrs={href:s};else{var b=function t(e){if(e)for(var n,r=0;r=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),l=e&&e.path||"/",c=s.path?ui(s.path,l,n||o.append):l,u=function(t,e,n){void 0===e&&(e={});var r,o=n||qo;try{r=o(t||"")}catch(t){r={}}for(var i in e)r[i]=e[i];return r}(s.query,o.query,r&&r.options.parseQuery),p=o.hash||s.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:c,query:u,hash:p}}function Li(t,e){var n=Ai(t),r=n.pathList,o=n.pathMap,i=n.nameMap;function a(t,n,a){var s=ji(t,n,!1,e),c=s.name;if(c){var u=i[c];if(!u)return l(null,s);var p=u.regex.keys.filter(function(t){return!t.optional}).map(function(t){return t.name});if("object"!=typeof s.params&&(s.params={}),n&&"object"==typeof n.params)for(var f in n.params)!(f in s.params)&&p.indexOf(f)>-1&&(s.params[f]=n.params[f]);return s.path=Si(u.path,s.params),l(u,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],function(){r(o+1)}):r(o+1)};r(0)}function Gi(t){return function(e,n,r){var o=!1,i=0,a=null;Qi(t,function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var l,c=na(function(e){var o;((o=e).__esModule||ea&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:oi.extend(e),n.components[s]=e,--i<=0&&r()}),u=na(function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Fo(t)?t:new Error(e),r(a))});try{l=t(c,u)}catch(t){u(t)}if(l)if("function"==typeof l.then)l.then(c,u);else{var p=l.component;p&&"function"==typeof p.then&&p.then(c,u)}}}),o||r()}}function Qi(t,e){return ta(t.map(function(t){return Object.keys(t.components).map(function(n){return e(t.components[n],t.instances[n],t,n)})}))}function ta(t){return Array.prototype.concat.apply([],t)}var ea="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function na(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ra=function(t,e){this.router=t,this.base=function(t){if(!t)if(ci){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=Qo,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function oa(t,e,n,r){var o=Qi(t,function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=oi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map(function(t){return n(t,r,o,i)}):n(a,r,o,i)});return ta(r?o.reverse():o)}function ia(t,e){if(e)return function(){return t.apply(e,arguments)}}ra.prototype.listen=function(t){this.cb=t},ra.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},ra.prototype.onError=function(t){this.errorCbs.push(t)},ra.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach(function(t){t(o)}))},function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach(function(e){e(t)}))})},ra.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current,i=function(t){Fo(t)&&(r.errorCbs.length?r.errorCbs.forEach(function(e){e(t)}):console.error(t)),n&&n(t)};if(ni(t,o)&&t.matched.length===o.matched.length)return this.ensureURL(),i();var a=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n-1?decodeURI(t.slice(0,r))+t.slice(r):decodeURI(t)}else n>-1&&(t=decodeURI(t.slice(0,n))+t.slice(n));return t}function pa(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function fa(t){Vi?Yi(pa(t)):window.location.hash=t}function da(t){Vi?Xi(pa(t)):window.location.replace(pa(t))}var ha=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)},n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,function(){e.index=n,e.updateRoute(r)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ra),va=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Li(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Vi&&!1!==t.fallback,this.fallback&&(e="hash"),ci||(e="abstract"),this.mode=e,e){case"history":this.history=new aa(this,t.base);break;case"hash":this.history=new la(this,t.base,this.fallback);break;case"abstract":this.history=new ha(this,t.base);break;default:0}},ma={currentRoute:{configurable:!0}};function ya(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}va.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},ma.currentRoute.get=function(){return this.history&&this.history.current},va.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null)}),!this.app){this.app=t;var n=this.history;if(n instanceof aa)n.transitionTo(n.getCurrentLocation());else if(n instanceof la){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},va.prototype.beforeEach=function(t){return ya(this.beforeHooks,t)},va.prototype.beforeResolve=function(t){return ya(this.resolveHooks,t)},va.prototype.afterEach=function(t){return ya(this.afterHooks,t)},va.prototype.onReady=function(t,e){this.history.onReady(t,e)},va.prototype.onError=function(t){this.history.onError(t)},va.prototype.push=function(t,e,n){this.history.push(t,e,n)},va.prototype.replace=function(t,e,n){this.history.replace(t,e,n)},va.prototype.go=function(t){this.history.go(t)},va.prototype.back=function(){this.go(-1)},va.prototype.forward=function(){this.go(1)},va.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},va.prototype.resolve=function(t,e,n){var r=ji(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?pi(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},va.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==Qo&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(va.prototype,ma),va.install=function t(e){if(!t.installed||oi!==e){t.installed=!0,oi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",zo),e.component("RouterLink",si);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},va.version="3.0.7",ci&&window.Vue&&window.Vue.use(va);var ba=va;var _a={NotFound:()=>n.e(32).then(n.bind(null,355)),Layout:()=>Promise.all([n.e(0),n.e(2),n.e(11)]).then(n.bind(null,356))},wa={"v-cbd95058":()=>n.e(33).then(n.bind(null,361)),"v-77cc1ec7":()=>n.e(22).then(n.bind(null,359)),"v-796bf18c":()=>n.e(35).then(n.bind(null,377)),"v-83c8a8b8":()=>n.e(34).then(n.bind(null,370)),"v-46ec0327":()=>n.e(12).then(n.bind(null,394)),"v-0a714732":()=>n.e(6).then(n.bind(null,395)),"v-76564011":()=>n.e(36).then(n.bind(null,396)),"v-8d4dfbb6":()=>n.e(23).then(n.bind(null,397)),"v-986dbade":()=>n.e(20).then(n.bind(null,373)),"v-554543f9":()=>n.e(5).then(n.bind(null,368)),"v-8658c2f2":()=>n.e(9).then(n.bind(null,367)),"v-0996c938":()=>n.e(37).then(n.bind(null,366)),"v-7434c187":()=>n.e(3).then(n.bind(null,365)),"v-c0fa0cf2":()=>n.e(7).then(n.bind(null,364)),"v-6c5acde7":()=>n.e(15).then(n.bind(null,362)),"v-240eddf2":()=>n.e(16).then(n.bind(null,371)),"v-4db1779e":()=>n.e(38).then(n.bind(null,372)),"v-1263fa20":()=>n.e(39).then(n.bind(null,374)),"v-9d44dcf2":()=>n.e(13).then(n.bind(null,375)),"v-7d2f6cc7":()=>n.e(17).then(n.bind(null,378)),"v-5be22288":()=>n.e(28).then(n.bind(null,380)),"v-61ad5b01":()=>n.e(40).then(n.bind(null,382)),"v-5db85fb7":()=>n.e(10).then(n.bind(null,384)),"v-4b91c5e7":()=>n.e(27).then(n.bind(null,386)),"v-5f820cc2":()=>n.e(29).then(n.bind(null,388)),"v-649782a7":()=>n.e(42).then(n.bind(null,390)),"v-1401ca46":()=>n.e(41).then(n.bind(null,392)),"v-53360ab2":()=>n.e(24).then(n.bind(null,393)),"v-c621d7f2":()=>n.e(30).then(n.bind(null,391)),"v-66d56047":()=>n.e(43).then(n.bind(null,389)),"v-16dbc3c4":()=>n.e(44).then(n.bind(null,387)),"v-bfdadf72":()=>n.e(45).then(n.bind(null,385)),"v-7249b1a4":()=>n.e(25).then(n.bind(null,383)),"v-531fa289":()=>n.e(46).then(n.bind(null,381)),"v-d575ee32":()=>n.e(47).then(n.bind(null,379)),"v-480f517b":()=>n.e(14).then(n.bind(null,398)),"v-6e54f1c1":()=>n.e(31).then(n.bind(null,376)),"v-5566a571":()=>n.e(19).then(n.bind(null,363)),"v-292f2847":()=>n.e(18).then(n.bind(null,360)),"v-3732859b":()=>n.e(21).then(n.bind(null,358)),"v-0393ebb2":()=>n.e(8).then(n.bind(null,357))};function xa(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const ka=/-(\w)/g,Oa=xa(t=>t.replace(ka,(t,e)=>e?e.toUpperCase():"")),$a=/\B([A-Z])/g,Ea=xa(t=>t.replace($a,"-$1").toLowerCase()),Ca=xa(t=>t.charAt(0).toUpperCase()+t.slice(1));function Ta(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Ca(Oa(e))):t(Ca(e))||t(Ea(e))}const Sa=Object.assign({},_a,wa),Aa=t=>Sa[t],Pa=t=>wa[t],ja=t=>_a[t],La=t=>Ko.component(t);function Ia(t){return Ta(Pa,t)}function Ra(t){return Ta(ja,t)}function Na(t){return Ta(Aa,t)}function Ma(t){return Ta(La,t)}function Ua(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!Ma(t)&&Na(t)){const e=await Na(t)();Ko.component(t,e.default)}}))}function Ka(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var Fa={created(){this.$ssrContext&&(this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.description=this.$page.description||this.$description)},mounted(){this.currentMetaTags=new Set,this.updateMeta()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.$page.frontmatter.meta||[],e=t.slice(0);0===t.filter(t=>"description"===t.name).length&&e.push({name:"description",content:this.$description});const n=document.querySelectorAll('meta[name="description"]');n.length&&n.forEach(t=>this.currentMetaTags.add(t)),this.currentMetaTags=new Set(Da(e,this.currentMetaTags))}},watch:{$page(){this.updateMeta()}},beforeDestroy(){Da(null,this.currentMetaTags)}};function Da(t,e){if(e&&[...e].forEach(t=>{document.head.removeChild(t)}),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}var za=n(52),Ba={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(za)()(function(){this.setActiveHash()},300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Va=n(16),Za=n.n(Va),Ha=[Fa,Ba,{mounted(){Za.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Ko.component(t.name)||Za.a.start(),n()}),this.$router.afterEach(()=>{Za.a.done(),this.isSidebarOpen=!1})}}],Wa={methods:{getLayout:function(){if(this.$page.path){var t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}},computed:{layout:function(){var t=this.getLayout();return Ka("layout",t),Ko.component(t)}}},qa=n(0),Ya=Object(qa.a)(Wa,function(){var t=this.$createElement;return(this._self._c||t)(this.layout,{tag:"component"})},[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Ya,"mixins",Ha);const Xa=[{name:"v-cbd95058",path:"/",component:Ya,beforeEnter:(t,e,n)=>{Ua("HomePage","v-cbd95058").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-77cc1ec7",path:"/guide/cluster/computing.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-77cc1ec7").then(n)}},{name:"v-796bf18c",path:"/guide/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-796bf18c").then(n)}},{path:"/guide/index.html",redirect:"/guide/"},{name:"v-83c8a8b8",path:"/devops/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-83c8a8b8").then(n)}},{path:"/devops/index.html",redirect:"/devops/"},{name:"v-46ec0327",path:"/guide/cluster/namespace.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-46ec0327").then(n)}},{name:"v-0a714732",path:"/guide/cluster/storage.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-0a714732").then(n)}},{name:"v-76564011",path:"/guide/diagonize/port-forward.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-76564011").then(n)}},{name:"v-8d4dfbb6",path:"/guide/diagonize/logs.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-8d4dfbb6").then(n)}},{name:"v-986dbade",path:"/guide/diagonize/events.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-986dbade").then(n)}},{name:"v-554543f9",path:"/guide/example/import.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-554543f9").then(n)}},{name:"v-8658c2f2",path:"/guide/example/busybox.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-8658c2f2").then(n)}},{name:"v-0996c938",path:"/guide/monitor/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-0996c938").then(n)}},{path:"/guide/monitor/index.html",redirect:"/guide/monitor/"},{name:"v-7434c187",path:"/guide/example/monitor.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-7434c187").then(n)}},{name:"v-c0fa0cf2",path:"/guide/namespace/adjustion.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-c0fa0cf2").then(n)}},{name:"v-6c5acde7",path:"/guide/namespace/configMap.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-6c5acde7").then(n)}},{name:"v-240eddf2",path:"/guide/namespace/pvc.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-240eddf2").then(n)}},{name:"v-4db1779e",path:"/guide/monitor/apis.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-4db1779e").then(n)}},{name:"v-1263fa20",path:"/guide/namespace/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-1263fa20").then(n)}},{path:"/guide/namespace/index.html",redirect:"/guide/namespace/"},{name:"v-9d44dcf2",path:"/guide/namespace/multi-env.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-9d44dcf2").then(n)}},{name:"v-7d2f6cc7",path:"/guide/namespace/secrets.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-7d2f6cc7").then(n)}},{name:"v-5be22288",path:"/install/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5be22288").then(n)}},{path:"/install/index.html",redirect:"/install/"},{name:"v-61ad5b01",path:"/install/install-common-ingress.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-61ad5b01").then(n)}},{name:"v-5db85fb7",path:"/guide/namespace/workload.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5db85fb7").then(n)}},{name:"v-4b91c5e7",path:"/install/install-common-vm.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-4b91c5e7").then(n)}},{name:"v-5f820cc2",path:"/install/install-dashboard%20copy.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5f820cc2").then(n)}},{path:"/install/install-dashboard copy.html",redirect:"/install/install-dashboard%20copy.html"},{name:"v-649782a7",path:"/install/install-dashboard-diagonize.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-649782a7").then(n)}},{name:"v-1401ca46",path:"/install/install-dashboard-diagonize-kube-dns.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-1401ca46").then(n)}},{name:"v-53360ab2",path:"/install/install-dashboard-upgrade.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-53360ab2").then(n)}},{name:"v-c621d7f2",path:"/install/install-dashboard.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-c621d7f2").then(n)}},{name:"v-66d56047",path:"/install/install-kubectl.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-66d56047").then(n)}},{name:"v-16dbc3c4",path:"/micro-service/spring-cloud/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-16dbc3c4").then(n)}},{path:"/micro-service/spring-cloud/index.html",redirect:"/micro-service/spring-cloud/"},{name:"v-bfdadf72",path:"/micro-service/spring-cloud/cloud-eureka.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-bfdadf72").then(n)}},{name:"v-7249b1a4",path:"/overview/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-7249b1a4").then(n)}},{path:"/overview/index.html",redirect:"/overview/"},{name:"v-531fa289",path:"/overview/change-log-on-the-way.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-531fa289").then(n)}},{name:"v-d575ee32",path:"/overview/change-log.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-d575ee32").then(n)}},{name:"v-480f517b",path:"/overview/k8s-core-concepts.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-480f517b").then(n)}},{name:"v-6e54f1c1",path:"/overview/support.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-6e54f1c1").then(n)}},{name:"v-5566a571",path:"/overview/why-kuboard.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5566a571").then(n)}},{name:"v-292f2847",path:"/install/install-k8s.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-292f2847").then(n)}},{name:"v-3732859b",path:"/install/install-kubernetes.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-3732859b").then(n)}},{name:"v-0393ebb2",path:"/overview/concepts.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-0393ebb2").then(n)}},{path:"*",component:Ya}],Ja={title:"Kuboard",description:"A cool Kubernetes Dashboard",base:"/",pages:[{title:"Home",frontmatter:{home:!0,layout:"HomePage",actionText:"在线体验",actionText2:"开始使用 →",actionLink2:"/overview/",features:[{title:"降低 Kubernetes 门槛",details:"创建工作负载,导出/导入配置,批量调整镜像版本,问题诊断"},{title:"直观显示微服务架构",details:"展现层/网关层/服务层/持久层/中间件层/监控层"},{title:"上下文关联监控",details:"资源层监控/中间件层监控/链路层监控"}],footer:"Copyright © 2019-present Huanqing Shao",meta:[{property:"article:modified_time",content:"2019-07-29T23:02:29.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Home"},{property:"og:type",content:"website"},{property:"og:url",content:"/"},{name:"twitter:title",content:"Home"},{name:"twitter:url",content:"/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/",relativePath:"README.md",key:"v-cbd95058",path:"/",lastUpdated:"2019-07-30 07:02:29"},{title:"计算资源管理",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"计算资源管理"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/cluster/computing.html"},{name:"twitter:title",content:"计算资源管理"},{name:"twitter:url",content:"/guide/cluster/computing.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/cluster/computing.html",relativePath:"guide/cluster/computing.md",key:"v-77cc1ec7",path:"/guide/cluster/computing.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"添加节点",slug:"添加节点"},{level:2,title:"查看节点",slug:"查看节点"},{level:2,title:"移除节点",slug:"移除节点"}],lastUpdated:"2019-07-25 06:22:52"},{title:"使用手册",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"使用手册"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/"},{name:"twitter:title",content:"使用手册"},{name:"twitter:url",content:"/guide/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/",relativePath:"guide/README.md",key:"v-796bf18c",path:"/guide/",lastUpdated:"2019-07-31 07:56:38"},{title:"Kubernetes + DevOps",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:35:19.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Kubernetes + DevOps"},{property:"og:type",content:"website"},{property:"og:url",content:"/devops/"},{name:"twitter:title",content:"Kubernetes + DevOps"},{name:"twitter:url",content:"/devops/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/devops/",relativePath:"devops/README.md",key:"v-83c8a8b8",path:"/devops/",lastUpdated:"2019-07-30 07:35:19"},{title:"名称空间管理",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"名称空间管理"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/cluster/namespace.html"},{name:"twitter:title",content:"名称空间管理"},{name:"twitter:url",content:"/guide/cluster/namespace.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/cluster/namespace.html",relativePath:"guide/cluster/namespace.md",key:"v-46ec0327",path:"/guide/cluster/namespace.html",headers:[{level:2,title:"创建名称空间",slug:"创建名称空间"},{level:3,title:"前提",slug:"前提"},{level:3,title:"准备",slug:"准备"}],lastUpdated:"2019-07-25 06:22:52"},{title:"存储空间管理",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"存储空间管理"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/cluster/storage.html"},{name:"twitter:title",content:"存储空间管理"},{name:"twitter:url",content:"/guide/cluster/storage.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/cluster/storage.html",relativePath:"guide/cluster/storage.md",key:"v-0a714732",path:"/guide/cluster/storage.html",headers:[{level:2,title:"创建存储类",slug:"创建存储类"},{level:3,title:"在阿里云创建 NAS 服务",slug:"在阿里云创建-nas-服务"},{level:3,title:"在 Kuboard 创建存储类",slug:"在-kuboard-创建存储类"}],lastUpdated:"2019-07-25 06:22:52"},{title:"端口转发",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-25T14:26:28.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"端口转发"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/diagonize/port-forward.html"},{name:"twitter:title",content:"端口转发"},{name:"twitter:url",content:"/guide/diagonize/port-forward.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/diagonize/port-forward.html",relativePath:"guide/diagonize/port-forward.md",key:"v-76564011",path:"/guide/diagonize/port-forward.html",headers:[{level:2,title:"Feature planned",slug:"feature-planned"}],lastUpdated:"2019-07-25 22:26:28"},{title:"日志及终端",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"日志及终端"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/diagonize/logs.html"},{name:"twitter:title",content:"日志及终端"},{name:"twitter:url",content:"/guide/diagonize/logs.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/diagonize/logs.html",relativePath:"guide/diagonize/logs.md",key:"v-8d4dfbb6",path:"/guide/diagonize/logs.html",lastUpdated:"2019-07-25 06:22:52"},{title:"集群事件",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"集群事件"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/diagonize/events.html"},{name:"twitter:title",content:"集群事件"},{name:"twitter:url",content:"/guide/diagonize/events.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/diagonize/events.html",relativePath:"guide/diagonize/events.md",key:"v-986dbade",path:"/guide/diagonize/events.html",headers:[{level:2,title:"错误事件提示",slug:"错误事件提示"},{level:2,title:"全局事件",slug:"全局事件"},{level:3,title:"查看全局事件",slug:"查看全局事件"},{level:3,title:"删除事件",slug:"删除事件"},{level:2,title:"微服务上下文相关的事件",slug:"微服务上下文相关的事件"}],lastUpdated:"2019-07-25 06:22:52"},{title:"导入 example 微服务",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T10:55:05.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"导入 example 微服务"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/example/import.html"},{name:"twitter:title",content:"导入 example 微服务"},{name:"twitter:url",content:"/guide/example/import.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/example/import.html",relativePath:"guide/example/import.md",key:"v-554543f9",path:"/guide/example/import.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"创建存储资源",slug:"创建存储资源"},{level:2,title:"创建名称空间",slug:"创建名称空间"},{level:2,title:"导入 example",slug:"导入-example"},{level:2,title:"验证 web-example",slug:"验证-web-example"}],lastUpdated:"2019-07-26 18:55:05"},{title:"部署 busybox",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-25T14:26:28.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"部署 busybox"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/example/busybox.html"},{name:"twitter:title",content:"部署 busybox"},{name:"twitter:url",content:"/guide/example/busybox.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/example/busybox.html",relativePath:"guide/example/busybox.md",key:"v-8658c2f2",path:"/guide/example/busybox.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"部署 busybox",slug:"部署-busybox-2"},{level:2,title:"验证工作负载",slug:"验证工作负载"}],lastUpdated:"2019-07-25 22:26:28"},{title:"监控套件",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"监控套件"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/monitor/"},{name:"twitter:title",content:"监控套件"},{name:"twitter:url",content:"/guide/monitor/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/monitor/",relativePath:"guide/monitor/README.md",key:"v-0996c938",path:"/guide/monitor/",lastUpdated:"2019-07-31 07:56:38"},{title:"监控 example",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"监控 example"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/example/monitor.html"},{name:"twitter:title",content:"监控 example"},{name:"twitter:url",content:"/guide/example/monitor.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/example/monitor.html",relativePath:"guide/example/monitor.md",key:"v-7434c187",path:"/guide/example/monitor.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"安装监控套件",slug:"安装监控套件"},{level:3,title:"安装全局监控套件",slug:"安装全局监控套件"},{level:3,title:"安装名称空间监控套件",slug:"安装名称空间监控套件"},{level:3,title:"查看监控套件的工作负载",slug:"查看监控套件的工作负载"},{level:2,title:"重启 example 容器组",slug:"重启-example-容器组"},{level:2,title:"查看监控信息",slug:"查看监控信息"},{level:3,title:"查看资源层监控信息",slug:"查看资源层监控信息"},{level:3,title:"查看中间件层监控信息",slug:"查看中间件层监控信息"},{level:3,title:"查看链路追踪监控信息",slug:"查看链路追踪监控信息"}],lastUpdated:"2019-07-31 07:56:38"},{title:"日常调整",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"日常调整"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/adjustion.html"},{name:"twitter:title",content:"日常调整"},{name:"twitter:url",content:"/guide/namespace/adjustion.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/adjustion.html",relativePath:"guide/namespace/adjustion.md",key:"v-c0fa0cf2",path:"/guide/namespace/adjustion.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"批量删除容器组",slug:"批量删除容器组"},{level:2,title:"批量调整镜像版本",slug:"批量调整镜像版本"},{level:2,title:"批量调整工作负载的副本数",slug:"批量调整工作负载的副本数"}],lastUpdated:"2019-07-25 06:22:52"},{title:"配置",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"配置"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/configMap.html"},{name:"twitter:title",content:"配置"},{name:"twitter:url",content:"/guide/namespace/configMap.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/configMap.html",relativePath:"guide/namespace/configMap.md",key:"v-6c5acde7",path:"/guide/namespace/configMap.html",lastUpdated:"2019-07-25 06:22:52"},{title:"存储卷声明",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"存储卷声明"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/pvc.html"},{name:"twitter:title",content:"存储卷声明"},{name:"twitter:url",content:"/guide/namespace/pvc.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/pvc.html",relativePath:"guide/namespace/pvc.md",key:"v-240eddf2",path:"/guide/namespace/pvc.html",lastUpdated:"2019-07-25 06:22:52"},{title:"自定义监控套件",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"自定义监控套件"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/monitor/apis.html"},{name:"twitter:title",content:"自定义监控套件"},{name:"twitter:url",content:"/guide/monitor/apis.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/monitor/apis.html",relativePath:"guide/monitor/apis.md",key:"v-4db1779e",path:"/guide/monitor/apis.html",lastUpdated:"2019-07-31 07:56:38"},{title:"应用管理",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"应用管理"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/"},{name:"twitter:title",content:"应用管理"},{name:"twitter:url",content:"/guide/namespace/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/",relativePath:"guide/namespace/index.md",key:"v-1263fa20",path:"/guide/namespace/",headers:[{level:2,title:"创建工作负载",slug:"创建工作负载"},{level:2,title:"删除工作负载",slug:"删除工作负载"},{level:2,title:"伸缩",slug:"伸缩"},{level:2,title:"升级工作负载版本",slug:"升级工作负载版本"},{level:2,title:"环境迁移",slug:"环境迁移"},{level:3,title:"导出",slug:"导出"},{level:3,title:"导入",slug:"导入"}],lastUpdated:"2019-07-25 06:22:52"},{title:"多环境",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"多环境"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/multi-env.html"},{name:"twitter:title",content:"多环境"},{name:"twitter:url",content:"/guide/namespace/multi-env.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/multi-env.html",relativePath:"guide/namespace/multi-env.md",key:"v-9d44dcf2",path:"/guide/namespace/multi-env.html",headers:[{level:2,title:"导出配置",slug:"导出配置"},{level:3,title:"前提",slug:"前提"},{level:3,title:"操作步骤",slug:"操作步骤"},{level:2,title:"导入配置",slug:"导入配置"},{level:3,title:"前提",slug:"前提-2"},{level:3,title:"操作步骤",slug:"操作步骤-2"}],lastUpdated:"2019-07-25 06:22:52"},{title:"Secrets",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Secrets"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/secrets.html"},{name:"twitter:title",content:"Secrets"},{name:"twitter:url",content:"/guide/namespace/secrets.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/secrets.html",relativePath:"guide/namespace/secrets.md",key:"v-7d2f6cc7",path:"/guide/namespace/secrets.html",lastUpdated:"2019-07-25 06:22:52"},{title:"概述",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-27T16:06:46.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"概述"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/"},{name:"twitter:title",content:"概述"},{name:"twitter:url",content:"/install/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/",relativePath:"install/README.md",key:"v-5be22288",path:"/install/",lastUpdated:"2019-07-28 00:06:46"},{title:"安装 Ingress Controller",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Ingress Controller"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-common-ingress.html"},{name:"twitter:title",content:"安装 Ingress Controller"},{name:"twitter:url",content:"/install/install-common-ingress.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-common-ingress.html",relativePath:"install/install-common-ingress.md",key:"v-61ad5b01",path:"/install/install-common-ingress.html",headers:[{level:2,title:"安装 Ingress Controller",slug:"安装-ingress-controller"},{level:3,title:"在 apple-master-a-1 上执行",slug:"在-apple-master-a-1-上执行"},{level:3,title:"在IaaS云控制台完成如下配置(公网ELB)",slug:"在iaas云控制台完成如下配置(公网elb)"},{level:3,title:"配置域名解析",slug:"配置域名解析"},{level:3,title:"验证配置",slug:"验证配置"}],lastUpdated:"2019-07-25 06:22:52"},{title:"工作负载",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"工作负载"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/workload.html"},{name:"twitter:title",content:"工作负载"},{name:"twitter:url",content:"/guide/namespace/workload.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/workload.html",relativePath:"guide/namespace/workload.md",key:"v-5db85fb7",path:"/guide/namespace/workload.html",headers:[{level:2,title:"创建/查看/编辑工作负载",slug:"创建-查看-编辑工作负载"},{level:2,title:"伸缩",slug:"伸缩"},{level:2,title:"删除容器组",slug:"删除容器组"},{level:2,title:"诊断问题",slug:"诊断问题"},{level:3,title:"事件: Kubernetes 部署相关问题",slug:"事件:-kubernetes-部署相关问题"},{level:3,title:"日志: 容器运行时产生的错误",slug:"日志:-容器运行时产生的错误"},{level:3,title:"终端: 通过交互式命令,在容器内诊断问题",slug:"终端:-通过交互式命令,在容器内诊断问题"}],lastUpdated:"2019-07-25 06:22:52"},{title:"制作标准机镜像",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"制作标准机镜像"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-common-vm.html"},{name:"twitter:title",content:"制作标准机镜像"},{name:"twitter:url",content:"/install/install-common-vm.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-common-vm.html",relativePath:"install/install-common-vm.md",key:"v-4b91c5e7",path:"/install/install-common-vm.html",headers:[{level:2,title:"制作标准机镜像",slug:"制作标准机镜像"},{level:3,title:"安装docker",slug:"安装docker"},{level:3,title:"安装 nfs-utils",slug:"安装-nfs-utils"},{level:3,title:"K8S基本配置",slug:"k8s基本配置"}],lastUpdated:"2019-07-25 06:22:52"},{title:"安装 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T11:20:00.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kuboard"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard%20copy.html"},{name:"twitter:title",content:"安装 Kuboard"},{name:"twitter:url",content:"/install/install-dashboard%20copy.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard%20copy.html",relativePath:"install/install-dashboard copy.md",key:"v-5f820cc2",path:"/install/install-dashboard%20copy.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"兼容性",slug:"兼容性"},{level:2,title:"安装",slug:"安装"},{level:2,title:"获取 Token",slug:"获取-token"},{level:2,title:"访问 Kuboard",slug:"访问-kuboard"}],lastUpdated:"2019-07-29 19:20:00"},{title:"安装 Kuboard 失败时如何诊断",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T23:54:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kuboard 失败时如何诊断"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard-diagonize.html"},{name:"twitter:title",content:"安装 Kuboard 失败时如何诊断"},{name:"twitter:url",content:"/install/install-dashboard-diagonize.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard-diagonize.html",relativePath:"install/install-dashboard-diagonize.md",key:"v-649782a7",path:"/install/install-dashboard-diagonize.html",headers:[{level:2,title:"诊断步骤",slug:"诊断步骤"}],lastUpdated:"2019-07-27 07:54:38"},{title:"创建 kube-dns Service",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T23:54:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"创建 kube-dns Service"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard-diagonize-kube-dns.html"},{name:"twitter:title",content:"创建 kube-dns Service"},{name:"twitter:url",content:"/install/install-dashboard-diagonize-kube-dns.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard-diagonize-kube-dns.html",relativePath:"install/install-dashboard-diagonize-kube-dns.md",key:"v-1401ca46",path:"/install/install-dashboard-diagonize-kube-dns.html",lastUpdated:"2019-07-27 07:54:38"},{title:"升级 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T23:47:18.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"升级 Kuboard"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard-upgrade.html"},{name:"twitter:title",content:"升级 Kuboard"},{name:"twitter:url",content:"/install/install-dashboard-upgrade.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard-upgrade.html",relativePath:"install/install-dashboard-upgrade.md",key:"v-53360ab2",path:"/install/install-dashboard-upgrade.html",headers:[{level:2,title:"最新版本",slug:"最新版本"},{level:2,title:"latest 标签升级",slug:"latest-标签升级"},{level:2,title:"指定版本升级",slug:"指定版本升级"}],lastUpdated:"2019-07-29 07:47:18"},{title:"安装 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:35:19.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kuboard"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard.html"},{name:"twitter:title",content:"安装 Kuboard"},{name:"twitter:url",content:"/install/install-dashboard.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard.html",relativePath:"install/install-dashboard.md",key:"v-c621d7f2",path:"/install/install-dashboard.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"兼容性",slug:"兼容性"},{level:2,title:"安装",slug:"安装"},{level:2,title:"获取 Token",slug:"获取-token"},{level:2,title:"访问 Kuboard",slug:"访问-kuboard"}],lastUpdated:"2019-07-30 07:35:19"},{title:"从客户端电脑远程管理 Kubernetes",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T16:01:26.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"从客户端电脑远程管理 Kubernetes"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-kubectl.html"},{name:"twitter:title",content:"从客户端电脑远程管理 Kubernetes"},{name:"twitter:url",content:"/install/install-kubectl.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-kubectl.html",relativePath:"install/install-kubectl.md",key:"v-66d56047",path:"/install/install-kubectl.html",headers:[{level:2,title:"在客户端电脑安装 kubectl",slug:"在客户端电脑安装-kubectl"},{level:2,title:"获取 kubectl config 文件",slug:"获取-kubectl-config-文件"},{level:2,title:"配置 kubectl 客户端",slug:"配置-kubectl-客户端"}],lastUpdated:"2019-07-27 00:01:26"},{title:"Spring Cloud on Kubernetes",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:35:19.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Spring Cloud on Kubernetes"},{property:"og:type",content:"website"},{property:"og:url",content:"/micro-service/spring-cloud/"},{name:"twitter:title",content:"Spring Cloud on Kubernetes"},{name:"twitter:url",content:"/micro-service/spring-cloud/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/micro-service/spring-cloud/",relativePath:"micro-service/spring-cloud/README.md",key:"v-16dbc3c4",path:"/micro-service/spring-cloud/",lastUpdated:"2019-07-30 07:35:19"},{title:"部署 cloud-eureka",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T15:55:58.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"部署 cloud-eureka"},{property:"og:type",content:"website"},{property:"og:url",content:"/micro-service/spring-cloud/cloud-eureka.html"},{name:"twitter:title",content:"部署 cloud-eureka"},{name:"twitter:url",content:"/micro-service/spring-cloud/cloud-eureka.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/micro-service/spring-cloud/cloud-eureka.html",relativePath:"micro-service/spring-cloud/cloud-eureka.md",key:"v-bfdadf72",path:"/micro-service/spring-cloud/cloud-eureka.html",lastUpdated:"2019-07-28 23:55:58"},{title:"Kuboard 简介",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-31T02:46:33.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Kuboard 简介"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/"},{name:"twitter:title",content:"Kuboard 简介"},{name:"twitter:url",content:"/overview/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/",relativePath:"overview/README.md",key:"v-7249b1a4",path:"/overview/",headers:[{level:2,title:"Kuboard 简介",slug:"kuboard-简介"},{level:2,title:"在线体验",slug:"在线体验"},{level:2,title:"开始使用",slug:"开始使用"},{level:3,title:"Kubernetes 初学者",slug:"kubernetes-初学者"},{level:3,title:"Kubernetes 有经验者",slug:"kubernetes-有经验者"},{level:3,title:"Kubernetes + Spring Cloud",slug:"kubernetes-spring-cloud"},{level:3,title:"Kubernetes + Devops",slug:"kubernetes-devops"},{level:2,title:"在线提问",slug:"在线提问"}],lastUpdated:"2019-07-31 10:46:33"},{title:"v1.0.0-beta.13",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"v1.0.0-beta.13"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/change-log-on-the-way.html"},{name:"twitter:title",content:"v1.0.0-beta.13"},{name:"twitter:url",content:"/overview/change-log-on-the-way.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/change-log-on-the-way.html",relativePath:"overview/change-log-on-the-way.md",key:"v-531fa289",path:"/overview/change-log-on-the-way.html",headers:[{level:2,title:"v1.0.0-beta.13",slug:"v1-0-0-beta-13"}],lastUpdated:"2019-07-31 07:56:38"},{title:"更新日志",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:02:29.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"更新日志"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/change-log.html"},{name:"twitter:title",content:"更新日志"},{name:"twitter:url",content:"/overview/change-log.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/change-log.html",relativePath:"overview/change-log.md",key:"v-d575ee32",path:"/overview/change-log.html",headers:[{level:2,title:"v1.0.0-beta.13",slug:"v1-0-0-beta-13"}],lastUpdated:"2019-07-30 07:02:29"},{title:"十分钟带你理解Kubernetes核心概念",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-31T02:46:33.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"十分钟带你理解Kubernetes核心概念"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/k8s-core-concepts.html"},{name:"twitter:title",content:"十分钟带你理解Kubernetes核心概念"},{name:"twitter:url",content:"/overview/k8s-core-concepts.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/k8s-core-concepts.html",relativePath:"overview/k8s-core-concepts.md",key:"v-480f517b",path:"/overview/k8s-core-concepts.html",headers:[{level:2,title:"什么是Kubernetes?",slug:"什么是kubernetes?"},{level:2,title:"集群",slug:"集群"},{level:2,title:"Pod",slug:"pod"},{level:2,title:"Label",slug:"label"},{level:2,title:"Replication Controller",slug:"replication-controller"},{level:2,title:"Service",slug:"service"},{level:3,title:"Kubernetes Master",slug:"kubernetes-master"}],lastUpdated:"2019-07-31 10:46:33"},{title:"支持",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:02:29.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"支持"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/support.html"},{name:"twitter:title",content:"支持"},{name:"twitter:url",content:"/overview/support.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/support.html",relativePath:"overview/support.md",key:"v-6e54f1c1",path:"/overview/support.html",headers:[{level:2,title:"提交 BUG",slug:"提交-bug"},{level:2,title:"在线提问",slug:"在线提问"}],lastUpdated:"2019-07-30 07:02:29"},{title:"为什么选择 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T08:11:50.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"为什么选择 Kuboard"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/why-kuboard.html"},{name:"twitter:title",content:"为什么选择 Kuboard"},{name:"twitter:url",content:"/overview/why-kuboard.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/why-kuboard.html",relativePath:"overview/why-kuboard.md",key:"v-5566a571",path:"/overview/why-kuboard.html",headers:[{level:2,title:"为什么选择 Kuboard",slug:"为什么选择-kuboard"},{level:2,title:"Kubernetes 入门学习者",slug:"kubernetes-入门学习者"},{level:3,title:"集群概览",slug:"集群概览"},{level:3,title:"名称空间",slug:"名称空间"},{level:3,title:"无需手写 Yaml",slug:"无需手写-yaml"},{level:2,title:"Kubernetes 日常运维人员",slug:"kubernetes-日常运维人员"},{level:3,title:"纯图形界面运维 Kubernetes",slug:"纯图形界面运维-kubernetes"},{level:3,title:"多环境复制",slug:"多环境复制"},{level:3,title:"应用升级",slug:"应用升级"},{level:2,title:"0 侵入性",slug:"_0-侵入性"},{level:2,title:"更多资料",slug:"更多资料"}],lastUpdated:"2019-07-29 16:11:50"},{title:"安装 Kubernetes 单Master节点",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T11:20:00.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kubernetes 单Master节点"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-k8s.html"},{name:"twitter:title",content:"安装 Kubernetes 单Master节点"},{name:"twitter:url",content:"/install/install-k8s.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-k8s.html",relativePath:"install/install-k8s.md",key:"v-292f2847",path:"/install/install-k8s.html",headers:[{level:2,title:"制作标准机镜像",slug:"制作标准机镜像"},{level:3,title:"安装docker",slug:"安装docker"},{level:3,title:"安装 nfs-utils",slug:"安装-nfs-utils"},{level:3,title:"K8S基本配置",slug:"k8s基本配置"},{level:2,title:"初始化 master 节点",slug:"初始化-master-节点"},{level:2,title:"初始化 worker节点",slug:"初始化-worker节点"},{level:3,title:"获得 join命令参数",slug:"获得-join命令参数"},{level:3,title:"初始化worker",slug:"初始化worker"},{level:3,title:"检查初始化结果",slug:"检查初始化结果"},{level:2,title:"移除 worker 节点",slug:"移除-worker-节点"},{level:2,title:"安装 Ingress Controller",slug:"安装-ingress-controller"},{level:2,title:"下一步",slug:"下一步"}],lastUpdated:"2019-07-29 19:20:00"},{title:"安装 Kubernetes 高可用",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T16:01:26.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kubernetes 高可用"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-kubernetes.html"},{name:"twitter:title",content:"安装 Kubernetes 高可用"},{name:"twitter:url",content:"/install/install-kubernetes.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-kubernetes.html",relativePath:"install/install-kubernetes.md",key:"v-3732859b",path:"/install/install-kubernetes.html",headers:[{level:2,title:"制作标准机镜像",slug:"制作标准机镜像"},{level:3,title:"安装docker",slug:"安装docker"},{level:3,title:"安装 nfs-utils",slug:"安装-nfs-utils"},{level:3,title:"K8S基本配置",slug:"k8s基本配置"},{level:2,title:"初始化API Server",slug:"初始化api-server"},{level:3,title:"创建 ApiServer 的 ELB(私网)",slug:"创建-apiserver-的-elb(私网)"},{level:3,title:"初始化第一个master节点",slug:"初始化第一个master节点"},{level:3,title:"初始化第二、三个master节点",slug:"初始化第二、三个master节点"},{level:3,title:"检查 apiserver初始化结果",slug:"检查-apiserver初始化结果"},{level:2,title:"初始化 worker节点",slug:"初始化-worker节点"},{level:3,title:"获得 join命令参数",slug:"获得-join命令参数"},{level:3,title:"初始化worker",slug:"初始化worker"},{level:3,title:"检查 apiserver初始化结果",slug:"检查-apiserver初始化结果-2"},{level:2,title:"移除 worker 节点",slug:"移除-worker-节点"},{level:2,title:"安装 Ingress Controller",slug:"安装-ingress-controller"},{level:3,title:"在 apple-master-a-1 上执行",slug:"在-apple-master-a-1-上执行"},{level:3,title:"在IaaS云控制台完成如下配置(公网ELB)",slug:"在iaas云控制台完成如下配置(公网elb)"},{level:3,title:"配置域名解析",slug:"配置域名解析"},{level:3,title:"验证配置",slug:"验证配置"}],lastUpdated:"2019-07-27 00:01:26"},{title:"如何降低 Kubernetes 学习门槛",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:35:19.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"如何降低 Kubernetes 学习门槛"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/concepts.html"},{name:"twitter:title",content:"如何降低 Kubernetes 学习门槛"},{name:"twitter:url",content:"/overview/concepts.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/concepts.html",relativePath:"overview/concepts.md",key:"v-0393ebb2",path:"/overview/concepts.html",headers:[{level:2,title:"Kubernetes 学习门槛在哪儿",slug:"kubernetes-学习门槛在哪儿"},{level:2,title:"降低 Kubernetes 学习门槛",slug:"降低-kubernetes-学习门槛"},{level:3,title:"学习路线",slug:"学习路线"},{level:3,title:"快速入门",slug:"快速入门"},{level:2,title:"入门利器",slug:"入门利器"},{level:3,title:"1. 基本信息",slug:"_1-基本信息"},{level:3,title:"2. 数据卷",slug:"_2-数据卷"},{level:3,title:"3. 身份信息",slug:"_3-身份信息"},{level:3,title:"4. 容器",slug:"_4-容器"},{level:3,title:"5. 访问方式",slug:"_5-访问方式"},{level:3,title:"6. 互联网入口",slug:"_6-互联网入口"}],lastUpdated:"2019-07-30 07:35:19"}],themeConfig:{kuboardToken:"eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg",nav:[{text:"简介",link:"/overview/"},{text:"安装",link:"/install/install-dashboard"},{text:"使用",link:"/guide/"},{text:"微服务",link:"/micro-service/spring-cloud/"}],displayAllHeaders:!1,sidebarDepth:2,serviceWorker:{updatePopup:!0},lastUpdated:"更新时间",docsRepo:"eip-work/kuboard-press",docsDir:"",docsBranch:"master",editLinks:!0,editLinkText:"帮助我们改善此页面!",sidebar:{"/overview/":[{title:"简介",collapsable:!1,children:[""]},{title:"概念",collapsable:!1,children:["k8s-core-concepts","why-kuboard","concepts"]},{title:"技术支持",collapsable:!1,children:["support","change-log"]}],"/install/":[{title:"安装 Kubernetes",collapsable:!1,children:["install-k8s","install-kubernetes","install-kubectl"]},{title:"安装 Kuboard",collapsable:!1,children:["install-dashboard","install-dashboard-upgrade"]}],"/guide/":[{title:"概述",collapsable:!1,children:[["","概述"]]},{title:"Example",collapsable:!1,children:["example/busybox","example/import","example/monitor"]},{title:"集群管理",collapsable:!1,children:["cluster/computing","cluster/storage","cluster/namespace"]},{title:"应用管理",collapsable:!1,children:["namespace/workload","namespace/secrets","namespace/configMap","namespace/pvc","namespace/adjustion","namespace/multi-env"]},{title:"问题诊断",collapsable:!1,children:["diagonize/events","diagonize/logs","diagonize/port-forward"]},{title:"监控套件",collapsable:!1,children:["monitor/","monitor/apis"]}],"/micro-service/":[{title:"Spring Cloud",collapsable:!1,children:["spring-cloud/","spring-cloud/cloud-eureka"]}],"/devops/":[{title:"Devops",collapsable:!1,children:[""]}],"/support/":["","change-log"]}}};n(75);Ko.component("HomePage",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,354))),Ko.component("Badge",()=>Promise.all([n.e(0),n.e(26)]).then(n.bind(null,369)));n(76),n(77);var Ga=n(53),Qa=n.n(Ga),ts={props:{threshold:{type:Number,default:300}},data:function(){return{scrollTop:null}},mounted:function(){var t=this;this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",Qa()(function(){t.scrollTop=t.getScrollTop()},100))},methods:{getScrollTop:function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},scrollToTop:function(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0}},computed:{show:function(){return this.scrollTop>this.threshold}}},es=(n(85),Object(qa.a)(ts,function(){var t=this.$createElement,e=this._self._c||t;return e("transition",{attrs:{name:"fade"}},[this.show?e("svg",{staticClass:"go-to-top",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 49.484 28.284"},on:{click:this.scrollToTop}},[e("g",{attrs:{transform:"translate(-229 -126.358)"}},[e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(229 151.107) rotate(-45)"}}),this._v(" "),e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(274.949 154.642) rotate(-135)"}})])]):this._e()])},[],!1,null,"67a9666a",null).exports),ns=(n(40),{data:function(){return{readingTop:0,readingHeight:1,progressStyle:null,transform:["transform"]}},watch:{$readingShow:function(){this.base()}},mounted:function(){this.base()},beforeDestroy:function(){var t=this;window.removeEventListener("scroll",function(){t.getReadingBase()})},methods:{base:function(){var t=this;this.$readingShow&&(this.transform=this.getTransform(),this.progressStyle=this.getProgressStyle(),window.addEventListener("scroll",function(){t.getReadingBase()},200))},getReadingBase:function(){this.readingHeight=this.getReadingHeight()-this.getScreenHeight(),this.readingTop=this.getReadingTop(),this.progressStyle=this.getProgressStyle()},getReadingHeight:function(){return document.body.offsetHeight||document.body.scrollHeight||0},getScreenHeight:function(){return window.innerHeight||document.documentElement.clientHeight||0},getReadingTop:function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},getTransform:function(){var t=this;return["transform","-webkit-transform","-moz-transform","-o-transform","-ms-transform"].filter(function(e){return t.supportCss(e)})},getProgressStyle:function(){var t=this.readingTop/this.readingHeight;switch(this.$readingShow){case"top":case"bottom":return this.transform[0]?"".concat(this.transform[0],": translate(").concat(100*t/2-50,"%, 0) scale(").concat(t,", 1)"):"width: ".concat(100*t,"%");case"left":case"right":return this.transform[0]?"".concat(this.transform[0],": translate(0, ").concat(100*t/2-50,"%) scale(1, ").concat(t,")"):"height: ".concat(100*t,"%")}},supportCss:function(t){return t in document.createElement("div").style}}}),rs=(n(88),Object(qa.a)(ns,function(){var t=this.$createElement,e=this._self._c||t;return this.$readingShow?e("div",{staticClass:"reading-progress",class:this.$readingShow},[e("div",{staticClass:"progress",style:this.progressStyle})]):this._e()},[],!1,null,"7681808f",null).exports),os={readingDir:null,fixed:"top"};const is=(t,e,n)=>!!t.includes(e)&&n;n(89);var as=n(54),ss=n.n(as);function ls(t,e,n){return e in t?ss()(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var cs=n(55),us=n.n(cs);n(41),n(64),n(30),n(38),n(39);Object.prototype.hasOwnProperty;var ps={name:"TabBar",props:{tabs:Array},inject:["rootTabs"],computed:{barStyle:{get:function(){var t=this,e={},n=0,r=0,o=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height",i="width"===o?"x":"y",a=function(t){return t.toLowerCase().replace(/( |^)[a-z]/g,function(t){return t.toUpperCase()})};this.tabs.every(function(e,i){var s=((t,e)=>{const n=((t,e)=>{for(let n=0;n!==t.length;++n)if(e(t[n]))return n;return-1})(t,e);return-1!==n?t[n]:void 0})(t.$parent.$refs.tabs||[],function(t){return t.id.replace("tab-","")===e.paneName});return!!s&&(e.active?(r=s["client".concat(a(o))],"width"===o&&t.tabs.length>1&&(r-=0===i||i===t.tabs.length-1?20:40),!1):(n+=s["client".concat(a(o))],!0))}),"width"===o&&0!==n&&(n+=20);var s="translate".concat(a(i),"(").concat(n,"px)");return e[o]=r+"px",e.transform=s,e.msTransform=s,e.webkitTransform=s,e}}}},fs=Object(qa.a)(ps,function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"el-tabs__active-bar",class:"is-"+this.rootTabs.tabPosition,style:this.barStyle})},[],!1,null,null,null).exports,ds=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some(function(t,r){return t[0]===e&&(n=r,!0)}),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n0},t.prototype.connect_=function(){hs&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),_s?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){hs&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e;bs.some(function(t){return!!~n.indexOf(t)})&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),xs=function(t,e){for(var n=0,r=Object.keys(e);n0},t}(),Is="undefined"!=typeof WeakMap?new WeakMap:new ds,Rs=function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=ws.getInstance(),r=new Ls(e,n,this);Is.set(this,r)};["observe","unobserve","disconnect"].forEach(function(t){Rs.prototype[t]=function(){var e;return(e=Is.get(this))[t].apply(e,arguments)}});var Ns=void 0!==vs.ResizeObserver?vs.ResizeObserver:Rs;const Ms="undefined"==typeof window,Us=function(t){for(let e of t){const t=e.target.__resizeListeners__||[];t.length&&t.forEach(t=>{t()})}};function Ks(){}var Fs=function(t){return t.toLowerCase().replace(/( |^)[a-z]/g,function(t){return t.toUpperCase()})},Ds={name:"TabNav",components:{TabBar:fs},inject:["rootTabs"],props:{panes:Array,currentName:String,editable:Boolean,onTabClick:{type:Function,default:Ks},onTabRemove:{type:Function,default:Ks},type:String,stretch:Boolean},data:function(){return{scrollable:!1,navOffset:0,isFocus:!1,focusable:!0}},computed:{navStyle:function(){var t=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"X":"Y";return{transform:"translate".concat(t,"(-").concat(this.navOffset,"px)")}},sizeName:function(){return-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height"}},methods:{scrollPrev:function(){var t=this.$refs.navScroll["offset".concat(Fs(this.sizeName))],e=this.navOffset;if(e){var n=e>t?e-t:0;this.navOffset=n}},scrollNext:function(){var t=this.$refs.nav["offset".concat(Fs(this.sizeName))],e=this.$refs.navScroll["offset".concat(Fs(this.sizeName))],n=this.navOffset;if(!(t-n<=e)){var r=t-n>2*e?n+e:t-e;this.navOffset=r}},scrollToActiveTab:function(){if(this.scrollable){var t=this.$refs.nav,e=this.$el.querySelector(".is-active");if(e){var n=this.$refs.navScroll,r=e.getBoundingClientRect(),o=n.getBoundingClientRect(),i=t.offsetWidth-o.width,a=this.navOffset,s=a;r.lefto.right&&(s=a+r.right-o.right),s=Math.max(s,0),this.navOffset=Math.min(s,i)}}},update:function(){if(this.$refs.nav){var t=this.sizeName,e=this.$refs.nav["offset".concat(Fs(t))],n=this.$refs.navScroll["offset".concat(Fs(t))],r=this.navOffset;if(n0&&(this.navOffset=0)}},changeTab:function(t){var e,n,r,o=t.keyCode;-1!==[37,38,39,40].indexOf(o)&&(r=t.currentTarget.querySelectorAll("[role=tab]"),n=Array.prototype.indexOf.call(r,t.target),r[e=37===o||38===o?0===n?r.length-1:n-1:n"])]:null,m=this._l(r,function(n,r){var i,l=n.name||n.index||r,c=n.isClosable||o;n.index="".concat(r);var u=c?t("span",{class:"el-icon-close",on:{click:function(t){s(n,t)}}}):null,p=n.$slots.label||n.label,f=n.active?0:-1;return t("div",{class:(i={"el-tabs__item":!0},ls(i,"is-".concat(e.rootTabs.tabPosition),!0),ls(i,"is-active",n.active),ls(i,"is-disabled",n.disabled),ls(i,"is-closable",c),ls(i,"is-focus",e.isFocus),i),attrs:{id:"tab-".concat(l),"aria-controls":"pane-".concat(l),role:"tab","aria-selected":n.active,tabindex:f},key:"tab-".concat(l),ref:"tabs",refInFor:!0,on:{focus:function(){d()},blur:function(){h()},click:function(t){h(),a(n,l,t)},keydown:function(t){!c||46!==t.keyCode&&8!==t.keyCode||s(n,t)}}},[p,u])});return t("div",{class:["el-tabs__nav-wrap",c?"is-scrollable":"","is-".concat(this.rootTabs.tabPosition)]},[v,t("div",{class:["el-tabs__nav-scroll"],ref:"navScroll"},[t("div",{class:["el-tabs__nav","is-".concat(this.rootTabs.tabPosition),i&&-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"is-stretch":""],ref:"nav",style:l,attrs:{role:"tablist"},on:{keydown:f}},[n?null:t("tab-bar",{attrs:{tabs:r}}),m])])])},mounted:function(){var t,e,n=this;t=this.$el,e=this.update,Ms||(t.__resizeListeners__||(t.__resizeListeners__=[],t.__ro__=new Ns(Us),t.__ro__.observe(t)),t.__resizeListeners__.push(e)),document.addEventListener("visibilitychange",this.visibilityChangeHandler),window.addEventListener("blur",this.windowBlurHandler),window.addEventListener("focus",this.windowFocusHandler),setTimeout(function(){n.scrollToActiveTab()},0)},beforeDestroy:function(){var t,e;this.$el&&this.update&&(t=this.$el,e=this.update,t&&t.__resizeListeners__&&(t.__resizeListeners__.splice(t.__resizeListeners__.indexOf(e),1),t.__resizeListeners__.length||t.__ro__.disconnect())),document.removeEventListener("visibilitychange",this.visibilityChangeHandler),window.removeEventListener("blur",this.windowBlurHandler),window.removeEventListener("focus",this.windowFocusHandler)}},zs={name:"ElTabs",components:{TabNav:Object(qa.a)(Ds,void 0,void 0,!1,null,null,null).exports},props:{type:String,activeName:String,closable:Boolean,addable:Boolean,value:{},editable:Boolean,tabPosition:{type:String,default:"top"},beforeLeave:Function,stretch:Boolean},provide:function(){return{rootTabs:this}},data:function(){return{currentName:this.value||this.activeName,panes:[]}},watch:{activeName:function(t){this.setCurrentName(t)},value:function(t){this.setCurrentName(t)},currentName:function(t){var e=this;this.$refs.nav&&this.$nextTick(function(){e.$refs.nav.$nextTick(function(t){e.$refs.nav.scrollToActiveTab()})})}},methods:{calcPaneInstances:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.$slots.default){var n=this.$slots.default.filter(function(t){return t.tag&&t.componentOptions&&"ElTabPane"===t.componentOptions.Ctor.options.name}),r=n.map(function(t){return t.componentInstance}),o=!(r.length===this.panes.length&&r.every(function(e,n){return e===t.panes[n]}));(e||o)&&(this.panes=r)}else 0!==this.panes.length&&(this.panes=[])},handleTabClick:function(t,e,n){t.disabled||(this.setCurrentName(e),this.$emit("tab-click",t,n))},handleTabRemove:function(t,e){t.disabled||(e.stopPropagation(),this.$emit("edit",t.name,"remove"),this.$emit("tab-remove",t.name))},handleTabAdd:function(){this.$emit("edit",null,"add"),this.$emit("tab-add")},setCurrentName:function(t){var e=this,n=function(){e.currentName=t,e.$emit("input",t)};if(this.currentName!==t&&this.beforeLeave){var r=this.beforeLeave(t,this.currentName);r&&r.then?r.then(function(){n(),e.$refs.nav&&e.$refs.nav.removeFocus()},function(){}):!1!==r&&n()}else n()}},render:function(t){var e,n=this.type,r=this.handleTabClick,o=this.handleTabRemove,i=this.handleTabAdd,a=this.currentName,s=this.panes,l=this.editable,c=this.addable,u=this.tabPosition,p=this.stretch,f=l||c?t("span",{class:"el-tabs__new-tab",on:{click:i,keydown:function(t){13===t.keyCode&&i()}},attrs:{tabindex:"0"}},[t("i",{class:"el-icon-plus"})]):null,d={props:{currentName:a,onTabClick:r,onTabRemove:o,editable:l,type:n,panes:s,stretch:p},ref:"nav"},h=t("div",{class:["el-tabs__header","is-".concat(u)]},[f,t("tab-nav",us()([{},d]))]),v=t("div",{class:"el-tabs__content"},[this.$slots.default]);return t("div",{class:(e={"el-tabs":!0,"el-tabs--card":"card"===n},ls(e,"el-tabs--".concat(u),!0),ls(e,"el-tabs--border-card","border-card"===n),e)},["bottom"!==u?[h,v]:[v,h]])},created:function(){this.currentName||this.setCurrentName("0"),this.$on("tab-nav-update",this.calcPaneInstances.bind(null,!0))},mounted:function(){this.calcPaneInstances()},updated:function(){this.calcPaneInstances()}},Bs=Object(qa.a)(zs,void 0,void 0,!1,null,null,null).exports,Vs={name:"ElTabPane",componentName:"ElTabPane",props:{label:String,labelContent:Function,name:String,closable:Boolean,disabled:Boolean,lazy:Boolean},data:function(){return{index:null,loaded:!1}},computed:{isClosable:function(){return this.closable||this.$parent.closable},active:function(){var t=this.$parent.currentName===(this.name||this.index);return t&&(this.loaded=!0),t},paneName:function(){return this.name||this.index}},updated:function(){this.$parent.$emit("tab-nav-update")}},Zs=Object(qa.a)(Vs,function(){var t=this,e=t.$createElement,n=t._self._c||e;return!t.lazy||t.loaded||t.active?n("div",{directives:[{name:"show",rawName:"v-show",value:t.active,expression:"active"}],staticClass:"el-tab-pane",attrs:{role:"tabpanel","aria-hidden":!t.active,id:"pane-"+t.paneName,"aria-labelledby":"tab-"+t.paneName}},[t._t("default")],2):t._e()},[],!1,null,null,null).exports,Hs=(n(100),[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({router:t})=>{"undefined"!=typeof window&&(function(t,e,n,r,o,i,a){t.GoogleAnalyticsObject=o,t.ga=t.ga||function(){(t.ga.q=t.ga.q||[]).push(arguments)},t.ga.l=1*new Date,i=e.createElement(n),a=e.getElementsByTagName(n)[0],i.async=1,i.src="https://www.google-analytics.com/analytics.js",a.parentNode.insertBefore(i,a)}(window,document,"script",0,"ga"),ga("create","UA-144196556-1","auto"),ga("set","anonymizeIp",!0),ga("send","pageview"),t.afterEach(function(t){ga("set","page",t.fullPath),ga("send","pageview")}))},({Vue:t})=>{t.component("BackToTop",es)},({Vue:t})=>{t.component("ReadingProgress",rs),t.mixin({computed:{$readingShow(){const{readingDir:t,fixed:e}=os,n=this.$page.regularPath;if(void 0!==this.$frontmatter.readingShow){const t=this.$frontmatter.readingShow;return"boolean"==typeof t&&t?"top":t}if(n){if(null===t)return e;if("string"==typeof t)return is(n,t,e);if(Array.isArray(t)){for(let r=0;r{"undefined"!=typeof window&&function(){var t=document.createElement("script"),e=window.location.protocol.split(":")[0];t.src="https"===e?"https://zz.bdstatic.com/linksubmit/push.js":"http://push.zhanzhang.baidu.com/push.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n)}()}]),Ws=["BackToTop","ReadingProgress"];class qs{constructor(){this.store=new Ko({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Ko.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}class Ys extends qs{}Object.assign(Ys.prototype,{getPageAsyncComponent:Ia,getLayoutAsyncComponent:Ra,getAsyncComponent:Na,getVueComponent:Ma});var Xs={install(t){const e=new Ys;t.$vuepress=e,t.prototype.$vuepress=e}};function Js(t,e){return t.options.routes.filter(t=>t.path.toLowerCase()===e.toLowerCase()).length>0}var Gs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return Ka("pageKey",e),Ko.component(e)||Ko.component(e,Ia(e)),t(e||"")}},Qs={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:[`content__${e.slotKey}`]},n()[e.slotKey])},tl=(n(101),Object(qa.a)({},function(t,e){var n=e._c;return n("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[n("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),e._v(" "),n("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])},[],!0,null,null,null).exports),el={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Ko.config.productionTip=!1,Ko.use(ba),Ko.use(Xs),Ko.mixin(function(t,e,n=Ko){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e}),Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>(class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||""}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Ko.$vuepress.$get("disableScrollBehavior")&&{selector:t.hash}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Js(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Js(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Js(t,o)?r(o):Js(t,n)?r(n):r()}})}(n);const r={};try{Hs.forEach(e=>{"function"==typeof e&&e({Vue:Ko,options:r,router:n,siteData:Ja,isServer:t})})}catch(t){console.error(t)}return{app:new Ko(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("router-view",{ref:"layout"}),t("div",{class:"global-ui"},Ws.map(e=>t(e)))])})),router:n}}(!1);window.__VUEPRESS__={version:"1.0.2",hash:"e6f5450"},rl.onReady(()=>{nl.$mount("#app")})}]); \ No newline at end of file + */function Fo(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Do(t,e){for(var n in e)t[n]=e[n];return t}var zo={name:"RouterView",functional:!0,props:{name:{type:String,default:"default"}},render:function(t,e){var n=e.props,r=e.children,o=e.parent,i=e.data;i.routerView=!0;for(var a=o.$createElement,s=n.name,l=o.$route,c=o._routerViewCache||(o._routerViewCache={}),u=0,p=!1;o&&o._routerRoot!==o;){var f=o.$vnode&&o.$vnode.data;f&&(f.routerView&&u++,f.keepAlive&&o._inactive&&(p=!0)),o=o.$parent}if(i.routerViewDepth=u,p)return a(c[s],i,r);var d=l.matched[u];if(!d)return c[s]=null,a();var h=c[s]=d.components[s];i.registerRouteInstance=function(t,e){var n=d.instances[s];(e&&n!==t||!e&&n===t)&&(d.instances[s]=e)},(i.hook||(i.hook={})).prepatch=function(t,e){d.instances[s]=e.componentInstance},i.hook.init=function(t){t.data.keepAlive&&t.componentInstance&&t.componentInstance!==d.instances[s]&&(d.instances[s]=t.componentInstance)};var v=i.props=function(t,e){switch(typeof e){case"undefined":return;case"object":return e;case"function":return e(t);case"boolean":return e?t.params:void 0;default:0}}(l,d.props&&d.props[s]);if(v){v=i.props=Do({},v);var m=i.attrs=i.attrs||{};for(var g in v)h.props&&g in h.props||(m[g]=v[g],delete v[g])}return a(h,i,r)}};var Bo=/[!'()*]/g,Vo=function(t){return"%"+t.charCodeAt(0).toString(16)},Zo=/%2C/g,Ho=function(t){return encodeURIComponent(t).replace(Bo,Vo).replace(Zo,",")},Wo=decodeURIComponent;function qo(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach(function(t){var n=t.replace(/\+/g," ").split("="),r=Wo(n.shift()),o=n.length>0?Wo(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]}),e):e}function Yo(t){var e=t?Object.keys(t).map(function(e){var n=t[e];if(void 0===n)return"";if(null===n)return Ho(e);if(Array.isArray(n)){var r=[];return n.forEach(function(t){void 0!==t&&(null===t?r.push(Ho(e)):r.push(Ho(e)+"="+Ho(t)))}),r.join("&")}return Ho(e)+"="+Ho(n)}).filter(function(t){return t.length>0}).join("&"):null;return e?"?"+e:""}var Xo=/\/?$/;function Jo(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=Go(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:ei(e,o),matched:t?ti(t):[]};return n&&(a.redirectedFrom=ei(n,o)),Object.freeze(a)}function Go(t){if(Array.isArray(t))return t.map(Go);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=Go(t[n]);return e}return t}var Qo=Jo(null,{path:"/"});function ti(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function ei(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||Yo)(r)+o}function ni(t,e){return e===Qo?t===e:!!e&&(t.path&&e.path?t.path.replace(Xo,"")===e.path.replace(Xo,"")&&t.hash===e.hash&&ri(t.query,e.query):!(!t.name||!e.name)&&(t.name===e.name&&t.hash===e.hash&&ri(t.query,e.query)&&ri(t.params,e.params)))}function ri(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t),r=Object.keys(e);return n.length===r.length&&n.every(function(n){var r=t[n],o=e[n];return"object"==typeof r&&"object"==typeof o?ri(r,o):String(r)===String(o)})}var oi,ii=[String,Object],ai=[String,Array],si={name:"RouterLink",props:{to:{type:ii,required:!0},tag:{type:String,default:"a"},exact:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,event:{type:ai,default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,a=o.route,s=o.href,l={},c=n.options.linkActiveClass,u=n.options.linkExactActiveClass,p=null==c?"router-link-active":c,f=null==u?"router-link-exact-active":u,d=null==this.activeClass?p:this.activeClass,h=null==this.exactActiveClass?f:this.exactActiveClass,v=i.path?Jo(null,i,null,n):a;l[h]=ni(r,v),l[d]=this.exact?l[h]:function(t,e){return 0===t.path.replace(Xo,"/").indexOf(e.path.replace(Xo,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,v);var m=function(t){li(t)&&(e.replace?n.replace(i):n.push(i))},g={click:li};Array.isArray(this.event)?this.event.forEach(function(t){g[t]=m}):g[this.event]=m;var y={class:l};if("a"===this.tag)y.on=g,y.attrs={href:s};else{var b=function t(e){if(e)for(var n,r=0;r=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),l=e&&e.path||"/",c=s.path?ui(s.path,l,n||o.append):l,u=function(t,e,n){void 0===e&&(e={});var r,o=n||qo;try{r=o(t||"")}catch(t){r={}}for(var i in e)r[i]=e[i];return r}(s.query,o.query,r&&r.options.parseQuery),p=o.hash||s.hash;return p&&"#"!==p.charAt(0)&&(p="#"+p),{_normalized:!0,path:c,query:u,hash:p}}function Li(t,e){var n=Ai(t),r=n.pathList,o=n.pathMap,i=n.nameMap;function a(t,n,a){var s=ji(t,n,!1,e),c=s.name;if(c){var u=i[c];if(!u)return l(null,s);var p=u.regex.keys.filter(function(t){return!t.optional}).map(function(t){return t.name});if("object"!=typeof s.params&&(s.params={}),n&&"object"==typeof n.params)for(var f in n.params)!(f in s.params)&&p.indexOf(f)>-1&&(s.params[f]=n.params[f]);return s.path=Si(u.path,s.params),l(u,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],function(){r(o+1)}):r(o+1)};r(0)}function Gi(t){return function(e,n,r){var o=!1,i=0,a=null;Qi(t,function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var l,c=na(function(e){var o;((o=e).__esModule||ea&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:oi.extend(e),n.components[s]=e,--i<=0&&r()}),u=na(function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=Fo(t)?t:new Error(e),r(a))});try{l=t(c,u)}catch(t){u(t)}if(l)if("function"==typeof l.then)l.then(c,u);else{var p=l.component;p&&"function"==typeof p.then&&p.then(c,u)}}}),o||r()}}function Qi(t,e){return ta(t.map(function(t){return Object.keys(t.components).map(function(n){return e(t.components[n],t.instances[n],t,n)})}))}function ta(t){return Array.prototype.concat.apply([],t)}var ea="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function na(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var ra=function(t,e){this.router=t,this.base=function(t){if(!t)if(ci){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=Qo,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[]};function oa(t,e,n,r){var o=Qi(t,function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=oi.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map(function(t){return n(t,r,o,i)}):n(a,r,o,i)});return ta(r?o.reverse():o)}function ia(t,e){if(e)return function(){return t.apply(e,arguments)}}ra.prototype.listen=function(t){this.cb=t},ra.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},ra.prototype.onError=function(t){this.errorCbs.push(t)},ra.prototype.transitionTo=function(t,e,n){var r=this,o=this.router.match(t,this.current);this.confirmTransition(o,function(){r.updateRoute(o),e&&e(o),r.ensureURL(),r.ready||(r.ready=!0,r.readyCbs.forEach(function(t){t(o)}))},function(t){n&&n(t),t&&!r.ready&&(r.ready=!0,r.readyErrorCbs.forEach(function(e){e(t)}))})},ra.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current,i=function(t){Fo(t)&&(r.errorCbs.length?r.errorCbs.forEach(function(e){e(t)}):console.error(t)),n&&n(t)};if(ni(t,o)&&t.matched.length===o.matched.length)return this.ensureURL(),i();var a=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n-1?decodeURI(t.slice(0,r))+t.slice(r):decodeURI(t)}else n>-1&&(t=decodeURI(t.slice(0,n))+t.slice(n));return t}function pa(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function fa(t){Vi?Yi(pa(t)):window.location.hash=t}function da(t){Vi?Xi(pa(t)):window.location.replace(pa(t))}var ha=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)},n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)},n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,function(){e.index=n,e.updateRoute(r)})}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ra),va=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Li(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!Vi&&!1!==t.fallback,this.fallback&&(e="hash"),ci||(e="abstract"),this.mode=e,e){case"history":this.history=new aa(this,t.base);break;case"hash":this.history=new la(this,t.base,this.fallback);break;case"abstract":this.history=new ha(this,t.base);break;default:0}},ma={currentRoute:{configurable:!0}};function ya(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}va.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},ma.currentRoute.get=function(){return this.history&&this.history.current},va.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null)}),!this.app){this.app=t;var n=this.history;if(n instanceof aa)n.transitionTo(n.getCurrentLocation());else if(n instanceof la){var r=function(){n.setupListeners()};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen(function(t){e.apps.forEach(function(e){e._route=t})})}},va.prototype.beforeEach=function(t){return ya(this.beforeHooks,t)},va.prototype.beforeResolve=function(t){return ya(this.resolveHooks,t)},va.prototype.afterEach=function(t){return ya(this.afterHooks,t)},va.prototype.onReady=function(t,e){this.history.onReady(t,e)},va.prototype.onError=function(t){this.history.onError(t)},va.prototype.push=function(t,e,n){this.history.push(t,e,n)},va.prototype.replace=function(t,e,n){this.history.replace(t,e,n)},va.prototype.go=function(t){this.history.go(t)},va.prototype.back=function(){this.go(-1)},va.prototype.forward=function(){this.go(1)},va.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map(function(t){return Object.keys(t.components).map(function(e){return t.components[e]})})):[]},va.prototype.resolve=function(t,e,n){var r=ji(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?pi(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},va.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==Qo&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(va.prototype,ma),va.install=function t(e){if(!t.installed||oi!==e){t.installed=!0,oi=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",zo),e.component("RouterLink",si);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},va.version="3.0.7",ci&&window.Vue&&window.Vue.use(va);var ba=va;var _a={NotFound:()=>n.e(32).then(n.bind(null,355)),Layout:()=>Promise.all([n.e(0),n.e(2),n.e(11)]).then(n.bind(null,356))},wa={"v-cbd95058":()=>n.e(33).then(n.bind(null,361)),"v-77cc1ec7":()=>n.e(22).then(n.bind(null,359)),"v-46ec0327":()=>n.e(12).then(n.bind(null,377)),"v-796bf18c":()=>n.e(35).then(n.bind(null,370)),"v-83c8a8b8":()=>n.e(34).then(n.bind(null,394)),"v-0a714732":()=>n.e(6).then(n.bind(null,395)),"v-986dbade":()=>n.e(20).then(n.bind(null,396)),"v-8d4dfbb6":()=>n.e(23).then(n.bind(null,397)),"v-76564011":()=>n.e(36).then(n.bind(null,373)),"v-8658c2f2":()=>n.e(9).then(n.bind(null,368)),"v-554543f9":()=>n.e(5).then(n.bind(null,367)),"v-7434c187":()=>n.e(3).then(n.bind(null,366)),"v-0996c938":()=>n.e(37).then(n.bind(null,365)),"v-4db1779e":()=>n.e(38).then(n.bind(null,364)),"v-c0fa0cf2":()=>n.e(7).then(n.bind(null,362)),"v-1263fa20":()=>n.e(39).then(n.bind(null,371)),"v-6c5acde7":()=>n.e(15).then(n.bind(null,372)),"v-9d44dcf2":()=>n.e(13).then(n.bind(null,374)),"v-240eddf2":()=>n.e(16).then(n.bind(null,375)),"v-7d2f6cc7":()=>n.e(17).then(n.bind(null,378)),"v-5db85fb7":()=>n.e(10).then(n.bind(null,380)),"v-5be22288":()=>n.e(28).then(n.bind(null,382)),"v-61ad5b01":()=>n.e(40).then(n.bind(null,384)),"v-4b91c5e7":()=>n.e(27).then(n.bind(null,386)),"v-5f820cc2":()=>n.e(29).then(n.bind(null,388)),"v-1401ca46":()=>n.e(41).then(n.bind(null,390)),"v-649782a7":()=>n.e(42).then(n.bind(null,392)),"v-53360ab2":()=>n.e(24).then(n.bind(null,393)),"v-c621d7f2":()=>n.e(30).then(n.bind(null,391)),"v-66d56047":()=>n.e(43).then(n.bind(null,389)),"v-16dbc3c4":()=>n.e(44).then(n.bind(null,387)),"v-bfdadf72":()=>n.e(45).then(n.bind(null,385)),"v-7249b1a4":()=>n.e(25).then(n.bind(null,383)),"v-531fa289":()=>n.e(46).then(n.bind(null,381)),"v-d575ee32":()=>n.e(47).then(n.bind(null,379)),"v-6e54f1c1":()=>n.e(31).then(n.bind(null,398)),"v-480f517b":()=>n.e(14).then(n.bind(null,376)),"v-5566a571":()=>n.e(19).then(n.bind(null,363)),"v-292f2847":()=>n.e(18).then(n.bind(null,360)),"v-3732859b":()=>n.e(21).then(n.bind(null,358)),"v-0393ebb2":()=>n.e(8).then(n.bind(null,357))};function xa(t){const e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}const ka=/-(\w)/g,Oa=xa(t=>t.replace(ka,(t,e)=>e?e.toUpperCase():"")),$a=/\B([A-Z])/g,Ea=xa(t=>t.replace($a,"-$1").toLowerCase()),Ca=xa(t=>t.charAt(0).toUpperCase()+t.slice(1));function Ta(t,e){if(!e)return;if(t(e))return t(e);return e.includes("-")?t(Ca(Oa(e))):t(Ca(e))||t(Ea(e))}const Sa=Object.assign({},_a,wa),Aa=t=>Sa[t],Pa=t=>wa[t],ja=t=>_a[t],La=t=>Ko.component(t);function Ia(t){return Ta(Pa,t)}function Ra(t){return Ta(ja,t)}function Na(t){return Ta(Aa,t)}function Ma(t){return Ta(La,t)}function Ua(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!Ma(t)&&Na(t)){const e=await Na(t)();Ko.component(t,e.default)}}))}function Ka(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var Fa={created(){this.$ssrContext&&(this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.description=this.$page.description||this.$description)},mounted(){this.currentMetaTags=new Set,this.updateMeta()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const t=this.$page.frontmatter.meta||[],e=t.slice(0);0===t.filter(t=>"description"===t.name).length&&e.push({name:"description",content:this.$description});const n=document.querySelectorAll('meta[name="description"]');n.length&&n.forEach(t=>this.currentMetaTags.add(t)),this.currentMetaTags=new Set(Da(e,this.currentMetaTags))}},watch:{$page(){this.updateMeta()}},beforeDestroy(){Da(null,this.currentMetaTags)}};function Da(t,e){if(e&&[...e].forEach(t=>{document.head.removeChild(t)}),t)return t.map(t=>{const e=document.createElement("meta");return Object.keys(t).forEach(n=>{e.setAttribute(n,t[n])}),document.head.appendChild(e),e})}var za=n(52),Ba={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:n.n(za)()(function(){this.setActiveHash()},300),setActiveHash(){const t=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>t.some(t=>t.hash===e.hash)),n=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),o=window.innerHeight+n;for(let t=0;t=i.parentElement.offsetTop+10&&(!a||n{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Va=n(16),Za=n.n(Va),Ha=[Fa,Ba,{mounted(){Za.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Ko.component(t.name)||Za.a.start(),n()}),this.$router.afterEach(()=>{Za.a.done(),this.isSidebarOpen=!1})}}],Wa={methods:{getLayout:function(){if(this.$page.path){var t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}},computed:{layout:function(){var t=this.getLayout();return Ka("layout",t),Ko.component(t)}}},qa=n(0),Ya=Object(qa.a)(Wa,function(){var t=this.$createElement;return(this._self._c||t)(this.layout,{tag:"component"})},[],!1,null,null,null).exports;!function(t,e,n){switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),t[e].push(...n);break;default:throw new Error("Unknown option name.")}}(Ya,"mixins",Ha);const Xa=[{name:"v-cbd95058",path:"/",component:Ya,beforeEnter:(t,e,n)=>{Ua("HomePage","v-cbd95058").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-77cc1ec7",path:"/guide/cluster/computing.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-77cc1ec7").then(n)}},{name:"v-46ec0327",path:"/guide/cluster/namespace.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-46ec0327").then(n)}},{name:"v-796bf18c",path:"/guide/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-796bf18c").then(n)}},{path:"/guide/index.html",redirect:"/guide/"},{name:"v-83c8a8b8",path:"/devops/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-83c8a8b8").then(n)}},{path:"/devops/index.html",redirect:"/devops/"},{name:"v-0a714732",path:"/guide/cluster/storage.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-0a714732").then(n)}},{name:"v-986dbade",path:"/guide/diagonize/events.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-986dbade").then(n)}},{name:"v-8d4dfbb6",path:"/guide/diagonize/logs.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-8d4dfbb6").then(n)}},{name:"v-76564011",path:"/guide/diagonize/port-forward.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-76564011").then(n)}},{name:"v-8658c2f2",path:"/guide/example/busybox.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-8658c2f2").then(n)}},{name:"v-554543f9",path:"/guide/example/import.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-554543f9").then(n)}},{name:"v-7434c187",path:"/guide/example/monitor.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-7434c187").then(n)}},{name:"v-0996c938",path:"/guide/monitor/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-0996c938").then(n)}},{path:"/guide/monitor/index.html",redirect:"/guide/monitor/"},{name:"v-4db1779e",path:"/guide/monitor/apis.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-4db1779e").then(n)}},{name:"v-c0fa0cf2",path:"/guide/namespace/adjustion.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-c0fa0cf2").then(n)}},{name:"v-1263fa20",path:"/guide/namespace/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-1263fa20").then(n)}},{path:"/guide/namespace/index.html",redirect:"/guide/namespace/"},{name:"v-6c5acde7",path:"/guide/namespace/configMap.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-6c5acde7").then(n)}},{name:"v-9d44dcf2",path:"/guide/namespace/multi-env.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-9d44dcf2").then(n)}},{name:"v-240eddf2",path:"/guide/namespace/pvc.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-240eddf2").then(n)}},{name:"v-7d2f6cc7",path:"/guide/namespace/secrets.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-7d2f6cc7").then(n)}},{name:"v-5db85fb7",path:"/guide/namespace/workload.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5db85fb7").then(n)}},{name:"v-5be22288",path:"/install/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5be22288").then(n)}},{path:"/install/index.html",redirect:"/install/"},{name:"v-61ad5b01",path:"/install/install-common-ingress.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-61ad5b01").then(n)}},{name:"v-4b91c5e7",path:"/install/install-common-vm.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-4b91c5e7").then(n)}},{name:"v-5f820cc2",path:"/install/install-dashboard%20copy.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5f820cc2").then(n)}},{path:"/install/install-dashboard copy.html",redirect:"/install/install-dashboard%20copy.html"},{name:"v-1401ca46",path:"/install/install-dashboard-diagonize-kube-dns.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-1401ca46").then(n)}},{name:"v-649782a7",path:"/install/install-dashboard-diagonize.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-649782a7").then(n)}},{name:"v-53360ab2",path:"/install/install-dashboard-upgrade.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-53360ab2").then(n)}},{name:"v-c621d7f2",path:"/install/install-dashboard.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-c621d7f2").then(n)}},{name:"v-66d56047",path:"/install/install-kubectl.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-66d56047").then(n)}},{name:"v-16dbc3c4",path:"/micro-service/spring-cloud/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-16dbc3c4").then(n)}},{path:"/micro-service/spring-cloud/index.html",redirect:"/micro-service/spring-cloud/"},{name:"v-bfdadf72",path:"/micro-service/spring-cloud/cloud-eureka.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-bfdadf72").then(n)}},{name:"v-7249b1a4",path:"/overview/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-7249b1a4").then(n)}},{path:"/overview/index.html",redirect:"/overview/"},{name:"v-531fa289",path:"/overview/change-log-on-the-way.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-531fa289").then(n)}},{name:"v-d575ee32",path:"/overview/change-log.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-d575ee32").then(n)}},{name:"v-6e54f1c1",path:"/overview/support.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-6e54f1c1").then(n)}},{name:"v-480f517b",path:"/overview/k8s-core-concepts.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-480f517b").then(n)}},{name:"v-5566a571",path:"/overview/why-kuboard.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5566a571").then(n)}},{name:"v-292f2847",path:"/install/install-k8s.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-292f2847").then(n)}},{name:"v-3732859b",path:"/install/install-kubernetes.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-3732859b").then(n)}},{name:"v-0393ebb2",path:"/overview/concepts.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-0393ebb2").then(n)}},{path:"*",component:Ya}],Ja={title:"Kuboard",description:"A cool Kubernetes Dashboard",base:"/",pages:[{title:"Home",frontmatter:{home:!0,layout:"HomePage",actionText:"在线体验",actionText2:"开始使用 →",actionLink2:"/overview/",features:[{title:"降低 Kubernetes 门槛",details:"创建工作负载,导出/导入配置,批量调整镜像版本,问题诊断"},{title:"直观显示微服务架构",details:"展现层/网关层/服务层/持久层/中间件层/监控层"},{title:"上下文关联监控",details:"资源层监控/中间件层监控/链路层监控"}],footer:"Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2",meta:[{property:"article:modified_time",content:"2019-07-29T23:02:29.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Home"},{property:"og:type",content:"website"},{property:"og:url",content:"/"},{name:"twitter:title",content:"Home"},{name:"twitter:url",content:"/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/",relativePath:"README.md",key:"v-cbd95058",path:"/",lastUpdated:"2019-07-30 07:02:29"},{title:"计算资源管理",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"计算资源管理"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/cluster/computing.html"},{name:"twitter:title",content:"计算资源管理"},{name:"twitter:url",content:"/guide/cluster/computing.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/cluster/computing.html",relativePath:"guide/cluster/computing.md",key:"v-77cc1ec7",path:"/guide/cluster/computing.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"添加节点",slug:"添加节点"},{level:2,title:"查看节点",slug:"查看节点"},{level:2,title:"移除节点",slug:"移除节点"}],lastUpdated:"2019-07-25 06:22:52"},{title:"名称空间管理",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"名称空间管理"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/cluster/namespace.html"},{name:"twitter:title",content:"名称空间管理"},{name:"twitter:url",content:"/guide/cluster/namespace.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/cluster/namespace.html",relativePath:"guide/cluster/namespace.md",key:"v-46ec0327",path:"/guide/cluster/namespace.html",headers:[{level:2,title:"创建名称空间",slug:"创建名称空间"},{level:3,title:"前提",slug:"前提"},{level:3,title:"准备",slug:"准备"}],lastUpdated:"2019-07-25 06:22:52"},{title:"使用手册",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"使用手册"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/"},{name:"twitter:title",content:"使用手册"},{name:"twitter:url",content:"/guide/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/",relativePath:"guide/README.md",key:"v-796bf18c",path:"/guide/",lastUpdated:"2019-07-31 07:56:38"},{title:"Kubernetes + DevOps",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:35:19.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Kubernetes + DevOps"},{property:"og:type",content:"website"},{property:"og:url",content:"/devops/"},{name:"twitter:title",content:"Kubernetes + DevOps"},{name:"twitter:url",content:"/devops/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/devops/",relativePath:"devops/README.md",key:"v-83c8a8b8",path:"/devops/",lastUpdated:"2019-07-30 07:35:19"},{title:"存储空间管理",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"存储空间管理"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/cluster/storage.html"},{name:"twitter:title",content:"存储空间管理"},{name:"twitter:url",content:"/guide/cluster/storage.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/cluster/storage.html",relativePath:"guide/cluster/storage.md",key:"v-0a714732",path:"/guide/cluster/storage.html",headers:[{level:2,title:"创建存储类",slug:"创建存储类"},{level:3,title:"在阿里云创建 NAS 服务",slug:"在阿里云创建-nas-服务"},{level:3,title:"在 Kuboard 创建存储类",slug:"在-kuboard-创建存储类"}],lastUpdated:"2019-07-25 06:22:52"},{title:"集群事件",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"集群事件"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/diagonize/events.html"},{name:"twitter:title",content:"集群事件"},{name:"twitter:url",content:"/guide/diagonize/events.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/diagonize/events.html",relativePath:"guide/diagonize/events.md",key:"v-986dbade",path:"/guide/diagonize/events.html",headers:[{level:2,title:"错误事件提示",slug:"错误事件提示"},{level:2,title:"全局事件",slug:"全局事件"},{level:3,title:"查看全局事件",slug:"查看全局事件"},{level:3,title:"删除事件",slug:"删除事件"},{level:2,title:"微服务上下文相关的事件",slug:"微服务上下文相关的事件"}],lastUpdated:"2019-07-25 06:22:52"},{title:"日志及终端",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"日志及终端"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/diagonize/logs.html"},{name:"twitter:title",content:"日志及终端"},{name:"twitter:url",content:"/guide/diagonize/logs.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/diagonize/logs.html",relativePath:"guide/diagonize/logs.md",key:"v-8d4dfbb6",path:"/guide/diagonize/logs.html",lastUpdated:"2019-07-25 06:22:52"},{title:"端口转发",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-25T14:26:28.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"端口转发"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/diagonize/port-forward.html"},{name:"twitter:title",content:"端口转发"},{name:"twitter:url",content:"/guide/diagonize/port-forward.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/diagonize/port-forward.html",relativePath:"guide/diagonize/port-forward.md",key:"v-76564011",path:"/guide/diagonize/port-forward.html",headers:[{level:2,title:"Feature planned",slug:"feature-planned"}],lastUpdated:"2019-07-25 22:26:28"},{title:"部署 busybox",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-25T14:26:28.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"部署 busybox"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/example/busybox.html"},{name:"twitter:title",content:"部署 busybox"},{name:"twitter:url",content:"/guide/example/busybox.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/example/busybox.html",relativePath:"guide/example/busybox.md",key:"v-8658c2f2",path:"/guide/example/busybox.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"部署 busybox",slug:"部署-busybox-2"},{level:2,title:"验证工作负载",slug:"验证工作负载"}],lastUpdated:"2019-07-25 22:26:28"},{title:"导入 example 微服务",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T10:55:05.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"导入 example 微服务"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/example/import.html"},{name:"twitter:title",content:"导入 example 微服务"},{name:"twitter:url",content:"/guide/example/import.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/example/import.html",relativePath:"guide/example/import.md",key:"v-554543f9",path:"/guide/example/import.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"创建存储资源",slug:"创建存储资源"},{level:2,title:"创建名称空间",slug:"创建名称空间"},{level:2,title:"导入 example",slug:"导入-example"},{level:2,title:"验证 web-example",slug:"验证-web-example"}],lastUpdated:"2019-07-26 18:55:05"},{title:"监控 example",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"监控 example"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/example/monitor.html"},{name:"twitter:title",content:"监控 example"},{name:"twitter:url",content:"/guide/example/monitor.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/example/monitor.html",relativePath:"guide/example/monitor.md",key:"v-7434c187",path:"/guide/example/monitor.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"安装监控套件",slug:"安装监控套件"},{level:3,title:"安装全局监控套件",slug:"安装全局监控套件"},{level:3,title:"安装名称空间监控套件",slug:"安装名称空间监控套件"},{level:3,title:"查看监控套件的工作负载",slug:"查看监控套件的工作负载"},{level:2,title:"重启 example 容器组",slug:"重启-example-容器组"},{level:2,title:"查看监控信息",slug:"查看监控信息"},{level:3,title:"查看资源层监控信息",slug:"查看资源层监控信息"},{level:3,title:"查看中间件层监控信息",slug:"查看中间件层监控信息"},{level:3,title:"查看链路追踪监控信息",slug:"查看链路追踪监控信息"}],lastUpdated:"2019-07-31 07:56:38"},{title:"监控套件",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"监控套件"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/monitor/"},{name:"twitter:title",content:"监控套件"},{name:"twitter:url",content:"/guide/monitor/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/monitor/",relativePath:"guide/monitor/README.md",key:"v-0996c938",path:"/guide/monitor/",lastUpdated:"2019-07-31 07:56:38"},{title:"自定义监控套件",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"自定义监控套件"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/monitor/apis.html"},{name:"twitter:title",content:"自定义监控套件"},{name:"twitter:url",content:"/guide/monitor/apis.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/monitor/apis.html",relativePath:"guide/monitor/apis.md",key:"v-4db1779e",path:"/guide/monitor/apis.html",lastUpdated:"2019-07-31 07:56:38"},{title:"日常调整",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"日常调整"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/adjustion.html"},{name:"twitter:title",content:"日常调整"},{name:"twitter:url",content:"/guide/namespace/adjustion.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/adjustion.html",relativePath:"guide/namespace/adjustion.md",key:"v-c0fa0cf2",path:"/guide/namespace/adjustion.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"批量删除容器组",slug:"批量删除容器组"},{level:2,title:"批量调整镜像版本",slug:"批量调整镜像版本"},{level:2,title:"批量调整工作负载的副本数",slug:"批量调整工作负载的副本数"}],lastUpdated:"2019-07-25 06:22:52"},{title:"应用管理",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"应用管理"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/"},{name:"twitter:title",content:"应用管理"},{name:"twitter:url",content:"/guide/namespace/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/",relativePath:"guide/namespace/index.md",key:"v-1263fa20",path:"/guide/namespace/",headers:[{level:2,title:"创建工作负载",slug:"创建工作负载"},{level:2,title:"删除工作负载",slug:"删除工作负载"},{level:2,title:"伸缩",slug:"伸缩"},{level:2,title:"升级工作负载版本",slug:"升级工作负载版本"},{level:2,title:"环境迁移",slug:"环境迁移"},{level:3,title:"导出",slug:"导出"},{level:3,title:"导入",slug:"导入"}],lastUpdated:"2019-07-25 06:22:52"},{title:"配置",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"配置"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/configMap.html"},{name:"twitter:title",content:"配置"},{name:"twitter:url",content:"/guide/namespace/configMap.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/configMap.html",relativePath:"guide/namespace/configMap.md",key:"v-6c5acde7",path:"/guide/namespace/configMap.html",lastUpdated:"2019-07-25 06:22:52"},{title:"多环境",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"多环境"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/multi-env.html"},{name:"twitter:title",content:"多环境"},{name:"twitter:url",content:"/guide/namespace/multi-env.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/multi-env.html",relativePath:"guide/namespace/multi-env.md",key:"v-9d44dcf2",path:"/guide/namespace/multi-env.html",headers:[{level:2,title:"导出配置",slug:"导出配置"},{level:3,title:"前提",slug:"前提"},{level:3,title:"操作步骤",slug:"操作步骤"},{level:2,title:"导入配置",slug:"导入配置"},{level:3,title:"前提",slug:"前提-2"},{level:3,title:"操作步骤",slug:"操作步骤-2"}],lastUpdated:"2019-07-25 06:22:52"},{title:"存储卷声明",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"存储卷声明"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/pvc.html"},{name:"twitter:title",content:"存储卷声明"},{name:"twitter:url",content:"/guide/namespace/pvc.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/pvc.html",relativePath:"guide/namespace/pvc.md",key:"v-240eddf2",path:"/guide/namespace/pvc.html",lastUpdated:"2019-07-25 06:22:52"},{title:"Secrets",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Secrets"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/secrets.html"},{name:"twitter:title",content:"Secrets"},{name:"twitter:url",content:"/guide/namespace/secrets.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/secrets.html",relativePath:"guide/namespace/secrets.md",key:"v-7d2f6cc7",path:"/guide/namespace/secrets.html",lastUpdated:"2019-07-25 06:22:52"},{title:"工作负载",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"工作负载"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/namespace/workload.html"},{name:"twitter:title",content:"工作负载"},{name:"twitter:url",content:"/guide/namespace/workload.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/guide/namespace/workload.html",relativePath:"guide/namespace/workload.md",key:"v-5db85fb7",path:"/guide/namespace/workload.html",headers:[{level:2,title:"创建/查看/编辑工作负载",slug:"创建-查看-编辑工作负载"},{level:2,title:"伸缩",slug:"伸缩"},{level:2,title:"删除容器组",slug:"删除容器组"},{level:2,title:"诊断问题",slug:"诊断问题"},{level:3,title:"事件: Kubernetes 部署相关问题",slug:"事件:-kubernetes-部署相关问题"},{level:3,title:"日志: 容器运行时产生的错误",slug:"日志:-容器运行时产生的错误"},{level:3,title:"终端: 通过交互式命令,在容器内诊断问题",slug:"终端:-通过交互式命令,在容器内诊断问题"}],lastUpdated:"2019-07-25 06:22:52"},{title:"概述",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-27T16:06:46.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"概述"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/"},{name:"twitter:title",content:"概述"},{name:"twitter:url",content:"/install/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/",relativePath:"install/README.md",key:"v-5be22288",path:"/install/",lastUpdated:"2019-07-28 00:06:46"},{title:"安装 Ingress Controller",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Ingress Controller"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-common-ingress.html"},{name:"twitter:title",content:"安装 Ingress Controller"},{name:"twitter:url",content:"/install/install-common-ingress.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-common-ingress.html",relativePath:"install/install-common-ingress.md",key:"v-61ad5b01",path:"/install/install-common-ingress.html",headers:[{level:2,title:"安装 Ingress Controller",slug:"安装-ingress-controller"},{level:3,title:"在 apple-master-a-1 上执行",slug:"在-apple-master-a-1-上执行"},{level:3,title:"在IaaS云控制台完成如下配置(公网ELB)",slug:"在iaas云控制台完成如下配置(公网elb)"},{level:3,title:"配置域名解析",slug:"配置域名解析"},{level:3,title:"验证配置",slug:"验证配置"}],lastUpdated:"2019-07-25 06:22:52"},{title:"制作标准机镜像",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"制作标准机镜像"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-common-vm.html"},{name:"twitter:title",content:"制作标准机镜像"},{name:"twitter:url",content:"/install/install-common-vm.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-common-vm.html",relativePath:"install/install-common-vm.md",key:"v-4b91c5e7",path:"/install/install-common-vm.html",headers:[{level:2,title:"制作标准机镜像",slug:"制作标准机镜像"},{level:3,title:"安装docker",slug:"安装docker"},{level:3,title:"安装 nfs-utils",slug:"安装-nfs-utils"},{level:3,title:"K8S基本配置",slug:"k8s基本配置"}],lastUpdated:"2019-07-25 06:22:52"},{title:"安装 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T11:20:00.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kuboard"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard%20copy.html"},{name:"twitter:title",content:"安装 Kuboard"},{name:"twitter:url",content:"/install/install-dashboard%20copy.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard%20copy.html",relativePath:"install/install-dashboard copy.md",key:"v-5f820cc2",path:"/install/install-dashboard%20copy.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"兼容性",slug:"兼容性"},{level:2,title:"安装",slug:"安装"},{level:2,title:"获取 Token",slug:"获取-token"},{level:2,title:"访问 Kuboard",slug:"访问-kuboard"}],lastUpdated:"2019-07-29 19:20:00"},{title:"创建 kube-dns Service",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T23:54:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"创建 kube-dns Service"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard-diagonize-kube-dns.html"},{name:"twitter:title",content:"创建 kube-dns Service"},{name:"twitter:url",content:"/install/install-dashboard-diagonize-kube-dns.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard-diagonize-kube-dns.html",relativePath:"install/install-dashboard-diagonize-kube-dns.md",key:"v-1401ca46",path:"/install/install-dashboard-diagonize-kube-dns.html",lastUpdated:"2019-07-27 07:54:38"},{title:"安装 Kuboard 失败时如何诊断",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T23:54:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kuboard 失败时如何诊断"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard-diagonize.html"},{name:"twitter:title",content:"安装 Kuboard 失败时如何诊断"},{name:"twitter:url",content:"/install/install-dashboard-diagonize.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard-diagonize.html",relativePath:"install/install-dashboard-diagonize.md",key:"v-649782a7",path:"/install/install-dashboard-diagonize.html",headers:[{level:2,title:"诊断步骤",slug:"诊断步骤"}],lastUpdated:"2019-07-27 07:54:38"},{title:"升级 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T23:47:18.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"升级 Kuboard"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard-upgrade.html"},{name:"twitter:title",content:"升级 Kuboard"},{name:"twitter:url",content:"/install/install-dashboard-upgrade.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard-upgrade.html",relativePath:"install/install-dashboard-upgrade.md",key:"v-53360ab2",path:"/install/install-dashboard-upgrade.html",headers:[{level:2,title:"最新版本",slug:"最新版本"},{level:2,title:"latest 标签升级",slug:"latest-标签升级"},{level:2,title:"指定版本升级",slug:"指定版本升级"}],lastUpdated:"2019-07-29 07:47:18"},{title:"安装 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:35:19.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kuboard"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-dashboard.html"},{name:"twitter:title",content:"安装 Kuboard"},{name:"twitter:url",content:"/install/install-dashboard.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-dashboard.html",relativePath:"install/install-dashboard.md",key:"v-c621d7f2",path:"/install/install-dashboard.html",headers:[{level:2,title:"前提",slug:"前提"},{level:2,title:"兼容性",slug:"兼容性"},{level:2,title:"安装",slug:"安装"},{level:2,title:"获取 Token",slug:"获取-token"},{level:2,title:"访问 Kuboard",slug:"访问-kuboard"}],lastUpdated:"2019-07-30 07:35:19"},{title:"从客户端电脑远程管理 Kubernetes",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T16:01:26.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"从客户端电脑远程管理 Kubernetes"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-kubectl.html"},{name:"twitter:title",content:"从客户端电脑远程管理 Kubernetes"},{name:"twitter:url",content:"/install/install-kubectl.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-kubectl.html",relativePath:"install/install-kubectl.md",key:"v-66d56047",path:"/install/install-kubectl.html",headers:[{level:2,title:"在客户端电脑安装 kubectl",slug:"在客户端电脑安装-kubectl"},{level:2,title:"获取 kubectl config 文件",slug:"获取-kubectl-config-文件"},{level:2,title:"配置 kubectl 客户端",slug:"配置-kubectl-客户端"}],lastUpdated:"2019-07-27 00:01:26"},{title:"Spring Cloud on Kubernetes",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:35:19.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Spring Cloud on Kubernetes"},{property:"og:type",content:"website"},{property:"og:url",content:"/micro-service/spring-cloud/"},{name:"twitter:title",content:"Spring Cloud on Kubernetes"},{name:"twitter:url",content:"/micro-service/spring-cloud/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/micro-service/spring-cloud/",relativePath:"micro-service/spring-cloud/README.md",key:"v-16dbc3c4",path:"/micro-service/spring-cloud/",lastUpdated:"2019-07-30 07:35:19"},{title:"部署 cloud-eureka",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T15:55:58.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"部署 cloud-eureka"},{property:"og:type",content:"website"},{property:"og:url",content:"/micro-service/spring-cloud/cloud-eureka.html"},{name:"twitter:title",content:"部署 cloud-eureka"},{name:"twitter:url",content:"/micro-service/spring-cloud/cloud-eureka.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/micro-service/spring-cloud/cloud-eureka.html",relativePath:"micro-service/spring-cloud/cloud-eureka.md",key:"v-bfdadf72",path:"/micro-service/spring-cloud/cloud-eureka.html",lastUpdated:"2019-07-28 23:55:58"},{title:"Kuboard 简介",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-31T02:46:33.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Kuboard 简介"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/"},{name:"twitter:title",content:"Kuboard 简介"},{name:"twitter:url",content:"/overview/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/",relativePath:"overview/README.md",key:"v-7249b1a4",path:"/overview/",headers:[{level:2,title:"Kuboard 简介",slug:"kuboard-简介"},{level:2,title:"在线体验",slug:"在线体验"},{level:2,title:"开始使用",slug:"开始使用"},{level:3,title:"Kubernetes 初学者",slug:"kubernetes-初学者"},{level:3,title:"Kubernetes 有经验者",slug:"kubernetes-有经验者"},{level:3,title:"Kubernetes + Spring Cloud",slug:"kubernetes-spring-cloud"},{level:3,title:"Kubernetes + Devops",slug:"kubernetes-devops"},{level:2,title:"在线提问",slug:"在线提问"}],lastUpdated:"2019-07-31 10:46:33"},{title:"v1.0.0-beta.13",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-30T23:56:38.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"v1.0.0-beta.13"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/change-log-on-the-way.html"},{name:"twitter:title",content:"v1.0.0-beta.13"},{name:"twitter:url",content:"/overview/change-log-on-the-way.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/change-log-on-the-way.html",relativePath:"overview/change-log-on-the-way.md",key:"v-531fa289",path:"/overview/change-log-on-the-way.html",headers:[{level:2,title:"v1.0.0-beta.13",slug:"v1-0-0-beta-13"}],lastUpdated:"2019-07-31 07:56:38"},{title:"更新日志",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:02:29.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"更新日志"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/change-log.html"},{name:"twitter:title",content:"更新日志"},{name:"twitter:url",content:"/overview/change-log.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/change-log.html",relativePath:"overview/change-log.md",key:"v-d575ee32",path:"/overview/change-log.html",headers:[{level:2,title:"v1.0.0-beta.13",slug:"v1-0-0-beta-13"}],lastUpdated:"2019-07-30 07:02:29"},{title:"支持",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:02:29.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"支持"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/support.html"},{name:"twitter:title",content:"支持"},{name:"twitter:url",content:"/overview/support.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/support.html",relativePath:"overview/support.md",key:"v-6e54f1c1",path:"/overview/support.html",headers:[{level:2,title:"提交 BUG",slug:"提交-bug"},{level:2,title:"在线提问",slug:"在线提问"}],lastUpdated:"2019-07-30 07:02:29"},{title:"十分钟带你理解Kubernetes核心概念",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-31T02:46:33.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"十分钟带你理解Kubernetes核心概念"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/k8s-core-concepts.html"},{name:"twitter:title",content:"十分钟带你理解Kubernetes核心概念"},{name:"twitter:url",content:"/overview/k8s-core-concepts.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/k8s-core-concepts.html",relativePath:"overview/k8s-core-concepts.md",key:"v-480f517b",path:"/overview/k8s-core-concepts.html",headers:[{level:2,title:"什么是Kubernetes?",slug:"什么是kubernetes?"},{level:2,title:"集群",slug:"集群"},{level:2,title:"Pod",slug:"pod"},{level:2,title:"Label",slug:"label"},{level:2,title:"Replication Controller",slug:"replication-controller"},{level:2,title:"Service",slug:"service"},{level:3,title:"Kubernetes Master",slug:"kubernetes-master"}],lastUpdated:"2019-07-31 10:46:33"},{title:"为什么选择 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T08:11:50.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"为什么选择 Kuboard"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/why-kuboard.html"},{name:"twitter:title",content:"为什么选择 Kuboard"},{name:"twitter:url",content:"/overview/why-kuboard.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/why-kuboard.html",relativePath:"overview/why-kuboard.md",key:"v-5566a571",path:"/overview/why-kuboard.html",headers:[{level:2,title:"为什么选择 Kuboard",slug:"为什么选择-kuboard"},{level:2,title:"Kubernetes 入门学习者",slug:"kubernetes-入门学习者"},{level:3,title:"集群概览",slug:"集群概览"},{level:3,title:"名称空间",slug:"名称空间"},{level:3,title:"无需手写 Yaml",slug:"无需手写-yaml"},{level:2,title:"Kubernetes 日常运维人员",slug:"kubernetes-日常运维人员"},{level:3,title:"纯图形界面运维 Kubernetes",slug:"纯图形界面运维-kubernetes"},{level:3,title:"多环境复制",slug:"多环境复制"},{level:3,title:"应用升级",slug:"应用升级"},{level:2,title:"0 侵入性",slug:"_0-侵入性"},{level:2,title:"更多资料",slug:"更多资料"}],lastUpdated:"2019-07-29 16:11:50"},{title:"安装 Kubernetes 单Master节点",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T11:20:00.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kubernetes 单Master节点"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-k8s.html"},{name:"twitter:title",content:"安装 Kubernetes 单Master节点"},{name:"twitter:url",content:"/install/install-k8s.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-k8s.html",relativePath:"install/install-k8s.md",key:"v-292f2847",path:"/install/install-k8s.html",headers:[{level:2,title:"制作标准机镜像",slug:"制作标准机镜像"},{level:3,title:"安装docker",slug:"安装docker"},{level:3,title:"安装 nfs-utils",slug:"安装-nfs-utils"},{level:3,title:"K8S基本配置",slug:"k8s基本配置"},{level:2,title:"初始化 master 节点",slug:"初始化-master-节点"},{level:2,title:"初始化 worker节点",slug:"初始化-worker节点"},{level:3,title:"获得 join命令参数",slug:"获得-join命令参数"},{level:3,title:"初始化worker",slug:"初始化worker"},{level:3,title:"检查初始化结果",slug:"检查初始化结果"},{level:2,title:"移除 worker 节点",slug:"移除-worker-节点"},{level:2,title:"安装 Ingress Controller",slug:"安装-ingress-controller"},{level:2,title:"下一步",slug:"下一步"}],lastUpdated:"2019-07-29 19:20:00"},{title:"安装 Kubernetes 高可用",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T16:01:26.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"安装 Kubernetes 高可用"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-kubernetes.html"},{name:"twitter:title",content:"安装 Kubernetes 高可用"},{name:"twitter:url",content:"/install/install-kubernetes.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-kubernetes.html",relativePath:"install/install-kubernetes.md",key:"v-3732859b",path:"/install/install-kubernetes.html",headers:[{level:2,title:"制作标准机镜像",slug:"制作标准机镜像"},{level:3,title:"安装docker",slug:"安装docker"},{level:3,title:"安装 nfs-utils",slug:"安装-nfs-utils"},{level:3,title:"K8S基本配置",slug:"k8s基本配置"},{level:2,title:"初始化API Server",slug:"初始化api-server"},{level:3,title:"创建 ApiServer 的 ELB(私网)",slug:"创建-apiserver-的-elb(私网)"},{level:3,title:"初始化第一个master节点",slug:"初始化第一个master节点"},{level:3,title:"初始化第二、三个master节点",slug:"初始化第二、三个master节点"},{level:3,title:"检查 apiserver初始化结果",slug:"检查-apiserver初始化结果"},{level:2,title:"初始化 worker节点",slug:"初始化-worker节点"},{level:3,title:"获得 join命令参数",slug:"获得-join命令参数"},{level:3,title:"初始化worker",slug:"初始化worker"},{level:3,title:"检查 apiserver初始化结果",slug:"检查-apiserver初始化结果-2"},{level:2,title:"移除 worker 节点",slug:"移除-worker-节点"},{level:2,title:"安装 Ingress Controller",slug:"安装-ingress-controller"},{level:3,title:"在 apple-master-a-1 上执行",slug:"在-apple-master-a-1-上执行"},{level:3,title:"在IaaS云控制台完成如下配置(公网ELB)",slug:"在iaas云控制台完成如下配置(公网elb)"},{level:3,title:"配置域名解析",slug:"配置域名解析"},{level:3,title:"验证配置",slug:"验证配置"}],lastUpdated:"2019-07-27 00:01:26"},{title:"如何降低 Kubernetes 学习门槛",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-29T23:35:19.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"如何降低 Kubernetes 学习门槛"},{property:"og:type",content:"website"},{property:"og:url",content:"/overview/concepts.html"},{name:"twitter:title",content:"如何降低 Kubernetes 学习门槛"},{name:"twitter:url",content:"/overview/concepts.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/overview/concepts.html",relativePath:"overview/concepts.md",key:"v-0393ebb2",path:"/overview/concepts.html",headers:[{level:2,title:"Kubernetes 学习门槛在哪儿",slug:"kubernetes-学习门槛在哪儿"},{level:2,title:"降低 Kubernetes 学习门槛",slug:"降低-kubernetes-学习门槛"},{level:3,title:"学习路线",slug:"学习路线"},{level:3,title:"快速入门",slug:"快速入门"},{level:2,title:"入门利器",slug:"入门利器"},{level:3,title:"1. 基本信息",slug:"_1-基本信息"},{level:3,title:"2. 数据卷",slug:"_2-数据卷"},{level:3,title:"3. 身份信息",slug:"_3-身份信息"},{level:3,title:"4. 容器",slug:"_4-容器"},{level:3,title:"5. 访问方式",slug:"_5-访问方式"},{level:3,title:"6. 互联网入口",slug:"_6-互联网入口"}],lastUpdated:"2019-07-30 07:35:19"}],themeConfig:{kuboardToken:"eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg",nav:[{text:"简介",link:"/overview/"},{text:"安装",link:"/install/install-dashboard"},{text:"使用",link:"/guide/"},{text:"微服务",link:"/micro-service/spring-cloud/"}],displayAllHeaders:!1,sidebarDepth:2,serviceWorker:{updatePopup:!0},lastUpdated:"更新时间",docsRepo:"eip-work/kuboard-press",docsDir:"",docsBranch:"master",editLinks:!0,editLinkText:"帮助我们改善此页面!",sidebar:{"/overview/":[{title:"简介",collapsable:!1,children:[""]},{title:"概念",collapsable:!1,children:["k8s-core-concepts","why-kuboard","concepts"]},{title:"技术支持",collapsable:!1,children:["support","change-log"]}],"/install/":[{title:"安装 Kubernetes",collapsable:!1,children:["install-k8s","install-kubernetes","install-kubectl"]},{title:"安装 Kuboard",collapsable:!1,children:["install-dashboard","install-dashboard-upgrade"]}],"/guide/":[{title:"概述",collapsable:!1,children:[["","概述"]]},{title:"Example",collapsable:!1,children:["example/busybox","example/import","example/monitor"]},{title:"集群管理",collapsable:!1,children:["cluster/computing","cluster/storage","cluster/namespace"]},{title:"应用管理",collapsable:!1,children:["namespace/workload","namespace/secrets","namespace/configMap","namespace/pvc","namespace/adjustion","namespace/multi-env"]},{title:"问题诊断",collapsable:!1,children:["diagonize/events","diagonize/logs","diagonize/port-forward"]},{title:"监控套件",collapsable:!1,children:["monitor/","monitor/apis"]}],"/micro-service/":[{title:"Spring Cloud",collapsable:!1,children:["spring-cloud/","spring-cloud/cloud-eureka"]}],"/devops/":[{title:"Devops",collapsable:!1,children:[""]}],"/support/":["","change-log"]}}};n(75);Ko.component("HomePage",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,354))),Ko.component("Badge",()=>Promise.all([n.e(0),n.e(26)]).then(n.bind(null,369)));n(76),n(77);var Ga=n(53),Qa=n.n(Ga),ts={props:{threshold:{type:Number,default:300}},data:function(){return{scrollTop:null}},mounted:function(){var t=this;this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",Qa()(function(){t.scrollTop=t.getScrollTop()},100))},methods:{getScrollTop:function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},scrollToTop:function(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0}},computed:{show:function(){return this.scrollTop>this.threshold}}},es=(n(85),Object(qa.a)(ts,function(){var t=this.$createElement,e=this._self._c||t;return e("transition",{attrs:{name:"fade"}},[this.show?e("svg",{staticClass:"go-to-top",attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 49.484 28.284"},on:{click:this.scrollToTop}},[e("g",{attrs:{transform:"translate(-229 -126.358)"}},[e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(229 151.107) rotate(-45)"}}),this._v(" "),e("rect",{attrs:{fill:"currentColor",width:"35",height:"5",rx:"2",transform:"translate(274.949 154.642) rotate(-135)"}})])]):this._e()])},[],!1,null,"67a9666a",null).exports),ns=(n(40),{data:function(){return{readingTop:0,readingHeight:1,progressStyle:null,transform:["transform"]}},watch:{$readingShow:function(){this.base()}},mounted:function(){this.base()},beforeDestroy:function(){var t=this;window.removeEventListener("scroll",function(){t.getReadingBase()})},methods:{base:function(){var t=this;this.$readingShow&&(this.transform=this.getTransform(),this.progressStyle=this.getProgressStyle(),window.addEventListener("scroll",function(){t.getReadingBase()},200))},getReadingBase:function(){this.readingHeight=this.getReadingHeight()-this.getScreenHeight(),this.readingTop=this.getReadingTop(),this.progressStyle=this.getProgressStyle()},getReadingHeight:function(){return document.body.offsetHeight||document.body.scrollHeight||0},getScreenHeight:function(){return window.innerHeight||document.documentElement.clientHeight||0},getReadingTop:function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},getTransform:function(){var t=this;return["transform","-webkit-transform","-moz-transform","-o-transform","-ms-transform"].filter(function(e){return t.supportCss(e)})},getProgressStyle:function(){var t=this.readingTop/this.readingHeight;switch(this.$readingShow){case"top":case"bottom":return this.transform[0]?"".concat(this.transform[0],": translate(").concat(100*t/2-50,"%, 0) scale(").concat(t,", 1)"):"width: ".concat(100*t,"%");case"left":case"right":return this.transform[0]?"".concat(this.transform[0],": translate(0, ").concat(100*t/2-50,"%) scale(1, ").concat(t,")"):"height: ".concat(100*t,"%")}},supportCss:function(t){return t in document.createElement("div").style}}}),rs=(n(88),Object(qa.a)(ns,function(){var t=this.$createElement,e=this._self._c||t;return this.$readingShow?e("div",{staticClass:"reading-progress",class:this.$readingShow},[e("div",{staticClass:"progress",style:this.progressStyle})]):this._e()},[],!1,null,"7681808f",null).exports),os={readingDir:null,fixed:"top"};const is=(t,e,n)=>!!t.includes(e)&&n;n(89);var as=n(54),ss=n.n(as);function ls(t,e,n){return e in t?ss()(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var cs=n(55),us=n.n(cs);n(41),n(64),n(30),n(38),n(39);Object.prototype.hasOwnProperty;var ps={name:"TabBar",props:{tabs:Array},inject:["rootTabs"],computed:{barStyle:{get:function(){var t=this,e={},n=0,r=0,o=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height",i="width"===o?"x":"y",a=function(t){return t.toLowerCase().replace(/( |^)[a-z]/g,function(t){return t.toUpperCase()})};this.tabs.every(function(e,i){var s=((t,e)=>{const n=((t,e)=>{for(let n=0;n!==t.length;++n)if(e(t[n]))return n;return-1})(t,e);return-1!==n?t[n]:void 0})(t.$parent.$refs.tabs||[],function(t){return t.id.replace("tab-","")===e.paneName});return!!s&&(e.active?(r=s["client".concat(a(o))],"width"===o&&t.tabs.length>1&&(r-=0===i||i===t.tabs.length-1?20:40),!1):(n+=s["client".concat(a(o))],!0))}),"width"===o&&0!==n&&(n+=20);var s="translate".concat(a(i),"(").concat(n,"px)");return e[o]=r+"px",e.transform=s,e.msTransform=s,e.webkitTransform=s,e}}}},fs=Object(qa.a)(ps,function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"el-tabs__active-bar",class:"is-"+this.rootTabs.tabPosition,style:this.barStyle})},[],!1,null,null,null).exports,ds=function(){if("undefined"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some(function(t,r){return t[0]===e&&(n=r,!0)}),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n0},t.prototype.connect_=function(){hs&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),_s?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){hs&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?"":e;bs.some(function(t){return!!~n.indexOf(t)})&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),xs=function(t,e){for(var n=0,r=Object.keys(e);n0},t}(),Is="undefined"!=typeof WeakMap?new WeakMap:new ds,Rs=function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=ws.getInstance(),r=new Ls(e,n,this);Is.set(this,r)};["observe","unobserve","disconnect"].forEach(function(t){Rs.prototype[t]=function(){var e;return(e=Is.get(this))[t].apply(e,arguments)}});var Ns=void 0!==vs.ResizeObserver?vs.ResizeObserver:Rs;const Ms="undefined"==typeof window,Us=function(t){for(let e of t){const t=e.target.__resizeListeners__||[];t.length&&t.forEach(t=>{t()})}};function Ks(){}var Fs=function(t){return t.toLowerCase().replace(/( |^)[a-z]/g,function(t){return t.toUpperCase()})},Ds={name:"TabNav",components:{TabBar:fs},inject:["rootTabs"],props:{panes:Array,currentName:String,editable:Boolean,onTabClick:{type:Function,default:Ks},onTabRemove:{type:Function,default:Ks},type:String,stretch:Boolean},data:function(){return{scrollable:!1,navOffset:0,isFocus:!1,focusable:!0}},computed:{navStyle:function(){var t=-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"X":"Y";return{transform:"translate".concat(t,"(-").concat(this.navOffset,"px)")}},sizeName:function(){return-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"width":"height"}},methods:{scrollPrev:function(){var t=this.$refs.navScroll["offset".concat(Fs(this.sizeName))],e=this.navOffset;if(e){var n=e>t?e-t:0;this.navOffset=n}},scrollNext:function(){var t=this.$refs.nav["offset".concat(Fs(this.sizeName))],e=this.$refs.navScroll["offset".concat(Fs(this.sizeName))],n=this.navOffset;if(!(t-n<=e)){var r=t-n>2*e?n+e:t-e;this.navOffset=r}},scrollToActiveTab:function(){if(this.scrollable){var t=this.$refs.nav,e=this.$el.querySelector(".is-active");if(e){var n=this.$refs.navScroll,r=e.getBoundingClientRect(),o=n.getBoundingClientRect(),i=t.offsetWidth-o.width,a=this.navOffset,s=a;r.lefto.right&&(s=a+r.right-o.right),s=Math.max(s,0),this.navOffset=Math.min(s,i)}}},update:function(){if(this.$refs.nav){var t=this.sizeName,e=this.$refs.nav["offset".concat(Fs(t))],n=this.$refs.navScroll["offset".concat(Fs(t))],r=this.navOffset;if(n0&&(this.navOffset=0)}},changeTab:function(t){var e,n,r,o=t.keyCode;-1!==[37,38,39,40].indexOf(o)&&(r=t.currentTarget.querySelectorAll("[role=tab]"),n=Array.prototype.indexOf.call(r,t.target),r[e=37===o||38===o?0===n?r.length-1:n-1:n"])]:null,m=this._l(r,function(n,r){var i,l=n.name||n.index||r,c=n.isClosable||o;n.index="".concat(r);var u=c?t("span",{class:"el-icon-close",on:{click:function(t){s(n,t)}}}):null,p=n.$slots.label||n.label,f=n.active?0:-1;return t("div",{class:(i={"el-tabs__item":!0},ls(i,"is-".concat(e.rootTabs.tabPosition),!0),ls(i,"is-active",n.active),ls(i,"is-disabled",n.disabled),ls(i,"is-closable",c),ls(i,"is-focus",e.isFocus),i),attrs:{id:"tab-".concat(l),"aria-controls":"pane-".concat(l),role:"tab","aria-selected":n.active,tabindex:f},key:"tab-".concat(l),ref:"tabs",refInFor:!0,on:{focus:function(){d()},blur:function(){h()},click:function(t){h(),a(n,l,t)},keydown:function(t){!c||46!==t.keyCode&&8!==t.keyCode||s(n,t)}}},[p,u])});return t("div",{class:["el-tabs__nav-wrap",c?"is-scrollable":"","is-".concat(this.rootTabs.tabPosition)]},[v,t("div",{class:["el-tabs__nav-scroll"],ref:"navScroll"},[t("div",{class:["el-tabs__nav","is-".concat(this.rootTabs.tabPosition),i&&-1!==["top","bottom"].indexOf(this.rootTabs.tabPosition)?"is-stretch":""],ref:"nav",style:l,attrs:{role:"tablist"},on:{keydown:f}},[n?null:t("tab-bar",{attrs:{tabs:r}}),m])])])},mounted:function(){var t,e,n=this;t=this.$el,e=this.update,Ms||(t.__resizeListeners__||(t.__resizeListeners__=[],t.__ro__=new Ns(Us),t.__ro__.observe(t)),t.__resizeListeners__.push(e)),document.addEventListener("visibilitychange",this.visibilityChangeHandler),window.addEventListener("blur",this.windowBlurHandler),window.addEventListener("focus",this.windowFocusHandler),setTimeout(function(){n.scrollToActiveTab()},0)},beforeDestroy:function(){var t,e;this.$el&&this.update&&(t=this.$el,e=this.update,t&&t.__resizeListeners__&&(t.__resizeListeners__.splice(t.__resizeListeners__.indexOf(e),1),t.__resizeListeners__.length||t.__ro__.disconnect())),document.removeEventListener("visibilitychange",this.visibilityChangeHandler),window.removeEventListener("blur",this.windowBlurHandler),window.removeEventListener("focus",this.windowFocusHandler)}},zs={name:"ElTabs",components:{TabNav:Object(qa.a)(Ds,void 0,void 0,!1,null,null,null).exports},props:{type:String,activeName:String,closable:Boolean,addable:Boolean,value:{},editable:Boolean,tabPosition:{type:String,default:"top"},beforeLeave:Function,stretch:Boolean},provide:function(){return{rootTabs:this}},data:function(){return{currentName:this.value||this.activeName,panes:[]}},watch:{activeName:function(t){this.setCurrentName(t)},value:function(t){this.setCurrentName(t)},currentName:function(t){var e=this;this.$refs.nav&&this.$nextTick(function(){e.$refs.nav.$nextTick(function(t){e.$refs.nav.scrollToActiveTab()})})}},methods:{calcPaneInstances:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.$slots.default){var n=this.$slots.default.filter(function(t){return t.tag&&t.componentOptions&&"ElTabPane"===t.componentOptions.Ctor.options.name}),r=n.map(function(t){return t.componentInstance}),o=!(r.length===this.panes.length&&r.every(function(e,n){return e===t.panes[n]}));(e||o)&&(this.panes=r)}else 0!==this.panes.length&&(this.panes=[])},handleTabClick:function(t,e,n){t.disabled||(this.setCurrentName(e),this.$emit("tab-click",t,n))},handleTabRemove:function(t,e){t.disabled||(e.stopPropagation(),this.$emit("edit",t.name,"remove"),this.$emit("tab-remove",t.name))},handleTabAdd:function(){this.$emit("edit",null,"add"),this.$emit("tab-add")},setCurrentName:function(t){var e=this,n=function(){e.currentName=t,e.$emit("input",t)};if(this.currentName!==t&&this.beforeLeave){var r=this.beforeLeave(t,this.currentName);r&&r.then?r.then(function(){n(),e.$refs.nav&&e.$refs.nav.removeFocus()},function(){}):!1!==r&&n()}else n()}},render:function(t){var e,n=this.type,r=this.handleTabClick,o=this.handleTabRemove,i=this.handleTabAdd,a=this.currentName,s=this.panes,l=this.editable,c=this.addable,u=this.tabPosition,p=this.stretch,f=l||c?t("span",{class:"el-tabs__new-tab",on:{click:i,keydown:function(t){13===t.keyCode&&i()}},attrs:{tabindex:"0"}},[t("i",{class:"el-icon-plus"})]):null,d={props:{currentName:a,onTabClick:r,onTabRemove:o,editable:l,type:n,panes:s,stretch:p},ref:"nav"},h=t("div",{class:["el-tabs__header","is-".concat(u)]},[f,t("tab-nav",us()([{},d]))]),v=t("div",{class:"el-tabs__content"},[this.$slots.default]);return t("div",{class:(e={"el-tabs":!0,"el-tabs--card":"card"===n},ls(e,"el-tabs--".concat(u),!0),ls(e,"el-tabs--border-card","border-card"===n),e)},["bottom"!==u?[h,v]:[v,h]])},created:function(){this.currentName||this.setCurrentName("0"),this.$on("tab-nav-update",this.calcPaneInstances.bind(null,!0))},mounted:function(){this.calcPaneInstances()},updated:function(){this.calcPaneInstances()}},Bs=Object(qa.a)(zs,void 0,void 0,!1,null,null,null).exports,Vs={name:"ElTabPane",componentName:"ElTabPane",props:{label:String,labelContent:Function,name:String,closable:Boolean,disabled:Boolean,lazy:Boolean},data:function(){return{index:null,loaded:!1}},computed:{isClosable:function(){return this.closable||this.$parent.closable},active:function(){var t=this.$parent.currentName===(this.name||this.index);return t&&(this.loaded=!0),t},paneName:function(){return this.name||this.index}},updated:function(){this.$parent.$emit("tab-nav-update")}},Zs=Object(qa.a)(Vs,function(){var t=this,e=t.$createElement,n=t._self._c||e;return!t.lazy||t.loaded||t.active?n("div",{directives:[{name:"show",rawName:"v-show",value:t.active,expression:"active"}],staticClass:"el-tab-pane",attrs:{role:"tabpanel","aria-hidden":!t.active,id:"pane-"+t.paneName,"aria-labelledby":"tab-"+t.paneName}},[t._t("default")],2):t._e()},[],!1,null,null,null).exports,Hs=(n(100),[{},({Vue:t})=>{t.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({router:t})=>{"undefined"!=typeof window&&(function(t,e,n,r,o,i,a){t.GoogleAnalyticsObject=o,t.ga=t.ga||function(){(t.ga.q=t.ga.q||[]).push(arguments)},t.ga.l=1*new Date,i=e.createElement(n),a=e.getElementsByTagName(n)[0],i.async=1,i.src="https://www.google-analytics.com/analytics.js",a.parentNode.insertBefore(i,a)}(window,document,"script",0,"ga"),ga("create","UA-144196556-1","auto"),ga("set","anonymizeIp",!0),ga("send","pageview"),t.afterEach(function(t){ga("set","page",t.fullPath),ga("send","pageview")}))},({Vue:t})=>{t.component("BackToTop",es)},({Vue:t})=>{t.component("ReadingProgress",rs),t.mixin({computed:{$readingShow(){const{readingDir:t,fixed:e}=os,n=this.$page.regularPath;if(void 0!==this.$frontmatter.readingShow){const t=this.$frontmatter.readingShow;return"boolean"==typeof t&&t?"top":t}if(n){if(null===t)return e;if("string"==typeof t)return is(n,t,e);if(Array.isArray(t)){for(let r=0;r{"undefined"!=typeof window&&function(){var t=document.createElement("script"),e=window.location.protocol.split(":")[0];t.src="https"===e?"https://zz.bdstatic.com/linksubmit/push.js":"http://push.zhanzhang.baidu.com/push.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n)}()}]),Ws=["BackToTop","ReadingProgress"];class qs{constructor(){this.store=new Ko({data:{state:{}}})}$get(t){return this.store.state[t]}$set(t,e){Ko.set(this.store.state,t,e)}$emit(...t){this.store.$emit(...t)}$on(...t){this.store.$on(...t)}}class Ys extends qs{}Object.assign(Ys.prototype,{getPageAsyncComponent:Ia,getLayoutAsyncComponent:Ra,getAsyncComponent:Na,getVueComponent:Ma});var Xs={install(t){const e=new Ys;t.$vuepress=e,t.prototype.$vuepress=e}};function Js(t,e){return t.options.routes.filter(t=>t.path.toLowerCase()===e.toLowerCase()).length>0}var Gs={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(t){const e=this.pageKey||this.$parent.$page.key;return Ka("pageKey",e),Ko.component(e)||Ko.component(e,Ia(e)),t(e||"")}},Qs={functional:!0,props:{slotKey:String,required:!0},render:(t,{props:e,slots:n})=>t("div",{class:[`content__${e.slotKey}`]},n()[e.slotKey])},tl=(n(101),Object(qa.a)({},function(t,e){var n=e._c;return n("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[n("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),e._v(" "),n("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})])},[],!0,null,null,null).exports),el={functional:!0,render(t,{parent:e,children:n}){if(e._isMounted)return n;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Ko.config.productionTip=!1,Ko.use(ba),Ko.use(Xs),Ko.mixin(function(t,e,n=Ko){!function(t){t.locales&&Object.keys(t.locales).forEach(e=>{t.locales[e].path=e}),Object.freeze(t)}(e),n.$vuepress.$set("siteData",e);const r=new(t(n.$vuepress.$get("siteData"))),o=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),i={};return Object.keys(o).reduce((t,e)=>(e.startsWith("$")&&(t[e]=o[e].get),t),i),{computed:i}}(t=>(class{setPage(t){this.__page=t}get $site(){return t}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:t={}}=this.$site;let e,n;for(const r in t)"/"===r?n=t[r]:0===this.$page.path.indexOf(r)&&(e=t[r]);return e||n||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $title(){const t=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}get $description(){const t=function(t){if(t){const e=t.filter(t=>"description"===t.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||""}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(t,e){for(let n=0;nn||(t.hash?!Ko.$vuepress.$get("disableScrollBehavior")&&{selector:t.hash}:{x:0,y:0})});!function(t){t.beforeEach((e,n,r)=>{if(Js(t,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const n=e.path.replace(/\/$/,"")+".html";Js(t,n)?r(n):r()}else r();else{const n=e.path+"/",o=e.path+".html";Js(t,o)?r(o):Js(t,n)?r(n):r()}})}(n);const r={};try{Hs.forEach(e=>{"function"==typeof e&&e({Vue:Ko,options:r,router:n,siteData:Ja,isServer:t})})}catch(t){console.error(t)}return{app:new Ko(Object.assign(r,{router:n,render:t=>t("div",{attrs:{id:"app"}},[t("router-view",{ref:"layout"}),t("div",{class:"global-ui"},Ws.map(e=>t(e)))])})),router:n}}(!1);window.__VUEPRESS__={version:"1.0.2",hash:"7c9b37f"},rl.onReady(()=>{nl.$mount("#app")})}]); \ No newline at end of file diff --git a/docs/devops/index.html b/docs/devops/index.html index 0b80e24..0b28084 100644 --- a/docs/devops/index.html +++ b/docs/devops/index.html @@ -7,11 +7,11 @@ - - + + -

Kubernetes + DevOps

如何继承 DevOps ?

文档准备好后,请通知我

Copyright © 2019-present Huanqing Shao
- +

Kubernetes + DevOps

如何继承 DevOps ?

文档准备好后,请通知我

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/cluster/computing.html b/docs/guide/cluster/computing.html index e3188e1..e4320d2 100644 --- a/docs/guide/cluster/computing.html +++ b/docs/guide/cluster/computing.html @@ -7,11 +7,11 @@ - - + + -

计算资源管理

前提

必须具备如下条件:

  • Kubernetes 集群
  • 已在集群中安装 Kuboard

添加节点

集群完成安装后,可以随时向集群中添加计算节点,请参考 初始化 worker 节点

查看节点

登录 Kuboard 之后,即可看到集群中的计算资源列表,在左下角,如下图所示:

image-20190720224950653

  • 点击 demo-worker002 可查看该节点的详细信息,如下图所示:

image-20190720225123111

移除节点

  • 点击 节点 详情页上方的 删除

    并确认要删除的节点的名称后,即可删除该节点

image-20190720225222622

+ diff --git a/docs/guide/cluster/namespace.html b/docs/guide/cluster/namespace.html index 82d950e..b66f4b8 100644 --- a/docs/guide/cluster/namespace.html +++ b/docs/guide/cluster/namespace.html @@ -7,11 +7,11 @@ - - + + -

名称空间管理

创建名称空间

前提

必须具备如下条件:

假设您已经进入了 Kuboard 界面,如下图所示:

image-20190723105606081

准备

  • 点击 创建 按钮,创建名称空间

并填写:

字段名称 填写内容 说明
名称 example Kubernetes 的 namespace 名称

image-20190723105644937

  • 点击 保存

image-20190723105722999

  • 点击 应用

image-20190723105748435

  • 点击 完成

    此时可在名称空间列表中查看到刚刚创建好的名称空间 example

image-20190723105809872

  • 点击 example 名称空间

    点击 example 名称空间后,可进入该名称空间的页面。刚刚初始化的名称空间的界面布局如下图所示:

image-20190723105830318

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/cluster/storage.html b/docs/guide/cluster/storage.html index 32d400a..f45e62c 100644 --- a/docs/guide/cluster/storage.html +++ b/docs/guide/cluster/storage.html @@ -7,11 +7,11 @@ - - + + -

存储空间管理

创建存储类

前提

必须具备如下条件:

  • Kubernetes 集群 (安装在阿里云,本文将使用阿里云的 NFS 服务作为存储资源,Kuboard 也可以运行在其他云环境或者私有环境中。)
  • 已在集群中安装 Kuboard

在阿里云创建 NAS 服务

如果您在其他 IaaS 供应商搭建了 Kubernetes 集群,请参考该 IaaS 供应商的文档,创建 NFS 服务。您也可以自行搭建 NFS 服务器,用来为 Kubernetes 集群提供存储资源。

  • 进入阿里云 文件存储 NAS 服务 控制台

登录 www.aliyun.com 后,在控制台界面的产品与服务中选择 文件存储 NAS

如下图所示

image-20190717113807552

  • 文件存储 NAS 控制台中点击 创建文件系统

image-20190717114304953

  • 填写表单
字段名称 填写内容 说明
地域 请选择您的 Kubernetes 集群所在的地域 文件系统所在地域
存储类型 容量型 / 或 SSD型 测试目的,使用价格便宜的容量型即可
协议类型 NFS 请选择NFS
可用区 请选择您的 Kubernetes 集群所在的可用区 文件系统所在可用区
存储包 如果当下没有存储包,可以后续绑定 不绑定存储包,将无法使用该文件系统

image-20190717114354610

  • 点击 确定

点击确定后,可查看到该文件系统已创建成功

image-20190717115020848

  • 绑定存储包

请自行在阿里云中为该文件系统绑定存储包,如果不绑定存储包,将无法使用该文件系统。

  • 点击刚创建文件系统的 管理 按钮

image-20190717115403374

  • 点击 添加挂载点

并填写表单

字段名称 填写内容 说明
挂载点类型 专有网络
VPC网络 请选择您的 Kubernetes 集群所在的VPC
交换机 请选择您的 Kubernetes 集群所在的交换机
权限组 VPC默认权限组(全部允许) 请选择全部允许

image-20190717115457614

  • 点击 确定

点击确定后,将完成挂载点创建,如下图所示:

image-20190717115829821

  • 获取 NFS 连接参数:

在上图界面中,将 V4 Mount 的指令复制下来后,如下所示:

+

存储空间管理

创建存储类

前提

必须具备如下条件:

  • Kubernetes 集群 (安装在阿里云,本文将使用阿里云的 NFS 服务作为存储资源,Kuboard 也可以运行在其他云环境或者私有环境中。)
  • 已在集群中安装 Kuboard

在阿里云创建 NAS 服务

如果您在其他 IaaS 供应商搭建了 Kubernetes 集群,请参考该 IaaS 供应商的文档,创建 NFS 服务。您也可以自行搭建 NFS 服务器,用来为 Kubernetes 集群提供存储资源。

  • 进入阿里云 文件存储 NAS 服务 控制台

登录 www.aliyun.com 后,在控制台界面的产品与服务中选择 文件存储 NAS

如下图所示

image-20190717113807552

  • 文件存储 NAS 控制台中点击 创建文件系统

image-20190717114304953

  • 填写表单
字段名称 填写内容 说明
地域 请选择您的 Kubernetes 集群所在的地域 文件系统所在地域
存储类型 容量型 / 或 SSD型 测试目的,使用价格便宜的容量型即可
协议类型 NFS 请选择NFS
可用区 请选择您的 Kubernetes 集群所在的可用区 文件系统所在可用区
存储包 如果当下没有存储包,可以后续绑定 不绑定存储包,将无法使用该文件系统

image-20190717114354610

  • 点击 确定

点击确定后,可查看到该文件系统已创建成功

image-20190717115020848

  • 绑定存储包

请自行在阿里云中为该文件系统绑定存储包,如果不绑定存储包,将无法使用该文件系统。

  • 点击刚创建文件系统的 管理 按钮

image-20190717115403374

  • 点击 添加挂载点

并填写表单

字段名称 填写内容 说明
挂载点类型 专有网络
VPC网络 请选择您的 Kubernetes 集群所在的VPC
交换机 请选择您的 Kubernetes 集群所在的交换机
权限组 VPC默认权限组(全部允许) 请选择全部允许

image-20190717115457614

  • 点击 确定

点击确定后,将完成挂载点创建,如下图所示:

image-20190717115829821

  • 获取 NFS 连接参数:

在上图界面中,将 V4 Mount 的指令复制下来后,如下所示:

sudo mount -t nfs -o vers=4,minorversion=0,noresvport 189344a39c-lex38.cn-beijing.nas.aliyuncs.com:/ /mnt

其中红色字体的文字为 NFS Server 的地址,蓝色字体的文字为 NFS Path。如下表所示:

字段名称 字段取值 说明
NFS Server 189344a39c-lex38.cn-beijing.nas.aliyuncs.com
NFS Path / NFS Server和NFS Path以冒号分隔

在 Kuboard 创建存储类

  • 进入 Kuboard 集群概览页

    参考 访问 Kuboard

    如下图所示:

image-20190723112105018

  • 点击 创建存储类

    填写表单

字段名称 填写内容 说明
名称 cluster-storage 填写你喜欢的名称
限定名称空间 不填写 如果限定名称空间,
则在 Kuboard 中,您只能在指定的名称空间中使用该存储类
在 kubectl 中,不受影响
存储类型 NFS 目前 Kuboard 只支持 NFS,将要增加其他类型的存储,如 CephFS、Cinder 等
回收策略 回收后删除 当该存储类创建的 存储卷(Persistent Volume)被删除后,之前该存储卷中的文件可以被:回收后删除 / 回收后保留
存储卷绑定模式 首次使用时绑定 即刻绑定:当 存储卷被创建时,就在 NFS 中为其分配空间,并绑定;
首次使用时绑定: 在存储卷被第一次使用到时,才绑定

image-20190723112143032

  • 点击 保存

image-20190723112204681

  • 点击 应用

image-20190723113250521

  • 点击 完成

    此时可在存储资源列表中查看到刚创建的存储类

image-20190723113312360

- +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/diagonize/events.html b/docs/guide/diagonize/events.html index cef4f78..df06b71 100644 --- a/docs/guide/diagonize/events.html +++ b/docs/guide/diagonize/events.html @@ -7,11 +7,11 @@ - - + + -

集群事件

通过观察 KUberetes 集群事件,可以快速诊断部署时发生的问题。

Kuboard 建立了与 kubernetes apiserver 的长连接,可以在第一时间将集群中的事件更新以通知的形式显示在 dashboad 上。

错误事件提示

如果存在与某一个工作负载相关的错误事件,名称空间界面中,将以红色显示该工作负载,如下图所示:

image-20190721104153954

全局事件

查看全局事件

在任何页面点击界面左上角的 事件 按钮,进入事件列表页:

image-20190721101812895

删除事件

  • 点击全局事件列表中的 类型 标签,

image-20190721101954560

  • 点击 确定

该事件已删除。如果事件对应的错误原因没有被解决,该事件又会在下一次 kubernetes 调度系统资源的时候重新出现。

微服务上下文相关的事件

打开工作负载页面,如下图所示:

容器组信息中包含了与该容器组相关的所有集群事件。

image-20190721103324863

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/diagonize/logs.html b/docs/guide/diagonize/logs.html index 80501db..3dd1fbd 100644 --- a/docs/guide/diagonize/logs.html +++ b/docs/guide/diagonize/logs.html @@ -7,11 +7,11 @@ - - + + -

日志及终端

日志

通过 Kuboard 可以实时跟踪容器的日志信息。

假设您已经进入 工作负载 详情页,如下图所示:

image-20190721104348908

  • 点击容器信息中的 日志 按钮

    可进入日志追踪界面,如下图所示:

image-20190721104415732

终端

  • 点击容器信息中的 终端 按钮

    可进入终端界面,如下图所示:

    • 在终端中,可以执行的 shell 命令取决于该容器预装的命令。许多容器为了精简自身的大小,只保留了最基本的命令。

    • 通常会进入终端执行如下诊断操作:

      • export 命令查看容器内的环境变量是否被正确设置
      • ping, curl 命令检查容器内与集群内其他服务,集群外服务的网络连通性
      • vi 命令,临时修改容器内应用程序的配置,并在容器内重启应用程序,以临时性的尝试修复问题,如果有效再将修改更新到应用程序代码或者 Dockerfile

image-20190721104522870

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/diagonize/port-forward.html b/docs/guide/diagonize/port-forward.html index 5a4e306..675fe30 100644 --- a/docs/guide/diagonize/port-forward.html +++ b/docs/guide/diagonize/port-forward.html @@ -7,11 +7,11 @@ - - + + -

端口转发

微服务环境中,各个服务都通过 TCP / UDP 端口的形式提供访问。按调用者所在位置、通信协议的形式来划分,大致有如下几种情况:

调用者所在位置 通信协议 临时性 常见场景 推荐配置方式
VPC外 http / https 日常性 用户从互联网(亦可能是公司内网)
访问 web 页面,或者 restful 接口
Kubernetes Ingress
(可在Kuboard中直接配置 互联网入口
VPC外 tcp / udp 临时性 例如,开发者临时需要访问数据库端口、Redis端口等; 在客户端所在机器配置 kubectl,
通过 kubectl port-forwad 进行端口转发
VPC外 tcp / udp 日常性 暂不讨论
VPC内/集群外 http / https 日常性 通过接口网关为周边系统提供服务 Kubernetes Service NodePort
(可在Kuboard中直接配置 访问方式/VPC内访问
VPC内/集群外 tcp / udp 同上 同上
集群内 http / https 日常性 场景1:Web层访问微服务网关
场景2:微服务网关调用微服务,微服务之间的互相调用等。
场景1:Kubernetes Service ClusterIP
(可在Kuboard中直接配置 访问方式/集群内访问
场景2:Spring Cloud中使用Eureka/Consul等服务发现
(Kuboard中 访问方式/不配置
集群内 tcp / udp 日常性 微服务访问数据库、微服务访问Redis等 Kubernetes Service ClusterIP
(可在Kuboard中直接配置 访问方式/集群内访问

Feature planned

在作者使用 Kuboard 的运维实践中,有如下两个场景不能脱离 kubeadm / kubectl 命令行:

  • 初始化集群 / 向集群添加节点
  • 开发者临时需要访问数据库端口、Redis端口时,通过 kubectl port-forward 进行端口转发

Kuboard 计划实现类似 kubectl port-forward 的功能,提高问题诊断过程中的便利性。

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/example/busybox.html b/docs/guide/example/busybox.html index af60eab..f944aba 100644 --- a/docs/guide/example/busybox.html +++ b/docs/guide/example/busybox.html @@ -7,11 +7,11 @@ - - + + -

部署 busybox

前提

必须具备如下条件:

  • Kubernetes 集群
  • 已在集群中安装 Kuboard

假设您已经进入了 Kuboard 名称空间界面,如下图所示。可参考 创建名称空间

image-20190723115721514

部署 busybox

查看 busybox 介绍

Busybox 是一个非常小巧(不到5M)的容器,此处用它来展示如何将一个 docker image 通过 Kuboard 部署到 kubernetes 集群中。

  • 点击 创建工作负载按钮

    填写表单如下:

字段名称 填写内容 说明
服务类型 Deployment Kubernetes 的 Deployment 类型
服务分层 中间件 生成的Kuberenetes对象以 cloud- 作为前缀,
并显示在中间件分层中
服务名称 busybox 显示在 Kuboard 中的名称
副本数量 1 replicas
容器名称 busybox
镜像 busybox:1.29 hub.docker.com 中的 busybox 镜像
Command sleep
Command 3600

image-20190723115852719

  • 完成表单填写后,点击 保存

    Kuboard 将对表单参数进行校验,通过后,方可执行对集群的变更操作。

image-20190723115912645

  • 点击 应用

    Kuboard 执行对集群的变更操作,变更的过程中,产生的事件以通知消息的形式显示出来。

image-20190723115940862

验证工作负载

  • 点击 完成

    点击完成后,可查看工作负载的信息。该界面分成四个区域:

    • 页头区

      页头区包含对该工作负载(本案例中为 Deployment)的操作按钮。可执行的操作有:编辑 / 伸缩 / 刷新 / 删除

    • 工作负载基本信息

      基本信息区显示了工作负载的 基本信息运行时信息访问方式(Service)、互联网入口(Ingress)

    • 容器组列表

      容器组列表区显示了该当前对应的所有容器组(Pod),容器组列表区监听集群的动态变化,当您执行伸缩操作、或者删除容器组操作时,无需刷新,就可以查看到最新的容器组信息。

    • 容器组详情

      容器组详情区显示了当前选中容器组的信息,其中包括:

      • 容器组相关事件
      • 容器组基本信息,及删除容器组的操作按钮。(此区域还包括容器组相关的监控操作,监控模块在后续的章节中介绍)
      • 容器基本信息,及查看容器日志、打开容器终端的按钮。(此区域还包括容器相关的监控操作,监控模块在后续的章节中介绍)

image-20190723120011972

  • 点击 终端

    此时打开了该容器的控制台,Kuboard 默认使用 /bin/bash 终端程序,而 busybox 镜像中并不包含 /bin/bash,因此您会看到一个如下图所示的错误提示:

image-20190723120050894

  • 点击 切换到 /bin/sh

    点击屏幕左上角的 切换到 /bin/sh

image-20190723120104474

  • 输入 export 并回车

    输入 export 并回车后,可查看该容器当前的环境变量。您也可以在终端中执行任何容器内部的命令。在您完成容器的部署之后,终端界面是非常有效的问题诊断工具之一。

image-20190723120125425

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/example/import.html b/docs/guide/example/import.html index a328e4b..ebd2cde 100644 --- a/docs/guide/example/import.html +++ b/docs/guide/example/import.html @@ -7,11 +7,11 @@ - - + + -

导入 example 微服务

前提

必须具备如下条件:

  • Kubernetes 集群 (安装在阿里云,本文将使用阿里云的 NFS 服务作为存储资源,Kuboard 也可以运行在其他云环境或者私有环境中。)
  • 已在集群中安装 Kuboard

创建存储资源

example中用到了存储卷声明,请在 Kuboard 中 创建存储类 ,否则不能完成 example 的导入操作。

创建名称空间

创建新的名称空间,用来导入 exmaple。可参考 创建名称空间

假设您已经进入了 Kuboard 名称空间界面,如下图所示:

image-20190723115721514

导入 example

在 Kuboard 中,您无需手写 yaml 文件,此 yaml 文件的内容生成步骤如下:

  • 通过 创建工作负载 完成微服务应用的部署
  • 通过 导出工作负载 将名称空间中的微服务配置导出到一个 yaml 文件中
  • 点击 导入工作负载 按钮

image-20190723120730196

  • 点击 上传文件 按钮

    并选择刚才下载的 export_example.yaml 文件

image-20190723120753533

  • 点击 下一步

    默认选择所有的工作负载

image-20190723120832778

  • 点击 下一步

    默认选择所有要导入的配置,example中没有使用到配置信息

image-20190723120912377

  • 点击 下一步

    默认选择所有 Secrets

image-20190723120926747

  • 点击 下一步

    填写表单:

字段名称 填写内容 说明
数据卷类型 db-example-storage NFS:容器组直连NFS
存储卷声明:容器组使用存储卷声明
是否新建存储卷声明 创建新存储卷声明 使用已有存储卷声明:可以使用事先创建好的存储卷声明
创建新存储卷声明:可以创建新存储卷声明
分配模式 动态分配
读写模式 可被多节点读写 只能被单节点读写、可被多节点只读、可被多节点读写
总量 2Gi 2Gi代表 2G空间

image-20190723120956821

  • 点击 下一步

    填写表单:

字段名称 填写内容 说明
cloud-eureka域名 cloud-eureka.example.demo.eip.work 使用您自己的域名,
在测试环境建议使用如下域名格式:
workloadname.namespace-name.cluster-name.domain.com
该域名应该解析到您worker节点的外网地址,或者worker 节点 80/443 端口对应负载均衡服务器的外网地址。
web-example web-example.example.demo.eip

image-20190723121019167

  • 点击 下一步

image-20190723121035917

  • 点击 确定

image-20190723121055648

  • 点击 应用

image-20190723121117514

  • 点击 完成

image-20190723121132991

  • 点击 已完成

    可再名称空间中查看到刚才导入的 example 的所有工作负载及存储卷声明

image-20190723121433809

验证 web-example

  • 点击工作负载 web-example

image-20190723121412027

  • 点击 互联网入口中的域名 http://web-example.example.demo.eip.work

    Example 部署成功

image-20190717193548703

web-example容器的日志中会出现如下异常,错误原因是,example使用了一个监控套件,该监控套件要求将容器注册到monitor-eureka中,当下我们并没有安装该监控套件。此错误并不影响 example 程序的使用。暂时忽略该异常。

[DiscoveryClient-InstanceInfoReplicator-0] WARN com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient - Request execution failed with message: java.net.UnknownHostException: monitor-eureka
+    

导入 example 微服务

前提

必须具备如下条件:

  • Kubernetes 集群 (安装在阿里云,本文将使用阿里云的 NFS 服务作为存储资源,Kuboard 也可以运行在其他云环境或者私有环境中。)
  • 已在集群中安装 Kuboard

创建存储资源

example中用到了存储卷声明,请在 Kuboard 中 创建存储类 ,否则不能完成 example 的导入操作。

创建名称空间

创建新的名称空间,用来导入 exmaple。可参考 创建名称空间

假设您已经进入了 Kuboard 名称空间界面,如下图所示:

image-20190723115721514

导入 example

在 Kuboard 中,您无需手写 yaml 文件,此 yaml 文件的内容生成步骤如下:

  • 通过 创建工作负载 完成微服务应用的部署
  • 通过 导出工作负载 将名称空间中的微服务配置导出到一个 yaml 文件中
  • 点击 导入工作负载 按钮

image-20190723120730196

  • 点击 上传文件 按钮

    并选择刚才下载的 export_example.yaml 文件

image-20190723120753533

  • 点击 下一步

    默认选择所有的工作负载

image-20190723120832778

  • 点击 下一步

    默认选择所有要导入的配置,example中没有使用到配置信息

image-20190723120912377

  • 点击 下一步

    默认选择所有 Secrets

image-20190723120926747

  • 点击 下一步

    填写表单:

字段名称 填写内容 说明
数据卷类型 db-example-storage NFS:容器组直连NFS
存储卷声明:容器组使用存储卷声明
是否新建存储卷声明 创建新存储卷声明 使用已有存储卷声明:可以使用事先创建好的存储卷声明
创建新存储卷声明:可以创建新存储卷声明
分配模式 动态分配
读写模式 可被多节点读写 只能被单节点读写、可被多节点只读、可被多节点读写
总量 2Gi 2Gi代表 2G空间

image-20190723120956821

  • 点击 下一步

    填写表单:

字段名称 填写内容 说明
cloud-eureka域名 cloud-eureka.example.demo.eip.work 使用您自己的域名,
在测试环境建议使用如下域名格式:
workloadname.namespace-name.cluster-name.domain.com
该域名应该解析到您worker节点的外网地址,或者worker 节点 80/443 端口对应负载均衡服务器的外网地址。
web-example web-example.example.demo.eip

image-20190723121019167

  • 点击 下一步

image-20190723121035917

  • 点击 确定

image-20190723121055648

  • 点击 应用

image-20190723121117514

  • 点击 完成

image-20190723121132991

  • 点击 已完成

    可再名称空间中查看到刚才导入的 example 的所有工作负载及存储卷声明

image-20190723121433809

验证 web-example

  • 点击工作负载 web-example

image-20190723121412027

  • 点击 互联网入口中的域名 http://web-example.example.demo.eip.work

    Example 部署成功

image-20190717193548703

web-example容器的日志中会出现如下异常,错误原因是,example使用了一个监控套件,该监控套件要求将容器注册到monitor-eureka中,当下我们并没有安装该监控套件。此错误并不影响 example 程序的使用。暂时忽略该异常。

[DiscoveryClient-InstanceInfoReplicator-0] WARN com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient - Request execution failed with message: java.net.UnknownHostException: monitor-eureka
 [DiscoveryClient-InstanceInfoReplicator-0] WARN com.netflix.discovery.DiscoveryClient - DiscoveryClient_WEB-ADMIN/web-example-7f668c75db-j7ncx - registration failed Cannot execute request on any known server
 com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
         at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112)
@@ -36,7 +36,7 @@ com.netflix.discovery.shared.transport.TransportException: Cannot execute reques
           监控 example
         
         →
-      

Copyright © 2019-present Huanqing Shao
- +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/example/monitor.html b/docs/guide/example/monitor.html index 7e877a3..9f42872 100644 --- a/docs/guide/example/monitor.html +++ b/docs/guide/example/monitor.html @@ -7,11 +7,11 @@ - - + + -

监控 example alpha

前提

必须具备如下条件:

监控套件相关的功能目前处于 alpha 状态,虽然在实际投产项目中取得了非常好的效果,但是产品化封装还需要进一步改进。

假设您已进入 example 名称空间,如下图所示:

image-20190723121433809

安装监控套件

安装全局监控套件

  • 在 master 节点执行
kubectl -n kube-system create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/server.key
+    

监控 example alpha

前提

必须具备如下条件:

监控套件相关的功能目前处于 alpha 状态,虽然在实际投产项目中取得了非常好的效果,但是产品化封装还需要进一步改进。

假设您已进入 example 名称空间,如下图所示:

image-20190723121433809

安装监控套件

安装全局监控套件

  • 在 master 节点执行
kubectl -n kube-system create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/server.crt --from-file=/etc/kubernetes/pki/etcd/server.key
 
  • 将鼠标移到 设置 菜单

image-20190723150525017

  • 点击 监控套件 - example

image-20190723150616633

  • 点击 全局监控套件 / 查找并安装

image-20190723150853277

  • 点击 资源层监控套件 / 安装

image-20190723151045112

  • 点击 全局监控套件 / 资源层监控套件 / 安装

image-20190723151103353

  • 根据向导提示,完成工作负载的导入

image-20190723151339137

  • 点击 资源层监控套件 / 初始化

    由于下载镜像需要时间,您可能需要等待5-10分钟后,才能成功执行初始化。初始化成功的话,您将看到如下提示信息。

image-20190723151357262

安装名称空间监控套件

  • 点击 名称空间监控套件 example / 查找并安装

image-20190723151422460

  • 重复前述过程,安装监控套件

    重复前述过程,完成如下监控套件的安装和初始化:

    • Pinpoint 监控套件
    • Prometheus 监控套件
    • 熔断及限流 Sentinel

    安装完成后,界面如下图所示:

image-20190723151711230

查看监控套件的工作负载

  • 点击 后退

    回到名称空间后,可查看到刚才安装监控套件时导入的监控层工作负载。

    全局监控套件安装在 kube-system 名称空间

image-20190723151804727

重启 example 容器组

  • 点击导航栏中的 容器组列表

    在筛选条件中选择

    • 展现层
    • 网关层
    • 服务层
    • 持久层
    • 中间件

    并点击刷新

    • Kuboard 创建工作负载时,默认将其 imagePullPolicy 设置为 Always

    • 删除容器组时,Kubernetes 将为该工作负载启动一个新的容器组,以尽可能地使工作负载的容器组数量等于该工作负载期望的副本数(replicas);

    • Kubernetes 在启动容器组时,根据 imagePullPolicy 的设置 Always,将会尝试从镜像仓库抓取最新镜像,这一特性,可以用于开发环境和测试环境的版本更新,因为您的 devops 系统肯能不会为 daily build 生成新的镜像标签;

    • 此处删除容器组的目的是,重新启动容器,以便容器中的监控探针能够检测到其对应监控套件的存在。

image-20190723151845303

  • 在列表中选择

    选中如下容器组:

    • cloud-eureka-0

    • db-example-xxxxxx-xxxx

    • gateway-example-xxxxxx-xxxx

    • svc-example-xxxxxx-xxxx

    • web-example-xxxxxx-xxxx

image-20190723151902003

  • 点击 删除 按钮

image-20190723151914994

  • 点击 确定

image-20190723151932871

  • 点击 应用

image-20190723151951910

  • 等待,直到容器组调整完成

image-20190723152020605

  • 点击 后退

image-20190723152040219

查看监控信息

查看资源层监控信息

  • 点击 展现层 / web-example

    如果您在下图中没有看到 Nginx 监控容器组监控 等,请刷新您的页面,因为监控套件初始化之后需要刷新页面才能加载并显示。

image-20190723152124196

  • 点击 所在节点监控

    可查看所在节点的资源使用情况监控信息

image-20190718104156232

查看中间件层监控信息

查看 Nginx 监控

  • 点击 Nginx 监控

image-20190718104729472

查看 MySQL 监控

  • 返回 example 名称空间
  • 点击 持久层 / example db
  • 点击 MySQL 监控

image-20190718105420599

查看 JVM 监控

  • 返回 example 名称空间
  • 点击 微服务层 / example
  • 点击 Java 虚拟机监控

image-20190718105641651

查看链路追踪监控信息

  • 微服务层 / example 中点击 链路追踪

image-20190718120957255

image-20190718121133160

Copyright © 2019-present Huanqing Shao
- +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/index.html b/docs/guide/index.html index a6a64fd..bb6a604 100644 --- a/docs/guide/index.html +++ b/docs/guide/index.html @@ -7,15 +7,15 @@ - - + + -

使用手册

Kuboard 的设计目标

  • 降低 Kubernetes 学习门槛,让初学者先把 Kubernetes 用起来,再逐步理解 Kubernetes 中的各种概念
  • 提高 Kubernetes 运维的便捷性,让资深 Kubernetes 运维人员脱离 kubectl 命令行,直接在 Kuboard 界面中完成日常运维工作

熟悉 Kuboard 的最佳途径

Kuboard 可用于

  • 管理 Kubernetes 集群
  • 管理部署于 Kubernetes 的微服务
  • 诊断集群中的问题
  • 监控部署于 Kubernetes 的微服务
Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/monitor/apis.html b/docs/guide/monitor/apis.html index c227d96..ef93270 100644 --- a/docs/guide/monitor/apis.html +++ b/docs/guide/monitor/apis.html @@ -7,15 +7,15 @@ - - + + -

自定义监控套件 alpha

文档建设中...

  • 请参考 监控 example alpha 体验 Kuboard 在监控套件方面的设想
  • 监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作
Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/monitor/index.html b/docs/guide/monitor/index.html index 89f3d4b..0046012 100644 --- a/docs/guide/monitor/index.html +++ b/docs/guide/monitor/index.html @@ -7,11 +7,11 @@ - - + + -

监控套件 alpha

文档建设中...

  • 请参考 监控 example alpha 体验 Kuboard 在监控套件方面的设想
  • 监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作
Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/namespace/adjustion.html b/docs/guide/namespace/adjustion.html index f21feb3..790fb83 100644 --- a/docs/guide/namespace/adjustion.html +++ b/docs/guide/namespace/adjustion.html @@ -7,11 +7,11 @@ - - + + -

日常调整

前提

必须具备如下条件:

  • Kubernetes 集群

  • 已在集群中安装 Kuboard

假设您一进入 example 名称空间页面,如下图所示:

image-20190720232405147

批量删除容器组

批量删除容器组特别适用于 开发测试环境的版本更新 场景,描述如下:

  • 开发/测试环境中,开发人员提交代码
  • DevOps环境自动构建出 docker 镜像,并将 docker 镜像推送到仓库; +

    日常调整

    前提

    必须具备如下条件:

    • Kubernetes 集群

    • 已在集群中安装 Kuboard

    假设您一进入 example 名称空间页面,如下图所示:

    image-20190720232405147

    批量删除容器组

    批量删除容器组特别适用于 开发测试环境的版本更新 场景,描述如下:

    • 开发/测试环境中,开发人员提交代码
    • DevOps环境自动构建出 docker 镜像,并将 docker 镜像推送到仓库;
      • 如果您的 devops 环境只在生成新的 branch 或者 tag 时,生成镜像的新 version,那么原镜像标签的实际镜像已发生改变。
    • 从 Kubernetes 中删除该镜像的 容器组
    • Kubernetes 创建新的 容器组,并且该容器组重新从镜像仓库拉取最新的镜像

    在 Kuboard 中,批量删除容器组 的操作步骤为:

    • 在名称空间页面点击 容器组列表

      • 选择要筛选的应用分层,并点击刷新,

      • 选择要删除的容器组

      如下图所示:

    image-20190720233322837

    • 点击 删除 按钮

    image-20190720233348284

    • 点击 确定

    image-20190720233412812

    • 点击 应用

    image-20190720233436465

    • 点击 完成

      并等待,直到 kubernetes 完成对容器组的调整操作

      Kuboard 会自动监听 kubernetes 执行此调整操作时的变化,您无需刷新页面,只要等待结果即可。

    image-20190720233512996

    批量调整镜像版本

    批量调整镜像版本适用于如下场景:

    • 需要更新容器所使用的镜像的版本号

      通常是经过测试的版本,且 DevOps 环境在构建镜像时,为其生成了新的版本号

    批量调整镜像版本的操作如下:

    • 在名称空间页面点击 调整镜像版本

    image-20190721000526434

    • 在要调整的镜像上点击 修改

      并填写新的镜像版本号,如下图所示:

    image-20190721000759925

    • 点击 执行变更

    image-20190721000822458

    • 点击 应用

    image-20190721000847954

    • 点击 完成

      此时会进入容器组列表界面,请等待 Kubernetes 完成对容器组的调整(无需刷新页面)

    image-20190721000919933

    批量调整工作负载的副本数

    调整容器镜像版本 的功能界面中,也可以用来调整工作负载的副本数,如下图所示:

    image-20190721100715898

    Copyright © 2019-present Huanqing Shao
    - +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/namespace/configMap.html b/docs/guide/namespace/configMap.html index a441ad8..738cdd1 100644 --- a/docs/guide/namespace/configMap.html +++ b/docs/guide/namespace/configMap.html @@ -7,11 +7,11 @@ - - + + -

配置

配置: Kubernetes ConfigMap

查看配置列表

假设您已进入名称空间界面,如下图所示:

image-20190721110355464

配置列表位于图中左侧中部,点击 放大 按钮,可以将列表显示到更大的区域,如下图所示:

点击 配置 可以刷新该列表

image-20190721112353077

创建配置

  • 点击 配置 / 创建

    填写表单如下所示:

字段名称 填写内容 说明
名称 my-config-map
配置标签 - 名称 my-config-map
配置标签 - 内容 configmap
配置数据 - 名称 EUREKA_URL
配置数据 - 内容 http://cloud-eureka:9200/eureka

image-20190721112624128

  • 点击 保存

    配置信息创建成功

image-20190721113050608

查看/编辑/删除 配置

  • 点击列表中的 my-config-map

image-20190721113155991

编辑、删除操作可直接按照提示完成

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/namespace/index.html b/docs/guide/namespace/index.html index ba731c4..74dbac4 100644 --- a/docs/guide/namespace/index.html +++ b/docs/guide/namespace/index.html @@ -7,11 +7,11 @@ - - + + -

应用管理

创建工作负载

删除工作负载

伸缩

升级工作负载版本

环境迁移

导出

导入

Copyright © 2019-present Huanqing Shao
- +

应用管理

创建工作负载

删除工作负载

伸缩

升级工作负载版本

环境迁移

导出

导入

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/namespace/multi-env.html b/docs/guide/namespace/multi-env.html index a388d15..7a041de 100644 --- a/docs/guide/namespace/multi-env.html +++ b/docs/guide/namespace/multi-env.html @@ -7,11 +7,11 @@ - - + + -

多环境

在实际开发项目的过程中,我们必然会碰到如下场景:

  1. 创建一个开发环境,并在其中完成应用部署
  2. 创建一个测试环境,再次完成应用部署
  3. 创建一个准上线环境,再次完成应用部署
  4. 创建一个生产环境,再次完成应用部署

当我们的微服务系统较为复杂时,一个环境中可能需要部署许多(几十个甚至更多)的微服务部署单元,这个时候,重复在多套环境中执行部署任务就会变得容易出错。

Kuboard 针对这种场景,提供了导出配置、导入配置的功能,以便运维人员可以轻易的复制多套部署环境。

导出配置

前提

必须满足如下条件:

部署微服务过程中,您还可能用到 kuboard 的配置编辑功能、Secrets 编辑功能 等。

假设您已完成微服务部署,并已进入 namespace 界面,如下图所示:

image-20190721085144545

操作步骤

  • 点击 导出工作负载
    • 选择要导出的分层
    • 点击 刷新
    • 选择要导出的工作负载

image-20190721090118542

  • 点击 下一步

    选择要导出的配置(configMap)信息

image-20190721090753742

  • 点击 下一步

    选择要导出的 Secrets

image-20190721090840925

  • 点击 下一步

image-20190721090935511

  • 点击 确定

image-20190721091005130

  • 查看已导出文件

    导出文件的命名格式为 kuboard_namespace_date_time.yaml,例如:

    kuboard_example_2019_07_21_09_09_47.yaml

    导出文件的内容如下所示:

    ---
    +    

    多环境

    在实际开发项目的过程中,我们必然会碰到如下场景:

    1. 创建一个开发环境,并在其中完成应用部署
    2. 创建一个测试环境,再次完成应用部署
    3. 创建一个准上线环境,再次完成应用部署
    4. 创建一个生产环境,再次完成应用部署

    当我们的微服务系统较为复杂时,一个环境中可能需要部署许多(几十个甚至更多)的微服务部署单元,这个时候,重复在多套环境中执行部署任务就会变得容易出错。

    Kuboard 针对这种场景,提供了导出配置、导入配置的功能,以便运维人员可以轻易的复制多套部署环境。

    导出配置

    前提

    必须满足如下条件:

    部署微服务过程中,您还可能用到 kuboard 的配置编辑功能、Secrets 编辑功能 等。

    假设您已完成微服务部署,并已进入 namespace 界面,如下图所示:

    image-20190721085144545

    操作步骤

    • 点击 导出工作负载
      • 选择要导出的分层
      • 点击 刷新
      • 选择要导出的工作负载

    image-20190721090118542

    • 点击 下一步

      选择要导出的配置(configMap)信息

    image-20190721090753742

    • 点击 下一步

      选择要导出的 Secrets

    image-20190721090840925

    • 点击 下一步

    image-20190721090935511

    • 点击 确定

    image-20190721091005130

    • 查看已导出文件

      导出文件的命名格式为 kuboard_namespace_date_time.yaml,例如:

      kuboard_example_2019_07_21_09_09_47.yaml

      导出文件的内容如下所示:

      ---
       apiVersion: apps/v1
       kind: StatefulSet
       metadata:
      @@ -41,7 +41,7 @@
                 集群事件
               
               →
      -      

      Copyright © 2019-present Huanqing Shao
    - +

    Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/namespace/pvc.html b/docs/guide/namespace/pvc.html index 794ca5d..6bb1383 100644 --- a/docs/guide/namespace/pvc.html +++ b/docs/guide/namespace/pvc.html @@ -7,11 +7,11 @@ - - + + -

存储卷声明

存储卷声明: Kubernetes Persistent Volume Claim

查看存储卷声明列表

假设您已进入名称空间界面,如下图所示:

image-20190721110355464

存储卷声明列表位于图中左下角,点击 放大 按钮,可以将列表显示到更大的区域,如下图所示:

点击 存储卷声明 可以刷新该列表

image-20190721113708689

创建存储卷声明

  • 点击 存储卷声明 / 创建

    填写表单如下:

字段名称 填写内容 说明
存储卷声明 my-pvc
存储类 cluster-storage 如果不存在,则需要提前 创建存储类
分配模式 动态分配
读写模式 可被多节点读写
总量 2Gi

image-20190721113810235

  • 点击 保存

    存储卷声明创建成功

image-20190721114112644

查看/编辑/删除 存储卷声明

  • 点击 my-pvc

image-20190721114211751

编辑、删除操作可直接按照提示完成

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/namespace/secrets.html b/docs/guide/namespace/secrets.html index ca68bc4..34034ac 100644 --- a/docs/guide/namespace/secrets.html +++ b/docs/guide/namespace/secrets.html @@ -7,11 +7,11 @@ - - + + -

Secrets

查看 Secrets 列表

假设您已进入名称空间界面,如下图所示:

image-20190721110355464

Secrets 列表位于图中左上角,点击 放大 按钮,可以将列表显示到更大的区域,如下图所示:

点击 Secrets 可以刷新该列表

image-20190721110543437

创建 Secrets

  • 点击 Secrets / 创建

    填写表单如下:

字段名称 填写内容 说明
名称 my-docker-repository Secrets的名称
类型 docker仓库密码
docker server https://my-docker-repository.com 请填写 docker 仓库的全路径
docker username my-docker-user
docker password mypassword

image-20190721111011798

当前 Kuboard 支持如下类型 Secrets 的创建:

  • docker仓库密码
  • 当您的镜像存储在私有仓库时,您在创建工作负载时可能需要配置 imagePullSecrets 用来访问镜像仓库
  • Opaque
  • 密码
  • TLS
  • 当您为 Ingress 启用 HTTPS 时,您需要将域名的的 TLS 证书存入 Secrets
  • 点击保存

    Secrets 创建成功,如下图所示:

image-20190721111540512

查看/编辑/删除 Secrets

  • 点击 my-docker-repository

image-20190721111642221

编辑、删除操作可直接按照提示完成

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/guide/namespace/workload.html b/docs/guide/namespace/workload.html index 7199995..a4382d8 100644 --- a/docs/guide/namespace/workload.html +++ b/docs/guide/namespace/workload.html @@ -7,11 +7,11 @@ - - + + -

工作负载

创建/查看/编辑工作负载

请参考 创建 busybox

伸缩

伸缩操作,通过调整工作负载的 replicas 大小,来控制该工作负载运行容器组的数量。

  • 假设您已进入工作负载查看界面,如下图所示:

image-20190722223454676

  • 点击 伸缩 按钮

    填写表单

    副本数: 目标容器组数量

image-20190722223551308

  • 点击 确定 按钮

    等待,知道伸缩操作执行完毕。

image-20190722223605920

删除容器组

  • 点击 删除容器组 按钮

    可删除该容器组。

    • 容器组被删除之后,Kubernetes Workload Controller 将要重新创建一个容器组,用于替代被删除的容器组;被删除容器组原有的状态将丢失,新容器组重新从 镜像中加载启动;

    • Kuboard 的工作负载编辑器,默认将容器组的 imagePullPolicy 设置为 Alwarys,因此,每次在容器组启动的时候,Kubenetes 都会尝试从镜像仓库中抓取最新镜像;

image-20190722231246540

诊断问题

在诊断工作负载的问题时,Kuboard主要提供三种手段:

事件: Kubernetes 部署相关问题

如下图所示,图中提示

错误内容:Error: ErrImagePull 该容器组抓取镜像失败

失败原因:pull access denied for busy-box, repository does not exist or may require 'docker login'

对于这样的错误,需要技术人员检查:

  • 容器所在节点与镜像仓库之间的网络连通性
  • 容器镜像拼写是否正确
  • 如果为私有仓库,是否在工作负载编辑器中正确配置了 docker 仓库用户名密码

!> Kuboard 监听了 Kubernetes 集群的事件变化,您无需刷新页面,即可在工作负载编辑器的容器组界面区域看到该容器相关的最新事件。

通过 Kubernetes 事件所指示出来的问题,通常是集群本身配置的问题,或者是创建工作负载时的参数填写问题,解决这样的问题需要的是 Kubernetes 集群相关的知识和背景,通常运维人员可以独立解决此类问题

image-20190722224029397

日志: 容器运行时产生的错误

如下图所示,假设您已进入工作负载查看界面:

image-20190722225347491

  • 点击其中的 日志 按钮

可查看该容器的运行时日志,如下图所示:

image-20190722225454029

容器运行时问题定位及解决

日志所指示出来的错误,可能有两类原因:

  • 将其容器部署到 Kubernetes 时,参数配置填写错误
  • 容器内应用程序自身的 BUG

无论是上述何种原因,运维人员如果请开发人员介入,一起排查这里问题,效果会好很多。

终端: 通过交互式命令,在容器内诊断问题

  • 点击 终端 按钮

    可进入该容器的交互式命令界面

image-20190722230511430

适用场景

在交互式终端里,运维人员可以:

  • 通过 ping / curl 等命令,测试网络连通性,测试 Kubernetes 的服务 DNS 解析是否正确
  • 通过 export 命令检查该容器的环境变量的设置是否正确

开发人员 可以:

  • 通过 ls / cat / vi 等命令,查看该容器是否包含了最新的代码变更
  • 通过 vi 等命令,临时对容器中的配置文件进行修改,并在验证这种修改有效之后,才将其正式更新到代码库
Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/index.html b/docs/index.html index 7df60e9..a935454 100644 --- a/docs/index.html +++ b/docs/index.html @@ -7,8 +7,8 @@ - - + +

Kuboard

@@ -16,8 +16,8 @@

在线体验 开始使用 →

降低 Kubernetes 门槛

创建工作负载,导出/导入配置,批量调整镜像版本,问题诊断

直观显示微服务架构

展现层/网关层/服务层/持久层/中间件层/监控层

上下文关联监控

资源层监控/中间件层监控/链路层监控

- + diff --git a/docs/install/index.html b/docs/install/index.html index 0ed89fd..17b9213 100644 --- a/docs/install/index.html +++ b/docs/install/index.html @@ -7,11 +7,11 @@ - - + + -

概述

已经有 Kubernetes 集群,请直接 安装 Kuboard

还没有 Kubernetes 集群:


在线提问

Kuboard 兴趣群二维码

Copyright © 2019-present Huanqing Shao
- +

概述

已经有 Kubernetes 集群,请直接 安装 Kuboard

还没有 Kubernetes 集群:


在线提问

Kuboard 兴趣群二维码

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-common-ingress.html b/docs/install/install-common-ingress.html index 2217cbb..4d2b36f 100644 --- a/docs/install/install-common-ingress.html +++ b/docs/install/install-common-ingress.html @@ -7,13 +7,13 @@ - - + + -

安装 Ingress Controller

ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/

Ingress Controllers官网介绍:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/

本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge

kubernetes支持多种Ingress Controllers,本文推荐使用

https://github.com/nginxinc/kubernetes-ingress

在 apple-master-a-1 上执行

su - gitlab-runner
+    

安装 Ingress Controller

ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/

Ingress Controllers官网介绍:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/

本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge

kubernetes支持多种Ingress Controllers,本文推荐使用

https://github.com/nginxinc/kubernetes-ingress

在 apple-master-a-1 上执行

su - gitlab-runner
 kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml
-

在IaaS云控制台完成如下配置(公网ELB

创建负载均衡 ELB:

​ 监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持

​ 服务器资源池 1: apple-worker-x-x 的所有节点的 80端口

​ 监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持

​ 服务器资源池 2: apple-worker-x-x 的所有节点的443端口

假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z

配置域名解析

将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z

验证配置

在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面

Copyright © 2019-present Huanqing Shao
- +

在IaaS云控制台完成如下配置(公网ELB

创建负载均衡 ELB:

​ 监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持

​ 服务器资源池 1: apple-worker-x-x 的所有节点的 80端口

​ 监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持

​ 服务器资源池 2: apple-worker-x-x 的所有节点的443端口

假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z

配置域名解析

将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z

验证配置

在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-common-vm.html b/docs/install/install-common-vm.html index db63a95..33ef863 100644 --- a/docs/install/install-common-vm.html +++ b/docs/install/install-common-vm.html @@ -7,11 +7,11 @@ - - + + -

制作标准机镜像

通过使用标准机镜像,可以

  • 避免重复执行对测试机安装必要软件的过程
  • 以一种相对标准化的过程管理测试机的维护

标准机镜像中预装了如下内容:

  • docker
  • gitlab-runner
  • kubernetes images

本文档描述的安装过程已基于 centos 7.6 验证

标准机镜像的制作过程描述如下:

安装docker

卸载旧版本

sudo yum remove docker \
+    

制作标准机镜像

通过使用标准机镜像,可以

  • 避免重复执行对测试机安装必要软件的过程
  • 以一种相对标准化的过程管理测试机的维护

标准机镜像中预装了如下内容:

  • docker
  • gitlab-runner
  • kubernetes images

本文档描述的安装过程已基于 centos 7.6 验证

标准机镜像的制作过程描述如下:

安装docker

卸载旧版本

sudo yum remove docker \
 	docker-client \
 	docker-client-latest \
 	docker-common \
@@ -69,7 +69,7 @@ docker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0
 docker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1
 docker tag eb516548c180 k8s.gcr.io/coredns:1.3.1
 docker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10
-

制作镜像

请参考阿里云基于ECS 制作虚拟机镜像 的文档

Copyright © 2019-present Huanqing Shao
- +

制作镜像

请参考阿里云基于ECS 制作虚拟机镜像 的文档

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-dashboard copy.html b/docs/install/install-dashboard copy.html index d1ecae5..7715713 100644 --- a/docs/install/install-dashboard copy.html +++ b/docs/install/install-dashboard copy.html @@ -7,13 +7,13 @@ - - + + -

安装 Kuboard

前提

安装 Kuboard 时,假设您已经有一个 Kubernetes 集群

如果没有 Kubernetes 集群:

碰到问题? 在线提问

Kuboard 兴趣群二维码

兼容性

Kubernetes 版本 Kuboard 版本 兼容性 说明
v1.15 v1.0.0-beta.13 😄 已验证
v1.14 v1.0.0-beta.13 😄 已验证
v1.13 v1.0.0-beta.13 😄 已验证
v1.12 v1.0.0-beta.13 😐 Kubernetes Api v1.12 尚不支持 dryRun,
忽略Kuboard在执行命令时的参数校验错误,可正常工作
v1.11 v1.0.0-beta.13 😐 同上

安装

获取并修改yaml文件

wget https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml
+    

安装 Kuboard

前提

安装 Kuboard 时,假设您已经有一个 Kubernetes 集群

如果没有 Kubernetes 集群:

碰到问题? 在线提问

Kuboard 兴趣群二维码

兼容性

Kubernetes 版本 Kuboard 版本 兼容性 说明
v1.15 v1.0.0-beta.13 😄 已验证
v1.14 v1.0.0-beta.13 😄 已验证
v1.13 v1.0.0-beta.13 😄 已验证
v1.12 v1.0.0-beta.13 😐 Kubernetes Api v1.12 尚不支持 dryRun,
忽略Kuboard在执行命令时的参数校验错误,可正常工作
v1.11 v1.0.0-beta.13 😐 同上

安装

获取并修改yaml文件

wget https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml
 

修改文件 Kuboard.yaml 中 Ingress 的 host 为 kuboard.yourclustername.yourdomain.com

执行安装

kubectl apply -f kuboard.yaml 
-

获取 Token

您可以获得管理员用户、只读用户的Token

访问 Kuboard

您可以通过NodePort、port-forward、域名三种方式当中的任意一种访问 Kuboard

下一步

Copyright © 2019-present Huanqing Shao
- +

获取 Token

您可以获得管理员用户、只读用户的Token

访问 Kuboard

您可以通过NodePort、port-forward、域名三种方式当中的任意一种访问 Kuboard

下一步

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-dashboard-diagonize-kube-dns.html b/docs/install/install-dashboard-diagonize-kube-dns.html index 65ca9da..a9f16a4 100644 --- a/docs/install/install-dashboard-diagonize-kube-dns.html +++ b/docs/install/install-dashboard-diagonize-kube-dns.html @@ -7,11 +7,11 @@ - - + + -

创建 kube-dns Service

Copyright © 2019-present Huanqing Shao
- +

创建 kube-dns Service

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-dashboard-diagonize.html b/docs/install/install-dashboard-diagonize.html index d847ed2..885739e 100644 --- a/docs/install/install-dashboard-diagonize.html +++ b/docs/install/install-dashboard-diagonize.html @@ -7,11 +7,11 @@ - - + + -

安装 Kuboard 失败时如何诊断

少数情况下,您可能会碰到安装 Kuboard 失败的情况,请按照如下步骤进行诊断

诊断步骤

检查 Kuboard 容器组状态

执行命令

kubectl get pods -n kube-system
+    

安装 Kuboard 失败时如何诊断

少数情况下,您可能会碰到安装 Kuboard 失败的情况,请按照如下步骤进行诊断

诊断步骤

检查 Kuboard 容器组状态

执行命令

kubectl get pods -n kube-system
 

输出结果如下所示:

NAME                                          READY   STATUS    RESTARTS   AGE
 calico-kube-controllers-7c4d64d599-67hkh      1/1     Running   0          13h
 calico-node-9sf77                             1/1     Running   3          8d
@@ -30,7 +30,7 @@ kuboard-7bb8d57995-nkqzw                      1

根据 Kubernetes 安装方式不同、节点数量不同,您得到的输出结果会与样例结果有差异

请对结果做如下检查:

  • kuboard-xxxxxxxxxx-xxxxx 的 STATUS 是否为 Runnning

检查 Kuboard 容器组日志

执行命令,请使用实际 kuboard 容器组的名称替换命令中的 kuboard-xxxxxxxxxx-xxxxx

kubectl logs -f kuboard-xxxxxxxxxx-xxxxx -n kube-system
 

如果您得到如下错误信息: host not found in resolver "kube-dns.kube-system.svc.cluster.local"

2019/07/26 23:09:33 [emerg] 1#1: host not found in resolver "kube-dns.kube-system.svc.cluster.local" in /etc/nginx/conf.d/nginx.80.conf:36
 nginx: [emerg] host not found in resolver "kube-dns.kube-system.svc.cluster.local" in /etc/nginx/conf.d/nginx.80.conf:36
-

创建 kube-dns Service

Copyright © 2019-present Huanqing Shao
- +

创建 kube-dns Service

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-dashboard-upgrade.html b/docs/install/install-dashboard-upgrade.html index d9928a7..7e25a61 100644 --- a/docs/install/install-dashboard-upgrade.html +++ b/docs/install/install-dashboard-upgrade.html @@ -7,15 +7,15 @@ - - + + -

升级 Kuboard

最新版本

版本: v1.0.0-beta.13

发布日期: 2019-07-28

查看更新日志

latest 标签升级

按照 安装 Kuboard 文档完成 Kuboard 安装后,您使用的 Kuboard 镜像是 latest 标签。每次 Kuboard 版本更新后,latest 标签对应的镜像也更新为最新版本。您需要执行下述操作,以完成 latest 镜像更新:

  • 安装 Kuboard 时,指定了 Kuboard 的 imagePullPolicy 为 Always。
  • 在您的生产环境中,请避免使用 latest 标签,以确保版本的稳定性。
  • 进入 Kuboard 首页,完成登录,进入 Kuboard 集群概览

  • 点击 名称空间 / kube-system 进入 kube-system 名称空间

  • 点击 容器组列表 按钮

  • 勾选 监控 筛选项,点击刷新

    选择 kuboard-xxxxxxxxxx-xxxxx 容器组,如下图所示:

image-20190729071443225

  • 点击 删除 按钮

    点击 应用 按钮

    点击 完成 按钮

    等待容器组调整完毕

  • 刷新浏览器页面

  • 验证版本更新结果

    如下图所示

image-20190729071954323

指定版本升级

  • 进入 Kuboard 首页,完成登录,进入 Kuboard 集群概览

  • 点击 名称空间 / kube-system 进入 kube-system 名称空间

  • 点击 调整镜像版本 按钮

  • 勾选 监控 筛选项,点击刷新

    并修改 Deployment / Kuboard 的镜像版本为您要升级到的目标版本,如下图所示

image-20190728220831126

  • 点击 执行变更

    点击 应用

    点击 完成

    等待容器组调整完毕。

  • 刷新浏览器页面

  • 验证版本更新结果

    如下图所示

image-20190729071954323

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-dashboard.html b/docs/install/install-dashboard.html index 4813d50..cb0512d 100644 --- a/docs/install/install-dashboard.html +++ b/docs/install/install-dashboard.html @@ -7,11 +7,11 @@ - - + + -

安装 Kuboard

前提

安装 Kuboard 时,假设您已经有一个 Kubernetes 集群

如果没有 Kubernetes 集群:

碰到问题? 在线提问

Kuboard 兴趣群二维码

兼容性

Kubernetes 版本 Kuboard 版本 兼容性 说明
v1.15 v1.0.0-beta.13 😄 已验证
v1.14 v1.0.0-beta.13 😄 已验证
v1.13 v1.0.0-beta.13 😄 已验证
v1.12 v1.0.0-beta.13 😐 Kubernetes Api v1.12 尚不支持 dryRun,
忽略Kuboard在执行命令时的参数校验错误,可正常工作
v1.11 v1.0.0-beta.13 😐 同上

安装

获取 Token

您可以获得管理员用户、只读用户的Token

访问 Kuboard

您可以通过NodePort、port-forward 两种方式当中的任意一种访问 Kuboard

下一步

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-k8s.html b/docs/install/install-k8s.html index 835673c..ee0f984 100644 --- a/docs/install/install-k8s.html +++ b/docs/install/install-k8s.html @@ -7,11 +7,11 @@ - - + + -

安装 Kubernetes 单Master节点

对于 Kubernetes 初学者,推荐在阿里云采购如下配置:

  • 3台 2核4G 的ECS(突发性能实例 t5 ecs.t5-c1m2.large或同等配置,单台约 0.4元/小时,停机时不收费)
  • Cent OS 7.6

领取阿里云最高2000元红包

Kuboard 的 Live Demo 环境使用的是如下拓扑结构,本文档描述了如何在完成该 demo 环境的搭建。

完成安装后,对应的软件版本为:

  • Kubernetes v1.15.0
  • Docker 18.09.7

image-20190726214032585

制作标准机镜像

通过使用标准机镜像,可以

  • 避免重复执行对测试机安装必要软件的过程
  • 以一种相对标准化的过程管理测试机的维护

标准机镜像中预装了如下内容:

  • docker
  • nfs-utils
  • kubernetes images
  • 您也可以不制作标准机镜像,而是在三台机器上都执行 制作标准机镜像 中的所有操作步骤

标准机镜像的制作过程描述如下:

安装docker

卸载旧版本

# 在 master 节点和 worker 节点都要执行
+    

安装 Kubernetes 单Master节点

对于 Kubernetes 初学者,推荐在阿里云采购如下配置:

  • 3台 2核4G 的ECS(突发性能实例 t5 ecs.t5-c1m2.large或同等配置,单台约 0.4元/小时,停机时不收费)
  • Cent OS 7.6

领取阿里云最高2000元红包

Kuboard 的 Live Demo 环境使用的是如下拓扑结构,本文档描述了如何在完成该 demo 环境的搭建。

完成安装后,对应的软件版本为:

  • Kubernetes v1.15.0
  • Docker 18.09.7

image-20190726214032585

制作标准机镜像

通过使用标准机镜像,可以

  • 避免重复执行对测试机安装必要软件的过程
  • 以一种相对标准化的过程管理测试机的维护

标准机镜像中预装了如下内容:

  • docker
  • nfs-utils
  • kubernetes images
  • 您也可以不制作标准机镜像,而是在三台机器上都执行 制作标准机镜像 中的所有操作步骤

标准机镜像的制作过程描述如下:

安装docker

卸载旧版本

# 在 master 节点和 worker 节点都要执行
 sudo yum remove docker \
 	docker-client \
 	docker-client-latest \
@@ -135,7 +135,7 @@ kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-reposito
           安装 Kubernetes 高可用
         
         →
-      

Copyright © 2019-present Huanqing Shao
- +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-kubectl.html b/docs/install/install-kubectl.html index 740562e..b40e5ad 100644 --- a/docs/install/install-kubectl.html +++ b/docs/install/install-kubectl.html @@ -7,11 +7,11 @@ - - + + -

从客户端电脑远程管理 Kubernetes

日常工作中,您可能需要在自己的笔记本电脑上执行 kubectl 命令管理远程 Linux 服务器上的 Kubernetes 集群。

从客户端电脑使用 kubectl 远程管理 Kubernetes,这个步骤并不是使用 Kuboard 的必要步骤。可以忽略

在客户端电脑安装 kubectl

Kubernetes 官网文档参照 安装 kubectl 安装时,经常会失败,因为国内访问 google 的镜像仓库存在问题。

请参考下述内容,完成 kubectl 的安装

获取 kubectl config 文件

如果您参考 安装 Kubernetes 单Master节点安装 Kubernetes 高可用 完成了 Kubernetes 安装,请在 demo-master-a-1 节点上执行如下命令

cat /etc/kubernetes/admin.conf
+    

从客户端电脑远程管理 Kubernetes

日常工作中,您可能需要在自己的笔记本电脑上执行 kubectl 命令管理远程 Linux 服务器上的 Kubernetes 集群。

从客户端电脑使用 kubectl 远程管理 Kubernetes,这个步骤并不是使用 Kuboard 的必要步骤。可以忽略

在客户端电脑安装 kubectl

Kubernetes 官网文档参照 安装 kubectl 安装时,经常会失败,因为国内访问 google 的镜像仓库存在问题。

请参考下述内容,完成 kubectl 的安装

获取 kubectl config 文件

如果您参考 安装 Kubernetes 单Master节点安装 Kubernetes 高可用 完成了 Kubernetes 安装,请在 demo-master-a-1 节点上执行如下命令

cat /etc/kubernetes/admin.conf
 

输出内容如下所示:





 















apiVersion: v1
 clusters:
 - cluster:
@@ -39,7 +39,7 @@
           安装 Kuboard
         
         →
-      

Copyright © 2019-present Huanqing Shao
- +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/install/install-kubernetes.html b/docs/install/install-kubernetes.html index c17d40f..4a55a98 100644 --- a/docs/install/install-kubernetes.html +++ b/docs/install/install-kubernetes.html @@ -7,11 +7,11 @@ - - + + -

安装 Kubernetes 高可用

推荐初学者按照 安装Kubernetes 单Master节点 文档进行 Kubernetes 集群搭建

介绍

kubernetes 安装有多种选择,本文档描述的集群安装具备如下特点:

  • 使用 kubernetes 1.15.0
  • 三个 master 组成主节点集群,通过内网 loader balancer 实现负载均衡
  • 多个 worker 组成工作节点集群,通过外网 loader balancer 实现负载均衡
  • 使用 calico 作为网络插件
  • 使用 nginx-ingress 作为 kubernetes ingress controller

领取阿里云最高2000元红包

下图为 kubernetes 安装的拓扑图

image-20190713075717350

  • 标准机用于制作 centos 镜像,该镜像预先安装了 docker / kubelet / kubectl / kubeadm, 并预先下载了 kubernetes 所需的 docker image
  • 跳板机用于通过 ssh 端口访问标准机、master 节点、worker 节点的 shell,如果您所使用的环境中,可以直接访问各节点的 shell,也可以无需跳板机
  • NAT y.y.y.y将 apiserver 的6443端口映射到外网,如果您始终只在 master 节点上执行 kubectl 命令,则无需做此映射
  • Load Balancer z.z.z.z 是 kubernetes 的 Ingress 外网映射,通常是必须的

安装步骤

制作标准机镜像

通过使用标准机镜像,可以

  • 避免重复执行对测试机安装必要软件的过程
  • 以一种相对标准化的过程管理测试机的维护

标准机镜像中预装了如下内容:

  • docker
  • gitlab-runner
  • kubernetes images

本文档描述的安装过程已基于 centos 7.6 验证

标准机镜像的制作过程描述如下:

安装docker

卸载旧版本

sudo yum remove docker \
+    

安装 Kubernetes 高可用

推荐初学者按照 安装Kubernetes 单Master节点 文档进行 Kubernetes 集群搭建

介绍

kubernetes 安装有多种选择,本文档描述的集群安装具备如下特点:

  • 使用 kubernetes 1.15.0
  • 三个 master 组成主节点集群,通过内网 loader balancer 实现负载均衡
  • 多个 worker 组成工作节点集群,通过外网 loader balancer 实现负载均衡
  • 使用 calico 作为网络插件
  • 使用 nginx-ingress 作为 kubernetes ingress controller

领取阿里云最高2000元红包

下图为 kubernetes 安装的拓扑图

image-20190713075717350

  • 标准机用于制作 centos 镜像,该镜像预先安装了 docker / kubelet / kubectl / kubeadm, 并预先下载了 kubernetes 所需的 docker image
  • 跳板机用于通过 ssh 端口访问标准机、master 节点、worker 节点的 shell,如果您所使用的环境中,可以直接访问各节点的 shell,也可以无需跳板机
  • NAT y.y.y.y将 apiserver 的6443端口映射到外网,如果您始终只在 master 节点上执行 kubectl 命令,则无需做此映射
  • Load Balancer z.z.z.z 是 kubernetes 的 Ingress 外网映射,通常是必须的

安装步骤

制作标准机镜像

通过使用标准机镜像,可以

  • 避免重复执行对测试机安装必要软件的过程
  • 以一种相对标准化的过程管理测试机的维护

标准机镜像中预装了如下内容:

  • docker
  • gitlab-runner
  • kubernetes images

本文档描述的安装过程已基于 centos 7.6 验证

标准机镜像的制作过程描述如下:

安装docker

卸载旧版本

sudo yum remove docker \
 	docker-client \
 	docker-client-latest \
 	docker-common \
@@ -118,7 +118,7 @@ kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-reposito
           从客户端电脑远程管理 Kubernetes
         
         →
-      

Copyright © 2019-present Huanqing Shao
- +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/micro-service/spring-cloud/cloud-eureka.html b/docs/micro-service/spring-cloud/cloud-eureka.html index 5a2dbd1..1b7134e 100644 --- a/docs/micro-service/spring-cloud/cloud-eureka.html +++ b/docs/micro-service/spring-cloud/cloud-eureka.html @@ -7,15 +7,15 @@ - - + + -

部署 cloud-eureka

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/micro-service/spring-cloud/index.html b/docs/micro-service/spring-cloud/index.html index 9977562..f480029 100644 --- a/docs/micro-service/spring-cloud/index.html +++ b/docs/micro-service/spring-cloud/index.html @@ -7,15 +7,15 @@ - - + + -

Spring Cloud on Kubernetes

使用 Kuboard 完成 Spring Cloud 微服务应用的部署。

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/overview/change-log-on-the-way.html b/docs/overview/change-log-on-the-way.html index 9e7b6f4..a412a3f 100644 --- a/docs/overview/change-log-on-the-way.html +++ b/docs/overview/change-log-on-the-way.html @@ -7,11 +7,11 @@ - - + + -

v1.0.0-beta.13

发布日期

2019-

优化

  • 创建 namespace/configmap/secrets/pvc/deployment/Service/Ingress 等 K8S 对象时,对表单中的名字等字段做 trim() 操作

BUG 修复

Copyright © 2019-present Huanqing Shao
- +

v1.0.0-beta.13

发布日期

2019-

优化

  • 创建 namespace/configmap/secrets/pvc/deployment/Service/Ingress 等 K8S 对象时,对表单中的名字等字段做 trim() 操作

BUG 修复

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/overview/change-log.html b/docs/overview/change-log.html index 5b185cc..c3e4eed 100644 --- a/docs/overview/change-log.html +++ b/docs/overview/change-log.html @@ -7,15 +7,15 @@ - - + + -

更新日志

v1.0.0-beta.13

发布日期

2019-07-28

优化

  • 调整主题色
  • 查看 Kuboard 版本信息
  • 一次删除 Deployment 下所有的错误事件 (# 1)

BUG 修复

  • Kubernetes 二进制安装时, Kuboard 无法启动
  • Kubernetes 中缺少 kube-dns Service 时, Kuboard 无法启动
Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/overview/concepts.html b/docs/overview/concepts.html index 1712872..19a3254 100644 --- a/docs/overview/concepts.html +++ b/docs/overview/concepts.html @@ -7,11 +7,11 @@ - - + + -

如何降低 Kubernetes 学习门槛

Kubernetes 学习门槛在哪儿

学习 Kubernetes 之前,必须具备的知识储备:

  • Linux 基础
  • 网络基础
  • 容器技术,例如 https://www.docker.com/

学习 Kubernetes 的过程中可能碰到的难关:

  • 理解 Kubenetes 为了实现容器编排而提出的各种抽象概念以及他们之间的关系:容器组(Pod)、存储卷(Volume)、存储卷声明(PVC)、Ingress、Service 等
  • 安装及配置 Kubernetes 环境
  • 编写和维护 Kubernetes Yaml 文件
  • 熟悉 kubectl 命令行工具中常用的 10 多个命令

降低 Kubernetes 学习门槛

学习路线

单纯地按章节学习 Linux 基础知识、网络知识、容器技术等,每一块儿的基础入门书籍就有几百页之多。作者认为,最好的学习方法是在实践中学习,碰到问题时去寻求答案,解决问题后去反思总结。这种学习方法趣味性强,得来的知识也最为牢靠,如果选对了方向,所学知识通常也是工作中实用性最高的知识。读了100页 K8S 文档,也不如安装一遍 K8S

Kuboard 为初学者学习 Kubernetes 时设计了如下学习路径:

进阶路线:

  • 在 Kubernetes 中部署 Spring Cloud 微服务应用

快速入门

​ 在向 Kubernetes 集群部署应用时,开发者或者运维团队必须花大量的时间去理解 Kubernetes 中各种对象的概念,并编写 Yaml 文件去描述 Kubernetes 对象以及他们之间的关系,然而,不同的人因为经验、视角的不同,对Kubernetes 中各对象之间关系的理解并不完全一致,也因此产生了一系列问题:

  • 由于理解的不到位,刚入门Kubernetes的技术人员在使用 Kubernetes 部署应用时经常性地受挫;
  • 由于理解方式的不一致,不同技术人员编写的 yaml 文件结构各不一样,降低了部署在后期的可维护性;
  • 由于部署数量的增加,导致 YAML 文件的数量和代码行数不断增长;

​ Kubernetes 官方提供的 Kubernetes Dashboard 充分意识到了 Kubernete 对象类型在种类上的多样性以及关系上的复杂性,到目前为止并没有在全功能 Dashboard 上做出过多努力,尤其是没有付出过多努力去打造工作负载的 UI 编辑器。在 Kubernetes Dashboard 中,如果想要对 Service、Deployment、StatefulSet、ConfigMap 等各种 Kubernetes 对象执行新增或者变更操作时,您必须编写 YAML 文件。从这个意义上来讲,截止到作者写这篇文章的时间点,Kubernetes 的官方 Dashboard 仍然是一个 “只读” 型 Dashboard,几乎所有的运维操作仍然需要技术人员去编写和维护冗长的 YAML 文件,并通过 kubectl 命令来完成。

​ 由于 Kubernetes YAML 文件复杂性,以及开发/运维团队在多环境复制(开发环境、测试环境、准上线环境、生产环境等)方面的普遍需求,Kubernetes 社区提出了各种各样的解决方案,例如 kustomize / helm chart 等,这些解决方案在解决一个问题的同时,又在另一方面增加了复杂度,为 Kubernetes 爱好者增加了新的学习门槛。

入门利器

为了降低 Kubernetes 的学习难度和使用难度,Kuboard 对 Kubernetes 中管理的各种对象做了一个梳理,并以此为基础,设计了 Kuboard 工作负载编辑器。

Kuboard 工作负载编辑器以下图的方式理解和管理 Kubernetes 对象。

image-20190722165648180

上图中各概念与 Kuboard 工作负载编辑器界面的映射关系如下:

image-20190722162249531

1. 基本信息

基本信息对应到 Kubernetes 的 Workload Controller,当前 Kuboard 工作负载编辑器已经支持了使用频率最高的几类 Workload Controller :

  • Deployment
  • StatefulSet
  • DaemonSet

Kuboard 将陆续支持其他低频使用的 Controller: Garbage Collection, TTL Controller, Jobs, Cron Job。

Kubernetes Workload Controller 主要用于:

  • 根据容器组模板的定义,创建和管理多个容器组
  • 处理容器组的复制和上线
  • 在集群范围内提供自修复能力

例如:Workload Controller 起初在节点 A 上创建并运行了一个容器组 pod_a,当节点 A 出现故障不能正常工作时,Workload Controller 可以自动地在其他可用的节点上运行一个完全相同的容器组实例 pod_a' 以替代 pod_a。

不同类型的 Workload Controller 在处理容器组时,会有各自不同的行为。

请参考 https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pods-and-controllers

基本信息编辑器的界面如下图所示:

image-20190722172356943

字段名称 字段描述
服务类型 即工作负载类型,
当前支持: Deployment、StatefulSet、DaemonSet
服务分层 决定了 Kuboard 将该工作负载展示在哪一个分层,同时,也确定了该工作负载名称的前缀,可选项有:
* 展现层 web、网关层 gateway、服务层 svc、持久层 db、中间件层 cloud、监控层 monitor;
* 默认层当前不可选择
标签 用于确定 Service 的 labelSelector、Controller 的 labels、容器组的 labels
服务描述 展示在 Kuboard 界面上的一段描述信息
副本数量 对于 Deployment 和 StatefulSet 可以填写,决定了该控制器应该维持的容器组副本的数量

2. 数据卷

​ 容器每次启动时,从镜像中初始化所有文件,后续对文件系统的修改、新增、删除操作的结果都是不能持久化的。当容器崩溃时, kubelet 重启该容器,但是原容器已经做的修改将丢失,因为每次启动容器,都是从镜像中初始化;此外,多个容器运行在同一个容器组中时,通常伴随着在不同容器之间共享文件的需求。

​ Kubernetes的抽象出了数据卷 Volume 的概念,以解决上述的问题。

Kuboard 目前支持如下类型的数据卷:

  • NFS
  • 存储卷声明
  • emptyDir
  • 配置 ConfigMap
  • Secrets

Kubernetes 支持的数据卷类型,请参考:https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes

Kuboard 认为当前支持的数据卷类型已经满足绝大多数应用场景,目前正在添加对更多类型数据卷的支持。

​ 容器组中的不同容器都可以通过挂载点引用该容器组加载的数据卷。Kuboard 工作负载编辑中,使用如下界面定义数据卷:

image-20190722182005060

字段名称 说明
数据卷名称 如图中的 example-dataempty-dir
数据卷类型
数据卷详细信息 不同类型的数据卷需要填写的信息不尽相同,例如
存储卷声明,需要选择事先已经在名称空间中创建好的存储卷声明
NFS,需要填写 NFS Server 的地址,以及 NFS Path

3. 身份信息

身份信息区域主要为容器组定义两类信息:

  • imagePullSecrets,容器组调用镜像仓库接口抓取镜像时所使用的用户名密码。如果您使用了私有镜像仓库,您需要在此指定镜像仓库的用户名密码;如果您使用 docker 公共仓库,则无需填写 imagePullSecrets
  • ServiceAccount,容器组调用 kubernetes apiserver 时,所使用的身份信息

Kuboard 工作负载编辑器中关于身份信息的编辑界面如下所示:

image-20190722183329825

4. 容器

容器是我们真正应用程序镜像被加载和运行的地方,按照 Kubernetes 的设计,一个容器组 Pod 中可以包含多个容器 Container,这些容器被分为两类:

  • 初始化容器 +

    如何降低 Kubernetes 学习门槛

    Kubernetes 学习门槛在哪儿

    学习 Kubernetes 之前,必须具备的知识储备:

    • Linux 基础
    • 网络基础
    • 容器技术,例如 https://www.docker.com/

    学习 Kubernetes 的过程中可能碰到的难关:

    • 理解 Kubenetes 为了实现容器编排而提出的各种抽象概念以及他们之间的关系:容器组(Pod)、存储卷(Volume)、存储卷声明(PVC)、Ingress、Service 等
    • 安装及配置 Kubernetes 环境
    • 编写和维护 Kubernetes Yaml 文件
    • 熟悉 kubectl 命令行工具中常用的 10 多个命令

    降低 Kubernetes 学习门槛

    学习路线

    单纯地按章节学习 Linux 基础知识、网络知识、容器技术等,每一块儿的基础入门书籍就有几百页之多。作者认为,最好的学习方法是在实践中学习,碰到问题时去寻求答案,解决问题后去反思总结。这种学习方法趣味性强,得来的知识也最为牢靠,如果选对了方向,所学知识通常也是工作中实用性最高的知识。读了100页 K8S 文档,也不如安装一遍 K8S

    Kuboard 为初学者学习 Kubernetes 时设计了如下学习路径:

    进阶路线:

    • 在 Kubernetes 中部署 Spring Cloud 微服务应用

    快速入门

    ​ 在向 Kubernetes 集群部署应用时,开发者或者运维团队必须花大量的时间去理解 Kubernetes 中各种对象的概念,并编写 Yaml 文件去描述 Kubernetes 对象以及他们之间的关系,然而,不同的人因为经验、视角的不同,对Kubernetes 中各对象之间关系的理解并不完全一致,也因此产生了一系列问题:

    • 由于理解的不到位,刚入门Kubernetes的技术人员在使用 Kubernetes 部署应用时经常性地受挫;
    • 由于理解方式的不一致,不同技术人员编写的 yaml 文件结构各不一样,降低了部署在后期的可维护性;
    • 由于部署数量的增加,导致 YAML 文件的数量和代码行数不断增长;

    ​ Kubernetes 官方提供的 Kubernetes Dashboard 充分意识到了 Kubernete 对象类型在种类上的多样性以及关系上的复杂性,到目前为止并没有在全功能 Dashboard 上做出过多努力,尤其是没有付出过多努力去打造工作负载的 UI 编辑器。在 Kubernetes Dashboard 中,如果想要对 Service、Deployment、StatefulSet、ConfigMap 等各种 Kubernetes 对象执行新增或者变更操作时,您必须编写 YAML 文件。从这个意义上来讲,截止到作者写这篇文章的时间点,Kubernetes 的官方 Dashboard 仍然是一个 “只读” 型 Dashboard,几乎所有的运维操作仍然需要技术人员去编写和维护冗长的 YAML 文件,并通过 kubectl 命令来完成。

    ​ 由于 Kubernetes YAML 文件复杂性,以及开发/运维团队在多环境复制(开发环境、测试环境、准上线环境、生产环境等)方面的普遍需求,Kubernetes 社区提出了各种各样的解决方案,例如 kustomize / helm chart 等,这些解决方案在解决一个问题的同时,又在另一方面增加了复杂度,为 Kubernetes 爱好者增加了新的学习门槛。

    入门利器

    为了降低 Kubernetes 的学习难度和使用难度,Kuboard 对 Kubernetes 中管理的各种对象做了一个梳理,并以此为基础,设计了 Kuboard 工作负载编辑器。

    Kuboard 工作负载编辑器以下图的方式理解和管理 Kubernetes 对象。

    image-20190722165648180

    上图中各概念与 Kuboard 工作负载编辑器界面的映射关系如下:

    image-20190722162249531

    1. 基本信息

    基本信息对应到 Kubernetes 的 Workload Controller,当前 Kuboard 工作负载编辑器已经支持了使用频率最高的几类 Workload Controller :

    • Deployment
    • StatefulSet
    • DaemonSet

    Kuboard 将陆续支持其他低频使用的 Controller: Garbage Collection, TTL Controller, Jobs, Cron Job。

    Kubernetes Workload Controller 主要用于:

    • 根据容器组模板的定义,创建和管理多个容器组
    • 处理容器组的复制和上线
    • 在集群范围内提供自修复能力

    例如:Workload Controller 起初在节点 A 上创建并运行了一个容器组 pod_a,当节点 A 出现故障不能正常工作时,Workload Controller 可以自动地在其他可用的节点上运行一个完全相同的容器组实例 pod_a' 以替代 pod_a。

    不同类型的 Workload Controller 在处理容器组时,会有各自不同的行为。

    请参考 https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pods-and-controllers

    基本信息编辑器的界面如下图所示:

    image-20190722172356943

    字段名称 字段描述
    服务类型 即工作负载类型,
    当前支持: Deployment、StatefulSet、DaemonSet
    服务分层 决定了 Kuboard 将该工作负载展示在哪一个分层,同时,也确定了该工作负载名称的前缀,可选项有:
    * 展现层 web、网关层 gateway、服务层 svc、持久层 db、中间件层 cloud、监控层 monitor;
    * 默认层当前不可选择
    标签 用于确定 Service 的 labelSelector、Controller 的 labels、容器组的 labels
    服务描述 展示在 Kuboard 界面上的一段描述信息
    副本数量 对于 Deployment 和 StatefulSet 可以填写,决定了该控制器应该维持的容器组副本的数量

    2. 数据卷

    ​ 容器每次启动时,从镜像中初始化所有文件,后续对文件系统的修改、新增、删除操作的结果都是不能持久化的。当容器崩溃时, kubelet 重启该容器,但是原容器已经做的修改将丢失,因为每次启动容器,都是从镜像中初始化;此外,多个容器运行在同一个容器组中时,通常伴随着在不同容器之间共享文件的需求。

    ​ Kubernetes的抽象出了数据卷 Volume 的概念,以解决上述的问题。

    Kuboard 目前支持如下类型的数据卷:

    • NFS
    • 存储卷声明
    • emptyDir
    • 配置 ConfigMap
    • Secrets

    Kubernetes 支持的数据卷类型,请参考:https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes

    Kuboard 认为当前支持的数据卷类型已经满足绝大多数应用场景,目前正在添加对更多类型数据卷的支持。

    ​ 容器组中的不同容器都可以通过挂载点引用该容器组加载的数据卷。Kuboard 工作负载编辑中,使用如下界面定义数据卷:

    image-20190722182005060

    字段名称 说明
    数据卷名称 如图中的 example-dataempty-dir
    数据卷类型
    数据卷详细信息 不同类型的数据卷需要填写的信息不尽相同,例如
    存储卷声明,需要选择事先已经在名称空间中创建好的存储卷声明
    NFS,需要填写 NFS Server 的地址,以及 NFS Path

    3. 身份信息

    身份信息区域主要为容器组定义两类信息:

    • imagePullSecrets,容器组调用镜像仓库接口抓取镜像时所使用的用户名密码。如果您使用了私有镜像仓库,您需要在此指定镜像仓库的用户名密码;如果您使用 docker 公共仓库,则无需填写 imagePullSecrets
    • ServiceAccount,容器组调用 kubernetes apiserver 时,所使用的身份信息

    Kuboard 工作负载编辑器中关于身份信息的编辑界面如下所示:

    image-20190722183329825

    4. 容器

    容器是我们真正应用程序镜像被加载和运行的地方,按照 Kubernetes 的设计,一个容器组 Pod 中可以包含多个容器 Container,这些容器被分为两类:

    • 初始化容器
      • 初始化容器总是执行后结束执行
      • 初始化容器按其定义的顺序执行,前一个初始化容器执行结束后,才开始后一个初始化容器的执行
      • 只有初始化容器执行成功后,容器组才启动工作容器
      • 请参考 https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
    • 工作容器
      • 容器组可以包含一个或多个工作容器
      • https://kubernetes.io/docs/concepts/workloads/pods/pod-overview

    Kuborad中,定义容器的界面如下图所示:

    image-20190722183750444

    image-20190722184516447

    5. 访问方式

    ​ 访问方式,即 Kubernetes Service。

    请参考: https://kubernetes.io/docs/concepts/services-networking/service/

    ​ Kuboard 中,支持 ClusterIP(集群内访问) 以及 NodePort(VPC 内访问) 两种 Service 访问方式,您也可以不为该工作负载定义 Service 访问方式。访问方式的界面如下所示:

    image-20190722184943431

    6. 互联网入口

    ​ 互联网入口,即 Kubernetes Ingress。

    请参考: https://kubernetes.io/docs/concepts/services-networking/ingress/

    ​ Kuboard 并不限定您使用何种类型的 Ingress Controller, 但是 安装 Kubernetes 用于测试 文档中,推荐使用的 Ingress Controller 是 Nginx-Ingress

    ​ 在您使用 Nginx-Ingress 的情况下,要想确保您能按照互联网入口中定义的域名访问您的服务,请确保以下两点:

    • 域名解析指向 Kubernetes 集群中 Worker 节点对应的负载均衡的 IP 地址
      • 如果是测试环境,也可以只指向其中一台 Worker 节点的 IP 地址
    • 通过该域名,可以访问 Worker 节点的 80 端口 @@ -23,7 +23,7 @@ 支持 → -

    Copyright © 2019-present Huanqing Shao
    - +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/overview/index.html b/docs/overview/index.html index e6c42fe..6f1f697 100644 --- a/docs/overview/index.html +++ b/docs/overview/index.html @@ -7,18 +7,18 @@ - - + + -

Kuboard 简介

A cool Kubernetes dashboard.

Kuboard 可以有效降低 Kubernetes 初学者的学习门槛,对于有经验的用户,也是非常顺手的一款运维工具。

Kuboard 的主要特点:

  • 场景化设计
  • 微服务分层显示
  • 微服务上下文监控

image-20190716234146419

在线体验

+

Kuboard 简介

A cool Kubernetes dashboard.

Kuboard 可以有效降低 Kubernetes 初学者的学习门槛,对于有经验的用户,也是非常顺手的一款运维工具。

Kuboard 的主要特点:

  • 场景化设计
  • 微服务分层显示
  • 微服务上下文监控

image-20190716234146419

在线体验

Kuboard 在线体验

为保证环境的稳定性,在线 Demo 中只提供只读权限。(请在PC浏览器中打开)

开始使用

Kubernetes 初学者

单纯地按章节学习 Linux 基础知识、网络知识、容器技术等,每一块儿的基础入门书籍就有几百页之多。

最好的学习方法是在 实践中学习,碰到问题时去寻求答案,解决问题 之后 总结反思。这种学习方法趣味性强,得来的知识也最为牢靠,所学知识通常也是工作中实用性最高的。

读 100 页 K8S 文档,不如把 K8S 安装一遍

Kuboard 为 Kubernetes 初学者设计了如下学习路径:

Kubernetes 有经验者

作为资深的 Kubernetes 用户,您一定有如下痛苦:

  • Yaml 复杂繁多
    • Yaml 文件冗长、繁多
    • 编写和维护 YAML 文件耗费了大量的时间
  • 多环境
    • 准备了开发环境,又要维护测试环境、准上线环境、生产环境
  • kubectl 命令复杂难记
    • 反复执行 kubectl 命令,与集群的交互界面始终处于片段化的信息中,需要连续好几个命令才能诊断问题

Kuboard 为您的这些痛苦提供了极佳的解决方案,请立刻开始:

Kubernetes + Spring Cloud

使用 Kuboard 在 Kubernetes 上部署 Spring Cloud 微服务:(正在编写文档,准备好后,请通知我

Kubernetes + Devops

正在编写文档,准备好后,请通知我

在线提问

Kuboard 兴趣群二维码

Copyright © 2019-present Huanqing Shao
- +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/overview/k8s-core-concepts.html b/docs/overview/k8s-core-concepts.html index b057426..0fb6dde 100644 --- a/docs/overview/k8s-core-concepts.html +++ b/docs/overview/k8s-core-concepts.html @@ -7,11 +7,11 @@ - - + + -

十分钟带你理解Kubernetes核心概念

转载信息:

译文链接 译者:崔婧雯

原文链接 作者:Omer Dawelbeit

本文将会简单介绍Kubernetes的核心概念。因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍。相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概念。我们发现一些概念(比如Service)如果没有图表的辅助就很难全面地理解。在合适的地方我们也会提供Kubernetes文档的链接以便读者深入学习。

什么是Kubernetes?

Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。 +

十分钟带你理解Kubernetes核心概念

转载信息:

译文链接 译者:崔婧雯

原文链接 作者:Omer Dawelbeit

本文将会简单介绍Kubernetes的核心概念。因为这些定义可以在Kubernetes的文档中找到,所以文章也会避免用大段的枯燥的文字介绍。相反,我们会使用一些图表(其中一些是动画)和示例来解释这些概念。我们发现一些概念(比如Service)如果没有图表的辅助就很难全面地理解。在合适的地方我们也会提供Kubernetes文档的链接以便读者深入学习。

什么是Kubernetes?

Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。 使用Kubernetes可以:

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 将容器组织成组,并且提供容器间的负载均衡
  • 很容易地升级应用程序容器的新版本
  • 提供容器弹性,如果容器失效就替换它,等等...

集群

集群是一组节点,这些节点可以是物理服务器或者虚拟机,之上安装了Kubernetes平台。下图展示这样的集群。注意该图为了强调核心概念有所简化。这里可以看到一个典型的Kubernetes架构图。

1.png

上图可以看到如下组件,使用特别的图标表示Service和Label:

  • PodContainer(容器)
  • Label(label)(标签)
  • Replication Controller(复制控制器)
  • Service(enter image description here)(服务)
  • Node(节点)
  • Kubernetes Master(Kubernetes主节点)

Pod

Pod(上图绿色方框)安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体。你可能会有这些问题:

  • 如果Pod是短暂的,那么我怎么才能持久化容器数据使其能够跨重启而存在呢? 是的,Kubernetes支持 的概念,因此可以使用持久化的卷类型。
  • 是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么?可以手动创建单个Pod,但是也可以使用Replication Controller使用Pod模板创建出多份拷贝,下文会详细介绍。
  • 如果Pod是短暂的,那么重启时IP地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?这时可以使用Service,下文会详细介绍。

Label

正如图所示,一些Pod有Label(enter image description here)。一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。比如,你可能创建了一个"tier"和“app”标签,通过Label(tier=frontend, app=myapp)来标记前端Pod容器,使用Label(tier=backend, app=myapp)标记后台Pod。然后可以使用 Selectors 选择带有特定Label的Pod,并且将Service或者Replication Controller应用到上面。

Replication Controller

是否手动创建Pod,如果想要创建同一个容器的多份拷贝,需要一个个分别创建出来么,能否将Pods划到逻辑组里?

Replication Controller确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Replication Controller并且指定3个副本,它会创建3个Pod,并且持续监控它们。如果某个Pod不响应,那么Replication Controller会替换它,保持总数为3.如下面的动画所示:

2.gif

如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Replication Controller会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Replication Controller会立刻启动2个新Pod,保证总数为5。还可以按照这样的方式缩小Pod,这个特性在执行滚动 升级 时很有用。

当创建Replication Controller时,需要指定两个东西:

  1. Pod模板:用来创建Pod副本的模板
  2. Label:Replication Controller需要监控的Pod的标签。现在已经创建了Pod的一些副本,那么在这些副本上如何均衡负载呢?我们需要的是Service。

最新 Kubernetes 版本里,推荐使用 Deployment

Service

如果Pods是短暂的,那么重启时IP地址可能会改变,怎么才能从前端容器正确可靠地指向后台容器呢? Service 抽象 现在,假定有2个后台Pod,并且定义后台Service的名称为‘backend-service’,lable选择器为()。 的Service会完成如下两件重要的事情:

  • 会为Service创建一个本地集群的DNS入口,因此前端Pod只需要DNS查找主机名为 ‘backend-service’,就能够解析出前端应用程序可用的IP地址。
  • 现在前端已经得到了后台服务的IP地址,但是它应该访问2个后台Pod的哪一个呢?Service在这2个后台Pod之间提供透明的负载均衡,会将请求分发给其中的任意一个(如下面的动画所示)。通过每个Node上运行的代理(kube-proxy)完成。

下述动画展示了Service的功能。注意该图作了很多简化。如果不进入网络配置,那么达到透明的负载均衡目标所涉及的底层网络和路由相对先进。如果有兴趣,有更深入的介绍。

3.gif

每个节点都运行如下Kubernetes关键组件:

  • Kubelet:是主节点代理。
  • Kube-proxy:Service使用其将链接路由到Pod,如上文所述。
  • Docker或Rocket:Kubernetes使用的容器技术来创建容器。

Kubernetes Master

集群拥有一个Kubernetes Master(紫色方框)。Kubernetes Master提供集群的独特视角,并且拥有一系列组件,比如Kubernetes API Server。API Server提供可以用来和集群交互的REST端点。master节点包括用来创建和复制Pod的Replication Controller。

Copyright © 2019-present Huanqing Shao
- +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/overview/support.html b/docs/overview/support.html index 3243c4e..20403cc 100644 --- a/docs/overview/support.html +++ b/docs/overview/support.html @@ -7,11 +7,11 @@ - - + + -

支持

提交 BUG

提交 BUG 后,通常会在第二天得到 Kuboard 作者的答复。

在线提问

QQ 群

kuboard_qq

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+ diff --git a/docs/overview/why-kuboard.html b/docs/overview/why-kuboard.html index a885b9b..880cba6 100644 --- a/docs/overview/why-kuboard.html +++ b/docs/overview/why-kuboard.html @@ -7,11 +7,11 @@ - - + + -

为什么选择 Kuboard

Kubernetes 已然是当下容器编排领域事实上的标准,各大云服务商都急于推出 Kubernetes 服务,互联网公司也纷纷跟进,将自己的应用容器化,并使用 Kubernetes 编排。

在 Kubernetes 图形化工具方面,我们已经获得了极大的可选择空间:

  • 各云服务商自己推出的 Kubernetes 服务所搭载的管理控制台,例如 阿里云的 Kubernetes 服务,青云推出的 KubeSphere,其他云服务商的 CaaS 类服务
  • Kubernetes 官方的图形管理界面 Kubernetes Dashboard
  • 面向企业私有化部署的 Rancher

什么场景下更适合选择 Kuboard 呢?

Kubernetes 入门学习者

​ Kuboard类似于 Kubernetes Dashboard,是一款轻量级产品,按照 Kuboard 的文档,您可以很快地搭建一套学习 Kubernetes 用的集群环境,您也可以在自己已经有的集群上轻易地完成 Kuboard 的安装。

​ 对于 K8S 入门学习者来说,看了那么多 Kubernetes 文章,了解了许多的跟 apiserver、etcd、pod、container、service、ingress、storage class等各种概念,都不如比不上自己动手搭一套 K8S 环境,并在其上部署一套微服务应用的效果好。Kuboard 完全采用场景化的设计,操作过程更适合人们的思考方式。例如,集群概览的展示方式、名称空间的展示方式。

集群概览

在 Kuboard 中,集群概览的展现形式如下:

​ 计算资源、存储资源并列在集群概览的下层,上层则是运行于计算资源与存储资源上的名称空间(应用)。

集群概览

名称空间

在 Kuboard 中,名称空间的展示形式如下:

​ 以微服务参考分层架构的形式,将所有的微服务分为如下几层:

  • 展现层 +

    为什么选择 Kuboard

    Kubernetes 已然是当下容器编排领域事实上的标准,各大云服务商都急于推出 Kubernetes 服务,互联网公司也纷纷跟进,将自己的应用容器化,并使用 Kubernetes 编排。

    在 Kubernetes 图形化工具方面,我们已经获得了极大的可选择空间:

    • 各云服务商自己推出的 Kubernetes 服务所搭载的管理控制台,例如 阿里云的 Kubernetes 服务,青云推出的 KubeSphere,其他云服务商的 CaaS 类服务
    • Kubernetes 官方的图形管理界面 Kubernetes Dashboard
    • 面向企业私有化部署的 Rancher

    什么场景下更适合选择 Kuboard 呢?

    Kubernetes 入门学习者

    ​ Kuboard类似于 Kubernetes Dashboard,是一款轻量级产品,按照 Kuboard 的文档,您可以很快地搭建一套学习 Kubernetes 用的集群环境,您也可以在自己已经有的集群上轻易地完成 Kuboard 的安装。

    ​ 对于 K8S 入门学习者来说,看了那么多 Kubernetes 文章,了解了许多的跟 apiserver、etcd、pod、container、service、ingress、storage class等各种概念,都不如比不上自己动手搭一套 K8S 环境,并在其上部署一套微服务应用的效果好。Kuboard 完全采用场景化的设计,操作过程更适合人们的思考方式。例如,集群概览的展示方式、名称空间的展示方式。

    集群概览

    在 Kuboard 中,集群概览的展现形式如下:

    ​ 计算资源、存储资源并列在集群概览的下层,上层则是运行于计算资源与存储资源上的名称空间(应用)。

    集群概览

    名称空间

    在 Kuboard 中,名称空间的展示形式如下:

    ​ 以微服务参考分层架构的形式,将所有的微服务分为如下几层:

    • 展现层
      • 终端用户访问的 Web 应用
    • API网关层
      • Spring Cloud Gateway / Zuul /Kong 等接口网关
    • 微服务层
      • Spring Boot 微服务,或 PHP / Python 实现的微服务
    • 持久层 @@ -25,7 +25,7 @@ 如何降低 Kubernetes 学习门槛 → -

    Copyright © 2019-present Huanqing Shao
    - +

Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2
+