From a9d4f6e9041d92415fb18c4e8de3cb703b799032 Mon Sep 17 00:00:00 2001 From: "huanqing.shao" Date: Mon, 29 Jul 2019 19:20:00 +0800 Subject: [PATCH] install-k8s --- docs/404.html | 6 +- .../js/{10.c14eb303.js => 10.89c15c95.js} | 2 +- .../js/{12.4ab5dbba.js => 12.8600e39b.js} | 2 +- .../js/{13.3030c025.js => 13.8a0b664f.js} | 2 +- .../js/{15.6073fed7.js => 15.04f2597a.js} | 2 +- docs/assets/js/17.54330d0e.js | 1 + docs/assets/js/17.eb7afaf9.js | 1 - .../js/{18.b4940cde.js => 18.392b3ea6.js} | 2 +- .../js/{19.1b24b250.js => 19.456d7dcb.js} | 2 +- .../js/{2.079e6b1e.js => 2.db1527d8.js} | 2 +- .../js/{20.2b1d2143.js => 20.b561d944.js} | 2 +- .../js/{22.94995446.js => 22.964c74b4.js} | 2 +- .../js/{23.825bfe3f.js => 23.a9134d81.js} | 2 +- .../js/{24.fa8c0e9e.js => 24.853f5562.js} | 2 +- .../js/{25.13cfdc5a.js => 25.ee995002.js} | 2 +- .../js/{26.4d7ae609.js => 26.5e3ce2b1.js} | 2 +- .../js/{27.a5c55921.js => 27.148e103b.js} | 2 +- .../js/{28.3c4d507c.js => 28.70ce201b.js} | 2 +- .../js/{29.205d50e0.js => 29.3eff0189.js} | 2 +- .../js/{3.d422123c.js => 3.930ba94c.js} | 2 +- docs/assets/js/30.bae413bf.js | 1 + .../js/{30.53f89c2b.js => 31.596eabfd.js} | 2 +- .../js/{31.4174e7ee.js => 32.173db7cf.js} | 2 +- .../js/{32.52896a2b.js => 33.d4f4a25c.js} | 2 +- .../js/{33.79554e89.js => 34.7ee4a1f5.js} | 2 +- .../js/{34.74783718.js => 35.1c58fb06.js} | 2 +- .../js/{35.cffa72f2.js => 36.4db36982.js} | 2 +- .../js/{36.23eb6a2d.js => 37.b23645ad.js} | 2 +- .../js/{37.b5c63a22.js => 38.64de76ce.js} | 2 +- .../js/{38.3aa3f675.js => 39.e587382b.js} | 2 +- .../js/{4.155c1923.js => 4.743ff6cf.js} | 2 +- .../js/{39.95176c5a.js => 40.f3578a6a.js} | 2 +- .../js/{40.77c259a4.js => 41.578d1dde.js} | 2 +- .../js/{41.6729bbd0.js => 42.22a918f7.js} | 2 +- .../js/{42.2a5246b3.js => 43.ea3c3cae.js} | 2 +- .../js/{43.e95b87ec.js => 44.fb14ff55.js} | 2 +- .../js/{44.82cc2c4d.js => 45.468a764f.js} | 2 +- docs/assets/js/45.b3ac16c0.js | 1 - docs/assets/js/46.0e8b49ec.js | 1 + .../js/{5.a2a0584a.js => 5.6071a215.js} | 2 +- .../js/{6.d4b5067e.js => 6.843060b2.js} | 2 +- .../js/{7.7924640a.js => 7.0d44a01e.js} | 2 +- .../js/{9.2b86d385.js => 9.0827c799.js} | 2 +- .../js/{app.48c6bda0.js => app.ff4b26ce.js} | 6 +- 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 | 4 +- docs/install/index.html | 4 +- docs/install/install-common-ingress.html | 4 +- docs/install/install-common-vm.html | 4 +- docs/install/install-dashboard copy.html | 19 ++ .../install-dashboard-diagonize-kube-dns.html | 4 +- docs/install/install-dashboard-diagonize.html | 4 +- docs/install/install-dashboard-upgrade.html | 4 +- docs/install/install-dashboard.html | 8 +- docs/install/install-k8s.html | 104 ++++++---- docs/install/install-kind.html | 4 +- docs/install/install-kubectl.html | 4 +- docs/install/install-kubernetes.html | 4 +- .../spring-cloud/cloud-eureka.html | 4 +- docs/micro-service/spring-cloud/index.html | 4 +- docs/overview/concepts.html | 4 +- docs/overview/index.html | 4 +- docs/overview/why-kuboard.html | 8 +- docs/support/change-log.html | 4 +- docs/support/index.html | 4 +- install/install-dashboard copy.md | 193 ++++++++++++++++++ install/install-dashboard.md | 47 ++--- install/install-k8s.md | 99 ++++++--- 86 files changed, 490 insertions(+), 219 deletions(-) rename docs/assets/js/{10.c14eb303.js => 10.89c15c95.js} (99%) rename docs/assets/js/{12.4ab5dbba.js => 12.8600e39b.js} (76%) rename docs/assets/js/{13.3030c025.js => 13.8a0b664f.js} (99%) rename docs/assets/js/{15.6073fed7.js => 15.04f2597a.js} (98%) create mode 100644 docs/assets/js/17.54330d0e.js delete mode 100644 docs/assets/js/17.eb7afaf9.js rename docs/assets/js/{18.b4940cde.js => 18.392b3ea6.js} (94%) rename docs/assets/js/{19.1b24b250.js => 19.456d7dcb.js} (98%) rename docs/assets/js/{2.079e6b1e.js => 2.db1527d8.js} (99%) rename docs/assets/js/{20.2b1d2143.js => 20.b561d944.js} (82%) rename docs/assets/js/{22.94995446.js => 22.964c74b4.js} (85%) rename docs/assets/js/{23.825bfe3f.js => 23.a9134d81.js} (83%) rename docs/assets/js/{24.fa8c0e9e.js => 24.853f5562.js} (93%) rename docs/assets/js/{25.13cfdc5a.js => 25.ee995002.js} (98%) rename docs/assets/js/{26.4d7ae609.js => 26.5e3ce2b1.js} (87%) rename docs/assets/js/{27.a5c55921.js => 27.148e103b.js} (99%) rename docs/assets/js/{28.3c4d507c.js => 28.70ce201b.js} (83%) rename docs/assets/js/{29.205d50e0.js => 29.3eff0189.js} (98%) rename docs/assets/js/{3.d422123c.js => 3.930ba94c.js} (99%) create mode 100644 docs/assets/js/30.bae413bf.js rename docs/assets/js/{30.53f89c2b.js => 31.596eabfd.js} (87%) rename docs/assets/js/{31.4174e7ee.js => 32.173db7cf.js} (90%) rename docs/assets/js/{32.52896a2b.js => 33.d4f4a25c.js} (78%) rename docs/assets/js/{33.79554e89.js => 34.7ee4a1f5.js} (96%) rename docs/assets/js/{34.74783718.js => 35.1c58fb06.js} (98%) rename docs/assets/js/{35.cffa72f2.js => 36.4db36982.js} (92%) rename docs/assets/js/{36.23eb6a2d.js => 37.b23645ad.js} (92%) rename docs/assets/js/{37.b5c63a22.js => 38.64de76ce.js} (96%) rename docs/assets/js/{38.3aa3f675.js => 39.e587382b.js} (98%) rename docs/assets/js/{4.155c1923.js => 4.743ff6cf.js} (97%) rename docs/assets/js/{39.95176c5a.js => 40.f3578a6a.js} (87%) rename docs/assets/js/{40.77c259a4.js => 41.578d1dde.js} (98%) rename docs/assets/js/{41.6729bbd0.js => 42.22a918f7.js} (99%) rename docs/assets/js/{42.2a5246b3.js => 43.ea3c3cae.js} (92%) rename docs/assets/js/{43.e95b87ec.js => 44.fb14ff55.js} (87%) rename docs/assets/js/{44.82cc2c4d.js => 45.468a764f.js} (95%) delete mode 100644 docs/assets/js/45.b3ac16c0.js create mode 100644 docs/assets/js/46.0e8b49ec.js rename docs/assets/js/{5.a2a0584a.js => 5.6071a215.js} (99%) rename docs/assets/js/{6.d4b5067e.js => 6.843060b2.js} (84%) rename docs/assets/js/{7.7924640a.js => 7.0d44a01e.js} (99%) rename docs/assets/js/{9.2b86d385.js => 9.0827c799.js} (99%) rename docs/assets/js/{app.48c6bda0.js => app.ff4b26ce.js} (60%) create mode 100644 docs/install/install-dashboard copy.html create mode 100644 install/install-dashboard copy.md diff --git a/docs/404.html b/docs/404.html index e216c9b..74de088 100644 --- a/docs/404.html +++ b/docs/404.html @@ -7,11 +7,11 @@ - + -

404

Looks like we've got some broken links.
Take me home.
- +

404

How did we get here?
Take me home.
+ diff --git a/docs/assets/js/10.c14eb303.js b/docs/assets/js/10.89c15c95.js similarity index 99% rename from docs/assets/js/10.c14eb303.js rename to docs/assets/js/10.89c15c95.js index c3d069a..1d724cf 100644 --- a/docs/assets/js/10.c14eb303.js +++ b/docs/assets/js/10.89c15c95.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{315:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223454676.b545b43f.png"},316:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223551308.ed106a2a.png"},317:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223605920.3e762b29.png"},318:function(t,e,a){t.exports=a.p+"assets/img/image-20190722231246540.ebf13194.png"},319:function(t,e,a){t.exports=a.p+"assets/img/image-20190722224029397.abc44209.png"},320:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225347491.984fabae.png"},321:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225454029.73400267.png"},322:function(t,e,a){t.exports=a.p+"assets/img/image-20190722230511430.ed459354.png"},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(315),alt:"image-20190722223454676"}})]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("伸缩")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("填写表单")]),t._v(" "),r("p",[t._v("副本数: 目标容器组数量")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(316),alt:"image-20190722223551308"}})]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("确定")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("等待,知道伸缩操作执行完毕。")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(317),alt:"image-20190722223605920"}})]),t._v(" "),r("h2",{attrs:{id:"删除容器组"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#删除容器组","aria-hidden":"true"}},[t._v("#")]),t._v(" 删除容器组")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("删除容器组")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("可删除该容器组。")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("容器组被删除之后,Kubernetes Workload Controller 将要重新创建一个容器组,用于替代被删除的容器组;被删除容器组原有的状态将丢失,新容器组重新从 镜像中加载启动;")])]),t._v(" "),r("li",[r("p",[t._v("Kuboard 的工作负载编辑器,默认将容器组的 imagePullPolicy 设置为 Alwarys,因此,每次在容器组启动的时候,Kubenetes 都会尝试从镜像仓库中抓取最新镜像;")])])])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(318),alt:"image-20190722231246540"}})]),t._v(" "),r("h2",{attrs:{id:"诊断问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#诊断问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 诊断问题")]),t._v(" "),r("p",[t._v("在诊断工作负载的问题时,Kuboard主要提供三种手段:")]),t._v(" "),r("h3",{attrs:{id:"事件:-kubernetes-部署相关问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#事件:-kubernetes-部署相关问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 事件: Kubernetes 部署相关问题")]),t._v(" "),r("p",[t._v("如下图所示,图中提示")]),t._v(" "),r("blockquote",[r("p",[t._v("错误内容:Error: ErrImagePull 该容器组抓取镜像失败")]),t._v(" "),r("p",[t._v("失败原因:pull access denied for busy-box, repository does not exist or may require 'docker login'")])]),t._v(" "),r("p",[t._v("对于这样的错误,需要技术人员检查:")]),t._v(" "),r("ul",[r("li",[t._v("容器所在节点与镜像仓库之间的网络连通性")]),t._v(" "),r("li",[t._v("容器镜像拼写是否正确")]),t._v(" "),r("li",[t._v("如果为私有仓库,是否在工作负载编辑器中正确配置了 docker 仓库用户名密码")])]),t._v(" "),r("p",[t._v("!> Kuboard 监听了 Kubernetes 集群的事件变化,您无需刷新页面,即可在工作负载编辑器的容器组界面区域看到该容器相关的最新事件。")]),t._v(" "),r("p",[t._v("通过 Kubernetes 事件所指示出来的问题,通常是集群本身配置的问题,或者是创建工作负载时的参数填写问题,解决这样的问题需要的是 Kubernetes 集群相关的知识和背景,"),r("strong",[t._v("通常运维人员可以独立解决此类问题")]),t._v("。")]),t._v(" "),r("p",[r("img",{attrs:{src:a(319),alt:"image-20190722224029397"}})]),t._v(" "),r("h3",{attrs:{id:"日志:-容器运行时产生的错误"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#日志:-容器运行时产生的错误","aria-hidden":"true"}},[t._v("#")]),t._v(" 日志: 容器运行时产生的错误")]),t._v(" "),r("p",[t._v("如下图所示,假设您已进入工作负载查看界面:")]),t._v(" "),r("p",[r("img",{attrs:{src:a(320),alt:"image-20190722225347491"}})]),t._v(" "),r("ul",[r("li",[t._v("点击其中的 "),r("em",[r("strong",[t._v("日志")])]),t._v(" 按钮")])]),t._v(" "),r("p",[t._v("可查看该容器的运行时日志,如下图所示:")]),t._v(" "),r("p",[r("img",{attrs:{src:a(321),alt:"image-20190722225454029"}})]),t._v(" "),r("p",[r("strong",[t._v("容器运行时问题定位及解决")])]),t._v(" "),r("p",[t._v("日志所指示出来的错误,可能有两类原因:")]),t._v(" "),r("ul",[r("li",[t._v("将其容器部署到 Kubernetes 时,参数配置填写错误")]),t._v(" "),r("li",[t._v("容器内应用程序自身的 BUG")])]),t._v(" "),r("p",[t._v("无论是上述何种原因,运维人员如果请开发人员介入,一起排查这里问题,效果会好很多。")]),t._v(" "),r("h3",{attrs:{id:"终端:-通过交互式命令,在容器内诊断问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#终端:-通过交互式命令,在容器内诊断问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 终端: 通过交互式命令,在容器内诊断问题")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("终端")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("可进入该容器的交互式命令界面")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(322),alt:"image-20190722230511430"}})]),t._v(" "),r("p",[r("strong",[t._v("适用场景")])]),t._v(" "),r("p",[t._v("在交互式终端里,"),r("strong",[t._v("运维人员")]),t._v("可以:")]),t._v(" "),r("ul",[r("li",[t._v("通过 ping / curl 等命令,测试网络连通性,测试 Kubernetes 的服务 DNS 解析是否正确")]),t._v(" "),r("li",[t._v("通过 export 命令检查该容器的环境变量的设置是否正确")])]),t._v(" "),r("p",[r("strong",[t._v("开发人员")]),t._v(" 可以:")]),t._v(" "),r("ul",[r("li",[t._v("通过 ls / cat / vi 等命令,查看该容器是否包含了最新的代码变更")]),t._v(" "),r("li",[t._v("通过 vi 等命令,临时对容器中的配置文件进行修改,并在验证这种修改有效之后,才将其正式更新到代码库")])])])},[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{315:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223454676.b545b43f.png"},316:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223551308.ed106a2a.png"},317:function(t,e,a){t.exports=a.p+"assets/img/image-20190722223605920.3e762b29.png"},318:function(t,e,a){t.exports=a.p+"assets/img/image-20190722231246540.ebf13194.png"},319:function(t,e,a){t.exports=a.p+"assets/img/image-20190722224029397.abc44209.png"},320:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225347491.984fabae.png"},321:function(t,e,a){t.exports=a.p+"assets/img/image-20190722225454029.73400267.png"},322:function(t,e,a){t.exports=a.p+"assets/img/image-20190722230511430.ed459354.png"},395:function(t,e,a){"use strict";a.r(e);var r=a(0),s=Object(r.a)({},function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"工作负载"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#工作负载","aria-hidden":"true"}},[t._v("#")]),t._v(" 工作负载")]),t._v(" "),r("h2",{attrs:{id:"创建-查看-编辑工作负载"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#创建-查看-编辑工作负载","aria-hidden":"true"}},[t._v("#")]),t._v(" 创建/查看/编辑工作负载")]),t._v(" "),r("p",[t._v("请参考 "),r("a",{attrs:{href:"/guide/example/busybox"}},[t._v("创建 busybox")])]),t._v(" "),r("h2",{attrs:{id:"伸缩"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#伸缩","aria-hidden":"true"}},[t._v("#")]),t._v(" 伸缩")]),t._v(" "),r("p",[t._v("伸缩操作,通过调整工作负载的 replicas 大小,来控制该工作负载运行容器组的数量。")]),t._v(" "),r("ul",[r("li",[t._v("假设您已进入工作负载查看界面,如下图所示:")])]),t._v(" "),r("p",[r("img",{attrs:{src:a(315),alt:"image-20190722223454676"}})]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("伸缩")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("填写表单")]),t._v(" "),r("p",[t._v("副本数: 目标容器组数量")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(316),alt:"image-20190722223551308"}})]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("确定")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("等待,知道伸缩操作执行完毕。")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(317),alt:"image-20190722223605920"}})]),t._v(" "),r("h2",{attrs:{id:"删除容器组"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#删除容器组","aria-hidden":"true"}},[t._v("#")]),t._v(" 删除容器组")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("删除容器组")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("可删除该容器组。")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("容器组被删除之后,Kubernetes Workload Controller 将要重新创建一个容器组,用于替代被删除的容器组;被删除容器组原有的状态将丢失,新容器组重新从 镜像中加载启动;")])]),t._v(" "),r("li",[r("p",[t._v("Kuboard 的工作负载编辑器,默认将容器组的 imagePullPolicy 设置为 Alwarys,因此,每次在容器组启动的时候,Kubenetes 都会尝试从镜像仓库中抓取最新镜像;")])])])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(318),alt:"image-20190722231246540"}})]),t._v(" "),r("h2",{attrs:{id:"诊断问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#诊断问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 诊断问题")]),t._v(" "),r("p",[t._v("在诊断工作负载的问题时,Kuboard主要提供三种手段:")]),t._v(" "),r("h3",{attrs:{id:"事件:-kubernetes-部署相关问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#事件:-kubernetes-部署相关问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 事件: Kubernetes 部署相关问题")]),t._v(" "),r("p",[t._v("如下图所示,图中提示")]),t._v(" "),r("blockquote",[r("p",[t._v("错误内容:Error: ErrImagePull 该容器组抓取镜像失败")]),t._v(" "),r("p",[t._v("失败原因:pull access denied for busy-box, repository does not exist or may require 'docker login'")])]),t._v(" "),r("p",[t._v("对于这样的错误,需要技术人员检查:")]),t._v(" "),r("ul",[r("li",[t._v("容器所在节点与镜像仓库之间的网络连通性")]),t._v(" "),r("li",[t._v("容器镜像拼写是否正确")]),t._v(" "),r("li",[t._v("如果为私有仓库,是否在工作负载编辑器中正确配置了 docker 仓库用户名密码")])]),t._v(" "),r("p",[t._v("!> Kuboard 监听了 Kubernetes 集群的事件变化,您无需刷新页面,即可在工作负载编辑器的容器组界面区域看到该容器相关的最新事件。")]),t._v(" "),r("p",[t._v("通过 Kubernetes 事件所指示出来的问题,通常是集群本身配置的问题,或者是创建工作负载时的参数填写问题,解决这样的问题需要的是 Kubernetes 集群相关的知识和背景,"),r("strong",[t._v("通常运维人员可以独立解决此类问题")]),t._v("。")]),t._v(" "),r("p",[r("img",{attrs:{src:a(319),alt:"image-20190722224029397"}})]),t._v(" "),r("h3",{attrs:{id:"日志:-容器运行时产生的错误"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#日志:-容器运行时产生的错误","aria-hidden":"true"}},[t._v("#")]),t._v(" 日志: 容器运行时产生的错误")]),t._v(" "),r("p",[t._v("如下图所示,假设您已进入工作负载查看界面:")]),t._v(" "),r("p",[r("img",{attrs:{src:a(320),alt:"image-20190722225347491"}})]),t._v(" "),r("ul",[r("li",[t._v("点击其中的 "),r("em",[r("strong",[t._v("日志")])]),t._v(" 按钮")])]),t._v(" "),r("p",[t._v("可查看该容器的运行时日志,如下图所示:")]),t._v(" "),r("p",[r("img",{attrs:{src:a(321),alt:"image-20190722225454029"}})]),t._v(" "),r("p",[r("strong",[t._v("容器运行时问题定位及解决")])]),t._v(" "),r("p",[t._v("日志所指示出来的错误,可能有两类原因:")]),t._v(" "),r("ul",[r("li",[t._v("将其容器部署到 Kubernetes 时,参数配置填写错误")]),t._v(" "),r("li",[t._v("容器内应用程序自身的 BUG")])]),t._v(" "),r("p",[t._v("无论是上述何种原因,运维人员如果请开发人员介入,一起排查这里问题,效果会好很多。")]),t._v(" "),r("h3",{attrs:{id:"终端:-通过交互式命令,在容器内诊断问题"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#终端:-通过交互式命令,在容器内诊断问题","aria-hidden":"true"}},[t._v("#")]),t._v(" 终端: 通过交互式命令,在容器内诊断问题")]),t._v(" "),r("ul",[r("li",[r("p",[t._v("点击 "),r("em",[r("strong",[t._v("终端")])]),t._v(" 按钮")]),t._v(" "),r("p",[t._v("可进入该容器的交互式命令界面")])])]),t._v(" "),r("p",[r("img",{attrs:{src:a(322),alt:"image-20190722230511430"}})]),t._v(" "),r("p",[r("strong",[t._v("适用场景")])]),t._v(" "),r("p",[t._v("在交互式终端里,"),r("strong",[t._v("运维人员")]),t._v("可以:")]),t._v(" "),r("ul",[r("li",[t._v("通过 ping / curl 等命令,测试网络连通性,测试 Kubernetes 的服务 DNS 解析是否正确")]),t._v(" "),r("li",[t._v("通过 export 命令检查该容器的环境变量的设置是否正确")])]),t._v(" "),r("p",[r("strong",[t._v("开发人员")]),t._v(" 可以:")]),t._v(" "),r("ul",[r("li",[t._v("通过 ls / cat / vi 等命令,查看该容器是否包含了最新的代码变更")]),t._v(" "),r("li",[t._v("通过 vi 等命令,临时对容器中的配置文件进行修改,并在验证这种修改有效之后,才将其正式更新到代码库")])])])},[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/12.4ab5dbba.js b/docs/assets/js/12.8600e39b.js similarity index 76% rename from docs/assets/js/12.4ab5dbba.js rename to docs/assets/js/12.8600e39b.js index 3c1d40f..d764b3b 100644 --- a/docs/assets/js/12.4ab5dbba.js +++ b/docs/assets/js/12.8600e39b.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{228:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105606081.bc471512.png"},229:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105644937.968b1660.png"},230:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105722999.5b6c9bae.png"},231:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105748435.1cb3ad0d.png"},232:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105809872.61add376.png"},233:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105830318.43414c56.png"},393: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(228),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(229),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(230),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(231),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(232),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(233),alt:"image-20190723105830318"}})])])},[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{213:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105606081.bc471512.png"},214:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105644937.968b1660.png"},215:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105722999.5b6c9bae.png"},216:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105748435.1cb3ad0d.png"},217:function(t,a,e){t.exports=e.p+"assets/img/image-20190723105809872.61add376.png"},218: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(213),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(214),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(215),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(216),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(217),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(218),alt:"image-20190723105830318"}})])])},[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/13.3030c025.js b/docs/assets/js/13.8a0b664f.js similarity index 99% rename from docs/assets/js/13.3030c025.js rename to docs/assets/js/13.8a0b664f.js index f52698b..58f415f 100644 --- a/docs/assets/js/13.3030c025.js +++ b/docs/assets/js/13.8a0b664f.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{301:function(a,t,s){a.exports=s.p+"assets/img/image-20190721085144545.25f25dda.png"},302:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090118542.46c31055.png"},303:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090753742.28d009f3.png"},304:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090840925.a5231632.png"},305:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090935511.80fb3864.png"},306:function(a,t,s){a.exports=s.p+"assets/img/image-20190721091005130.330e9f1d.png"},372:function(a,t,s){"use strict";s.r(t);var e=s(0),r=Object(e.a)({},function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"多环境"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#多环境","aria-hidden":"true"}},[a._v("#")]),a._v(" 多环境")]),a._v(" "),e("p",[a._v("在实际开发项目的过程中,我们必然会碰到如下场景:")]),a._v(" "),e("ol",[e("li",[a._v("创建一个开发环境,并在其中完成应用部署")]),a._v(" "),e("li",[a._v("创建一个测试环境,再次完成应用部署")]),a._v(" "),e("li",[a._v("创建一个准上线环境,再次完成应用部署")]),a._v(" "),e("li",[a._v("创建一个生产环境,再次完成应用部署")])]),a._v(" "),e("p",[a._v("当我们的微服务系统较为复杂时,一个环境中可能需要部署许多(几十个甚至更多)的微服务部署单元,这个时候,重复在多套环境中执行部署任务就会变得容易出错。")]),a._v(" "),e("p",[a._v("Kuboard 针对这种场景,提供了导出配置、导入配置的功能,以便运维人员可以轻易的复制多套部署环境。")]),a._v(" "),e("h2",{attrs:{id:"导出配置"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#导出配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 导出配置")]),a._v(" "),e("h3",{attrs:{id:"前提"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[a._v("#")]),a._v(" 前提")]),a._v(" "),e("p",[a._v("必须满足如下条件:")]),a._v(" "),e("ul",[e("li",[a._v("您已经通过 kuboard 的 "),e("a",{attrs:{href:"/guide/namespace/workload"}},[a._v("创建工作负载")]),a._v(" 功能完成了微服务的部署。")])]),a._v(" "),e("blockquote",[e("p",[a._v("部署微服务过程中,您还可能用到 kuboard 的配置编辑功能、Secrets 编辑功能 等。")])]),a._v(" "),e("p",[a._v("假设您已完成微服务部署,并已进入 namespace 界面,如下图所示:")]),a._v(" "),e("p",[e("img",{attrs:{src:s(301),alt:"image-20190721085144545"}})]),a._v(" "),e("h3",{attrs:{id:"操作步骤"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#操作步骤","aria-hidden":"true"}},[a._v("#")]),a._v(" 操作步骤")]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("导出工作负载")])]),a._v(" "),e("ul",[e("li",[a._v("选择要导出的分层")]),a._v(" "),e("li",[a._v("点击 "),e("em",[e("strong",[a._v("刷新")])])]),a._v(" "),e("li",[a._v("选择要导出的工作负载")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(302),alt:"image-20190721090118542"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])]),a._v(" "),e("p",[a._v("选择要导出的配置(configMap)信息")])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(303),alt:"image-20190721090753742"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])]),a._v(" "),e("p",[a._v("选择要导出的 Secrets")])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(304),alt:"image-20190721090840925"}})]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(305),alt:"image-20190721090935511"}})]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("确定")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(306),alt:"image-20190721091005130"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("查看已导出文件")]),a._v(" "),e("p",[a._v("导出文件的命名格式为 kuboard_namespace_date_time.yaml,例如:")]),a._v(" "),e("p",[a._v("kuboard_example_2019_07_21_09_09_47.yaml")]),a._v(" "),e("p",[a._v("导出文件的内容如下所示:")]),a._v(" "),e("div",{staticClass:"language-yaml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yaml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("---")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" apps/v1\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" StatefulSet\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("metadata")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("namespace")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" example\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("annotations")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/workload")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/displayName")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" 服务注册\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/service")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" ClusterIP\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/ingress")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'true'")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("labels")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/layer")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("spec")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("selector")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("matchLabels")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/layer")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("template")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("metadata")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("...")]),a._v("\n")])])])])]),a._v(" "),e("blockquote",[e("p",[a._v("该文件可以通过 kubectl apply -f 命令直接执行,但是建议使用 kuboard 进行导入,以便在导入时在线编辑在特定于新环境的配置信息。")])]),a._v(" "),e("h2",{attrs:{id:"导入配置"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#导入配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 导入配置")]),a._v(" "),e("h3",{attrs:{id:"前提-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#前提-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 前提")]),a._v(" "),e("p",[a._v("您已经通过 kuboard 导出了配置文件,或者从别处获取到 kuboard 导出的配置文件")]),a._v(" "),e("h3",{attrs:{id:"操作步骤-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#操作步骤-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 操作步骤")]),a._v(" "),e("p",[a._v("请参考 "),e("a",{attrs:{href:"/guide/example/import"}},[a._v("导入 example 微服务")])])])},[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{301:function(a,t,s){a.exports=s.p+"assets/img/image-20190721085144545.25f25dda.png"},302:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090118542.46c31055.png"},303:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090753742.28d009f3.png"},304:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090840925.a5231632.png"},305:function(a,t,s){a.exports=s.p+"assets/img/image-20190721090935511.80fb3864.png"},306:function(a,t,s){a.exports=s.p+"assets/img/image-20190721091005130.330e9f1d.png"},369:function(a,t,s){"use strict";s.r(t);var e=s(0),r=Object(e.a)({},function(){var a=this,t=a.$createElement,e=a._self._c||t;return e("ContentSlotsDistributor",{attrs:{"slot-key":a.$parent.slotKey}},[e("h1",{attrs:{id:"多环境"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#多环境","aria-hidden":"true"}},[a._v("#")]),a._v(" 多环境")]),a._v(" "),e("p",[a._v("在实际开发项目的过程中,我们必然会碰到如下场景:")]),a._v(" "),e("ol",[e("li",[a._v("创建一个开发环境,并在其中完成应用部署")]),a._v(" "),e("li",[a._v("创建一个测试环境,再次完成应用部署")]),a._v(" "),e("li",[a._v("创建一个准上线环境,再次完成应用部署")]),a._v(" "),e("li",[a._v("创建一个生产环境,再次完成应用部署")])]),a._v(" "),e("p",[a._v("当我们的微服务系统较为复杂时,一个环境中可能需要部署许多(几十个甚至更多)的微服务部署单元,这个时候,重复在多套环境中执行部署任务就会变得容易出错。")]),a._v(" "),e("p",[a._v("Kuboard 针对这种场景,提供了导出配置、导入配置的功能,以便运维人员可以轻易的复制多套部署环境。")]),a._v(" "),e("h2",{attrs:{id:"导出配置"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#导出配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 导出配置")]),a._v(" "),e("h3",{attrs:{id:"前提"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#前提","aria-hidden":"true"}},[a._v("#")]),a._v(" 前提")]),a._v(" "),e("p",[a._v("必须满足如下条件:")]),a._v(" "),e("ul",[e("li",[a._v("您已经通过 kuboard 的 "),e("a",{attrs:{href:"/guide/namespace/workload"}},[a._v("创建工作负载")]),a._v(" 功能完成了微服务的部署。")])]),a._v(" "),e("blockquote",[e("p",[a._v("部署微服务过程中,您还可能用到 kuboard 的配置编辑功能、Secrets 编辑功能 等。")])]),a._v(" "),e("p",[a._v("假设您已完成微服务部署,并已进入 namespace 界面,如下图所示:")]),a._v(" "),e("p",[e("img",{attrs:{src:s(301),alt:"image-20190721085144545"}})]),a._v(" "),e("h3",{attrs:{id:"操作步骤"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#操作步骤","aria-hidden":"true"}},[a._v("#")]),a._v(" 操作步骤")]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("导出工作负载")])]),a._v(" "),e("ul",[e("li",[a._v("选择要导出的分层")]),a._v(" "),e("li",[a._v("点击 "),e("em",[e("strong",[a._v("刷新")])])]),a._v(" "),e("li",[a._v("选择要导出的工作负载")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(302),alt:"image-20190721090118542"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])]),a._v(" "),e("p",[a._v("选择要导出的配置(configMap)信息")])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(303),alt:"image-20190721090753742"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])]),a._v(" "),e("p",[a._v("选择要导出的 Secrets")])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(304),alt:"image-20190721090840925"}})]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("下一步")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(305),alt:"image-20190721090935511"}})]),a._v(" "),e("ul",[e("li",[a._v("点击 "),e("em",[e("strong",[a._v("确定")])])])]),a._v(" "),e("p",[e("img",{attrs:{src:s(306),alt:"image-20190721091005130"}})]),a._v(" "),e("ul",[e("li",[e("p",[a._v("查看已导出文件")]),a._v(" "),e("p",[a._v("导出文件的命名格式为 kuboard_namespace_date_time.yaml,例如:")]),a._v(" "),e("p",[a._v("kuboard_example_2019_07_21_09_09_47.yaml")]),a._v(" "),e("p",[a._v("导出文件的内容如下所示:")]),a._v(" "),e("div",{staticClass:"language-yaml extra-class"},[e("pre",{pre:!0,attrs:{class:"language-yaml"}},[e("code",[e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("---")]),a._v("\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("apiVersion")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" apps/v1\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("kind")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" StatefulSet\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("metadata")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("namespace")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" example\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("annotations")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/workload")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/displayName")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" 服务注册\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/service")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" ClusterIP\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/ingress")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" "),e("span",{pre:!0,attrs:{class:"token string"}},[a._v("'true'")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("labels")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/layer")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n"),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("spec")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("selector")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("matchLabels")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/layer")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("k8s.eip.work/name")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v(" cloud"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("-")]),a._v("eureka\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("template")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token key atrule"}},[a._v("metadata")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v(":")]),a._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[a._v("...")]),a._v("\n")])])])])]),a._v(" "),e("blockquote",[e("p",[a._v("该文件可以通过 kubectl apply -f 命令直接执行,但是建议使用 kuboard 进行导入,以便在导入时在线编辑在特定于新环境的配置信息。")])]),a._v(" "),e("h2",{attrs:{id:"导入配置"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#导入配置","aria-hidden":"true"}},[a._v("#")]),a._v(" 导入配置")]),a._v(" "),e("h3",{attrs:{id:"前提-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#前提-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 前提")]),a._v(" "),e("p",[a._v("您已经通过 kuboard 导出了配置文件,或者从别处获取到 kuboard 导出的配置文件")]),a._v(" "),e("h3",{attrs:{id:"操作步骤-2"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#操作步骤-2","aria-hidden":"true"}},[a._v("#")]),a._v(" 操作步骤")]),a._v(" "),e("p",[a._v("请参考 "),e("a",{attrs:{href:"/guide/example/import"}},[a._v("导入 example 微服务")])])])},[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/15.6073fed7.js b/docs/assets/js/15.04f2597a.js similarity index 98% rename from docs/assets/js/15.6073fed7.js rename to docs/assets/js/15.04f2597a.js index ab06b19..0efdb32 100644 --- a/docs/assets/js/15.6073fed7.js +++ b/docs/assets/js/15.04f2597a.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{111:function(t,a,v){t.exports=v.p+"assets/img/image-20190721110355464.25f25dda.png"},311:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113708689.f9b42a11.png"},312:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113810235.59d55672.png"},313:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114112644.526de44c.png"},314:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114211751.e1a07115.png"},394: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(311),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(312),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(313),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(314),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"},311:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113708689.f9b42a11.png"},312:function(t,a,v){t.exports=v.p+"assets/img/image-20190721113810235.59d55672.png"},313:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114112644.526de44c.png"},314:function(t,a,v){t.exports=v.p+"assets/img/image-20190721114211751.e1a07115.png"},374: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(311),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(312),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(313),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(314),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/17.54330d0e.js b/docs/assets/js/17.54330d0e.js new file mode 100644 index 0000000..675cc1f --- /dev/null +++ b/docs/assets/js/17.54330d0e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{112:function(s,t,e){s.exports=e.p+"assets/img/image-20190715085036593.55559549.png"},113:function(s,t,e){s.exports=e.p+"assets/img/image2019-07-15_09.01.21.0e0d34f2.png"},337:function(s,t,e){s.exports=e.p+"assets/img/image-20190726214032585.f5bc62e4.png"},338:function(s,t,e){s.exports=e.p+"assets/img/image-20190715101542756.5934c00e.png"},339:function(s,t,e){s.exports=e.p+"assets/img/image-20190715193838012.eca23618.png"},357:function(s,t,e){"use strict";e.r(t);var a=e(0),r=Object(a.a)({},function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"安装-kubernetes-单master节点"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#安装-kubernetes-单master节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 Kubernetes 单Master节点")]),s._v(" "),a("p",[s._v("对于 Kubernetes 初学者,推荐在阿里云采购如下配置:")]),s._v(" "),a("ul",[a("li",[s._v("3台 2核4G 的ECS(突发性能实例 t5 ecs.t5-c1m2.large或同等配置,单台约 0.4元/小时,停机时不收费)")]),s._v(" "),a("li",[s._v("Cent OS 7.6")])]),s._v(" "),a("p",[a("a",{attrs:{href:"https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg",target:"_blank",rel:"noopener noreferrer"}},[s._v("领取阿里云最高2000元红包"),a("OutboundLink")],1)]),s._v(" "),a("p",[s._v("Kuboard 的 Live Demo 环境使用的是如下拓扑结构,本文档描述了如何在完成该 demo 环境的搭建。")]),s._v(" "),a("p",[s._v("完成安装后,对应的软件版本为:")]),s._v(" "),a("ul",[a("li",[s._v("Kubernetes v1.15.0")]),s._v(" "),a("li",[s._v("Docker 18.09.7")])]),s._v(" "),a("p",[a("img",{attrs:{src:e(337),alt:"image-20190726214032585"}})]),s._v(" "),a("h2",{attrs:{id:"制作标准机镜像"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#制作标准机镜像","aria-hidden":"true"}},[s._v("#")]),s._v(" 制作标准机镜像")]),s._v(" "),a("p",[s._v("通过使用标准机镜像,可以")]),s._v(" "),a("ul",[a("li",[a("strong",[s._v("避免重复执行对测试机安装必要软件的过程")])]),s._v(" "),a("li",[a("strong",[s._v("以一种相对标准化的过程管理测试机的维护")])])]),s._v(" "),a("p",[s._v("标准机镜像中预装了如下内容:")]),s._v(" "),a("ul",[a("li",[s._v("docker")]),s._v(" "),a("li",[s._v("nfs-utils")]),s._v(" "),a("li",[s._v("kubernetes images")])]),s._v(" "),a("div",{staticClass:"tip custom-block"},[a("ul",[a("li",[s._v("您也可以不制作标准机镜像,而是在三台机器上都执行 "),a("em",[a("strong",[s._v("制作标准机镜像")])]),s._v(" 中的所有操作步骤")])])]),s._v(" "),a("p",[a("strong",[s._v("标准机镜像的制作过程描述如下:")])]),s._v(" "),a("h3",{attrs:{id:"安装docker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#安装docker","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装docker")]),s._v(" "),a("p",[a("strong",[s._v("卸载旧版本")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum remove docker "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-client-latest "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-common "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-latest-logrotate "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-logrotate "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-selinux "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine-selinux "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("\n\tdocker-engine\n")])])]),a("p",[a("strong",[s._v("下载依赖包及安装包")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("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"),a("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"),a("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")])])]),a("p",[a("strong",[s._v("安装")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),a("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"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),a("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"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y docker-ce-18.09.7-3.el7.x86_64.rpm\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" docker\n")])])]),a("p",[a("strong",[s._v("启动 docker 服务")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" systemctl start docker\n")])])]),a("p",[a("strong",[s._v("检查 docker 版本")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\ndocker version\n")])])]),a("blockquote",[a("p",[a("strong",[s._v("参考文档")])]),s._v(" "),a("p",[s._v("https://docs.docker.com/install/linux/docker-ce/centos/")]),s._v(" "),a("p",[s._v("https://docs.docker.com/install/linux/linux-postinstall/")])]),s._v(" "),a("h3",{attrs:{id:"安装-nfs-utils"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#安装-nfs-utils","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 nfs-utils")]),s._v(" "),a("p",[a("strong",[s._v("执行安装命令")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sudo")]),s._v(" yum "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" -y nfs-utils\n")])])]),a("p",[s._v("必须先安装 nfs-utils 才能挂载 nfs 网络存储")]),s._v(" "),a("h3",{attrs:{id:"k8s基本配置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#k8s基本配置","aria-hidden":"true"}},[s._v("#")]),s._v(" K8S基本配置")]),s._v(" "),a("p",[a("strong",[s._v("配置K8S的yum源")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<<")]),s._v("EOF "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/yum.repos.d/kubernetes.repo\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("kubernetes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("name")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("Kubernetes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("baseurl")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("enabled")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgcheck")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("repo_gpgcheck")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("gpgkey")]),a("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")])])]),a("p",[a("strong",[s._v("关闭 防火墙、SeLinux、swap")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\nsystemctl stop firewalld\nsystemctl disable firewalld\n\nsetenforce "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sed")]),s._v(" -i "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"s/SELINUX=enforcing/SELINUX=disabled/g"')]),s._v(" /etc/selinux/config\n\nswapoff -a\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" /etc/fstab /etc/fstab_bak\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" /etc/fstab_bak "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("grep")]),s._v(" -v swap "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/fstab\n")])])]),a("p",[a("strong",[s._v("修改 /etc/sysctl.conf")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/sysctl.conf\n")])])]),a("p",[s._v("向其中添加")]),s._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("net.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\nnet.bridge.bridge-nf-call-iptables = 1\n")])])]),a("p",[s._v("如下图所示")]),s._v(" "),a("p",[a("img",{attrs:{src:e(112),alt:"image-20190715085036593",title:":size=600x445"}})]),s._v(" "),a("p",[s._v("执行命令以应用")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\nsysctl -p\n")])])]),a("p",[a("strong",[s._v("安装kubelet、kubeadm、kubectl")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\nyum "),a("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")])])]),a("p",[a("strong",[s._v("修改docker Cgroup Driver为systemd")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /usr/lib/systemd/system/docker.service\n")])])]),a("p",[s._v("向其中添加")]),s._v(" "),a("div",{staticClass:"language- extra-class"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("--exec-opt native.cgroupdriver=systemd\n")])])]),a("p",[s._v("如下图所示")]),s._v(" "),a("p",[a("img",{attrs:{src:e(113),alt:"屏幕快照 2019-07-15 09.01.21",title:":size=1000x326"}})]),s._v(" "),a("p",[s._v("重启 docker")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\nsystemctl daemon-reload\nsystemctl restart docker\n")])])]),a("p",[a("strong",[s._v("启动kubelet")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\nsystemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" kubelet "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&&")]),s._v(" systemctl start kubelet\n")])])]),a("p",[a("strong",[s._v("加载 kubernetes 镜像")])]),s._v(" "),a("p",[s._v("由于k8s服务相关镜像在国外镜像源,国内无法访问")]),s._v(" "),a("p",[s._v("执行以下命令添加docker k8s国内镜像源")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("curl")]),s._v(" -sSL https://get.daocloud.io/daotools/set_mirror.sh "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" -s http://f1361db2.m.daocloud.io\n\nsystemctl restart docker\n")])])]),a("p",[a("strong",[s._v("拉取k8s相关镜像")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\ndocker 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")])])]),a("p",[a("strong",[s._v("更改镜像名为k8s官网镜像")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在 master 节点和 worker 节点都要执行")]),s._v("\ndocker 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")])])]),a("p",[a("strong",[s._v("制作镜像")])]),s._v(" "),a("p",[s._v("请参考阿里云基于ECS "),a("a",{attrs:{href:"https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV",target:"_blank",rel:"noopener noreferrer"}},[s._v("制作虚拟机镜像"),a("OutboundLink")],1),s._v(" 的文档")]),s._v(" "),a("h2",{attrs:{id:"初始化-master-节点"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#初始化-master-节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化 master 节点")]),s._v(" "),a("div",{staticClass:"tip custom-block"},[a("p",[s._v("以 root 身份在 demo-master-a-1 机器上执行")])]),s._v(" "),a("p",[a("strong",[s._v("配置 apiserver.demo 的域名")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x.x.x.x apiserver.demo"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /etc/hosts\n")])])]),a("div",{staticClass:"warning custom-block"},[a("p",[s._v("请替换其中的 x.x.x.x 为您的 demo-master-a-1 的实际 ip 地址")])]),s._v(" "),a("p",[a("strong",[s._v("创建 ./kubeadm-config.yaml")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" ./kubeadm-config.yaml\n")])])]),a("div",{staticClass:"language-yaml extra-class"},[a("pre",{pre:!0,attrs:{class:"language-yaml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("apiVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" kubeadm.k8s.io/v1beta1\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("kind")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" ClusterConfiguration\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("kubernetesVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" v1.15.0\n"),a("span",{pre:!0,attrs:{class:"token key atrule"}},[s._v("controlPlaneEndpoint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(":")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"apiserver.demo:6443"')]),s._v("\n\n")])])]),a("p",[a("strong",[s._v("初始化 apiserver")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\nkubeadm init --config"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("kubeadm-config.yaml --upload-certs\n")])])]),a("p",[s._v("执行结果如下图所示:")]),s._v(" "),a("p",[a("img",{attrs:{src:e(338),alt:"image-20190715101542756",title:":size=800x388"}})]),s._v(" "),a("p",[a("strong",[s._v("初始化 root 用户的 kubectl 配置")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("rm")]),s._v(" -rf /root/.kube/\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" /root/.kube/\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" -i /etc/kubernetes/admin.conf /root/.kube/config\n")])])]),a("p",[a("strong",[s._v("安装 calico")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\nkubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml\n")])])]),a("blockquote",[a("p",[s._v("安装calico, 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/")])]),s._v(" "),a("p",[a("strong",[s._v("等待calico安装就绪:")])]),s._v(" "),a("p",[s._v("执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("watch")]),s._v(" kubectl get pod -n kube-system\n")])])]),a("p",[a("strong",[s._v("检查 master 初始化结果")])]),s._v(" "),a("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\nkubectl get nodes\n")])])]),a("h2",{attrs:{id:"初始化-worker节点"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#初始化-worker节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化 worker节点")]),s._v(" "),a("h3",{attrs:{id:"获得-join命令参数"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#获得-join命令参数","aria-hidden":"true"}},[s._v("#")]),s._v(" 获得 join命令参数")]),s._v(" "),a("p",[a("strong",[s._v("在 master 节点 demo-master-a-1 节点执行")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\nkubeadm token create --print-join-command\n")])])]),a("p",[s._v("可获取kubeadm join 命令及参数,如下所示")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# kubeadm token create 命令的输出")]),s._v("\nkubeadm "),a("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")])])]),a("h3",{attrs:{id:"初始化worker"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#初始化worker","aria-hidden":"true"}},[s._v("#")]),s._v(" 初始化worker")]),s._v(" "),a("p",[a("strong",[s._v("针对所有的 worker 节点执行")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 worker 节点执行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("echo")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"x.x.x.x apiserver.demo"')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v(" /etc/hosts\nkubeadm "),a("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")])])]),a("div",{staticClass:"tip custom-block"},[a("ul",[a("li",[s._v("将 x.x.x.x 替换为 demo-master-a-1 的实际 ip")]),s._v(" "),a("li",[s._v("将 kubeadm join 命令后的参数替换为上一个步骤中实际从 demo-master-a-1 节点获得的参数")])])]),s._v(" "),a("h3",{attrs:{id:"检查初始化结果"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#检查初始化结果","aria-hidden":"true"}},[s._v("#")]),s._v(" 检查初始化结果")]),s._v(" "),a("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\nkubectl get nodes\n")])])]),a("p",[a("img",{attrs:{src:e(339),alt:"image-20190715193838012"}})]),s._v(" "),a("h2",{attrs:{id:"移除-worker-节点"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#移除-worker-节点","aria-hidden":"true"}},[s._v("#")]),s._v(" 移除 worker 节点")]),s._v(" "),a("div",{staticClass:"warning custom-block"},[a("p",[s._v("正常情况下,您无需移除 worker 节点,如果添加到集群出错,您可以移除 worker 节点,再重新尝试添加")])]),s._v(" "),a("p",[s._v("在准备移除的 worker 节点上执行")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 worker 节点执行")]),s._v("\nkubeadm reset\n")])])]),a("p",[s._v("在 master 节点 demo-master-a-1 上执行")]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\nkubectl delete node demo-worker-x-x\n")])])]),a("div",{staticClass:"tip custom-block"},[a("ul",[a("li",[s._v("将 demo-worker-x-x 替换为要移除的 worker 节点的名字")]),s._v(" "),a("li",[s._v("worker 节点的名字可以通过在节点 demo-master-a-1 上执行 kubectl get nodes 命令获得")])])]),s._v(" "),a("h2",{attrs:{id:"安装-ingress-controller"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#安装-ingress-controller","aria-hidden":"true"}},[s._v("#")]),s._v(" 安装 Ingress Controller")]),s._v(" "),a("blockquote",[a("p",[s._v("Ingress官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/")]),s._v(" "),a("p",[s._v("Ingress Controllers官网介绍:https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/")]),s._v(" "),a("p",[s._v("本文中使用如下部署方式:https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge")]),s._v(" "),a("p",[s._v("kubernetes支持多种Ingress Controllers,本文推荐使用 https://github.com/nginxinc/kubernetes-ingress")])]),s._v(" "),a("p",[a("strong",[s._v("在 demo-master-a-1 上执行")])]),s._v(" "),a("div",{staticClass:"language-sh extra-class"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 只在 master 节点执行")]),s._v("\nkubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml\n")])])]),a("p",[a("strong",[s._v("配置域名解析")])]),s._v(" "),a("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(" "),a("div",{staticClass:"tip custom-block"},[a("p",[s._v("由于需要申请域名,过程会比较繁琐,有如下两种替代方案:")]),s._v(" "),a("ul",[a("li",[s._v("在您的客户端机器(访问部署在K8S上的 web 应用的浏览器所在的机器)设置 hosts 配置;")]),s._v(" "),a("li",[s._v("暂时放弃域名的配置,临时使用 NodePort 或者 "),a("code",[s._v("kubectl port-forward")]),s._v(" 的方式访问部署在 K8S 上的 web 应用")])])]),s._v(" "),a("p",[a("strong",[s._v("验证配置")])]),s._v(" "),a("p",[s._v("在浏览器访问 a.demo.yourdomain.com,将得到 404 NotFound 错误页面")]),s._v(" "),a("h2",{attrs:{id:"下一步"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#下一步","aria-hidden":"true"}},[s._v("#")]),s._v(" 下一步")]),s._v(" "),a("p",[s._v("🎉 🎉 🎉")]),s._v(" "),a("p",[s._v("您已经完成了 Kubernetes 集群的安装,下一步请:")]),s._v(" "),a("p",[a("a",{attrs:{href:"/install/install-dashboard"}},[s._v("安装 Kuboard")])])])},[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/17.eb7afaf9.js b/docs/assets/js/17.eb7afaf9.js deleted file mode 100644 index 4696c0b..0000000 --- a/docs/assets/js/17.eb7afaf9.js +++ /dev/null @@ -1 +0,0 @@ -(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"},337:function(s,a,e){s.exports=e.p+"assets/img/image-20190726214032585.f5bc62e4.png"},338:function(s,a,e){s.exports=e.p+"assets/img/image-20190715101542756.5934c00e.png"},339:function(s,a,e){s.exports=e.p+"assets/img/image-20190715193838012.eca23618.png"},359: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(337),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("关闭 防火墙、SeLinux、swap")])]),s._v(" "),t("div",{staticClass:"language-bash extra-class"},[t("pre",{pre:!0,attrs:{class:"language-bash"}},[t("code",[s._v("systemctl stop firewalld\nsystemctl disable firewalld\n\nsetenforce "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("sed")]),s._v(" -i "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"s/SELINUX=enforcing/SELINUX=disabled/g"')]),s._v(" /etc/selinux/config\n\nswapoff -a\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" /etc/fstab /etc/fstab_bak\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("cat")]),s._v(" /etc/fstab_bak "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("|")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("grep")]),s._v(" -v swap "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" /etc/fstab\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",[s._v("执行命令以应用")]),s._v(" "),t("div",{staticClass:"language-sh extra-class"},[t("pre",{pre:!0,attrs:{class:"language-sh"}},[t("code",[s._v("sysctl -p\n")])])]),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(338),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(339),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.b4940cde.js b/docs/assets/js/18.392b3ea6.js similarity index 94% rename from docs/assets/js/18.b4940cde.js rename to docs/assets/js/18.392b3ea6.js index 42256f7..e549946 100644 --- a/docs/assets/js/18.b4940cde.js +++ b/docs/assets/js/18.392b3ea6.js @@ -1 +1 @@ -(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"},388: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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{325:function(a,t,s){a.exports=s.p+"assets/img/1563696697515.94512132.png"},326:function(a,t,s){a.exports=s.p+"assets/img/1563697667480.8c846298.png"},327:function(a,t,s){a.exports=s.p+"assets/img/1563698644736.d67b2e09.png"},328:function(a,t,s){a.exports=s.p+"assets/img/1563698714557.fa1eeb1c.png"},329:function(a,t,s){a.exports=s.p+"assets/img/1563698865448.2cbaf53a.png"},386: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(325),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(326),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(327),alt:"1563698644736"}})]),a._v(" "),e("p",[a._v("浏览器中访问 http://localhost:9080")]),a._v(" "),e("p",[e("img",{attrs:{src:s(328),alt:"1563698714557"}})]),a._v(" "),e("p",[a._v("将获取的 token 复制到浏览器中,访问成功")]),a._v(" "),e("p",[e("img",{attrs:{src:s(329),alt:"1563698865448"}})])])},[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/19.1b24b250.js b/docs/assets/js/19.456d7dcb.js similarity index 98% rename from docs/assets/js/19.1b24b250.js rename to docs/assets/js/19.456d7dcb.js index 18ee2a7..067fe2d 100644 --- a/docs/assets/js/19.1b24b250.js +++ b/docs/assets/js/19.456d7dcb.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-20190728145108904.8f9c0d1d.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"},380: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 +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{106: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-20190728145108904.8f9c0d1d.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"},380: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(106),alt:"Kuboard QQ 群"}})])])},[],!1,null,null,null);r.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/2.079e6b1e.js b/docs/assets/js/2.db1527d8.js similarity index 99% rename from docs/assets/js/2.079e6b1e.js rename to docs/assets/js/2.db1527d8.js index 206386f..0f2db67 100644 --- a/docs/assets/js/2.079e6b1e.js +++ b/docs/assets/js/2.db1527d8.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],Array(104).concat([function(t,e,n){"use strict";n.d(e,"d",function(){return r}),n.d(e,"a",function(){return s}),n.d(e,"i",function(){return o}),n.d(e,"f",function(){return u}),n.d(e,"g",function(){return c}),n.d(e,"h",function(){return l}),n.d(e,"b",function(){return f}),n.d(e,"e",function(){return h}),n.d(e,"k",function(){return p}),n.d(e,"l",function(){return d}),n.d(e,"c",function(){return v}),n.d(e,"j",function(){return g});const r=/#.*$/,i=/\.(md|html)$/,s=/\/$/,o=/^(https?:|mailto:|tel:)/;function a(t){return decodeURI(t).replace(r,"").replace(i,"")}function u(t){return o.test(t)}function c(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function f(t){if(u(t))return t;const e=t.match(r),n=e?e[0]:"",i=a(t);return s.test(i)?t:i+".html"+n}function h(t,e){const n=t.hash,i=function(t){const e=t.match(r);if(e)return e[0]}(e);return(!i||n===i)&&a(t.path)===a(e)}function p(t,e,n){if(u(e))return{type:"external",path:e};n&&(e=function(t,e,n){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return e+t;const i=e.split("/");n&&i[i.length-1]||i.pop();const s=t.replace(/^\//,"").split("/");for(let t=0;t({type:"auto",title:e.title,basePath:t.path,path:t.path+"#"+e.slug,children:e.children||[]}))}]}(t);const a=o.sidebar||s.sidebar;if(a){const{base:t,config:n}=function(t,e){if(Array.isArray(e))return{base:"/",config:e};for(const r in e)if(0===(n=t,/(\.html|\/)$/.test(n)?n:n+"/").indexOf(encodeURI(r)))return{base:r,config:e[r]};var n;return{}}(e,a);return n?n.map(e=>(function t(e,n,r,i=1){if("string"==typeof e)return p(n,e,r);if(Array.isArray(e))return Object.assign(p(n,e[0],r),{title:e[1]});{i>3&&console.error("[vuepress] detected a too deep nested sidebar group.");const s=e.children||[];return 0===s.length&&e.path?Object.assign(p(n,e.path,r),{title:e.title}):{type:"group",path:e.path,title:e.title,sidebarDepth:e.sidebarDepth,children:s.map(e=>t(e,n,r,i+1)),collapsable:!1!==e.collapsable}}})(e,i,t)):[]}return[]}function v(t){let e;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?e=t:e&&(e.children||(e.children=[])).push(t)}),t.filter(t=>2===t.level)}function g(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},function(t,e,n){var r=n(154)("wks"),i=n(155),s=n(33).Symbol,o="function"==typeof s;(t.exports=function(t){return r[t]||(r[t]=o&&s[t]||(o?s:i)("Symbol."+t))}).store=r},function(t,e){t.exports={}},,function(t,e,n){"use strict";var r=n(1),i=n(37)(3);r(r.P+r.F*!n(22)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},function(t,e){t.exports={}},function(t,e,n){var r=n(9).f,i=n(8),s=n(17)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,s)&&r(t,s,{configurable:!0,value:e})}},,,,function(t,e,n){"use strict";n(115),n(116),n(108),n(124);var r=n(104),i={props:{item:{required:!0}},computed:{link:function(){return Object(r.b)(this.item.link)},exact:function(){var t=this;return this.$site.locales?Object.keys(this.$site.locales).some(function(e){return e===t.link}):"/"===this.link}},methods:{isExternal:r.f,isMailto:r.g,isTel:r.h}},s=n(0),o=Object(s.a)(i,function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.isExternal(t.link)?n("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"}},[t._v("\n "+t._s(t.item.text)+"\n "),n("OutboundLink")],1):n("router-link",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact}},[t._v(t._s(t.item.text))])},[],!1,null,null,null);e.a=o.exports},function(t,e,n){for(var r=n(117),i=n(56),s=n(19),o=n(2),a=n(18),u=n(106),c=n(17),l=c("iterator"),f=c("toStringTag"),h=u.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(p),v=0;v=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?n:"values"==e?t[n]:[n,t[n]])},"values"),s.Arguments=s.Array,r("keys"),r("values"),r("entries")},function(t,e,n){var r=n(17)("unscopables"),i=Array.prototype;null==i[r]&&n(18)(i,r,{}),t.exports=function(t){i[r][t]=!0}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,n){"use strict";var r=n(61),i=n(1),s=n(19),o=n(18),a=n(106),u=n(121),c=n(110),l=n(122),f=n(17)("iterator"),h=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,n,d,v,g,m){u(n,e,d);var b,_,x,y=function(t){if(!h&&t in C)return C[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},k=e+" Iterator",L="values"==v,S=!1,C=t.prototype,$=C[f]||C["@@iterator"]||v&&C[v],w=$||y(v),O=v?L?y("entries"):w:void 0,T="Array"==e&&C.entries||$;if(T&&(x=l(T.call(new t)))!==Object.prototype&&x.next&&(c(x,k,!0),r||"function"==typeof x[f]||o(x,f,p)),L&&$&&"values"!==$.name&&(S=!0,w=function(){return $.call(this)}),r&&!m||!h&&!S&&C[f]||o(C,f,w),a[e]=w,a[k]=p,v)if(b={values:L?w:y("values"),keys:g?w:y("keys"),entries:O},m)for(_ in b)_ in C||s(C,_,b[_]);else i(i.P+i.F*(h||S),e,b);return b}},function(t,e,n){"use strict";var r=n(62),i=n(35),s=n(110),o={};n(18)(o,n(17)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(o,{next:i(1,n)}),s(t,e+" Iterator")}},function(t,e,n){var r=n(8),i=n(32),s=n(36)("IE_PROTO"),o=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),r(t,s)?t[s]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?o:null}},function(t,e,n){var r=n(1),i=n(21),s=n(5);t.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],o={};o[t]=e(n),r(r.S+r.F*s(function(){n(1)}),"Object",o)}},function(t,e,n){"use strict";n(125)("link",function(t){return function(e){return t(this,"a","href",e)}})},function(t,e,n){var r=n(1),i=n(5),s=n(7),o=/"/g,a=function(t,e,n,r){var i=String(s(t)),a="<"+e;return""!==n&&(a+=" "+n+'="'+String(r).replace(o,""")+'"'),a+">"+i+""};t.exports=function(t,e){var n={};n[t]=e(a),r(r.P+r.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",n)}},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e){var n={}.toString;t.exports=function(t){return n.call(t).slice(8,-1)}},function(t,e){var n=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:n)(t)}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,n){var r=n(183),i=n(131);t.exports=function(t){return r(i(t))}},function(t,e,n){var r=n(154)("keys"),i=n(155);t.exports=function(t){return r[t]||(r[t]=i(t))}},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},function(t,e,n){},,function(t,e,n){},,,,,,,function(t,e,n){"use strict";var r=n(6),i=n(23),s=n(70),o=n(71);n(72)("match",1,function(t,e,n,a){return[function(n){var r=t(this),i=null==n?void 0:n[e];return void 0!==i?i.call(n,r):new RegExp(n)[e](String(r))},function(t){var e=a(n,t,this);if(e.done)return e.value;var u=r(t),c=String(this);if(!u.global)return o(u,c);var l=u.unicode;u.lastIndex=0;for(var f,h=[],p=0;null!==(f=o(u,c));){var d=String(f[0]);h[p]=d,""===d&&(u.lastIndex=s(c,i(u.lastIndex),l)),p++}return 0===p?null:h}]})},function(t,e,n){"use strict";var r=n(176)(!0);n(151)(String,"String",function(t){this._t=String(t),this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=r(e,n),this._i+=t.length,{value:t,done:!1})})},function(t,e,n){"use strict";var r=n(152),i=n(58),s=n(177),o=n(57),a=n(109),u=n(178),c=n(157),l=n(187),f=n(105)("iterator"),h=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,n,d,v,g,m){u(n,e,d);var b,_,x,y=function(t){if(!h&&t in C)return C[t];switch(t){case"keys":case"values":return function(){return new n(this,t)}}return function(){return new n(this,t)}},k=e+" Iterator",L="values"==v,S=!1,C=t.prototype,$=C[f]||C["@@iterator"]||v&&C[v],w=$||y(v),O=v?L?y("entries"):w:void 0,T="Array"==e&&C.entries||$;if(T&&(x=l(T.call(new t)))!==Object.prototype&&x.next&&(c(x,k,!0),r||"function"==typeof x[f]||o(x,f,p)),L&&$&&"values"!==$.name&&(S=!0,w=function(){return $.call(this)}),r&&!m||!h&&!S&&C[f]||o(C,f,w),a[e]=w,a[k]=p,v)if(b={values:L?w:y("values"),keys:g?w:y("keys"),entries:O},m)for(_ in b)_ in C||s(C,_,b[_]);else i(i.P+i.F*(h||S),e,b);return b}},function(t,e){t.exports=!0},function(t,e,n){var r=n(130),i=Math.min;t.exports=function(t){return t>0?i(r(t),9007199254740991):0}},function(t,e,n){var r=n(31),i=n(33),s=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return s[t]||(s[t]=void 0!==e?e:{})})("versions",[]).push({version:r.version,mode:n(152)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e){var n=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++n+r).toString(36))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,n){var r=n(34).f,i=n(60),s=n(105)("toStringTag");t.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,s)&&r(t,s,{configurable:!0,value:e})}},function(t,e,n){var r=n(131);t.exports=function(t){return Object(r(t))}},function(t,e,n){var r=n(129),i=n(105)("toStringTag"),s="Arguments"==r(function(){return arguments}());t.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?n:s?r(e):"Object"==(o=r(e))&&"function"==typeof e.callee?"Arguments":o}},,function(t,e,n){"use strict";n.r(e);n(108);var r=n(104),i={name:"SidebarGroup",props:["item","open","collapsable","depth"],components:{DropdownTransition:n(162).a},beforeCreate:function(){this.$options.components.SidebarLinks=n(161).default},methods:{isActive:r.e}},s=(n(206),n(0)),o=Object(s.a)(i,function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?n("router-link",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):n("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[n("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?n("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),n("DropdownTransition",[t.open||!t.collapsable?n("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,sidebarDepth:t.item.sidebarDepth,depth:t.depth+1}}):t._e()],1)],1)},[],!1,null,null,null).exports;n(64);function a(t,e,n,r){return t("router-link",{props:{to:e,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}},n)}function u(t,e,n,i,s){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:1;return!e||o>s?null:t("ul",{class:"sidebar-sub-headers"},e.map(function(e){var c=Object(r.e)(i,n+"#"+e.slug);return t("li",{class:"sidebar-sub-header"},[a(t,n+"#"+e.slug,e.title,c),u(t,e.children,n,i,s,o+1)])}))}var c={functional:!0,props:["item","sidebarDepth"],render:function(t,e){var n=e.parent,i=n.$page,s=(n.$site,n.$route),o=n.$themeConfig,c=n.$themeLocaleConfig,l=e.props,f=l.item,h=l.sidebarDepth,p=Object(r.e)(s,f.path),d="auto"===f.type?p||f.children.some(function(t){return Object(r.e)(s,f.basePath+"#"+t.slug)}):p,v="external"===f.type?function(t,e,n){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[n,t("OutboundLink")])}(t,f.path,f.title||f.path):a(t,f.path,f.title||f.path,d),g=i.frontmatter.sidebarDepth||h||c.sidebarDepth||o.sidebarDepth,m=null==g?1:g,b=c.displayAllHeaders||o.displayAllHeaders;return"auto"===f.type?[v,u(t,f.children,f.basePath,s,m)]:(d||b)&&f.headers&&!r.d.test(f.path)?[v,u(t,Object(r.c)(f.headers),f.path,s,m)]:v}};n(207);var l={name:"SidebarLinks",components:{SidebarGroup:o,SidebarLink:Object(s.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth"],data:function(){return{openGroupIndex:0}},created:function(){this.refreshIndex()},watch:{$route:function(){this.refreshIndex()}},methods:{refreshIndex:function(){var t=function(t,e){for(var n=0;n-1&&(this.openGroupIndex=t)},toggleGroup:function(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive:function(t){return Object(r.e)(this.$route,t.regularPath)}}},f=Object(s.a)(l,function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.items.length?n("ul",{staticClass:"sidebar-links"},t._l(t.items,function(e,r){return n("li",{key:r},["group"===e.type?n("SidebarGroup",{attrs:{item:e,open:r===t.openGroupIndex,collapsable:e.collapsable||e.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(r)}}}):n("SidebarLink",{attrs:{sidebarDepth:t.sidebarDepth,item:e}})],1)}),0):t._e()},[],!1,null,null,null);e.default=f.exports},function(t,e,n){"use strict";var r={name:"DropdownTransition",methods:{setHeight:function(t){t.style.height=t.scrollHeight+"px"},unsetHeight:function(t){t.style.height=""}}},i=(n(201),n(0)),s=Object(i.a)(r,function(){var t=this.$createElement;return(this._self._c||t)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)},[],!1,null,null,null);e.a=s.exports},function(t,e,n){"use strict";var r=n(126);n.n(r).a},function(t,e,n){"use strict";n(67)("trim",function(t){return function(){return t(this,3)}})},function(t,e,n){"use strict";var r=n(127);n.n(r).a},function(t,e,n){"use strict";var r=n(128);n.n(r).a},function(t,e,n){var r=n(2),i=n(65),s=n(9).f,o=n(66).f,a=n(168),u=n(73),c=r.RegExp,l=c,f=c.prototype,h=/a/g,p=/a/g,d=new c(h)!==h;if(n(3)&&(!d||n(5)(function(){return p[n(17)("match")]=!1,c(h)!=h||c(p)==p||"/a/i"!=c(h,"i")}))){c=function(t,e){var n=this instanceof c,r=a(t),s=void 0===e;return!n&&r&&t.constructor===c&&s?t:i(d?new l(r&&!s?t.source:t,e):l((r=t instanceof c)?t.source:t,r&&s?u.call(t):e),n?this:f,c)};for(var v=function(t){t in c||s(c,t,{configurable:!0,get:function(){return l[t]},set:function(e){l[t]=e}})},g=o(l),m=0;g.length>m;)v(g[m++]);f.constructor=c,c.prototype=f,n(19)(r,"RegExp",c)}n(169)("RegExp")},function(t,e,n){var r=n(4),i=n(10),s=n(17)("match");t.exports=function(t){var e;return r(t)&&(void 0!==(e=t[s])?!!e:"RegExp"==i(t))}},function(t,e,n){"use strict";var r=n(2),i=n(9),s=n(3),o=n(17)("species");t.exports=function(t){var e=r[t];s&&e&&!e[o]&&i.f(e,o,{configurable:!0,get:function(){return this}})}},function(t,e,n){t.exports=n(171)},function(t,e,n){n(172),t.exports=n(31).Array.isArray},function(t,e,n){var r=n(58);r(r.S,"Array",{isArray:n(173)})},function(t,e,n){var r=n(129);t.exports=Array.isArray||function(t){return"Array"==r(t)}},function(t,e,n){t.exports=n(175)},function(t,e,n){n(150),n(188),t.exports=n(31).Array.from},function(t,e,n){var r=n(130),i=n(131);t.exports=function(t){return function(e,n){var s,o,a=String(i(e)),u=r(n),c=a.length;return u<0||u>=c?t?"":void 0:(s=a.charCodeAt(u))<55296||s>56319||u+1===c||(o=a.charCodeAt(u+1))<56320||o>57343?t?a.charAt(u):s:t?a.slice(u,u+2):o-56320+(s-55296<<10)+65536}}},function(t,e,n){t.exports=n(57)},function(t,e,n){"use strict";var r=n(179),i=n(63),s=n(157),o={};n(57)(o,n(105)("iterator"),function(){return this}),t.exports=function(t,e,n){t.prototype=r(o,{next:i(1,n)}),s(t,e+" Iterator")}},function(t,e,n){var r=n(59),i=n(180),s=n(156),o=n(133)("IE_PROTO"),a=function(){},u=function(){var t,e=n(69)("iframe"),r=s.length;for(e.style.display="none",n(186).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write(" + diff --git a/docs/guide/cluster/namespace.html b/docs/guide/cluster/namespace.html index 13fd977..7522b10 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 351f8da..cbd4d37 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 1b6062a..6bb8ab5 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 1faabcd..5a23a2b 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 f7bb068..b8ba76d 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 f0eb20e..21f21be 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 a6cb979..1209223 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 2744ed5..b1a9483 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 7c8fa24..ffcbc66 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 1bd273f..9c3a3d1 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 4795584..3fb048b 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 aa8b393..9650d86 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 af3e792..422407f 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 f3f4603..aeb5c8d 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 3280763..65ec15d 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 431d234..9f19ad8 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 43e2ccd..c7903a1 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 0a5a215..9f17de5 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 f668bf0..fa93cc7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -7,7 +7,7 @@ - + @@ -18,6 +18,6 @@ 开始使用 →

降低 Kubernetes 门槛

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

直观显示微服务架构

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

上下文关联监控

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

- + diff --git a/docs/install/index.html b/docs/install/index.html index ec0b731..ebe3c97 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 289122b..28b1f84 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 8e57d65..aaee17c 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 copy.html b/docs/install/install-dashboard copy.html new file mode 100644 index 0000000..73cebca --- /dev/null +++ b/docs/install/install-dashboard copy.html @@ -0,0 +1,19 @@ + + + + + + 安装 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

下一步

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 b78e665..4199ed2 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 dc72b8d..aa349d8 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 7dd904b..792d756 100644 --- a/docs/install/install-dashboard-upgrade.html +++ b/docs/install/install-dashboard-upgrade.html @@ -7,7 +7,7 @@ - + @@ -16,6 +16,6 @@

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/install/install-dashboard.html b/docs/install/install-dashboard.html index a6754fa..1da4af2 100644 --- a/docs/install/install-dashboard.html +++ b/docs/install/install-dashboard.html @@ -7,13 +7,11 @@ - + -

安装 Kuboard

前提

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

如果没有 Kubernetes 集群:

碰到问题? 在线提问

Kuboard 兴趣群二维码

兼容性

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

安装

获取并修改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

下一步

等待 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 ef2365f..191491a 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 63c53f2..75b59a0 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 cbcfd9e..b1b6a25 100644 --- a/docs/micro-service/spring-cloud/cloud-eureka.html +++ b/docs/micro-service/spring-cloud/cloud-eureka.html @@ -7,7 +7,7 @@ - + @@ -16,6 +16,6 @@

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/micro-service/spring-cloud/index.html b/docs/micro-service/spring-cloud/index.html index 189c9fa..c96ff35 100644 --- a/docs/micro-service/spring-cloud/index.html +++ b/docs/micro-service/spring-cloud/index.html @@ -7,7 +7,7 @@ - + @@ -16,6 +16,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/overview/concepts.html b/docs/overview/concepts.html index c54185f..700ec56 100644 --- a/docs/overview/concepts.html +++ b/docs/overview/concepts.html @@ -7,7 +7,7 @@ - + @@ -20,6 +20,6 @@

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/overview/index.html b/docs/overview/index.html index 1ed8eca..9a43539 100644 --- a/docs/overview/index.html +++ b/docs/overview/index.html @@ -7,7 +7,7 @@ - + @@ -17,6 +17,6 @@ →

Copyright © 2019-present Huanqing Shao
- + diff --git a/docs/overview/why-kuboard.html b/docs/overview/why-kuboard.html index b69a543..f33ecde 100644 --- a/docs/overview/why-kuboard.html +++ b/docs/overview/why-kuboard.html @@ -6,8 +6,8 @@ 为什么选择 Kuboard | Kuboard - - + + @@ -17,7 +17,7 @@
  • Spring Boot 微服务,或 PHP / Python 实现的微服务
  • 持久层
    • MySQL 数据库等(开发及测试环境里,将MySQL部署于 Kubernetes 可以极大地降低环境维护的任务量)
  • 中间件层
    • 消息队列
    • 服务注册 Eureka / Zookeeper / Consul 等
  • 监控层 -
    • Prometheus + Grafana
    • Pinpooint 等
  • image-20190721154650916

    ​ 更为贴心的,当某一个工作负载存在部署方面的问题时, Kuboard 将以红色高亮出该工作负载,并配有合适的方式辅助用户定位错误信息。

    无需手写 Yaml

    ​ 学习 Kubernetes 时,需要花费许多的时间,在理解一个概念之后,模仿着写一个 yaml 文件,再使用 kubectl 应用该文件。

    ​ 使用 Kuboard 提供的工作负载编辑器,可以直观的完成应用的部署

    image-20190723105039358

    Kubernetes 日常运维人员

    ​ kubectl 的命令敲了许多遍了?yaml 文件越来越多,结构越来越复杂?又要部署一套测试环境,用来进行 UAT 测试?

    纯图形界面运维 Kubernetes

    在作者的日常运维工作中,除了 kubectl port-forward 还需要回到命令行界面以外,其他运维任务已经全部在 Kuboard 中轻松完成。更让人期待的是,Kuboard 作者还计划实现 port-forward 的功能,如此一来,作者日后就完全不再需要使用 kubectl 了。

    多环境复制

    为了能够是你的一套 yaml 文件适应多种部署(开发环境、测试环境、UAT环境、生产环境),您一定尝试过各种办法,例如 helmer chart, kustomize, kubectl apply -k directory_name,但是您本来可以更轻松地完成这样的任务的。

    Kuboard 提供了 工作负载导出和导入的功能,0 yaml文件,轻松复制多个环境。

    应用升级

    Kuboard 提供批量修改容器镜像版本的功能,轻松升级应用程序的版本。

    image-20190721000759925

    0 侵入性

    ​ Rancher 为了支持多云管理(MeSos,Docker Swarm,Kubernetes等),引入了一系列复杂的概念,又需要新增安装 Rancher Server、Rancher Agent等,本来学习 Kubernetes 已然不堪重负,Rancher再把多云整合到一起来,无疑又增加了学习和使用的复杂性。如果您只是打算使用 Kubernetes 的话,也许并不需要选择 Rancher 这样重量级的产品。Kuboard 仅仅依赖于原生 Kubernetes,可以运行在各种公有云、私有云上,您也可以自己基于物理机、vsphere、vmware等已经有的基础设施搭建 Kubernetes,轻松实现现有 Infrastructure 的容器化改造。

    更多资料

    Kuboard 官网 http://kuboard.cn

    Kuboard QQ 群

    Kuboard QQ 群

    Copyright © 2019-present Huanqing Shao
    - + diff --git a/docs/support/change-log.html b/docs/support/change-log.html index 2d1c182..9804a69 100644 --- a/docs/support/change-log.html +++ b/docs/support/change-log.html @@ -7,7 +7,7 @@ - + @@ -16,6 +16,6 @@

    Copyright © 2019-present Huanqing Shao
    - + diff --git a/docs/support/index.html b/docs/support/index.html index c87f42a..1377e56 100644 --- a/docs/support/index.html +++ b/docs/support/index.html @@ -7,7 +7,7 @@ - + @@ -16,6 +16,6 @@ →

    Copyright © 2019-present Huanqing Shao
    - + diff --git a/install/install-dashboard copy.md b/install/install-dashboard copy.md new file mode 100644 index 0000000..a7d7695 --- /dev/null +++ b/install/install-dashboard copy.md @@ -0,0 +1,193 @@ +# 安装 Kuboard + +## 前提 + +安装 Kuboard 时,假设您已经有一个 Kubernetes 集群 + +如果没有 Kubernetes 集群: + +* 初学者, 请参考 [安装 Kubernetes 单Master节点](install-k8s) +* 用于生产,请参考 [安装 Kubernetes 高可用](install-kubernetes) + +碰到问题? **在线提问** + +![Kuboard 兴趣群二维码](./../overview/README.assets/kuboard_qq.png) + +## 兼容性 + + +| 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文件** + +```bash +wget https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml +``` + +修改文件 Kuboard.yaml 中 Ingress 的 host 为 kuboard.yourclustername.yourdomain.com + +**执行安装** + +```bash +kubectl apply -f kuboard.yaml +``` + +## 获取 Token + +您可以获得管理员用户、只读用户的Token + +:::: tabs type:border-card + +::: tab 管理员用户 lazy + +**拥有的权限** + +* 此Token拥有 ClusterAdmin 的权限,可以执行所有操作 + +**执行命令** + +```bash +kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') +``` + +**输出** + +取输出信息中 token 字段 +```{13} +Name: admin-user-token-g8hxb +Namespace: kube-system +Labels: +Annotations: [kubernetes.io/service-account.name](http://kubernetes.io/service-account.name): Kuboard-user +[kubernetes.io/service-account.uid](http://kubernetes.io/service-account.uid): 948bb5e6-8cdc-11e9-b67e-fa163e5f7a0f + +Type: [kubernetes.io/service-account-token](http://kubernetes.io/service-account-token) + +Data +==== +ca.crt: 1025 bytes +namespace: 11 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWc4aHhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NDhiYjVlNi04Y2RjLTExZTktYjY3ZS1mYTE2M2U1ZjdhMGYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.DZ6dMTr8GExo5IH_vCWdB_MDfQaNognjfZKl0E5VW8vUFMVvALwo0BS-6Qsqpfxrlz87oE9yGVCpBYV0D00811bLhHIg-IR_MiBneadcqdQ_TGm_a0Pz0RbIzqJlRPiyMSxk1eXhmayfPn01upPdVCQj6D3vAY77dpcGplu3p5wE6vsNWAvrQ2d_V1KhR03IB1jJZkYwrI8FHCq_5YuzkPfHsgZ9MBQgH-jqqNXs6r8aoUZIbLsYcMHkin2vzRsMy_tjMCI9yXGiOqI-E5efTb-_KbDVwV5cbdqEIegdtYZ2J3mlrFQlmPGYTwFI8Ba9LleSYbCi4o0k74568KcN_w +``` + +::: + + +::: tab 只读用户 lazy + +**拥有的权限** + +- view 可查看名称空间的内容 +- system:node 可查看节点信息 +- system:persistent-volume-provisioner 可查看存储类和存储卷声明的信息 + +**适用场景** + +只读用户不能对集群的配置执行修改操作,非常适用于将开发环境中的 Kuboard 只读权限分发给开发者,以便开发者可以便捷地诊断问题 + +**执行命令** + +执行如下命令可以获得 只读用户 的 Token + +```bash +kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep kuboard-viewer | awk '{print $1}') +``` + +**输出** + +取输出信息中 token 字段 +```{13} +Name: admin-user-token-g8hxb +Namespace: kube-system +Labels: +Annotations: [kubernetes.io/service-account.name](http://kubernetes.io/service-account.name): Kuboard-viewer +[kubernetes.io/service-account.uid](http://kubernetes.io/service-account.uid): 948bb5e6-8cdc-11e9-b67e-fa163e5f7a0f + +Type: [kubernetes.io/service-account-token](http://kubernetes.io/service-account-token) + +Data +==== +ca.crt: 1025 bytes +namespace: 11 bytes +token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWc4aHhiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5NDhiYjVlNi04Y2RjLTExZTktYjY3ZS1mYTE2M2U1ZjdhMGYiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.DZ6dMTr8GExo5IH_vCWdB_MDfQaNognjfZKl0E5VW8vUFMVvALwo0BS-6Qsqpfxrlz87oE9yGVCpBYV0D00811bLhHIg-IR_MiBneadcqdQ_TGm_a0Pz0RbIzqJlRPiyMSxk1eXhmayfPn01upPdVCQj6D3vAY77dpcGplu3p5wE6vsNWAvrQ2d_V1KhR03IB1jJZkYwrI8FHCq_5YuzkPfHsgZ9MBQgH-jqqNXs6r8aoUZIbLsYcMHkin2vzRsMy_tjMCI9yXGiOqI-E5efTb-_KbDVwV5cbdqEIegdtYZ2J3mlrFQlmPGYTwFI8Ba9LleSYbCi4o0k74568KcN_w +``` + +::: +:::: + + +## 访问 Kuboard + +您可以通过NodePort、port-forward、域名三种方式当中的任意一种访问 Kuboard + +:::: tabs type:border-card + +::: tab 通过NodePort访问 lazy + +Kuboard Service 使用了 NodePort 的方式暴露服务,NodePort 为 32567;您可以按如下方式访问 Kuboard。(可以使用集群中任意节点的 IP 地址) + +` +http://any-of-your-node-ip:32567/ +` + +输入前一步骤中获得的 token,可进入 **Kuboard 集群概览页** + +::: tip +您也可以修改 Kuboard.yaml 文件,使用自己定义的 NodePort 端口号 + + +::: + +::: tab 通过port-forward访问 lazy + +在您的客户端电脑中执行如下命令 + +```sh +kubectl port-forward service/Kuboard 8080:80 -n kube-system +``` + +在浏览器打开链接 (请使用 kubectl 所在机器的IP地址) + +`http://localhost:8080` + +输入前一步骤中获得的 token,可进入 **Kuboard 集群概览页** + +::: tip +需要您先完成 [从客户端电脑远程管理 Kubernetes](install-kubectl) 的配置 + + +::: + +::: tab 通过域名访问 lazy + +在浏览器打开链接 (请使用前面安装 Kuboard 时已修改的域名) + +`http://kuboard.yourclustername.yourdomain.com` + + +输入前一步骤中获得的 token,可进入 **Kuboard 集群概览页** + +::: tip +需要您 +* 正确安装 Ingress Controller +* 将您所使用的域名指向 Kubernetes 中的一个 Worker 节点(或者Ingress Controller所在机器的IP,不同类型的Ingress Controller配置不同) + +::: + +:::: + + +**下一步** + +- 使用 Kuboard 工作负载编辑器 [创建 busybox](/guide/example/busybox) (10分钟) + +- 尝试 Kuboard 设计的其他 example [使用 Kuboard](/guide/index) diff --git a/install/install-dashboard.md b/install/install-dashboard.md index a7d7695..54e81fd 100644 --- a/install/install-dashboard.md +++ b/install/install-dashboard.md @@ -28,19 +28,28 @@ ## 安装 -**获取并修改yaml文件** +:::: tabs 安装 type:border-card -```bash -wget https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml +::: tab 安装 lazy + +安装 Kuboard + +``` sh +kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml ``` -修改文件 Kuboard.yaml 中 Ingress 的 host 为 kuboard.yourclustername.yourdomain.com +::: -**执行安装** +::: tab 卸载 lazy -```bash -kubectl apply -f kuboard.yaml +卸载 Kuboard + +``` sh +kubectl delete -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/kuboard.yaml ``` +::: + +:::: ## 获取 Token @@ -127,7 +136,7 @@ token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2Nv ## 访问 Kuboard -您可以通过NodePort、port-forward、域名三种方式当中的任意一种访问 Kuboard +您可以通过NodePort、port-forward 两种方式当中的任意一种访问 Kuboard :::: tabs type:border-card @@ -149,10 +158,11 @@ http://any-of-your-node-ip:32567/ ::: tab 通过port-forward访问 lazy + 在您的客户端电脑中执行如下命令 ```sh -kubectl port-forward service/Kuboard 8080:80 -n kube-system +kubectl port-forward service/kuboard 8080:80 -n kube-system ``` 在浏览器打开链接 (请使用 kubectl 所在机器的IP地址) @@ -161,26 +171,9 @@ kubectl port-forward service/Kuboard 8080:80 -n kube-system 输入前一步骤中获得的 token,可进入 **Kuboard 集群概览页** + ::: tip 需要您先完成 [从客户端电脑远程管理 Kubernetes](install-kubectl) 的配置 - - -::: - -::: tab 通过域名访问 lazy - -在浏览器打开链接 (请使用前面安装 Kuboard 时已修改的域名) - -`http://kuboard.yourclustername.yourdomain.com` - - -输入前一步骤中获得的 token,可进入 **Kuboard 集群概览页** - -::: tip -需要您 -* 正确安装 Ingress Controller -* 将您所使用的域名指向 Kubernetes 中的一个 Worker 节点(或者Ingress Controller所在机器的IP,不同类型的Ingress Controller配置不同) - ::: :::: diff --git a/install/install-k8s.md b/install/install-k8s.md index d9cbea7..7fe0317 100644 --- a/install/install-k8s.md +++ b/install/install-k8s.md @@ -41,7 +41,8 @@ Kuboard 的 Live Demo 环境使用的是如下拓扑结构,本文档描述了 **卸载旧版本** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 sudo yum remove docker \ docker-client \ docker-client-latest \ @@ -56,7 +57,8 @@ sudo yum remove docker \ **下载依赖包及安装包** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm @@ -64,7 +66,8 @@ wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce **安装** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 sudo yum install -y containerd.io-1.2.6-3.3.el7.x86_64.rpm sudo yum install -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm sudo yum install -y docker-ce-18.09.7-3.el7.x86_64.rpm @@ -73,13 +76,15 @@ sudo systemctl enable docker **启动 docker 服务** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 sudo systemctl start docker ``` **检查 docker 版本** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 docker version ``` @@ -97,7 +102,8 @@ docker version **执行安装命令** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 sudo yum install -y nfs-utils ``` @@ -109,7 +115,8 @@ sudo yum install -y nfs-utils **配置K8S的yum源** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 cat < /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes @@ -124,7 +131,8 @@ EOF **关闭 防火墙、SeLinux、swap** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 systemctl stop firewalld systemctl disable firewalld @@ -138,7 +146,8 @@ cat /etc/fstab_bak |grep -v swap > /etc/fstab **修改 /etc/sysctl.conf** -``` +``` sh +# 在 master 节点和 worker 节点都要执行 vim /etc/sysctl.conf ``` @@ -157,12 +166,14 @@ net.bridge.bridge-nf-call-iptables = 1 执行命令以应用 ```sh +# 在 master 节点和 worker 节点都要执行 sysctl -p ``` **安装kubelet、kubeadm、kubectl** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0 ``` @@ -170,11 +181,12 @@ yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0 **修改docker Cgroup Driver为systemd** -``` +``` sh +# 在 master 节点和 worker 节点都要执行 vim /usr/lib/systemd/system/docker.service ``` -向其中他添加 +向其中添加 ``` --exec-opt native.cgroupdriver=systemd @@ -188,7 +200,8 @@ vim /usr/lib/systemd/system/docker.service 重启 docker -``` +``` sh +# 在 master 节点和 worker 节点都要执行 systemctl daemon-reload systemctl restart docker ``` @@ -197,7 +210,8 @@ systemctl restart docker **启动kubelet** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 systemctl enable kubelet && systemctl start kubelet ``` @@ -209,7 +223,8 @@ systemctl enable kubelet && systemctl start kubelet 执行以下命令添加docker k8s国内镜像源 -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io systemctl restart docker @@ -217,7 +232,8 @@ systemctl restart docker **拉取k8s相关镜像** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0 docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0 docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0 @@ -229,7 +245,8 @@ docker pull coredns/coredns:1.3.1 **更改镜像名为k8s官网镜像** -```bash +``` sh +# 在 master 节点和 worker 节点都要执行 docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0 docker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0 docker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0 @@ -257,7 +274,8 @@ docker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10 **配置 apiserver.demo 的域名** -```bash +``` sh +# 只在 master 节点执行 echo "x.x.x.x apiserver.demo" >> /etc/hosts ``` @@ -266,9 +284,14 @@ echo "x.x.x.x apiserver.demo" >> /etc/hosts ::: -**创建 /root/k8s/kubeadm-config.yaml** +**创建 ./kubeadm-config.yaml** -```yaml +``` sh +# 只在 master 节点执行 +vim ./kubeadm-config.yaml +``` + +``` yaml apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration kubernetesVersion: v1.15.0 @@ -280,7 +303,8 @@ controlPlaneEndpoint: "apiserver.demo:6443" **初始化 apiserver** -```bash +``` sh +# 只在 master 节点执行 kubeadm init --config=kubeadm-config.yaml --upload-certs ``` @@ -292,7 +316,8 @@ kubeadm init --config=kubeadm-config.yaml --upload-certs **初始化 root 用户的 kubectl 配置** -```bash +``` sh +# 只在 master 节点执行 rm -rf /root/.kube/ mkdir /root/.kube/ cp -i /etc/kubernetes/admin.conf /root/.kube/config @@ -302,7 +327,8 @@ cp -i /etc/kubernetes/admin.conf /root/.kube/config **安装 calico** -```bash +``` sh +# 只在 master 节点执行 kubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml ``` @@ -314,7 +340,8 @@ kubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/ 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态 -```bash +``` sh +# 只在 master 节点执行 watch kubectl get pod -n kube-system ``` @@ -323,7 +350,8 @@ watch kubectl get pod -n kube-system 在 master 节点 demo-master-a-1 上执行 -```bash +``` sh +# 只在 master 节点执行 kubectl get nodes ``` @@ -335,13 +363,15 @@ kubectl get nodes **在 master 节点 demo-master-a-1 节点执行** -```bash +``` sh +# 只在 master 节点执行 kubeadm token create --print-join-command ``` 可获取kubeadm join 命令及参数,如下所示 -```bash +``` sh +# kubeadm token create 命令的输出 kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 ``` @@ -351,7 +381,8 @@ kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery **针对所有的 worker 节点执行** -```bash +``` sh +# 只在 worker 节点执行 echo "x.x.x.x apiserver.demo" >> /etc/hosts kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303 ``` @@ -366,7 +397,8 @@ kubeadm join apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery 在 master 节点 demo-master-a-1 上执行 -```bash +``` sh +# 只在 master 节点执行 kubectl get nodes ``` @@ -382,13 +414,15 @@ kubectl get nodes 在准备移除的 worker 节点上执行 -```bash +``` sh +# 只在 worker 节点执行 kubeadm reset ``` 在 master 节点 demo-master-a-1 上执行 -```bash +``` sh +# 只在 master 节点执行 kubectl delete node demo-worker-x-x ``` @@ -410,7 +444,8 @@ kubectl delete node demo-worker-x-x **在 demo-master-a-1 上执行** -```bash +``` sh +# 只在 master 节点执行 kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml ```