From d13ae9fe8e38e2d26231df11121384da400e3184 Mon Sep 17 00:00:00 2001 From: "huanqing.shao" Date: Mon, 29 Jul 2019 00:04:08 +0800 Subject: [PATCH] micro-service --- docs/404.html | 6 +++--- docs/assets/js/{10.1f915e9d.js => 10.0a4d8f20.js} | 2 +- docs/assets/js/{12.552937bc.js => 12.d7d7884b.js} | 2 +- docs/assets/js/{13.0d8b0c27.js => 13.f367cc91.js} | 2 +- docs/assets/js/{14.0f87e959.js => 14.f8440cdf.js} | 2 +- docs/assets/js/{15.cd3e1657.js => 15.4a790d15.js} | 2 +- docs/assets/js/{16.792a4c03.js => 16.5b597e97.js} | 2 +- docs/assets/js/{17.cf730a9d.js => 17.571c7a22.js} | 2 +- docs/assets/js/{18.a70e8de3.js => 18.dde79d88.js} | 2 +- docs/assets/js/{19.f3e134a0.js => 19.0e01dbdd.js} | 2 +- docs/assets/js/{21.e8207291.js => 21.eab2a94a.js} | 2 +- docs/assets/js/{22.3fec9def.js => 22.cc0a1477.js} | 2 +- docs/assets/js/{24.a07f31f6.js => 24.f944689b.js} | 2 +- docs/assets/js/{26.dfaf6f55.js => 26.e83165c1.js} | 2 +- docs/assets/js/{27.5d636b05.js => 27.f6ddd21f.js} | 2 +- docs/assets/js/{28.3c6cab60.js => 28.addd2710.js} | 2 +- docs/assets/js/{30.26d3cffe.js => 30.ffa8ea0d.js} | 2 +- docs/assets/js/{33.37fdc79a.js => 33.f768f577.js} | 2 +- docs/assets/js/{34.5c3c7ca0.js => 34.9ced5657.js} | 2 +- docs/assets/js/{35.8f8a25b5.js => 35.b60dcf52.js} | 2 +- docs/assets/js/{36.90f5a7c5.js => 36.844fa65e.js} | 2 +- docs/assets/js/{37.7aebb8f4.js => 37.bdca14e0.js} | 2 +- docs/assets/js/{38.b9256242.js => 38.f94e235e.js} | 2 +- docs/assets/js/{39.c4f6e7db.js => 39.66086eb4.js} | 2 +- docs/assets/js/{40.b117de41.js => 40.91e3d923.js} | 2 +- docs/assets/js/{41.e5c5006e.js => 41.f665e6e1.js} | 2 +- docs/assets/js/{43.88270b10.js => 43.58b216df.js} | 2 +- docs/assets/js/{44.c53ef094.js => 44.5a5cdde4.js} | 2 +- docs/assets/js/{6.92da0a1c.js => 6.a961abad.js} | 2 +- docs/assets/js/{7.7c97df49.js => 7.18a3efb8.js} | 2 +- docs/assets/js/{8.273c8f48.js => 8.59440f2b.js} | 2 +- docs/assets/js/{9.d1dad7a2.js => 9.2c5fb6de.js} | 2 +- docs/assets/js/{app.dae13134.js => app.1eb8cc20.js} | 4 ++-- docs/guide/cluster/computing.html | 4 ++-- docs/guide/cluster/namespace.html | 4 ++-- docs/guide/cluster/storage.html | 4 ++-- docs/guide/diagonize/events.html | 4 ++-- docs/guide/diagonize/logs.html | 4 ++-- docs/guide/diagonize/port-forward.html | 4 ++-- docs/guide/example/busybox.html | 4 ++-- docs/guide/example/import.html | 4 ++-- docs/guide/example/monitor.html | 4 ++-- docs/guide/index.html | 4 ++-- docs/guide/monitor/apis.html | 4 ++-- docs/guide/monitor/index.html | 4 ++-- docs/guide/namespace/adjustion.html | 4 ++-- docs/guide/namespace/configMap.html | 4 ++-- docs/guide/namespace/index.html | 4 ++-- docs/guide/namespace/multi-env.html | 4 ++-- docs/guide/namespace/pvc.html | 4 ++-- docs/guide/namespace/secrets.html | 4 ++-- docs/guide/namespace/workload.html | 4 ++-- docs/index.html | 6 +++--- docs/install/index.html | 4 ++-- docs/install/install-common-ingress.html | 4 ++-- docs/install/install-common-vm.html | 4 ++-- docs/install/install-dashboard-diagonize-kube-dns.html | 4 ++-- docs/install/install-dashboard-diagonize.html | 4 ++-- docs/install/install-dashboard-upgrade.html | 8 ++++---- docs/install/install-dashboard.html | 8 ++++---- docs/install/install-k8s.html | 4 ++-- docs/install/install-kind.html | 4 ++-- docs/install/install-kubectl.html | 4 ++-- docs/install/install-kubernetes.html | 4 ++-- docs/micro-service/spring-cloud/cloud-eureka.html | 8 ++++---- docs/micro-service/spring-cloud/index.html | 8 ++++---- docs/overview/concepts.html | 4 ++-- docs/overview/index.html | 8 ++++---- docs/overview/why-kuboard.html | 4 ++-- docs/support/change-log.html | 8 ++++---- docs/support/index.html | 4 ++-- 71 files changed, 125 insertions(+), 125 deletions(-) rename docs/assets/js/{10.1f915e9d.js => 10.0a4d8f20.js} (99%) rename docs/assets/js/{12.552937bc.js => 12.d7d7884b.js} (76%) rename docs/assets/js/{13.0d8b0c27.js => 13.f367cc91.js} (90%) rename docs/assets/js/{14.0f87e959.js => 14.f8440cdf.js} (83%) rename docs/assets/js/{15.cd3e1657.js => 15.4a790d15.js} (86%) rename docs/assets/js/{16.792a4c03.js => 16.5b597e97.js} (98%) rename docs/assets/js/{17.cf730a9d.js => 17.571c7a22.js} (98%) rename docs/assets/js/{18.a70e8de3.js => 18.dde79d88.js} (94%) rename docs/assets/js/{19.f3e134a0.js => 19.0e01dbdd.js} (94%) rename docs/assets/js/{21.e8207291.js => 21.eab2a94a.js} (98%) rename docs/assets/js/{22.3fec9def.js => 22.cc0a1477.js} (85%) rename docs/assets/js/{24.a07f31f6.js => 24.f944689b.js} (99%) rename docs/assets/js/{26.dfaf6f55.js => 26.e83165c1.js} (99%) rename docs/assets/js/{27.5d636b05.js => 27.f6ddd21f.js} (94%) rename docs/assets/js/{28.3c6cab60.js => 28.addd2710.js} (90%) rename docs/assets/js/{30.26d3cffe.js => 30.ffa8ea0d.js} (87%) rename docs/assets/js/{33.37fdc79a.js => 33.f768f577.js} (96%) rename docs/assets/js/{34.5c3c7ca0.js => 34.9ced5657.js} (98%) rename docs/assets/js/{35.8f8a25b5.js => 35.b60dcf52.js} (92%) rename docs/assets/js/{36.90f5a7c5.js => 36.844fa65e.js} (92%) rename docs/assets/js/{37.7aebb8f4.js => 37.bdca14e0.js} (96%) rename docs/assets/js/{38.b9256242.js => 38.f94e235e.js} (98%) rename docs/assets/js/{39.c4f6e7db.js => 39.66086eb4.js} (87%) rename docs/assets/js/{40.b117de41.js => 40.91e3d923.js} (98%) rename docs/assets/js/{41.e5c5006e.js => 41.f665e6e1.js} (99%) rename docs/assets/js/{43.88270b10.js => 43.58b216df.js} (87%) rename docs/assets/js/{44.c53ef094.js => 44.5a5cdde4.js} (95%) rename docs/assets/js/{6.92da0a1c.js => 6.a961abad.js} (84%) rename docs/assets/js/{7.7c97df49.js => 7.18a3efb8.js} (99%) rename docs/assets/js/{8.273c8f48.js => 8.59440f2b.js} (95%) rename docs/assets/js/{9.d1dad7a2.js => 9.2c5fb6de.js} (99%) rename docs/assets/js/{app.dae13134.js => app.1eb8cc20.js} (68%) diff --git a/docs/404.html b/docs/404.html index 3964a7d..1d21fab 100644 --- a/docs/404.html +++ b/docs/404.html @@ -7,11 +7,11 @@ - + -

404

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

404

There's nothing here.
Take me home.
+ diff --git a/docs/assets/js/10.1f915e9d.js b/docs/assets/js/10.0a4d8f20.js similarity index 99% rename from docs/assets/js/10.1f915e9d.js rename to docs/assets/js/10.0a4d8f20.js index 2f9d77c..9b6304a 100644 --- a/docs/assets/js/10.1f915e9d.js +++ b/docs/assets/js/10.0a4d8f20.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{314:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223454676.b545b43f.png"},315:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223551308.ed106a2a.png"},316:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223605920.3e762b29.png"},317:function(t,e,a){t.exports=a.p+"assets/img/image-20190722231246540.ebf13194.png"},318:function(t,e,a){t.exports=a.p+"assets/img/image-20190722224029397.abc44209.png"},319:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225347491.984fabae.png"},320:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225454029.73400267.png"},321:function(t,e,a){t.exports=a.p+"assets/img/image-20190722230511430.ed459354.png"},392: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(314),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(315),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(316),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(317),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(318),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(319),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(320),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(321),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],{314:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223454676.b545b43f.png"},315:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223551308.ed106a2a.png"},316:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223605920.3e762b29.png"},317:function(t,e,a){t.exports=a.p+"assets/img/image-20190722231246540.ebf13194.png"},318:function(t,e,a){t.exports=a.p+"assets/img/image-20190722224029397.abc44209.png"},319:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225347491.984fabae.png"},320:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225454029.73400267.png"},321:function(t,e,a){t.exports=a.p+"assets/img/image-20190722230511430.ed459354.png"},379: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(314),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(315),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(316),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(317),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(318),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(319),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(320),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(321),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/12.552937bc.js b/docs/assets/js/12.d7d7884b.js similarity index 76% rename from docs/assets/js/12.552937bc.js rename to docs/assets/js/12.d7d7884b.js index edd4b01..29a1ad5 100644 --- a/docs/assets/js/12.552937bc.js +++ b/docs/assets/js/12.d7d7884b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{227:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105606081.bc471512.png"},228:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105644937.968b1660.png"},229:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105722999.5b6c9bae.png"},230:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105748435.1cb3ad0d.png"},231:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105809872.61add376.png"},232:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105830318.43414c56.png"},391: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(227),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(228),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(229),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(230),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(231),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(232),alt:"image-20190723105830318"}})])])},[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{212:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105606081.bc471512.png"},213:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105644937.968b1660.png"},214:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105722999.5b6c9bae.png"},215:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105748435.1cb3ad0d.png"},216:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105809872.61add376.png"},217:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105830318.43414c56.png"},389: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(212),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(213),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(214),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(215),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(216),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(217),alt:"image-20190723105830318"}})])])},[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/13.0d8b0c27.js b/docs/assets/js/13.f367cc91.js similarity index 90% rename from docs/assets/js/13.0d8b0c27.js rename to docs/assets/js/13.f367cc91.js index 60f0250..025e3b9 100644 --- a/docs/assets/js/13.0d8b0c27.js +++ b/docs/assets/js/13.f367cc91.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{300:function(a,t,s){a.exports=s.p+"assets/img/image-20190721085144545.25f25dda.png"},301:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090118542.46c31055.png"},302:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090753742.28d009f3.png"},303:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090840925.a5231632.png"},304:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090935511.80fb3864.png"},305:function(a,t,s){a.exports=s.p+"assets/img/image-20190721091005130.330e9f1d.png"},359: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(300),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(301),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(302),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(303),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(304),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(305),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],{304:function(a,t,s){a.exports=s.p+"assets/img/image-20190721085144545.25f25dda.png"},305:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090118542.46c31055.png"},306:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090753742.28d009f3.png"},307:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090840925.a5231632.png"},308:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090935511.80fb3864.png"},309:function(a,t,s){a.exports=s.p+"assets/img/image-20190721091005130.330e9f1d.png"},371: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(304),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(305),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(306),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(307),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(308),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(309),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.0f87e959.js b/docs/assets/js/14.f8440cdf.js similarity index 83% rename from docs/assets/js/14.0f87e959.js rename to docs/assets/js/14.f8440cdf.js index c881ec2..4b60a8b 100644 --- a/docs/assets/js/14.0f87e959.js +++ b/docs/assets/js/14.f8440cdf.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{111:function(t,a,_){t.exports=_.p+"assets/img/image-20190721110355464.25f25dda.png"},296:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112353077.b907aa89.png"},297:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112624128.7aa6b8f1.png"},298:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113050608.97e0f110.png"},299:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113155991.f3ecd62f.png"},356: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:_(296),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:_(297),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:_(298),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:_(299),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([[14],{111:function(t,a,_){t.exports=_.p+"assets/img/image-20190721110355464.25f25dda.png"},300:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112353077.b907aa89.png"},301:function(t,a,_){t.exports=_.p+"assets/img/image-20190721112624128.7aa6b8f1.png"},302:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113050608.97e0f110.png"},303:function(t,a,_){t.exports=_.p+"assets/img/image-20190721113155991.f3ecd62f.png"},370: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:_(300),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:_(301),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:_(302),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:_(303),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/15.cd3e1657.js b/docs/assets/js/15.4a790d15.js similarity index 86% rename from docs/assets/js/15.cd3e1657.js rename to docs/assets/js/15.4a790d15.js index 7a5df5e..25c74bd 100644 --- a/docs/assets/js/15.cd3e1657.js +++ b/docs/assets/js/15.4a790d15.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{111:function(t,a,v){t.exports=v.p+"assets/img/image-20190721110355464.25f25dda.png"},306:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113708689.f9b42a11.png"},307:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113810235.59d55672.png"},308:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114112644.526de44c.png"},309:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114211751.e1a07115.png"},367: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(306),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(307),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(308),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(309),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([[15],{111:function(t,a,v){t.exports=v.p+"assets/img/image-20190721110355464.25f25dda.png"},296:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113708689.f9b42a11.png"},297:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113810235.59d55672.png"},298:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114112644.526de44c.png"},299:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114211751.e1a07115.png"},367: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(296),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(297),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(298),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(299),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/16.792a4c03.js b/docs/assets/js/16.5b597e97.js similarity index 98% rename from docs/assets/js/16.792a4c03.js rename to docs/assets/js/16.5b597e97.js index c8009e2..506314e 100644 --- a/docs/assets/js/16.792a4c03.js +++ b/docs/assets/js/16.5b597e97.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{111:function(t,e,r){t.exports=r.p+"assets/img/image-20190721110355464.25f25dda.png"},310:function(t,e,r){t.exports=r.p+"assets/img/image-20190721110543437.8cbe188d.png"},311:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111011798.b9cc73b4.png"},312:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111540512.b0a58451.png"},313:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111642221.f9c06dc3.png"},371:function(t,e,r){"use strict";r.r(e);var s=r(0),v=Object(s.a)({},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" Secrets")]),t._v(" "),s("h1",{attrs:{id:"查看-secrets-列表"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-secrets-列表","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 Secrets 列表")]),t._v(" "),s("p",[t._v("假设您已进入名称空间界面,如下图所示:")]),t._v(" "),s("p",[s("img",{attrs:{src:r(111),alt:"image-20190721110355464"}})]),t._v(" "),s("p",[t._v("Secrets 列表位于图中左上角,点击 "),s("em",[s("strong",[t._v("放大")])]),t._v(" 按钮,可以将列表显示到更大的区域,如下图所示:")]),t._v(" "),s("blockquote",[s("p",[t._v("点击 "),s("strong",[t._v("Secrets")]),t._v(" 可以刷新该列表")])]),t._v(" "),s("p",[s("img",{attrs:{src:r(310),alt:"image-20190721110543437"}})]),t._v(" "),s("h1",{attrs:{id:"创建-secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#创建-secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建 Secrets")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("Secrets / 创建")])])]),t._v(" "),s("p",[t._v("填写表单如下:")])])]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("字段名称")]),t._v(" "),s("th",[t._v("填写内容")]),t._v(" "),s("th",[t._v("说明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("名称")]),t._v(" "),s("td",[t._v("my-docker-repository")]),t._v(" "),s("td",[t._v("Secrets的名称")])]),t._v(" "),s("tr",[s("td",[t._v("类型")]),t._v(" "),s("td",[t._v("docker仓库密码")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("docker server")]),t._v(" "),s("td",[t._v("https://my-docker-repository.com")]),t._v(" "),s("td",[t._v("请填写 docker 仓库的全路径")])]),t._v(" "),s("tr",[s("td",[t._v("docker username")]),t._v(" "),s("td",[t._v("my-docker-user")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("docker password")]),t._v(" "),s("td",[t._v("mypassword")]),t._v(" "),s("td")])])]),t._v(" "),s("p",[s("img",{attrs:{src:r(311),alt:"image-20190721111011798"}})]),t._v(" "),s("blockquote",[s("p",[t._v("当前 Kuboard 支持如下类型 Secrets 的创建:")]),t._v(" "),s("ul",[s("li",[t._v("docker仓库密码")]),t._v(" "),s("li",[t._v("当您的镜像存储在私有仓库时,您在创建工作负载时可能需要配置 imagePullSecrets 用来访问镜像仓库")]),t._v(" "),s("li",[t._v("Opaque")]),t._v(" "),s("li",[t._v("密码")]),t._v(" "),s("li",[t._v("TLS")]),t._v(" "),s("li",[t._v("当您为 Ingress 启用 HTTPS 时,您需要将域名的的 TLS 证书存入 Secrets")])])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击保存")]),t._v(" "),s("p",[t._v("Secrets 创建成功,如下图所示:")])])]),t._v(" "),s("p",[s("img",{attrs:{src:r(312),alt:"image-20190721111540512"}})]),t._v(" "),s("h1",{attrs:{id:"查看-编辑-删除-secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-编辑-删除-secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看/编辑/删除 Secrets")]),t._v(" "),s("ul",[s("li",[t._v("点击 my-docker-repository")])]),t._v(" "),s("p",[s("img",{attrs:{src:r(313),alt:"image-20190721111642221"}})]),t._v(" "),s("p",[t._v("编辑、删除操作可直接按照提示完成")])])},[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{111:function(t,e,r){t.exports=r.p+"assets/img/image-20190721110355464.25f25dda.png"},310:function(t,e,r){t.exports=r.p+"assets/img/image-20190721110543437.8cbe188d.png"},311:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111011798.b9cc73b4.png"},312:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111540512.b0a58451.png"},313:function(t,e,r){t.exports=r.p+"assets/img/image-20190721111642221.f9c06dc3.png"},392:function(t,e,r){"use strict";r.r(e);var s=r(0),v=Object(s.a)({},function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" Secrets")]),t._v(" "),s("h1",{attrs:{id:"查看-secrets-列表"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-secrets-列表","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看 Secrets 列表")]),t._v(" "),s("p",[t._v("假设您已进入名称空间界面,如下图所示:")]),t._v(" "),s("p",[s("img",{attrs:{src:r(111),alt:"image-20190721110355464"}})]),t._v(" "),s("p",[t._v("Secrets 列表位于图中左上角,点击 "),s("em",[s("strong",[t._v("放大")])]),t._v(" 按钮,可以将列表显示到更大的区域,如下图所示:")]),t._v(" "),s("blockquote",[s("p",[t._v("点击 "),s("strong",[t._v("Secrets")]),t._v(" 可以刷新该列表")])]),t._v(" "),s("p",[s("img",{attrs:{src:r(310),alt:"image-20190721110543437"}})]),t._v(" "),s("h1",{attrs:{id:"创建-secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#创建-secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建 Secrets")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击 "),s("em",[s("strong",[t._v("Secrets / 创建")])])]),t._v(" "),s("p",[t._v("填写表单如下:")])])]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("字段名称")]),t._v(" "),s("th",[t._v("填写内容")]),t._v(" "),s("th",[t._v("说明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("名称")]),t._v(" "),s("td",[t._v("my-docker-repository")]),t._v(" "),s("td",[t._v("Secrets的名称")])]),t._v(" "),s("tr",[s("td",[t._v("类型")]),t._v(" "),s("td",[t._v("docker仓库密码")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("docker server")]),t._v(" "),s("td",[t._v("https://my-docker-repository.com")]),t._v(" "),s("td",[t._v("请填写 docker 仓库的全路径")])]),t._v(" "),s("tr",[s("td",[t._v("docker username")]),t._v(" "),s("td",[t._v("my-docker-user")]),t._v(" "),s("td")]),t._v(" "),s("tr",[s("td",[t._v("docker password")]),t._v(" "),s("td",[t._v("mypassword")]),t._v(" "),s("td")])])]),t._v(" "),s("p",[s("img",{attrs:{src:r(311),alt:"image-20190721111011798"}})]),t._v(" "),s("blockquote",[s("p",[t._v("当前 Kuboard 支持如下类型 Secrets 的创建:")]),t._v(" "),s("ul",[s("li",[t._v("docker仓库密码")]),t._v(" "),s("li",[t._v("当您的镜像存储在私有仓库时,您在创建工作负载时可能需要配置 imagePullSecrets 用来访问镜像仓库")]),t._v(" "),s("li",[t._v("Opaque")]),t._v(" "),s("li",[t._v("密码")]),t._v(" "),s("li",[t._v("TLS")]),t._v(" "),s("li",[t._v("当您为 Ingress 启用 HTTPS 时,您需要将域名的的 TLS 证书存入 Secrets")])])]),t._v(" "),s("ul",[s("li",[s("p",[t._v("点击保存")]),t._v(" "),s("p",[t._v("Secrets 创建成功,如下图所示:")])])]),t._v(" "),s("p",[s("img",{attrs:{src:r(312),alt:"image-20190721111540512"}})]),t._v(" "),s("h1",{attrs:{id:"查看-编辑-删除-secrets"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看-编辑-删除-secrets","aria-hidden":"true"}},[t._v("#")]),t._v(" 查看/编辑/删除 Secrets")]),t._v(" "),s("ul",[s("li",[t._v("点击 my-docker-repository")])]),t._v(" "),s("p",[s("img",{attrs:{src:r(313),alt:"image-20190721111642221"}})]),t._v(" "),s("p",[t._v("编辑、删除操作可直接按照提示完成")])])},[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/17.cf730a9d.js b/docs/assets/js/17.571c7a22.js similarity index 98% rename from docs/assets/js/17.cf730a9d.js rename to docs/assets/js/17.571c7a22.js index 0593f15..fd66346 100644 --- a/docs/assets/js/17.cf730a9d.js +++ b/docs/assets/js/17.571c7a22.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{112:function(s,a,e){s.exports=e.p+"assets/img/image-20190715085036593.55559549.png"},113:function(s,a,e){s.exports=e.p+"assets/img/image2019-07-15_09.01.21.0e0d34f2.png"},335:function(s,a,e){s.exports=e.p+"assets/img/image-20190726214032585.f5bc62e4.png"},336:function(s,a,e){s.exports=e.p+"assets/img/image-20190715101542756.5934c00e.png"},337:function(s,a,e){s.exports=e.p+"assets/img/image-20190715193838012.eca23618.png"},355:function(s,a,e){"use strict";e.r(a);var t=e(0),r=Object(t.a)({},function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"安装-kubernetes-单master节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-kubernetes-单master节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 Kubernetes 单Master节点")]),s._v(" "),t("p",[s._v("对于 Kubernetes 初学者,推荐的在阿里云采购如下配置:")]),s._v(" "),t("ul",[t("li",[s._v("3台 2核4G 的ECS(突发性能实例 t5 ecs.t5-c1m2.large或同等配置,单台约 0.4元/小时,停机时不收费)")]),s._v(" "),t("li",[s._v("Cent OS 7.6")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg",target:"_blank",rel:"noopener noreferrer"}},[s._v("领取阿里云最高2000元红包"),t("OutboundLink")],1)]),s._v(" "),t("p",[s._v("Kuboard 的 Live Demo 环境使用的是如下拓扑结构,本文档描述了如何在完成该 demo 环境的搭建。")]),s._v(" "),t("p",[s._v("完成安装后,对应的软件版本为:")]),s._v(" "),t("ul",[t("li",[s._v("Kubernetes v1.15.0")]),s._v(" "),t("li",[s._v("Docker 18.09.7")])]),s._v(" "),t("p",[t("img",{attrs:{src:e(335),alt:"image-20190726214032585"}})]),s._v(" "),t("h2",{attrs:{id:"制作标准机镜像"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[s._v("#")]),s._v(" 制作标准机镜像")]),s._v(" "),t("p",[s._v("通过使用标准机镜像,可以")]),s._v(" "),t("ul",[t("li",[t("strong",[s._v("避免重复执行对测试机安装必要软件的过程")])]),s._v(" "),t("li",[t("strong",[s._v("以一种相对标准化的过程管理测试机的维护")])])]),s._v(" "),t("p",[s._v("标准机镜像中预装了如下内容:")]),s._v(" "),t("ul",[t("li",[s._v("docker")]),s._v(" "),t("li",[s._v("nfs-utils")]),s._v(" "),t("li",[s._v("kubernetes images")])]),s._v(" "),t("div",{staticClass:"tip custom-block"},[t("ul",[t("li",[s._v("您也可以不制作标准机镜像,而是在三台机器上都执行 "),t("em",[t("strong",[s._v("制作标准机镜像")])]),s._v(" 中的所有操作步骤")])])]),s._v(" "),t("p",[t("strong",[s._v("标准机镜像的制作过程描述如下:")])]),s._v(" "),t("h3",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装docker")]),s._v(" "),t("p",[t("strong",[s._v("卸载旧版本")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum remove docker "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-common "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine\n")])])]),t("p",[t("strong",[s._v("下载依赖包及安装包")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm\n")])])]),t("p",[t("strong",[s._v("安装")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" docker\n")])])]),t("p",[t("strong",[s._v("启动 docker 服务")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl start docker\n")])])]),t("p",[t("strong",[s._v("检查 docker 版本")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker version\n")])])]),t("blockquote",[t("p",[t("strong",[s._v("参考文档")])]),s._v(" "),t("p",[s._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),s._v(" "),t("p",[s._v("https://docs.docker.com/install/linux/linux-postinstall/")])]),s._v(" "),t("h3",{attrs:{id:"安装-nfs-utils"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 nfs-utils")]),s._v(" "),t("p",[t("strong",[s._v("执行安装命令")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nfs-utils\n")])])]),t("p",[s._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),s._v(" "),t("h3",{attrs:{id:"k8s基本配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[s._v("#")]),s._v(" K8S基本配置")]),s._v(" "),t("p",[t("strong",[s._v("配置K8S的yum源")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("EOF "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/yum.repos.d/kubernetes.repo\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("kubernetes"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("name")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("Kubernetes\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("baseurl")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("repo_gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgkey")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),t("p",[t("strong",[s._v("关闭swap/SeLinux")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("swapoff -a\nsetenforce "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n")])])]),t("p",[t("strong",[s._v("修改 /etc/sysctl.conf")])]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("vim /etc/sysctl.conf\n")])])]),t("p",[s._v("向其中添加")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),t("p",[s._v("如下图所示")]),s._v(" "),t("p",[t("img",{attrs:{src:e(112),alt:"image-20190715085036593",title:":size=600x445"}})]),s._v(" "),t("p",[t("strong",[s._v("安装kubelet、kubeadm、kubectl")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0\n")])])]),t("p",[t("strong",[s._v("修改docker Cgroup Driver为systemd")])]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("vim /usr/lib/systemd/system/docker.service\n")])])]),t("p",[s._v("向其中他添加")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("--exec-opt native.cgroupdriver=systemd\n")])])]),t("p",[s._v("如下图所示")]),s._v(" "),t("p",[t("img",{attrs:{src:e(113),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),s._v(" "),t("p",[s._v("重启 docker")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("systemctl daemon-reload\nsystemctl restart docker\n")])])]),t("p",[t("strong",[s._v("启动kubelet")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" kubelet "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" systemctl start kubelet\n")])])]),t("p",[t("strong",[s._v("加载 kubernetes 镜像")])]),s._v(" "),t("p",[s._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),s._v(" "),t("p",[s._v("执行以下命令添加docker k8s国内镜像源")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),t("p",[t("strong",[s._v("拉取k8s相关镜像")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0\ndocker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0\ndocker pull mirrorgooglecontainers/kube-scheduler:v1.15.0\ndocker pull mirrorgooglecontainers/kube-proxy:v1.15.0\ndocker pull mirrorgooglecontainers/pause:3.1\ndocker pull mirrorgooglecontainers/etcd:3.3.10\ndocker pull coredns/coredns:1.3.1\n")])])]),t("p",[t("strong",[s._v("更改镜像名为k8s官网镜像")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0\ndocker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0\ndocker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0\ndocker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0\ndocker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1\ndocker tag eb516548c180 k8s.gcr.io/coredns:1.3.1\ndocker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10\n")])])]),t("p",[t("strong",[s._v("制作镜像")])]),s._v(" "),t("p",[s._v("请参考阿里云基于ECS "),t("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[s._v("制作虚拟机镜像"),t("OutboundLink")],1),s._v(" 的文档")]),s._v(" "),t("h2",{attrs:{id:"初始化-master-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-master-节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化 master 节点")]),s._v(" "),t("div",{staticClass:"tip custom-block"},[t("p",[s._v("以 root 身份在 demo-master-a-1 机器上执行")])]),s._v(" "),t("p",[t("strong",[s._v("配置 apiserver.demo 的域名")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x.x.x.x apiserver.demo"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /etc/hosts\n")])])]),t("div",{staticClass:"warning custom-block"},[t("p",[s._v("请替换其中的 x.x.x.x 为您的 demo-master-a-1 的实际 ip 地址")])]),s._v(" "),t("p",[t("strong",[s._v("创建 /root/k8s/kubeadm-config.yaml")])]),s._v(" "),t("div",{staticClass:"language-yaml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("apiVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" kubeadm.k8s.io/v1beta1\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("kind")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" ClusterConfiguration\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("kubernetesVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" v1.15.0\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("controlPlaneEndpoint")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"apiserver.demo:6443"')]),s._v("\n\n")])])]),t("p",[t("strong",[s._v("初始化 apiserver")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubeadm init --config"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("kubeadm-config.yaml --upload-certs\n")])])]),t("p",[s._v("执行结果如下图所示:")]),s._v(" "),t("p",[t("img",{attrs:{src:e(336),alt:"image-20190715101542756",title:":size=800x388"}})]),s._v(" "),t("p",[t("strong",[s._v("初始化 root 用户的 kubectl 配置")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("rm")]),s._v(" -rf /root/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" /root/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" -i /etc/kubernetes/admin.conf /root/.kube/config\n")])])]),t("p",[t("strong",[s._v("安装 calico")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml\n")])])]),t("blockquote",[t("p",[s._v("安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/")])]),s._v(" "),t("p",[t("strong",[s._v("等待calico安装就绪:")])]),s._v(" "),t("p",[s._v("执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("watch")]),s._v(" kubectl get pod -n kube-system\n")])])]),t("p",[t("strong",[s._v("检查 master 初始化结果")])]),s._v(" "),t("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl get nodes\n")])])]),t("h2",{attrs:{id:"初始化-worker节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-worker节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化 worker节点")]),s._v(" "),t("h3",{attrs:{id:"获得-join命令参数"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#获得-join命令参数","aria-hidden":"true"}},[s._v("#")]),s._v(" 获得 join命令参数")]),s._v(" "),t("p",[t("strong",[s._v("在 master 节点 demo-master-a-1 节点执行")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubeadm token create --print-join-command\n")])])]),t("p",[s._v("可获取kubeadm join 命令及参数,如下所示")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("join")]),s._v(" apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("h3",{attrs:{id:"初始化worker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化worker","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化worker")]),s._v(" "),t("p",[t("strong",[s._v("针对所有的 worker 节点执行")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x.x.x.x apiserver.demo"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /etc/hosts\nkubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("join")]),s._v(" apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("div",{staticClass:"tip custom-block"},[t("ul",[t("li",[s._v("将 x.x.x.x 替换为 demo-master-a-1 的实际 ip")]),s._v(" "),t("li",[s._v("将 kubeadm join 命令后的参数替换为上一个步骤中实际从 demo-master-a-1 节点获得的参数")])])]),s._v(" "),t("h3",{attrs:{id:"检查初始化结果"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查初始化结果","aria-hidden":"true"}},[s._v("#")]),s._v(" 检查初始化结果")]),s._v(" "),t("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl get nodes\n")])])]),t("p",[t("img",{attrs:{src:e(337),alt:"image-20190715193838012"}})]),s._v(" "),t("h2",{attrs:{id:"移除-worker-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移除-worker-节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 移除 worker 节点")]),s._v(" "),t("div",{staticClass:"warning custom-block"},[t("p",[s._v("正常情况下,您无需移除 worker 节点,如果添加到集群出错,您可以移除 worker 节点,再重新尝试添加")])]),s._v(" "),t("p",[s._v("在准备移除的 worker 节点上执行")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubeadm reset\n")])])]),t("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl delete node demo-worker-x-x\n")])])]),t("div",{staticClass:"tip custom-block"},[t("ul",[t("li",[s._v("将 demo-worker-x-x 替换为要移除的 worker 节点的名字")]),s._v(" "),t("li",[s._v("worker 节点的名字可以通过在节点 demo-master-a-1 上执行 kubectl get nodes 命令获得")])])]),s._v(" "),t("h2",{attrs:{id:"安装-ingress-controller"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 Ingress Controller")]),s._v(" "),t("blockquote",[t("p",[s._v("Ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),s._v(" "),t("p",[s._v("Ingress Controllers官网介绍:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/")]),s._v(" "),t("p",[s._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),s._v(" "),t("p",[s._v("kubernetes支持多种Ingress Controllers,本文推荐使用 https://github.com/nginxinc/kubernetes-ingress")])]),s._v(" "),t("p",[t("strong",[s._v("在 demo-master-a-1 上执行")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),t("p",[t("strong",[s._v("配置域名解析")])]),s._v(" "),t("p",[s._v("将域名 *.demo.yourdomain.com 解析到 demo-worker-a-2 的 IP 地址 z.z.z.z (也可以是 demo-worker-a-1 的地址 y.y.y.y)")]),s._v(" "),t("div",{staticClass:"tip custom-block"},[t("p",[s._v("由于需要申请域名,过程会比较繁琐,有如下两种替代方案:")]),s._v(" "),t("ul",[t("li",[s._v("在您的客户端机器(访问部署在K8S上的 web 应用的浏览器所在的机器)设置 hosts 配置;")]),s._v(" "),t("li",[s._v("暂时放弃域名的配置,临时使用 NodePort 或者 "),t("code",[s._v("kubectl port-forward")]),s._v(" 的方式访问部署在 K8S 上的 web 应用")])])]),s._v(" "),t("p",[t("strong",[s._v("验证配置")])]),s._v(" "),t("p",[s._v("在浏览器访问 a.demo.yourdomain.com,将得到 404 NotFound 错误页面")]),s._v(" "),t("h2",{attrs:{id:"下一步"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#下一步","aria-hidden":"true"}},[s._v("#")]),s._v(" 下一步")]),s._v(" "),t("p",[s._v("🎉 🎉 🎉")]),s._v(" "),t("p",[s._v("您已经完成了 Kubernetes 集群的安装,下一步请:")]),s._v(" "),t("p",[t("a",{attrs:{href:"/install/install-dashboard"}},[s._v("安装 Kuboard")])])])},[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{112:function(s,a,e){s.exports=e.p+"assets/img/image-20190715085036593.55559549.png"},113:function(s,a,e){s.exports=e.p+"assets/img/image2019-07-15_09.01.21.0e0d34f2.png"},333:function(s,a,e){s.exports=e.p+"assets/img/image-20190726214032585.f5bc62e4.png"},334:function(s,a,e){s.exports=e.p+"assets/img/image-20190715101542756.5934c00e.png"},335:function(s,a,e){s.exports=e.p+"assets/img/image-20190715193838012.eca23618.png"},357:function(s,a,e){"use strict";e.r(a);var t=e(0),r=Object(t.a)({},function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"安装-kubernetes-单master节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-kubernetes-单master节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 Kubernetes 单Master节点")]),s._v(" "),t("p",[s._v("对于 Kubernetes 初学者,推荐的在阿里云采购如下配置:")]),s._v(" "),t("ul",[t("li",[s._v("3台 2核4G 的ECS(突发性能实例 t5 ecs.t5-c1m2.large或同等配置,单台约 0.4元/小时,停机时不收费)")]),s._v(" "),t("li",[s._v("Cent OS 7.6")])]),s._v(" "),t("p",[t("a",{attrs:{href:"https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg",target:"_blank",rel:"noopener noreferrer"}},[s._v("领取阿里云最高2000元红包"),t("OutboundLink")],1)]),s._v(" "),t("p",[s._v("Kuboard 的 Live Demo 环境使用的是如下拓扑结构,本文档描述了如何在完成该 demo 环境的搭建。")]),s._v(" "),t("p",[s._v("完成安装后,对应的软件版本为:")]),s._v(" "),t("ul",[t("li",[s._v("Kubernetes v1.15.0")]),s._v(" "),t("li",[s._v("Docker 18.09.7")])]),s._v(" "),t("p",[t("img",{attrs:{src:e(333),alt:"image-20190726214032585"}})]),s._v(" "),t("h2",{attrs:{id:"制作标准机镜像"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[s._v("#")]),s._v(" 制作标准机镜像")]),s._v(" "),t("p",[s._v("通过使用标准机镜像,可以")]),s._v(" "),t("ul",[t("li",[t("strong",[s._v("避免重复执行对测试机安装必要软件的过程")])]),s._v(" "),t("li",[t("strong",[s._v("以一种相对标准化的过程管理测试机的维护")])])]),s._v(" "),t("p",[s._v("标准机镜像中预装了如下内容:")]),s._v(" "),t("ul",[t("li",[s._v("docker")]),s._v(" "),t("li",[s._v("nfs-utils")]),s._v(" "),t("li",[s._v("kubernetes images")])]),s._v(" "),t("div",{staticClass:"tip custom-block"},[t("ul",[t("li",[s._v("您也可以不制作标准机镜像,而是在三台机器上都执行 "),t("em",[t("strong",[s._v("制作标准机镜像")])]),s._v(" 中的所有操作步骤")])])]),s._v(" "),t("p",[t("strong",[s._v("标准机镜像的制作过程描述如下:")])]),s._v(" "),t("h3",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装docker")]),s._v(" "),t("p",[t("strong",[s._v("卸载旧版本")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum remove docker "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-common "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine\n")])])]),t("p",[t("strong",[s._v("下载依赖包及安装包")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm\n")])])]),t("p",[t("strong",[s._v("安装")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" docker\n")])])]),t("p",[t("strong",[s._v("启动 docker 服务")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl start docker\n")])])]),t("p",[t("strong",[s._v("检查 docker 版本")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker version\n")])])]),t("blockquote",[t("p",[t("strong",[s._v("参考文档")])]),s._v(" "),t("p",[s._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),s._v(" "),t("p",[s._v("https://docs.docker.com/install/linux/linux-postinstall/")])]),s._v(" "),t("h3",{attrs:{id:"安装-nfs-utils"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 nfs-utils")]),s._v(" "),t("p",[t("strong",[s._v("执行安装命令")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nfs-utils\n")])])]),t("p",[s._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),s._v(" "),t("h3",{attrs:{id:"k8s基本配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[s._v("#")]),s._v(" K8S基本配置")]),s._v(" "),t("p",[t("strong",[s._v("配置K8S的yum源")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("EOF "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/yum.repos.d/kubernetes.repo\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("kubernetes"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("name")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("Kubernetes\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("baseurl")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("repo_gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgkey")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),t("p",[t("strong",[s._v("关闭swap/SeLinux")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("swapoff -a\nsetenforce "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n")])])]),t("p",[t("strong",[s._v("修改 /etc/sysctl.conf")])]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("vim /etc/sysctl.conf\n")])])]),t("p",[s._v("向其中添加")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),t("p",[s._v("如下图所示")]),s._v(" "),t("p",[t("img",{attrs:{src:e(112),alt:"image-20190715085036593",title:":size=600x445"}})]),s._v(" "),t("p",[t("strong",[s._v("安装kubelet、kubeadm、kubectl")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("yum "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0\n")])])]),t("p",[t("strong",[s._v("修改docker Cgroup Driver为systemd")])]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("vim /usr/lib/systemd/system/docker.service\n")])])]),t("p",[s._v("向其中他添加")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("--exec-opt native.cgroupdriver=systemd\n")])])]),t("p",[s._v("如下图所示")]),s._v(" "),t("p",[t("img",{attrs:{src:e(113),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),s._v(" "),t("p",[s._v("重启 docker")]),s._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("systemctl daemon-reload\nsystemctl restart docker\n")])])]),t("p",[t("strong",[s._v("启动kubelet")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" kubelet "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" systemctl start kubelet\n")])])]),t("p",[t("strong",[s._v("加载 kubernetes 镜像")])]),s._v(" "),t("p",[s._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),s._v(" "),t("p",[s._v("执行以下命令添加docker k8s国内镜像源")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),t("p",[t("strong",[s._v("拉取k8s相关镜像")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0\ndocker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0\ndocker pull mirrorgooglecontainers/kube-scheduler:v1.15.0\ndocker pull mirrorgooglecontainers/kube-proxy:v1.15.0\ndocker pull mirrorgooglecontainers/pause:3.1\ndocker pull mirrorgooglecontainers/etcd:3.3.10\ndocker pull coredns/coredns:1.3.1\n")])])]),t("p",[t("strong",[s._v("更改镜像名为k8s官网镜像")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0\ndocker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0\ndocker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0\ndocker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0\ndocker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1\ndocker tag eb516548c180 k8s.gcr.io/coredns:1.3.1\ndocker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10\n")])])]),t("p",[t("strong",[s._v("制作镜像")])]),s._v(" "),t("p",[s._v("请参考阿里云基于ECS "),t("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[s._v("制作虚拟机镜像"),t("OutboundLink")],1),s._v(" 的文档")]),s._v(" "),t("h2",{attrs:{id:"初始化-master-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-master-节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化 master 节点")]),s._v(" "),t("div",{staticClass:"tip custom-block"},[t("p",[s._v("以 root 身份在 demo-master-a-1 机器上执行")])]),s._v(" "),t("p",[t("strong",[s._v("配置 apiserver.demo 的域名")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x.x.x.x apiserver.demo"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /etc/hosts\n")])])]),t("div",{staticClass:"warning custom-block"},[t("p",[s._v("请替换其中的 x.x.x.x 为您的 demo-master-a-1 的实际 ip 地址")])]),s._v(" "),t("p",[t("strong",[s._v("创建 /root/k8s/kubeadm-config.yaml")])]),s._v(" "),t("div",{staticClass:"language-yaml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("apiVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" kubeadm.k8s.io/v1beta1\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("kind")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" ClusterConfiguration\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("kubernetesVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" v1.15.0\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("controlPlaneEndpoint")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"apiserver.demo:6443"')]),s._v("\n\n")])])]),t("p",[t("strong",[s._v("初始化 apiserver")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubeadm init --config"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("kubeadm-config.yaml --upload-certs\n")])])]),t("p",[s._v("执行结果如下图所示:")]),s._v(" "),t("p",[t("img",{attrs:{src:e(334),alt:"image-20190715101542756",title:":size=800x388"}})]),s._v(" "),t("p",[t("strong",[s._v("初始化 root 用户的 kubectl 配置")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("rm")]),s._v(" -rf /root/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" /root/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" -i /etc/kubernetes/admin.conf /root/.kube/config\n")])])]),t("p",[t("strong",[s._v("安装 calico")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml\n")])])]),t("blockquote",[t("p",[s._v("安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/")])]),s._v(" "),t("p",[t("strong",[s._v("等待calico安装就绪:")])]),s._v(" "),t("p",[s._v("执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("watch")]),s._v(" kubectl get pod -n kube-system\n")])])]),t("p",[t("strong",[s._v("检查 master 初始化结果")])]),s._v(" "),t("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl get nodes\n")])])]),t("h2",{attrs:{id:"初始化-worker节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-worker节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化 worker节点")]),s._v(" "),t("h3",{attrs:{id:"获得-join命令参数"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#获得-join命令参数","aria-hidden":"true"}},[s._v("#")]),s._v(" 获得 join命令参数")]),s._v(" "),t("p",[t("strong",[s._v("在 master 节点 demo-master-a-1 节点执行")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubeadm token create --print-join-command\n")])])]),t("p",[s._v("可获取kubeadm join 命令及参数,如下所示")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("join")]),s._v(" apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("h3",{attrs:{id:"初始化worker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化worker","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化worker")]),s._v(" "),t("p",[t("strong",[s._v("针对所有的 worker 节点执行")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x.x.x.x apiserver.demo"')]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /etc/hosts\nkubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("join")]),s._v(" apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("div",{staticClass:"tip custom-block"},[t("ul",[t("li",[s._v("将 x.x.x.x 替换为 demo-master-a-1 的实际 ip")]),s._v(" "),t("li",[s._v("将 kubeadm join 命令后的参数替换为上一个步骤中实际从 demo-master-a-1 节点获得的参数")])])]),s._v(" "),t("h3",{attrs:{id:"检查初始化结果"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查初始化结果","aria-hidden":"true"}},[s._v("#")]),s._v(" 检查初始化结果")]),s._v(" "),t("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl get nodes\n")])])]),t("p",[t("img",{attrs:{src:e(335),alt:"image-20190715193838012"}})]),s._v(" "),t("h2",{attrs:{id:"移除-worker-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移除-worker-节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 移除 worker 节点")]),s._v(" "),t("div",{staticClass:"warning custom-block"},[t("p",[s._v("正常情况下,您无需移除 worker 节点,如果添加到集群出错,您可以移除 worker 节点,再重新尝试添加")])]),s._v(" "),t("p",[s._v("在准备移除的 worker 节点上执行")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubeadm reset\n")])])]),t("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl delete node demo-worker-x-x\n")])])]),t("div",{staticClass:"tip custom-block"},[t("ul",[t("li",[s._v("将 demo-worker-x-x 替换为要移除的 worker 节点的名字")]),s._v(" "),t("li",[s._v("worker 节点的名字可以通过在节点 demo-master-a-1 上执行 kubectl get nodes 命令获得")])])]),s._v(" "),t("h2",{attrs:{id:"安装-ingress-controller"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 Ingress Controller")]),s._v(" "),t("blockquote",[t("p",[s._v("Ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),s._v(" "),t("p",[s._v("Ingress Controllers官网介绍:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/")]),s._v(" "),t("p",[s._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),s._v(" "),t("p",[s._v("kubernetes支持多种Ingress Controllers,本文推荐使用 https://github.com/nginxinc/kubernetes-ingress")])]),s._v(" "),t("p",[t("strong",[s._v("在 demo-master-a-1 上执行")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),t("p",[t("strong",[s._v("配置域名解析")])]),s._v(" "),t("p",[s._v("将域名 *.demo.yourdomain.com 解析到 demo-worker-a-2 的 IP 地址 z.z.z.z (也可以是 demo-worker-a-1 的地址 y.y.y.y)")]),s._v(" "),t("div",{staticClass:"tip custom-block"},[t("p",[s._v("由于需要申请域名,过程会比较繁琐,有如下两种替代方案:")]),s._v(" "),t("ul",[t("li",[s._v("在您的客户端机器(访问部署在K8S上的 web 应用的浏览器所在的机器)设置 hosts 配置;")]),s._v(" "),t("li",[s._v("暂时放弃域名的配置,临时使用 NodePort 或者 "),t("code",[s._v("kubectl port-forward")]),s._v(" 的方式访问部署在 K8S 上的 web 应用")])])]),s._v(" "),t("p",[t("strong",[s._v("验证配置")])]),s._v(" "),t("p",[s._v("在浏览器访问 a.demo.yourdomain.com,将得到 404 NotFound 错误页面")]),s._v(" "),t("h2",{attrs:{id:"下一步"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#下一步","aria-hidden":"true"}},[s._v("#")]),s._v(" 下一步")]),s._v(" "),t("p",[s._v("🎉 🎉 🎉")]),s._v(" "),t("p",[s._v("您已经完成了 Kubernetes 集群的安装,下一步请:")]),s._v(" "),t("p",[t("a",{attrs:{href:"/install/install-dashboard"}},[s._v("安装 Kuboard")])])])},[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/18.a70e8de3.js b/docs/assets/js/18.dde79d88.js similarity index 94% rename from docs/assets/js/18.a70e8de3.js rename to docs/assets/js/18.dde79d88.js index 320b460..670f4ac 100644 --- a/docs/assets/js/18.a70e8de3.js +++ b/docs/assets/js/18.dde79d88.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{322:function(a,t,s){a.exports=s.p+"assets/img/1563696697515.94512132.png"},323:function(a,t,s){a.exports=s.p+"assets/img/1563697667480.8c846298.png"},324:function(a,t,s){a.exports=s.p+"assets/img/1563698644736.d67b2e09.png"},325:function(a,t,s){a.exports=s.p+"assets/img/1563698714557.fa1eeb1c.png"},326:function(a,t,s){a.exports=s.p+"assets/img/1563698865448.2cbaf53a.png"},387:function(a,t,s){"use strict";s.r(t);var e=s(0),r=Object(e.a)({},function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"在单机使用-kind-安装-kubernetes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#在单机使用-kind-安装-kubernetes","aria-hidden":"true"}},[a._v("#")]),a._v(" 在单机使用 kind 安装 Kubernetes")]),a._v(" "),e("p",[a._v("本文旨在通过使用 kind 搭建本地 k8s 集群环境,为技术爱好者提供快速上手 Kuboard 的基本实践方式。")]),a._v(" "),e("h2",{attrs:{id:"环境简介"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#环境简介","aria-hidden":"true"}},[a._v("#")]),a._v(" 环境简介")]),a._v(" "),e("p",[a._v("本地搭建 k8s 集群需要 kind 工具及 docker 环境。")]),a._v(" "),e("p",[a._v("建议硬件配置:2核 cpu,8G 内存")]),a._v(" "),e("p",[a._v("ps: 以下均为在 Linux 平台实践,其他平台可参考文章中链接。")]),a._v(" "),e("h3",{attrs:{id:"kind-简介与安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kind-简介与安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kind 简介与安装")]),a._v(" "),e("p",[a._v("kind:https://kind.sigs.k8s.io/ 是一个使用 Docker 容器运行本地 Kubernetes 集群的工具。\nps:本文使用kind V0.4.0")]),a._v(" "),e("p",[a._v("安装:")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("linux:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -Lo ./kind-linux-amd64 https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-linux-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" +x ./kind-linux-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" ./kind-linux-amd64 /usr/local/bin/kind\n")])])])]),a._v(" "),e("li",[e("p",[a._v("win:")]),a._v(" "),e("div",{staticClass:"language-powershell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-powershell"}},[e("code",[a._v("curl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("Lo kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe https:"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("github"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("com"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kubernetes"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("sigs"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("releases"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("download"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("v0"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("4"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("0"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("Move-Item")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("\\kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe c:\\some"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("dir")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-in")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("your"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("PATH\\kind"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe\n")])])])]),a._v(" "),e("li",[e("p",[a._v("mac:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -Lo ./kind-darwin-amd64 https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-darwin-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" +x ./kind-darwin-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" ./kind-darwin-amd64 /usr/local/bin/kind\n")])])])])]),a._v(" "),e("h3",{attrs:{id:"docker-环境"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#docker-环境","aria-hidden":"true"}},[a._v("#")]),a._v(" docker 环境")]),a._v(" "),e("p",[a._v("Kind 的主要功能目前需要有 Docker 环境的支持,可参考 Docker 官方文档:https://links.jianshu.com/go?to=https%3A%2F%2Fdocs.docker.com%2Finstall%2F 进行安装。")]),a._v(" "),e("h3",{attrs:{id:"kubectl-安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kubectl-安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kubectl 安装")]),a._v(" "),e("p",[a._v("kubectl https://kubernetes.io/docs/tasks/tools/install-kubectl/ 是 Kubernetes 命令行工具,可以在 Kubernetes 上部署和管理应用程序")]),a._v(" "),e("p",[a._v("Linux:")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl\nchmod +x ./kubectl\nsudo mv ./kubectl /usr/local/bin/kubectl\n")])])]),e("p",[a._v("ps: 由于网络问题多次尝试可下载成功")]),a._v(" "),e("h2",{attrs:{id:"k8s-集群搭建"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#k8s-集群搭建","aria-hidden":"true"}},[a._v("#")]),a._v(" k8s 集群搭建")]),a._v(" "),e("h3",{attrs:{id:"准备-kind-搭建集群配置文件-kind-config-yaml"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#准备-kind-搭建集群配置文件-kind-config-yaml","aria-hidden":"true"}},[a._v("#")]),a._v(" 准备 kind 搭建集群配置文件 kind-config.yaml")]),a._v(" "),e("div",{staticClass:"language-yaml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yaml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" Cluster\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" kind.sigs.k8s.io/v1alpha3\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("nodes")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("role")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" control"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("plane\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("role")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" worker\n")])])]),e("h3",{attrs:{id:"使用-kind-搭建集群"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#使用-kind-搭建集群","aria-hidden":"true"}},[a._v("#")]),a._v(" 使用 kind 搭建集群")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kind create cluster --config kind-config.yaml\n")])])]),e("h3",{attrs:{id:"创建成功"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#创建成功","aria-hidden":"true"}},[a._v("#")]),a._v(" 创建成功")]),a._v(" "),e("p",[e("img",{attrs:{src:s(322),alt:"1563696697515"}})]),a._v(" "),e("p",[a._v("按照提示配置环境变量")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v('export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"\n')])])]),e("p",[a._v("查看集群信息")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl cluster-info\n")])])]),e("p",[e("img",{attrs:{src:s(323),alt:"1563697667480"}})]),a._v(" "),e("h2",{attrs:{id:"kuboard-安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kuboard-安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kuboard 安装")]),a._v(" "),e("p",[a._v("官方安装地址:http://kuboard.cn/#/install/install-dashboard")]),a._v(" "),e("h3",{attrs:{id:"获取并修改-yaml-文件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#获取并修改-yaml-文件","aria-hidden":"true"}},[a._v("#")]),a._v(" 获取并修改 yaml 文件")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml\n")])])]),e("p",[a._v("修改文件 kuboard.yaml 中 Ingress 的 host 为空")]),a._v(" "),e("h3",{attrs:{id:"执行安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#执行安装","aria-hidden":"true"}},[a._v("#")]),a._v(" 执行安装")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl apply -f kuboard.yaml \n")])])]),e("h3",{attrs:{id:"查看启动状态"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#查看启动状态","aria-hidden":"true"}},[a._v("#")]),a._v(" 查看启动状态")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl get pods -n kube-system --watch\n")])])]),e("p",[a._v("等待 kuboard 启动成功")]),a._v(" "),e("h3",{attrs:{id:"访问-kuboard-页面"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#访问-kuboard-页面","aria-hidden":"true"}},[a._v("#")]),a._v(" 访问 kuboard 页面")]),a._v(" "),e("p",[a._v("待启动成功后,需要做 80 端口转发,通过浏览器访问 kuboard")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl port-forward service/kuboard 9080:80 -n kube-system\n")])])]),e("p",[a._v("获取登录 token")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl -n kube-system describe secret "),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("kubectl -n kube-system get secret "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("grep")]),a._v(" kuboard-user "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{print "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$1")]),a._v("}'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(" \n")])])]),e("p",[e("img",{attrs:{src:s(324),alt:"1563698644736"}})]),a._v(" "),e("p",[a._v("浏览器中访问 http://localhost:9080")]),a._v(" "),e("p",[e("img",{attrs:{src:s(325),alt:"1563698714557"}})]),a._v(" "),e("p",[a._v("将获取的 token 复制到浏览器中,访问成功")]),a._v(" "),e("p",[e("img",{attrs:{src:s(326),alt:"1563698865448"}})])])},[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{323:function(a,t,s){a.exports=s.p+"assets/img/1563696697515.94512132.png"},324:function(a,t,s){a.exports=s.p+"assets/img/1563697667480.8c846298.png"},325:function(a,t,s){a.exports=s.p+"assets/img/1563698644736.d67b2e09.png"},326:function(a,t,s){a.exports=s.p+"assets/img/1563698714557.fa1eeb1c.png"},327:function(a,t,s){a.exports=s.p+"assets/img/1563698865448.2cbaf53a.png"},387:function(a,t,s){"use strict";s.r(t);var e=s(0),r=Object(e.a)({},function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"在单机使用-kind-安装-kubernetes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#在单机使用-kind-安装-kubernetes","aria-hidden":"true"}},[a._v("#")]),a._v(" 在单机使用 kind 安装 Kubernetes")]),a._v(" "),e("p",[a._v("本文旨在通过使用 kind 搭建本地 k8s 集群环境,为技术爱好者提供快速上手 Kuboard 的基本实践方式。")]),a._v(" "),e("h2",{attrs:{id:"环境简介"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#环境简介","aria-hidden":"true"}},[a._v("#")]),a._v(" 环境简介")]),a._v(" "),e("p",[a._v("本地搭建 k8s 集群需要 kind 工具及 docker 环境。")]),a._v(" "),e("p",[a._v("建议硬件配置:2核 cpu,8G 内存")]),a._v(" "),e("p",[a._v("ps: 以下均为在 Linux 平台实践,其他平台可参考文章中链接。")]),a._v(" "),e("h3",{attrs:{id:"kind-简介与安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kind-简介与安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kind 简介与安装")]),a._v(" "),e("p",[a._v("kind:https://kind.sigs.k8s.io/ 是一个使用 Docker 容器运行本地 Kubernetes 集群的工具。\nps:本文使用kind V0.4.0")]),a._v(" "),e("p",[a._v("安装:")]),a._v(" "),e("ul",[e("li",[e("p",[a._v("linux:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -Lo ./kind-linux-amd64 https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-linux-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" +x ./kind-linux-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" ./kind-linux-amd64 /usr/local/bin/kind\n")])])])]),a._v(" "),e("li",[e("p",[a._v("win:")]),a._v(" "),e("div",{staticClass:"language-powershell extra-class"},[e("pre",{pre:!0,attrs:{class:"language-powershell"}},[e("code",[a._v("curl"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("Lo kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe https:"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("github"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("com"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kubernetes"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("sigs"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("releases"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("download"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("v0"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("4"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("0"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("/")]),a._v("kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("Move-Item")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("\\kind"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("windows"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("amd64"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe c:\\some"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("dir")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-in")]),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("your"),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("-")]),a._v("PATH\\kind"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(".")]),a._v("exe\n")])])])]),a._v(" "),e("li",[e("p",[a._v("mac:")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -Lo ./kind-darwin-amd64 https://github.com/kubernetes-sigs/kind/releases/download/v0.4.0/kind-darwin-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("chmod")]),a._v(" +x ./kind-darwin-amd64\n"),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("mv")]),a._v(" ./kind-darwin-amd64 /usr/local/bin/kind\n")])])])])]),a._v(" "),e("h3",{attrs:{id:"docker-环境"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#docker-环境","aria-hidden":"true"}},[a._v("#")]),a._v(" docker 环境")]),a._v(" "),e("p",[a._v("Kind 的主要功能目前需要有 Docker 环境的支持,可参考 Docker 官方文档:https://links.jianshu.com/go?to=https%3A%2F%2Fdocs.docker.com%2Finstall%2F 进行安装。")]),a._v(" "),e("h3",{attrs:{id:"kubectl-安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kubectl-安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kubectl 安装")]),a._v(" "),e("p",[a._v("kubectl https://kubernetes.io/docs/tasks/tools/install-kubectl/ 是 Kubernetes 命令行工具,可以在 Kubernetes 上部署和管理应用程序")]),a._v(" "),e("p",[a._v("Linux:")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/linux/amd64/kubectl\nchmod +x ./kubectl\nsudo mv ./kubectl /usr/local/bin/kubectl\n")])])]),e("p",[a._v("ps: 由于网络问题多次尝试可下载成功")]),a._v(" "),e("h2",{attrs:{id:"k8s-集群搭建"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#k8s-集群搭建","aria-hidden":"true"}},[a._v("#")]),a._v(" k8s 集群搭建")]),a._v(" "),e("h3",{attrs:{id:"准备-kind-搭建集群配置文件-kind-config-yaml"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#准备-kind-搭建集群配置文件-kind-config-yaml","aria-hidden":"true"}},[a._v("#")]),a._v(" 准备 kind 搭建集群配置文件 kind-config.yaml")]),a._v(" "),e("div",{staticClass:"language-yaml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yaml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" Cluster\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" kind.sigs.k8s.io/v1alpha3\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("nodes")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("role")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" control"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("plane\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("role")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" worker\n")])])]),e("h3",{attrs:{id:"使用-kind-搭建集群"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#使用-kind-搭建集群","aria-hidden":"true"}},[a._v("#")]),a._v(" 使用 kind 搭建集群")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kind create cluster --config kind-config.yaml\n")])])]),e("h3",{attrs:{id:"创建成功"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#创建成功","aria-hidden":"true"}},[a._v("#")]),a._v(" 创建成功")]),a._v(" "),e("p",[e("img",{attrs:{src:s(323),alt:"1563696697515"}})]),a._v(" "),e("p",[a._v("按照提示配置环境变量")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v('export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"\n')])])]),e("p",[a._v("查看集群信息")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl cluster-info\n")])])]),e("p",[e("img",{attrs:{src:s(324),alt:"1563697667480"}})]),a._v(" "),e("h2",{attrs:{id:"kuboard-安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#kuboard-安装","aria-hidden":"true"}},[a._v("#")]),a._v(" kuboard 安装")]),a._v(" "),e("p",[a._v("官方安装地址:http://kuboard.cn/#/install/install-dashboard")]),a._v(" "),e("h3",{attrs:{id:"获取并修改-yaml-文件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#获取并修改-yaml-文件","aria-hidden":"true"}},[a._v("#")]),a._v(" 获取并修改 yaml 文件")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml\n")])])]),e("p",[a._v("修改文件 kuboard.yaml 中 Ingress 的 host 为空")]),a._v(" "),e("h3",{attrs:{id:"执行安装"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#执行安装","aria-hidden":"true"}},[a._v("#")]),a._v(" 执行安装")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl apply -f kuboard.yaml \n")])])]),e("h3",{attrs:{id:"查看启动状态"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#查看启动状态","aria-hidden":"true"}},[a._v("#")]),a._v(" 查看启动状态")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl get pods -n kube-system --watch\n")])])]),e("p",[a._v("等待 kuboard 启动成功")]),a._v(" "),e("h3",{attrs:{id:"访问-kuboard-页面"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#访问-kuboard-页面","aria-hidden":"true"}},[a._v("#")]),a._v(" 访问 kuboard 页面")]),a._v(" "),e("p",[a._v("待启动成功后,需要做 80 端口转发,通过浏览器访问 kuboard")]),a._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[a._v("kubectl port-forward service/kuboard 9080:80 -n kube-system\n")])])]),e("p",[a._v("获取登录 token")]),a._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[a._v("kubectl -n kube-system describe secret "),e("span",{pre:!0,attrs:{class:"token variable"}},[e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$(")]),a._v("kubectl -n kube-system get secret "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("grep")]),a._v(" kuboard-user "),e("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[a._v("awk")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'{print "),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v("$1")]),a._v("}'")]),e("span",{pre:!0,attrs:{class:"token variable"}},[a._v(")")])]),a._v(" \n")])])]),e("p",[e("img",{attrs:{src:s(325),alt:"1563698644736"}})]),a._v(" "),e("p",[a._v("浏览器中访问 http://localhost:9080")]),a._v(" "),e("p",[e("img",{attrs:{src:s(326),alt:"1563698714557"}})]),a._v(" "),e("p",[a._v("将获取的 token 复制到浏览器中,访问成功")]),a._v(" "),e("p",[e("img",{attrs:{src:s(327),alt:"1563698865448"}})])])},[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/19.f3e134a0.js b/docs/assets/js/19.0e01dbdd.js similarity index 94% rename from docs/assets/js/19.f3e134a0.js rename to docs/assets/js/19.0e01dbdd.js index 0887347..6c7e319 100644 --- a/docs/assets/js/19.f3e134a0.js +++ b/docs/assets/js/19.0e01dbdd.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{107:function(e,r,a){e.exports=a.p+"assets/img/kuboard_qq.45e78dbf.png"},146:function(e,r,a){e.exports=a.p+"assets/img/image-20190716234146419.bd87cdff.png"},329:function(e,r,a){e.exports=a.p+"assets/img/image-20190721154650916.3f63fdcb.jpg"},330:function(e,r,a){e.exports=a.p+"assets/img/image-20190723105039358.91eef75a.png"},331:function(e,r,a){e.exports=a.p+"assets/img/image-20190721000759925.bb32a332.png"},376:function(e,r,a){"use strict";a.r(r);var t=a(0),s=Object(t.a)({},function(){var e=this,r=e.$createElement,t=e._self._c||r;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h2",{attrs:{id:"为什么选择-kuboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#为什么选择-kuboard","aria-hidden":"true"}},[e._v("#")]),e._v(" 为什么选择 Kuboard")]),e._v(" "),t("p",[e._v("Kubernetes 已然是当下容器编排领域事实上的标准,各大云服务商都急于推出 Kubernetes 服务,互联网公司也纷纷跟进,将自己的应用容器化,并使用 Kubernetes 编排。")]),e._v(" "),t("p",[e._v("在 Kubernetes 图形化工具方面,我们已经获得了极大的可选择空间:")]),e._v(" "),t("ul",[t("li",[e._v("各云服务商自己推出的 Kubernetes 服务所搭载的管理控制台,例如 阿里云的 Kubernetes 服务,青云推出的 KubeSphere,其他云服务商的 CaaS 类服务")]),e._v(" "),t("li",[e._v("Kubernetes 官方的图形管理界面 Kubernetes Dashboard")]),e._v(" "),t("li",[e._v("面向企业私有化部署的 Rancher")])]),e._v(" "),t("p",[e._v("什么场景下更适合选择 Kuboard 呢?")]),e._v(" "),t("h2",{attrs:{id:"kubernetes-入门学习者"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-入门学习者","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 入门学习者")]),e._v(" "),t("p",[e._v("​\tKuboard类似于 Kubernetes Dashboard,是一款轻量级产品,按照 Kuboard 的文档,您可以很快地搭建一套学习 Kubernetes 用的集群环境,您也可以在自己已经有的集群上轻易地完成 Kuboard 的安装。")]),e._v(" "),t("p",[e._v("​\t对于 K8S 入门学习者来说,看了那么多 Kubernetes 文章,了解了许多的跟 apiserver、etcd、pod、container、service、ingress、storage class等各种概念,都不如比不上自己动手搭一套 K8S 环境,并在其上部署一套微服务应用的效果好。Kuboard 完全采用场景化的设计,操作过程更适合人们的思考方式。例如,集群概览的展示方式、名称空间的展示方式。")]),e._v(" "),t("h3",{attrs:{id:"集群概览"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#集群概览","aria-hidden":"true"}},[e._v("#")]),e._v(" 集群概览")]),e._v(" "),t("p",[e._v("在 Kuboard 中,集群概览的展现形式如下:")]),e._v(" "),t("p",[e._v("​\t计算资源、存储资源并列在集群概览的下层,上层则是运行于计算资源与存储资源上的名称空间(应用)。")]),e._v(" "),t("p",[t("img",{attrs:{src:a(146),alt:"集群概览"}})]),e._v(" "),t("h3",{attrs:{id:"名称空间"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#名称空间","aria-hidden":"true"}},[e._v("#")]),e._v(" 名称空间")]),e._v(" "),t("p",[e._v("在 Kuboard 中,名称空间的展示形式如下:")]),e._v(" "),t("p",[e._v("​\t以微服务参考分层架构的形式,将所有的微服务分为如下几层:")]),e._v(" "),t("ul",[t("li",[e._v("展现层\n"),t("ul",[t("li",[e._v("终端用户访问的 Web 应用")])])]),e._v(" "),t("li",[e._v("API网关层\n"),t("ul",[t("li",[e._v("Spring Cloud Gateway / Zuul /Kong 等接口网关")])])]),e._v(" "),t("li",[e._v("微服务层\n"),t("ul",[t("li",[e._v("Spring Boot 微服务,或 PHP / Python 实现的微服务")])])]),e._v(" "),t("li",[e._v("持久层\n"),t("ul",[t("li",[e._v("MySQL 数据库等(开发及测试环境里,将MySQL部署于 Kubernetes 可以极大地降低环境维护的任务量)")])])]),e._v(" "),t("li",[e._v("中间件层\n"),t("ul",[t("li",[e._v("消息队列")]),e._v(" "),t("li",[e._v("服务注册 Eureka / Zookeeper / Consul 等")])])]),e._v(" "),t("li",[e._v("监控层\n"),t("ul",[t("li",[e._v("Prometheus + Grafana")]),e._v(" "),t("li",[e._v("Pinpooint 等")])])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(329),alt:"image-20190721154650916"}})]),e._v(" "),t("p",[e._v("​\t更为贴心的,当某一个工作负载存在部署方面的问题时, Kuboard 将以红色高亮出该工作负载,并配有合适的方式辅助用户定位错误信息。")]),e._v(" "),t("h3",{attrs:{id:"无需手写-yaml"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#无需手写-yaml","aria-hidden":"true"}},[e._v("#")]),e._v(" 无需手写 Yaml")]),e._v(" "),t("p",[e._v("​\t学习 Kubernetes 时,需要花费许多的时间,在理解一个概念之后,模仿着写一个 yaml 文件,再使用 kubectl 应用该文件。")]),e._v(" "),t("p",[e._v("​\t使用 Kuboard 提供的工作负载编辑器,可以直观的完成应用的部署")]),e._v(" "),t("p",[t("img",{attrs:{src:a(330),alt:"image-20190723105039358"}})]),e._v(" "),t("h2",{attrs:{id:"kubernetes-日常运维人员"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-日常运维人员","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 日常运维人员")]),e._v(" "),t("p",[e._v("​\tkubectl 的命令敲了许多遍了?yaml 文件越来越多,结构越来越复杂?又要部署一套测试环境,用来进行 UAT 测试?")]),e._v(" "),t("h3",{attrs:{id:"纯图形界面运维-kubernetes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#纯图形界面运维-kubernetes","aria-hidden":"true"}},[e._v("#")]),e._v(" 纯图形界面运维 Kubernetes")]),e._v(" "),t("p",[e._v("在作者的日常运维工作中,除了 kubectl port-forward 还需要回到命令行界面以外,其他运维任务已经全部在 Kuboard 中轻松完成。更让人期待的是,Kuboard 作者还计划实现 port-forward 的功能,如此一来,作者日后就完全不再需要使用 kubectl 了。")]),e._v(" "),t("h3",{attrs:{id:"多环境复制"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#多环境复制","aria-hidden":"true"}},[e._v("#")]),e._v(" 多环境复制")]),e._v(" "),t("p",[e._v("为了能够是你的一套 yaml 文件适应多种部署(开发环境、测试环境、UAT环境、生产环境),您一定尝试过各种办法,例如 helmer chart, kustomize, kubectl apply -k directory_name,但是您本来可以更轻松地完成这样的任务的。")]),e._v(" "),t("p",[e._v("Kuboard 提供了 工作负载导出和导入的功能,0 yaml文件,轻松复制多个环境。")]),e._v(" "),t("h3",{attrs:{id:"应用升级"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#应用升级","aria-hidden":"true"}},[e._v("#")]),e._v(" 应用升级")]),e._v(" "),t("p",[e._v("Kuboard 提供批量修改容器镜像版本的功能,轻松升级应用程序的版本。")]),e._v(" "),t("p",[t("img",{attrs:{src:a(331),alt:"image-20190721000759925"}})]),e._v(" "),t("h2",{attrs:{id:"_0-侵入性"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_0-侵入性","aria-hidden":"true"}},[e._v("#")]),e._v(" 0 侵入性")]),e._v(" "),t("p",[e._v("​\tRancher 为了支持多云管理(MeSos,Docker Swarm,Kubernetes等),引入了一系列复杂的概念,又需要新增安装 Rancher Server、Rancher Agent等,本来学习 Kubernetes 已然不堪重负,Rancher再把多云整合到一起来,无疑又增加了学习和使用的复杂性。如果您只是打算使用 Kubernetes 的话,也许并不需要选择 Rancher 这样重量级的产品。Kuboard 仅仅依赖于原生 Kubernetes,可以运行在各种公有云、私有云上,您也可以自己基于物理机、vsphere、vmware等已经有的基础设施搭建 Kubernetes,轻松实现现有 Infrastructure 的容器化改造。")]),e._v(" "),t("h2",{attrs:{id:"更多资料"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#更多资料","aria-hidden":"true"}},[e._v("#")]),e._v(" 更多资料")]),e._v(" "),t("p",[e._v("Kuboard 官网 http://kuboard.cn")]),e._v(" "),t("p",[e._v("Kuboard QQ 群")]),e._v(" "),t("p",[t("img",{attrs:{src:a(107),alt:"Kuboard QQ 群"}})])])},[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{107:function(e,r,a){e.exports=a.p+"assets/img/kuboard_qq.45e78dbf.png"},146:function(e,r,a){e.exports=a.p+"assets/img/image-20190716234146419.bd87cdff.png"},330:function(e,r,a){e.exports=a.p+"assets/img/image-20190721154650916.3f63fdcb.jpg"},331:function(e,r,a){e.exports=a.p+"assets/img/image-20190723105039358.91eef75a.png"},332:function(e,r,a){e.exports=a.p+"assets/img/image-20190721000759925.bb32a332.png"},360:function(e,r,a){"use strict";a.r(r);var t=a(0),s=Object(t.a)({},function(){var e=this,r=e.$createElement,t=e._self._c||r;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("h2",{attrs:{id:"为什么选择-kuboard"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#为什么选择-kuboard","aria-hidden":"true"}},[e._v("#")]),e._v(" 为什么选择 Kuboard")]),e._v(" "),t("p",[e._v("Kubernetes 已然是当下容器编排领域事实上的标准,各大云服务商都急于推出 Kubernetes 服务,互联网公司也纷纷跟进,将自己的应用容器化,并使用 Kubernetes 编排。")]),e._v(" "),t("p",[e._v("在 Kubernetes 图形化工具方面,我们已经获得了极大的可选择空间:")]),e._v(" "),t("ul",[t("li",[e._v("各云服务商自己推出的 Kubernetes 服务所搭载的管理控制台,例如 阿里云的 Kubernetes 服务,青云推出的 KubeSphere,其他云服务商的 CaaS 类服务")]),e._v(" "),t("li",[e._v("Kubernetes 官方的图形管理界面 Kubernetes Dashboard")]),e._v(" "),t("li",[e._v("面向企业私有化部署的 Rancher")])]),e._v(" "),t("p",[e._v("什么场景下更适合选择 Kuboard 呢?")]),e._v(" "),t("h2",{attrs:{id:"kubernetes-入门学习者"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-入门学习者","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 入门学习者")]),e._v(" "),t("p",[e._v("​\tKuboard类似于 Kubernetes Dashboard,是一款轻量级产品,按照 Kuboard 的文档,您可以很快地搭建一套学习 Kubernetes 用的集群环境,您也可以在自己已经有的集群上轻易地完成 Kuboard 的安装。")]),e._v(" "),t("p",[e._v("​\t对于 K8S 入门学习者来说,看了那么多 Kubernetes 文章,了解了许多的跟 apiserver、etcd、pod、container、service、ingress、storage class等各种概念,都不如比不上自己动手搭一套 K8S 环境,并在其上部署一套微服务应用的效果好。Kuboard 完全采用场景化的设计,操作过程更适合人们的思考方式。例如,集群概览的展示方式、名称空间的展示方式。")]),e._v(" "),t("h3",{attrs:{id:"集群概览"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#集群概览","aria-hidden":"true"}},[e._v("#")]),e._v(" 集群概览")]),e._v(" "),t("p",[e._v("在 Kuboard 中,集群概览的展现形式如下:")]),e._v(" "),t("p",[e._v("​\t计算资源、存储资源并列在集群概览的下层,上层则是运行于计算资源与存储资源上的名称空间(应用)。")]),e._v(" "),t("p",[t("img",{attrs:{src:a(146),alt:"集群概览"}})]),e._v(" "),t("h3",{attrs:{id:"名称空间"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#名称空间","aria-hidden":"true"}},[e._v("#")]),e._v(" 名称空间")]),e._v(" "),t("p",[e._v("在 Kuboard 中,名称空间的展示形式如下:")]),e._v(" "),t("p",[e._v("​\t以微服务参考分层架构的形式,将所有的微服务分为如下几层:")]),e._v(" "),t("ul",[t("li",[e._v("展现层\n"),t("ul",[t("li",[e._v("终端用户访问的 Web 应用")])])]),e._v(" "),t("li",[e._v("API网关层\n"),t("ul",[t("li",[e._v("Spring Cloud Gateway / Zuul /Kong 等接口网关")])])]),e._v(" "),t("li",[e._v("微服务层\n"),t("ul",[t("li",[e._v("Spring Boot 微服务,或 PHP / Python 实现的微服务")])])]),e._v(" "),t("li",[e._v("持久层\n"),t("ul",[t("li",[e._v("MySQL 数据库等(开发及测试环境里,将MySQL部署于 Kubernetes 可以极大地降低环境维护的任务量)")])])]),e._v(" "),t("li",[e._v("中间件层\n"),t("ul",[t("li",[e._v("消息队列")]),e._v(" "),t("li",[e._v("服务注册 Eureka / Zookeeper / Consul 等")])])]),e._v(" "),t("li",[e._v("监控层\n"),t("ul",[t("li",[e._v("Prometheus + Grafana")]),e._v(" "),t("li",[e._v("Pinpooint 等")])])])]),e._v(" "),t("p",[t("img",{attrs:{src:a(330),alt:"image-20190721154650916"}})]),e._v(" "),t("p",[e._v("​\t更为贴心的,当某一个工作负载存在部署方面的问题时, Kuboard 将以红色高亮出该工作负载,并配有合适的方式辅助用户定位错误信息。")]),e._v(" "),t("h3",{attrs:{id:"无需手写-yaml"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#无需手写-yaml","aria-hidden":"true"}},[e._v("#")]),e._v(" 无需手写 Yaml")]),e._v(" "),t("p",[e._v("​\t学习 Kubernetes 时,需要花费许多的时间,在理解一个概念之后,模仿着写一个 yaml 文件,再使用 kubectl 应用该文件。")]),e._v(" "),t("p",[e._v("​\t使用 Kuboard 提供的工作负载编辑器,可以直观的完成应用的部署")]),e._v(" "),t("p",[t("img",{attrs:{src:a(331),alt:"image-20190723105039358"}})]),e._v(" "),t("h2",{attrs:{id:"kubernetes-日常运维人员"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-日常运维人员","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 日常运维人员")]),e._v(" "),t("p",[e._v("​\tkubectl 的命令敲了许多遍了?yaml 文件越来越多,结构越来越复杂?又要部署一套测试环境,用来进行 UAT 测试?")]),e._v(" "),t("h3",{attrs:{id:"纯图形界面运维-kubernetes"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#纯图形界面运维-kubernetes","aria-hidden":"true"}},[e._v("#")]),e._v(" 纯图形界面运维 Kubernetes")]),e._v(" "),t("p",[e._v("在作者的日常运维工作中,除了 kubectl port-forward 还需要回到命令行界面以外,其他运维任务已经全部在 Kuboard 中轻松完成。更让人期待的是,Kuboard 作者还计划实现 port-forward 的功能,如此一来,作者日后就完全不再需要使用 kubectl 了。")]),e._v(" "),t("h3",{attrs:{id:"多环境复制"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#多环境复制","aria-hidden":"true"}},[e._v("#")]),e._v(" 多环境复制")]),e._v(" "),t("p",[e._v("为了能够是你的一套 yaml 文件适应多种部署(开发环境、测试环境、UAT环境、生产环境),您一定尝试过各种办法,例如 helmer chart, kustomize, kubectl apply -k directory_name,但是您本来可以更轻松地完成这样的任务的。")]),e._v(" "),t("p",[e._v("Kuboard 提供了 工作负载导出和导入的功能,0 yaml文件,轻松复制多个环境。")]),e._v(" "),t("h3",{attrs:{id:"应用升级"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#应用升级","aria-hidden":"true"}},[e._v("#")]),e._v(" 应用升级")]),e._v(" "),t("p",[e._v("Kuboard 提供批量修改容器镜像版本的功能,轻松升级应用程序的版本。")]),e._v(" "),t("p",[t("img",{attrs:{src:a(332),alt:"image-20190721000759925"}})]),e._v(" "),t("h2",{attrs:{id:"_0-侵入性"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_0-侵入性","aria-hidden":"true"}},[e._v("#")]),e._v(" 0 侵入性")]),e._v(" "),t("p",[e._v("​\tRancher 为了支持多云管理(MeSos,Docker Swarm,Kubernetes等),引入了一系列复杂的概念,又需要新增安装 Rancher Server、Rancher Agent等,本来学习 Kubernetes 已然不堪重负,Rancher再把多云整合到一起来,无疑又增加了学习和使用的复杂性。如果您只是打算使用 Kubernetes 的话,也许并不需要选择 Rancher 这样重量级的产品。Kuboard 仅仅依赖于原生 Kubernetes,可以运行在各种公有云、私有云上,您也可以自己基于物理机、vsphere、vmware等已经有的基础设施搭建 Kubernetes,轻松实现现有 Infrastructure 的容器化改造。")]),e._v(" "),t("h2",{attrs:{id:"更多资料"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#更多资料","aria-hidden":"true"}},[e._v("#")]),e._v(" 更多资料")]),e._v(" "),t("p",[e._v("Kuboard 官网 http://kuboard.cn")]),e._v(" "),t("p",[e._v("Kuboard QQ 群")]),e._v(" "),t("p",[t("img",{attrs:{src:a(107),alt:"Kuboard QQ 群"}})])])},[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/21.e8207291.js b/docs/assets/js/21.eab2a94a.js similarity index 98% rename from docs/assets/js/21.e8207291.js rename to docs/assets/js/21.eab2a94a.js index a41ee4e..a922c97 100644 --- a/docs/assets/js/21.e8207291.js +++ b/docs/assets/js/21.eab2a94a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{112:function(a,s,e){a.exports=e.p+"assets/img/image-20190715085036593.55559549.png"},113:function(a,s,e){a.exports=e.p+"assets/img/image2019-07-15_09.01.21.0e0d34f2.png"},333:function(a,s,e){a.exports=e.p+"assets/img/image-20190713075717350.df5244cd.png"},334:function(a,s,e){a.exports=e.p+"assets/img/image2019-6-10_15-36-29.2870ee7d.png"},357:function(a,s,e){"use strict";e.r(s);var t=e(0),r=Object(t.a)({},function(){var a=this,s=a.$createElement,t=a._self._c||s;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"安装-kubernetes-高可用"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-kubernetes-高可用","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 Kubernetes 高可用")]),a._v(" "),t("div",{staticClass:"tip custom-block"},[t("p",[a._v("推荐初学者按照 "),t("a",{attrs:{href:"install-k8s"}},[a._v("安装Kubernetes 单Master节点")]),a._v(" 文档进行 Kubernetes 集群搭建")])]),a._v(" "),t("h1",{attrs:{id:"介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#介绍","aria-hidden":"true"}},[a._v("#")]),a._v(" 介绍")]),a._v(" "),t("p",[a._v("kubernetes 安装有多种选择,本文档描述的集群安装具备如下特点:")]),a._v(" "),t("ul",[t("li",[a._v("使用 kubernetes 1.15.0")]),a._v(" "),t("li",[a._v("三个 master 组成主节点集群,通过内网 loader balancer 实现负载均衡")]),a._v(" "),t("li",[a._v("多个 worker 组成工作节点集群,通过外网 loader balancer 实现负载均衡")]),a._v(" "),t("li",[a._v("使用 calico 作为网络插件")]),a._v(" "),t("li",[a._v("使用 nginx-ingress 作为 kubernetes ingress controller")])]),a._v(" "),t("p",[t("a",{attrs:{href:"https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg",target:"_blank",rel:"noopener noreferrer"}},[a._v("领取阿里云最高2000元红包"),t("OutboundLink")],1)]),a._v(" "),t("p",[a._v("下图为 kubernetes 安装的拓扑图")]),a._v(" "),t("p",[t("img",{attrs:{src:e(333),alt:"image-20190713075717350"}})]),a._v(" "),t("ul",[t("li",[a._v("标准机用于制作 centos 镜像,该镜像预先安装了 docker / kubelet / kubectl / kubeadm, 并预先下载了 kubernetes 所需的 docker image")]),a._v(" "),t("li",[a._v("跳板机用于通过 ssh 端口访问标准机、master 节点、worker 节点的 shell,如果您所使用的环境中,可以直接访问各节点的 shell,也可以无需跳板机")]),a._v(" "),t("li",[a._v("NAT y.y.y.y将 apiserver 的6443端口映射到外网,如果您始终只在 master 节点上执行 kubectl 命令,则无需做此映射")]),a._v(" "),t("li",[a._v("Load Balancer z.z.z.z 是 kubernetes 的 Ingress 外网映射,通常是必须的")])]),a._v(" "),t("h1",{attrs:{id:"安装步骤"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装步骤","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装步骤")]),a._v(" "),t("h2",{attrs:{id:"制作标准机镜像"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[a._v("#")]),a._v(" 制作标准机镜像")]),a._v(" "),t("p",[a._v("通过使用标准机镜像,可以")]),a._v(" "),t("ul",[t("li",[t("strong",[a._v("避免重复执行对测试机安装必要软件的过程")])]),a._v(" "),t("li",[t("strong",[a._v("以一种相对标准化的过程管理测试机的维护")])])]),a._v(" "),t("p",[a._v("标准机镜像中预装了如下内容:")]),a._v(" "),t("ul",[t("li",[a._v("docker")]),a._v(" "),t("li",[a._v("gitlab-runner")]),a._v(" "),t("li",[a._v("kubernetes images")])]),a._v(" "),t("p",[a._v("本文档描述的安装过程已基于 centos 7.6 验证")]),a._v(" "),t("p",[a._v("标准机镜像的制作过程描述如下:")]),a._v(" "),t("h3",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装docker")]),a._v(" "),t("p",[t("strong",[a._v("卸载旧版本")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum remove docker "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-client "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-client-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-common "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-latest-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-engine-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-engine\n")])])]),t("p",[t("strong",[a._v("下载依赖包及安装包")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm\n")])])]),t("p",[t("strong",[a._v("安装")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" docker\n")])])]),t("p",[t("strong",[a._v("启动 docker 服务")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" systemctl start docker\n")])])]),t("p",[t("strong",[a._v("检查 docker 版本")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker version\n")])])]),t("p",[t("strong",[a._v("参考文档")])]),a._v(" "),t("p",[a._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),a._v(" "),t("p",[a._v("https://docs.docker.com/install/linux/linux-postinstall/")]),a._v(" "),t("h3",{attrs:{id:"安装-nfs-utils"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 nfs-utils")]),a._v(" "),t("p",[t("strong",[a._v("执行安装命令")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" nfs-utils\n")])])]),t("p",[a._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),a._v(" "),t("h3",{attrs:{id:"k8s基本配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[a._v("#")]),a._v(" K8S基本配置")]),a._v(" "),t("p",[t("strong",[a._v("配置K8S的yum源")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v("EOF "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" /etc/yum.repos.d/kubernetes.repo\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("kubernetes"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("name")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Kubernetes\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("baseurl")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("repo_gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("gpgkey")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),t("p",[t("strong",[a._v("关闭swap、防火墙")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("swapoff -a\n")])])]),t("p",[t("strong",[a._v("关闭SeLinux")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("setenforce "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n")])])]),t("p",[t("strong",[a._v("修改 /etc/sysctl.conf")])]),a._v(" "),t("p",[t("code",[a._v("vim /etc/sysctl.conf")])]),a._v(" "),t("p",[a._v("向其中添加")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),t("p",[a._v("如下图所示")]),a._v(" "),t("p",[t("img",{attrs:{src:e(112),alt:"image-20190715085036593",title:":size=600x445"}})]),a._v(" "),t("p",[t("strong",[a._v("安装kubelet、kubeadm、kubectl")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0\n")])])]),t("p",[t("strong",[a._v("修改docker Cgroup Driver为systemd")])]),a._v(" "),t("p",[t("code",[a._v("vim /usr/lib/systemd/system/docker.service")])]),a._v(" "),t("p",[a._v("向其中他添加")]),a._v(" "),t("p",[t("code",[a._v("--exec-opt native.cgroupdriver=systemd")])]),a._v(" "),t("p",[a._v("如下图所示")]),a._v(" "),t("p",[t("img",{attrs:{src:e(113),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),a._v(" "),t("p",[a._v("重启 docker")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("systemctl daemon-reload\nsystemctl restart docker\n")])])]),t("p",[t("strong",[a._v("启动kubelet")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" kubelet "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" systemctl start kubelet\n")])])]),t("p",[t("strong",[a._v("加载 kubernetes 镜像")])]),a._v(" "),t("p",[a._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),a._v(" "),t("p",[a._v("执行以下命令添加docker k8s国内镜像源")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sh")]),a._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),t("p",[t("strong",[a._v("拉取k8s相关镜像")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0\ndocker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0\ndocker pull mirrorgooglecontainers/kube-scheduler:v1.15.0\ndocker pull mirrorgooglecontainers/kube-proxy:v1.15.0\ndocker pull mirrorgooglecontainers/pause:3.1\ndocker pull mirrorgooglecontainers/etcd:3.3.10\ndocker pull coredns/coredns:1.3.1\n")])])]),t("p",[t("strong",[a._v("更改镜像名为k8s官网镜像")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0\ndocker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0\ndocker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0\ndocker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0\ndocker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1\ndocker tag eb516548c180 k8s.gcr.io/coredns:1.3.1\ndocker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10\n")])])]),t("p",[t("strong",[a._v("制作镜像")])]),a._v(" "),t("p",[a._v("请参考阿里云基于ECS "),t("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[a._v("制作虚拟机镜像"),t("OutboundLink")],1),a._v(" 的文档")]),a._v(" "),t("h2",{attrs:{id:"初始化api-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化api-server","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化API Server")]),a._v(" "),t("h3",{attrs:{id:"创建-apiserver-的-elb(私网)"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#创建-apiserver-的-elb(私网)","aria-hidden":"true"}},[a._v("#")]),a._v(" 创建 ApiServer 的 ELB(私网)")]),a._v(" "),t("p",[a._v("监听端口:6443 / TCP")]),a._v(" "),t("p",[a._v("后端资源组:包含 apple-master-a-1, apple-master-b-1, apple-master-b-2")]),a._v(" "),t("p",[a._v("后端端口:6443")]),a._v(" "),t("p",[a._v("开启 按源地址保持会话")]),a._v(" "),t("p",[a._v("假设完成创建以后,ELB的 ip 地址为 x.x.x.x")]),a._v(" "),t("h3",{attrs:{id:"初始化第一个master节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化第一个master节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化第一个master节点")]),a._v(" "),t("p",[a._v("在 apple-master-a-1机器上执行")]),a._v(" "),t("p",[t("strong",[a._v("配置 apiserver.apple 的域名")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\n")])])]),t("blockquote",[t("p",[a._v("请替换其中的 x.x.x.x 为您的负载均衡服务器的实际 ip 地址")])]),a._v(" "),t("p",[t("strong",[a._v("创建 /root/k8s/kubeadm-config.yaml")])]),a._v(" "),t("div",{staticClass:"language-yaml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" kubeadm.k8s.io/v1beta1\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" ClusterConfiguration\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kubernetesVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" v1.14.3\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("controlPlaneEndpoint")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"apiserver.apple:6443"')]),a._v("\n\n")])])]),t("p",[t("strong",[a._v("初始化 apiserver")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm init --config"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("/root/k8s/kubeadm-config.yaml --upload-certs\n\n")])])]),t("p",[a._v("执行结果如下图所示:")]),a._v(" "),t("p",[t("img",{attrs:{src:e(334),alt:"image2019-6-10_15-36-29"}})]),a._v(" "),t("p",[t("strong",[a._v("初始化 gitlab-runner 用户的 kubectl 配置")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" -rf /home/gitlab-runner/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("mkdir")]),a._v(" /home/gitlab-runner/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cp")]),a._v(" -i /etc/kubernetes/admin.conf /home/gitlab-runner/.kube/config\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("chown")]),a._v(" -R gitlab-runner:gitlab-runner /home/gitlab-runner/.kube\n")])])]),t("p",[t("strong",[a._v("安装 calico")])]),a._v(" "),t("p",[a._v("(需要在安全组–ServerFarm需要为集群服务器器端口6443建立安全组规则)")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl apply -f "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\t\thttps://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml\n")])])]),t("blockquote",[t("p",[a._v("安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/")])]),a._v(" "),t("p",[t("strong",[a._v("等待calico安装就绪:")])]),a._v(" "),t("p",[a._v("执行如下命令,等待3-10分钟,直到所有的容器组处于 Running 状态")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("watch")]),a._v(" kubectl get pod -n kube-system\n")])])]),t("h3",{attrs:{id:"初始化第二、三个master节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化第二、三个master节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化第二、三个master节点")]),a._v(" "),t("p",[a._v("在 apple-master-b-1 和 apple-master-b-2 机器上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\n")])])]),t("p",[a._v("执行 (以下命令行在初始化 apple-master-a-1 时,被打印在控制台上,执行时应该使用控制台打印出的命令参数)")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token ejwx62.vqwog6il5p83uk7y "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--experimental-control-plane --certificate-key 70eb87e62f052d2d5de759969d5b42f372d0ad798f98df38f7fe73efdf63a13c\n")])])]),t("h3",{attrs:{id:"检查-apiserver初始化结果"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查-apiserver初始化结果","aria-hidden":"true"}},[a._v("#")]),a._v(" 检查 apiserver初始化结果")]),a._v(" "),t("p",[a._v("在第一个master节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl get nodes\n")])])]),t("h2",{attrs:{id:"初始化-worker节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-worker节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化 worker节点")]),a._v(" "),t("h3",{attrs:{id:"获得-join命令参数"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#获得-join命令参数","aria-hidden":"true"}},[a._v("#")]),a._v(" 获得 join命令参数")]),a._v(" "),t("p",[t("strong",[a._v("在第一个master节点 apple-master-a-1 节点执行")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\nkubeadm token create --print-join-command\n")])])]),t("p",[a._v("可获取kubeadm join 命令及参数,如下所示")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("h3",{attrs:{id:"初始化worker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化worker","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化worker")]),a._v(" "),t("p",[t("strong",[a._v("针对所有的 worker 节点执行")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\nkubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("blockquote",[t("ul",[t("li",[t("p",[a._v("将 x.x.x.x 替换为 loader balancer 的实际 ip")])]),a._v(" "),t("li",[t("p",[a._v("将 kubeadm join 命令后的参数替换为上一个步骤中实际从 apple-master-a-1 节点获得的参数")])])])]),a._v(" "),t("h3",{attrs:{id:"检查-apiserver初始化结果-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查-apiserver初始化结果-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 检查 apiserver初始化结果")]),a._v(" "),t("p",[a._v("在第一个master节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl get nodes\n")])])]),t("h2",{attrs:{id:"移除-worker-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移除-worker-节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 移除 worker 节点")]),a._v(" "),t("blockquote",[t("p",[a._v("正常情况下,您无需移除 worker 节点")])]),a._v(" "),t("p",[a._v("在准备移除的 worker 节点上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\t\nkubeadm reset\n")])])]),t("p",[a._v("在第一个 master 节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl delete node apple-worker-x-x\n")])])]),t("blockquote",[t("ul",[t("li",[a._v("将 apple-worker-x-x 替换为要移除的 worker 节点的名字")]),a._v(" "),t("li",[a._v("worker 节点的名字可以通过在第一个 master 节点 apple-master-a-1 上执行 kubectl get nodes 命令获得")])])]),a._v(" "),t("h2",{attrs:{id:"安装-ingress-controller"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 Ingress Controller")]),a._v(" "),t("blockquote",[t("p",[a._v("ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),a._v(" "),t("p",[a._v("Ingress Controllers官网介绍:"),t("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/"),t("OutboundLink")],1)]),a._v(" "),t("p",[a._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),a._v(" "),t("p",[a._v("kubernetes支持多种Ingress Controllers,本文推荐使用")]),a._v(" "),t("p",[a._v("https://github.com/nginxinc/kubernetes-ingress")])]),a._v(" "),t("h3",{attrs:{id:"在-apple-master-a-1-上执行"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#在-apple-master-a-1-上执行","aria-hidden":"true"}},[a._v("#")]),a._v(" 在 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),t("h3",{attrs:{id:"在iaas云控制台完成如下配置(公网elb)"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#在iaas云控制台完成如下配置(公网elb)","aria-hidden":"true"}},[a._v("#")]),a._v(" 在IaaS云控制台完成如下配置("),t("strong",[a._v("公网ELB")]),a._v(")")]),a._v(" "),t("p",[a._v("创建负载均衡 ELB:")]),a._v(" "),t("p",[a._v("​ 监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持")]),a._v(" "),t("p",[a._v("​ 服务器资源池 1: apple-worker-x-x 的所有节点的 80端口")]),a._v(" "),t("p",[a._v("​ 监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持")]),a._v(" "),t("p",[a._v("​ 服务器资源池 2: apple-worker-x-x 的所有节点的443端口")]),a._v(" "),t("p",[a._v("假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z")]),a._v(" "),t("h3",{attrs:{id:"配置域名解析"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置域名解析","aria-hidden":"true"}},[a._v("#")]),a._v(" 配置域名解析")]),a._v(" "),t("p",[a._v("将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z")]),a._v(" "),t("h3",{attrs:{id:"验证配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#验证配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 验证配置")]),a._v(" "),t("p",[a._v("在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面")])])},[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{112:function(a,s,e){a.exports=e.p+"assets/img/image-20190715085036593.55559549.png"},113:function(a,s,e){a.exports=e.p+"assets/img/image2019-07-15_09.01.21.0e0d34f2.png"},345:function(a,s,e){a.exports=e.p+"assets/img/image-20190713075717350.df5244cd.png"},346:function(a,s,e){a.exports=e.p+"assets/img/image2019-6-10_15-36-29.2870ee7d.png"},354:function(a,s,e){"use strict";e.r(s);var t=e(0),r=Object(t.a)({},function(){var a=this,s=a.$createElement,t=a._self._c||s;return t("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[t("h1",{attrs:{id:"安装-kubernetes-高可用"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-kubernetes-高可用","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 Kubernetes 高可用")]),a._v(" "),t("div",{staticClass:"tip custom-block"},[t("p",[a._v("推荐初学者按照 "),t("a",{attrs:{href:"install-k8s"}},[a._v("安装Kubernetes 单Master节点")]),a._v(" 文档进行 Kubernetes 集群搭建")])]),a._v(" "),t("h1",{attrs:{id:"介绍"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#介绍","aria-hidden":"true"}},[a._v("#")]),a._v(" 介绍")]),a._v(" "),t("p",[a._v("kubernetes 安装有多种选择,本文档描述的集群安装具备如下特点:")]),a._v(" "),t("ul",[t("li",[a._v("使用 kubernetes 1.15.0")]),a._v(" "),t("li",[a._v("三个 master 组成主节点集群,通过内网 loader balancer 实现负载均衡")]),a._v(" "),t("li",[a._v("多个 worker 组成工作节点集群,通过外网 loader balancer 实现负载均衡")]),a._v(" "),t("li",[a._v("使用 calico 作为网络插件")]),a._v(" "),t("li",[a._v("使用 nginx-ingress 作为 kubernetes ingress controller")])]),a._v(" "),t("p",[t("a",{attrs:{href:"https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg",target:"_blank",rel:"noopener noreferrer"}},[a._v("领取阿里云最高2000元红包"),t("OutboundLink")],1)]),a._v(" "),t("p",[a._v("下图为 kubernetes 安装的拓扑图")]),a._v(" "),t("p",[t("img",{attrs:{src:e(345),alt:"image-20190713075717350"}})]),a._v(" "),t("ul",[t("li",[a._v("标准机用于制作 centos 镜像,该镜像预先安装了 docker / kubelet / kubectl / kubeadm, 并预先下载了 kubernetes 所需的 docker image")]),a._v(" "),t("li",[a._v("跳板机用于通过 ssh 端口访问标准机、master 节点、worker 节点的 shell,如果您所使用的环境中,可以直接访问各节点的 shell,也可以无需跳板机")]),a._v(" "),t("li",[a._v("NAT y.y.y.y将 apiserver 的6443端口映射到外网,如果您始终只在 master 节点上执行 kubectl 命令,则无需做此映射")]),a._v(" "),t("li",[a._v("Load Balancer z.z.z.z 是 kubernetes 的 Ingress 外网映射,通常是必须的")])]),a._v(" "),t("h1",{attrs:{id:"安装步骤"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装步骤","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装步骤")]),a._v(" "),t("h2",{attrs:{id:"制作标准机镜像"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[a._v("#")]),a._v(" 制作标准机镜像")]),a._v(" "),t("p",[a._v("通过使用标准机镜像,可以")]),a._v(" "),t("ul",[t("li",[t("strong",[a._v("避免重复执行对测试机安装必要软件的过程")])]),a._v(" "),t("li",[t("strong",[a._v("以一种相对标准化的过程管理测试机的维护")])])]),a._v(" "),t("p",[a._v("标准机镜像中预装了如下内容:")]),a._v(" "),t("ul",[t("li",[a._v("docker")]),a._v(" "),t("li",[a._v("gitlab-runner")]),a._v(" "),t("li",[a._v("kubernetes images")])]),a._v(" "),t("p",[a._v("本文档描述的安装过程已基于 centos 7.6 验证")]),a._v(" "),t("p",[a._v("标准机镜像的制作过程描述如下:")]),a._v(" "),t("h3",{attrs:{id:"安装docker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装docker")]),a._v(" "),t("p",[t("strong",[a._v("卸载旧版本")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum remove docker "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-client "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-client-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-common "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-latest "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-latest-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-logrotate "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-engine-selinux "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\tdocker-engine\n")])])]),t("p",[t("strong",[a._v("下载依赖包及安装包")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("wget")]),a._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm\n")])])]),t("p",[t("strong",[a._v("安装")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" docker\n")])])]),t("p",[t("strong",[a._v("启动 docker 服务")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" systemctl start docker\n")])])]),t("p",[t("strong",[a._v("检查 docker 版本")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker version\n")])])]),t("p",[t("strong",[a._v("参考文档")])]),a._v(" "),t("p",[a._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),a._v(" "),t("p",[a._v("https://docs.docker.com/install/linux/linux-postinstall/")]),a._v(" "),t("h3",{attrs:{id:"安装-nfs-utils"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 nfs-utils")]),a._v(" "),t("p",[t("strong",[a._v("执行安装命令")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" nfs-utils\n")])])]),t("p",[a._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),a._v(" "),t("h3",{attrs:{id:"k8s基本配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[a._v("#")]),a._v(" K8S基本配置")]),a._v(" "),t("p",[t("strong",[a._v("配置K8S的yum源")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cat")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("<<")]),a._v("EOF "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">")]),a._v(" /etc/yum.repos.d/kubernetes.repo\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("[")]),a._v("kubernetes"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("]")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("name")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("Kubernetes\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("baseurl")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("enabled")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("1")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("repo_gpgcheck")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n"),t("span",{pre:!0,attrs:{class:"token assign-left variable"}},[a._v("gpgkey")]),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),t("p",[t("strong",[a._v("关闭swap、防火墙")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("swapoff -a\n")])])]),t("p",[t("strong",[a._v("关闭SeLinux")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("setenforce "),t("span",{pre:!0,attrs:{class:"token number"}},[a._v("0")]),a._v("\n")])])]),t("p",[t("strong",[a._v("修改 /etc/sysctl.conf")])]),a._v(" "),t("p",[t("code",[a._v("vim /etc/sysctl.conf")])]),a._v(" "),t("p",[a._v("向其中添加")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),t("p",[a._v("如下图所示")]),a._v(" "),t("p",[t("img",{attrs:{src:e(112),alt:"image-20190715085036593",title:":size=600x445"}})]),a._v(" "),t("p",[t("strong",[a._v("安装kubelet、kubeadm、kubectl")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("yum "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("install")]),a._v(" -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0\n")])])]),t("p",[t("strong",[a._v("修改docker Cgroup Driver为systemd")])]),a._v(" "),t("p",[t("code",[a._v("vim /usr/lib/systemd/system/docker.service")])]),a._v(" "),t("p",[a._v("向其中他添加")]),a._v(" "),t("p",[t("code",[a._v("--exec-opt native.cgroupdriver=systemd")])]),a._v(" "),t("p",[a._v("如下图所示")]),a._v(" "),t("p",[t("img",{attrs:{src:e(113),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),a._v(" "),t("p",[a._v("重启 docker")]),a._v(" "),t("div",{staticClass:"language- extra-class"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[a._v("systemctl daemon-reload\nsystemctl restart docker\n")])])]),t("p",[t("strong",[a._v("启动kubelet")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("systemctl "),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("enable")]),a._v(" kubelet "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("&&")]),a._v(" systemctl start kubelet\n")])])]),t("p",[t("strong",[a._v("加载 kubernetes 镜像")])]),a._v(" "),t("p",[a._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),a._v(" "),t("p",[a._v("执行以下命令添加docker k8s国内镜像源")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("curl")]),a._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("|")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sh")]),a._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),t("p",[t("strong",[a._v("拉取k8s相关镜像")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0\ndocker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0\ndocker pull mirrorgooglecontainers/kube-scheduler:v1.15.0\ndocker pull mirrorgooglecontainers/kube-proxy:v1.15.0\ndocker pull mirrorgooglecontainers/pause:3.1\ndocker pull mirrorgooglecontainers/etcd:3.3.10\ndocker pull coredns/coredns:1.3.1\n")])])]),t("p",[t("strong",[a._v("更改镜像名为k8s官网镜像")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0\ndocker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0\ndocker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0\ndocker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0\ndocker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1\ndocker tag eb516548c180 k8s.gcr.io/coredns:1.3.1\ndocker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10\n")])])]),t("p",[t("strong",[a._v("制作镜像")])]),a._v(" "),t("p",[a._v("请参考阿里云基于ECS "),t("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[a._v("制作虚拟机镜像"),t("OutboundLink")],1),a._v(" 的文档")]),a._v(" "),t("h2",{attrs:{id:"初始化api-server"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化api-server","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化API Server")]),a._v(" "),t("h3",{attrs:{id:"创建-apiserver-的-elb(私网)"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#创建-apiserver-的-elb(私网)","aria-hidden":"true"}},[a._v("#")]),a._v(" 创建 ApiServer 的 ELB(私网)")]),a._v(" "),t("p",[a._v("监听端口:6443 / TCP")]),a._v(" "),t("p",[a._v("后端资源组:包含 apple-master-a-1, apple-master-b-1, apple-master-b-2")]),a._v(" "),t("p",[a._v("后端端口:6443")]),a._v(" "),t("p",[a._v("开启 按源地址保持会话")]),a._v(" "),t("p",[a._v("假设完成创建以后,ELB的 ip 地址为 x.x.x.x")]),a._v(" "),t("h3",{attrs:{id:"初始化第一个master节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化第一个master节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化第一个master节点")]),a._v(" "),t("p",[a._v("在 apple-master-a-1机器上执行")]),a._v(" "),t("p",[t("strong",[a._v("配置 apiserver.apple 的域名")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\n")])])]),t("blockquote",[t("p",[a._v("请替换其中的 x.x.x.x 为您的负载均衡服务器的实际 ip 地址")])]),a._v(" "),t("p",[t("strong",[a._v("创建 /root/k8s/kubeadm-config.yaml")])]),a._v(" "),t("div",{staticClass:"language-yaml extra-class"},[t("pre",{pre:!0,attrs:{class:"language-yaml"}},[t("code",[t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" kubeadm.k8s.io/v1beta1\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" ClusterConfiguration\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kubernetesVersion")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" v1.14.3\n"),t("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("controlPlaneEndpoint")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"apiserver.apple:6443"')]),a._v("\n\n")])])]),t("p",[t("strong",[a._v("初始化 apiserver")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm init --config"),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v("=")]),a._v("/root/k8s/kubeadm-config.yaml --upload-certs\n\n")])])]),t("p",[a._v("执行结果如下图所示:")]),a._v(" "),t("p",[t("img",{attrs:{src:e(346),alt:"image2019-6-10_15-36-29"}})]),a._v(" "),t("p",[t("strong",[a._v("初始化 gitlab-runner 用户的 kubectl 配置")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("rm")]),a._v(" -rf /home/gitlab-runner/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("mkdir")]),a._v(" /home/gitlab-runner/.kube/\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("cp")]),a._v(" -i /etc/kubernetes/admin.conf /home/gitlab-runner/.kube/config\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("chown")]),a._v(" -R gitlab-runner:gitlab-runner /home/gitlab-runner/.kube\n")])])]),t("p",[t("strong",[a._v("安装 calico")])]),a._v(" "),t("p",[a._v("(需要在安全组–ServerFarm需要为集群服务器器端口6443建立安全组规则)")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl apply -f "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n\t\thttps://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml\n")])])]),t("blockquote",[t("p",[a._v("安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/")])]),a._v(" "),t("p",[t("strong",[a._v("等待calico安装就绪:")])]),a._v(" "),t("p",[a._v("执行如下命令,等待3-10分钟,直到所有的容器组处于 Running 状态")]),a._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("watch")]),a._v(" kubectl get pod -n kube-system\n")])])]),t("h3",{attrs:{id:"初始化第二、三个master节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化第二、三个master节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化第二、三个master节点")]),a._v(" "),t("p",[a._v("在 apple-master-b-1 和 apple-master-b-2 机器上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\n")])])]),t("p",[a._v("执行 (以下命令行在初始化 apple-master-a-1 时,被打印在控制台上,执行时应该使用控制台打印出的命令参数)")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token ejwx62.vqwog6il5p83uk7y "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("\\")]),a._v("\n--experimental-control-plane --certificate-key 70eb87e62f052d2d5de759969d5b42f372d0ad798f98df38f7fe73efdf63a13c\n")])])]),t("h3",{attrs:{id:"检查-apiserver初始化结果"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查-apiserver初始化结果","aria-hidden":"true"}},[a._v("#")]),a._v(" 检查 apiserver初始化结果")]),a._v(" "),t("p",[a._v("在第一个master节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl get nodes\n")])])]),t("h2",{attrs:{id:"初始化-worker节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化-worker节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化 worker节点")]),a._v(" "),t("h3",{attrs:{id:"获得-join命令参数"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#获得-join命令参数","aria-hidden":"true"}},[a._v("#")]),a._v(" 获得 join命令参数")]),a._v(" "),t("p",[t("strong",[a._v("在第一个master节点 apple-master-a-1 节点执行")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\nkubeadm token create --print-join-command\n")])])]),t("p",[a._v("可获取kubeadm join 命令及参数,如下所示")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[a._v("kubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("h3",{attrs:{id:"初始化worker"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#初始化worker","aria-hidden":"true"}},[a._v("#")]),a._v(" 初始化worker")]),a._v(" "),t("p",[t("strong",[a._v("针对所有的 worker 节点执行")])]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token builtin class-name"}},[a._v("echo")]),a._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[a._v('"x.x.x.x apiserver.apple"')]),a._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[a._v(">>")]),a._v(" /etc/hosts\nkubeadm "),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("join")]),a._v(" apiserver.apple:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303\n")])])]),t("blockquote",[t("ul",[t("li",[t("p",[a._v("将 x.x.x.x 替换为 loader balancer 的实际 ip")])]),a._v(" "),t("li",[t("p",[a._v("将 kubeadm join 命令后的参数替换为上一个步骤中实际从 apple-master-a-1 节点获得的参数")])])])]),a._v(" "),t("h3",{attrs:{id:"检查-apiserver初始化结果-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#检查-apiserver初始化结果-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 检查 apiserver初始化结果")]),a._v(" "),t("p",[a._v("在第一个master节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl get nodes\n")])])]),t("h2",{attrs:{id:"移除-worker-节点"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移除-worker-节点","aria-hidden":"true"}},[a._v("#")]),a._v(" 移除 worker 节点")]),a._v(" "),t("blockquote",[t("p",[a._v("正常情况下,您无需移除 worker 节点")])]),a._v(" "),t("p",[a._v("在准备移除的 worker 节点上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\t\nkubeadm reset\n")])])]),t("p",[a._v("在第一个 master 节点 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("sudo")]),a._v(" -i\n"),t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl delete node apple-worker-x-x\n")])])]),t("blockquote",[t("ul",[t("li",[a._v("将 apple-worker-x-x 替换为要移除的 worker 节点的名字")]),a._v(" "),t("li",[a._v("worker 节点的名字可以通过在第一个 master 节点 apple-master-a-1 上执行 kubectl get nodes 命令获得")])])]),a._v(" "),t("h2",{attrs:{id:"安装-ingress-controller"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[a._v("#")]),a._v(" 安装 Ingress Controller")]),a._v(" "),t("blockquote",[t("p",[a._v("ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),a._v(" "),t("p",[a._v("Ingress Controllers官网介绍:"),t("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/",target:"_blank",rel:"noopener noreferrer"}},[a._v("https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/"),t("OutboundLink")],1)]),a._v(" "),t("p",[a._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),a._v(" "),t("p",[a._v("kubernetes支持多种Ingress Controllers,本文推荐使用")]),a._v(" "),t("p",[a._v("https://github.com/nginxinc/kubernetes-ingress")])]),a._v(" "),t("h3",{attrs:{id:"在-apple-master-a-1-上执行"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#在-apple-master-a-1-上执行","aria-hidden":"true"}},[a._v("#")]),a._v(" 在 apple-master-a-1 上执行")]),a._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[a._v("su")]),a._v(" - gitlab-runner\nkubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),t("h3",{attrs:{id:"在iaas云控制台完成如下配置(公网elb)"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#在iaas云控制台完成如下配置(公网elb)","aria-hidden":"true"}},[a._v("#")]),a._v(" 在IaaS云控制台完成如下配置("),t("strong",[a._v("公网ELB")]),a._v(")")]),a._v(" "),t("p",[a._v("创建负载均衡 ELB:")]),a._v(" "),t("p",[a._v("​ 监听器 1:80 / TCP, SOURCE_ADDRESS 会话保持")]),a._v(" "),t("p",[a._v("​ 服务器资源池 1: apple-worker-x-x 的所有节点的 80端口")]),a._v(" "),t("p",[a._v("​ 监听器 2:443 / TCP, SOURCE_ADDRESS 会话保持")]),a._v(" "),t("p",[a._v("​ 服务器资源池 2: apple-worker-x-x 的所有节点的443端口")]),a._v(" "),t("p",[a._v("假设刚创建的负载均衡 ELB 的 IP 地址为: z.z.z.z")]),a._v(" "),t("h3",{attrs:{id:"配置域名解析"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#配置域名解析","aria-hidden":"true"}},[a._v("#")]),a._v(" 配置域名解析")]),a._v(" "),t("p",[a._v("将域名 *.apple.yourdomain.com 解析到地址负载均衡服务器 的 IP 地址 z.z.z.z")]),a._v(" "),t("h3",{attrs:{id:"验证配置"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#验证配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 验证配置")]),a._v(" "),t("p",[a._v("在浏览器访问 a.apple.yourdomain.com,将得到 404 NotFound 错误页面")])])},[],!1,null,null,null);s.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/22.3fec9def.js b/docs/assets/js/22.cc0a1477.js similarity index 85% rename from docs/assets/js/22.3fec9def.js rename to docs/assets/js/22.cc0a1477.js index 797f269..a91c00d 100644 --- a/docs/assets/js/22.3fec9def.js +++ b/docs/assets/js/22.cc0a1477.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{212:function(t,a,e){t.exports=e.p+"assets/img/image-20190720224950653.857d1b1e.png"},213:function(t,a,e){t.exports=e.p+"assets/img/image-20190720225123111.c2b02f0c.png"},214:function(t,a,e){t.exports=e.p+"assets/img/image-20190720225222622.2081299f.png"},388: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("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("ul",[r("li",[t._v("Kubernetes 集群")]),t._v(" "),r("li",[t._v("已在集群中安装 Kuboard")])]),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("router-link",{attrs:{to:"/install/install-k8s.html#初始化-worker节点"}},[t._v("初始化 worker 节点")])],1),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("p",[r("img",{attrs:{src:e(212),alt:"image-20190720224950653"}})]),t._v(" "),r("ul",[r("li",[t._v("点击 "),r("em",[r("strong",[t._v("demo-worker002")])]),t._v(" 可查看该节点的详细信息,如下图所示:")])]),t._v(" "),r("p",[r("img",{attrs:{src:e(213),alt:"image-20190720225123111"}})]),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(" 详情页上方的 "),r("em",[r("strong",[t._v("删除")])])]),t._v(" "),r("p",[t._v("并确认要删除的节点的名称后,即可删除该节点")])])]),t._v(" "),r("p",[r("img",{attrs:{src:e(214),alt:"image-20190720225222622"}})]),t._v(" "),r("blockquote",[r("ul",[r("li",[r("p",[t._v("此时只是从 kubenetes 集群的配置中删除了该节点,该节点上的工作负载将被自动迁移到其他可用节点上。如果重启该节点对应的 linux 操作系统,该节点会重新注册到集群中来。")])]),t._v(" "),r("li",[r("p",[t._v("要想彻底删除该节点,您还需要登录该节点所在机器的 linux 终端,并以 root 身份执行如下命令")]),t._v(" "),r("div",{staticClass:"language-bash extra-class"},[r("pre",{pre:!0,attrs:{class:"language-bash"}},[r("code",[t._v("kubadm reset\n")])])])])])])])},[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{230:function(t,a,e){t.exports=e.p+"assets/img/image-20190720224950653.857d1b1e.png"},231:function(t,a,e){t.exports=e.p+"assets/img/image-20190720225123111.c2b02f0c.png"},232:function(t,a,e){t.exports=e.p+"assets/img/image-20190720225222622.2081299f.png"},391: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("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("ul",[r("li",[t._v("Kubernetes 集群")]),t._v(" "),r("li",[t._v("已在集群中安装 Kuboard")])]),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("router-link",{attrs:{to:"/install/install-k8s.html#初始化-worker节点"}},[t._v("初始化 worker 节点")])],1),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("p",[r("img",{attrs:{src:e(230),alt:"image-20190720224950653"}})]),t._v(" "),r("ul",[r("li",[t._v("点击 "),r("em",[r("strong",[t._v("demo-worker002")])]),t._v(" 可查看该节点的详细信息,如下图所示:")])]),t._v(" "),r("p",[r("img",{attrs:{src:e(231),alt:"image-20190720225123111"}})]),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(" 详情页上方的 "),r("em",[r("strong",[t._v("删除")])])]),t._v(" "),r("p",[t._v("并确认要删除的节点的名称后,即可删除该节点")])])]),t._v(" "),r("p",[r("img",{attrs:{src:e(232),alt:"image-20190720225222622"}})]),t._v(" "),r("blockquote",[r("ul",[r("li",[r("p",[t._v("此时只是从 kubenetes 集群的配置中删除了该节点,该节点上的工作负载将被自动迁移到其他可用节点上。如果重启该节点对应的 linux 操作系统,该节点会重新注册到集群中来。")])]),t._v(" "),r("li",[r("p",[t._v("要想彻底删除该节点,您还需要登录该节点所在机器的 linux 终端,并以 root 身份执行如下命令")]),t._v(" "),r("div",{staticClass:"language-bash extra-class"},[r("pre",{pre:!0,attrs:{class:"language-bash"}},[r("code",[t._v("kubadm reset\n")])])])])])])])},[],!1,null,null,null);a.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/24.a07f31f6.js b/docs/assets/js/24.f944689b.js similarity index 99% rename from docs/assets/js/24.a07f31f6.js rename to docs/assets/js/24.f944689b.js index d2cae66..85c5957 100644 --- a/docs/assets/js/24.a07f31f6.js +++ b/docs/assets/js/24.f944689b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{107:function(e,t,r){e.exports=r.p+"assets/img/kuboard_qq.45e78dbf.png"},146:function(e,t,r){e.exports=r.p+"assets/img/image-20190716234146419.bd87cdff.png"},328:function(e,t,r){e.exports=r.p+"assets/img/image-20190728145108904.8f9c0d1d.png"},378:function(e,t,r){"use strict";r.r(t);var a=r(0),i=Object(a.a)({},function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h2",{attrs:{id:"kuboard-简介"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#kuboard-简介","aria-hidden":"true"}},[e._v("#")]),e._v(" Kuboard 简介")]),e._v(" "),a("p",[e._v("A cool Kubernetes dashboard.")]),e._v(" "),a("p",[e._v("Kuboard 可以有效降低 Kubernetes 初学者的学习门槛,对于有经验的用户,也是非常顺手的一款运维工具。已在多个项目中投产使用。")]),e._v(" "),a("p",[e._v("Kuboard 的主要特点:")]),e._v(" "),a("ul",[a("li",[e._v("场景化设计")]),e._v(" "),a("li",[e._v("微服务分层显示")]),e._v(" "),a("li",[e._v("微服务上下文监控")])]),e._v(" "),a("p",[a("img",{attrs:{src:r(146),alt:"image-20190716234146419"}})]),e._v(" "),a("h2",{attrs:{id:"在线体验"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#在线体验","aria-hidden":"true"}},[e._v("#")]),e._v(" 在线体验")]),e._v(" "),a("p",[a("a",{attrs:{href:"http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg",target:"_blank",rel:"noopener noreferrer"}},[e._v("Kuboard 在线体验"),a("OutboundLink")],1),e._v("\n为保证环境的稳定性,在线 Demo 中只提供只读权限。"),a("span",{staticStyle:{color:"#F56C6C","font-weight":"500"}},[e._v("(请在PC浏览器中打开)")])]),e._v(" "),a("p",[a("a",{attrs:{target:"_blank",href:"http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg"}},[a("img",{attrs:{src:r(328)}})])]),e._v(" "),a("h2",{attrs:{id:"开始使用"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#开始使用","aria-hidden":"true"}},[e._v("#")]),e._v(" 开始使用")]),e._v(" "),a("h3",{attrs:{id:"kubernetes-初学者"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-初学者","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 初学者")]),e._v(" "),a("p",[e._v("单纯地按章节学习 Linux 基础知识、网络知识、容器技术等,每一块儿的基础入门书籍就有几百页之多。")]),e._v(" "),a("p",[e._v("最好的学习方法是在 "),a("strong",[e._v("实践中学习")]),e._v(",碰到问题时去寻求答案,"),a("strong",[e._v("解决问题")]),e._v(" 之后 "),a("strong",[e._v("总结反思")]),e._v("。这种学习方法趣味性强,得来的知识也最为牢靠,所学知识通常也是工作中实用性最高的知识。")]),e._v(" "),a("p",[a("span",{staticStyle:{color:"red","font-weight":"500"}},[e._v("读100页 K8S 文档,不如把 K8S 安装一遍")])]),e._v(" "),a("p",[e._v("Kuboard 为 Kubernetes 初学者设计了如下学习路径:")]),e._v(" "),a("ul",[a("li",[a("p",[a("strong",[e._v("Kubernetes 入门")])]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"/install/install-k8s"}},[e._v("安装 Kubernetes 单Master节点")]),e._v(" (1小时,初学者也许需要更多)")]),e._v(" "),a("li",[a("a",{attrs:{href:"/install/install-dashboard"}},[e._v("安装 Kuboard")]),e._v(" (5分钟)")]),e._v(" "),a("li",[e._v("使用 Kuboard 工作负载编辑器 "),a("a",{attrs:{href:"/guide/example/busybox"}},[e._v("创建 busybox")]),e._v(" (10分钟)")]),e._v(" "),a("li",[a("a",{attrs:{href:"/guide/example/import"}},[e._v("导入 example 微服务应用")]),e._v(" (15分钟)")])])]),e._v(" "),a("li",[a("p",[a("strong",[e._v("Kubernetes 进阶")]),e._v(" (筹备中)")]),e._v(" "),a("ul",[a("li",[e._v("深入理解 Kubernetes 核心概念")]),e._v(" "),a("li",[e._v("部署 Spring Cloud 微服务")]),e._v(" "),a("li",[e._v("集成 DevOps")]),e._v(" "),a("li",[e._v("安装高可用 Kubernetes 集群")])])])]),e._v(" "),a("h3",{attrs:{id:"kubernetes-有经验者"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-有经验者","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 有经验者")]),e._v(" "),a("p",[e._v("作为资深的 Kubernetes 用户,您一定有如下痛苦:")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("Yaml 复杂繁多")]),e._v(" "),a("ul",[a("li",[e._v("Yaml 文件冗长、繁多")]),e._v(" "),a("li",[e._v("编写和维护 YAML 文件耗费了大量的时间")])])]),e._v(" "),a("li",[a("strong",[e._v("多环境")]),e._v(" "),a("ul",[a("li",[e._v("准备了开发环境,又要维护测试环境、准上线环境、生产环境")])])]),e._v(" "),a("li",[a("strong",[e._v("kubectl 命令复杂难记")]),e._v(" "),a("ul",[a("li",[e._v("反复执行 kubectl 命令,与集群的交互界面始终处于片段化的信息中,需要连续好几个命令才能诊断问题")])])])]),e._v(" "),a("p",[e._v("Kuboard 为您的这些痛苦提供了极佳的解决方案,请立刻开始:")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"/install/install-dashboard"}},[e._v("安装 Kuboard")]),e._v(" (5分钟)")]),e._v(" "),a("li",[e._v("使用 Kuboard 工作负载编辑器 "),a("a",{attrs:{href:"/guide/example/busybox"}},[e._v("创建 busybox")]),e._v(" (10分钟)")]),e._v(" "),a("li",[a("a",{attrs:{href:"/guide/example/import"}},[e._v("导入 example 微服务应用")]),e._v(" (15分钟)")]),e._v(" "),a("li",[a("a",{attrs:{href:"/guide/example/monitor"}},[e._v("在微服务上下文中监控 example")]),e._v(" (15分钟)")])]),e._v(" "),a("h3",{attrs:{id:"kubernetes-spring-cloud"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-spring-cloud","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes + Spring Cloud")]),e._v(" "),a("p",[e._v("使用 Kuboard 在 Kubernetes 上部署 Spring Cloud 微服务:(正在编写文档)")]),e._v(" "),a("ul",[a("li",[a("router-link",{attrs:{to:"/micro-service/spring-cloud/"}},[e._v("概述")])],1),e._v(" "),a("li",[a("a",{attrs:{href:"/micro-service/spring-cloud/cloud-eureka"}},[e._v("部署服务注册中心")])]),e._v(" "),a("li",[e._v("[部署数据库(用于测试)]")]),e._v(" "),a("li",[e._v("[部署微服务]")]),e._v(" "),a("li",[e._v("[部署服务网关]")]),e._v(" "),a("li",[e._v("[部署Web前端]")]),e._v(" "),a("li",[e._v("[导出配置]")])]),e._v(" "),a("h2",{attrs:{id:"在线提问"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#在线提问","aria-hidden":"true"}},[e._v("#")]),e._v(" 在线提问")]),e._v(" "),a("p",[a("img",{attrs:{src:r(107),alt:"Kuboard 兴趣群二维码"}})])])},[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{107:function(e,t,r){e.exports=r.p+"assets/img/kuboard_qq.45e78dbf.png"},146:function(e,t,r){e.exports=r.p+"assets/img/image-20190716234146419.bd87cdff.png"},328:function(e,t,r){e.exports=r.p+"assets/img/image-20190728145108904.8f9c0d1d.png"},380:function(e,t,r){"use strict";r.r(t);var a=r(0),i=Object(a.a)({},function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[a("h2",{attrs:{id:"kuboard-简介"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#kuboard-简介","aria-hidden":"true"}},[e._v("#")]),e._v(" Kuboard 简介")]),e._v(" "),a("p",[e._v("A cool Kubernetes dashboard.")]),e._v(" "),a("p",[e._v("Kuboard 可以有效降低 Kubernetes 初学者的学习门槛,对于有经验的用户,也是非常顺手的一款运维工具。已在多个项目中投产使用。")]),e._v(" "),a("p",[e._v("Kuboard 的主要特点:")]),e._v(" "),a("ul",[a("li",[e._v("场景化设计")]),e._v(" "),a("li",[e._v("微服务分层显示")]),e._v(" "),a("li",[e._v("微服务上下文监控")])]),e._v(" "),a("p",[a("img",{attrs:{src:r(146),alt:"image-20190716234146419"}})]),e._v(" "),a("h2",{attrs:{id:"在线体验"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#在线体验","aria-hidden":"true"}},[e._v("#")]),e._v(" 在线体验")]),e._v(" "),a("p",[a("a",{attrs:{href:"http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg",target:"_blank",rel:"noopener noreferrer"}},[e._v("Kuboard 在线体验"),a("OutboundLink")],1),e._v("\n为保证环境的稳定性,在线 Demo 中只提供只读权限。"),a("span",{staticStyle:{color:"#F56C6C","font-weight":"500"}},[e._v("(请在PC浏览器中打开)")])]),e._v(" "),a("p",[a("a",{attrs:{target:"_blank",href:"http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg"}},[a("img",{attrs:{src:r(328)}})])]),e._v(" "),a("h2",{attrs:{id:"开始使用"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#开始使用","aria-hidden":"true"}},[e._v("#")]),e._v(" 开始使用")]),e._v(" "),a("h3",{attrs:{id:"kubernetes-初学者"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-初学者","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 初学者")]),e._v(" "),a("p",[e._v("单纯地按章节学习 Linux 基础知识、网络知识、容器技术等,每一块儿的基础入门书籍就有几百页之多。")]),e._v(" "),a("p",[e._v("最好的学习方法是在 "),a("strong",[e._v("实践中学习")]),e._v(",碰到问题时去寻求答案,"),a("strong",[e._v("解决问题")]),e._v(" 之后 "),a("strong",[e._v("总结反思")]),e._v("。这种学习方法趣味性强,得来的知识也最为牢靠,所学知识通常也是工作中实用性最高的知识。")]),e._v(" "),a("p",[a("span",{staticStyle:{color:"red","font-weight":"500"}},[e._v("读100页 K8S 文档,不如把 K8S 安装一遍")])]),e._v(" "),a("p",[e._v("Kuboard 为 Kubernetes 初学者设计了如下学习路径:")]),e._v(" "),a("ul",[a("li",[a("p",[a("strong",[e._v("Kubernetes 入门")])]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"/install/install-k8s"}},[e._v("安装 Kubernetes 单Master节点")]),e._v(" (1小时,初学者也许需要更多)")]),e._v(" "),a("li",[a("a",{attrs:{href:"/install/install-dashboard"}},[e._v("安装 Kuboard")]),e._v(" (5分钟)")]),e._v(" "),a("li",[e._v("使用 Kuboard 工作负载编辑器 "),a("a",{attrs:{href:"/guide/example/busybox"}},[e._v("创建 busybox")]),e._v(" (10分钟)")]),e._v(" "),a("li",[a("a",{attrs:{href:"/guide/example/import"}},[e._v("导入 example 微服务应用")]),e._v(" (15分钟)")])])]),e._v(" "),a("li",[a("p",[a("strong",[e._v("Kubernetes 进阶")]),e._v(" (筹备中)")]),e._v(" "),a("ul",[a("li",[e._v("深入理解 Kubernetes 核心概念")]),e._v(" "),a("li",[e._v("部署 Spring Cloud 微服务")]),e._v(" "),a("li",[e._v("集成 DevOps")]),e._v(" "),a("li",[e._v("安装高可用 Kubernetes 集群")])])])]),e._v(" "),a("h3",{attrs:{id:"kubernetes-有经验者"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-有经验者","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 有经验者")]),e._v(" "),a("p",[e._v("作为资深的 Kubernetes 用户,您一定有如下痛苦:")]),e._v(" "),a("ul",[a("li",[a("strong",[e._v("Yaml 复杂繁多")]),e._v(" "),a("ul",[a("li",[e._v("Yaml 文件冗长、繁多")]),e._v(" "),a("li",[e._v("编写和维护 YAML 文件耗费了大量的时间")])])]),e._v(" "),a("li",[a("strong",[e._v("多环境")]),e._v(" "),a("ul",[a("li",[e._v("准备了开发环境,又要维护测试环境、准上线环境、生产环境")])])]),e._v(" "),a("li",[a("strong",[e._v("kubectl 命令复杂难记")]),e._v(" "),a("ul",[a("li",[e._v("反复执行 kubectl 命令,与集群的交互界面始终处于片段化的信息中,需要连续好几个命令才能诊断问题")])])])]),e._v(" "),a("p",[e._v("Kuboard 为您的这些痛苦提供了极佳的解决方案,请立刻开始:")]),e._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"/install/install-dashboard"}},[e._v("安装 Kuboard")]),e._v(" (5分钟)")]),e._v(" "),a("li",[e._v("使用 Kuboard 工作负载编辑器 "),a("a",{attrs:{href:"/guide/example/busybox"}},[e._v("创建 busybox")]),e._v(" (10分钟)")]),e._v(" "),a("li",[a("a",{attrs:{href:"/guide/example/import"}},[e._v("导入 example 微服务应用")]),e._v(" (15分钟)")]),e._v(" "),a("li",[a("a",{attrs:{href:"/guide/example/monitor"}},[e._v("在微服务上下文中监控 example")]),e._v(" (15分钟)")])]),e._v(" "),a("h3",{attrs:{id:"kubernetes-spring-cloud"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-spring-cloud","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes + Spring Cloud")]),e._v(" "),a("p",[e._v("使用 Kuboard 在 Kubernetes 上部署 Spring Cloud 微服务:(正在编写文档)")]),e._v(" "),a("ul",[a("li",[a("router-link",{attrs:{to:"/micro-service/spring-cloud/"}},[e._v("概述")])],1),e._v(" "),a("li",[a("a",{attrs:{href:"/micro-service/spring-cloud/cloud-eureka"}},[e._v("部署服务注册中心")])]),e._v(" "),a("li",[e._v("[部署数据库(用于测试)]")]),e._v(" "),a("li",[e._v("[部署微服务]")]),e._v(" "),a("li",[e._v("[部署服务网关]")]),e._v(" "),a("li",[e._v("[部署Web前端]")]),e._v(" "),a("li",[e._v("[导出配置]")])]),e._v(" "),a("h2",{attrs:{id:"在线提问"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#在线提问","aria-hidden":"true"}},[e._v("#")]),e._v(" 在线提问")]),e._v(" "),a("p",[a("img",{attrs:{src:r(107),alt:"Kuboard 兴趣群二维码"}})])])},[],!1,null,null,null);t.default=i.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/26.dfaf6f55.js b/docs/assets/js/26.e83165c1.js similarity index 99% rename from docs/assets/js/26.dfaf6f55.js rename to docs/assets/js/26.e83165c1.js index dfdedfb..9b6f49c 100644 --- a/docs/assets/js/26.dfaf6f55.js +++ b/docs/assets/js/26.e83165c1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{112:function(s,t,a){s.exports=a.p+"assets/img/image-20190715085036593.55559549.png"},113:function(s,t,a){s.exports=a.p+"assets/img/image2019-07-15_09.01.21.0e0d34f2.png"},375:function(s,t,a){"use strict";a.r(t);var e=a(0),r=Object(e.a)({},function(){var s=this,t=s.$createElement,e=s._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[e("h2",{attrs:{id:"制作标准机镜像"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[s._v("#")]),s._v(" 制作标准机镜像")]),s._v(" "),e("p",[s._v("通过使用标准机镜像,可以")]),s._v(" "),e("ul",[e("li",[e("strong",[s._v("避免重复执行对测试机安装必要软件的过程")])]),s._v(" "),e("li",[e("strong",[s._v("以一种相对标准化的过程管理测试机的维护")])])]),s._v(" "),e("p",[s._v("标准机镜像中预装了如下内容:")]),s._v(" "),e("ul",[e("li",[s._v("docker")]),s._v(" "),e("li",[s._v("gitlab-runner")]),s._v(" "),e("li",[s._v("kubernetes images")])]),s._v(" "),e("p",[s._v("本文档描述的安装过程已基于 centos 7.6 验证")]),s._v(" "),e("p",[s._v("标准机镜像的制作过程描述如下:")]),s._v(" "),e("h3",{attrs:{id:"安装docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装docker")]),s._v(" "),e("p",[e("strong",[s._v("卸载旧版本")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum remove docker "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client-latest "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-common "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest-logrotate "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-logrotate "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-selinux "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine-selinux "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine\n")])])]),e("p",[e("strong",[s._v("下载依赖包及安装包")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm\n\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm\n")])])]),e("p",[e("strong",[s._v("安装")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" docker\n")])])]),e("p",[e("strong",[s._v("启动 docker 服务")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl start docker\n")])])]),e("p",[e("strong",[s._v("检查 docker 版本")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("docker version\n")])])]),e("p",[e("strong",[s._v("参考文档")])]),s._v(" "),e("p",[s._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),s._v(" "),e("p",[s._v("https://docs.docker.com/install/linux/linux-postinstall/")]),s._v(" "),e("h3",{attrs:{id:"安装-nfs-utils"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 nfs-utils")]),s._v(" "),e("p",[e("strong",[s._v("执行安装命令")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" nfs-utils\n")])])]),e("p",[s._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),s._v(" "),e("h3",{attrs:{id:"k8s基本配置"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[s._v("#")]),s._v(" K8S基本配置")]),s._v(" "),e("p",[e("strong",[s._v("配置K8S的yum源")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("EOF "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/yum.repos.d/kubernetes.repo\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("name")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("Kubernetes\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("baseurl")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("enabled")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgcheck")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("repo_gpgcheck")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgkey")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),e("p",[e("strong",[s._v("关闭swap、防火墙")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("swapoff -a\n")])])]),e("p",[e("strong",[s._v("关闭SeLinux")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("setenforce "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n")])])]),e("p",[e("strong",[s._v("修改 /etc/sysctl.conf")])]),s._v(" "),e("p",[e("code",[s._v("vim /etc/sysctl.conf")])]),s._v(" "),e("p",[s._v("向其中添加")]),s._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[s._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),e("p",[s._v("如下图所示")]),s._v(" "),e("p",[e("img",{attrs:{src:a(112),alt:"image-20190715085036593",title:":size=600x445"}})]),s._v(" "),e("p",[e("strong",[s._v("安装kubelet、kubeadm、kubectl")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0\n")])])]),e("p",[e("strong",[s._v("修改docker Cgroup Driver为systemd")])]),s._v(" "),e("p",[e("code",[s._v("vim /usr/lib/systemd/system/docker.service")])]),s._v(" "),e("p",[s._v("向其中他添加")]),s._v(" "),e("p",[e("code",[s._v("--exec-opt native.cgroupdriver=systemd")])]),s._v(" "),e("p",[s._v("如下图所示")]),s._v(" "),e("p",[e("img",{attrs:{src:a(113),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),s._v(" "),e("p",[s._v("重启 docker")]),s._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[s._v("systemctl daemon-reload\nsystemctl restart docker\n")])])]),e("p",[e("strong",[s._v("启动kubelet")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" kubelet "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" systemctl start kubelet\n")])])]),e("p",[e("strong",[s._v("加载 kubernetes 镜像")])]),s._v(" "),e("p",[s._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),s._v(" "),e("p",[s._v("执行以下命令添加docker k8s国内镜像源")]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),e("p",[e("strong",[s._v("拉取k8s相关镜像")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0\ndocker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0\ndocker pull mirrorgooglecontainers/kube-scheduler:v1.15.0\ndocker pull mirrorgooglecontainers/kube-proxy:v1.15.0\ndocker pull mirrorgooglecontainers/pause:3.1\ndocker pull mirrorgooglecontainers/etcd:3.3.10\ndocker pull coredns/coredns:1.3.1\n")])])]),e("p",[e("strong",[s._v("更改镜像名为k8s官网镜像")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0\ndocker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0\ndocker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0\ndocker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0\ndocker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1\ndocker tag eb516548c180 k8s.gcr.io/coredns:1.3.1\ndocker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10\n")])])]),e("p",[e("strong",[s._v("制作镜像")])]),s._v(" "),e("p",[s._v("请参考阿里云基于ECS "),e("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[s._v("制作虚拟机镜像"),e("OutboundLink")],1),s._v(" 的文档")])])},[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{112:function(s,t,a){s.exports=a.p+"assets/img/image-20190715085036593.55559549.png"},113:function(s,t,a){s.exports=a.p+"assets/img/image2019-07-15_09.01.21.0e0d34f2.png"},377:function(s,t,a){"use strict";a.r(t);var e=a(0),r=Object(e.a)({},function(){var s=this,t=s.$createElement,e=s._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[e("h2",{attrs:{id:"制作标准机镜像"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[s._v("#")]),s._v(" 制作标准机镜像")]),s._v(" "),e("p",[s._v("通过使用标准机镜像,可以")]),s._v(" "),e("ul",[e("li",[e("strong",[s._v("避免重复执行对测试机安装必要软件的过程")])]),s._v(" "),e("li",[e("strong",[s._v("以一种相对标准化的过程管理测试机的维护")])])]),s._v(" "),e("p",[s._v("标准机镜像中预装了如下内容:")]),s._v(" "),e("ul",[e("li",[s._v("docker")]),s._v(" "),e("li",[s._v("gitlab-runner")]),s._v(" "),e("li",[s._v("kubernetes images")])]),s._v(" "),e("p",[s._v("本文档描述的安装过程已基于 centos 7.6 验证")]),s._v(" "),e("p",[s._v("标准机镜像的制作过程描述如下:")]),s._v(" "),e("h3",{attrs:{id:"安装docker"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装docker")]),s._v(" "),e("p",[e("strong",[s._v("卸载旧版本")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum remove docker "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client-latest "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-common "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest-logrotate "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-logrotate "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-selinux "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine-selinux "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine\n")])])]),e("p",[e("strong",[s._v("下载依赖包及安装包")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm\n\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("wget")]),s._v(" https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm\n")])])]),e("p",[e("strong",[s._v("安装")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y containerd.io-1.2.6-3.3.el7.x86_64.rpm\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" docker\n")])])]),e("p",[e("strong",[s._v("启动 docker 服务")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl start docker\n")])])]),e("p",[e("strong",[s._v("检查 docker 版本")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("docker version\n")])])]),e("p",[e("strong",[s._v("参考文档")])]),s._v(" "),e("p",[s._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),s._v(" "),e("p",[s._v("https://docs.docker.com/install/linux/linux-postinstall/")]),s._v(" "),e("h3",{attrs:{id:"安装-nfs-utils"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 nfs-utils")]),s._v(" "),e("p",[e("strong",[s._v("执行安装命令")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" nfs-utils\n")])])]),e("p",[s._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),s._v(" "),e("h3",{attrs:{id:"k8s基本配置"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[s._v("#")]),s._v(" K8S基本配置")]),s._v(" "),e("p",[e("strong",[s._v("配置K8S的yum源")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("EOF "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/yum.repos.d/kubernetes.repo\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("name")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("Kubernetes\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("baseurl")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("enabled")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgcheck")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("repo_gpgcheck")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgkey")]),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),e("p",[e("strong",[s._v("关闭swap、防火墙")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("swapoff -a\n")])])]),e("p",[e("strong",[s._v("关闭SeLinux")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("setenforce "),e("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n")])])]),e("p",[e("strong",[s._v("修改 /etc/sysctl.conf")])]),s._v(" "),e("p",[e("code",[s._v("vim /etc/sysctl.conf")])]),s._v(" "),e("p",[s._v("向其中添加")]),s._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[s._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),e("p",[s._v("如下图所示")]),s._v(" "),e("p",[e("img",{attrs:{src:a(112),alt:"image-20190715085036593",title:":size=600x445"}})]),s._v(" "),e("p",[e("strong",[s._v("安装kubelet、kubeadm、kubectl")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("yum "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0\n")])])]),e("p",[e("strong",[s._v("修改docker Cgroup Driver为systemd")])]),s._v(" "),e("p",[e("code",[s._v("vim /usr/lib/systemd/system/docker.service")])]),s._v(" "),e("p",[s._v("向其中他添加")]),s._v(" "),e("p",[e("code",[s._v("--exec-opt native.cgroupdriver=systemd")])]),s._v(" "),e("p",[s._v("如下图所示")]),s._v(" "),e("p",[e("img",{attrs:{src:a(113),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),s._v(" "),e("p",[s._v("重启 docker")]),s._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[s._v("systemctl daemon-reload\nsystemctl restart docker\n")])])]),e("p",[e("strong",[s._v("启动kubelet")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("systemctl "),e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" kubelet "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" systemctl start kubelet\n")])])]),e("p",[e("strong",[s._v("加载 kubernetes 镜像")])]),s._v(" "),e("p",[s._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),s._v(" "),e("p",[s._v("执行以下命令添加docker k8s国内镜像源")]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),e("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),e("p",[e("strong",[s._v("拉取k8s相关镜像")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0\ndocker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0\ndocker pull mirrorgooglecontainers/kube-scheduler:v1.15.0\ndocker pull mirrorgooglecontainers/kube-proxy:v1.15.0\ndocker pull mirrorgooglecontainers/pause:3.1\ndocker pull mirrorgooglecontainers/etcd:3.3.10\ndocker pull coredns/coredns:1.3.1\n")])])]),e("p",[e("strong",[s._v("更改镜像名为k8s官网镜像")])]),s._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[s._v("docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0\ndocker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0\ndocker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0\ndocker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0\ndocker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1\ndocker tag eb516548c180 k8s.gcr.io/coredns:1.3.1\ndocker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10\n")])])]),e("p",[e("strong",[s._v("制作镜像")])]),s._v(" "),e("p",[s._v("请参考阿里云基于ECS "),e("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[s._v("制作虚拟机镜像"),e("OutboundLink")],1),s._v(" 的文档")])])},[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/27.5d636b05.js b/docs/assets/js/27.f6ddd21f.js similarity index 94% rename from docs/assets/js/27.5d636b05.js rename to docs/assets/js/27.f6ddd21f.js index 12f4d43..6224ef8 100644 --- a/docs/assets/js/27.5d636b05.js +++ b/docs/assets/js/27.f6ddd21f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{107:function(t,e,r){t.exports=r.p+"assets/img/kuboard_qq.45e78dbf.png"},377: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(107),alt:"Kuboard 兴趣群二维码"}})])])},[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{107:function(t,e,r){t.exports=r.p+"assets/img/kuboard_qq.45e78dbf.png"},383: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(107),alt:"Kuboard 兴趣群二维码"}})])])},[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/28.3c6cab60.js b/docs/assets/js/28.addd2710.js similarity index 90% rename from docs/assets/js/28.3c6cab60.js rename to docs/assets/js/28.addd2710.js index 0719cbd..728f250 100644 --- a/docs/assets/js/28.3c6cab60.js +++ b/docs/assets/js/28.addd2710.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{327:function(t,r,a){t.exports=a.p+"assets/img/image-20190728220831126.b579017f.png"},380:function(t,r,a){"use strict";a.r(r);var e=a(0),v=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:"升级-kuboard"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#升级-kuboard","aria-hidden":"true"}},[t._v("#")]),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("版本: v1.0.0-beta.13")]),t._v(" "),e("p",[t._v("发布日期: 2019-07-28")]),t._v(" "),e("p",[e("router-link",{attrs:{to:"/support/change-log.html"}},[t._v("查看更新日志")])],1),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",[t._v("进入 Kuboard 首页,完成登录,进入 Kuboard "),e("em",[e("strong",[t._v("集群概览")])]),t._v(" 页")]),t._v(" "),e("li",[t._v("点击 "),e("em",[e("strong",[t._v("调整镜像版本")])]),t._v(" 按钮")]),t._v(" "),e("li",[t._v("勾选 "),e("em",[e("strong",[t._v("监控")])]),t._v(" 筛选项,点击刷新\n并修改 Deployment / Kuboard 的镜像版本为您要升级到的目标版本,如下图所示")])]),t._v(" "),e("p",[e("img",{attrs:{src:a(327),alt:"image-20190728220831126"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("执行变更")])])])]),t._v(" "),e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("应用")])])])]),t._v(" "),e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("完成")])])]),t._v(" "),e("p",[t._v("等待容器组调整完毕。")])]),t._v(" "),e("li",[e("p",[t._v("刷新浏览器页面")])])])])},[],!1,null,null,null);r.default=v.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{322:function(t,r,a){t.exports=a.p+"assets/img/image-20190728220831126.b579017f.png"},381:function(t,r,a){"use strict";a.r(r);var e=a(0),v=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:"升级-kuboard"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#升级-kuboard","aria-hidden":"true"}},[t._v("#")]),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("版本: v1.0.0-beta.13")]),t._v(" "),e("p",[t._v("发布日期: 2019-07-28")]),t._v(" "),e("p",[e("router-link",{attrs:{to:"/support/change-log.html"}},[t._v("查看更新日志")])],1),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",[t._v("进入 Kuboard 首页,完成登录,进入 Kuboard "),e("em",[e("strong",[t._v("集群概览")])]),t._v(" 页")]),t._v(" "),e("li",[t._v("点击 "),e("em",[e("strong",[t._v("调整镜像版本")])]),t._v(" 按钮")]),t._v(" "),e("li",[t._v("勾选 "),e("em",[e("strong",[t._v("监控")])]),t._v(" 筛选项,点击刷新\n并修改 Deployment / Kuboard 的镜像版本为您要升级到的目标版本,如下图所示")])]),t._v(" "),e("p",[e("img",{attrs:{src:a(322),alt:"image-20190728220831126"}})]),t._v(" "),e("ul",[e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("执行变更")])])])]),t._v(" "),e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("应用")])])])]),t._v(" "),e("li",[e("p",[t._v("点击 "),e("em",[e("strong",[t._v("完成")])])]),t._v(" "),e("p",[t._v("等待容器组调整完毕。")])]),t._v(" "),e("li",[e("p",[t._v("刷新浏览器页面")])])])])},[],!1,null,null,null);r.default=v.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/30.26d3cffe.js b/docs/assets/js/30.ffa8ea0d.js similarity index 87% rename from docs/assets/js/30.26d3cffe.js rename to docs/assets/js/30.ffa8ea0d.js index f871428..ca711b3 100644 --- a/docs/assets/js/30.26d3cffe.js +++ b/docs/assets/js/30.ffa8ea0d.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{332:function(t,r,a){t.exports=a.p+"assets/img/kuboard_qq.45e78dbf.png"},372: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("h2",{attrs:{id:"提交问题"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#提交问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 提交问题")]),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([[30],{329:function(t,r,a){t.exports=a.p+"assets/img/kuboard_qq.45e78dbf.png"},372: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("h2",{attrs:{id:"提交问题"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#提交问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 提交问题")]),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(329),alt:"kuboard_qq"}})])])},[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/33.37fdc79a.js b/docs/assets/js/33.f768f577.js similarity index 96% rename from docs/assets/js/33.37fdc79a.js rename to docs/assets/js/33.f768f577.js index 7a89554..3a3a0b3 100644 --- a/docs/assets/js/33.37fdc79a.js +++ b/docs/assets/js/33.f768f577.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{389:function(e,t,r){"use strict";r.r(t);var s=r(0),v=Object(s.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("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=v.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{388:function(e,t,r){"use strict";r.r(t);var s=r(0),v=Object(s.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("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=v.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/34.5c3c7ca0.js b/docs/assets/js/34.9ced5657.js similarity index 98% rename from docs/assets/js/34.5c3c7ca0.js rename to docs/assets/js/34.9ced5657.js index 23ae081..5e1fadb 100644 --- a/docs/assets/js/34.5c3c7ca0.js +++ b/docs/assets/js/34.9ced5657.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{363: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([[34],{364: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/35.8f8a25b5.js b/docs/assets/js/35.b60dcf52.js similarity index 92% rename from docs/assets/js/35.8f8a25b5.js rename to docs/assets/js/35.b60dcf52.js index 5d7f3d6..df46a62 100644 --- a/docs/assets/js/35.8f8a25b5.js +++ b/docs/assets/js/35.b60dcf52.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{358:function(t,e,a){"use strict";a.r(e);var r=a(0),l=Object(r.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("p",[t._v("文档建设中...")]),t._v(" "),a("blockquote",[a("ul",[a("li",[t._v("请参考 "),a("a",{attrs:{href:"/guide/example/monitor"}},[t._v("监控 example (alpha)")]),t._v(" 体验 Kuboard 在监控套件方面的设想")]),t._v(" "),a("li",[t._v("监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作")])])])])},[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{373:function(t,e,a){"use strict";a.r(e);var r=a(0),l=Object(r.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("p",[t._v("文档建设中...")]),t._v(" "),a("blockquote",[a("ul",[a("li",[t._v("请参考 "),a("a",{attrs:{href:"/guide/example/monitor"}},[t._v("监控 example (alpha)")]),t._v(" 体验 Kuboard 在监控套件方面的设想")]),t._v(" "),a("li",[t._v("监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作")])])])])},[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/36.90f5a7c5.js b/docs/assets/js/36.844fa65e.js similarity index 92% rename from docs/assets/js/36.90f5a7c5.js rename to docs/assets/js/36.844fa65e.js index af43bf4..97d2ccf 100644 --- a/docs/assets/js/36.90f5a7c5.js +++ b/docs/assets/js/36.844fa65e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{370:function(t,e,a){"use strict";a.r(e);var r=a(0),l=Object(r.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("p",[t._v("文档建设中...")]),t._v(" "),a("blockquote",[a("ul",[a("li",[t._v("请参考 "),a("a",{attrs:{href:"/guide/example/monitor"}},[t._v("监控 example (alpha)")]),t._v(" 体验 Kuboard 在监控套件方面的设想")]),t._v(" "),a("li",[t._v("监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作")])])])])},[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{359:function(t,e,a){"use strict";a.r(e);var r=a(0),l=Object(r.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("p",[t._v("文档建设中...")]),t._v(" "),a("blockquote",[a("ul",[a("li",[t._v("请参考 "),a("a",{attrs:{href:"/guide/example/monitor"}},[t._v("监控 example (alpha)")]),t._v(" 体验 Kuboard 在监控套件方面的设想")]),t._v(" "),a("li",[t._v("监控套件以插件的形式整合到 Kuboard,在不使用监控套件的情况下,Kuboard 的所有功能都可正常工作")])])])])},[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/37.7aebb8f4.js b/docs/assets/js/37.bdca14e0.js similarity index 96% rename from docs/assets/js/37.7aebb8f4.js rename to docs/assets/js/37.bdca14e0.js index 2a4813e..87cd334 100644 --- a/docs/assets/js/37.7aebb8f4.js +++ b/docs/assets/js/37.bdca14e0.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{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([[37],{358: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/38.b9256242.js b/docs/assets/js/38.f94e235e.js similarity index 98% rename from docs/assets/js/38.b9256242.js rename to docs/assets/js/38.f94e235e.js index 3a8bd44..3c5397d 100644 --- a/docs/assets/js/38.b9256242.js +++ b/docs/assets/js/38.f94e235e.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{379: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([[38],{375: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/39.c4f6e7db.js b/docs/assets/js/39.66086eb4.js similarity index 87% rename from docs/assets/js/39.c4f6e7db.js rename to docs/assets/js/39.66086eb4.js index 927dd21..cf07b39 100644 --- a/docs/assets/js/39.c4f6e7db.js +++ b/docs/assets/js/39.66086eb4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{381: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([[39],{384: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/40.b117de41.js b/docs/assets/js/40.91e3d923.js similarity index 98% rename from docs/assets/js/40.b117de41.js rename to docs/assets/js/40.91e3d923.js index 575f132..4f04094 100644 --- a/docs/assets/js/40.b117de41.js +++ b/docs/assets/js/40.91e3d923.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{383: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([[40],{386: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/41.e5c5006e.js b/docs/assets/js/41.f665e6e1.js similarity index 99% rename from docs/assets/js/41.e5c5006e.js rename to docs/assets/js/41.f665e6e1.js index 64951d4..ff17c85 100644 --- a/docs/assets/js/41.e5c5006e.js +++ b/docs/assets/js/41.f665e6e1.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{386:function(t,a,e){"use strict";e.r(a);var s=e(0),n=Object(s.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:"从客户端电脑远程管理-kubernetes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#从客户端电脑远程管理-kubernetes","aria-hidden":"true"}},[t._v("#")]),t._v(" 从客户端电脑远程管理 Kubernetes")]),t._v(" "),e("p",[t._v("日常工作中,您可能需要在自己的笔记本电脑上执行 kubectl 命令管理远程 Linux 服务器上的 Kubernetes 集群。")]),t._v(" "),e("div",{staticClass:"tip custom-block"},[e("p",[t._v("从客户端电脑使用 kubectl 远程管理 Kubernetes,这个步骤并不是使用 Kuboard 的必要步骤。"),e("span",{staticStyle:{color:"red","font-weight":"500"}},[t._v("可以忽略")])])]),t._v(" "),e("h2",{attrs:{id:"在客户端电脑安装-kubectl"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#在客户端电脑安装-kubectl","aria-hidden":"true"}},[t._v("#")]),t._v(" 在客户端电脑安装 kubectl")]),t._v(" "),e("p",[t._v("Kubernetes 官网文档参照 "),e("a",{attrs:{href:"https://kubernetes.io/docs/tasks/tools/install-kubectl/",target:"_blank",rel:"noopener noreferrer"}},[t._v("安装 kubectl"),e("OutboundLink")],1),t._v(" 安装时,经常会失败,因为国内访问 google 的镜像仓库存在问题。")]),t._v(" "),e("p",[t._v("请参考下述内容,完成 kubectl 的安装")]),t._v(" "),e("Tabs",{attrs:{type:"border-card"}},[e("Tab",{attrs:{label:"Linux",lazy:""}},[e("p",[e("strong",[t._v("配置K8S的yum源")])]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v("EOF "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" /etc/yum.repos.d/kubernetes.repo\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("Kubernetes\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("baseurl")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("enabled")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("gpgcheck")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("repo_gpgcheck")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("gpgkey")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),e("p",[e("strong",[t._v("安装kubectl")])]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("yum "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y kubectl-1.15.0\n")])])]),e("p",[e("strong",[t._v("验证安装")])]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("kubectl version\n")])])])]),t._v(" "),e("Tab",{attrs:{label:"Windows",lazy:""}},[e("p",[t._v("待完善")])]),t._v(" "),e("Tab",{attrs:{label:"Mac",lazy:""}},[e("p",[t._v("待完善")])])],1),t._v(" "),e("h2",{attrs:{id:"获取-kubectl-config-文件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#获取-kubectl-config-文件","aria-hidden":"true"}},[t._v("#")]),t._v(" 获取 kubectl config 文件")]),t._v(" "),e("p",[t._v("如果您参考 "),e("a",{attrs:{href:"install-k8s"}},[t._v("安装 Kubernetes 单Master节点")]),t._v(" 或 "),e("a",{attrs:{href:"install-kubernetes"}},[t._v("安装 Kubernetes 高可用")]),t._v(" 完成了 Kubernetes 安装,"),e("strong",[t._v("请在 demo-master-a-1 节点上执行如下命令")])]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" /etc/kubernetes/admin.conf\n")])])]),e("p",[t._v("输出内容如下所示:")]),t._v(" "),e("div",{staticClass:"language-yaml extra-class"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br")]),e("pre",{pre:!0,attrs:{class:"language-yaml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("apiVersion")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" v1\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("clusters")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("cluster")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("certificate-authority-data")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" LS0tLS1CRxpJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNU1EY3hPREEzTURFMU1Gb1hEVEk1TURjeE5UQTNNREUxTUZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWxfY05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUlvCit1TDVvWWFaMUc5UVR2SS9Cd0RNWWNNOTVqVkdNN2E1eWZIQWtBTVptOThWNGdDamNTd0NhOWFEbHJOKzliSUkKK054OXc3L0phdG1mb1ZwYlNoZ3dqc0lBT3QrTXlxQTh1WFVvMXlwSGFBd2NkaXhYbk81ZlVRRTlKN2xDbm9NZApKM0RYNmhNWnVmNmxwRVVBK2JkaVVTYzdkOEFKVDRpSm41bDAyL21pd3hRZUJweWwzQXFGVUZUQTQxUlNLbnBECjBuTzdoaEk3cE02aUVUTVBSa29lZkZrcHFtSEhqd0g5MGZQVzhETGgwdG5ENUlTM0VUUlVjMDdHbms0ZWh1OWMKamNhRXoxK1Roe3JhcWFTRmpTdUVSMGxhU3BYOXQyd3k1S3NxZFVBRkQySGNDK0Y1eUsvTXppL2krS01FdTM0SQpiTHJNUy90L3lta1V5RTQ3T3FrQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZ0QU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFbXRORFVVZ2FhRWs3Z0lSMnE1MkRxZ21FRkMKZW1xR21rT3U5UERvVmZ0Z0Nva3VBUXEzZzBVdzA3cTJTQnhSZzJDNzQ2Y08wbkdURFZlL2ecXNmeVBFK2RFbApPQWJmQ3R1QUlKTHVQWDB6OVBUdDBKekhobnk1ODk5RE81ODdLMm5VdXd3S01xeEYvdWRHMUNtWUkza2g2cS9RCmN0WDI5RjlhTWhDRXluWU1lVU5EUVQ4cGN0TkOpNm4rYjg0NDlmMU5RWG9kVzM0TVRrL25pd3JuQ3pDUUE5M0wKR3YxelhRL2pwTTZVeVo5dU9ZNWEzK096UjJCTzRtZ2RiL0xoam5rL0hxTGs5RUszZmhJak5Tc2h0RWsrf9NpVApPQ3JTQkRHVk5ueHIzeGRwYzltRWNCeDlQdVBqVE1ER1ZkYlowUlZHbGVVODN3dVpUaTdJdUZaR2Jicz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("server")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" https"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("//apiserver.demo"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("6443")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("contexts")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("context")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("cluster")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("user")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("admin\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("admin@kubernetes\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("current-context")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("admin@kubernetes\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("kind")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Config\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preferences")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("users")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("admin\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("user")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("client-certificate-data")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQxxRxZ0F3SUJBZ0lJY0JpMFhjUWJNWm93RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T1RBM01UZ3dOekF4TlRCYUZ3MHlNREEzTVRjd056QXhOVEZhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW9CYzZvMHRCekIyRUlldW4KcmhONTVoaU1EaEplcUpxMWxlT3VUSjRic0dqVnlrQVJQVCtGZDlTR3llRjNFZS9NS1ZBcUQ4ZzRXeHNoTTRrdAp1dnVNalNTeit3bnMySnR2TWtJWStLT2FhZFBFSUx6U3dyamxucGRQbjMvQmtTbjc1SnVzRWFLR0NCN0c5Skk3CnJOK3lkc2ZLT29KQTE1ak8vR2VvdC90UGpWNGQ4MldCbVltWitSa1labW43STFPOHh4aFpjVDNDT0QxeVp3OS8KTjBYVnZQYkFzY1QweU91ZG5JMWpFQ3p1cHdKWnZRTENiMEJHb1MxSGxpVDFnL1o0WjBuYW5LdythYkdXamptNQpGbmZTZ2JQblNzOTI5NWNzQW5KQy9MRXZFTE90NEUxQkVHa2JkZTBuNXJnKzhKVjhDOWFPWkFOxhP2aU5iMExuCkdpQ2p6UUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFJYnd3RFJ6VExUbXNrV3R0NEZLbG1xK0NNYTRWZUFqL2x4bQpuaEdITTlTaXpFR1VDRDJ5UjEyQUV0YUdka0R5KzNuT3Q3aS9Db3Jwcm5ocnkwZHMzck81Q3BvMXAwdHNyQnZ5CkRiM1dDTDRkN2x0alplNklZQ0xGNmJCVkJmejJjY0FpZEdieW1UaVhwQU5pK25hOE8wZ3NBTmNUS1JaNG1nNDgKUXpWQktlUnZZWnhwcEV5T2JoelI2NTVoRE1aR3AzdG5pQW9NL3Z6QjA3R2dybzAxVTAvaUVOQnZaeG10S2RxRApFY0JVTzJRTHh3QlZaMFlMb0p2MmJWSTVMYWdmRDNwVFVDQ3A5MURGcDAwbmVHRUM0cDZmQXJwSG9YWU8yYVIyCjZtbEREdVhGNmg2Um53frkxU3N6MWZtSXVzZ2FXaHZUaGgrVGxQVVVTclFkZnQ2S0d4bz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("client-key-data")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBb0JjNm8wdEJ6QjJFSWV1bnJoTjU1aGlNRGhKZXFKcTFsZU91VEo0YnNHalZ5a0FSClBUK0ZkOVNHeWVGM0VlL01LVkFxRDhnNFd4c2hNNGt0dXZ1TWpTU3ord25zMkp0dk1rSVkrS09hYWRQRUlMelMKd3JqbG5wZFBuMy9Ca1NuNzVKdXNFYUtHQ0I3RzlKSTdyTit5ZHNmS09vSkExNWpPL0dlb3QvdFBqVjRkODJXQgptWW1aK1JrWVptbjdJMU84eHhoWmNUM0NPRDF5Wnc5L04wWFZ2UGJBc2NUMHlPdWRuSTFqRUN6dXB3Slp2UUxDCmIwQkdvUzFIbGlUMWcvWjRaMG5hbkt3K2FiR1dqam01Rm5mU2diUG5TczkyOTVjc0FuSkMvTEV2RUxPdDRFMUIKRUdrYmRlMG41cmcrOEpWOEM5YU9aQU5NRHZpTmIwTG5HaUNqelFJREFRQUJBb0lCQUFPOHh4ZXMyQnBsemdIawp1SU50M1Bpc05naldFUE9xdVBhSTNEYlpzaGZLT3NOLy8yY0lwcHNIa1NZQlo0QTVzdkI3K0o5cHN6Y2RTUWNrCityWlV6UkUyZkNVdU5DTlNiYVXsdXVTREhVVy9OZUwxeFkzYU56SWVvak05RGszUFJ4d3RMalV6TUNIY1poU3IKblUwSjQrYTEvMWlpVmRVeXNoSmVjU2ZxYkE4R3pBUlpLUjlYdDZlU01qQXZqdlp4QUtVMVFYWDlHL3JPNnRqUwpXNjJ5aTlkaG5vYjRBR3ovTlhmN29JZld0dW9SUTcxOFdmxm5kZWZYeVp6MnNwc3V4ZGttRUtrQW9qZ2NqbjI3CnRCeFBlUFcveWRqQ3IzTTA3WGVWVDAyaG5UQXptVnFtcUFhbG5rYkpqT0Z5dkQxNE5Cck9Lc2FoK21CUkZLTUEKSjErdUlZRUNnWUVBeTNCZGMrNTJ0SkhGQm8vL1BjU0FMOHhRQVZXTjFoakZ1Nk1BY2Q5WVF6NkhWNWdDYU1oQwpUWFZrNmt5TC9qcEdYS1E1MmVpbTBrOFUvYWc2VXVlV0Uzek45ZDJ3ci9oeDljUjFLUUxmMlpJUmNrN3ZTRUhnEct0ejFWVlhMRDZBTHlKeThGRHhMbFV0ZGRJb3R6YUNOM1d2UXhybTRYV2pCYi82UnBDQTlWLzBDZ1lFQXlYUEcKaldxdXEvYnFCMlphMGNpVUh5NnJIbGQrRVBKNXg0cWlRc0JaUnpZK085TmxuajJnaU5lcU9mRHVjeU5yQ2JBRwo2RkRSTkMrdG9TVVVpWWhtNmgyeXpuc3JOS0pQbHdqN2VGQ1JadFFSb0ErSHpWajBaTnRuQjBNRnhzcUsyeTdSClGnVVlXWmRaTmJSSFVyeTJ0VFk3RHM5UHlITncyU2p5ZERJd3ZCRUNnWUFOczYyM3B6SDdpMjNYdVU4Vm0raCsKVDZaNzBJVlREQ3dWTFM5VWZCUjN3dmhlbi9CWm1sTk00RUZCdnBJWE4xbVIxOFhGdFhPMjZuaWhkUGtvcUV4bApWNXlQbUxUVHhVbjNvWm02ZjJVUVJGUkVmS2lGRjFyR3lYY0VubGlrM3NTc2FGSUtrdDBNV3gwYVFrdy9jemJhCjJPNGcxRlZraFMreUdWVTUxcW9MQ1FLQmdDOHdwN3BJMjFIOUxTVStuTmUzbkxzUk81U0gra2dPQk9qeFdNRTYKUGErb3pUdEdjZTkza0R0K0NhbzQvaUtLa1hCYmc4SzM2OG5Gd1c2V09SRmVtbjBOSisybWZLQi94UlVrVFlRSgptNFh5OTQzL0ZWak5GYkxxa2wvcEcxbE42T2tmTm5rRCtBaEVvK2tvcWc4cTljSE5TbGhWeCtLMDZDSjJyUlQ3CkROK0JBb0dB63h1R3g5OHc0MENESWlHWmhDWGY0ZTRxTllWdVhTcm9YTDVpeWFKTDZka3BLSE9UUk5VSlBmSVYKZ1FDMy9rN0xYZkFjbTNqTktSS1huQ2cveWxTd2N6RjFGYkZKb1hjNW9ackc5TE8yQXNSdGcxanByN1ZpRlZNYwo0LzB5cEFSTmJqRzA4Y0I5bzBrbVBjUVExUHd4Q05EeXVONVRQYzRKejN3OHR5SnhTN289Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==\n")])])]),e("h2",{attrs:{id:"配置-kubectl-客户端"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#配置-kubectl-客户端","aria-hidden":"true"}},[t._v("#")]),t._v(" 配置 kubectl 客户端")]),t._v(" "),e("p",[t._v("在客户端电脑完成如下配置,即可远程管理 Kubernetes 集群")]),t._v(" "),e("Tabs",{attrs:{type:"border-card"}},[e("Tab",{attrs:{label:"Linux",lazy:""}},[e("p",[e("strong",[t._v("执行命令")])]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("vi")]),t._v(" ~/.kube/config\n")])])]),e("p",[t._v("将前面获得的 "),e("code",[t._v("/etc/kubernetes/admin.conf")]),t._v(" 文件的内容粘贴进该文件并保存")]),t._v(" "),e("p",[e("strong",[t._v("配置 hosts")])]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x.x.x.x apiserver.demo"')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" /etc/hosts\n")])])]),e("blockquote",[e("ul",[e("li",[t._v("将 x.x.x.x 替换成 demo-master-a-1 的实际 IP 地址")]),t._v(" "),e("li",[t._v("将 apiserver.demo 替换成前面获得 "),e("code",[t._v("/etc/kubernetes/admin.conf")]),t._v(" 文件中 "),e("code",[t._v("clusters/cluster/server")]),t._v(" 中 URL 里 host 对应的部分")])])]),t._v(" "),e("p",[e("strong",[t._v("验证安装结果")])]),t._v(" "),e("p",[t._v("执行命令")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("kubectl get nodes\nkubectl get pods -n kube-system\n")])])]),e("Tab",{attrs:{label:"Windows",lazy:""}},[e("p",[t._v("待完善")])])],1),t._v(" "),e("Tab",{attrs:{label:"Mac",lazy:""}},[e("p",[t._v("待完善")])])],1)],1)},[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{376:function(t,a,e){"use strict";e.r(a);var s=e(0),n=Object(s.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:"从客户端电脑远程管理-kubernetes"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#从客户端电脑远程管理-kubernetes","aria-hidden":"true"}},[t._v("#")]),t._v(" 从客户端电脑远程管理 Kubernetes")]),t._v(" "),e("p",[t._v("日常工作中,您可能需要在自己的笔记本电脑上执行 kubectl 命令管理远程 Linux 服务器上的 Kubernetes 集群。")]),t._v(" "),e("div",{staticClass:"tip custom-block"},[e("p",[t._v("从客户端电脑使用 kubectl 远程管理 Kubernetes,这个步骤并不是使用 Kuboard 的必要步骤。"),e("span",{staticStyle:{color:"red","font-weight":"500"}},[t._v("可以忽略")])])]),t._v(" "),e("h2",{attrs:{id:"在客户端电脑安装-kubectl"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#在客户端电脑安装-kubectl","aria-hidden":"true"}},[t._v("#")]),t._v(" 在客户端电脑安装 kubectl")]),t._v(" "),e("p",[t._v("Kubernetes 官网文档参照 "),e("a",{attrs:{href:"https://kubernetes.io/docs/tasks/tools/install-kubectl/",target:"_blank",rel:"noopener noreferrer"}},[t._v("安装 kubectl"),e("OutboundLink")],1),t._v(" 安装时,经常会失败,因为国内访问 google 的镜像仓库存在问题。")]),t._v(" "),e("p",[t._v("请参考下述内容,完成 kubectl 的安装")]),t._v(" "),e("Tabs",{attrs:{type:"border-card"}},[e("Tab",{attrs:{label:"Linux",lazy:""}},[e("p",[e("strong",[t._v("配置K8S的yum源")])]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<<")]),t._v("EOF "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" /etc/yum.repos.d/kubernetes.repo\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("Kubernetes\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("baseurl")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("enabled")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("gpgcheck")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("repo_gpgcheck")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("gpgkey")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg\n http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg\nEOF\n")])])]),e("p",[e("strong",[t._v("安装kubectl")])]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("yum "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -y kubectl-1.15.0\n")])])]),e("p",[e("strong",[t._v("验证安装")])]),t._v(" "),e("div",{staticClass:"language-bash extra-class"},[e("pre",{pre:!0,attrs:{class:"language-bash"}},[e("code",[t._v("kubectl version\n")])])])]),t._v(" "),e("Tab",{attrs:{label:"Windows",lazy:""}},[e("p",[t._v("待完善")])]),t._v(" "),e("Tab",{attrs:{label:"Mac",lazy:""}},[e("p",[t._v("待完善")])])],1),t._v(" "),e("h2",{attrs:{id:"获取-kubectl-config-文件"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#获取-kubectl-config-文件","aria-hidden":"true"}},[t._v("#")]),t._v(" 获取 kubectl config 文件")]),t._v(" "),e("p",[t._v("如果您参考 "),e("a",{attrs:{href:"install-k8s"}},[t._v("安装 Kubernetes 单Master节点")]),t._v(" 或 "),e("a",{attrs:{href:"install-kubernetes"}},[t._v("安装 Kubernetes 高可用")]),t._v(" 完成了 Kubernetes 安装,"),e("strong",[t._v("请在 demo-master-a-1 节点上执行如下命令")])]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("cat")]),t._v(" /etc/kubernetes/admin.conf\n")])])]),e("p",[t._v("输出内容如下所示:")]),t._v(" "),e("div",{staticClass:"language-yaml extra-class"},[e("div",{staticClass:"highlight-lines"},[e("br"),e("br"),e("br"),e("br"),e("div",{staticClass:"highlighted"},[t._v(" ")]),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br"),e("br")]),e("pre",{pre:!0,attrs:{class:"language-yaml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("apiVersion")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" v1\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("clusters")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("cluster")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("certificate-authority-data")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" LS0tLS1CRxpJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRFNU1EY3hPREEzTURFMU1Gb1hEVEk1TURjeE5UQTNNREUxTUZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWxfY05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTUlvCit1TDVvWWFaMUc5UVR2SS9Cd0RNWWNNOTVqVkdNN2E1eWZIQWtBTVptOThWNGdDamNTd0NhOWFEbHJOKzliSUkKK054OXc3L0phdG1mb1ZwYlNoZ3dqc0lBT3QrTXlxQTh1WFVvMXlwSGFBd2NkaXhYbk81ZlVRRTlKN2xDbm9NZApKM0RYNmhNWnVmNmxwRVVBK2JkaVVTYzdkOEFKVDRpSm41bDAyL21pd3hRZUJweWwzQXFGVUZUQTQxUlNLbnBECjBuTzdoaEk3cE02aUVUTVBSa29lZkZrcHFtSEhqd0g5MGZQVzhETGgwdG5ENUlTM0VUUlVjMDdHbms0ZWh1OWMKamNhRXoxK1Roe3JhcWFTRmpTdUVSMGxhU3BYOXQyd3k1S3NxZFVBRkQySGNDK0Y1eUsvTXppL2krS01FdTM0SQpiTHJNUy90L3lta1V5RTQ3T3FrQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZ0QU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFFbXRORFVVZ2FhRWs3Z0lSMnE1MkRxZ21FRkMKZW1xR21rT3U5UERvVmZ0Z0Nva3VBUXEzZzBVdzA3cTJTQnhSZzJDNzQ2Y08wbkdURFZlL2ecXNmeVBFK2RFbApPQWJmQ3R1QUlKTHVQWDB6OVBUdDBKekhobnk1ODk5RE81ODdLMm5VdXd3S01xeEYvdWRHMUNtWUkza2g2cS9RCmN0WDI5RjlhTWhDRXluWU1lVU5EUVQ4cGN0TkOpNm4rYjg0NDlmMU5RWG9kVzM0TVRrL25pd3JuQ3pDUUE5M0wKR3YxelhRL2pwTTZVeVo5dU9ZNWEzK096UjJCTzRtZ2RiL0xoam5rL0hxTGs5RUszZmhJak5Tc2h0RWsrf9NpVApPQ3JTQkRHVk5ueHIzeGRwYzltRWNCeDlQdVBqVE1ER1ZkYlowUlZHbGVVODN3dVpUaTdJdUZaR2Jicz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("server")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" https"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("//apiserver.demo"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("6443")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("contexts")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("context")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("cluster")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("user")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("admin\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("admin@kubernetes\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("current-context")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("admin@kubernetes\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("kind")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Config\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("preferences")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("users")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" kubernetes"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("-")]),t._v("admin\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("user")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("client-certificate-data")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM4akNDQxxRxZ0F3SUJBZ0lJY0JpMFhjUWJNWm93RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB4T1RBM01UZ3dOekF4TlRCYUZ3MHlNREEzTVRjd056QXhOVEZhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW9CYzZvMHRCekIyRUlldW4KcmhONTVoaU1EaEplcUpxMWxlT3VUSjRic0dqVnlrQVJQVCtGZDlTR3llRjNFZS9NS1ZBcUQ4ZzRXeHNoTTRrdAp1dnVNalNTeit3bnMySnR2TWtJWStLT2FhZFBFSUx6U3dyamxucGRQbjMvQmtTbjc1SnVzRWFLR0NCN0c5Skk3CnJOK3lkc2ZLT29KQTE1ak8vR2VvdC90UGpWNGQ4MldCbVltWitSa1labW43STFPOHh4aFpjVDNDT0QxeVp3OS8KTjBYVnZQYkFzY1QweU91ZG5JMWpFQ3p1cHdKWnZRTENiMEJHb1MxSGxpVDFnL1o0WjBuYW5LdythYkdXamptNQpGbmZTZ2JQblNzOTI5NWNzQW5KQy9MRXZFTE90NEUxQkVHa2JkZTBuNXJnKzhKVjhDOWFPWkFOxhP2aU5iMExuCkdpQ2p6UUlEQVFBQm95Y3dKVEFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFJYnd3RFJ6VExUbXNrV3R0NEZLbG1xK0NNYTRWZUFqL2x4bQpuaEdITTlTaXpFR1VDRDJ5UjEyQUV0YUdka0R5KzNuT3Q3aS9Db3Jwcm5ocnkwZHMzck81Q3BvMXAwdHNyQnZ5CkRiM1dDTDRkN2x0alplNklZQ0xGNmJCVkJmejJjY0FpZEdieW1UaVhwQU5pK25hOE8wZ3NBTmNUS1JaNG1nNDgKUXpWQktlUnZZWnhwcEV5T2JoelI2NTVoRE1aR3AzdG5pQW9NL3Z6QjA3R2dybzAxVTAvaUVOQnZaeG10S2RxRApFY0JVTzJRTHh3QlZaMFlMb0p2MmJWSTVMYWdmRDNwVFVDQ3A5MURGcDAwbmVHRUM0cDZmQXJwSG9YWU8yYVIyCjZtbEREdVhGNmg2Um53frkxU3N6MWZtSXVzZ2FXaHZUaGgrVGxQVVVTclFkZnQ2S0d4bz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[t._v("client-key-data")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBb0JjNm8wdEJ6QjJFSWV1bnJoTjU1aGlNRGhKZXFKcTFsZU91VEo0YnNHalZ5a0FSClBUK0ZkOVNHeWVGM0VlL01LVkFxRDhnNFd4c2hNNGt0dXZ1TWpTU3ord25zMkp0dk1rSVkrS09hYWRQRUlMelMKd3JqbG5wZFBuMy9Ca1NuNzVKdXNFYUtHQ0I3RzlKSTdyTit5ZHNmS09vSkExNWpPL0dlb3QvdFBqVjRkODJXQgptWW1aK1JrWVptbjdJMU84eHhoWmNUM0NPRDF5Wnc5L04wWFZ2UGJBc2NUMHlPdWRuSTFqRUN6dXB3Slp2UUxDCmIwQkdvUzFIbGlUMWcvWjRaMG5hbkt3K2FiR1dqam01Rm5mU2diUG5TczkyOTVjc0FuSkMvTEV2RUxPdDRFMUIKRUdrYmRlMG41cmcrOEpWOEM5YU9aQU5NRHZpTmIwTG5HaUNqelFJREFRQUJBb0lCQUFPOHh4ZXMyQnBsemdIawp1SU50M1Bpc05naldFUE9xdVBhSTNEYlpzaGZLT3NOLy8yY0lwcHNIa1NZQlo0QTVzdkI3K0o5cHN6Y2RTUWNrCityWlV6UkUyZkNVdU5DTlNiYVXsdXVTREhVVy9OZUwxeFkzYU56SWVvak05RGszUFJ4d3RMalV6TUNIY1poU3IKblUwSjQrYTEvMWlpVmRVeXNoSmVjU2ZxYkE4R3pBUlpLUjlYdDZlU01qQXZqdlp4QUtVMVFYWDlHL3JPNnRqUwpXNjJ5aTlkaG5vYjRBR3ovTlhmN29JZld0dW9SUTcxOFdmxm5kZWZYeVp6MnNwc3V4ZGttRUtrQW9qZ2NqbjI3CnRCeFBlUFcveWRqQ3IzTTA3WGVWVDAyaG5UQXptVnFtcUFhbG5rYkpqT0Z5dkQxNE5Cck9Lc2FoK21CUkZLTUEKSjErdUlZRUNnWUVBeTNCZGMrNTJ0SkhGQm8vL1BjU0FMOHhRQVZXTjFoakZ1Nk1BY2Q5WVF6NkhWNWdDYU1oQwpUWFZrNmt5TC9qcEdYS1E1MmVpbTBrOFUvYWc2VXVlV0Uzek45ZDJ3ci9oeDljUjFLUUxmMlpJUmNrN3ZTRUhnEct0ejFWVlhMRDZBTHlKeThGRHhMbFV0ZGRJb3R6YUNOM1d2UXhybTRYV2pCYi82UnBDQTlWLzBDZ1lFQXlYUEcKaldxdXEvYnFCMlphMGNpVUh5NnJIbGQrRVBKNXg0cWlRc0JaUnpZK085TmxuajJnaU5lcU9mRHVjeU5yQ2JBRwo2RkRSTkMrdG9TVVVpWWhtNmgyeXpuc3JOS0pQbHdqN2VGQ1JadFFSb0ErSHpWajBaTnRuQjBNRnhzcUsyeTdSClGnVVlXWmRaTmJSSFVyeTJ0VFk3RHM5UHlITncyU2p5ZERJd3ZCRUNnWUFOczYyM3B6SDdpMjNYdVU4Vm0raCsKVDZaNzBJVlREQ3dWTFM5VWZCUjN3dmhlbi9CWm1sTk00RUZCdnBJWE4xbVIxOFhGdFhPMjZuaWhkUGtvcUV4bApWNXlQbUxUVHhVbjNvWm02ZjJVUVJGUkVmS2lGRjFyR3lYY0VubGlrM3NTc2FGSUtrdDBNV3gwYVFrdy9jemJhCjJPNGcxRlZraFMreUdWVTUxcW9MQ1FLQmdDOHdwN3BJMjFIOUxTVStuTmUzbkxzUk81U0gra2dPQk9qeFdNRTYKUGErb3pUdEdjZTkza0R0K0NhbzQvaUtLa1hCYmc4SzM2OG5Gd1c2V09SRmVtbjBOSisybWZLQi94UlVrVFlRSgptNFh5OTQzL0ZWak5GYkxxa2wvcEcxbE42T2tmTm5rRCtBaEVvK2tvcWc4cTljSE5TbGhWeCtLMDZDSjJyUlQ3CkROK0JBb0dB63h1R3g5OHc0MENESWlHWmhDWGY0ZTRxTllWdVhTcm9YTDVpeWFKTDZka3BLSE9UUk5VSlBmSVYKZ1FDMy9rN0xYZkFjbTNqTktSS1huQ2cveWxTd2N6RjFGYkZKb1hjNW9ackc5TE8yQXNSdGcxanByN1ZpRlZNYwo0LzB5cEFSTmJqRzA4Y0I5bzBrbVBjUVExUHd4Q05EeXVONVRQYzRKejN3OHR5SnhTN289Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==\n")])])]),e("h2",{attrs:{id:"配置-kubectl-客户端"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#配置-kubectl-客户端","aria-hidden":"true"}},[t._v("#")]),t._v(" 配置 kubectl 客户端")]),t._v(" "),e("p",[t._v("在客户端电脑完成如下配置,即可远程管理 Kubernetes 集群")]),t._v(" "),e("Tabs",{attrs:{type:"border-card"}},[e("Tab",{attrs:{label:"Linux",lazy:""}},[e("p",[e("strong",[t._v("执行命令")])]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token function"}},[t._v("vi")]),t._v(" ~/.kube/config\n")])])]),e("p",[t._v("将前面获得的 "),e("code",[t._v("/etc/kubernetes/admin.conf")]),t._v(" 文件的内容粘贴进该文件并保存")]),t._v(" "),e("p",[e("strong",[t._v("配置 hosts")])]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[e("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("echo")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x.x.x.x apiserver.demo"')]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">>")]),t._v(" /etc/hosts\n")])])]),e("blockquote",[e("ul",[e("li",[t._v("将 x.x.x.x 替换成 demo-master-a-1 的实际 IP 地址")]),t._v(" "),e("li",[t._v("将 apiserver.demo 替换成前面获得 "),e("code",[t._v("/etc/kubernetes/admin.conf")]),t._v(" 文件中 "),e("code",[t._v("clusters/cluster/server")]),t._v(" 中 URL 里 host 对应的部分")])])]),t._v(" "),e("p",[e("strong",[t._v("验证安装结果")])]),t._v(" "),e("p",[t._v("执行命令")]),t._v(" "),e("div",{staticClass:"language-sh extra-class"},[e("pre",{pre:!0,attrs:{class:"language-sh"}},[e("code",[t._v("kubectl get nodes\nkubectl get pods -n kube-system\n")])])]),e("Tab",{attrs:{label:"Windows",lazy:""}},[e("p",[t._v("待完善")])])],1),t._v(" "),e("Tab",{attrs:{label:"Mac",lazy:""}},[e("p",[t._v("待完善")])])],1)],1)},[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/43.88270b10.js b/docs/assets/js/43.58b216df.js similarity index 87% rename from docs/assets/js/43.88270b10.js rename to docs/assets/js/43.58b216df.js index e31a5d1..137fd4e 100644 --- a/docs/assets/js/43.88270b10.js +++ b/docs/assets/js/43.58b216df.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{384:function(t,e,r){"use strict";r.r(e);var s=r(0),a=Object(s.a)({},function(){var t=this.$createElement,e=this._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"部署-cloud-eureka"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#部署-cloud-eureka","aria-hidden":"true"}},[this._v("#")]),this._v(" 部署 cloud-eureka")])])},[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{378:function(t,e,r){"use strict";r.r(e);var s=r(0),a=Object(s.a)({},function(){var t=this.$createElement,e=this._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[e("h1",{attrs:{id:"部署-cloud-eureka"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#部署-cloud-eureka","aria-hidden":"true"}},[this._v("#")]),this._v(" 部署 cloud-eureka")])])},[],!1,null,null,null);e.default=a.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/44.c53ef094.js b/docs/assets/js/44.5a5cdde4.js similarity index 95% rename from docs/assets/js/44.c53ef094.js rename to docs/assets/js/44.5a5cdde4.js index 49ff1d4..21cb562 100644 --- a/docs/assets/js/44.c53ef094.js +++ b/docs/assets/js/44.5a5cdde4.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{360:function(t,e,r){"use strict";r.r(e);var a=r(0),s=Object(a.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:"v1-0-0-beta-13"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-0-beta-13","aria-hidden":"true"}},[t._v("#")]),t._v(" v1.0.0-beta.13")]),t._v(" "),r("p",[r("strong",[t._v("发布日期")])]),t._v(" "),r("p",[t._v("2019-07-28")]),t._v(" "),r("p",[r("strong",[t._v("优化")])]),t._v(" "),r("ul",[r("li",[t._v("调整主题色")]),t._v(" "),r("li",[t._v("查看 Kuboard 版本信息")]),t._v(" "),r("li",[t._v("一次删除 Deployment 下所有的错误事件 ("),r("a",{attrs:{href:"https://github.com/shaohq/kuboard-issues/issues/1",target:"_blank",rel:"noopener noreferrer"}},[t._v("# 1"),r("OutboundLink")],1),t._v(")")])]),t._v(" "),r("p",[r("strong",[t._v("BUG 修复")])]),t._v(" "),r("ul",[r("li",[t._v("Kubernetes 二进制安装时, Kuboard 无法启动")]),t._v(" "),r("li",[t._v("Kubernetes 中缺少 kube-dns Service 时, Kuboard 无法启动")])])])},[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{374:function(t,e,r){"use strict";r.r(e);var a=r(0),s=Object(a.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:"v1-0-0-beta-13"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-0-beta-13","aria-hidden":"true"}},[t._v("#")]),t._v(" v1.0.0-beta.13")]),t._v(" "),r("p",[r("strong",[t._v("发布日期")])]),t._v(" "),r("p",[t._v("2019-07-28")]),t._v(" "),r("p",[r("strong",[t._v("优化")])]),t._v(" "),r("ul",[r("li",[t._v("调整主题色")]),t._v(" "),r("li",[t._v("查看 Kuboard 版本信息")]),t._v(" "),r("li",[t._v("一次删除 Deployment 下所有的错误事件 ("),r("a",{attrs:{href:"https://github.com/shaohq/kuboard-issues/issues/1",target:"_blank",rel:"noopener noreferrer"}},[t._v("# 1"),r("OutboundLink")],1),t._v(")")])]),t._v(" "),r("p",[r("strong",[t._v("BUG 修复")])]),t._v(" "),r("ul",[r("li",[t._v("Kubernetes 二进制安装时, Kuboard 无法启动")]),t._v(" "),r("li",[t._v("Kubernetes 中缺少 kube-dns Service 时, Kuboard 无法启动")])])])},[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/6.92da0a1c.js b/docs/assets/js/6.a961abad.js similarity index 84% rename from docs/assets/js/6.92da0a1c.js rename to docs/assets/js/6.a961abad.js index cd99933..acb081a 100644 --- a/docs/assets/js/6.92da0a1c.js +++ b/docs/assets/js/6.a961abad.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{215:function(t,v,_){t.exports=_.p+"assets/img/image-20190717113807552.b3fe5f7d.png"},216:function(t,v,_){t.exports=_.p+"assets/img/image-20190717114304953.854b47d8.png"},217:function(t,v,_){t.exports=_.p+"assets/img/image-20190717114354610.6d522c25.png"},218:function(t,v,_){t.exports=_.p+"assets/img/image-20190717115020848.eec5a17e.png"},219:function(t,v,_){t.exports=_.p+"assets/img/image-20190717115403374.48894c27.png"},220:function(t,v,_){t.exports=_.p+"assets/img/image-20190717115457614.c7f0d044.png"},221:function(t,v,_){t.exports=_.p+"assets/img/image-20190717115829821.63b81f36.png"},222:function(t,v,_){t.exports=_.p+"assets/img/image-20190723112105018.a27c638f.png"},223:function(t,v,_){t.exports=_.p+"assets/img/image-20190723112143032.7a5220bd.png"},224:function(t,v,_){t.exports=_.p+"assets/img/image-20190723112204681.8279ca8f.png"},225:function(t,v,_){t.exports=_.p+"assets/img/image-20190723113250521.3b80f3d2.png"},226:function(t,v,_){t.exports=_.p+"assets/img/image-20190723113312360.a3a51c0c.png"},390:function(t,v,_){"use strict";_.r(v);var a=_(0),r=Object(a.a)({},function(){var t=this,v=t.$createElement,a=t._self._c||v;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("p",[t._v("必须具备如下条件:")]),t._v(" "),a("ul",[a("li",[t._v("Kubernetes 集群 (安装在阿里云,本文将使用阿里云的 NFS 服务作为存储资源,Kuboard 也可以运行在其他云环境或者私有环境中。)")]),t._v(" "),a("li",[t._v("已在集群中安装 Kuboard")])]),t._v(" "),a("h3",{attrs:{id:"在阿里云创建-nas-服务"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#在阿里云创建-nas-服务","aria-hidden":"true"}},[t._v("#")]),t._v(" 在阿里云创建 NAS 服务")]),t._v(" "),a("p",[t._v("如果您在其他 IaaS 供应商搭建了 Kubernetes 集群,请参考该 IaaS 供应商的文档,创建 NFS 服务。您也可以自行搭建 NFS 服务器,用来为 Kubernetes 集群提供存储资源。")]),t._v(" "),a("ul",[a("li",[t._v("进入阿里云 "),a("em",[a("strong",[t._v("文件存储 NAS 服务")])]),t._v(" 控制台")])]),t._v(" "),a("p",[t._v("登录 www.aliyun.com 后,在控制台界面的产品与服务中选择 "),a("em",[a("strong",[t._v("文件存储 NAS")])])]),t._v(" "),a("p",[t._v("如下图所示")]),t._v(" "),a("p",[a("img",{attrs:{src:_(215),alt:"image-20190717113807552"}})]),t._v(" "),a("ul",[a("li",[t._v("在 "),a("em",[a("strong",[t._v("文件存储 NAS")])]),t._v(" 控制台中点击 "),a("em",[a("strong",[t._v("创建文件系统")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(216),alt:"image-20190717114304953"}})]),t._v(" "),a("ul",[a("li",[t._v("填写表单")])]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("字段名称")]),t._v(" "),a("th",[t._v("填写内容")]),t._v(" "),a("th",[t._v("说明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("地域")]),t._v(" "),a("td",[t._v("请选择您的 Kubernetes 集群所在的地域")]),t._v(" "),a("td",[t._v("文件系统所在地域")])]),t._v(" "),a("tr",[a("td",[t._v("存储类型")]),t._v(" "),a("td",[t._v("容量型 / 或 SSD型")]),t._v(" "),a("td",[t._v("测试目的,使用价格便宜的容量型即可")])]),t._v(" "),a("tr",[a("td",[t._v("协议类型")]),t._v(" "),a("td",[t._v("NFS")]),t._v(" "),a("td",[t._v("请选择NFS")])]),t._v(" "),a("tr",[a("td",[t._v("可用区")]),t._v(" "),a("td",[t._v("请选择您的 Kubernetes 集群所在的可用区")]),t._v(" "),a("td",[t._v("文件系统所在可用区")])]),t._v(" "),a("tr",[a("td",[t._v("存储包")]),t._v(" "),a("td",[t._v("如果当下没有存储包,可以后续绑定")]),t._v(" "),a("td",[t._v("不绑定存储包,将无法使用该文件系统")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(217),alt:"image-20190717114354610"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("确定")])])])]),t._v(" "),a("p",[t._v("点击确定后,可查看到该文件系统已创建成功")]),t._v(" "),a("p",[a("img",{attrs:{src:_(218),alt:"image-20190717115020848"}})]),t._v(" "),a("ul",[a("li",[t._v("绑定存储包")])]),t._v(" "),a("p",[t._v("请自行在阿里云中为该文件系统绑定存储包,如果不绑定存储包,将无法使用该文件系统。")]),t._v(" "),a("ul",[a("li",[t._v("点击刚创建文件系统的 "),a("em",[a("strong",[t._v("管理")])]),t._v(" 按钮")])]),t._v(" "),a("p",[a("img",{attrs:{src:_(219),alt:"image-20190717115403374"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("添加挂载点")])])])]),t._v(" "),a("p",[t._v("并填写表单")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("字段名称")]),t._v(" "),a("th",[t._v("填写内容")]),t._v(" "),a("th",[t._v("说明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("挂载点类型")]),t._v(" "),a("td",[t._v("专有网络")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("VPC网络")]),t._v(" "),a("td",[t._v("请选择您的 Kubernetes 集群所在的VPC")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("交换机")]),t._v(" "),a("td",[t._v("请选择您的 Kubernetes 集群所在的交换机")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("权限组")]),t._v(" "),a("td",[t._v("VPC默认权限组(全部允许)")]),t._v(" "),a("td",[t._v("请选择全部允许")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(220),alt:"image-20190717115457614"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("确定")])])])]),t._v(" "),a("p",[t._v("点击确定后,将完成挂载点创建,如下图所示:")]),t._v(" "),a("p",[a("img",{attrs:{src:_(221),alt:"image-20190717115829821"}})]),t._v(" "),a("ul",[a("li",[t._v("获取 NFS 连接参数:")])]),t._v(" "),a("p",[t._v("在上图界面中,将 "),a("em",[a("strong",[t._v("V4 Mount")])]),t._v(" 的指令复制下来后,如下所示:")]),t._v(" "),a("div",{staticStyle:{"font-family":"Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace",padding:"20px","background-color":"rgb(244, 244, 245)","border-radius":"4px"}},[t._v("\nsudo mount -t nfs -o vers=4,minorversion=0,noresvport "),a("span",{staticStyle:{color:"red","background-color":"rgb(254, 240, 240)"}},[t._v("189344a39c-lex38.cn-beijing.nas.aliyuncs.com")]),t._v(":"),a("span",{staticStyle:{color:"blue","background-color":"rgb(217, 236, 255)"}},[t._v("/")]),t._v(" /mnt\n")]),t._v(" "),a("p",[t._v("其中红色字体的文字为 NFS Server 的地址,蓝色字体的文字为 NFS Path。如下表所示:")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("字段名称")]),t._v(" "),a("th",[t._v("字段取值")]),t._v(" "),a("th",[t._v("说明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("NFS Server")]),t._v(" "),a("td",[t._v("189344a39c-lex38.cn-beijing.nas.aliyuncs.com")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("NFS Path")]),t._v(" "),a("td",[t._v("/")]),t._v(" "),a("td",[t._v("NFS Server和NFS Path以冒号分隔")])])])]),t._v(" "),a("h3",{attrs:{id:"在-kuboard-创建存储类"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#在-kuboard-创建存储类","aria-hidden":"true"}},[t._v("#")]),t._v(" 在 Kuboard 创建存储类")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("进入 Kuboard "),a("em",[a("strong",[t._v("集群概览页")])])]),t._v(" "),a("p",[t._v("参考 "),a("a",{attrs:{href:"install/install-dashboard?id=%E8%AE%BF%E9%97%AE"}},[t._v("访问 Kuboard")])]),t._v(" "),a("p",[t._v("如下图所示:")])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(222),alt:"image-20190723112105018"}})]),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("table",[a("thead",[a("tr",[a("th",[t._v("字段名称")]),t._v(" "),a("th",[t._v("填写内容")]),t._v(" "),a("th",[t._v("说明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("名称")]),t._v(" "),a("td",[t._v("cluster-storage")]),t._v(" "),a("td",[t._v("填写你喜欢的名称")])]),t._v(" "),a("tr",[a("td",[t._v("限定名称空间")]),t._v(" "),a("td",[t._v("不填写")]),t._v(" "),a("td",[t._v("如果限定名称空间,"),a("br"),t._v("则在 Kuboard 中,您只能在指定的名称空间中使用该存储类"),a("br"),t._v("在 kubectl 中,不受影响")])]),t._v(" "),a("tr",[a("td",[t._v("存储类型")]),t._v(" "),a("td",[t._v("NFS")]),t._v(" "),a("td",[t._v("目前 Kuboard 只支持 NFS,将要增加其他类型的存储,如 CephFS、Cinder 等")])]),t._v(" "),a("tr",[a("td",[t._v("回收策略")]),t._v(" "),a("td",[t._v("回收后删除")]),t._v(" "),a("td",[t._v("当该存储类创建的 存储卷(Persistent Volume)被删除后,之前该存储卷中的文件可以被:回收后删除 / 回收后保留")])]),t._v(" "),a("tr",[a("td",[t._v("存储卷绑定模式")]),t._v(" "),a("td",[t._v("首次使用时绑定")]),t._v(" "),a("td",[t._v("即刻绑定:当 存储卷被创建时,就在 NFS 中为其分配空间,并绑定;"),a("br"),t._v("首次使用时绑定: 在存储卷被第一次使用到时,才绑定")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(223),alt:"image-20190723112143032"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("保存")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(224),alt:"image-20190723112204681"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("应用")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(225),alt:"image-20190723113250521"}})]),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:_(226),alt:"image-20190723113312360"}})])])},[],!1,null,null,null);v.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{218:function(t,v,_){t.exports=_.p+"assets/img/image-20190717113807552.b3fe5f7d.png"},219:function(t,v,_){t.exports=_.p+"assets/img/image-20190717114304953.854b47d8.png"},220:function(t,v,_){t.exports=_.p+"assets/img/image-20190717114354610.6d522c25.png"},221:function(t,v,_){t.exports=_.p+"assets/img/image-20190717115020848.eec5a17e.png"},222:function(t,v,_){t.exports=_.p+"assets/img/image-20190717115403374.48894c27.png"},223:function(t,v,_){t.exports=_.p+"assets/img/image-20190717115457614.c7f0d044.png"},224:function(t,v,_){t.exports=_.p+"assets/img/image-20190717115829821.63b81f36.png"},225:function(t,v,_){t.exports=_.p+"assets/img/image-20190723112105018.a27c638f.png"},226:function(t,v,_){t.exports=_.p+"assets/img/image-20190723112143032.7a5220bd.png"},227:function(t,v,_){t.exports=_.p+"assets/img/image-20190723112204681.8279ca8f.png"},228:function(t,v,_){t.exports=_.p+"assets/img/image-20190723113250521.3b80f3d2.png"},229:function(t,v,_){t.exports=_.p+"assets/img/image-20190723113312360.a3a51c0c.png"},390:function(t,v,_){"use strict";_.r(v);var a=_(0),r=Object(a.a)({},function(){var t=this,v=t.$createElement,a=t._self._c||v;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("p",[t._v("必须具备如下条件:")]),t._v(" "),a("ul",[a("li",[t._v("Kubernetes 集群 (安装在阿里云,本文将使用阿里云的 NFS 服务作为存储资源,Kuboard 也可以运行在其他云环境或者私有环境中。)")]),t._v(" "),a("li",[t._v("已在集群中安装 Kuboard")])]),t._v(" "),a("h3",{attrs:{id:"在阿里云创建-nas-服务"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#在阿里云创建-nas-服务","aria-hidden":"true"}},[t._v("#")]),t._v(" 在阿里云创建 NAS 服务")]),t._v(" "),a("p",[t._v("如果您在其他 IaaS 供应商搭建了 Kubernetes 集群,请参考该 IaaS 供应商的文档,创建 NFS 服务。您也可以自行搭建 NFS 服务器,用来为 Kubernetes 集群提供存储资源。")]),t._v(" "),a("ul",[a("li",[t._v("进入阿里云 "),a("em",[a("strong",[t._v("文件存储 NAS 服务")])]),t._v(" 控制台")])]),t._v(" "),a("p",[t._v("登录 www.aliyun.com 后,在控制台界面的产品与服务中选择 "),a("em",[a("strong",[t._v("文件存储 NAS")])])]),t._v(" "),a("p",[t._v("如下图所示")]),t._v(" "),a("p",[a("img",{attrs:{src:_(218),alt:"image-20190717113807552"}})]),t._v(" "),a("ul",[a("li",[t._v("在 "),a("em",[a("strong",[t._v("文件存储 NAS")])]),t._v(" 控制台中点击 "),a("em",[a("strong",[t._v("创建文件系统")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(219),alt:"image-20190717114304953"}})]),t._v(" "),a("ul",[a("li",[t._v("填写表单")])]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("字段名称")]),t._v(" "),a("th",[t._v("填写内容")]),t._v(" "),a("th",[t._v("说明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("地域")]),t._v(" "),a("td",[t._v("请选择您的 Kubernetes 集群所在的地域")]),t._v(" "),a("td",[t._v("文件系统所在地域")])]),t._v(" "),a("tr",[a("td",[t._v("存储类型")]),t._v(" "),a("td",[t._v("容量型 / 或 SSD型")]),t._v(" "),a("td",[t._v("测试目的,使用价格便宜的容量型即可")])]),t._v(" "),a("tr",[a("td",[t._v("协议类型")]),t._v(" "),a("td",[t._v("NFS")]),t._v(" "),a("td",[t._v("请选择NFS")])]),t._v(" "),a("tr",[a("td",[t._v("可用区")]),t._v(" "),a("td",[t._v("请选择您的 Kubernetes 集群所在的可用区")]),t._v(" "),a("td",[t._v("文件系统所在可用区")])]),t._v(" "),a("tr",[a("td",[t._v("存储包")]),t._v(" "),a("td",[t._v("如果当下没有存储包,可以后续绑定")]),t._v(" "),a("td",[t._v("不绑定存储包,将无法使用该文件系统")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(220),alt:"image-20190717114354610"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("确定")])])])]),t._v(" "),a("p",[t._v("点击确定后,可查看到该文件系统已创建成功")]),t._v(" "),a("p",[a("img",{attrs:{src:_(221),alt:"image-20190717115020848"}})]),t._v(" "),a("ul",[a("li",[t._v("绑定存储包")])]),t._v(" "),a("p",[t._v("请自行在阿里云中为该文件系统绑定存储包,如果不绑定存储包,将无法使用该文件系统。")]),t._v(" "),a("ul",[a("li",[t._v("点击刚创建文件系统的 "),a("em",[a("strong",[t._v("管理")])]),t._v(" 按钮")])]),t._v(" "),a("p",[a("img",{attrs:{src:_(222),alt:"image-20190717115403374"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("添加挂载点")])])])]),t._v(" "),a("p",[t._v("并填写表单")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("字段名称")]),t._v(" "),a("th",[t._v("填写内容")]),t._v(" "),a("th",[t._v("说明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("挂载点类型")]),t._v(" "),a("td",[t._v("专有网络")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("VPC网络")]),t._v(" "),a("td",[t._v("请选择您的 Kubernetes 集群所在的VPC")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("交换机")]),t._v(" "),a("td",[t._v("请选择您的 Kubernetes 集群所在的交换机")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("权限组")]),t._v(" "),a("td",[t._v("VPC默认权限组(全部允许)")]),t._v(" "),a("td",[t._v("请选择全部允许")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(223),alt:"image-20190717115457614"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("确定")])])])]),t._v(" "),a("p",[t._v("点击确定后,将完成挂载点创建,如下图所示:")]),t._v(" "),a("p",[a("img",{attrs:{src:_(224),alt:"image-20190717115829821"}})]),t._v(" "),a("ul",[a("li",[t._v("获取 NFS 连接参数:")])]),t._v(" "),a("p",[t._v("在上图界面中,将 "),a("em",[a("strong",[t._v("V4 Mount")])]),t._v(" 的指令复制下来后,如下所示:")]),t._v(" "),a("div",{staticStyle:{"font-family":"Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace",padding:"20px","background-color":"rgb(244, 244, 245)","border-radius":"4px"}},[t._v("\nsudo mount -t nfs -o vers=4,minorversion=0,noresvport "),a("span",{staticStyle:{color:"red","background-color":"rgb(254, 240, 240)"}},[t._v("189344a39c-lex38.cn-beijing.nas.aliyuncs.com")]),t._v(":"),a("span",{staticStyle:{color:"blue","background-color":"rgb(217, 236, 255)"}},[t._v("/")]),t._v(" /mnt\n")]),t._v(" "),a("p",[t._v("其中红色字体的文字为 NFS Server 的地址,蓝色字体的文字为 NFS Path。如下表所示:")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("字段名称")]),t._v(" "),a("th",[t._v("字段取值")]),t._v(" "),a("th",[t._v("说明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("NFS Server")]),t._v(" "),a("td",[t._v("189344a39c-lex38.cn-beijing.nas.aliyuncs.com")]),t._v(" "),a("td")]),t._v(" "),a("tr",[a("td",[t._v("NFS Path")]),t._v(" "),a("td",[t._v("/")]),t._v(" "),a("td",[t._v("NFS Server和NFS Path以冒号分隔")])])])]),t._v(" "),a("h3",{attrs:{id:"在-kuboard-创建存储类"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#在-kuboard-创建存储类","aria-hidden":"true"}},[t._v("#")]),t._v(" 在 Kuboard 创建存储类")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("进入 Kuboard "),a("em",[a("strong",[t._v("集群概览页")])])]),t._v(" "),a("p",[t._v("参考 "),a("a",{attrs:{href:"install/install-dashboard?id=%E8%AE%BF%E9%97%AE"}},[t._v("访问 Kuboard")])]),t._v(" "),a("p",[t._v("如下图所示:")])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(225),alt:"image-20190723112105018"}})]),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("table",[a("thead",[a("tr",[a("th",[t._v("字段名称")]),t._v(" "),a("th",[t._v("填写内容")]),t._v(" "),a("th",[t._v("说明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("名称")]),t._v(" "),a("td",[t._v("cluster-storage")]),t._v(" "),a("td",[t._v("填写你喜欢的名称")])]),t._v(" "),a("tr",[a("td",[t._v("限定名称空间")]),t._v(" "),a("td",[t._v("不填写")]),t._v(" "),a("td",[t._v("如果限定名称空间,"),a("br"),t._v("则在 Kuboard 中,您只能在指定的名称空间中使用该存储类"),a("br"),t._v("在 kubectl 中,不受影响")])]),t._v(" "),a("tr",[a("td",[t._v("存储类型")]),t._v(" "),a("td",[t._v("NFS")]),t._v(" "),a("td",[t._v("目前 Kuboard 只支持 NFS,将要增加其他类型的存储,如 CephFS、Cinder 等")])]),t._v(" "),a("tr",[a("td",[t._v("回收策略")]),t._v(" "),a("td",[t._v("回收后删除")]),t._v(" "),a("td",[t._v("当该存储类创建的 存储卷(Persistent Volume)被删除后,之前该存储卷中的文件可以被:回收后删除 / 回收后保留")])]),t._v(" "),a("tr",[a("td",[t._v("存储卷绑定模式")]),t._v(" "),a("td",[t._v("首次使用时绑定")]),t._v(" "),a("td",[t._v("即刻绑定:当 存储卷被创建时,就在 NFS 中为其分配空间,并绑定;"),a("br"),t._v("首次使用时绑定: 在存储卷被第一次使用到时,才绑定")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(226),alt:"image-20190723112143032"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("保存")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(227),alt:"image-20190723112204681"}})]),t._v(" "),a("ul",[a("li",[t._v("点击 "),a("em",[a("strong",[t._v("应用")])])])]),t._v(" "),a("p",[a("img",{attrs:{src:_(228),alt:"image-20190723113250521"}})]),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:_(229),alt:"image-20190723113312360"}})])])},[],!1,null,null,null);v.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/7.7c97df49.js b/docs/assets/js/7.18a3efb8.js similarity index 99% rename from docs/assets/js/7.7c97df49.js rename to docs/assets/js/7.18a3efb8.js index d832d0a..307edcf 100644 --- a/docs/assets/js/7.7c97df49.js +++ b/docs/assets/js/7.18a3efb8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{284:function(t,e,s){t.exports=s.p+"assets/img/image-20190720232405147.8fc011f9.png"},285:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233322837.998be85a.png"},286:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233348284.2360801d.png"},287:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233412812.4f5ce20f.png"},288:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233436465.6d8cf61e.png"},289:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233512996.d7ba2b19.png"},290:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000526434.cfdf2d30.png"},291:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000759925.bb32a332.png"},292:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000822458.5797bca7.png"},293:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000847954.6f05e4b8.png"},294:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000919933.3a1d313e.png"},295:function(t,e,s){t.exports=s.p+"assets/img/image-20190721100715898.f0faa9aa.png"},373: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(284),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(285),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(286),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(287),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(288),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(289),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(290),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(291),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(292),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(293),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(294),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(295),alt:"image-20190721100715898"}})])])},[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{284:function(t,e,s){t.exports=s.p+"assets/img/image-20190720232405147.8fc011f9.png"},285:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233322837.998be85a.png"},286:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233348284.2360801d.png"},287:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233412812.4f5ce20f.png"},288:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233436465.6d8cf61e.png"},289:function(t,e,s){t.exports=s.p+"assets/img/image-20190720233512996.d7ba2b19.png"},290:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000526434.cfdf2d30.png"},291:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000759925.bb32a332.png"},292:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000822458.5797bca7.png"},293:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000847954.6f05e4b8.png"},294:function(t,e,s){t.exports=s.p+"assets/img/image-20190721000919933.3a1d313e.png"},295:function(t,e,s){t.exports=s.p+"assets/img/image-20190721100715898.f0faa9aa.png"},356: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(284),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(285),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(286),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(287),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(288),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(289),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(290),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(291),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(292),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(293),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(294),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(295),alt:"image-20190721100715898"}})])])},[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/8.273c8f48.js b/docs/assets/js/8.59440f2b.js similarity index 95% rename from docs/assets/js/8.273c8f48.js rename to docs/assets/js/8.59440f2b.js index 2c57f6d..7a325ad 100644 --- a/docs/assets/js/8.273c8f48.js +++ b/docs/assets/js/8.59440f2b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{338:function(e,t,r){e.exports=r.p+"assets/img/image-20190722165648180.fe018998.png"},339:function(e,t,r){e.exports=r.p+"assets/img/image-20190722162249531.e826dfb9.png"},340:function(e,t,r){e.exports=r.p+"assets/img/image-20190722172356943.9a901574.png"},341:function(e,t,r){e.exports=r.p+"assets/img/image-20190722182005060.8e560b34.png"},342:function(e,t,r){e.exports=r.p+"assets/img/image-20190722183329825.63739750.png"},343:function(e,t,r){e.exports=r.p+"assets/img/image-20190722183750444.973f7dfa.png"},344:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAArCAYAAACXblYnAAAKv2lDQ1BJQ0MgUHJvZmlsZQAASImVlgdQk9kWx+/3pYeEAIFQpITeBOkEkBJ6AKVXUQlJIKGEmBAU7Iq4gquCiAioK7AgouBaAFkLIooVRQXsC7IoqOtiwYbK+4BH2H1v3nvz/jM39zcn555y57szBwAyYItEabACAOnCTHGYnyc9JjaOjhsEOEADeKALrNkciYgZEhIEEM3sf9eHXgBN7ncsJmP9+///VYpcnoQDABSCcCJXwklH+ASynnFE4kwAUBWIXX95pmiS2xBWFiMFInx3kpOneXiSE6f565RPRJgXAGikKzyJzRYnA0DSROz0LE4yEoc0H2ErIVcgRHiyXjcOn81F+DDCc9PTMyb5HsImiX+Jk/y3mImymGx2soyne5kS3lsgEaWxs//P6/jfSk+TzuQwQhaJL/YPQ3Z55M7upWYEyliYuDB4hgXcKf8p5kv9I2eYI/GKm2Eu2ztQdjZtYdAMJwl8WbI4mayIGeZJfMJnWJwRJsuVJPZizjBbPJtXmhops/N5LFn8HH5E9AxnCaIWzrAkNTxw1sdLZhdLw2T184R+nrN5fWW9p0v+0q+AJTubyY/wl/XOnq2fJ2TOxpTEyGrj8rx9Zn0iZf6iTE9ZLlFaiMyfl+Yns0uywmVnM5EPcvZsiOwOU9gBITMMIoAPsAF2wAJYAysAMnkrMieb8MoQZYsFyfxMOhN5XTw6S8ixnEu3sbJ2AmDyrU5/Cu/Cpt4gRDs7a8uoBoDxAXkThbO2xGIAmvMAUHswazPYBwAlF4Cmdo5UnDVtQ0/+YAARUIAyUAfaQB+YIJXZAAfgAjyQSgNAMFJxLFgCOIAP0oEYLAerwHqQBwrADrALlIH9oAocBEfAMdAMToPz4BK4Bm6BHvAQ9IMh8BKMgg9gHIIgHESGqJA6pAMZQuaQDcSA3CAfKAgKg2KhBCgZEkJSaBW0ESqAiqAy6ABUB/0CnYLOQ1egbug+NACNQG+hLzAKJsHKsBZsBM+DGTATDoQj4MVwMrwMzoFz4W1wKVwJH4ab4PPwNbgH7odfwmMogJJD0VC6KAsUA+WFCkbFoZJQYtQaVD6qBFWJakC1ojpRd1D9qFeoz2gsmoqmoy3QLmh/dCSag16GXoPeii5DH0Q3oTvQd9AD6FH0dwwZo4kxxzhjWJgYTDJmOSYPU4KpwZzEXMT0YIYwH7BYLA1rjHXE+mNjsSnYldit2L3YRmwbths7iB3D4XDqOHOcKy4Yx8Zl4vJwe3CHcedwt3FDuE94ObwO3gbvi4/DC/Eb8CX4Q/iz+Nv45/hxggLBkOBMCCZwCdmE7YRqQivhJmGIME5UJBoTXYkRxBTiemIpsYF4kfiI+E5OTk5PzkkuVE4gt06uVO6o3GW5AbnPJCWSGcmLFE+SkraRakltpPukd2Qy2YjsQY4jZ5K3kevIF8hPyJ/kqfKW8ix5rvxa+XL5Jvnb8q8pBIohhUlZQsmhlFCOU25SXikQFIwUvBTYCmsUyhVOKfQpjClSFa0VgxXTFbcqHlK8ojishFMyUvJR4irlKlUpXVAapKKo+lQvKoe6kVpNvUgdUsYqGyuzlFOUC5SPKHcpj6ooqdipRKmsUClXOaPST0PRjGgsWhptO+0YrZf2RVVLlanKU92i2qB6W/Wj2hw1DzWeWr5ao1qP2hd1urqPeqp6oXqz+mMNtIaZRqjGco19Ghc1Xs1RnuMyhzMnf86xOQ80YU0zzTDNlZpVmtc1x7S0tfy0RFp7tC5ovdKmaXtop2gXa5/VHtGh6rjpCHSKdc7pvKCr0Jn0NHopvYM+qqup668r1T2g26U7rmesF6m3Qa9R77E+UZ+hn6RfrN+uP2qgY7DAYJVBvcEDQ4Ihw5BvuNuw0/CjkbFRtNFmo2ajYWM1Y5ZxjnG98SMTsom7yTKTSpO7plhThmmq6V7TW2awmb0Z36zc7KY5bO5gLjDfa949FzPXaa5wbuXcPguSBdMiy6LeYsCSZhlkucGy2fL1PIN5cfMK53XO+25lb5VmVW310FrJOsB6g3Wr9VsbMxuOTbnNXVuyra/tWtsW2zd25nY8u3129+yp9gvsN9u3239zcHQQOzQ4jDgaOCY4Vjj2MZQZIYytjMtOGCdPp7VOp50+Ozs4Zzofc/7TxcIl1eWQy/B84/m8+dXzB131XNmuB1z73ehuCW4/ufW767qz3Svdn3roe3A9ajyeM02ZKczDzNeeVp5iz5OeH72cvVZ7tXmjvP288727fJR8In3KfJ746vkm+9b7jvrZ+630a/PH+Af6F/r3sbRYHFYdazTAMWB1QEcgKTA8sCzwaZBZkDiodQG8IGDBzgWPFhouFC5sDgbBrOCdwY9DjEOWhfwaig0NCS0PfRZmHbYqrDOcGr40/FD4hwjPiO0RDyNNIqWR7VGUqPiouqiP0d7RRdH9MfNiVsdci9WIFcS2xOHiouJq4sYW+SzatWgo3j4+L753sfHiFYuvLNFYkrbkzFLKUvbS4wmYhOiEQwlf2cHsSvZYIiuxInGU48XZzXnJ9eAWc0d4rrwi3vMk16SipOFk1+SdySN8d34J/5XAS1AmeJPin7I/5WNqcGpt6kRadFpjOj49If2UUEmYKuzI0M5YkdEtMhflifqXOS/btWxUHCiukUCSxZKWTGVkKLouNZFukg5kuWWVZ31aHrX8+ArFFcIV17PNsrdkP8/xzfl5JXolZ2X7Kt1V61cNrGauPrAGWpO4pn2t/trctUPr/NYdXE9cn7r+xgarDUUb3m+M3tiaq5W7Lndwk9+m+jz5PHFe32aXzft/QP8g+KFri+2WPVu+53PzrxZYFZQUfN3K2Xr1R+sfS3+c2Ja0rWu7w/Z9O7A7hDt6C90LDxYpFuUUDe5csLOpmF6cX/x+19JdV0rsSvbvJu6W7u4vDSpt2WOwZ8eer2X8sp5yz/LGCs2KLRUf93L33t7nsa9hv9b+gv1ffhL8dO+A34GmSqPKkipsVVbVs+qo6s6fGT/X1WjUFNR8qxXW9h8MO9hR51hXd0jz0PZ6uF5aP3I4/vCtI95HWhosGg400hoLjoKj0qMvfkn4pfdY4LH244zjDScMT1ScpJ7Mb4KasptGm/nN/S2xLd2nAk61t7q0nvzV8tfa07qny8+onNl+lng29+zEuZxzY22itlfnk88Pti9tf3gh5sLdjtCOrouBFy9f8r10oZPZee6y6+XTV5yvnLrKuNp8zeFa03X76ydv2N842eXQ1XTT8WbLLadbrd3zu8/edr99/o73nUt3WXev9Szs6e6N7L3XF9/Xf497b/h+2v03D7IejD9c9wjzKP+xwuOSJ5pPKn8z/a2x36H/zID3wPWn4U8fDnIGX/4u+f3rUO4z8rOS5zrP64Zthk+P+I7cerHoxdBL0cvxV3l/KP5R8drk9Yk/Pf68PhozOvRG/Gbi7dZ36u9q39u9bx8LGXvyIf3D+Mf8T+qfDn5mfO78Ev3l+fjyr7ivpd9Mv7V+D/z+aCJ9YkLEFrOnRgEUsuCkJADe1gJAjgWAegsA4qLpWXpK0PT8P0XgP/H0vD0lBwCq+gCIWAlA0A0A9pQhoywSnxIPQAgFsbsA2NZWtv4pSZKtzXQskjsymjyemHhnAgCuEIBvhRMT41UTE9+qkGIfAtCWPT3DT8qqAQB28yT1jX8H/6p/AH2NEW7QbsbhAAARKUlEQVR4Ae1daXBVR3b+tCCBEGgX2jd2CbGbHcxiwGODDRgvkPI4dipOZis7ySSZJJP5ka1qUpVUJhnHzlDxDDO2B3uwzY7ZMRZhsdmEQaxmMRKLFhBIAgkJ5/v66uq9Jz9mJB4jpHp9qnjv3r59+3afvuc73zndT4R8RYEVqwGrgaDUQGhQjtoO2mrAasBowAKAfRGsBoJYAxYAgnjy7dCtBiwA2HfAaiCINWABIIgn3w7dasACgH0HrAaCWAMWAIJ48u3QrQbC26uCd5Z9gMrKStyx2wfaq7pOUT80JATpaalYMH9Ou/rz8krgi6tAk9010i69/b4qh4UAQ1OAf380sCeEtGcj0NvLlqO8vAp8h6x0YQ0IuzMyUrFw/tw2jeKPafynqtpU1VbqYA0M6wP8x2P3/tB2hQAVFdb4713VnedOAfjFsktt7tBpa/xt1lVHV/z8SmBPbBcABPYoe3dn0kB7QjjL+jvTzPn2JdCQzAKArz7tmdVAUGnAAkBQTbcdrNWArwYsAPjqw55ZDQSVBiwABNV028FaDfhqwAKArz7smdVAUGmg3RuBAtFOWGgoRo8ajgMHD6Ppzh0UFgz221z19es4c/Z8y7Xhw4YgPDwcn+072FJ2t4OUlGQMKyzAhk3bTJWQu2xacP8OSnJyIqZOnoj33udid7P06NEdsx6ZhrXrN6GxsdEt9vlOT0vByOFDsXrdRiyY9zg2bfkYN27U+NTxdzJj2hRcKS/H4c9L/F1GQkI8sjLTW65dKL0IcOE+IyOtpezS5Su4ePFyy3lnP+hGN7NoKLD8CNB4B5gz0H+PL94Adn3pufZUPhDJN/SdYk/Z/TxK6AH8+UTgH/iqTM0FxmbweHvbnvB93neiAlh13H/93DhglGfKcIirrtp/MTzVU/9YORDoMp6ntXs76lAACCEAJCcl4pmn52ENDScxMd70OiszA3U3b6KiotLvKKJ79kS3bt18rsXG9PY5v1Z9HaFsv7amDv365mL/gWJUXb2Gb//Ji6bcpzJP3lz6jjHYuNhYbmzy3dk0YnghbrI/XxGksrMzce6c11vZ3NCUSRPw5YVSc5bGnXXdCFASgVxcfCzHUoWwsDC89MIiU+5+REREYPCg/hg3ZpRbZL7fXPprNDU1IS2lDwoGDzQAmJXFN5IisBo8aIDpRxqBRwDVlQAglOodkAC8xs2Hf78F6EvjkMhArt7iDsO77DNIjAJ6eE27ZinNd9pRet00hVfGA/MGOcd3+1x/EvjXIs/V+QSYXhFAfROwsAC4wLaGcmONt5yvBupuA79+2rsUiGK/ZvYFXhjhW77oN0AD2xuSDDzW3wG00emA+n6HADC7H7D3grOLL7Z7kAGAvKk8ZkH+QDTebsSnnzkePSM9zXjECxfKWrQp45GR5+ZmI4VGERbmsAdV+PxICV54/jk0NDRQsyGIIDj852tL6DkzMOexmaaNRc8uwK49n2HJm28Zjzpu7Gi8t3ylMdSX/nCxMaq+eTkYNWIoDaoHZs+cZvog9jEkfzDeWfY+ukV0w2OzZ+A3769CRaXnLc2ngfbqFY29nx1o6a8OunfvjrmPz0JoSCjeXb7CAEtUVJRpK4RWkJuTjWPH+RZSBg7ohzNnzpnjxc895QNCtXV1Blzi45sthbVqampNWXR0T3NPV/qQgcnwv0GDqCehervZo8sbrjkOHCDJcSUiDEjvBYzPAvJpRGIPi4c6V1X3raeAWhqkDEpG+MgvnO3JP/sU+KXXdLw0kveyrf9huSvqhys9ee9cMpEffwIU0ujzqOoMgstDBKUbfK1ceW0v8CkNNp5sQTsitQV3XCaw+bRTY3qeh7UsedLpl3tv5U1gP8eW45lGVNQ6ZcmdZBrD3c52xLfo9oD+fVG0cw+mT5uMQTSCUBq69qdPnTLB0Pzbtzm7lA9WrDVGER8XazyeysQe+vfLMwCg8zeWLKXRReLlP/qmTnH23Hn89PX/JVsIx/OLn8Gp02dw69YthPMZdbV15rjJZRJE41qWKbS4fKXcgMyJk6cxc/rDOFpynP0KRUJMHC5eugKBhxiLRGA1feokE8YYADKlQBz7+cSccaisuooNG7eaUnn0HUW7IK89ZvRInDz1BZnFLWEWekb1IFjMxs5de7Fp83bj/XWTAKih4TYKh+TjDhmIRKGF2poyeQLq6m5ynF+a8q7yMZDefxoNRcb4ZxNotH2BcBq2jOl740jzaag3myOt739kMB1ZMUBMpDNCsYcpOQ5YqOTJt+m5ee3DRc51fep+tw2dy9i1SUYMw5/8xUQgmt5/bynwOndEv/s5IMZxiVHcm/t971A//5tAIKB4fhiw/Sxwje1qHuN5zz/NAJbsc8DktjNlKLvhMIcnyEoU9kgu0/gbePzdsUAVwWE3geVBS4cCgAwuJzsLvaKj8RGNpLj4CI3mUXrS/SgpOYGFC57A6TNnfWL9i5cu4xv0wlfKKyADFb3/XSJju1BaZry9mER8QpwxTN0nsJFoJ5xiaYUWBw8dxiwyAHlwUf7U1D7II/OQJ1af83JzkJSYAHnxuXNmm/yFd25ALaqPylHs3ss3oVn07EED+xtGsHrtBlP6/GJySd6wZu1GFDMPIOYh715CZiDvLjYi4JJE8XjypHHYtr3IlA0tzEd9fb25prq6rytIRZ0TX8vr/fPHwIoS4F9mAr8iAdx4ytnLvvO8b6x/5Arwo6mMsyuBbV8Ak7Pv30gf7Qc8nOO0t6jQAYKlZA8CBYGNjFZyk75oEz29mIRAiz4Bf7fFufbz+Q4A/JDnq44BfzsFxrurfhLHKXq/46xTN47H3xrDce5yyp5k+zXONJq65Q9wGjscAJZ/sAoD+/cjEGQaoyk5doKeuR5RPaOwZv1G8wOVPslJ+GTnbly/ThilxDAUkPErVneTd45qv/4phjFq5DDS+aMMB2Zhxer1SIiPb0kqKg8hkXdVbqEnn1vN54i2i57L+ORtvSUtNQVV9OwFBYOMkStvQOeC3JwsTBg3xuQY5MWPcizeIpAo4jjKmLAbkj8Io0cPx5atnxjWol/jFRXtNmFJIhN/Gpf6I+CRpDLsUayv/igBKFDSQ2X0qlPNnEdXAQBR4VfWATPygDEZDAemAhto+DUNDrX+EY1IP2gRU3idLEFeWJLWi8Z/hqDNKePQ75tE8K1/nR5dRnmYudTjTOa54YFyDGPSnUdV08vLoG81OuxFCbvHBzghyb/tdFiIfo33Bvv8vbVOGCHWISYxIdNpoyCZYMDwYcc5JgBTmBtwphEyetURUwgaAJBK6usbUFNba1YDdu/Zh/0Hi/HcM/OhY1F4Ue0RzK7L47YAQO/e5oVXku+3AUA2k2aPkMLLu8uTy8PLcBMYS+/bf8jMiNqQyMhT+iRDIYcMvLyiwrS94MnHGQ5w1rzk9BdnDaNQ5l7P1wqBJD4uzjCWeCb99KzWovBC4DNzxlQzlmXvfWgYhepdZYJyxvQpeGj0COw7cMjkGNTGYeY3tIpRz/yGwEv9l0RGRmAW2xGrKD581IQt5kIX+ailsYsJyOP+gt72PVLuN+Y6x6LCAoGFQ4B+8R4ASCUAKMknCt5E6ny/RB47O5YAwAYPXvJtdTsBp3UIoBBFcfxfTWbfaLDfWu2MRXd+We0whz9gaPDuYUA/nFJ2fw19wbzBTr7iB5sYnl5znqOw4wdsR7mOleyHVhIepHQoA9BA5fknTRiLpW+9a+i/qL1ERtc3L9vQcNF+GZ1EtFxxvrL8vXv3MvTbXPDzERkZyaW7jYbOyyOPZaZdQKKEXWUVZ4YSHk7NU+SdBTjysKLh3kuMAiF3GbJwyGBkZjguoTX4yHAlWtr0FlF3rWqIuSjZp+O4uBgDdN71xDoEQIMG9GeCr8wkPQUWGq/6Np65B+UNxHwU+hhgy8pEJpcJt2zdYViRd3ud+Vie/+XRwDffZxjwiOfFH5wETMwCejOmP0rDKTrvjELxv8rkIVOiPXH073uMo9Ic49RzlP3/JcMUsQKxl2tkMpkxTs7Aux8CKOUfFCYooSnm8tc0cuUp9hDcXmRCUsDCCNLkMsQSxDJG8lliElt57UFJhwNAAanwsROnIJovz7t+w2Yz9mvXqk1GXvGuvKKW8STaA1DKn67KYJXM0+rB3URhgitiGh+uXMe8wlyTNFTyTRJDNqHEoGvMez7db+J0rTa4IKDwwE3A3dHaTTtlBhOcJ2i4xzlOrQZMe3gSk4mXW1iI25zClUzS+5WrPzJF8vbKFUxjknEfx5/PpT+tBChvoYSj8gQCg1LuDfAeq9teZ/7WCsBmTs/ARCeZ9o/bnd5q6e0Zev6f7AKMFyUzkCzIB4pJz0W/5S21etBRQjs14n6fIQn7zhrg1fGAchPLmvvo9md6rrO+/zf09BJ5+x/ytX51gsN0tPSXE+sAQF0D8x7Ug9ouJvt4kMavvnYoAPSgN89h3PwJY18lt7Scd5sGHRYaZvIA8oLdGfcqMae4VwYxkmvyH6xkgEVJSkrATRqvK89yP4FL6d0y72/lAhRXr1i1zlBnWr1Zg3ez6LpXybuSYycNu1CMLpHXTuKKg0RhggsGpsDPxx2GE4lkGjdqatj3CGO0Sh56i5Yq1RdvEWPxJ9p/UM+8SGNjU8tlHTtlHWgJLU8P7CCmu7N0plj5Tx9ysvnymCJjN5gMk9dUne58G0ekAudoQE8TFLQiIFFYUM16rmg/gRJyruSTRSg29xYtIcrj/uVE71Jg3UnHiH1LPWf7yr4eAniuOvsSFON7i2i9P1HYovE1eKbR5Bpal/m7t6PKOhQA0tNTcZlxrpa6DnEFQDH+swvnmQ1BKlNCUMt+GzdvN8bfr28ezp2/gKrKq2apL4Lr8h/v+L8W3eyl99bGGlH41qJYWVnzjzZsNSDz8OTxZBOFZjVB9FmiHXfauLPt4yKzHChDz0xPN22KxktkuLeaM++mwM/HkaPHTB9cMCq7eMl4fO+qAj4tY3pLJKl+pdf+AvdaTGwMpk+dbFYFjnBJUqLEn+7v3TuaOiRX7kKi5JcSbaLzinu1409GrA1BKtt4inNBD6k1eRn/lGyuvZc6nlRLfVqz/689ngH/ipGX9gAo8y4RmLiJQ6fk6+du+a3b7tG9fWsPgFYKvEVUX38urbWkM3TQsmcSAUObkCRK/PXn/QprlCt40NKuPwn2k5/+LOD+yjC9s+zysPLqymr7E3lJLX1pQ41osLv8JsNsYPws8T7WufYbVFVdc6hzcx2Vy0Bbe3Ml1xQuuKKcgTy5ViYkWiVQH9xknMoEUurHda+tv2pb/xRaeI9P9bWhSc/1rq/yKO4FECvS3gFXBGgxzHWUc1ekcheiiuT93JX4lemX8gp6dmuG4d7fnu9Xvvtym6pP+3mbqv3WSqLx3p5QXltZ9lICgD/RDj1tyNEGHCUQ3Sy9DF+xucT72Clp+6cSe8o/eCcBlRhUHwVQ/kQGLa/eGmzUR+UszhC8XBFoKYmpP6XWh8SPU2hEEeWVWmezk8akxGigsu3Fe2+hwwHg3rtq77zfGuhIALjffbfteTQQCAB4RVKeBu2R1YDVQHBowAJAcMyzHaXVgF8NWADwqxZbaDUQHBqwABAc8/y1UWo/gZWurwHmMgOSdgGAlvHu767sgPpub75nDXxlfqHY1tv1n09Y6Zwa0G8LApF2rQLoQcs/XI0y7sxzd9IF8nB7b8drQJ5fP09u6/8K5Pbw1XX8OwyXuQzmFtjvB6oBeX4Zv35EFYi0GwACeZi912rAaqBzaaBdIUDn6rrtjdWA1UCgGrAAEKgG7f1WA11YAxYAuvDk2a5bDQSqAQsAgWrQ3m810IU1YAGgC0+e7brVQKAasAAQqAbt/VYDXVgD/w9zej+Y1do6fwAAAABJRU5ErkJggg=="},345:function(e,t,r){e.exports=r.p+"assets/img/image-20190722184943431.f2f72e7c.png"},346:function(e,t,r){e.exports=r.p+"assets/img/image-20190722185113938.4d31e54b.png"},354:function(e,t,r){"use strict";r.r(t);var s=r(0),v=Object(s.a)({},function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"如何降低-kubernetes-学习门槛"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#如何降低-kubernetes-学习门槛","aria-hidden":"true"}},[e._v("#")]),e._v(" 如何降低 Kubernetes 学习门槛")]),e._v(" "),s("h2",{attrs:{id:"kubernetes-学习门槛在哪儿"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-学习门槛在哪儿","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 学习门槛在哪儿")]),e._v(" "),s("p",[e._v("学习 Kubernetes 之前,必须具备的知识储备:")]),e._v(" "),s("ul",[s("li",[e._v("Linux 基础")]),e._v(" "),s("li",[e._v("网络基础")]),e._v(" "),s("li",[e._v("容器技术,例如 https://www.docker.com/")])]),e._v(" "),s("p",[e._v("学习 Kubernetes 的过程中可能碰到的难关:")]),e._v(" "),s("ul",[s("li",[e._v("理解 Kubenetes 为了实现容器编排而提出的各种抽象概念以及他们之间的关系:容器组(Pod)、存储卷(Volume)、存储卷声明(PVC)、Ingress、Service 等")]),e._v(" "),s("li",[e._v("安装及配置 Kubernetes 环境")]),e._v(" "),s("li",[e._v("编写和维护 Kubernetes Yaml 文件")]),e._v(" "),s("li",[e._v("熟悉 kubectl 命令行工具中常用的 10 多个命令")])]),e._v(" "),s("h2",{attrs:{id:"降低-kubernetes-学习门槛"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#降低-kubernetes-学习门槛","aria-hidden":"true"}},[e._v("#")]),e._v(" 降低 Kubernetes 学习门槛")]),e._v(" "),s("p",[e._v("单纯地按章节学习 Linux 基础知识、网络知识、容器技术等,每一块儿的基础入门书籍就有几百页之多。作者认为,最好的学习方法是在实践中学习,碰到问题时去寻求答案,解决问题后去反思总结。这种学习方法趣味性强,得来的知识也最为牢靠,如果选对了方向,所学知识通常也是工作中实用性最高的知识。"),s("span",{staticStyle:{color:"red","font-weight":"500"}},[e._v("读了100页 K8S 文档,也不如安装一遍 K8S")])]),e._v(" "),s("p",[e._v("Kuboard 为初学者学习 Kubernetes 时设计了如下学习路径:")]),e._v(" "),s("ul",[s("li",[e._v("跟随文档 "),s("a",{attrs:{href:"/install/install-k8s"}},[e._v("安装 Kubernetes 单Master节点")]),e._v(" 快速安装一个可以练习使用的 Kubernetes 环境,(初学者也许要花费2小时或更多)")]),e._v(" "),s("li",[e._v("跟随文档 "),s("a",{attrs:{href:"/install/install-dashboard"}},[e._v("安装 Kuboard")]),e._v(" (5分钟)")]),e._v(" "),s("li",[e._v("使用 Kuboard 工作负载编辑器 "),s("a",{attrs:{href:"/guide/example/busybox"}},[e._v("创建 busybox")]),e._v(" (10分钟)")]),e._v(" "),s("li",[e._v("尝试 Kuboard 设计的其他 example "),s("a",{attrs:{href:"/guide/index"}},[e._v("使用 Kuboard")])])]),e._v(" "),s("p",[e._v("进阶路线:")]),e._v(" "),s("ul",[s("li",[e._v("在 Kubernetes 中部署 Spring Cloud 微服务应用")])]),e._v(" "),s("p",[e._v("本文后续章节介绍了 Kuboard 工作负载编辑器的设计,如果您能够大致理解当中的概念,说明您已经完全准备好了,可以开始自己的 Kubernetes 之旅。")]),e._v(" "),s("h2",{attrs:{id:"工作负载编辑器设计"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#工作负载编辑器设计","aria-hidden":"true"}},[e._v("#")]),e._v(" 工作负载编辑器设计")]),e._v(" "),s("p",[e._v("​\t\t在向 Kubernetes 集群部署应用时,开发者或者运维团队必须花大量的时间去理解 Kubernetes 中各种对象的概念,并编写 Yaml 文件去描述 Kubernetes 对象以及他们之间的关系,然而,不同的人因为经验、视角的不同,对Kubernetes 中各对象之间关系的理解并不完全一致,也因此产生了一系列问题:")]),e._v(" "),s("ul",[s("li",[e._v("由于理解的不到位,刚入门Kubernetes的技术人员在使用 Kubernetes 部署应用时经常性地受挫;")]),e._v(" "),s("li",[e._v("由于理解方式的不一致,不同技术人员编写的 yaml 文件结构各不一样,降低了部署在后期的可维护性;")]),e._v(" "),s("li",[e._v("由于部署数量的增加,导致 YAML 文件的数量和代码行数不断增长;")])]),e._v(" "),s("p",[e._v("​\t\tKubernetes 官方提供的 Kubernetes Dashboard 充分意识到了 Kubernete 对象类型在种类上的多样性以及关系上的复杂性,到目前为止并没有在全功能 Dashboard 上做出过多努力,尤其是没有付出过多努力去打造工作负载的 UI 编辑器。在 Kubernetes Dashboard 中,如果想要对 Service、Deployment、StatefulSet、ConfigMap 等各种 Kubernetes 对象执行新增或者变更操作时,您必须编写 YAML 文件。从这个意义上来讲,截止到作者写这篇文章的时间点,Kubernetes 的官方 Dashboard 仍然是一个 “只读” 型 Dashboard,几乎所有的运维操作仍然需要技术人员去编写和维护冗长的 YAML 文件,并通过 kubectl 命令来完成。")]),e._v(" "),s("p",[e._v("​\t\t由于 Kubernetes YAML 文件复杂性,以及开发/运维团队在多环境复制(开发环境、测试环境、准上线环境、生产环境等)方面的普遍需求,Kubernetes 社区提出了各种各样的解决方案,例如 kustomize / helm chart 等,这些解决方案在解决一个问题的同时,又在另一方面增加了复杂度,为 Kubernetes 爱好者增加了新的学习门槛。")]),e._v(" "),s("p",[e._v("​\t\tKuboard 与 Kubernetes Dashboard 相同的是,架构上的简洁性。尤其是,使用 Kuboard 并不需要我们去学习和理解新的概念,而是和 Kuboard 一起,将 Kubernetes 对象中各种复杂的概念和关系梳理清楚,将各种知识点条理化,清晰化。在 Kuboard 的辅助下,轻松掌握 Kubernetes 的使用和运维,并利用 Kuboard 完成 Kubernetes 的日常运维工作。")]),e._v(" "),s("h2",{attrs:{id:"工作负载编辑器介绍"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#工作负载编辑器介绍","aria-hidden":"true"}},[e._v("#")]),e._v(" 工作负载编辑器介绍")]),e._v(" "),s("p",[e._v("为了降低 Kubernetes 的学习难度和使用难度,Kuboard 对 Kubernetes 中管理的各种对象做了一个梳理,并以此为基础,设计了 Kuboard 工作负载编辑器。")]),e._v(" "),s("p",[e._v("Kuboard 工作负载编辑器以下图的方式理解和管理 Kubernetes 对象。")]),e._v(" "),s("p",[s("img",{attrs:{src:r(338),alt:"image-20190722165648180"}})]),e._v(" "),s("p",[e._v("上图中各概念与 Kuboard 工作负载编辑器界面的映射关系如下:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(339),alt:"image-20190722162249531"}})]),e._v(" "),s("h3",{attrs:{id:"_1-基本信息"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-基本信息","aria-hidden":"true"}},[e._v("#")]),e._v(" 1. 基本信息")]),e._v(" "),s("p",[e._v("基本信息对应到 Kubernetes 的 Workload Controller,当前 Kuboard 工作负载编辑器已经支持了使用频率最高的几类 Workload Controller :")]),e._v(" "),s("ul",[s("li",[e._v("Deployment")]),e._v(" "),s("li",[e._v("StatefulSet")]),e._v(" "),s("li",[e._v("DaemonSet")])]),e._v(" "),s("blockquote",[s("p",[e._v("Kuboard 将陆续支持其他低频使用的 Controller: Garbage Collection, TTL Controller, Jobs, Cron Job。")])]),e._v(" "),s("p",[e._v("Kubernetes Workload Controller 主要用于:")]),e._v(" "),s("ul",[s("li",[e._v("根据容器组模板的定义,创建和管理多个容器组")]),e._v(" "),s("li",[e._v("处理容器组的复制和上线")]),e._v(" "),s("li",[e._v("在集群范围内提供自修复能力")])]),e._v(" "),s("blockquote",[s("p",[e._v("例如:Workload Controller 起初在节点 A 上创建并运行了一个容器组 pod_a,当节点 A 出现故障不能正常工作时,Workload Controller 可以自动地在其他可用的节点上运行一个完全相同的容器组实例 pod_a' 以替代 pod_a。")]),e._v(" "),s("p",[e._v("不同类型的 Workload Controller 在处理容器组时,会有各自不同的行为。")])]),e._v(" "),s("blockquote",[s("p",[e._v("请参考 https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pods-and-controllers")])]),e._v(" "),s("p",[e._v("基本信息编辑器的界面如下图所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(340),alt:"image-20190722172356943"}})]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("字段名称")]),e._v(" "),s("th",[e._v("字段描述")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[e._v("服务类型")]),e._v(" "),s("td",[e._v("即工作负载类型,"),s("br"),e._v("当前支持: Deployment、StatefulSet、DaemonSet")])]),e._v(" "),s("tr",[s("td",[e._v("服务分层")]),e._v(" "),s("td",[e._v("决定了 Kuboard 将该工作负载展示在哪一个分层,同时,也确定了该工作负载名称的前缀,可选项有:"),s("br"),e._v("* 展现层 web、网关层 gateway、服务层 svc、持久层 db、中间件层 cloud、监控层 monitor;"),s("br"),e._v("* 默认层当前不可选择")])]),e._v(" "),s("tr",[s("td",[e._v("标签")]),e._v(" "),s("td",[e._v("用于确定 Service 的 labelSelector、Controller 的 labels、容器组的 labels")])]),e._v(" "),s("tr",[s("td",[e._v("服务描述")]),e._v(" "),s("td",[e._v("展示在 Kuboard 界面上的一段描述信息")])]),e._v(" "),s("tr",[s("td",[e._v("副本数量")]),e._v(" "),s("td",[e._v("对于 Deployment 和 StatefulSet 可以填写,决定了该控制器应该维持的容器组副本的数量")])])])]),e._v(" "),s("h3",{attrs:{id:"_2-数据卷"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-数据卷","aria-hidden":"true"}},[e._v("#")]),e._v(" 2. 数据卷")]),e._v(" "),s("p",[e._v("​\t\t容器每次启动时,从镜像中初始化所有文件,后续对文件系统的修改、新增、删除操作的结果都是不能持久化的。当容器崩溃时, kubelet 重启该容器,但是原容器已经做的修改将丢失,因为每次启动容器,都是从镜像中初始化;此外,多个容器运行在同一个容器组中时,通常伴随着在不同容器之间共享文件的需求。")]),e._v(" "),s("p",[e._v("​\t\tKubernetes的抽象出了数据卷 Volume 的概念,以解决上述的问题。")]),e._v(" "),s("p",[e._v("​\t\t"),s("strong",[e._v("Kuboard 目前支持如下类型的数据卷:")])]),e._v(" "),s("ul",[s("li",[e._v("NFS")]),e._v(" "),s("li",[e._v("存储卷声明")]),e._v(" "),s("li",[e._v("emptyDir")]),e._v(" "),s("li",[e._v("配置 ConfigMap")]),e._v(" "),s("li",[e._v("Secrets")])]),e._v(" "),s("blockquote",[s("p",[e._v("Kubernetes 支持的数据卷类型,请参考:https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes")]),e._v(" "),s("p",[e._v("Kuboard 认为当前支持的数据卷类型已经满足绝大多数应用场景,目前正在添加对更多类型数据卷的支持。")])]),e._v(" "),s("p",[e._v("​\t\t容器组中的不同容器都可以通过挂载点引用该容器组加载的数据卷。Kuboard 工作负载编辑中,使用如下界面定义数据卷:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(341),alt:"image-20190722182005060"}})]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("字段名称")]),e._v(" "),s("th",[e._v("说明")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[e._v("数据卷名称")]),e._v(" "),s("td",[e._v("如图中的 "),s("em",[s("strong",[e._v("example-data")])]),e._v(" 、 "),s("em",[s("strong",[e._v("empty-dir")])])])]),e._v(" "),s("tr",[s("td",[e._v("数据卷类型")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[e._v("数据卷详细信息")]),e._v(" "),s("td",[e._v("不同类型的数据卷需要填写的信息不尽相同,例如"),s("br"),e._v("存储卷声明,需要选择事先已经在名称空间中创建好的存储卷声明"),s("br"),e._v("NFS,需要填写 NFS Server 的地址,以及 NFS Path")])])])]),e._v(" "),s("h3",{attrs:{id:"_3-身份信息"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-身份信息","aria-hidden":"true"}},[e._v("#")]),e._v(" 3. 身份信息")]),e._v(" "),s("p",[e._v("身份信息区域主要为容器组定义两类信息:")]),e._v(" "),s("ul",[s("li",[e._v("imagePullSecrets,容器组调用镜像仓库接口抓取镜像时所使用的用户名密码。如果您使用了私有镜像仓库,您需要在此指定镜像仓库的用户名密码;如果您使用 docker 公共仓库,则无需填写 imagePullSecrets")]),e._v(" "),s("li",[e._v("ServiceAccount,容器组调用 kubernetes apiserver 时,所使用的身份信息")])]),e._v(" "),s("p",[e._v("Kuboard 工作负载编辑器中关于身份信息的编辑界面如下所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(342),alt:"image-20190722183329825"}})]),e._v(" "),s("h3",{attrs:{id:"_4-容器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-容器","aria-hidden":"true"}},[e._v("#")]),e._v(" 4. 容器")]),e._v(" "),s("p",[e._v("容器是我们真正应用程序镜像被加载和运行的地方,按照 Kubernetes 的设计,一个容器组 Pod 中可以包含多个容器 Container,这些容器被分为两类:")]),e._v(" "),s("ul",[s("li",[e._v("初始化容器\n"),s("ul",[s("li",[e._v("初始化容器总是执行后结束执行")]),e._v(" "),s("li",[e._v("初始化容器按其定义的顺序执行,前一个初始化容器执行结束后,才开始后一个初始化容器的执行")]),e._v(" "),s("li",[e._v("只有初始化容器执行成功后,容器组才启动工作容器")]),e._v(" "),s("li",[e._v("请参考 https://kubernetes.io/docs/concepts/workloads/pods/init-containers/")])])]),e._v(" "),s("li",[e._v("工作容器\n"),s("ul",[s("li",[e._v("容器组可以包含一个或多个工作容器")]),e._v(" "),s("li",[e._v("https://kubernetes.io/docs/concepts/workloads/pods/pod-overview")])])])]),e._v(" "),s("p",[e._v("Kuborad中,定义容器的界面如下图所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(343),alt:"image-20190722183750444"}})]),e._v(" "),s("p",[s("img",{attrs:{src:r(344),alt:"image-20190722184516447"}})]),e._v(" "),s("h3",{attrs:{id:"_5-访问方式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_5-访问方式","aria-hidden":"true"}},[e._v("#")]),e._v(" 5. 访问方式")]),e._v(" "),s("p",[e._v("​\t\t访问方式,即 Kubernetes Service。")]),e._v(" "),s("blockquote",[s("p",[e._v("请参考: https://kubernetes.io/docs/concepts/services-networking/service/")])]),e._v(" "),s("p",[e._v("​\t\tKuboard 中,支持 ClusterIP(集群内访问) 以及 NodePort(VPC 内访问) 两种 Service 访问方式,您也可以不为该工作负载定义 Service 访问方式。访问方式的界面如下所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(345),alt:"image-20190722184943431"}})]),e._v(" "),s("h3",{attrs:{id:"_6-互联网入口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_6-互联网入口","aria-hidden":"true"}},[e._v("#")]),e._v(" 6. 互联网入口")]),e._v(" "),s("p",[e._v("​\t\t互联网入口,即 Kubernetes Ingress。")]),e._v(" "),s("blockquote",[s("p",[e._v("请参考: https://kubernetes.io/docs/concepts/services-networking/ingress/")])]),e._v(" "),s("p",[e._v("​\t\tKuboard 并不限定您使用何种类型的 "),s("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ingress Controller"),s("OutboundLink")],1),e._v(", 但是 "),s("a",{attrs:{href:"/install/install-k8s"}},[e._v("安装 Kubernetes 用于测试")]),e._v(" 文档中,推荐使用的 Ingress Controller 是 "),s("a",{attrs:{href:"https://github.com/nginxinc/kubernetes-ingress",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nginx-Ingress"),s("OutboundLink")],1),e._v("。")]),e._v(" "),s("p",[e._v("​\t\t在您使用 Nginx-Ingress 的情况下,要想确保您能按照互联网入口中定义的域名访问您的服务,请确保以下两点:")]),e._v(" "),s("ul",[s("li",[e._v("域名解析指向 Kubernetes 集群中 Worker 节点对应的负载均衡的 IP 地址\n"),s("ul",[s("li",[e._v("如果是测试环境,也可以只指向其中一台 Worker 节点的 IP 地址")])])]),e._v(" "),s("li",[e._v("通过该域名,可以访问 Worker 节点的 80 端口\n"),s("ul",[s("li",[e._v("如果您启用了 HTTPS,请同时确保通过该域名可以访问 Worker 节点的 443 端口")])])])]),e._v(" "),s("p",[e._v("​\t\tKuboard 中,定义互联网入口的界面如下所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(346),alt:"image-20190722185113938"}})])])},[],!1,null,null,null);t.default=v.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{336:function(e,t,r){e.exports=r.p+"assets/img/image-20190722165648180.fe018998.png"},337:function(e,t,r){e.exports=r.p+"assets/img/image-20190722162249531.e826dfb9.png"},338:function(e,t,r){e.exports=r.p+"assets/img/image-20190722172356943.9a901574.png"},339:function(e,t,r){e.exports=r.p+"assets/img/image-20190722182005060.8e560b34.png"},340:function(e,t,r){e.exports=r.p+"assets/img/image-20190722183329825.63739750.png"},341:function(e,t,r){e.exports=r.p+"assets/img/image-20190722183750444.973f7dfa.png"},342:function(e,t){e.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAArCAYAAACXblYnAAAKv2lDQ1BJQ0MgUHJvZmlsZQAASImVlgdQk9kWx+/3pYeEAIFQpITeBOkEkBJ6AKVXUQlJIKGEmBAU7Iq4gquCiAioK7AgouBaAFkLIooVRQXsC7IoqOtiwYbK+4BH2H1v3nvz/jM39zcn555y57szBwAyYItEabACAOnCTHGYnyc9JjaOjhsEOEADeKALrNkciYgZEhIEEM3sf9eHXgBN7ncsJmP9+///VYpcnoQDABSCcCJXwklH+ASynnFE4kwAUBWIXX95pmiS2xBWFiMFInx3kpOneXiSE6f565RPRJgXAGikKzyJzRYnA0DSROz0LE4yEoc0H2ErIVcgRHiyXjcOn81F+DDCc9PTMyb5HsImiX+Jk/y3mImymGx2soyne5kS3lsgEaWxs//P6/jfSk+TzuQwQhaJL/YPQ3Z55M7upWYEyliYuDB4hgXcKf8p5kv9I2eYI/GKm2Eu2ztQdjZtYdAMJwl8WbI4mayIGeZJfMJnWJwRJsuVJPZizjBbPJtXmhops/N5LFn8HH5E9AxnCaIWzrAkNTxw1sdLZhdLw2T184R+nrN5fWW9p0v+0q+AJTubyY/wl/XOnq2fJ2TOxpTEyGrj8rx9Zn0iZf6iTE9ZLlFaiMyfl+Yns0uywmVnM5EPcvZsiOwOU9gBITMMIoAPsAF2wAJYAysAMnkrMieb8MoQZYsFyfxMOhN5XTw6S8ixnEu3sbJ2AmDyrU5/Cu/Cpt4gRDs7a8uoBoDxAXkThbO2xGIAmvMAUHswazPYBwAlF4Cmdo5UnDVtQ0/+YAARUIAyUAfaQB+YIJXZAAfgAjyQSgNAMFJxLFgCOIAP0oEYLAerwHqQBwrADrALlIH9oAocBEfAMdAMToPz4BK4Bm6BHvAQ9IMh8BKMgg9gHIIgHESGqJA6pAMZQuaQDcSA3CAfKAgKg2KhBCgZEkJSaBW0ESqAiqAy6ABUB/0CnYLOQ1egbug+NACNQG+hLzAKJsHKsBZsBM+DGTATDoQj4MVwMrwMzoFz4W1wKVwJH4ab4PPwNbgH7odfwmMogJJD0VC6KAsUA+WFCkbFoZJQYtQaVD6qBFWJakC1ojpRd1D9qFeoz2gsmoqmoy3QLmh/dCSag16GXoPeii5DH0Q3oTvQd9AD6FH0dwwZo4kxxzhjWJgYTDJmOSYPU4KpwZzEXMT0YIYwH7BYLA1rjHXE+mNjsSnYldit2L3YRmwbths7iB3D4XDqOHOcKy4Yx8Zl4vJwe3CHcedwt3FDuE94ObwO3gbvi4/DC/Eb8CX4Q/iz+Nv45/hxggLBkOBMCCZwCdmE7YRqQivhJmGIME5UJBoTXYkRxBTiemIpsYF4kfiI+E5OTk5PzkkuVE4gt06uVO6o3GW5AbnPJCWSGcmLFE+SkraRakltpPukd2Qy2YjsQY4jZ5K3kevIF8hPyJ/kqfKW8ix5rvxa+XL5Jvnb8q8pBIohhUlZQsmhlFCOU25SXikQFIwUvBTYCmsUyhVOKfQpjClSFa0VgxXTFbcqHlK8ojishFMyUvJR4irlKlUpXVAapKKo+lQvKoe6kVpNvUgdUsYqGyuzlFOUC5SPKHcpj6ooqdipRKmsUClXOaPST0PRjGgsWhptO+0YrZf2RVVLlanKU92i2qB6W/Wj2hw1DzWeWr5ao1qP2hd1urqPeqp6oXqz+mMNtIaZRqjGco19Ghc1Xs1RnuMyhzMnf86xOQ80YU0zzTDNlZpVmtc1x7S0tfy0RFp7tC5ovdKmaXtop2gXa5/VHtGh6rjpCHSKdc7pvKCr0Jn0NHopvYM+qqup668r1T2g26U7rmesF6m3Qa9R77E+UZ+hn6RfrN+uP2qgY7DAYJVBvcEDQ4Ihw5BvuNuw0/CjkbFRtNFmo2ajYWM1Y5ZxjnG98SMTsom7yTKTSpO7plhThmmq6V7TW2awmb0Z36zc7KY5bO5gLjDfa949FzPXaa5wbuXcPguSBdMiy6LeYsCSZhlkucGy2fL1PIN5cfMK53XO+25lb5VmVW310FrJOsB6g3Wr9VsbMxuOTbnNXVuyra/tWtsW2zd25nY8u3129+yp9gvsN9u3239zcHQQOzQ4jDgaOCY4Vjj2MZQZIYytjMtOGCdPp7VOp50+Ozs4Zzofc/7TxcIl1eWQy/B84/m8+dXzB131XNmuB1z73ehuCW4/ufW767qz3Svdn3roe3A9ajyeM02ZKczDzNeeVp5iz5OeH72cvVZ7tXmjvP288727fJR8In3KfJ746vkm+9b7jvrZ+630a/PH+Af6F/r3sbRYHFYdazTAMWB1QEcgKTA8sCzwaZBZkDiodQG8IGDBzgWPFhouFC5sDgbBrOCdwY9DjEOWhfwaig0NCS0PfRZmHbYqrDOcGr40/FD4hwjPiO0RDyNNIqWR7VGUqPiouqiP0d7RRdH9MfNiVsdci9WIFcS2xOHiouJq4sYW+SzatWgo3j4+L753sfHiFYuvLNFYkrbkzFLKUvbS4wmYhOiEQwlf2cHsSvZYIiuxInGU48XZzXnJ9eAWc0d4rrwi3vMk16SipOFk1+SdySN8d34J/5XAS1AmeJPin7I/5WNqcGpt6kRadFpjOj49If2UUEmYKuzI0M5YkdEtMhflifqXOS/btWxUHCiukUCSxZKWTGVkKLouNZFukg5kuWWVZ31aHrX8+ArFFcIV17PNsrdkP8/xzfl5JXolZ2X7Kt1V61cNrGauPrAGWpO4pn2t/trctUPr/NYdXE9cn7r+xgarDUUb3m+M3tiaq5W7Lndwk9+m+jz5PHFe32aXzft/QP8g+KFri+2WPVu+53PzrxZYFZQUfN3K2Xr1R+sfS3+c2Ja0rWu7w/Z9O7A7hDt6C90LDxYpFuUUDe5csLOpmF6cX/x+19JdV0rsSvbvJu6W7u4vDSpt2WOwZ8eer2X8sp5yz/LGCs2KLRUf93L33t7nsa9hv9b+gv1ffhL8dO+A34GmSqPKkipsVVbVs+qo6s6fGT/X1WjUFNR8qxXW9h8MO9hR51hXd0jz0PZ6uF5aP3I4/vCtI95HWhosGg400hoLjoKj0qMvfkn4pfdY4LH244zjDScMT1ScpJ7Mb4KasptGm/nN/S2xLd2nAk61t7q0nvzV8tfa07qny8+onNl+lng29+zEuZxzY22itlfnk88Pti9tf3gh5sLdjtCOrouBFy9f8r10oZPZee6y6+XTV5yvnLrKuNp8zeFa03X76ydv2N842eXQ1XTT8WbLLadbrd3zu8/edr99/o73nUt3WXev9Szs6e6N7L3XF9/Xf497b/h+2v03D7IejD9c9wjzKP+xwuOSJ5pPKn8z/a2x36H/zID3wPWn4U8fDnIGX/4u+f3rUO4z8rOS5zrP64Zthk+P+I7cerHoxdBL0cvxV3l/KP5R8drk9Yk/Pf68PhozOvRG/Gbi7dZ36u9q39u9bx8LGXvyIf3D+Mf8T+qfDn5mfO78Ev3l+fjyr7ivpd9Mv7V+D/z+aCJ9YkLEFrOnRgEUsuCkJADe1gJAjgWAegsA4qLpWXpK0PT8P0XgP/H0vD0lBwCq+gCIWAlA0A0A9pQhoywSnxIPQAgFsbsA2NZWtv4pSZKtzXQskjsymjyemHhnAgCuEIBvhRMT41UTE9+qkGIfAtCWPT3DT8qqAQB28yT1jX8H/6p/AH2NEW7QbsbhAAARKUlEQVR4Ae1daXBVR3b+tCCBEGgX2jd2CbGbHcxiwGODDRgvkPI4dipOZis7ySSZJJP5ka1qUpVUJhnHzlDxDDO2B3uwzY7ZMRZhsdmEQaxmMRKLFhBIAgkJ5/v66uq9Jz9mJB4jpHp9qnjv3r59+3afvuc73zndT4R8RYEVqwGrgaDUQGhQjtoO2mrAasBowAKAfRGsBoJYAxYAgnjy7dCtBiwA2HfAaiCINWABIIgn3w7dasACgH0HrAaCWAMWAIJ48u3QrQbC26uCd5Z9gMrKStyx2wfaq7pOUT80JATpaalYMH9Ou/rz8krgi6tAk9010i69/b4qh4UAQ1OAf380sCeEtGcj0NvLlqO8vAp8h6x0YQ0IuzMyUrFw/tw2jeKPafynqtpU1VbqYA0M6wP8x2P3/tB2hQAVFdb4713VnedOAfjFsktt7tBpa/xt1lVHV/z8SmBPbBcABPYoe3dn0kB7QjjL+jvTzPn2JdCQzAKArz7tmdVAUGnAAkBQTbcdrNWArwYsAPjqw55ZDQSVBiwABNV028FaDfhqwAKArz7smdVAUGmg3RuBAtFOWGgoRo8ajgMHD6Ppzh0UFgz221z19es4c/Z8y7Xhw4YgPDwcn+072FJ2t4OUlGQMKyzAhk3bTJWQu2xacP8OSnJyIqZOnoj33udid7P06NEdsx6ZhrXrN6GxsdEt9vlOT0vByOFDsXrdRiyY9zg2bfkYN27U+NTxdzJj2hRcKS/H4c9L/F1GQkI8sjLTW65dKL0IcOE+IyOtpezS5Su4ePFyy3lnP+hGN7NoKLD8CNB4B5gz0H+PL94Adn3pufZUPhDJN/SdYk/Z/TxK6AH8+UTgH/iqTM0FxmbweHvbnvB93neiAlh13H/93DhglGfKcIirrtp/MTzVU/9YORDoMp6ntXs76lAACCEAJCcl4pmn52ENDScxMd70OiszA3U3b6KiotLvKKJ79kS3bt18rsXG9PY5v1Z9HaFsv7amDv365mL/gWJUXb2Gb//Ji6bcpzJP3lz6jjHYuNhYbmzy3dk0YnghbrI/XxGksrMzce6c11vZ3NCUSRPw5YVSc5bGnXXdCFASgVxcfCzHUoWwsDC89MIiU+5+REREYPCg/hg3ZpRbZL7fXPprNDU1IS2lDwoGDzQAmJXFN5IisBo8aIDpRxqBRwDVlQAglOodkAC8xs2Hf78F6EvjkMhArt7iDsO77DNIjAJ6eE27ZinNd9pRet00hVfGA/MGOcd3+1x/EvjXIs/V+QSYXhFAfROwsAC4wLaGcmONt5yvBupuA79+2rsUiGK/ZvYFXhjhW77oN0AD2xuSDDzW3wG00emA+n6HADC7H7D3grOLL7Z7kAGAvKk8ZkH+QDTebsSnnzkePSM9zXjECxfKWrQp45GR5+ZmI4VGERbmsAdV+PxICV54/jk0NDRQsyGIIDj852tL6DkzMOexmaaNRc8uwK49n2HJm28Zjzpu7Gi8t3ylMdSX/nCxMaq+eTkYNWIoDaoHZs+cZvog9jEkfzDeWfY+ukV0w2OzZ+A3769CRaXnLc2ngfbqFY29nx1o6a8OunfvjrmPz0JoSCjeXb7CAEtUVJRpK4RWkJuTjWPH+RZSBg7ohzNnzpnjxc895QNCtXV1Blzi45sthbVqampNWXR0T3NPV/qQgcnwv0GDqCehervZo8sbrjkOHCDJcSUiDEjvBYzPAvJpRGIPi4c6V1X3raeAWhqkDEpG+MgvnO3JP/sU+KXXdLw0kveyrf9huSvqhys9ee9cMpEffwIU0ujzqOoMgstDBKUbfK1ceW0v8CkNNp5sQTsitQV3XCaw+bRTY3qeh7UsedLpl3tv5U1gP8eW45lGVNQ6ZcmdZBrD3c52xLfo9oD+fVG0cw+mT5uMQTSCUBq69qdPnTLB0Pzbtzm7lA9WrDVGER8XazyeysQe+vfLMwCg8zeWLKXRReLlP/qmTnH23Hn89PX/JVsIx/OLn8Gp02dw69YthPMZdbV15rjJZRJE41qWKbS4fKXcgMyJk6cxc/rDOFpynP0KRUJMHC5eugKBhxiLRGA1feokE8YYADKlQBz7+cSccaisuooNG7eaUnn0HUW7IK89ZvRInDz1BZnFLWEWekb1IFjMxs5de7Fp83bj/XWTAKih4TYKh+TjDhmIRKGF2poyeQLq6m5ynF+a8q7yMZDefxoNRcb4ZxNotH2BcBq2jOl740jzaag3myOt739kMB1ZMUBMpDNCsYcpOQ5YqOTJt+m5ee3DRc51fep+tw2dy9i1SUYMw5/8xUQgmt5/bynwOndEv/s5IMZxiVHcm/t971A//5tAIKB4fhiw/Sxwje1qHuN5zz/NAJbsc8DktjNlKLvhMIcnyEoU9kgu0/gbePzdsUAVwWE3geVBS4cCgAwuJzsLvaKj8RGNpLj4CI3mUXrS/SgpOYGFC57A6TNnfWL9i5cu4xv0wlfKKyADFb3/XSJju1BaZry9mER8QpwxTN0nsJFoJ5xiaYUWBw8dxiwyAHlwUf7U1D7II/OQJ1af83JzkJSYAHnxuXNmm/yFd25ALaqPylHs3ss3oVn07EED+xtGsHrtBlP6/GJySd6wZu1GFDMPIOYh715CZiDvLjYi4JJE8XjypHHYtr3IlA0tzEd9fb25prq6rytIRZ0TX8vr/fPHwIoS4F9mAr8iAdx4ytnLvvO8b6x/5Arwo6mMsyuBbV8Ak7Pv30gf7Qc8nOO0t6jQAYKlZA8CBYGNjFZyk75oEz29mIRAiz4Bf7fFufbz+Q4A/JDnq44BfzsFxrurfhLHKXq/46xTN47H3xrDce5yyp5k+zXONJq65Q9wGjscAJZ/sAoD+/cjEGQaoyk5doKeuR5RPaOwZv1G8wOVPslJ+GTnbly/ThilxDAUkPErVneTd45qv/4phjFq5DDS+aMMB2Zhxer1SIiPb0kqKg8hkXdVbqEnn1vN54i2i57L+ORtvSUtNQVV9OwFBYOMkStvQOeC3JwsTBg3xuQY5MWPcizeIpAo4jjKmLAbkj8Io0cPx5atnxjWol/jFRXtNmFJIhN/Gpf6I+CRpDLsUayv/igBKFDSQ2X0qlPNnEdXAQBR4VfWATPygDEZDAemAhto+DUNDrX+EY1IP2gRU3idLEFeWJLWi8Z/hqDNKePQ75tE8K1/nR5dRnmYudTjTOa54YFyDGPSnUdV08vLoG81OuxFCbvHBzghyb/tdFiIfo33Bvv8vbVOGCHWISYxIdNpoyCZYMDwYcc5JgBTmBtwphEyetURUwgaAJBK6usbUFNba1YDdu/Zh/0Hi/HcM/OhY1F4Ue0RzK7L47YAQO/e5oVXku+3AUA2k2aPkMLLu8uTy8PLcBMYS+/bf8jMiNqQyMhT+iRDIYcMvLyiwrS94MnHGQ5w1rzk9BdnDaNQ5l7P1wqBJD4uzjCWeCb99KzWovBC4DNzxlQzlmXvfWgYhepdZYJyxvQpeGj0COw7cMjkGNTGYeY3tIpRz/yGwEv9l0RGRmAW2xGrKD581IQt5kIX+ailsYsJyOP+gt72PVLuN+Y6x6LCAoGFQ4B+8R4ASCUAKMknCt5E6ny/RB47O5YAwAYPXvJtdTsBp3UIoBBFcfxfTWbfaLDfWu2MRXd+We0whz9gaPDuYUA/nFJ2fw19wbzBTr7iB5sYnl5znqOw4wdsR7mOleyHVhIepHQoA9BA5fknTRiLpW+9a+i/qL1ERtc3L9vQcNF+GZ1EtFxxvrL8vXv3MvTbXPDzERkZyaW7jYbOyyOPZaZdQKKEXWUVZ4YSHk7NU+SdBTjysKLh3kuMAiF3GbJwyGBkZjguoTX4yHAlWtr0FlF3rWqIuSjZp+O4uBgDdN71xDoEQIMG9GeCr8wkPQUWGq/6Np65B+UNxHwU+hhgy8pEJpcJt2zdYViRd3ud+Vie/+XRwDffZxjwiOfFH5wETMwCejOmP0rDKTrvjELxv8rkIVOiPXH073uMo9Ic49RzlP3/JcMUsQKxl2tkMpkxTs7Aux8CKOUfFCYooSnm8tc0cuUp9hDcXmRCUsDCCNLkMsQSxDJG8lliElt57UFJhwNAAanwsROnIJovz7t+w2Yz9mvXqk1GXvGuvKKW8STaA1DKn67KYJXM0+rB3URhgitiGh+uXMe8wlyTNFTyTRJDNqHEoGvMez7db+J0rTa4IKDwwE3A3dHaTTtlBhOcJ2i4xzlOrQZMe3gSk4mXW1iI25zClUzS+5WrPzJF8vbKFUxjknEfx5/PpT+tBChvoYSj8gQCg1LuDfAeq9teZ/7WCsBmTs/ARCeZ9o/bnd5q6e0Zev6f7AKMFyUzkCzIB4pJz0W/5S21etBRQjs14n6fIQn7zhrg1fGAchPLmvvo9md6rrO+/zf09BJ5+x/ytX51gsN0tPSXE+sAQF0D8x7Ug9ouJvt4kMavvnYoAPSgN89h3PwJY18lt7Scd5sGHRYaZvIA8oLdGfcqMae4VwYxkmvyH6xkgEVJSkrATRqvK89yP4FL6d0y72/lAhRXr1i1zlBnWr1Zg3ez6LpXybuSYycNu1CMLpHXTuKKg0RhggsGpsDPxx2GE4lkGjdqatj3CGO0Sh56i5Yq1RdvEWPxJ9p/UM+8SGNjU8tlHTtlHWgJLU8P7CCmu7N0plj5Tx9ysvnymCJjN5gMk9dUne58G0ekAudoQE8TFLQiIFFYUM16rmg/gRJyruSTRSg29xYtIcrj/uVE71Jg3UnHiH1LPWf7yr4eAniuOvsSFON7i2i9P1HYovE1eKbR5Bpal/m7t6PKOhQA0tNTcZlxrpa6DnEFQDH+swvnmQ1BKlNCUMt+GzdvN8bfr28ezp2/gKrKq2apL4Lr8h/v+L8W3eyl99bGGlH41qJYWVnzjzZsNSDz8OTxZBOFZjVB9FmiHXfauLPt4yKzHChDz0xPN22KxktkuLeaM++mwM/HkaPHTB9cMCq7eMl4fO+qAj4tY3pLJKl+pdf+AvdaTGwMpk+dbFYFjnBJUqLEn+7v3TuaOiRX7kKi5JcSbaLzinu1409GrA1BKtt4inNBD6k1eRn/lGyuvZc6nlRLfVqz/689ngH/ipGX9gAo8y4RmLiJQ6fk6+du+a3b7tG9fWsPgFYKvEVUX38urbWkM3TQsmcSAUObkCRK/PXn/QprlCt40NKuPwn2k5/+LOD+yjC9s+zysPLqymr7E3lJLX1pQ41osLv8JsNsYPws8T7WufYbVFVdc6hzcx2Vy0Bbe3Ml1xQuuKKcgTy5ViYkWiVQH9xknMoEUurHda+tv2pb/xRaeI9P9bWhSc/1rq/yKO4FECvS3gFXBGgxzHWUc1ekcheiiuT93JX4lemX8gp6dmuG4d7fnu9Xvvtym6pP+3mbqv3WSqLx3p5QXltZ9lICgD/RDj1tyNEGHCUQ3Sy9DF+xucT72Clp+6cSe8o/eCcBlRhUHwVQ/kQGLa/eGmzUR+UszhC8XBFoKYmpP6XWh8SPU2hEEeWVWmezk8akxGigsu3Fe2+hwwHg3rtq77zfGuhIALjffbfteTQQCAB4RVKeBu2R1YDVQHBowAJAcMyzHaXVgF8NWADwqxZbaDUQHBqwABAc8/y1UWo/gZWurwHmMgOSdgGAlvHu767sgPpub75nDXxlfqHY1tv1n09Y6Zwa0G8LApF2rQLoQcs/XI0y7sxzd9IF8nB7b8drQJ5fP09u6/8K5Pbw1XX8OwyXuQzmFtjvB6oBeX4Zv35EFYi0GwACeZi912rAaqBzaaBdIUDn6rrtjdWA1UCgGrAAEKgG7f1WA11YAxYAuvDk2a5bDQSqAQsAgWrQ3m810IU1YAGgC0+e7brVQKAasAAQqAbt/VYDXVgD/w9zej+Y1do6fwAAAABJRU5ErkJggg=="},343:function(e,t,r){e.exports=r.p+"assets/img/image-20190722184943431.f2f72e7c.png"},344:function(e,t,r){e.exports=r.p+"assets/img/image-20190722185113938.4d31e54b.png"},355:function(e,t,r){"use strict";r.r(t);var s=r(0),v=Object(s.a)({},function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[s("h1",{attrs:{id:"如何降低-kubernetes-学习门槛"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#如何降低-kubernetes-学习门槛","aria-hidden":"true"}},[e._v("#")]),e._v(" 如何降低 Kubernetes 学习门槛")]),e._v(" "),s("h2",{attrs:{id:"kubernetes-学习门槛在哪儿"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#kubernetes-学习门槛在哪儿","aria-hidden":"true"}},[e._v("#")]),e._v(" Kubernetes 学习门槛在哪儿")]),e._v(" "),s("p",[e._v("学习 Kubernetes 之前,必须具备的知识储备:")]),e._v(" "),s("ul",[s("li",[e._v("Linux 基础")]),e._v(" "),s("li",[e._v("网络基础")]),e._v(" "),s("li",[e._v("容器技术,例如 https://www.docker.com/")])]),e._v(" "),s("p",[e._v("学习 Kubernetes 的过程中可能碰到的难关:")]),e._v(" "),s("ul",[s("li",[e._v("理解 Kubenetes 为了实现容器编排而提出的各种抽象概念以及他们之间的关系:容器组(Pod)、存储卷(Volume)、存储卷声明(PVC)、Ingress、Service 等")]),e._v(" "),s("li",[e._v("安装及配置 Kubernetes 环境")]),e._v(" "),s("li",[e._v("编写和维护 Kubernetes Yaml 文件")]),e._v(" "),s("li",[e._v("熟悉 kubectl 命令行工具中常用的 10 多个命令")])]),e._v(" "),s("h2",{attrs:{id:"降低-kubernetes-学习门槛"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#降低-kubernetes-学习门槛","aria-hidden":"true"}},[e._v("#")]),e._v(" 降低 Kubernetes 学习门槛")]),e._v(" "),s("p",[e._v("单纯地按章节学习 Linux 基础知识、网络知识、容器技术等,每一块儿的基础入门书籍就有几百页之多。作者认为,最好的学习方法是在实践中学习,碰到问题时去寻求答案,解决问题后去反思总结。这种学习方法趣味性强,得来的知识也最为牢靠,如果选对了方向,所学知识通常也是工作中实用性最高的知识。"),s("span",{staticStyle:{color:"red","font-weight":"500"}},[e._v("读了100页 K8S 文档,也不如安装一遍 K8S")])]),e._v(" "),s("p",[e._v("Kuboard 为初学者学习 Kubernetes 时设计了如下学习路径:")]),e._v(" "),s("ul",[s("li",[e._v("跟随文档 "),s("a",{attrs:{href:"/install/install-k8s"}},[e._v("安装 Kubernetes 单Master节点")]),e._v(" 快速安装一个可以练习使用的 Kubernetes 环境,(初学者也许要花费2小时或更多)")]),e._v(" "),s("li",[e._v("跟随文档 "),s("a",{attrs:{href:"/install/install-dashboard"}},[e._v("安装 Kuboard")]),e._v(" (5分钟)")]),e._v(" "),s("li",[e._v("使用 Kuboard 工作负载编辑器 "),s("a",{attrs:{href:"/guide/example/busybox"}},[e._v("创建 busybox")]),e._v(" (10分钟)")]),e._v(" "),s("li",[e._v("尝试 Kuboard 设计的其他 example "),s("a",{attrs:{href:"/guide/index"}},[e._v("使用 Kuboard")])])]),e._v(" "),s("p",[e._v("进阶路线:")]),e._v(" "),s("ul",[s("li",[e._v("在 Kubernetes 中部署 Spring Cloud 微服务应用")])]),e._v(" "),s("p",[e._v("本文后续章节介绍了 Kuboard 工作负载编辑器的设计,如果您能够大致理解当中的概念,说明您已经完全准备好了,可以开始自己的 Kubernetes 之旅。")]),e._v(" "),s("h2",{attrs:{id:"工作负载编辑器设计"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#工作负载编辑器设计","aria-hidden":"true"}},[e._v("#")]),e._v(" 工作负载编辑器设计")]),e._v(" "),s("p",[e._v("​\t\t在向 Kubernetes 集群部署应用时,开发者或者运维团队必须花大量的时间去理解 Kubernetes 中各种对象的概念,并编写 Yaml 文件去描述 Kubernetes 对象以及他们之间的关系,然而,不同的人因为经验、视角的不同,对Kubernetes 中各对象之间关系的理解并不完全一致,也因此产生了一系列问题:")]),e._v(" "),s("ul",[s("li",[e._v("由于理解的不到位,刚入门Kubernetes的技术人员在使用 Kubernetes 部署应用时经常性地受挫;")]),e._v(" "),s("li",[e._v("由于理解方式的不一致,不同技术人员编写的 yaml 文件结构各不一样,降低了部署在后期的可维护性;")]),e._v(" "),s("li",[e._v("由于部署数量的增加,导致 YAML 文件的数量和代码行数不断增长;")])]),e._v(" "),s("p",[e._v("​\t\tKubernetes 官方提供的 Kubernetes Dashboard 充分意识到了 Kubernete 对象类型在种类上的多样性以及关系上的复杂性,到目前为止并没有在全功能 Dashboard 上做出过多努力,尤其是没有付出过多努力去打造工作负载的 UI 编辑器。在 Kubernetes Dashboard 中,如果想要对 Service、Deployment、StatefulSet、ConfigMap 等各种 Kubernetes 对象执行新增或者变更操作时,您必须编写 YAML 文件。从这个意义上来讲,截止到作者写这篇文章的时间点,Kubernetes 的官方 Dashboard 仍然是一个 “只读” 型 Dashboard,几乎所有的运维操作仍然需要技术人员去编写和维护冗长的 YAML 文件,并通过 kubectl 命令来完成。")]),e._v(" "),s("p",[e._v("​\t\t由于 Kubernetes YAML 文件复杂性,以及开发/运维团队在多环境复制(开发环境、测试环境、准上线环境、生产环境等)方面的普遍需求,Kubernetes 社区提出了各种各样的解决方案,例如 kustomize / helm chart 等,这些解决方案在解决一个问题的同时,又在另一方面增加了复杂度,为 Kubernetes 爱好者增加了新的学习门槛。")]),e._v(" "),s("p",[e._v("​\t\tKuboard 与 Kubernetes Dashboard 相同的是,架构上的简洁性。尤其是,使用 Kuboard 并不需要我们去学习和理解新的概念,而是和 Kuboard 一起,将 Kubernetes 对象中各种复杂的概念和关系梳理清楚,将各种知识点条理化,清晰化。在 Kuboard 的辅助下,轻松掌握 Kubernetes 的使用和运维,并利用 Kuboard 完成 Kubernetes 的日常运维工作。")]),e._v(" "),s("h2",{attrs:{id:"工作负载编辑器介绍"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#工作负载编辑器介绍","aria-hidden":"true"}},[e._v("#")]),e._v(" 工作负载编辑器介绍")]),e._v(" "),s("p",[e._v("为了降低 Kubernetes 的学习难度和使用难度,Kuboard 对 Kubernetes 中管理的各种对象做了一个梳理,并以此为基础,设计了 Kuboard 工作负载编辑器。")]),e._v(" "),s("p",[e._v("Kuboard 工作负载编辑器以下图的方式理解和管理 Kubernetes 对象。")]),e._v(" "),s("p",[s("img",{attrs:{src:r(336),alt:"image-20190722165648180"}})]),e._v(" "),s("p",[e._v("上图中各概念与 Kuboard 工作负载编辑器界面的映射关系如下:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(337),alt:"image-20190722162249531"}})]),e._v(" "),s("h3",{attrs:{id:"_1-基本信息"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_1-基本信息","aria-hidden":"true"}},[e._v("#")]),e._v(" 1. 基本信息")]),e._v(" "),s("p",[e._v("基本信息对应到 Kubernetes 的 Workload Controller,当前 Kuboard 工作负载编辑器已经支持了使用频率最高的几类 Workload Controller :")]),e._v(" "),s("ul",[s("li",[e._v("Deployment")]),e._v(" "),s("li",[e._v("StatefulSet")]),e._v(" "),s("li",[e._v("DaemonSet")])]),e._v(" "),s("blockquote",[s("p",[e._v("Kuboard 将陆续支持其他低频使用的 Controller: Garbage Collection, TTL Controller, Jobs, Cron Job。")])]),e._v(" "),s("p",[e._v("Kubernetes Workload Controller 主要用于:")]),e._v(" "),s("ul",[s("li",[e._v("根据容器组模板的定义,创建和管理多个容器组")]),e._v(" "),s("li",[e._v("处理容器组的复制和上线")]),e._v(" "),s("li",[e._v("在集群范围内提供自修复能力")])]),e._v(" "),s("blockquote",[s("p",[e._v("例如:Workload Controller 起初在节点 A 上创建并运行了一个容器组 pod_a,当节点 A 出现故障不能正常工作时,Workload Controller 可以自动地在其他可用的节点上运行一个完全相同的容器组实例 pod_a' 以替代 pod_a。")]),e._v(" "),s("p",[e._v("不同类型的 Workload Controller 在处理容器组时,会有各自不同的行为。")])]),e._v(" "),s("blockquote",[s("p",[e._v("请参考 https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pods-and-controllers")])]),e._v(" "),s("p",[e._v("基本信息编辑器的界面如下图所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(338),alt:"image-20190722172356943"}})]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("字段名称")]),e._v(" "),s("th",[e._v("字段描述")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[e._v("服务类型")]),e._v(" "),s("td",[e._v("即工作负载类型,"),s("br"),e._v("当前支持: Deployment、StatefulSet、DaemonSet")])]),e._v(" "),s("tr",[s("td",[e._v("服务分层")]),e._v(" "),s("td",[e._v("决定了 Kuboard 将该工作负载展示在哪一个分层,同时,也确定了该工作负载名称的前缀,可选项有:"),s("br"),e._v("* 展现层 web、网关层 gateway、服务层 svc、持久层 db、中间件层 cloud、监控层 monitor;"),s("br"),e._v("* 默认层当前不可选择")])]),e._v(" "),s("tr",[s("td",[e._v("标签")]),e._v(" "),s("td",[e._v("用于确定 Service 的 labelSelector、Controller 的 labels、容器组的 labels")])]),e._v(" "),s("tr",[s("td",[e._v("服务描述")]),e._v(" "),s("td",[e._v("展示在 Kuboard 界面上的一段描述信息")])]),e._v(" "),s("tr",[s("td",[e._v("副本数量")]),e._v(" "),s("td",[e._v("对于 Deployment 和 StatefulSet 可以填写,决定了该控制器应该维持的容器组副本的数量")])])])]),e._v(" "),s("h3",{attrs:{id:"_2-数据卷"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_2-数据卷","aria-hidden":"true"}},[e._v("#")]),e._v(" 2. 数据卷")]),e._v(" "),s("p",[e._v("​\t\t容器每次启动时,从镜像中初始化所有文件,后续对文件系统的修改、新增、删除操作的结果都是不能持久化的。当容器崩溃时, kubelet 重启该容器,但是原容器已经做的修改将丢失,因为每次启动容器,都是从镜像中初始化;此外,多个容器运行在同一个容器组中时,通常伴随着在不同容器之间共享文件的需求。")]),e._v(" "),s("p",[e._v("​\t\tKubernetes的抽象出了数据卷 Volume 的概念,以解决上述的问题。")]),e._v(" "),s("p",[e._v("​\t\t"),s("strong",[e._v("Kuboard 目前支持如下类型的数据卷:")])]),e._v(" "),s("ul",[s("li",[e._v("NFS")]),e._v(" "),s("li",[e._v("存储卷声明")]),e._v(" "),s("li",[e._v("emptyDir")]),e._v(" "),s("li",[e._v("配置 ConfigMap")]),e._v(" "),s("li",[e._v("Secrets")])]),e._v(" "),s("blockquote",[s("p",[e._v("Kubernetes 支持的数据卷类型,请参考:https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes")]),e._v(" "),s("p",[e._v("Kuboard 认为当前支持的数据卷类型已经满足绝大多数应用场景,目前正在添加对更多类型数据卷的支持。")])]),e._v(" "),s("p",[e._v("​\t\t容器组中的不同容器都可以通过挂载点引用该容器组加载的数据卷。Kuboard 工作负载编辑中,使用如下界面定义数据卷:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(339),alt:"image-20190722182005060"}})]),e._v(" "),s("table",[s("thead",[s("tr",[s("th",[e._v("字段名称")]),e._v(" "),s("th",[e._v("说明")])])]),e._v(" "),s("tbody",[s("tr",[s("td",[e._v("数据卷名称")]),e._v(" "),s("td",[e._v("如图中的 "),s("em",[s("strong",[e._v("example-data")])]),e._v(" 、 "),s("em",[s("strong",[e._v("empty-dir")])])])]),e._v(" "),s("tr",[s("td",[e._v("数据卷类型")]),e._v(" "),s("td")]),e._v(" "),s("tr",[s("td",[e._v("数据卷详细信息")]),e._v(" "),s("td",[e._v("不同类型的数据卷需要填写的信息不尽相同,例如"),s("br"),e._v("存储卷声明,需要选择事先已经在名称空间中创建好的存储卷声明"),s("br"),e._v("NFS,需要填写 NFS Server 的地址,以及 NFS Path")])])])]),e._v(" "),s("h3",{attrs:{id:"_3-身份信息"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_3-身份信息","aria-hidden":"true"}},[e._v("#")]),e._v(" 3. 身份信息")]),e._v(" "),s("p",[e._v("身份信息区域主要为容器组定义两类信息:")]),e._v(" "),s("ul",[s("li",[e._v("imagePullSecrets,容器组调用镜像仓库接口抓取镜像时所使用的用户名密码。如果您使用了私有镜像仓库,您需要在此指定镜像仓库的用户名密码;如果您使用 docker 公共仓库,则无需填写 imagePullSecrets")]),e._v(" "),s("li",[e._v("ServiceAccount,容器组调用 kubernetes apiserver 时,所使用的身份信息")])]),e._v(" "),s("p",[e._v("Kuboard 工作负载编辑器中关于身份信息的编辑界面如下所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(340),alt:"image-20190722183329825"}})]),e._v(" "),s("h3",{attrs:{id:"_4-容器"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_4-容器","aria-hidden":"true"}},[e._v("#")]),e._v(" 4. 容器")]),e._v(" "),s("p",[e._v("容器是我们真正应用程序镜像被加载和运行的地方,按照 Kubernetes 的设计,一个容器组 Pod 中可以包含多个容器 Container,这些容器被分为两类:")]),e._v(" "),s("ul",[s("li",[e._v("初始化容器\n"),s("ul",[s("li",[e._v("初始化容器总是执行后结束执行")]),e._v(" "),s("li",[e._v("初始化容器按其定义的顺序执行,前一个初始化容器执行结束后,才开始后一个初始化容器的执行")]),e._v(" "),s("li",[e._v("只有初始化容器执行成功后,容器组才启动工作容器")]),e._v(" "),s("li",[e._v("请参考 https://kubernetes.io/docs/concepts/workloads/pods/init-containers/")])])]),e._v(" "),s("li",[e._v("工作容器\n"),s("ul",[s("li",[e._v("容器组可以包含一个或多个工作容器")]),e._v(" "),s("li",[e._v("https://kubernetes.io/docs/concepts/workloads/pods/pod-overview")])])])]),e._v(" "),s("p",[e._v("Kuborad中,定义容器的界面如下图所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(341),alt:"image-20190722183750444"}})]),e._v(" "),s("p",[s("img",{attrs:{src:r(342),alt:"image-20190722184516447"}})]),e._v(" "),s("h3",{attrs:{id:"_5-访问方式"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_5-访问方式","aria-hidden":"true"}},[e._v("#")]),e._v(" 5. 访问方式")]),e._v(" "),s("p",[e._v("​\t\t访问方式,即 Kubernetes Service。")]),e._v(" "),s("blockquote",[s("p",[e._v("请参考: https://kubernetes.io/docs/concepts/services-networking/service/")])]),e._v(" "),s("p",[e._v("​\t\tKuboard 中,支持 ClusterIP(集群内访问) 以及 NodePort(VPC 内访问) 两种 Service 访问方式,您也可以不为该工作负载定义 Service 访问方式。访问方式的界面如下所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(343),alt:"image-20190722184943431"}})]),e._v(" "),s("h3",{attrs:{id:"_6-互联网入口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#_6-互联网入口","aria-hidden":"true"}},[e._v("#")]),e._v(" 6. 互联网入口")]),e._v(" "),s("p",[e._v("​\t\t互联网入口,即 Kubernetes Ingress。")]),e._v(" "),s("blockquote",[s("p",[e._v("请参考: https://kubernetes.io/docs/concepts/services-networking/ingress/")])]),e._v(" "),s("p",[e._v("​\t\tKuboard 并不限定您使用何种类型的 "),s("a",{attrs:{href:"https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/",target:"_blank",rel:"noopener noreferrer"}},[e._v("Ingress Controller"),s("OutboundLink")],1),e._v(", 但是 "),s("a",{attrs:{href:"/install/install-k8s"}},[e._v("安装 Kubernetes 用于测试")]),e._v(" 文档中,推荐使用的 Ingress Controller 是 "),s("a",{attrs:{href:"https://github.com/nginxinc/kubernetes-ingress",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nginx-Ingress"),s("OutboundLink")],1),e._v("。")]),e._v(" "),s("p",[e._v("​\t\t在您使用 Nginx-Ingress 的情况下,要想确保您能按照互联网入口中定义的域名访问您的服务,请确保以下两点:")]),e._v(" "),s("ul",[s("li",[e._v("域名解析指向 Kubernetes 集群中 Worker 节点对应的负载均衡的 IP 地址\n"),s("ul",[s("li",[e._v("如果是测试环境,也可以只指向其中一台 Worker 节点的 IP 地址")])])]),e._v(" "),s("li",[e._v("通过该域名,可以访问 Worker 节点的 80 端口\n"),s("ul",[s("li",[e._v("如果您启用了 HTTPS,请同时确保通过该域名可以访问 Worker 节点的 443 端口")])])])]),e._v(" "),s("p",[e._v("​\t\tKuboard 中,定义互联网入口的界面如下所示:")]),e._v(" "),s("p",[s("img",{attrs:{src:r(344),alt:"image-20190722185113938"}})])])},[],!1,null,null,null);t.default=v.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/9.d1dad7a2.js b/docs/assets/js/9.2c5fb6de.js similarity index 99% rename from docs/assets/js/9.d1dad7a2.js rename to docs/assets/js/9.2c5fb6de.js index 1052110..13c3e3a 100644 --- a/docs/assets/js/9.d1dad7a2.js +++ b/docs/assets/js/9.2c5fb6de.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{144:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115721514.bf981ef3.png"},240:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115852719.f1658660.png"},241:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115912645.393d67ff.png"},242:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115940862.dfeacc57.png"},243:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120011972.0f0914c5.png"},244:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120050894.9b1d6350.png"},245:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120104474.617a620a.png"},246:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120125425.a46d7874.png"},364: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(240),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(241),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(242),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(243),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(244),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(245),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(246),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"},240:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115852719.f1658660.png"},241:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115912645.393d67ff.png"},242:function(t,_,v){t.exports=v.p+"assets/img/image-20190723115940862.dfeacc57.png"},243:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120011972.0f0914c5.png"},244:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120050894.9b1d6350.png"},245:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120104474.617a620a.png"},246:function(t,_,v){t.exports=v.p+"assets/img/image-20190723120125425.a46d7874.png"},363: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(240),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(241),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(242),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(243),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(244),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(245),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(246),alt:"image-20190723120125425"}})])])},[],!1,null,null,null);_.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/app.dae13134.js b/docs/assets/js/app.1eb8cc20.js similarity index 68% rename from docs/assets/js/app.dae13134.js rename to docs/assets/js/app.1eb8cc20.js index 7329364..211c99a 100644 --- a/docs/assets/js/app.dae13134.js +++ b/docs/assets/js/app.1eb8cc20.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(45)]).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 Ko(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)},Ho=/%2C/g,Zo=function(t){return encodeURIComponent(t).replace(Bo,Vo).replace(Ho,",")},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 Zo(e);if(Array.isArray(n)){var r=[];return n.forEach(function(t){void 0!==t&&(null===t?r.push(Zo(e)):r.push(Zo(e)+"="+Zo(t)))}),r.join("&")}return Zo(e)+"="+Zo(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=Ti(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=Ko(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){Ko(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(31).then(n.bind(null,352)),Layout:()=>Promise.all([n.e(0),n.e(2),n.e(11)]).then(n.bind(null,353))},wa={"v-cbd95058":()=>n.e(32).then(n.bind(null,366)),"v-77cc1ec7":()=>n.e(22).then(n.bind(null,388)),"v-796bf18c":()=>n.e(33).then(n.bind(null,389)),"v-0a714732":()=>n.e(6).then(n.bind(null,390)),"v-46ec0327":()=>n.e(12).then(n.bind(null,391)),"v-986dbade":()=>n.e(20).then(n.bind(null,369)),"v-8d4dfbb6":()=>n.e(23).then(n.bind(null,365)),"v-8658c2f2":()=>n.e(9).then(n.bind(null,364)),"v-76564011":()=>n.e(34).then(n.bind(null,363)),"v-554543f9":()=>n.e(5).then(n.bind(null,362)),"v-7434c187":()=>n.e(3).then(n.bind(null,361)),"v-c0fa0cf2":()=>n.e(7).then(n.bind(null,373)),"v-6c5acde7":()=>n.e(14).then(n.bind(null,356)),"v-0996c938":()=>n.e(35).then(n.bind(null,358)),"v-9d44dcf2":()=>n.e(13).then(n.bind(null,359)),"v-240eddf2":()=>n.e(15).then(n.bind(null,367)),"v-4db1779e":()=>n.e(36).then(n.bind(null,370)),"v-7d2f6cc7":()=>n.e(16).then(n.bind(null,371)),"v-5db85fb7":()=>n.e(10).then(n.bind(null,392)),"v-4b91c5e7":()=>n.e(26).then(n.bind(null,375)),"v-5be22288":()=>n.e(27).then(n.bind(null,377)),"v-61ad5b01":()=>n.e(38).then(n.bind(null,379)),"v-1401ca46":()=>n.e(39).then(n.bind(null,381)),"v-649782a7":()=>n.e(40).then(n.bind(null,383)),"v-c621d7f2":()=>n.e(29).then(n.bind(null,385)),"v-cfc76602":()=>n.e(18).then(n.bind(null,387)),"v-66d56047":()=>n.e(41).then(n.bind(null,386)),"v-bfdadf72":()=>n.e(43).then(n.bind(null,384)),"v-16dbc3c4":()=>n.e(42).then(n.bind(null,382)),"v-53360ab2":()=>n.e(28).then(n.bind(null,380)),"v-7249b1a4":()=>n.e(24).then(n.bind(null,378)),"v-5566a571":()=>n.e(19).then(n.bind(null,376)),"v-1263fa20":()=>n.e(37).then(n.bind(null,374)),"v-76626758":()=>n.e(30).then(n.bind(null,372)),"v-6ad799b6":()=>n.e(44).then(n.bind(null,360)),"v-3732859b":()=>n.e(21).then(n.bind(null,357)),"v-292f2847":()=>n.e(17).then(n.bind(null,355)),"v-0393ebb2":()=>n.e(8).then(n.bind(null,354))};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 Sa(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 Ta=Object.assign({},_a,wa),Aa=t=>Ta[t],Pa=t=>wa[t],ja=t=>_a[t],La=t=>Fo.component(t);function Ia(t){return Sa(Pa,t)}function Ra(t){return Sa(ja,t)}function Ma(t){return Sa(Aa,t)}function Na(t){return Sa(La,t)}function Ua(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!Na(t)&&Ma(t)){const e=await Ma(t)();Fo.component(t,e.default)}}))}function Fa(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var Ka={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),Ha=n.n(Va),Za=[Ka,Ba,{mounted(){Ha.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Fo.component(t.name)||Ha.a.start(),n()}),this.$router.afterEach(()=>{Ha.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 Fa("layout",t),Fo.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",Za);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-0a714732",path:"/guide/cluster/storage.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-0a714732").then(n)}},{name:"v-46ec0327",path:"/guide/cluster/namespace.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-46ec0327").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-8658c2f2",path:"/guide/example/busybox.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-8658c2f2").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-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-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-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-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-4db1779e",path:"/guide/monitor/apis.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-4db1779e").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-4b91c5e7",path:"/install/install-common-vm.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-4b91c5e7").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-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-c621d7f2",path:"/install/install-dashboard.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-c621d7f2").then(n)}},{name:"v-cfc76602",path:"/install/install-kind.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-cfc76602").then(n)}},{name:"v-66d56047",path:"/install/install-kubectl.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-66d56047").then(n)}},{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-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-53360ab2",path:"/install/install-dashboard-upgrade.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-53360ab2").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-5566a571",path:"/overview/why-kuboard.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5566a571").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-76626758",path:"/support/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-76626758").then(n)}},{path:"/support/index.html",redirect:"/support/"},{name:"v-6ad799b6",path:"/support/change-log.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-6ad799b6").then(n)}},{name:"v-3732859b",path:"/install/install-kubernetes.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-3732859b").then(n)}},{name:"v-292f2847",path:"/install/install-k8s.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-292f2847").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:"在线体验",actionLink:"http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg",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-26T23:54:38.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-27 07:54: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/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/"},{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-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-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/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:"部署 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-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:"导入 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 (alpha)",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"监控 example (alpha)"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/example/monitor.html"},{name:"twitter:title",content:"监控 example (alpha)"},{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-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/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/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-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:"自定义监控套件",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/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-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-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:"概述",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:"创建 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-28T05:55:39.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-28 13:55:39"},{title:"在单机使用 kind 安装 Kubernetes",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"在单机使用 kind 安装 Kubernetes"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-kind.html"},{name:"twitter:title",content:"在单机使用 kind 安装 Kubernetes"},{name:"twitter:url",content:"/install/install-kind.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-kind.html",relativePath:"install/install-kind.md",key:"v-cfc76602",path:"/install/install-kind.html",headers:[{level:2,title:"环境简介",slug:"环境简介"},{level:3,title:"kind 简介与安装",slug:"kind-简介与安装"},{level:3,title:"docker 环境",slug:"docker-环境"},{level:3,title:"kubectl 安装",slug:"kubectl-安装"},{level:2,title:"k8s 集群搭建",slug:"k8s-集群搭建"},{level:3,title:"准备 kind 搭建集群配置文件 kind-config.yaml",slug:"准备-kind-搭建集群配置文件-kind-config-yaml"},{level:3,title:"使用 kind 搭建集群",slug:"使用-kind-搭建集群"},{level:3,title:"创建成功",slug:"创建成功"},{level:2,title:"kuboard 安装",slug:"kuboard-安装"},{level:3,title:"获取并修改 yaml 文件",slug:"获取并修改-yaml-文件"},{level:3,title:"执行安装",slug:"执行安装"},{level:3,title:"查看启动状态",slug:"查看启动状态"},{level:3,title:"访问 kuboard 页面",slug:"访问-kuboard-页面"}],lastUpdated:"2019-07-25 06:22:52"},{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:"部署 cloud-eureka",frontmatter:{meta:[{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"},{title:"Spring Cloud and Kubernetes",frontmatter:{meta:[{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Spring Cloud and Kubernetes"},{property:"og:type",content:"website"},{property:"og:url",content:"/micro-service/spring-cloud/"},{name:"twitter:title",content:"Spring Cloud and 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/"},{title:"升级 Kuboard",frontmatter:{meta:[{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:"执行升级",slug:"执行升级"}]},{title:"Kuboard 简介",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-27T00:48:01.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:2,title:"在线提问",slug:"在线提问"}],lastUpdated:"2019-07-27 08:48:01"},{title:"为什么选择 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.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-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:"/support/"},{name:"twitter:title",content:"提交问题"},{name:"twitter:url",content:"/support/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/support/",relativePath:"support/README.md",key:"v-76626758",path:"/support/",headers:[{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-28T06:22:51.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"更新日志"},{property:"og:type",content:"website"},{property:"og:url",content:"/support/change-log.html"},{name:"twitter:title",content:"更新日志"},{name:"twitter:url",content:"/support/change-log.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/support/change-log.html",relativePath:"support/change-log.md",key:"v-6ad799b6",path:"/support/change-log.html",headers:[{level:2,title:"v1.0.0-beta.13",slug:"v1-0-0-beta-13"}],lastUpdated:"2019-07-28 14:22:51"},{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 单Master节点",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T23:54:38.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-27 07:54:38"},{title:"如何降低 Kubernetes 学习门槛",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T07:48:26.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:2,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-26 15:48:26"}],themeConfig:{nav:[{text:"简介",link:"/overview/"},{text:"安装",link:"/install/install-dashboard"},{text:"使用",link:"/guide/"},{text:"微服务",link:"/micro-service/spring-cloud/"},{text:"支持",link:"/support/"}],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:"Why Kuboard",collapsable:!1,children:["why-kuboard","concepts"]}],"/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:"监控套件 (alpha)",collapsable:!1,children:["monitor/","monitor/apis"]}],"/micro-service/":[{title:"Spring Cloud",collapsable:!1,children:["spring-cloud/","spring-cloud/cloud-eureka"]}],"/support/":["","change-log"]}}};n(75);Fo.component("HomePage",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,351))),Fo.component("Badge",()=>Promise.all([n.e(0),n.e(25)]).then(n.bind(null,368)));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 Ms=void 0!==vs.ResizeObserver?vs.ResizeObserver:Rs;const Ns="undefined"==typeof window,Us=function(t){for(let e of t){const t=e.target.__resizeListeners__||[];t.length&&t.forEach(t=>{t()})}};function Fs(){}var Ks=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:Fs},onTabRemove:{type:Function,default:Fs},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(Ks(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(Ks(this.sizeName))],e=this.$refs.navScroll["offset".concat(Ks(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(Ks(t))],n=this.$refs.navScroll["offset".concat(Ks(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,Ns||(t.__resizeListeners__||(t.__resizeListeners__=[],t.__ro__=new Ms(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")}},Hs=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,Zs=(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;rt.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 Fa("pageKey",e),Fo.component(e)||Fo.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()})}};Fo.config.productionTip=!1,Fo.use(ba),Fo.use(Xs),Fo.mixin(function(t,e,n=Fo){!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?!Fo.$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{Zs.forEach(e=>{"function"==typeof e&&e({Vue:Fo,options:r,router:n,siteData:Ja,isServer:t})})}catch(t){console.error(t)}return{app:new Fo(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:"931857b"},rl.onReady(()=>{nl.$mount("#app")})}]); \ No newline at end of file + */function Ko(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)},Ho=/%2C/g,Zo=function(t){return encodeURIComponent(t).replace(Bo,Vo).replace(Ho,",")},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 Zo(e);if(Array.isArray(n)){var r=[];return n.forEach(function(t){void 0!==t&&(null===t?r.push(Zo(e)):r.push(Zo(e)+"="+Zo(t)))}),r.join("&")}return Zo(e)+"="+Zo(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=Ti(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=Ko(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){Ko(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(31).then(n.bind(null,352)),Layout:()=>Promise.all([n.e(0),n.e(2),n.e(11)]).then(n.bind(null,353))},wa={"v-cbd95058":()=>n.e(32).then(n.bind(null,366)),"v-796bf18c":()=>n.e(33).then(n.bind(null,388)),"v-46ec0327":()=>n.e(12).then(n.bind(null,389)),"v-0a714732":()=>n.e(6).then(n.bind(null,390)),"v-77cc1ec7":()=>n.e(22).then(n.bind(null,391)),"v-986dbade":()=>n.e(20).then(n.bind(null,369)),"v-8d4dfbb6":()=>n.e(23).then(n.bind(null,365)),"v-76564011":()=>n.e(34).then(n.bind(null,364)),"v-8658c2f2":()=>n.e(9).then(n.bind(null,363)),"v-554543f9":()=>n.e(5).then(n.bind(null,362)),"v-7434c187":()=>n.e(3).then(n.bind(null,361)),"v-0996c938":()=>n.e(35).then(n.bind(null,373)),"v-c0fa0cf2":()=>n.e(7).then(n.bind(null,356)),"v-1263fa20":()=>n.e(37).then(n.bind(null,358)),"v-4db1779e":()=>n.e(36).then(n.bind(null,359)),"v-240eddf2":()=>n.e(15).then(n.bind(null,367)),"v-6c5acde7":()=>n.e(14).then(n.bind(null,370)),"v-9d44dcf2":()=>n.e(13).then(n.bind(null,371)),"v-7d2f6cc7":()=>n.e(16).then(n.bind(null,392)),"v-61ad5b01":()=>n.e(38).then(n.bind(null,375)),"v-4b91c5e7":()=>n.e(26).then(n.bind(null,377)),"v-5db85fb7":()=>n.e(10).then(n.bind(null,379)),"v-53360ab2":()=>n.e(28).then(n.bind(null,381)),"v-5be22288":()=>n.e(27).then(n.bind(null,383)),"v-c621d7f2":()=>n.e(29).then(n.bind(null,385)),"v-cfc76602":()=>n.e(18).then(n.bind(null,387)),"v-649782a7":()=>n.e(40).then(n.bind(null,386)),"v-1401ca46":()=>n.e(39).then(n.bind(null,384)),"v-16dbc3c4":()=>n.e(42).then(n.bind(null,382)),"v-7249b1a4":()=>n.e(24).then(n.bind(null,380)),"v-bfdadf72":()=>n.e(43).then(n.bind(null,378)),"v-66d56047":()=>n.e(41).then(n.bind(null,376)),"v-6ad799b6":()=>n.e(44).then(n.bind(null,374)),"v-76626758":()=>n.e(30).then(n.bind(null,372)),"v-5566a571":()=>n.e(19).then(n.bind(null,360)),"v-292f2847":()=>n.e(17).then(n.bind(null,357)),"v-0393ebb2":()=>n.e(8).then(n.bind(null,355)),"v-3732859b":()=>n.e(21).then(n.bind(null,354))};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 Sa(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 Ta=Object.assign({},_a,wa),Aa=t=>Ta[t],Pa=t=>wa[t],ja=t=>_a[t],La=t=>Fo.component(t);function Ia(t){return Sa(Pa,t)}function Ra(t){return Sa(ja,t)}function Ma(t){return Sa(Aa,t)}function Na(t){return Sa(La,t)}function Ua(...t){return Promise.all(t.filter(t=>t).map(async t=>{if(!Na(t)&&Ma(t)){const e=await Ma(t)();Fo.component(t,e.default)}}))}function Fa(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[t]=e)}var Ka={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),Ha=n.n(Va),Za=[Ka,Ba,{mounted(){Ha.a.configure({showSpinner:!1}),this.$router.beforeEach((t,e,n)=>{t.path===e.path||Fo.component(t.name)||Ha.a.start(),n()}),this.$router.afterEach(()=>{Ha.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 Fa("layout",t),Fo.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",Za);const Xa=[{name:"v-cbd95058",path:"/",component:Ya,beforeEnter:(t,e,n)=>{Ua("HomePage","v-cbd95058").then(n)}},{path:"/index.html",redirect:"/"},{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-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-77cc1ec7",path:"/guide/cluster/computing.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-77cc1ec7").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-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-4db1779e",path:"/guide/monitor/apis.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-4db1779e").then(n)}},{name:"v-240eddf2",path:"/guide/namespace/pvc.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-240eddf2").then(n)}},{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-7d2f6cc7",path:"/guide/namespace/secrets.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-7d2f6cc7").then(n)}},{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-5db85fb7",path:"/guide/namespace/workload.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5db85fb7").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-5be22288",path:"/install/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-5be22288").then(n)}},{path:"/install/index.html",redirect:"/install/"},{name:"v-c621d7f2",path:"/install/install-dashboard.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-c621d7f2").then(n)}},{name:"v-cfc76602",path:"/install/install-kind.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-cfc76602").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-1401ca46",path:"/install/install-dashboard-diagonize-kube-dns.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-1401ca46").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-7249b1a4",path:"/overview/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-7249b1a4").then(n)}},{path:"/overview/index.html",redirect:"/overview/"},{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-66d56047",path:"/install/install-kubectl.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-66d56047").then(n)}},{name:"v-6ad799b6",path:"/support/change-log.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-6ad799b6").then(n)}},{name:"v-76626758",path:"/support/",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-76626758").then(n)}},{path:"/support/index.html",redirect:"/support/"},{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-0393ebb2",path:"/overview/concepts.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-0393ebb2").then(n)}},{name:"v-3732859b",path:"/install/install-kubernetes.html",component:Ya,beforeEnter:(t,e,n)=>{Ua("Layout","v-3732859b").then(n)}},{path:"*",component:Ya}],Ja={title:"Kuboard",description:"A cool Kubernetes Dashboard",base:"/",pages:[{title:"Home",frontmatter:{home:!0,layout:"HomePage",actionText:"在线体验",actionLink:"http://demo.eip.work/#/login?isReadOnly=true&token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg",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-28T15:55:58.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-28 23:55:58"},{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/"},{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-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-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/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/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 (alpha)",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"监控 example (alpha)"},{property:"og:type",content:"website"},{property:"og:url",content:"/guide/example/monitor.html"},{name:"twitter:title",content:"监控 example (alpha)"},{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-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/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-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/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/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-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-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:"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:"安装 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:"工作负载",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:"升级 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T15:55:58.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:"执行升级",slug:"执行升级"}],lastUpdated:"2019-07-28 23:55:58"},{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:"安装 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T15:55:58.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-28 23:55:58"},{title:"在单机使用 kind 安装 Kubernetes",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"在单机使用 kind 安装 Kubernetes"},{property:"og:type",content:"website"},{property:"og:url",content:"/install/install-kind.html"},{name:"twitter:title",content:"在单机使用 kind 安装 Kubernetes"},{name:"twitter:url",content:"/install/install-kind.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/install/install-kind.html",relativePath:"install/install-kind.md",key:"v-cfc76602",path:"/install/install-kind.html",headers:[{level:2,title:"环境简介",slug:"环境简介"},{level:3,title:"kind 简介与安装",slug:"kind-简介与安装"},{level:3,title:"docker 环境",slug:"docker-环境"},{level:3,title:"kubectl 安装",slug:"kubectl-安装"},{level:2,title:"k8s 集群搭建",slug:"k8s-集群搭建"},{level:3,title:"准备 kind 搭建集群配置文件 kind-config.yaml",slug:"准备-kind-搭建集群配置文件-kind-config-yaml"},{level:3,title:"使用 kind 搭建集群",slug:"使用-kind-搭建集群"},{level:3,title:"创建成功",slug:"创建成功"},{level:2,title:"kuboard 安装",slug:"kuboard-安装"},{level:3,title:"获取并修改 yaml 文件",slug:"获取并修改-yaml-文件"},{level:3,title:"执行安装",slug:"执行安装"},{level:3,title:"查看启动状态",slug:"查看启动状态"},{level:3,title:"访问 kuboard 页面",slug:"访问-kuboard-页面"}],lastUpdated:"2019-07-25 06:22:52"},{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:"Spring Cloud and Kubernetes",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T15:55:58.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"Spring Cloud and Kubernetes"},{property:"og:type",content:"website"},{property:"og:url",content:"/micro-service/spring-cloud/"},{name:"twitter:title",content:"Spring Cloud and 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-28 23:55:58"},{title:"Kuboard 简介",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T15:55:58.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:2,title:"在线提问",slug:"在线提问"}],lastUpdated:"2019-07-28 23:55:58"},{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:"从客户端电脑远程管理 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:"更新日志",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-28T15:55:58.000Z"},{property:"og:site_name",content:"Kuboard"},{property:"og:title",content:"更新日志"},{property:"og:type",content:"website"},{property:"og:url",content:"/support/change-log.html"},{name:"twitter:title",content:"更新日志"},{name:"twitter:url",content:"/support/change-log.html"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/support/change-log.html",relativePath:"support/change-log.md",key:"v-6ad799b6",path:"/support/change-log.html",headers:[{level:2,title:"v1.0.0-beta.13",slug:"v1-0-0-beta-13"}],lastUpdated:"2019-07-28 23:55:58"},{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:"/support/"},{name:"twitter:title",content:"提交问题"},{name:"twitter:url",content:"/support/"},{name:"twitter:card",content:"summary_large_image"}]},regularPath:"/support/",relativePath:"support/README.md",key:"v-76626758",path:"/support/",headers:[{level:2,title:"提交问题",slug:"提交问题"},{level:2,title:"在线提问",slug:"在线提问"}],lastUpdated:"2019-07-25 06:22:52"},{title:"为什么选择 Kuboard",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-24T22:22:52.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-25 06:22:52"},{title:"安装 Kubernetes 单Master节点",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T23:54:38.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-27 07:54:38"},{title:"如何降低 Kubernetes 学习门槛",frontmatter:{meta:[{property:"article:modified_time",content:"2019-07-26T07:48:26.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:2,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-26 15:48:26"},{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"}],themeConfig:{nav:[{text:"简介",link:"/overview/"},{text:"安装",link:"/install/install-dashboard"},{text:"使用",link:"/guide/"},{text:"微服务",link:"/micro-service/spring-cloud/"},{text:"支持",link:"/support/"}],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:"Why Kuboard",collapsable:!1,children:["why-kuboard","concepts"]}],"/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:"监控套件 (alpha)",collapsable:!1,children:["monitor/","monitor/apis"]}],"/micro-service/":[{title:"Spring Cloud",collapsable:!1,children:["spring-cloud/","spring-cloud/cloud-eureka"]}],"/support/":["","change-log"]}}};n(75);Fo.component("HomePage",()=>Promise.all([n.e(0),n.e(4)]).then(n.bind(null,351))),Fo.component("Badge",()=>Promise.all([n.e(0),n.e(25)]).then(n.bind(null,368)));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 Ms=void 0!==vs.ResizeObserver?vs.ResizeObserver:Rs;const Ns="undefined"==typeof window,Us=function(t){for(let e of t){const t=e.target.__resizeListeners__||[];t.length&&t.forEach(t=>{t()})}};function Fs(){}var Ks=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:Fs},onTabRemove:{type:Function,default:Fs},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(Ks(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(Ks(this.sizeName))],e=this.$refs.navScroll["offset".concat(Ks(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(Ks(t))],n=this.$refs.navScroll["offset".concat(Ks(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,Ns||(t.__resizeListeners__||(t.__resizeListeners__=[],t.__ro__=new Ms(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")}},Hs=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,Zs=(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;rt.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 Fa("pageKey",e),Fo.component(e)||Fo.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()})}};Fo.config.productionTip=!1,Fo.use(ba),Fo.use(Xs),Fo.mixin(function(t,e,n=Fo){!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?!Fo.$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{Zs.forEach(e=>{"function"==typeof e&&e({Vue:Fo,options:r,router:n,siteData:Ja,isServer:t})})}catch(t){console.error(t)}return{app:new Fo(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:"52023ca"},rl.onReady(()=>{nl.$mount("#app")})}]); \ No newline at end of file diff --git a/docs/guide/cluster/computing.html b/docs/guide/cluster/computing.html index 140668e..4ccdd75 100644 --- a/docs/guide/cluster/computing.html +++ b/docs/guide/cluster/computing.html @@ -7,7 +7,7 @@ - + @@ -21,6 +21,6 @@

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/cluster/namespace.html b/docs/guide/cluster/namespace.html index 989d247..af71ab3 100644 --- a/docs/guide/cluster/namespace.html +++ b/docs/guide/cluster/namespace.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/cluster/storage.html b/docs/guide/cluster/storage.html index 973620f..39dcdaf 100644 --- a/docs/guide/cluster/storage.html +++ b/docs/guide/cluster/storage.html @@ -7,7 +7,7 @@ - + @@ -22,6 +22,6 @@ sudo mount -t nfs -o vers=4,minorversion=0,noresvport Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/diagonize/events.html b/docs/guide/diagonize/events.html index cd84701..0b0356c 100644 --- a/docs/guide/diagonize/events.html +++ b/docs/guide/diagonize/events.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/diagonize/logs.html b/docs/guide/diagonize/logs.html index 1a484d0..ff5f9b7 100644 --- a/docs/guide/diagonize/logs.html +++ b/docs/guide/diagonize/logs.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/diagonize/port-forward.html b/docs/guide/diagonize/port-forward.html index 9e6eb0a..2fff6ab 100644 --- a/docs/guide/diagonize/port-forward.html +++ b/docs/guide/diagonize/port-forward.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/example/busybox.html b/docs/guide/example/busybox.html index 628667d..91be095 100644 --- a/docs/guide/example/busybox.html +++ b/docs/guide/example/busybox.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/example/import.html b/docs/guide/example/import.html index c66d029..0c54f36 100644 --- a/docs/guide/example/import.html +++ b/docs/guide/example/import.html @@ -7,7 +7,7 @@ - + @@ -37,6 +37,6 @@ com.netflix.discovery.shared.transport.TransportException: Cannot execute reques →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/example/monitor.html b/docs/guide/example/monitor.html index 677050d..9bc9527 100644 --- a/docs/guide/example/monitor.html +++ b/docs/guide/example/monitor.html @@ -7,7 +7,7 @@ - + @@ -21,6 +21,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/index.html b/docs/guide/index.html index 68a8729..f44eed7 100644 --- a/docs/guide/index.html +++ b/docs/guide/index.html @@ -7,7 +7,7 @@ - + @@ -16,6 +16,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/monitor/apis.html b/docs/guide/monitor/apis.html index 07fe143..a565c94 100644 --- a/docs/guide/monitor/apis.html +++ b/docs/guide/monitor/apis.html @@ -7,7 +7,7 @@ - + @@ -16,6 +16,6 @@

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/monitor/index.html b/docs/guide/monitor/index.html index fa7b65f..b9d4e48 100644 --- a/docs/guide/monitor/index.html +++ b/docs/guide/monitor/index.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/namespace/adjustion.html b/docs/guide/namespace/adjustion.html index 39257ae..69a8de0 100644 --- a/docs/guide/namespace/adjustion.html +++ b/docs/guide/namespace/adjustion.html @@ -7,7 +7,7 @@ - + @@ -21,6 +21,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/namespace/configMap.html b/docs/guide/namespace/configMap.html index d7a4e00..3ff0d3c 100644 --- a/docs/guide/namespace/configMap.html +++ b/docs/guide/namespace/configMap.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/namespace/index.html b/docs/guide/namespace/index.html index caf3ca9..5d389a9 100644 --- a/docs/guide/namespace/index.html +++ b/docs/guide/namespace/index.html @@ -7,11 +7,11 @@ - +

应用管理

创建工作负载

删除工作负载

伸缩

升级工作负载版本

环境迁移

导出

导入

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/namespace/multi-env.html b/docs/guide/namespace/multi-env.html index 1a8fa71..6a9dd6f 100644 --- a/docs/guide/namespace/multi-env.html +++ b/docs/guide/namespace/multi-env.html @@ -7,7 +7,7 @@ - + @@ -42,6 +42,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/namespace/pvc.html b/docs/guide/namespace/pvc.html index 40da588..c249b82 100644 --- a/docs/guide/namespace/pvc.html +++ b/docs/guide/namespace/pvc.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/namespace/secrets.html b/docs/guide/namespace/secrets.html index 3debd5b..b325d0e 100644 --- a/docs/guide/namespace/secrets.html +++ b/docs/guide/namespace/secrets.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/guide/namespace/workload.html b/docs/guide/namespace/workload.html index d06994e..fa7b147 100644 --- a/docs/guide/namespace/workload.html +++ b/docs/guide/namespace/workload.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/index.html b/docs/index.html index fa59d66..4ae28af 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,8 +6,8 @@ Kuboard - - + + @@ -18,6 +18,6 @@ 开始使用 →

降低 Kubernetes 门槛

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

直观显示微服务架构

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

上下文关联监控

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

- + diff --git a/docs/install/index.html b/docs/install/index.html index 0776e89..9b9ddfd 100644 --- a/docs/install/index.html +++ b/docs/install/index.html @@ -7,11 +7,11 @@ - +

概述

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

还没有 Kubernetes 集群:


在线提问

Kuboard 兴趣群二维码

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/install/install-common-ingress.html b/docs/install/install-common-ingress.html index 64f3e20..111b5d7 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
 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
- + diff --git a/docs/install/install-common-vm.html b/docs/install/install-common-vm.html index 8332027..1e1033d 100644 --- a/docs/install/install-common-vm.html +++ b/docs/install/install-common-vm.html @@ -7,7 +7,7 @@ - + @@ -70,6 +70,6 @@ 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
- + diff --git a/docs/install/install-dashboard-diagonize-kube-dns.html b/docs/install/install-dashboard-diagonize-kube-dns.html index 59524af..4423cc4 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
- + diff --git a/docs/install/install-dashboard-diagonize.html b/docs/install/install-dashboard-diagonize.html index f64c33d..8841ead 100644 --- a/docs/install/install-dashboard-diagonize.html +++ b/docs/install/install-dashboard-diagonize.html @@ -7,7 +7,7 @@ - + @@ -31,6 +31,6 @@ kuboard-7bb8d57995-nkqzw 1

如果您得到如下错误信息: 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
- + diff --git a/docs/install/install-dashboard-upgrade.html b/docs/install/install-dashboard-upgrade.html index ef5db13..0f66ba2 100644 --- a/docs/install/install-dashboard-upgrade.html +++ b/docs/install/install-dashboard-upgrade.html @@ -6,17 +6,17 @@ 升级 Kuboard | Kuboard - - + +

升级 Kuboard

最新版本

版本: v1.0.0-beta.13

发布日期: 2019-07-28

查看更新日志

执行升级

  • 进入 Kuboard 首页,完成登录,进入 Kuboard 集群概览
  • 点击 调整镜像版本 按钮
  • 勾选 监控 筛选项,点击刷新 -并修改 Deployment / Kuboard 的镜像版本为您要升级到的目标版本,如下图所示

image-20190728220831126

  • 点击 执行变更

  • 点击 应用

  • 点击 完成

    等待容器组调整完毕。

  • 刷新浏览器页面

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/install/install-dashboard.html b/docs/install/install-dashboard.html index 1aca965..ff4b8b5 100644 --- a/docs/install/install-dashboard.html +++ b/docs/install/install-dashboard.html @@ -6,14 +6,14 @@ 安装 Kuboard | Kuboard - - + +

安装 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

下一步

获取 Token

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

访问 Kuboard

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

下一步

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/install/install-k8s.html b/docs/install/install-k8s.html index 3b82501..40360e2 100644 --- a/docs/install/install-k8s.html +++ b/docs/install/install-k8s.html @@ -7,7 +7,7 @@ - + @@ -96,6 +96,6 @@ kubeadm join apiserver.demo:6443 --token mpf →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/install/install-kind.html b/docs/install/install-kind.html index 26b54d9..0de0ec0 100644 --- a/docs/install/install-kind.html +++ b/docs/install/install-kind.html @@ -7,7 +7,7 @@ - + @@ -37,6 +37,6 @@ sudo mv ./kubectl /usr/local/bin/kubectl

等待 kuboard 启动成功

访问 kuboard 页面

待启动成功后,需要做 80 端口转发,通过浏览器访问 kuboard

kubectl port-forward service/kuboard 9080:80 -n kube-system
 

获取登录 token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}')   
 

1563698644736

浏览器中访问 http://localhost:9080

1563698714557

将获取的 token 复制到浏览器中,访问成功

1563698865448

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/install/install-kubectl.html b/docs/install/install-kubectl.html index 913dcdd..98eeaae 100644 --- a/docs/install/install-kubectl.html +++ b/docs/install/install-kubectl.html @@ -7,7 +7,7 @@ - + @@ -40,6 +40,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/install/install-kubernetes.html b/docs/install/install-kubernetes.html index 099a752..ccfa345 100644 --- a/docs/install/install-kubernetes.html +++ b/docs/install/install-kubernetes.html @@ -7,7 +7,7 @@ - + @@ -119,6 +119,6 @@ kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-reposito →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/micro-service/spring-cloud/cloud-eureka.html b/docs/micro-service/spring-cloud/cloud-eureka.html index 7c03911..501e97a 100644 --- a/docs/micro-service/spring-cloud/cloud-eureka.html +++ b/docs/micro-service/spring-cloud/cloud-eureka.html @@ -6,16 +6,16 @@ 部署 cloud-eureka | Kuboard - - + + -

部署 cloud-eureka

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/support/change-log.html b/docs/support/change-log.html index ed722f4..81889c1 100644 --- a/docs/support/change-log.html +++ b/docs/support/change-log.html @@ -6,16 +6,16 @@ 更新日志 | Kuboard - - + + -

更新日志

v1.0.0-beta.13

发布日期

2019-07-28

优化

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

BUG 修复

  • Kubernetes 二进制安装时, Kuboard 无法启动
  • Kubernetes 中缺少 kube-dns Service 时, Kuboard 无法启动
Copyright © 2019-present Huanqing Shao
- +