From 157e3a8664b389994681588ddbf66e9083abf576 Mon Sep 17 00:00:00 2001 From: "imgbot[bot]" Date: Fri, 19 Jun 2020 06:33:32 +0000 Subject: [PATCH] deploy: 3234ce689bec207551b071a6cf5d8327f644b69b --- cloud-native/application-scope.html | 4 +- cloud-native/cloud-native-definition.html | 4 +- .../cloud-native-local-quick-start.html | 18 ++++----- cloud-native/cloud-native-philosophy.html | 4 +- ...native-programming-language-ballerina.html | 16 ++++---- ...ud-native-programming-language-pulumi.html | 6 +-- .../cloud-native-programming-languages.html | 4 +- cloud-native/component.html | 4 +- cloud-native/define-cloud-native-app.html | 8 ++-- .../from-kubernetes-to-cloud-native.html | 38 +++++++++--------- ...ernetes-and-cloud-native-app-overview.html | 36 ++++++++--------- cloud-native/play-with-kubernetes.html | 6 +-- ...up-kubernetes-with-rancher-and-aliyun.html | 10 ++--- cloud-native/the-future-of-cloud-native.html | 36 ++++++++--------- cloud-native/trait.html | 4 +- cloud-native/workload.html | 4 +- images/cloud-native-app-model.png | Bin 82236 -> 57262 bytes images/roles.png | Bin 83860 -> 64385 bytes index.html | 14 +++---- 19 files changed, 108 insertions(+), 108 deletions(-) diff --git a/cloud-native/application-scope.html b/cloud-native/application-scope.html index 911d590a3..0f2109744 100644 --- a/cloud-native/application-scope.html +++ b/cloud-native/application-scope.html @@ -4606,7 +4606,7 @@
  • The Open Application Model specification - github.com
  • @@ -4650,7 +4650,7 @@ diff --git a/cloud-native/cloud-native-definition.html b/cloud-native/cloud-native-definition.html index a575cf67d..ca999e4b7 100644 --- a/cloud-native/cloud-native-definition.html +++ b/cloud-native/cloud-native-definition.html @@ -4612,7 +4612,7 @@
  • CNCF Cloud Native Definition v1.0 - github.com
  • @@ -4656,7 +4656,7 @@ diff --git a/cloud-native/cloud-native-local-quick-start.html b/cloud-native/cloud-native-local-quick-start.html index 23f27c8b0..05929cee3 100644 --- a/cloud-native/cloud-native-local-quick-start.html +++ b/cloud-native/cloud-native-local-quick-start.html @@ -4678,7 +4678,7 @@ kubectl get nodes
    kubectl -n kube-system describe secret `kubectl -n kube-system get secret|grep admin-token|cut -d " " -f1`|grep "token:"|tr -s " "|cut -d " " -f2
     

    注意:token的值也可以在vagrant up的日志的最后看到。

    -
    Kubernetes dashboard
    图片 - Kubernetes dashboard
    +
    Kubernetes dashboard
    图片 - Kubernetes dashboard

    Heapster监控

    创建Heapster监控:

    kubectl apply -f addon/heapster/
    @@ -4688,7 +4688,7 @@ kubectl get nodes
     
    172.17.8.102 grafana.jimmysong.io
     

    访问Grafana:http://grafana.jimmysong.io

    -
    Grafana
    图片 - Grafana
    +
    Grafana
    图片 - Grafana

    Traefik

    部署Traefik ingress controller和增加ingress配置:

    kubectl apply -f addon/traefik-ingress
    @@ -4697,7 +4697,7 @@ kubectl get nodes
     
    172.17.8.102 traefik.jimmysong.io
     

    访问Traefik UI:http://traefik.jimmysong.io

    -
    Traefik dashboard
    图片 - Traefik dashboard
    +
    Traefik dashboard
    图片 - Traefik dashboard

    EFK

    使用EFK做日志收集。

    kubectl apply -f addon/efk/
    @@ -4747,7 +4747,7 @@ istioctl create -f yaml/istio-bookinfo/bookinfo-gateway.yaml
     
     
     

    注意JAEGER_PORT可以通过kubectl -n istio-system get svc tracing -o jsonpath='{.spec.ports[0].nodePort}'获取,GATEWAY_PORT可以通过kubectl -n istio-system get svc istio-ingressgateway -o jsonpath='{.spec.ports[0].nodePort}'获取。

    -
    bookinfo示例
    图片 - bookinfo示例
    +
    bookinfo示例
    图片 - bookinfo示例

    Vistio

    Vizceral是Netflix发布的一个开源项目,用于近乎实时地监控应用程序和集群之间的网络流量。Vistio是使用Vizceral对Istio和网格监控的改进。它利用Istio Mixer生成的指标,然后将其输入Prometheus。Vistio查询Prometheus并将数据存储在本地以允许重播流量。

    # Deploy vistio via kubectl
    @@ -4760,7 +4760,7 @@ kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -o jsonpath='{.items[0].metadata.name}') 8080:8080 &
     

    如果一切都已经启动并准备就绪,您就可以访问Vistio UI,开始探索服务网格网络,访问http://localhost:8080 您将会看到类似下图的输出。

    -
    vistio视图动画
    图片 - vistio视图动画
    +
    vistio视图动画
    图片 - vistio视图动画

    更多详细内容请参考Vistio—使用Netflix的Vizceral可视化Istio service mesh

    Kiali

    Kiali是一个用于提供Istio service mesh观察性的项目,更多信息请查看 https://kiali.io

    @@ -4769,7 +4769,7 @@ kubectl -n default port-forward Kiali页面
    图片 - Kiali页面
    +
    Kiali页面
    图片 - Kiali页面

    注意:Kilia使用Jaeger做追踪,请不用屏蔽kilia页面的弹出窗口。

    Weave scope

    Weave scope可用于监控、可视化和管理Docker&Kubernetes集群,详情见 https://www.weave.works/oss/scope/

    @@ -4779,7 +4779,7 @@ kubectl -n default port-forward 172.17.8.102 scope.weave.jimmysong.io

    现在打开浏览器,访问 http://scope.weave.jimmysong.io/

    -
    Scope页面
    图片 - Scope页面
    +
    Scope页面
    图片 - Scope页面

    管理

    除了特别说明,以下命令都在当前的repo目录下操作。

    挂起

    @@ -4833,7 +4833,7 @@ vagrant ssh node3
  • Vistio—使用Netflix的Vizceral可视化Istio service mesh
  • @@ -4877,7 +4877,7 @@ vagrant ssh node3 diff --git a/cloud-native/cloud-native-philosophy.html b/cloud-native/cloud-native-philosophy.html index a843b3849..9c7013703 100644 --- a/cloud-native/cloud-native-philosophy.html +++ b/cloud-native/cloud-native-philosophy.html @@ -4722,7 +4722,7 @@
  • “Cloud Native Infrastructure”, a Free O’Reilly eBook
  • @@ -4766,7 +4766,7 @@ diff --git a/cloud-native/cloud-native-programming-language-ballerina.html b/cloud-native/cloud-native-programming-language-ballerina.html index b999a9690..ccc3143db 100644 --- a/cloud-native/cloud-native-programming-language-ballerina.html +++ b/cloud-native/cloud-native-programming-language-ballerina.html @@ -4576,7 +4576,7 @@

    云原生编程语言 Ballerina

    当我第一眼看到 Ballerina 还真有点惊艳的感觉。Ballerina 这个单词的意思是“芭蕾舞女演员”。我想他们之所以给公司和这们语言起这个名字,可能是希望它成为云原生这个大舞台中,Ballerina 能像一个灵活的芭蕾舞者一样轻松自如吧!

    Ballerina 是一款开源的编译式的强类型语言,该语言本身的代码可以通过 GitHub 上获取。我们可以通过 Ballerina 官网上的设计哲学页面来对这门云原生编程语言一探究竟。

    -
    云原生编程语言ballerina
    图片 - 云原生编程语言ballerina
    +
    云原生编程语言ballerina
    图片 - 云原生编程语言ballerina

    未来的应用程序应该是基于 API 的,而众多 API 之间的通讯和集成就成了关键问题。Ballerina 是一款使用文本和图形语法编译的、事务的、静态和强类型编程语言。Ballerina 包含分布式系统集成到语言的基本概念,并提供类型安全,并发环境下实现的分布式事务,可靠的消息传递,流处理和工作流。

    为什么创建 Ballerina?

    与 ESB 集成仍然是瀑布式开发。你必须部署服务器,配置连接器,使用 XML 编程服务逻辑以及使用 XPath 查询和转换数据。这不是开发者友好的。

    @@ -4584,7 +4584,7 @@

    ESB、EAI、BPM 和 DSL 需要 XML 和配置来中断迭代开发流程:编辑、构建、运行和测试。这与运行实际应用之间是有一条鸿沟的,而云原生编程语言 Ballerina 的出现就是为了解决这条“集成鸿沟”的。

    Ballerina 设计理念

    序列图

    -
    云原生编程语言Ballerina的序列图设计理念
    图片 - 云原生编程语言Ballerina的序列图设计理念
    +
    云原生编程语言Ballerina的序列图设计理念
    图片 - 云原生编程语言Ballerina的序列图设计理念

    语言灵感

    序列图反映了设计开发人员记录的互联的系统。Ballerina 的语法和高效的编码模式要求开发人员使用强大的交互最佳实践来编码。

    序列图可视化

    @@ -4592,7 +4592,7 @@

    Actor 与 action

    客户端、worker 和远程系统在 Ballerina 的序列图中以不同的 actor 表示。在代码中,远程端点通过连接器进行连接,连接器提供类型安全操作。在图形上,每个连接器在序列图中表示为一个 actor(即一条垂直线),action 表示为与这些actor 的交互。

    并发

    -
    云原生编程语言Ballerina的并发理念
    图片 - 云原生编程语言Ballerina的并发理念
    +
    云原生编程语言Ballerina的并发理念
    图片 - 云原生编程语言Ballerina的并发理念

    序列图和并发

    Ballerina 的并发模型是并行优先的,因为与远程方的交互总是涉及多个 worker。Worker 之间的交互作为消息传递进行处理,它们之间没有共享状态。

    Worker 语义

    @@ -4636,7 +4636,7 @@ type myObject object {

    Ballerina 如何工作?

    Ballerina 的语法、代码和编译器创建了运行时服务和部署构件,这些工件都是云原生就绪的,您可以选择将其部署在 IaaS、编排系统或 service mesh 中的。开发人员的体验旨在维护流程,包括快速的编辑、构建、调试周期并集成到团队的生命周期工具链中。

    运行时架构

    -
    云原生编程语言ballerina运行时架构
    图片 - 云原生编程语言ballerina运行时架构
    +
    云原生编程语言ballerina运行时架构
    图片 - 云原生编程语言ballerina运行时架构

    Ballerina API 网关

    强制执行身份策略并保证性能。通过代码注解(类似于 Spring 中的注解)进行配置和部署。可以运行嵌入式服务、作为管理多个服务的容器代理或者使用 API 管理解决方案(如 WSO2 API Manager)。

    Ballerina service

    @@ -4646,7 +4646,7 @@ type myObject object {

    消息代理、事务协调者和身份代理

    为参与事务、事件驱动的通信和为认证流程的 Ballerina 服务提供代理基础设施功能。这些组件可以嵌入到单个服务部署中或者进行单独部署和扩展以管理多个服务。

    部署架构

    -
    云原生编程语言ballerina部署架构图
    图片 - 云原生编程语言ballerina部署架构图
    +
    云原生编程语言ballerina部署架构图
    图片 - 云原生编程语言ballerina部署架构图

    IaaS

    使用代码注解和构建系统,可以打包 Ballerina 服务和其他运行时组件(如 API 网关)以部署到任何云原生环境中。在 IaaS 环境中,Ballerina 服务可以以虚拟机或容器的方式运行,也可以在构建期间将镜像推送到 registry 中。

    编排器

    @@ -4654,7 +4654,7 @@ type myObject object {

    Service mesh

    Ballerina 可以选择断路器和事务流程逻辑委托给像 Istio 或 Envoy 这样的 service mesh(如果有的话)。如果没有 service mesh 的话,Ballerina 服务将嵌入相应的功能。

    生命周期

    -
    云原生编程语言ballerina生命周期架构图
    图片 - 云原生编程语言ballerina生命周期架构图
    +
    云原生编程语言ballerina生命周期架构图
    图片 - 云原生编程语言ballerina生命周期架构图

    Ballerina 工具

    使用我们的语言服务器可以在 VS Code 和 IntelliJ 中获取自动补全和调试等智能感知。Ballerina 的关键字和语法结构可以用序列图的方式来表示。使用 Ballerina Composer 可以可视化的编辑 Ballerina 代码。另外它也可以做可视化得运行时和开发环境追踪。

    Ballerina 构建

    @@ -4692,7 +4692,7 @@ type myObject object {
  • Microservices, Docker, Kubernetes, Serverless, Service Mesh, and Beyond
  • @@ -4736,7 +4736,7 @@ type myObject object { diff --git a/cloud-native/cloud-native-programming-language-pulumi.html b/cloud-native/cloud-native-programming-language-pulumi.html index 083d3de4e..a28015103 100644 --- a/cloud-native/cloud-native-programming-language-pulumi.html +++ b/cloud-native/cloud-native-programming-language-pulumi.html @@ -4576,7 +4576,7 @@

    云原生编程语言Pulumi

    2018年6月18日 Joe Duffy在他的博客中宣布开源了云原生编程语言Pulumi。这是继Ballerina之后我看到的另一款云原生编程语言,他们之间有一些共同的特点,例如都是为了支持多种云环境,基于不可变基础设施和基础设施即代码的理念构建,使云原生应用的集成更加方便,但也有一些不同,Ballerina是直接创建了一个基于JVM的语言,而Pulumi是为不同编程语言构建了SDK。

    下文部分来自Joe Duffy的博客Hello, Pulumi

    -
    云原生编程语言Pulumi
    图片 - 云原生编程语言Pulumi
    +
    云原生编程语言Pulumi
    图片 - 云原生编程语言Pulumi

    TL;DR 有了Pulumi,38页的手动操作说明将变成了38行代码。25000行YAML配置变成了使用真实编程语言的500行语句。

    Pulumi的整个运行时、CLI、支持的库都可以在GitHub上免费下载。我们的团队正急切的等待您的反馈。与此同时,我需要告诉您一些关于Pulumi的事情,为什么我们会创造它。

    Pulumi是什么?

    @@ -4677,7 +4677,7 @@ serverless.cloudwatchHello, Pulumi! @@ -4721,7 +4721,7 @@ serverless.cloudwatch加入中国最大的有技术、有温度、有情怀的云原生社区

    Copyright © 2017-2020 | Distributed under CC BY 4.0 | jimmysong.io","modify_label":" Updated at ","modify_format":"YYYY-MM-DD HH:mm:ss"},"prism":{"css":["prism-themes/themes/prism-ghcolors.css"]},"github":{"url":"https://github.com/rootsongjc/kubernetes-handbook"},"editlink":{"label":"编辑本页","multilingual":false,"base":"https://github.com/rootsongjc/kubernetes-handbook/blob/master/"},"splitter":{},"codesnippet":{},"sitemap-general":{"prefix":"https://jimmysong.io/kubernetes-handbook/"},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":{"shortcut":"favicon.ico","bookmark":"favicon.ico"},"lightbox":{"jquery":true,"sameUuid":false},"page-toc-button":{},"back-to-top-button":{},"prism-themes":{},"alerts":{},"github-buttons":{"repo":"rootsongjc/kubernetes-handbook","types":["star"],"size":"small"},"3-ba":{"configuration":"auto","token":"11f7d254cfa4e0ca44b175c66d379ecc"},"copy-code-button":{},"ga":{"configuration":"auto","token":"UA-93485976-1"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"showLevel":true,"styles":{"ebook":"styles/ebook.css","epub":"styles/epub.css","mobi":"styles/mobi.css","pdf":"styles/pdf.css","print":"styles/print.css","website":"styles/website.css"}},"search-plus":{},"image-captions":{"caption":"图片 - _CAPTION_","variable_name":"_pictures"}},"theme":"default","author":"Jimmy Song(宋净超)","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"index.html#fig1.1.1","level":"1.1","list_caption":"Figure: Stargazers over time","alt":"Stargazers over time","nro":1,"url":"https://starcharts.herokuapp.com/rootsongjc/kubernetes-handbook.svg","index":1,"caption_template":"图片 - _CAPTION_","label":"Stargazers over time","attributes":{},"skip":false,"key":"1.1.1"},{"backlink":"cloud-native/play-with-kubernetes.html#fig2.3.1","level":"2.3","list_caption":"Figure: Play with Kubernetes网页截图","alt":"Play with Kubernetes网页截图","nro":2,"url":"../images/play-with-kubernetes.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Play with Kubernetes网页截图","attributes":{},"skip":false,"key":"2.3.1"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.1","level":"2.4","list_caption":"Figure: Kubernetes dashboard","alt":"Kubernetes dashboard","nro":3,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/dashboard-animation.gif","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes dashboard","attributes":{},"skip":false,"key":"2.4.1"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.2","level":"2.4","list_caption":"Figure: Grafana","alt":"Grafana","nro":4,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/grafana-animation.gif","index":2,"caption_template":"图片 - _CAPTION_","label":"Grafana","attributes":{},"skip":false,"key":"2.4.2"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.3","level":"2.4","list_caption":"Figure: Traefik dashboard","alt":"Traefik dashboard","nro":5,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/traefik-ingress.gif","index":3,"caption_template":"图片 - _CAPTION_","label":"Traefik dashboard","attributes":{},"skip":false,"key":"2.4.3"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.4","level":"2.4","list_caption":"Figure: bookinfo示例","alt":"bookinfo示例","nro":6,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/bookinfo-demo.gif","index":4,"caption_template":"图片 - _CAPTION_","label":"bookinfo示例","attributes":{},"skip":false,"key":"2.4.4"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.5","level":"2.4","list_caption":"Figure: vistio视图动画","alt":"vistio视图动画","nro":7,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/vistio-animation.gif","index":5,"caption_template":"图片 - _CAPTION_","label":"vistio视图动画","attributes":{},"skip":false,"key":"2.4.5"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.6","level":"2.4","list_caption":"Figure: Kiali页面","alt":"Kiali页面","nro":8,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/kiali.gif","index":6,"caption_template":"图片 - _CAPTION_","label":"Kiali页面","attributes":{},"skip":false,"key":"2.4.6"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.7","level":"2.4","list_caption":"Figure: Scope页面","alt":"Scope页面","nro":9,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/weave-scope-animation.gif","index":7,"caption_template":"图片 - _CAPTION_","label":"Scope页面","attributes":{},"skip":false,"key":"2.4.7"},{"backlink":"cloud-native/setup-kubernetes-with-rancher-and-aliyun.html#fig2.5.1","level":"2.5","list_caption":"Figure: Rancher 界面","alt":"Rancher 界面","nro":10,"url":"../images/rancher-web.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Rancher 界面","attributes":{},"skip":false,"key":"2.5.1"},{"backlink":"cloud-native/setup-kubernetes-with-rancher-and-aliyun.html#fig2.5.2","level":"2.5","list_caption":"Figure: 自定义节点信息","alt":"自定义节点信息","nro":11,"url":"../images/rancher-customize-node.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"自定义节点信息","attributes":{},"skip":false,"key":"2.5.2"},{"backlink":"cloud-native/setup-kubernetes-with-rancher-and-aliyun.html#fig2.5.3","level":"2.5","list_caption":"Figure: Rancher 集群监控页面","alt":"Rancher 集群监控页面","nro":12,"url":"../images/rancher-cluster.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Rancher 集群监控页面","attributes":{},"skip":false,"key":"2.5.3"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.1","level":"2.6","list_caption":"Figure: 云计算演进历程","alt":"云计算演进历程","nro":13,"url":"../images/cloud-computing-evolution-road.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"云计算演进历程","attributes":{},"skip":false,"key":"2.6.1"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.2","level":"2.6","list_caption":"Figure: 来自Twitter @MarcWilczek","alt":"来自Twitter @MarcWilczek","nro":14,"url":"../images/cloud-native-comes-of-age.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"来自Twitter @MarcWilczek","attributes":{},"skip":false,"key":"2.6.2"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.3","level":"2.6","list_caption":"Figure: Cloud native思维导图","alt":"Cloud native思维导图","nro":15,"url":"../images/cloud-native-architecutre-mindnode.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Cloud native思维导图","attributes":{},"skip":false,"key":"2.6.3"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.4","level":"2.6","list_caption":"Figure: 十二因素应用","alt":"十二因素应用","nro":16,"url":"../images/12-factor-app.png","index":4,"caption_template":"图片 - _CAPTION_","label":"十二因素应用","attributes":{},"skip":false,"key":"2.6.4"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.5","level":"2.6","list_caption":"Figure: 容器生态","alt":"容器生态","nro":17,"url":"../images/container-ecosystem.png","index":5,"caption_template":"图片 - _CAPTION_","label":"容器生态","attributes":{},"skip":false,"key":"2.6.5"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.6","level":"2.6","list_caption":"Figure: 使用Jenkins进行持续集成与发布流程图","alt":"使用Jenkins进行持续集成与发布流程图","nro":18,"url":"../images/kubernetes-jenkins-ci-cd.png","index":6,"caption_template":"图片 - _CAPTION_","label":"使用Jenkins进行持续集成与发布流程图","attributes":{},"skip":false,"key":"2.6.6"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.7","level":"2.6","list_caption":"Figure: filebeat日志收集架构图","alt":"filebeat日志收集架构图","nro":19,"url":"../images/filebeat-log-collector-arch.png","index":7,"caption_template":"图片 - _CAPTION_","label":"filebeat日志收集架构图","attributes":{},"skip":false,"key":"2.6.7"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.8","level":"2.6","list_caption":"Figure: API文档","alt":"API文档","nro":20,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":8,"caption_template":"图片 - _CAPTION_","label":"API文档","attributes":{},"skip":false,"key":"2.6.8"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.9","level":"2.6","list_caption":"Figure: 迁移步骤示意图","alt":"迁移步骤示意图","nro":21,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":9,"caption_template":"图片 - _CAPTION_","label":"迁移步骤示意图","attributes":{},"skip":false,"key":"2.6.9"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.10","level":"2.6","list_caption":"Figure: service mesh架构图","alt":"service mesh架构图","nro":22,"url":"../images/serivce-mesh-control-plane.png","index":10,"caption_template":"图片 - _CAPTION_","label":"service mesh架构图","attributes":{},"skip":false,"key":"2.6.10"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.11","level":"2.6","list_caption":"Figure: kibana界面","alt":"kibana界面","nro":23,"url":"../images/filebeat-docker-test.jpg","index":11,"caption_template":"图片 - _CAPTION_","label":"kibana界面","attributes":{},"skip":false,"key":"2.6.11"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.12","level":"2.6","list_caption":"Figure: Grafana界面示意图1","alt":"Grafana界面示意图1","nro":24,"url":"../images/kubernetes-devops-example-grafana-1.png","index":12,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图1","attributes":{},"skip":false,"key":"2.6.12"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.13","level":"2.6","list_caption":"Figure: Grafana界面示意图2","alt":"Grafana界面示意图2","nro":25,"url":"../images/kubernetes-devops-example-grafana-2.png","index":13,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图2","attributes":{},"skip":false,"key":"2.6.13"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.14","level":"2.6","list_caption":"Figure: Grafana界面示意图3","alt":"Grafana界面示意图3","nro":26,"url":"../images/kubernetes-devops-example-grafana-3.png","index":14,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图3","attributes":{},"skip":false,"key":"2.6.14"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.15","level":"2.6","list_caption":"Figure: dashboard","alt":"dashboard","nro":27,"url":"../images/spark-job-on-kubernetes-example-1.jpg","index":15,"caption_template":"图片 - _CAPTION_","label":"dashboard","attributes":{},"skip":false,"key":"2.6.15"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.16","level":"2.6","list_caption":"Figure: Grafana","alt":"Grafana","nro":28,"url":"../images/spark-job-on-kubernetes-example-2.jpg","index":16,"caption_template":"图片 - _CAPTION_","label":"Grafana","attributes":{},"skip":false,"key":"2.6.16"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.1","level":"2.7","list_caption":"Figure: 容器生态图 Container ecosystem","alt":"容器生态图 Container ecosystem","nro":29,"url":"../images/container-ecosystem.png","index":1,"caption_template":"图片 - _CAPTION_","label":"容器生态图 Container ecosystem","attributes":{},"skip":false,"key":"2.7.1"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.2","level":"2.7","list_caption":"Figure: Kubernetes架构","alt":"Kubernetes架构","nro":30,"url":"../images/kubernetes-high-level-component-archtecture.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes架构","attributes":{},"skip":false,"key":"2.7.2"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.3","level":"2.7","list_caption":"Figure: Cloud Native Core target","alt":"Cloud Native Core target","nro":31,"url":"../images/cloud-native-core-target.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Cloud Native Core target","attributes":{},"skip":false,"key":"2.7.3"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.4","level":"2.7","list_caption":"Figure: FaaS Landscape","alt":"FaaS Landscape","nro":32,"url":"../images/redpoint-faas-landscape.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"FaaS Landscape","attributes":{},"skip":false,"key":"2.7.4"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.5","level":"2.7","list_caption":"Figure: Workloads running on Kubernetes","alt":"Workloads running on Kubernetes","nro":33,"url":"../images/0069RVTdgy1fv5mxr6fxtj31kw11q484.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Workloads running on Kubernetes","attributes":{},"skip":false,"key":"2.7.5"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.6","level":"2.7","list_caption":"Figure: Gartner技术爆发趋势图2017","alt":"Gartner技术爆发趋势图2017","nro":34,"url":"../images/0069RVTdgy1fv5my2jtxzj315o0z8dkr.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"Gartner技术爆发趋势图2017","attributes":{},"skip":false,"key":"2.7.6"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.7","level":"2.7","list_caption":"Figure: Microservices concerns","alt":"Microservices concerns","nro":35,"url":"../images/microservices-concerns.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Microservices concerns","attributes":{},"skip":false,"key":"2.7.7"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.8","level":"2.7","list_caption":"Figure: 两种服务发现方式","alt":"两种服务发现方式","nro":36,"url":"../images/service-discovery-in-microservices.png","index":8,"caption_template":"图片 - _CAPTION_","label":"两种服务发现方式","attributes":{},"skip":false,"key":"2.7.8"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.9","level":"2.7","list_caption":"Figure: Cloud Native Features","alt":"Cloud Native Features","nro":37,"url":"https://jimmysong.io/kubernetes-handbook/images/cloud-native-architecutre-mindnode.jpg","index":9,"caption_template":"图片 - _CAPTION_","label":"Cloud Native Features","attributes":{},"skip":false,"key":"2.7.9"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.10","level":"2.7","list_caption":"Figure: Cloud Native Landscape v1.0","alt":"Cloud Native Landscape v1.0","nro":38,"url":"../images/0069RVTdgy1fv5myp6ednj31kw0w0u0x.jpg","index":10,"caption_template":"图片 - _CAPTION_","label":"Cloud Native Landscape v1.0","attributes":{},"skip":false,"key":"2.7.10"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.11","level":"2.7","list_caption":"Figure: Building a Cloud Native Architecture with Kubernetes followed 12 factor app","alt":"Building a Cloud Native Architecture with Kubernetes followed 12 factor app","nro":39,"url":"../images/building-cloud-native-architecture-with-kubernetes.png","index":11,"caption_template":"图片 - _CAPTION_","label":"Building a Cloud Native Architecture with Kubernetes followed 12 factor app","attributes":{},"skip":false,"key":"2.7.11"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.12","level":"2.7","list_caption":"Figure: Creating Kubernetes native app","alt":"Creating Kubernetes native app","nro":40,"url":"../images/creating-kubernetes-native-app.jpg","index":12,"caption_template":"图片 - _CAPTION_","label":"Creating Kubernetes native app","attributes":{},"skip":false,"key":"2.7.12"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.13","level":"2.7","list_caption":"Figure: istio vs linkerd","alt":"istio vs linkerd","nro":41,"url":"../images/istio-vs-linkerd.jpg","index":13,"caption_template":"图片 - _CAPTION_","label":"istio vs linkerd","attributes":{},"skip":false,"key":"2.7.13"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.14","level":"2.7","list_caption":"Figure: Deployment pipeline","alt":"Deployment pipeline","nro":42,"url":"../images/0069RVTdgy1fv5mzj8rj6j318g1ewtfc.jpg","index":14,"caption_template":"图片 - _CAPTION_","label":"Deployment pipeline","attributes":{},"skip":false,"key":"2.7.14"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.15","level":"2.7","list_caption":"Figure: Spark on Kubernetes with different schedulers","alt":"Spark on Kubernetes with different schedulers","nro":43,"url":"../images/spark-on-kubernetes-with-different-schedulers.jpg","index":15,"caption_template":"图片 - _CAPTION_","label":"Spark on Kubernetes with different schedulers","attributes":{},"skip":false,"key":"2.7.15"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.16","level":"2.7","list_caption":"Figure: Kubernetes solutions","alt":"Kubernetes solutions","nro":44,"url":"../images/0069RVTdgy1fv5mzywc83j31fk1i8qg4.jpg","index":16,"caption_template":"图片 - _CAPTION_","label":"Kubernetes solutions","attributes":{},"skip":false,"key":"2.7.16"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.17","level":"2.7","list_caption":"Figure: Kubernetes SIG","alt":"Kubernetes SIG","nro":45,"url":"../images/kubernetes-sigs.jpg","index":17,"caption_template":"图片 - _CAPTION_","label":"Kubernetes SIG","attributes":{},"skip":false,"key":"2.7.17"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.1","level":"2.8.1","list_caption":"Figure: 云原生编程语言ballerina","alt":"云原生编程语言ballerina","nro":46,"url":"../images/philosophy-page-diagrams-top.png","index":1,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言ballerina","attributes":{},"skip":false,"key":"2.8.1.1"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.2","level":"2.8.1","list_caption":"Figure: 云原生编程语言Ballerina的序列图设计理念","alt":"云原生编程语言Ballerina的序列图设计理念","nro":47,"url":"../images/philosophy-principle-diagrams-01.png","index":2,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言Ballerina的序列图设计理念","attributes":{},"skip":false,"key":"2.8.1.2"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.3","level":"2.8.1","list_caption":"Figure: 云原生编程语言Ballerina的并发理念","alt":"云原生编程语言Ballerina的并发理念","nro":48,"url":"../images/philosophy-principle-diagrams-02.png","index":3,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言Ballerina的并发理念","attributes":{},"skip":false,"key":"2.8.1.3"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.4","level":"2.8.1","list_caption":"Figure: 云原生编程语言ballerina运行时架构","alt":"云原生编程语言ballerina运行时架构","nro":49,"url":"../images/philosophy-diagrams-for-site-02.png","index":4,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言ballerina运行时架构","attributes":{},"skip":false,"key":"2.8.1.4"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.5","level":"2.8.1","list_caption":"Figure: 云原生编程语言ballerina部署架构图","alt":"云原生编程语言ballerina部署架构图","nro":50,"url":"../images/philosophy-diagrams-for-site-03.png","index":5,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言ballerina部署架构图","attributes":{},"skip":false,"key":"2.8.1.5"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.6","level":"2.8.1","list_caption":"Figure: 云原生编程语言ballerina生命周期架构图","alt":"云原生编程语言ballerina生命周期架构图","nro":51,"url":"../images/philosophy-diagrams-for-site-04.png","index":6,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言ballerina生命周期架构图","attributes":{},"skip":false,"key":"2.8.1.6"},{"backlink":"cloud-native/cloud-native-programming-language-pulumi.html#fig2.8.2.1","level":"2.8.2","list_caption":"Figure: 云原生编程语言Pulumi","alt":"云原生编程语言Pulumi","nro":52,"url":"../images/00704eQkgy1fsm4v0a6qwj30xc0m8t9d.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言Pulumi","attributes":{},"skip":false,"key":"2.8.2.1"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.1","level":"2.9","list_caption":"Figure: Kubernetes 云原生的操作系统","alt":"Kubernetes 云原生的操作系统","nro":53,"url":"../images/00704eQkgy1frr4z08j6oj31p20w2n6n.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 云原生的操作系统","attributes":{},"skip":false,"key":"2.9.1"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.2","level":"2.9","list_caption":"Figure: 操作系统层次","alt":"操作系统层次","nro":54,"url":"../images/00704eQkgy1frr52hl4eaj31qy15en74.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"操作系统层次","attributes":{},"skip":false,"key":"2.9.2"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.3","level":"2.9","list_caption":"Figure: 云原生景观图","alt":"云原生景观图","nro":55,"url":"../images/00704eQkgy1frr53j3aiuj32fs1dc7wi.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"云原生景观图","attributes":{},"skip":false,"key":"2.9.3"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.4","level":"2.9","list_caption":"Figure: KubeVirt架构图","alt":"KubeVirt架构图","nro":56,"url":"../images/00704eQkgy1frr54de5oyj31qw14qn2x.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"KubeVirt架构图","attributes":{},"skip":false,"key":"2.9.4"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.5","level":"2.9","list_caption":"Figure: Kubernetes中的资源隔离","alt":"Kubernetes中的资源隔离","nro":57,"url":"../images/00704eQkgy1frr54ztql2j329q0zwwlf.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Kubernetes中的资源隔离","attributes":{},"skip":false,"key":"2.9.5"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.6","level":"2.9","list_caption":"Figure: OpenEBS 控制平面架构","alt":"OpenEBS 控制平面架构","nro":58,"url":"../images/00704eQkgy1frr56m7z2sj31y010y17y.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"OpenEBS 控制平面架构","attributes":{},"skip":false,"key":"2.9.6"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.7","level":"2.9","list_caption":"Figure: OpenEBS 的存储卷管理","alt":"OpenEBS 的存储卷管理","nro":59,"url":"../images/00704eQkgy1frr57nm2mnj31xk11qqej.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"OpenEBS 的存储卷管理","attributes":{},"skip":false,"key":"2.9.7"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.8","level":"2.9","list_caption":"Figure: Hadoop YARN 迁移到 Kubernetes的示例","alt":"Hadoop YARN 迁移到 Kubernetes的示例","nro":60,"url":"../images/00704eQkgy1frr58ebf2lj323o11219r.jpg","index":8,"caption_template":"图片 - _CAPTION_","label":"Hadoop YARN 迁移到 Kubernetes的示例","attributes":{},"skip":false,"key":"2.9.8"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.9","level":"2.9","list_caption":"Figure: Spark on Yarn with Kubernetes","alt":"Spark on Yarn with Kubernetes","nro":61,"url":"../images/00704eQkgy1frr59gzzwsj32gg16k4qp.jpg","index":9,"caption_template":"图片 - _CAPTION_","label":"Spark on Yarn with Kubernetes","attributes":{},"skip":false,"key":"2.9.9"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.10","level":"2.9","list_caption":"Figure: 云原生与12因素应用","alt":"云原生与12因素应用","nro":62,"url":"../images/00704eQkgy1frr5arzvetj31no12mdre.jpg","index":10,"caption_template":"图片 - _CAPTION_","label":"云原生与12因素应用","attributes":{},"skip":false,"key":"2.9.10"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.11","level":"2.9","list_caption":"Figure: 云原生编程语言","alt":"云原生编程语言","nro":63,"url":"../images/00704eQkgy1frr5c8bwmtj31ou152qc3.jpg","index":11,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言","attributes":{},"skip":false,"key":"2.9.11"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.12","level":"2.9","list_caption":"Figure: Gitkube","alt":"Gitkube","nro":64,"url":"../images/00704eQkgy1frr5bulhuhj329m10iwua.jpg","index":12,"caption_template":"图片 - _CAPTION_","label":"Gitkube","attributes":{},"skip":false,"key":"2.9.12"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.13","level":"2.9","list_caption":"Figure: Kuberentes中的流量管理","alt":"Kuberentes中的流量管理","nro":65,"url":"../images/00704eQkgy1frr5dsurx6j320i140tpf.jpg","index":13,"caption_template":"图片 - _CAPTION_","label":"Kuberentes中的流量管理","attributes":{},"skip":false,"key":"2.9.13"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.14","level":"2.9","list_caption":"Figure: Istio Service Mesh架构图","alt":"Istio Service Mesh架构图","nro":66,"url":"../images/00704eQkgy1frr5exqm7kj320u18mh2t.jpg","index":14,"caption_template":"图片 - _CAPTION_","label":"Istio Service Mesh架构图","attributes":{},"skip":false,"key":"2.9.14"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.15","level":"2.9","list_caption":"Figure: Service Mesh架构","alt":"Service Mesh架构","nro":67,"url":"../images/00704eQkgy1frr5fxzoltj32f81akqr2.jpg","index":15,"caption_template":"图片 - _CAPTION_","label":"Service Mesh架构","attributes":{},"skip":false,"key":"2.9.15"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.16","level":"2.9","list_caption":"Figure: Envoy proxy架构图","alt":"Envoy proxy架构图","nro":68,"url":"../images/envoy-arch.png","index":16,"caption_template":"图片 - _CAPTION_","label":"Envoy proxy架构图","attributes":{},"skip":false,"key":"2.9.16"},{"backlink":"cloud-native/define-cloud-native-app.html#fig2.10.1","level":"2.10","list_caption":"Figure: 云原生应用模型","alt":"云原生应用模型","nro":69,"url":"../images/cloud-native-app-model.png","index":1,"caption_template":"图片 - _CAPTION_","label":"云原生应用模型","attributes":{},"skip":false,"key":"2.10.1"},{"backlink":"cloud-native/define-cloud-native-app.html#fig2.10.2","level":"2.10","list_caption":"Figure: 云原生应用模型中的目标角色","alt":"云原生应用模型中的目标角色","nro":70,"url":"../images/roles.png","index":2,"caption_template":"图片 - _CAPTION_","label":"云原生应用模型中的目标角色","attributes":{},"skip":false,"key":"2.10.2"},{"backlink":"concepts/index.html#fig3.1.1","level":"3.1","list_caption":"Figure: Borg架构","alt":"Borg架构","nro":71,"url":"../images/borg.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Borg架构","attributes":{},"skip":false,"key":"3.1.1"},{"backlink":"concepts/index.html#fig3.1.2","level":"3.1","list_caption":"Figure: Kubernetes架构","alt":"Kubernetes架构","nro":72,"url":"../images/architecture.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes架构","attributes":{},"skip":false,"key":"3.1.2"},{"backlink":"concepts/index.html#fig3.1.3","level":"3.1","list_caption":"Figure: Kuberentes架构(图片来自于网络)","alt":"Kuberentes架构(图片来自于网络)","nro":73,"url":"../images/kubernetes-high-level-component-archtecture.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Kuberentes架构(图片来自于网络)","attributes":{},"skip":false,"key":"3.1.3"},{"backlink":"concepts/index.html#fig3.1.4","level":"3.1","list_caption":"Figure: kubernetes整体架构示意图","alt":"kubernetes整体架构示意图","nro":74,"url":"../images/kubernetes-whole-arch.png","index":4,"caption_template":"图片 - _CAPTION_","label":"kubernetes整体架构示意图","attributes":{},"skip":false,"key":"3.1.4"},{"backlink":"concepts/index.html#fig3.1.5","level":"3.1","list_caption":"Figure: Kubernetes master架构示意图","alt":"Kubernetes master架构示意图","nro":75,"url":"../images/kubernetes-master-arch.png","index":5,"caption_template":"图片 - _CAPTION_","label":"Kubernetes master架构示意图","attributes":{},"skip":false,"key":"3.1.5"},{"backlink":"concepts/index.html#fig3.1.6","level":"3.1","list_caption":"Figure: kubernetes node架构示意图","alt":"kubernetes node架构示意图","nro":76,"url":"../images/kubernetes-node-arch.png","index":6,"caption_template":"图片 - _CAPTION_","label":"kubernetes node架构示意图","attributes":{},"skip":false,"key":"3.1.6"},{"backlink":"concepts/index.html#fig3.1.7","level":"3.1","list_caption":"Figure: Kubernetes分层架构示意图","alt":"Kubernetes分层架构示意图","nro":77,"url":"../images/kubernetes-layers-arch.png","index":7,"caption_template":"图片 - _CAPTION_","label":"Kubernetes分层架构示意图","attributes":{},"skip":false,"key":"3.1.7"},{"backlink":"concepts/concepts.html#fig3.1.1.1","level":"3.1.1","list_caption":"Figure: Kubernetes 分层架构示意图","alt":"Kubernetes 分层架构示意图","nro":78,"url":"../images/006tNc79ly1fzniqvmi51j31gq0s0q5u.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 分层架构示意图","attributes":{},"skip":false,"key":"3.1.1.1"},{"backlink":"concepts/open-interfaces.html#fig3.1.3.1","level":"3.1.3","list_caption":"Figure: 开放接口","alt":"开放接口","nro":79,"url":"../images/open-interfaces.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"开放接口","attributes":{},"skip":false,"key":"3.1.3.1"},{"backlink":"concepts/cri.html#fig3.1.3.1.1","level":"3.1.3.1","list_caption":"Figure: CRI架构-图片来自kubernetes blog","alt":"CRI架构-图片来自kubernetes blog","nro":80,"url":"../images/cri-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"CRI架构-图片来自kubernetes blog","attributes":{},"skip":false,"key":"3.1.3.1.1"},{"backlink":"concepts/flannel.html#fig3.2.1.1","level":"3.2.1","list_caption":"Figure: flannel网络架构(图片来自openshift)","alt":"flannel网络架构(图片来自openshift)","nro":81,"url":"../images/flannel-networking.png","index":1,"caption_template":"图片 - _CAPTION_","label":"flannel网络架构(图片来自openshift)","attributes":{},"skip":false,"key":"3.2.1.1"},{"backlink":"concepts/calico.html#fig3.2.2.1","level":"3.2.2","list_caption":"Figure: Calico","alt":"Calico","nro":82,"url":"../images/006tNc79gy1fz65bt7ieej30c90bsgn2.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Calico","attributes":{},"skip":false,"key":"3.2.2.1"},{"backlink":"concepts/calico.html#fig3.2.2.2","level":"3.2.2","list_caption":"Figure: CRI架构-图片来自https://www.jianshu.com/p/f0177b84de66","alt":"CRI架构-图片来自https://www.jianshu.com/p/f0177b84de66","nro":83,"url":"../images/calico.png","index":2,"caption_template":"图片 - _CAPTION_","label":"CRI架构-图片来自https://www.jianshu.com/p/f0177b84de66","attributes":{},"skip":false,"key":"3.2.2.2"},{"backlink":"concepts/cilium.html#fig3.2.3.1","level":"3.2.3","list_caption":"Figure: Cilium","alt":"Cilium","nro":84,"url":"../images/006tNbRwly1fwqi98i51ij30sc0j80zn.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Cilium","attributes":{},"skip":false,"key":"3.2.3.1"},{"backlink":"concepts/cilium-concepts.html#fig3.2.3.1.1","level":"3.2.3.1","list_caption":"Figure: Cilium 组件(来自 Cilium 官网)","alt":"Cilium 组件(来自 Cilium 官网)","nro":85,"url":"../images/006tNbRwly1fwztvhg0gmj318z143tdv.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Cilium 组件(来自 Cilium 官网)","attributes":{},"skip":false,"key":"3.2.3.1.1"},{"backlink":"concepts/cilium-concepts.html#fig3.2.3.1.2","level":"3.2.3.1","list_caption":"Figure: Cilium 网络配置策略","alt":"Cilium 网络配置策略","nro":86,"url":"../images/006tNbRwly1fwzreaalj6j30dz0dy3z3.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Cilium 网络配置策略","attributes":{},"skip":false,"key":"3.2.3.1.2"},{"backlink":"concepts/pod-overview.html#fig3.4.1.1","level":"3.4.1","list_caption":"Figure: pod diagram","alt":"pod diagram","nro":87,"url":"../images/pod-overview.png","index":1,"caption_template":"图片 - _CAPTION_","label":"pod diagram","attributes":{},"skip":false,"key":"3.4.1.1"},{"backlink":"concepts/pod.html#fig3.4.2.1","level":"3.4.2","list_caption":"Figure: Pod示意图","alt":"Pod示意图","nro":88,"url":"../images/pod-overview.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Pod示意图","attributes":{},"skip":false,"key":"3.4.2.1"},{"backlink":"concepts/pod.html#fig3.4.2.2","level":"3.4.2","list_caption":"Figure: Pod Cheatsheet","alt":"Pod Cheatsheet","nro":89,"url":"../images/kubernetes-pod-cheatsheet.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Pod Cheatsheet","attributes":{},"skip":false,"key":"3.4.2.2"},{"backlink":"concepts/pause-container.html#fig3.4.4.1","level":"3.4.4","list_caption":"Figure: Pause容器","alt":"Pause容器","nro":90,"url":"../images/pause-container.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Pause容器","attributes":{},"skip":false,"key":"3.4.4.1"},{"backlink":"concepts/pod-lifecycle.html#fig3.4.6.1","level":"3.4.6","list_caption":"Figure: Pod的生命周期示意图(图片来自网络)","alt":"Pod的生命周期示意图(图片来自网络)","nro":91,"url":"../images/kubernetes-pod-life-cycle.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Pod的生命周期示意图(图片来自网络)","attributes":{},"skip":false,"key":"3.4.6.1"},{"backlink":"concepts/label.html#fig3.5.3.1","level":"3.5.3","list_caption":"Figure: label示意图","alt":"label示意图","nro":92,"url":"../images/labels.png","index":1,"caption_template":"图片 - _CAPTION_","label":"label示意图","attributes":{},"skip":false,"key":"3.5.3.1"},{"backlink":"concepts/horizontal-pod-autoscaling.html#fig3.6.7.1","level":"3.6.7","list_caption":"Figure: horizontal-pod-autoscaler","alt":"horizontal-pod-autoscaler","nro":93,"url":"../images/horizontal-pod-autoscaler.png","index":1,"caption_template":"图片 - _CAPTION_","label":"horizontal-pod-autoscaler","attributes":{},"skip":false,"key":"3.6.7.1"},{"backlink":"concepts/service.html#fig3.7.1.1","level":"3.7.1","list_caption":"Figure: userspace代理模式下Service概览图","alt":"userspace代理模式下Service概览图","nro":94,"url":"../images/services-userspace-overview.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"userspace代理模式下Service概览图","attributes":{},"skip":false,"key":"3.7.1.1"},{"backlink":"concepts/service.html#fig3.7.1.2","level":"3.7.1","list_caption":"Figure: iptables代理模式下Service概览图","alt":"iptables代理模式下Service概览图","nro":95,"url":"../images/services-iptables-overview.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"iptables代理模式下Service概览图","attributes":{},"skip":false,"key":"3.7.1.2"},{"backlink":"concepts/service.html#fig3.7.1.3","level":"3.7.1","list_caption":"Figure: ipvs代理模式下Service概览图","alt":"ipvs代理模式下Service概览图","nro":96,"url":"../images/service-ipvs-overview.png","index":3,"caption_template":"图片 - _CAPTION_","label":"ipvs代理模式下Service概览图","attributes":{},"skip":false,"key":"3.7.1.3"},{"backlink":"concepts/service-catalog.html#fig3.10.5.1","level":"3.10.5","list_caption":"Figure: Service Catalog Architecture","alt":"Service Catalog Architecture","nro":97,"url":"../images/service-catalog-architecture.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Service Catalog Architecture","attributes":{},"skip":false,"key":"3.10.5.1"},{"backlink":"concepts/service-catalog.html#fig3.10.5.2","level":"3.10.5","list_caption":"Figure: List Services","alt":"List Services","nro":98,"url":"../images/service-catalog-list.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"List Services","attributes":{},"skip":false,"key":"3.10.5.2"},{"backlink":"concepts/service-catalog.html#fig3.10.5.3","level":"3.10.5","list_caption":"Figure: Provision a Service","alt":"Provision a Service","nro":99,"url":"../images/service-catalog-provision.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Provision a Service","attributes":{},"skip":false,"key":"3.10.5.3"},{"backlink":"concepts/service-catalog.html#fig3.10.5.4","level":"3.10.5","list_caption":"Figure: Bind to a managed service","alt":"Bind to a managed service","nro":100,"url":"../images/service-catalog-bind.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Bind to a managed service","attributes":{},"skip":false,"key":"3.10.5.4"},{"backlink":"concepts/service-catalog.html#fig3.10.5.5","level":"3.10.5","list_caption":"Figure: Map connection credentials","alt":"Map connection credentials","nro":101,"url":"../images/service-catalog-map.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Map connection credentials","attributes":{},"skip":false,"key":"3.10.5.5"},{"backlink":"guide/using-kubectl.html#fig4.3.2.1","level":"4.3.2","list_caption":"Figure: kubectl cheatsheet","alt":"kubectl cheatsheet","nro":102,"url":"../images/kubernetes-kubectl-cheatsheet.png","index":1,"caption_template":"图片 - _CAPTION_","label":"kubectl cheatsheet","attributes":{},"skip":false,"key":"4.3.2.1"},{"backlink":"guide/using-kubectl.html#fig4.3.2.2","level":"4.3.2","list_caption":"Figure: 增加kubeclt命令的工具(图片来自网络)","alt":"增加kubeclt命令的工具(图片来自网络)","nro":103,"url":"../images/tools-to-supercharge-kubectl.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"增加kubeclt命令的工具(图片来自网络)","attributes":{},"skip":false,"key":"4.3.2.2"},{"backlink":"guide/using-kubectl.html#fig4.3.2.3","level":"4.3.2","list_caption":"Figure: 增强的kubectl命令","alt":"增强的kubectl命令","nro":104,"url":"../images/supercharged-kubectl.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"增强的kubectl命令","attributes":{},"skip":false,"key":"4.3.2.3"},{"backlink":"guide/using-kubectl.html#fig4.3.2.4","level":"4.3.2","list_caption":"Figure: kube-shell页面","alt":"kube-shell页面","nro":105,"url":"../images/kube-shell.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"kube-shell页面","attributes":{},"skip":false,"key":"4.3.2.4"},{"backlink":"guide/ip-masq-agent.html#fig4.4.5.1","level":"4.4.5","list_caption":"Figure: IP伪装代理示意图","alt":"IP伪装代理示意图","nro":106,"url":"../images/ip-masq.png","index":1,"caption_template":"图片 - _CAPTION_","label":"IP伪装代理示意图","attributes":{},"skip":false,"key":"4.4.5.1"},{"backlink":"guide/auth-with-kubeconfig-or-token.html#fig4.4.6.1","level":"4.4.6","list_caption":"Figure: kubeconfig文件","alt":"kubeconfig文件","nro":107,"url":"../images/brand-kubeconfig-yaml.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubeconfig文件","attributes":{},"skip":false,"key":"4.4.6.1"},{"backlink":"guide/authentication.html#fig4.4.7.1","level":"4.4.7","list_caption":"Figure: Kubernetes OpenID Connect Flow","alt":"Kubernetes OpenID Connect Flow","nro":108,"url":"../images/kubernetes-oidc-login.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes OpenID Connect Flow","attributes":{},"skip":false,"key":"4.4.7.1"},{"backlink":"guide/cabin-mobile-dashboard-for-kubernetes.html#fig4.5.6.1","level":"4.5.6","list_caption":"Figure: App Store","alt":"App Store","nro":109,"url":"../images/cabin-kubernetes-mobile-dashboard-1.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"App Store","attributes":{},"skip":false,"key":"4.5.6.1"},{"backlink":"guide/cabin-mobile-dashboard-for-kubernetes.html#fig4.5.6.2","level":"4.5.6","list_caption":"Figure: 在手机上操作Kubernetes集群","alt":"在手机上操作Kubernetes集群","nro":110,"url":"../images/cabin-kubernetes-mobile-dashboard-4.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"在手机上操作Kubernetes集群","attributes":{},"skip":false,"key":"4.5.6.2"},{"backlink":"guide/kubernetes-desktop-client.html#fig4.5.7.1","level":"4.5.7","list_caption":"Figure: Kubernetic客户端","alt":"Kubernetic客户端","nro":111,"url":"../images/kubernetic-desktop-ui.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetic客户端","attributes":{},"skip":false,"key":"4.5.7.1"},{"backlink":"guide/kubernator-kubernetes-ui.html#fig4.5.8.1","level":"4.5.8","list_caption":"Figure: Kubernator catalog页面","alt":"Kubernator catalog页面","nro":112,"url":"../images/kubernator-catalog.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernator catalog页面","attributes":{},"skip":false,"key":"4.5.8.1"},{"backlink":"guide/kubernator-kubernetes-ui.html#fig4.5.8.2","level":"4.5.8","list_caption":"Figure: Kubernator rbac页面","alt":"Kubernator rbac页面","nro":113,"url":"../images/kubernator-rbac.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernator rbac页面","attributes":{},"skip":false,"key":"4.5.8.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.1","level":"4.6.1","list_caption":"Figure: 流程图","alt":"流程图","nro":114,"url":"../images/how-to-use-kubernetes-with-istio.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"流程图","attributes":{},"skip":false,"key":"4.6.1.1"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.2","level":"4.6.1","list_caption":"Figure: API","alt":"API","nro":115,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"API","attributes":{},"skip":false,"key":"4.6.1.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.3","level":"4.6.1","list_caption":"Figure: wercker构建页面","alt":"wercker构建页面","nro":116,"url":"../images/k8s-app-monitor-agent-wercker.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"wercker构建页面","attributes":{},"skip":false,"key":"4.6.1.3"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.4","level":"4.6.1","list_caption":"Figure: 图表","alt":"图表","nro":117,"url":"../images/k8s-app-monitor-agent.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"图表","attributes":{},"skip":false,"key":"4.6.1.4"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.5","level":"4.6.1","list_caption":"Figure: Grafana页面","alt":"Grafana页面","nro":118,"url":"../images/k8s-app-monitor-istio-grafana.png","index":5,"caption_template":"图片 - _CAPTION_","label":"Grafana页面","attributes":{},"skip":false,"key":"4.6.1.5"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.6","level":"4.6.1","list_caption":"Figure: servicegraph页面","alt":"servicegraph页面","nro":119,"url":"../images/k8s-app-monitor-istio-servicegraph-dotviz.png","index":6,"caption_template":"图片 - _CAPTION_","label":"servicegraph页面","attributes":{},"skip":false,"key":"4.6.1.6"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.7","level":"4.6.1","list_caption":"Figure: Zipkin页面","alt":"Zipkin页面","nro":120,"url":"../images/k8s-app-monitor-istio-zipkin.png","index":7,"caption_template":"图片 - _CAPTION_","label":"Zipkin页面","attributes":{},"skip":false,"key":"4.6.1.7"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig4.6.2.1","level":"4.6.2","list_caption":"Figure: 将单体应用迁移到云原生(图片来自DevOpsDay Toronto)","alt":"将单体应用迁移到云原生(图片来自DevOpsDay Toronto)","nro":121,"url":"../images/migrating-monolith-to-kubernetes.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"将单体应用迁移到云原生(图片来自DevOpsDay Toronto)","attributes":{},"skip":false,"key":"4.6.2.1"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig4.6.2.2","level":"4.6.2","list_caption":"Figure: spark on yarn with kubernetes","alt":"spark on yarn with kubernetes","nro":122,"url":"../images/spark-on-yarn-with-kubernetes.png","index":2,"caption_template":"图片 - _CAPTION_","label":"spark on yarn with kubernetes","attributes":{},"skip":false,"key":"4.6.2.2"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig4.6.2.3","level":"4.6.2","list_caption":"Figure: Terms","alt":"Terms","nro":123,"url":"../images/terms-in-kubernetes-app-deployment.png","index":3,"caption_template":"图片 - _CAPTION_","label":"Terms","attributes":{},"skip":false,"key":"4.6.2.3"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig4.6.2.4","level":"4.6.2","list_caption":"Figure: 分解步骤解析","alt":"分解步骤解析","nro":124,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":4,"caption_template":"图片 - _CAPTION_","label":"分解步骤解析","attributes":{},"skip":false,"key":"4.6.2.4"},{"backlink":"practice/node-installation.html#fig5.2.7.1","level":"5.2.7","list_caption":"Figure: nginx欢迎页面","alt":"nginx欢迎页面","nro":125,"url":"../images/kubernetes-installation-test-nginx.png","index":1,"caption_template":"图片 - _CAPTION_","label":"nginx欢迎页面","attributes":{},"skip":false,"key":"5.2.7.1"},{"backlink":"practice/dashboard-addon-installation.html#fig5.2.9.1","level":"5.2.9","list_caption":"Figure: kubernetes dashboard","alt":"kubernetes dashboard","nro":126,"url":"../images/kubernetes-dashboard-raw.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes dashboard","attributes":{},"skip":false,"key":"5.2.9.1"},{"backlink":"practice/dashboard-addon-installation.html#fig5.2.9.2","level":"5.2.9","list_caption":"Figure: V1.6.3版本的dashboard界面","alt":"V1.6.3版本的dashboard界面","nro":127,"url":"../images/dashboard-v163.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"V1.6.3版本的dashboard界面","attributes":{},"skip":false,"key":"5.2.9.2"},{"backlink":"practice/dashboard-addon-installation.html#fig5.2.9.3","level":"5.2.9","list_caption":"Figure: pod无法正常启动","alt":"pod无法正常启动","nro":128,"url":"../images/dashboard-addon-installation001.png","index":3,"caption_template":"图片 - _CAPTION_","label":"pod无法正常启动","attributes":{},"skip":false,"key":"5.2.9.3"},{"backlink":"practice/heapster-addon-installation.html#fig5.2.10.1","level":"5.2.10","list_caption":"Figure: dashboard-heapster","alt":"dashboard-heapster","nro":129,"url":"../images/kubernetes-dashboard-with-heapster.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"dashboard-heapster","attributes":{},"skip":false,"key":"5.2.10.1"},{"backlink":"practice/heapster-addon-installation.html#fig5.2.10.2","level":"5.2.10","list_caption":"Figure: grafana","alt":"grafana","nro":130,"url":"../images/kubernetes-heapster-grafana.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"grafana","attributes":{},"skip":false,"key":"5.2.10.2"},{"backlink":"practice/heapster-addon-installation.html#fig5.2.10.3","level":"5.2.10","list_caption":"Figure: kubernetes-influxdb-heapster","alt":"kubernetes-influxdb-heapster","nro":131,"url":"../images/kubernetes-influxdb-heapster.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"kubernetes-influxdb-heapster","attributes":{},"skip":false,"key":"5.2.10.3"},{"backlink":"practice/heapster-addon-installation.html#fig5.2.10.4","level":"5.2.10","list_caption":"Figure: 修改grafana模板","alt":"修改grafana模板","nro":132,"url":"../images/grafana-dashboard-setting.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"修改grafana模板","attributes":{},"skip":false,"key":"5.2.10.4"},{"backlink":"practice/efk-addon-installation.html#fig5.2.11.1","level":"5.2.11","list_caption":"Figure: es-setting","alt":"es-setting","nro":133,"url":"../images/es-setting.png","index":1,"caption_template":"图片 - _CAPTION_","label":"es-setting","attributes":{},"skip":false,"key":"5.2.11.1"},{"backlink":"practice/efk-addon-installation.html#fig5.2.11.2","level":"5.2.11","list_caption":"Figure: es-home","alt":"es-home","nro":134,"url":"../images/kubernetes-efk-kibana.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"es-home","attributes":{},"skip":false,"key":"5.2.11.2"},{"backlink":"practice/traefik-ingress-installation.html#fig5.4.1.1","level":"5.4.1","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":135,"url":"../images/traefik-dashboard.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"5.4.1.1"},{"backlink":"practice/traefik-ingress-installation.html#fig5.4.1.2","level":"5.4.1","list_caption":"Figure: traefik-nginx","alt":"traefik-nginx","nro":136,"url":"../images/traefik-nginx.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"traefik-nginx","attributes":{},"skip":false,"key":"5.4.1.2"},{"backlink":"practice/traefik-ingress-installation.html#fig5.4.1.3","level":"5.4.1","list_caption":"Figure: traefik-guestbook","alt":"traefik-guestbook","nro":137,"url":"../images/traefik-guestbook.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"traefik-guestbook","attributes":{},"skip":false,"key":"5.4.1.3"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.1","level":"5.4.2","list_caption":"Figure: 使用dashboard来扩容","alt":"使用dashboard来扩容","nro":138,"url":"../images/dashbaord-scale.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"使用dashboard来扩容","attributes":{},"skip":false,"key":"5.4.2.1"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.2","level":"5.4.2","list_caption":"Figure: Traefik的UI","alt":"Traefik的UI","nro":139,"url":"../images/traefik-dashboard-locust.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Traefik的UI","attributes":{},"skip":false,"key":"5.4.2.2"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.3","level":"5.4.2","list_caption":"Figure: Locust启动界面","alt":"Locust启动界面","nro":140,"url":"../images/locust-start-swarming.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Locust启动界面","attributes":{},"skip":false,"key":"5.4.2.3"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.4","level":"5.4.2","list_caption":"Figure: Dashboard查看页面","alt":"Dashboard查看页面","nro":141,"url":"../images/sample-webapp-rc.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Dashboard查看页面","attributes":{},"skip":false,"key":"5.4.2.4"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.5","level":"5.4.2","list_caption":"Figure: Locust测试结果页面","alt":"Locust测试结果页面","nro":142,"url":"../images/locust-dashboard.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Locust测试结果页面","attributes":{},"skip":false,"key":"5.4.2.5"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig5.4.3.1","level":"5.4.3","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":143,"url":"../images/kubenetes-e2e-test.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"5.4.3.1"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig5.4.3.2","level":"5.4.3","list_caption":"Figure: locust测试页面","alt":"locust测试页面","nro":144,"url":"../images/kubernetes-locust-test.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"locust测试页面","attributes":{},"skip":false,"key":"5.4.3.2"},{"backlink":"practice/edge-node-configuration.html#fig5.4.4.1","level":"5.4.4","list_caption":"Figure: 边缘节点架构","alt":"边缘节点架构","nro":145,"url":"../images/kubernetes-edge-node-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"边缘节点架构","attributes":{},"skip":false,"key":"5.4.4.1"},{"backlink":"practice/edge-node-configuration.html#fig5.4.4.2","level":"5.4.4","list_caption":"Figure: 使用域名来访问Kubernetes中的服务","alt":"使用域名来访问Kubernetes中的服务","nro":146,"url":"../images/accessing-kubernetes-services-with-dns-name.png","index":2,"caption_template":"图片 - _CAPTION_","label":"使用域名来访问Kubernetes中的服务","attributes":{},"skip":false,"key":"5.4.4.2"},{"backlink":"practice/configuring-dns.html#fig5.4.6.1.1","level":"5.4.6.1","list_caption":"Figure: DNS lookup flow","alt":"DNS lookup flow","nro":147,"url":"https://d33wubrfki0l68.cloudfront.net/340889cb80e81dcd19a16bc34697a7907e2b229a/24ad0/docs/tasks/administer-cluster/dns-custom-nameservers/dns.png","index":1,"caption_template":"图片 - _CAPTION_","label":"DNS lookup flow","attributes":{},"skip":false,"key":"5.4.6.1.1"},{"backlink":"practice/master-ha.html#fig5.5.1.1","level":"5.5.1","list_caption":"Figure: Master HA架构图","alt":"Master HA架构图","nro":148,"url":"../images/master-ha.JPG","index":1,"caption_template":"图片 - _CAPTION_","label":"Master HA架构图","attributes":{},"skip":false,"key":"5.5.1.1"},{"backlink":"practice/app-log-collection.html#fig5.5.3.1","level":"5.5.3","list_caption":"Figure: filebeat日志收集架构图","alt":"filebeat日志收集架构图","nro":149,"url":"../images/filebeat-log-collector.png","index":1,"caption_template":"图片 - _CAPTION_","label":"filebeat日志收集架构图","attributes":{},"skip":false,"key":"5.5.3.1"},{"backlink":"practice/app-log-collection.html#fig5.5.3.2","level":"5.5.3","list_caption":"Figure: Kibana页面","alt":"Kibana页面","nro":150,"url":"../images/filebeat-docker-test.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kibana页面","attributes":{},"skip":false,"key":"5.5.3.2"},{"backlink":"practice/app-log-collection.html#fig5.5.3.3","level":"5.5.3","list_caption":"Figure: filebeat收集的日志详细信息","alt":"filebeat收集的日志详细信息","nro":151,"url":"../images/kubernetes-filebeat-detail.png","index":3,"caption_template":"图片 - _CAPTION_","label":"filebeat收集的日志详细信息","attributes":{},"skip":false,"key":"5.5.3.3"},{"backlink":"practice/monitor.html#fig5.5.5.1","level":"5.5.5","list_caption":"Figure: Kubernetes集群中的监控","alt":"Kubernetes集群中的监控","nro":152,"url":"../images/monitoring-in-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes集群中的监控","attributes":{},"skip":false,"key":"5.5.5.1"},{"backlink":"practice/monitor.html#fig5.5.5.2","level":"5.5.5","list_caption":"Figure: kubernetes的容器命名规则示意图","alt":"kubernetes的容器命名规则示意图","nro":153,"url":"../images/kubernetes-container-naming-rule.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"kubernetes的容器命名规则示意图","attributes":{},"skip":false,"key":"5.5.5.2"},{"backlink":"practice/monitor.html#fig5.5.5.3","level":"5.5.5","list_caption":"Figure: Heapster架构图(改进版)","alt":"Heapster架构图(改进版)","nro":154,"url":"../images/kubernetes-heapster-monitoring.png","index":3,"caption_template":"图片 - _CAPTION_","label":"Heapster架构图(改进版)","attributes":{},"skip":false,"key":"5.5.5.3"},{"backlink":"practice/monitor.html#fig5.5.5.4","level":"5.5.5","list_caption":"Figure: 应用监控架构图","alt":"应用监控架构图","nro":155,"url":"../images/kubernetes-app-monitoring.png","index":4,"caption_template":"图片 - _CAPTION_","label":"应用监控架构图","attributes":{},"skip":false,"key":"5.5.5.4"},{"backlink":"practice/monitor.html#fig5.5.5.5","level":"5.5.5","list_caption":"Figure: 应用拓扑图","alt":"应用拓扑图","nro":156,"url":"../images/weave-scope-service-topology.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"应用拓扑图","attributes":{},"skip":false,"key":"5.5.5.5"},{"backlink":"practice/data-persistence-problem.html#fig5.5.6.1","level":"5.5.6","list_caption":"Figure: 日志持久化收集解决方案示意图","alt":"日志持久化收集解决方案示意图","nro":157,"url":"../images/log-persistence-logstash.png","index":1,"caption_template":"图片 - _CAPTION_","label":"日志持久化收集解决方案示意图","attributes":{},"skip":false,"key":"5.5.6.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig5.6.1.3.1","level":"5.6.1.3","list_caption":"Figure: 创建存储","alt":"创建存储","nro":158,"url":"../images/create-gluster-storage.png","index":1,"caption_template":"图片 - _CAPTION_","label":"创建存储","attributes":{},"skip":false,"key":"5.6.1.3.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig5.6.1.3.2","level":"5.6.1.3","list_caption":"Figure: Screen Shot 2017-03-24 at 11.09.34.png","alt":"Screen Shot 2017-03-24 at 11.09.34.png","nro":159,"url":"https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-24-at-11-09-341.png?w=440","index":2,"caption_template":"图片 - _CAPTION_","label":"Screen Shot 2017-03-24 at 11.09.34.png","attributes":{},"skip":false,"key":"5.6.1.3.2"},{"backlink":"practice/openebs.html#fig5.6.4.1","level":"5.6.4","list_caption":"Figure: OpenEBS集群数据平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","alt":"OpenEBS集群数据平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","nro":160,"url":"../images/OpenEBS-Data-Plane.png","index":1,"caption_template":"图片 - _CAPTION_","label":"OpenEBS集群数据平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","attributes":{},"skip":false,"key":"5.6.4.1"},{"backlink":"practice/openebs.html#fig5.6.4.2","level":"5.6.4","list_caption":"Figure: OpenEBS集群的控制平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","alt":"OpenEBS集群的控制平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","nro":161,"url":"../images/OpenEBS-Control-Plane.png","index":2,"caption_template":"图片 - _CAPTION_","label":"OpenEBS集群的控制平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","attributes":{},"skip":false,"key":"5.6.4.2"},{"backlink":"practice/using-openebs-for-persistent-storage.html#fig5.6.4.1.1","level":"5.6.4.1","list_caption":"Figure: Kubernetes iSCSI架构","alt":"Kubernetes iSCSI架构","nro":162,"url":"../images/iscsi-on-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes iSCSI架构","attributes":{},"skip":false,"key":"5.6.4.1.1"},{"backlink":"practice/using-heapster-to-get-object-metrics.html#fig5.7.1.1.1","level":"5.7.1.1","list_caption":"Figure: Heapster架构图","alt":"Heapster架构图","nro":163,"url":"../images/heapster-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Heapster架构图","attributes":{},"skip":false,"key":"5.7.1.1.1"},{"backlink":"practice/prometheus.html#fig5.7.2.1","level":"5.7.2","list_caption":"Figure: Prometheus 架构图","alt":"Prometheus 架构图","nro":164,"url":"../images/006tNbRwly1fwcgsn11fej311j0mjadw.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Prometheus 架构图","attributes":{},"skip":false,"key":"5.7.2.1"},{"backlink":"practice/using-prometheus-to-monitor-kuberentes-cluster.html#fig5.7.2.1.1","level":"5.7.2.1","list_caption":"Figure: Grafana页面","alt":"Grafana页面","nro":165,"url":"../images/kubernetes-prometheus-monitoring.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Grafana页面","attributes":{},"skip":false,"key":"5.7.2.1.1"},{"backlink":"practice/promql.html#fig5.7.2.2.1","level":"5.7.2.2","list_caption":"Figure: Prometheus 的查询页面","alt":"Prometheus 的查询页面","nro":166,"url":"../images/006tNbRwly1fwcl7v28rhj30xl0onadv.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Prometheus 的查询页面","attributes":{},"skip":false,"key":"5.7.2.2.1"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.1","level":"5.7.3","list_caption":"Figure: Vistio的集群级别可视化","alt":"Vistio的集群级别可视化","nro":167,"url":"../images/00704eQkgy1fshft5oxlwj318g0pe0wp.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Vistio的集群级别可视化","attributes":{},"skip":false,"key":"5.7.3.1"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.2","level":"5.7.3","list_caption":"Figure: Prometheus查询","alt":"Prometheus查询","nro":168,"url":"../images/00704eQkgy1fshg0vw25ij318g0jzqjq.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Prometheus查询","attributes":{},"skip":false,"key":"5.7.3.2"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.3","level":"5.7.3","list_caption":"Figure: vistio-api的期望输出","alt":"vistio-api的期望输出","nro":169,"url":"../images/00704eQkgy1fshi61t04oj310q17c0y1.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"vistio-api的期望输出","attributes":{},"skip":false,"key":"5.7.3.3"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.4","level":"5.7.3","list_caption":"Figure: Vistio主页面","alt":"Vistio主页面","nro":170,"url":"../images/00704eQkgy1fshi98duzgj318g0l2406.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Vistio主页面","attributes":{},"skip":false,"key":"5.7.3.4"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.5","level":"5.7.3","list_caption":"Figure: istio mesh的网络流量","alt":"istio mesh的网络流量","nro":171,"url":"../images/00704eQkgy1fshibdwcj3j318g0p8th1.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"istio mesh的网络流量","attributes":{},"skip":false,"key":"5.7.3.5"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.6","level":"5.7.3","list_caption":"Figure: 查明网络问题","alt":"查明网络问题","nro":172,"url":"../images/00704eQkgy1fshicc7or1j318g0p8ahr.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"查明网络问题","attributes":{},"skip":false,"key":"5.7.3.6"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.7","level":"5.7.3","list_caption":"Figure: vistio api的不正确输出","alt":"vistio api的不正确输出","nro":173,"url":"../images/00704eQkgy1fshie7wxkyj30ks0f4myd.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"vistio api的不正确输出","attributes":{},"skip":false,"key":"5.7.3.7"},{"backlink":"practice/opentracing.html#fig5.8.1.1","level":"5.8.1","list_caption":"Figure: Jaeger UI","alt":"Jaeger UI","nro":174,"url":"../images/006tNbRwly1fwjg48fh7xj31kw0wedrg.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Jaeger UI","attributes":{},"skip":false,"key":"5.8.1.1"},{"backlink":"practice/opentracing.html#fig5.8.1.2","level":"5.8.1","list_caption":"Figure: Chrome Inspector","alt":"Chrome Inspector","nro":175,"url":"../images/006tNbRwly1fwjkfbvfluj30y70hf0y9.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Chrome Inspector","attributes":{},"skip":false,"key":"5.8.1.2"},{"backlink":"practice/helm.html#fig5.9.1.1","level":"5.9.1","list_caption":"Figure: Helm 架构图(来自 IBM Developer Blog)","alt":"Helm 架构图(来自 IBM Developer Blog)","nro":176,"url":"../images/helm-chart.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Helm 架构图(来自 IBM Developer Blog)","attributes":{},"skip":false,"key":"5.9.1.1"},{"backlink":"practice/create-private-charts-repo.html#fig5.9.2.1","level":"5.9.2","list_caption":"Figure: Helm monocular界面","alt":"Helm monocular界面","nro":177,"url":"../images/helm-monocular-jimmysong.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Helm monocular界面","attributes":{},"skip":false,"key":"5.9.2.1"},{"backlink":"practice/ci-cd.html#fig5.10.1","level":"5.10","list_caption":"Figure: CI/CD with Kubernetes","alt":"CI/CD with Kubernetes","nro":178,"url":"../images/00704eQkgy1fsaxszh01vj30da0j2jvn.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CI/CD with Kubernetes","attributes":{},"skip":false,"key":"5.10.1"},{"backlink":"practice/ci-cd.html#fig5.10.2","level":"5.10","list_caption":"Figure: Kubernetes改变了应用的基础架构","alt":"Kubernetes改变了应用的基础架构","nro":179,"url":"../images/00704eQkgy1fsayashxz3j31c00w6aed.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes改变了应用的基础架构","attributes":{},"skip":false,"key":"5.10.2"},{"backlink":"practice/ci-cd.html#fig5.10.3","level":"5.10","list_caption":"Figure: Kubernetes中的CI/CD","alt":"Kubernetes中的CI/CD","nro":180,"url":"../images/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Kubernetes中的CI/CD","attributes":{},"skip":false,"key":"5.10.3"},{"backlink":"practice/ci-cd.html#fig5.10.4","level":"5.10","list_caption":"Figure: 云原生工作负载","alt":"云原生工作负载","nro":181,"url":"../images/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"云原生工作负载","attributes":{},"skip":false,"key":"5.10.4"},{"backlink":"practice/ci-cd.html#fig5.10.5","level":"5.10","list_caption":"Figure: 云原生工作负载映射到Kuberentes原语","alt":"云原生工作负载映射到Kuberentes原语","nro":182,"url":"../images/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"云原生工作负载映射到Kuberentes原语","attributes":{},"skip":false,"key":"5.10.5"},{"backlink":"practice/ci-cd.html#fig5.10.6","level":"5.10","list_caption":"Figure: spinnaker中的组件及角色交互关系","alt":"spinnaker中的组件及角色交互关系","nro":183,"url":"../images/00704eQkgy1fsaz2wirz9j31bs0vygsb.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"spinnaker中的组件及角色交互关系","attributes":{},"skip":false,"key":"5.10.6"},{"backlink":"practice/ci-cd.html#fig5.10.7","level":"5.10","list_caption":"Figure: Spinnaker部署流水线","alt":"Spinnaker部署流水线","nro":184,"url":"../images/00704eQkgy1fsaz3yo227j31c60mgdim.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Spinnaker部署流水线","attributes":{},"skip":false,"key":"5.10.7"},{"backlink":"practice/ci-cd.html#fig5.10.8","level":"5.10","list_caption":"Figure: Spinnaker的预发布流水线","alt":"Spinnaker的预发布流水线","nro":185,"url":"../images/00704eQkgy1fsaz50k2atj31bs0mitbn.jpg","index":8,"caption_template":"图片 - _CAPTION_","label":"Spinnaker的预发布流水线","attributes":{},"skip":false,"key":"5.10.8"},{"backlink":"practice/ci-cd.html#fig5.10.9","level":"5.10","list_caption":"Figure: Spinnaker的生产流水线","alt":"Spinnaker的生产流水线","nro":186,"url":"../images/00704eQkgy1fsaz5n5qs9j31by0motbm.jpg","index":9,"caption_template":"图片 - _CAPTION_","label":"Spinnaker的生产流水线","attributes":{},"skip":false,"key":"5.10.9"},{"backlink":"practice/ci-cd.html#fig5.10.10","level":"5.10","list_caption":"Figure: 可观察性","alt":"可观察性","nro":187,"url":"../images/00704eQkgy1fsazabn0b9j31by0w6791.jpg","index":10,"caption_template":"图片 - _CAPTION_","label":"可观察性","attributes":{},"skip":false,"key":"5.10.10"},{"backlink":"practice/ci-cd.html#fig5.10.11","level":"5.10","list_caption":"Figure: Prometheus生态系统中的组件","alt":"Prometheus生态系统中的组件","nro":188,"url":"../images/00704eQkgy1fsazcclee6j31c20w6n5y.jpg","index":11,"caption_template":"图片 - _CAPTION_","label":"Prometheus生态系统中的组件","attributes":{},"skip":false,"key":"5.10.11"},{"backlink":"practice/jenkins-ci-cd.html#fig5.10.1.1","level":"5.10.1","list_caption":"Figure: 基于Jenkins的持续集成与发布","alt":"基于Jenkins的持续集成与发布","nro":189,"url":"../images/kubernetes-jenkins-ci-cd.png","index":1,"caption_template":"图片 - _CAPTION_","label":"基于Jenkins的持续集成与发布","attributes":{},"skip":false,"key":"5.10.1.1"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.1","level":"5.10.2","list_caption":"Figure: OAuth注册","alt":"OAuth注册","nro":190,"url":"../images/github-oauth-register.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"OAuth注册","attributes":{},"skip":false,"key":"5.10.2.1"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.2","level":"5.10.2","list_caption":"Figure: OAuth key","alt":"OAuth key","nro":191,"url":"../images/github-oauth-drone-key.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"OAuth key","attributes":{},"skip":false,"key":"5.10.2.2"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.3","level":"5.10.2","list_caption":"Figure: Drone登陆界面","alt":"Drone登陆界面","nro":192,"url":"../images/drone-login-github.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Drone登陆界面","attributes":{},"skip":false,"key":"5.10.2.3"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.4","level":"5.10.2","list_caption":"Figure: Github启用repo设置","alt":"Github启用repo设置","nro":193,"url":"../images/drone-github-active.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Github启用repo设置","attributes":{},"skip":false,"key":"5.10.2.4"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.5","level":"5.10.2","list_caption":"Figure: Github单个repo设置","alt":"Github单个repo设置","nro":194,"url":"../images/drone-github-repo-setting.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Github单个repo设置","attributes":{},"skip":false,"key":"5.10.2.5"},{"backlink":"practice/manually-upgrade.html#fig5.11.1.1","level":"5.11.1","list_caption":"Figure: Kubernetes零宕机时间升级建议","alt":"Kubernetes零宕机时间升级建议","nro":195,"url":"../images/zero-downtime-kubernetes-upgrade-tips.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes零宕机时间升级建议","attributes":{},"skip":false,"key":"5.11.1.1"},{"backlink":"practice/manually-upgrade.html#fig5.11.1.2","level":"5.11.1","list_caption":"Figure: Kuberentes API对象的版本演进","alt":"Kuberentes API对象的版本演进","nro":196,"url":"../images/kubernetes-apversions-changes.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kuberentes API对象的版本演进","attributes":{},"skip":false,"key":"5.11.1.2"},{"backlink":"practice/dashboard-upgrade.html#fig5.11.2.1","level":"5.11.2","list_caption":"Figure: 登陆界面","alt":"登陆界面","nro":197,"url":"../images/kubernetes-dashboard-1.7.1-login.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"登陆界面","attributes":{},"skip":false,"key":"5.11.2.1"},{"backlink":"practice/dashboard-upgrade.html#fig5.11.2.2","level":"5.11.2","list_caption":"Figure: Dashboard首页","alt":"Dashboard首页","nro":198,"url":"../images/kubernetes-dashboard-1.7.1-default-page.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Dashboard首页","attributes":{},"skip":false,"key":"5.11.2.2"},{"backlink":"practice/dashboard-upgrade.html#fig5.11.2.3","level":"5.11.2","list_caption":"Figure: Dashboard用户空间页面","alt":"Dashboard用户空间页面","nro":199,"url":"../images/kubernetes-dashboard-1.7.1-brand.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Dashboard用户空间页面","attributes":{},"skip":false,"key":"5.11.2.3"},{"backlink":"practice/dashboard-upgrade.html#fig5.11.2.4","level":"5.11.2","list_caption":"Figure: kubeconfig文件","alt":"kubeconfig文件","nro":200,"url":"../images/brand-kubeconfig-yaml.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"kubeconfig文件","attributes":{},"skip":false,"key":"5.11.2.4"},{"backlink":"usecases/microservices.html#fig6.2.1","level":"6.2","list_caption":"Figure: 微服务关注的部分","alt":"微服务关注的部分","nro":201,"url":"../images/microservices-concerns.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"微服务关注的部分","attributes":{},"skip":false,"key":"6.2.1"},{"backlink":"usecases/service-discovery-in-microservices.html#fig6.2.1.1","level":"6.2.1","list_caption":"Figure: 微服务中的服务发现","alt":"微服务中的服务发现","nro":202,"url":"../images/service-discovery-in-microservices.png","index":1,"caption_template":"图片 - _CAPTION_","label":"微服务中的服务发现","attributes":{},"skip":false,"key":"6.2.1.1"},{"backlink":"usecases/microservices-for-java-developers.html#fig6.2.2.1","level":"6.2.2","list_caption":"Figure: Spring技术栈","alt":"Spring技术栈","nro":203,"url":"../images/spring-stack.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Spring技术栈","attributes":{},"skip":false,"key":"6.2.2.1"},{"backlink":"usecases/microservices-for-java-developers.html#fig6.2.2.2","level":"6.2.2","list_caption":"Figure: Spring Boot的知识点","alt":"Spring Boot的知识点","nro":204,"url":"../images/spring-boot-note-spots.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Spring Boot的知识点","attributes":{},"skip":false,"key":"6.2.2.2"},{"backlink":"usecases/service-mesh.html#fig6.3.1","level":"6.3","list_caption":"Figure: 下一代异构微服务架构","alt":"下一代异构微服务架构","nro":205,"url":"../images/polyglot-microservices-serivce-mesh.png","index":1,"caption_template":"图片 - _CAPTION_","label":"下一代异构微服务架构","attributes":{},"skip":false,"key":"6.3.1"},{"backlink":"usecases/service-mesh.html#fig6.3.2","level":"6.3","list_caption":"Figure: Service Mesh 架构图","alt":"Service Mesh 架构图","nro":206,"url":"../images/serivce-mesh-control-plane.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Service Mesh 架构图","attributes":{},"skip":false,"key":"6.3.2"},{"backlink":"usecases/service-mesh.html#fig6.3.3","level":"6.3","list_caption":"Figure: Istio vs linkerd","alt":"Istio vs linkerd","nro":207,"url":"../images/istio-vs-linkerd.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Istio vs linkerd","attributes":{},"skip":false,"key":"6.3.3"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.1","level":"6.3.1.1","list_caption":"Figure: Service Mesh模型对比","alt":"Service Mesh模型对比","nro":208,"url":"../images/0069RVTdly1fuafvbnuc7j310a0oqdm9.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Service Mesh模型对比","attributes":{},"skip":false,"key":"6.3.1.1.1"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.2","level":"6.3.1.1","list_caption":"Figure: 网状网络拓扑","alt":"网状网络拓扑","nro":209,"url":"../images/0069RVTdly1fuaie8jan8j310a0kitem.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"网状网络拓扑","attributes":{},"skip":false,"key":"6.3.1.1.2"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.3","level":"6.3.1.1","list_caption":"Figure: Service Mesh架构图","alt":"Service Mesh架构图","nro":210,"url":"../images/0069RVTdly1fuail4d24jj31080rkgr7.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Service Mesh架构图","attributes":{},"skip":false,"key":"6.3.1.1.3"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.4","level":"6.3.1.1","list_caption":"Figure: Istio Mixer","alt":"Istio Mixer","nro":211,"url":"../images/0069RVTdly1fuam4ln45jj30yu0o6wkc.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Istio Mixer","attributes":{},"skip":false,"key":"6.3.1.1.4"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.5","level":"6.3.1.1","list_caption":"Figure: Istio架构图","alt":"Istio架构图","nro":212,"url":"../images/0069RVTdly1fuamvq97cuj30yu0wg7cr.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Istio架构图","attributes":{},"skip":false,"key":"6.3.1.1.5"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.6","level":"6.3.1.1","list_caption":"Figure: OSI模型","alt":"OSI模型","nro":213,"url":"../images/0069RVTdly1fuanez4qbtj30v4183n7p.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"OSI模型","attributes":{},"skip":false,"key":"6.3.1.1.6"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.7","level":"6.3.1.1","list_caption":"Figure: 在L5解耦","alt":"在L5解耦","nro":214,"url":"../images/006tNbRwly1fubfiiryirj30w20ayjui.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"在L5解耦","attributes":{},"skip":false,"key":"6.3.1.1.7"},{"backlink":"usecases/comparing-service-mesh-technologies.html#fig6.3.1.2.1","level":"6.3.1.2","list_caption":"Figure: 客户端库","alt":"客户端库","nro":215,"url":"../images/006tNbRwly1fubnx0q9bpj30vq0pq465.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"客户端库","attributes":{},"skip":false,"key":"6.3.1.2.1"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.1","level":"6.3.1.3","list_caption":"Figure: Service Mesh架构图","alt":"Service Mesh架构图","nro":216,"url":"../images/006tNbRwly1fubs6ts3sgj30vo0osdnj.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Service Mesh架构图","attributes":{},"skip":false,"key":"6.3.1.3.1"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.2","level":"6.3.1.3","list_caption":"Figure: Ingress或边缘代理架构图","alt":"Ingress或边缘代理架构图","nro":217,"url":"../images/006tNbRwly1fubsk4v16hj30vo0bq75z.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Ingress或边缘代理架构图","attributes":{},"skip":false,"key":"6.3.1.3.2"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.3","level":"6.3.1.3","list_caption":"Figure: 路由器网格架构图","alt":"路由器网格架构图","nro":218,"url":"../images/006tNbRwly1fubsxrph3dj30vq0duq53.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"路由器网格架构图","attributes":{},"skip":false,"key":"6.3.1.3.3"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.4","level":"6.3.1.3","list_caption":"Figure: Proxy per Node架构图","alt":"Proxy per Node架构图","nro":219,"url":"../images/006tNbRwly1fubt5a97h7j30vq0bcq5p.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Proxy per Node架构图","attributes":{},"skip":false,"key":"6.3.1.3.4"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.5","level":"6.3.1.3","list_caption":"Figure: Sidecar代理/Fabric模型架构图","alt":"Sidecar代理/Fabric模型架构图","nro":220,"url":"../images/006tNbRwly1fubvi0dnhlj30vo0ekwhx.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Sidecar代理/Fabric模型架构图","attributes":{},"skip":false,"key":"6.3.1.3.5"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.6","level":"6.3.1.3","list_caption":"Figure: Sidecar代理/控制平面架构图","alt":"Sidecar代理/控制平面架构图","nro":221,"url":"../images/006tNbRwly1fubvr83wvgj30vq0mmdip.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"Sidecar代理/控制平面架构图","attributes":{},"skip":false,"key":"6.3.1.3.6"},{"backlink":"usecases/service-mesh-customization-and-integration.html#fig6.3.1.4.1","level":"6.3.1.4","list_caption":"Figure: nginMesh架构图","alt":"nginMesh架构图","nro":222,"url":"../images/006tNbRwly1fucp8yralaj30vu0sijx8.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"nginMesh架构图","attributes":{},"skip":false,"key":"6.3.1.4.1"},{"backlink":"usecases/service-mesh-customization-and-integration.html#fig6.3.1.4.2","level":"6.3.1.4","list_caption":"Figure: Mixer adapter","alt":"Mixer adapter","nro":223,"url":"../images/006tNbRwly1fucplat3l9j30vo0lw43l.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Mixer adapter","attributes":{},"skip":false,"key":"6.3.1.4.2"},{"backlink":"usecases/service-mesh-customization-and-integration.html#fig6.3.1.4.3","level":"6.3.1.4","list_caption":"Figure: SOFAMesh","alt":"SOFAMesh","nro":224,"url":"../images/mosn-with-service-mesh.png","index":3,"caption_template":"图片 - _CAPTION_","label":"SOFAMesh","attributes":{},"skip":false,"key":"6.3.1.4.3"},{"backlink":"usecases/service-mesh-customization-and-integration.html#fig6.3.1.4.4","level":"6.3.1.4","list_caption":"Figure: SOFAMosn模块架构图","alt":"SOFAMosn模块架构图","nro":225,"url":"../images/006tNbRwly1fucpc5fn8wj31kw0sfdnu.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"SOFAMosn模块架构图","attributes":{},"skip":false,"key":"6.3.1.4.4"},{"backlink":"usecases/istio.html#fig6.3.2.1","level":"6.3.2","list_caption":"Figure: Istio的mindmap","alt":"Istio的mindmap","nro":226,"url":"../images/istio-mindmap.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Istio的mindmap","attributes":{},"skip":false,"key":"6.3.2.1"},{"backlink":"usecases/istio.html#fig6.3.2.2","level":"6.3.2","list_caption":"Figure: Istio架构图","alt":"Istio架构图","nro":227,"url":"../images/istio-arch.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Istio架构图","attributes":{},"skip":false,"key":"6.3.2.2"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.1","level":"6.3.2.1","list_caption":"Figure: Istio 在 Kubernetes 中的部署架构图","alt":"Istio 在 Kubernetes 中的部署架构图","nro":228,"url":"../images/istio-deployment-architecture-diagram.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Istio 在 Kubernetes 中的部署架构图","attributes":{},"skip":false,"key":"6.3.2.1.1"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.2","level":"6.3.2.1","list_caption":"Figure: BookInfo Sample应用架构图","alt":"BookInfo Sample应用架构图","nro":229,"url":"../images/bookinfo-sample-arch.png","index":2,"caption_template":"图片 - _CAPTION_","label":"BookInfo Sample应用架构图","attributes":{},"skip":false,"key":"6.3.2.1.2"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.3","level":"6.3.2.1","list_caption":"Figure: BookInfo Sample页面","alt":"BookInfo Sample页面","nro":230,"url":"../images/bookinfo-sample.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"BookInfo Sample页面","attributes":{},"skip":false,"key":"6.3.2.1.3"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.4","level":"6.3.2.1","list_caption":"Figure: Istio Grafana界面","alt":"Istio Grafana界面","nro":231,"url":"../images/istio-grafana.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Istio Grafana界面","attributes":{},"skip":false,"key":"6.3.2.1.4"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.5","level":"6.3.2.1","list_caption":"Figure: Prometheus页面","alt":"Prometheus页面","nro":232,"url":"../images/istio-prometheus.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Prometheus页面","attributes":{},"skip":false,"key":"6.3.2.1.5"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.6","level":"6.3.2.1","list_caption":"Figure: Zipkin页面","alt":"Zipkin页面","nro":233,"url":"../images/istio-zipkin.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"Zipkin页面","attributes":{},"skip":false,"key":"6.3.2.1.6"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.7","level":"6.3.2.1","list_caption":"Figure: ServiceGraph页面","alt":"ServiceGraph页面","nro":234,"url":"../images/istio-servicegraph.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"ServiceGraph页面","attributes":{},"skip":false,"key":"6.3.2.1.7"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.1","level":"6.3.2.4","list_caption":"Figure: katacoda","alt":"katacoda","nro":235,"url":"../images/006tNc79gy1ftwe77v4u5j31kw0ziwtw.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"katacoda","attributes":{},"skip":false,"key":"6.3.2.4.1"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.2","level":"6.3.2.4","list_caption":"Figure: weavescope","alt":"weavescope","nro":236,"url":"../images/006tNc79gy1ftwhtmzhfej31kw0ziww1.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"weavescope","attributes":{},"skip":false,"key":"6.3.2.4.2"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.3","level":"6.3.2.4","list_caption":"Figure: weavescope","alt":"weavescope","nro":237,"url":"../images/006tNc79gy1ftwhvtu1vxj31kw0zitvc.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"weavescope","attributes":{},"skip":false,"key":"6.3.2.4.3"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.4","level":"6.3.2.4","list_caption":"Figure: Red Hat","alt":"Red Hat","nro":238,"url":"../images/006tNc79gy1ftwiolw1tyj31kw0zib29.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Red Hat","attributes":{},"skip":false,"key":"6.3.2.4.4"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.5","level":"6.3.2.4","list_caption":"Figure: Red Hat developers","alt":"Red Hat developers","nro":239,"url":"../images/006tNc79gy1ftwjyxiw1pj31kw0zi4qp.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Red Hat developers","attributes":{},"skip":false,"key":"6.3.2.4.5"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.6","level":"6.3.2.4","list_caption":"Figure: IBM developerWorks","alt":"IBM developerWorks","nro":240,"url":"../images/006tNc79gy1ftweryj0zrj31kw0zix6q.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"IBM developerWorks","attributes":{},"skip":false,"key":"6.3.2.4.6"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.7","level":"6.3.2.4","list_caption":"Figure: IBM developers","alt":"IBM developers","nro":241,"url":"../images/006tNc79gy1ftwesjg1e2j31kw0s8woq.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"IBM developers","attributes":{},"skip":false,"key":"6.3.2.4.7"},{"backlink":"usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html#fig6.3.2.5.1","level":"6.3.2.5","list_caption":"Figure: Sidecar 模式示意图","alt":"Sidecar 模式示意图","nro":242,"url":"../images/sidecar-pattern.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Sidecar 模式示意图","attributes":{},"skip":false,"key":"6.3.2.5.1"},{"backlink":"usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html#fig6.3.2.5.2","level":"6.3.2.5","list_caption":"Figure: Sidecar 流量劫持示意图","alt":"Sidecar 流量劫持示意图","nro":243,"url":"../images/envoy-sidecar-traffic-interception-jimmysong-blog.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Sidecar 流量劫持示意图","attributes":{},"skip":false,"key":"6.3.2.5.2"},{"backlink":"usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html#fig6.3.2.5.3","level":"6.3.2.5","list_caption":"Figure: iptables 调用链","alt":"iptables 调用链","nro":244,"url":"../images/iptables.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"iptables 调用链","attributes":{},"skip":false,"key":"6.3.2.5.3"},{"backlink":"usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html#fig6.3.2.5.4","level":"6.3.2.5","list_caption":"Figure: hook-connect 原理示意图","alt":"hook-connect 原理示意图","nro":245,"url":"../images/hook-connect.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"hook-connect 原理示意图","attributes":{},"skip":false,"key":"6.3.2.5.4"},{"backlink":"usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.html#fig6.3.2.6.1","level":"6.3.2.6","list_caption":"Figure: Bookinfo 示例","alt":"Bookinfo 示例","nro":246,"url":"../images/006tNbRwgy1fvlwjd3302j31bo0ro0x5.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Bookinfo 示例","attributes":{},"skip":false,"key":"6.3.2.6.1"},{"backlink":"usecases/linkerd.html#fig6.3.3.1","level":"6.3.3","list_caption":"Figure: source https://linkerd.io","alt":"source https://linkerd.io","nro":247,"url":"../images/diagram-individual-instance.png","index":1,"caption_template":"图片 - _CAPTION_","label":"source https://linkerd.io","attributes":{},"skip":false,"key":"6.3.3.1"},{"backlink":"usecases/linkerd.html#fig6.3.3.2","level":"6.3.3","list_caption":"Figure: Linkerd 部署架构(图片来自https://buoyant.io/2016/10/14/a-service-mesh-for-kubernetes-part-ii-pods-are-great-until-theyre-not/)","alt":"Linkerd 部署架构(图片来自https://buoyant.io/2016/10/14/a-service-mesh-for-kubernetes-part-ii-pods-are-great-until-theyre-not/)","nro":248,"url":"https://buoyant.io/wp-content/uploads/2017/07/buoyant-k8s-daemonset-mesh.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Linkerd 部署架构(图片来自https://buoyant.io/2016/10/14/a-service-mesh-for-kubernetes-part-ii-pods-are-great-until-theyre-not/)","attributes":{},"skip":false,"key":"6.3.3.2"},{"backlink":"usecases/linkerd.html#fig6.3.3.3","level":"6.3.3","list_caption":"Figure: 基于 dtab 的路由规则配置阶段发布","alt":"基于 dtab 的路由规则配置阶段发布","nro":249,"url":"https://buoyant.io/wp-content/uploads/2017/07/buoyant-4_override.png","index":3,"caption_template":"图片 - _CAPTION_","label":"基于 dtab 的路由规则配置阶段发布","attributes":{},"skip":false,"key":"6.3.3.3"},{"backlink":"usecases/linkerd.html#fig6.3.3.4","level":"6.3.3","list_caption":"Figure: Linkerd ingress controller","alt":"Linkerd ingress controller","nro":250,"url":"https://buoyant.io/wp-content/uploads/2017/07/buoyant-k8s-hello-world-ingress-controller-1.png","index":4,"caption_template":"图片 - _CAPTION_","label":"Linkerd ingress controller","attributes":{},"skip":false,"key":"6.3.3.4"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.1","level":"6.3.3.1","list_caption":"Figure: Jenkins pipeline","alt":"Jenkins pipeline","nro":251,"url":"../images/linkerd-jenkins-pipeline.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Jenkins pipeline","attributes":{},"skip":false,"key":"6.3.3.1.1"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.2","level":"6.3.3.1","list_caption":"Figure: Jenkins config","alt":"Jenkins config","nro":252,"url":"../images/linkerd-jenkins.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Jenkins config","attributes":{},"skip":false,"key":"6.3.3.1.2"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.3","level":"6.3.3.1","list_caption":"Figure: namerd","alt":"namerd","nro":253,"url":"../images/namerd-internal.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"namerd","attributes":{},"skip":false,"key":"6.3.3.1.3"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.4","level":"6.3.3.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":254,"url":"../images/linkerd-helloworld-outgoing.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"6.3.3.1.4"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.5","level":"6.3.3.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":255,"url":"../images/linkerd-helloworld-incoming.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"6.3.3.1.5"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.6","level":"6.3.3.1","list_caption":"Figure: linkerd性能监控","alt":"linkerd性能监控","nro":256,"url":"../images/linkerd-grafana.png","index":6,"caption_template":"图片 - _CAPTION_","label":"linkerd性能监控","attributes":{},"skip":false,"key":"6.3.3.1.6"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.7","level":"6.3.3.1","list_caption":"Figure: Linkerd ingress controller","alt":"Linkerd ingress controller","nro":257,"url":"../images/linkerd-ingress-controller.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Linkerd ingress controller","attributes":{},"skip":false,"key":"6.3.3.1.7"},{"backlink":"usecases/conduit-installation.html#fig6.3.4.2.1","level":"6.3.4.2","list_caption":"Figure: Conduit dashboard","alt":"Conduit dashboard","nro":258,"url":"../images/conduit-dashboard.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Conduit dashboard","attributes":{},"skip":false,"key":"6.3.4.2.1"},{"backlink":"usecases/envoy.html#fig6.3.5.1","level":"6.3.5","list_caption":"Figure: 负载均衡器的特性以及拓扑类型","alt":"负载均衡器的特性以及拓扑类型","nro":259,"url":"../images/load-balancing-and-proxing.png","index":1,"caption_template":"图片 - _CAPTION_","label":"负载均衡器的特性以及拓扑类型","attributes":{},"skip":false,"key":"6.3.5.1"},{"backlink":"usecases/envoy-terminology.html#fig6.3.5.1.1","level":"6.3.5.1","list_caption":"Figure: Envoy proxy 架构图","alt":"Envoy proxy 架构图","nro":260,"url":"../images/envoy-arch.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Envoy proxy 架构图","attributes":{},"skip":false,"key":"6.3.5.1.1"},{"backlink":"usecases/envoy-front-proxy.html#fig6.3.5.2.1","level":"6.3.5.2","list_caption":"Figure: Front proxy 部署结构图(转自https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/front_proxy)","alt":"Front proxy 部署结构图(转自https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/front_proxy)","nro":261,"url":"../images/envoyproxy-docker-compose.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Front proxy 部署结构图(转自https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/front_proxy)","attributes":{},"skip":false,"key":"6.3.5.2.1"},{"backlink":"usecases/envoy-mesh-in-kubernetes-tutorial.html#fig6.3.5.3.1","level":"6.3.5.3","list_caption":"Figure: Envoy Mesh架构图","alt":"Envoy Mesh架构图","nro":262,"url":"../images/envoy-mesh-in-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Envoy Mesh架构图","attributes":{},"skip":false,"key":"6.3.5.3.1"},{"backlink":"usecases/big-data.html#fig6.4.1","level":"6.4","list_caption":"Figure: Spark on yarn with kubernetes","alt":"Spark on yarn with kubernetes","nro":263,"url":"../images/spark-on-yarn-with-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Spark on yarn with kubernetes","attributes":{},"skip":false,"key":"6.4.1"},{"backlink":"usecases/big-data.html#fig6.4.2","level":"6.4","list_caption":"Figure: 在kubernetes上使用多种调度方式","alt":"在kubernetes上使用多种调度方式","nro":264,"url":"../images/spark-on-kubernetes-with-different-schedulers.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"在kubernetes上使用多种调度方式","attributes":{},"skip":false,"key":"6.4.2"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig6.4.1.1","level":"6.4.1","list_caption":"Figure: spark master ui","alt":"spark master ui","nro":265,"url":"../images/spark-ui.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"spark master ui","attributes":{},"skip":false,"key":"6.4.1.1"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig6.4.1.2","level":"6.4.1","list_caption":"Figure: zeppelin ui","alt":"zeppelin ui","nro":266,"url":"../images/zeppelin-ui.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"zeppelin ui","attributes":{},"skip":false,"key":"6.4.1.2"},{"backlink":"usecases/serverless.html#fig6.5.1","level":"6.5","list_caption":"Figure: Serverless Landscape","alt":"Serverless Landscape","nro":267,"url":"../images/006tNbRwly1fx0ie2kb90j31kw0ynha3.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Serverless Landscape","attributes":{},"skip":false,"key":"6.5.1"},{"backlink":"usecases/serverless.html#fig6.5.2","level":"6.5","list_caption":"Figure: 从物理机到函数计算","alt":"从物理机到函数计算","nro":268,"url":"../images/from-bare-metal-to-functions.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"从物理机到函数计算","attributes":{},"skip":false,"key":"6.5.2"},{"backlink":"usecases/serverless.html#fig6.5.3","level":"6.5","list_caption":"Figure: FaaS Landscape","alt":"FaaS Landscape","nro":269,"url":"../images/redpoint-faas-landscape.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"FaaS Landscape","attributes":{},"skip":false,"key":"6.5.3"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.1","level":"6.5.1","list_caption":"Figure: Serverless 在云原生技术中的地位","alt":"Serverless 在云原生技术中的地位","nro":270,"url":"../images/cloud-landscape-zh.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Serverless 在云原生技术中的地位","attributes":{},"skip":false,"key":"6.5.1.1"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.2","level":"6.5.1","list_caption":"Figure: 服务端软件的运行环境","alt":"服务端软件的运行环境","nro":271,"url":"../images/serverless-server-side-software.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"服务端软件的运行环境","attributes":{},"skip":false,"key":"6.5.1.2"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.3","level":"6.5.1","list_caption":"Figure: FaaS应用架构","alt":"FaaS应用架构","nro":272,"url":"../images/serverless-faas-platform.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"FaaS应用架构","attributes":{},"skip":false,"key":"6.5.1.3"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.4","level":"6.5.1","list_caption":"Figure: Serverless 中的函数定义","alt":"Serverless 中的函数定义","nro":273,"url":"../images/006y8mN6ly1g7ldey3l7gj31ti0mwta9.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Serverless 中的函数定义","attributes":{},"skip":false,"key":"6.5.1.4"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.5","level":"6.5.1","list_caption":"Figure: FaaS 中的函数","alt":"FaaS 中的函数","nro":274,"url":"../images/006y8mN6ly1g7ldhm7bxyj31040u0q5n.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"FaaS 中的函数","attributes":{},"skip":false,"key":"6.5.1.5"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.6","level":"6.5.1","list_caption":"Figure: 传统应用程序架构","alt":"传统应用程序架构","nro":275,"url":"../images/non-serverless-game-arch.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"传统应用程序架构","attributes":{},"skip":false,"key":"6.5.1.6"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.7","level":"6.5.1","list_caption":"Figure: Serverless架构","alt":"Serverless架构","nro":276,"url":"../images/serverless-game-arch.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Serverless架构","attributes":{},"skip":false,"key":"6.5.1.7"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.1","level":"6.5.2.1","list_caption":"Figure: OpenFaaS架构","alt":"OpenFaaS架构","nro":277,"url":"../images/openfaas-arch.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"OpenFaaS架构","attributes":{},"skip":false,"key":"6.5.2.1.1"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.2","level":"6.5.2.1","list_caption":"Figure: OpenFaaS Prometheus","alt":"OpenFaaS Prometheus","nro":278,"url":"../images/openfaas-prometheus.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"OpenFaaS Prometheus","attributes":{},"skip":false,"key":"6.5.2.1.2"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.3","level":"6.5.2.1","list_caption":"Figure: OpenFaas Grafana监控","alt":"OpenFaas Grafana监控","nro":279,"url":"../images/openfaas-grafana.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"OpenFaas Grafana监控","attributes":{},"skip":false,"key":"6.5.2.1.3"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.4","level":"6.5.2.1","list_caption":"Figure: OpenFaas Dashboard","alt":"OpenFaas Dashboard","nro":280,"url":"../images/openfaas-deploy-a-function.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"OpenFaas Dashboard","attributes":{},"skip":false,"key":"6.5.2.1.4"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.5","level":"6.5.2.1","list_caption":"Figure: NodeInfo执行结果","alt":"NodeInfo执行结果","nro":281,"url":"../images/openfaas-nodeinfo.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"NodeInfo执行结果","attributes":{},"skip":false,"key":"6.5.2.1.5"},{"backlink":"usecases/knative.html#fig6.5.3.1","level":"6.5.3","list_caption":"Figure: Knative logo","alt":"Knative logo","nro":282,"url":"https://tva1.sinaimg.cn/large/006y8mN6ly1g7pg0iwbzfj30d8080dfp.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Knative logo","attributes":{},"skip":false,"key":"6.5.3.1"},{"backlink":"usecases/knative.html#fig6.5.3.2","level":"6.5.3","list_caption":"Figure: Knative 受众(图片来自 knative.dev)","alt":"Knative 受众(图片来自 knative.dev)","nro":283,"url":"https://tva1.sinaimg.cn/large/006y8mN6ly1g7po5i7cgqj31ap0u075l.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Knative 受众(图片来自 knative.dev)","attributes":{},"skip":false,"key":"6.5.3.2"},{"backlink":"usecases/oam.html#fig6.6.1.1","level":"6.6.1","list_caption":"Figure: OAM 的原理","alt":"OAM 的原理","nro":284,"url":"../images/oam-principle.png","index":1,"caption_template":"图片 - _CAPTION_","label":"OAM 的原理","attributes":{},"skip":false,"key":"6.6.1.1"},{"backlink":"usecases/edge-computing.html#fig6.7.1","level":"6.7","list_caption":"Figure: KubeEdge logo","alt":"KubeEdge logo","nro":285,"url":"https://tva1.sinaimg.cn/large/006y8mN6ly1g7vfsugr2fj306y06yjra.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"KubeEdge logo","attributes":{},"skip":false,"key":"6.7.1"},{"backlink":"develop/sigs-and-working-group.html#fig7.2.1","level":"7.2","list_caption":"Figure: Kubernetes SIG","alt":"Kubernetes SIG","nro":286,"url":"../images/kubernetes-sigs.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes SIG","attributes":{},"skip":false,"key":"7.2.1"},{"backlink":"develop/testing.html#fig7.4.1","level":"7.4","list_caption":"Figure: test-infra架构图(图片来自官方GitHub)","alt":"test-infra架构图(图片来自官方GitHub)","nro":287,"url":"../images/kubernetes-test-architecture.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"test-infra架构图(图片来自官方GitHub)","attributes":{},"skip":false,"key":"7.4.1"},{"backlink":"develop/client-go-sample.html#fig7.5.1","level":"7.5","list_caption":"Figure: 使用kubernetes dashboard进行故障排查","alt":"使用kubernetes dashboard进行故障排查","nro":288,"url":"../images/kubernetes-client-go-sample-update.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"使用kubernetes dashboard进行故障排查","attributes":{},"skip":false,"key":"7.5.1"},{"backlink":"cloud-native/cncf.html#fig8.1.1","level":"8.1","list_caption":"Figure: CNCF landscape","alt":"CNCF landscape","nro":289,"url":"../images/006tNbRwly1fxmx633ymqj31dp0u0kjn.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF landscape","attributes":{},"skip":false,"key":"8.1.1"},{"backlink":"cloud-native/cncf.html#fig8.1.2","level":"8.1","list_caption":"Figure: CNCF项目成熟度级别","alt":"CNCF项目成熟度级别","nro":290,"url":"../images/cncf-graduation-criteria-v2.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"CNCF项目成熟度级别","attributes":{},"skip":false,"key":"8.1.2"},{"backlink":"cloud-native/cncf-charter.html#fig8.2.1","level":"8.2","list_caption":"Figure: CNCF组织架构图","alt":"CNCF组织架构图","nro":291,"url":"../images/cncf-org-arch.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF组织架构图","attributes":{},"skip":false,"key":"8.2.1"},{"backlink":"cloud-native/cncf-charter.html#fig8.2.2","level":"8.2","list_caption":"Figure: 云原生的理想分层架构","alt":"云原生的理想分层架构","nro":292,"url":"../images/006tKfTcly1ft3zgjlisxj30n70ffjth.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"云原生的理想分层架构","attributes":{},"skip":false,"key":"8.2.2"},{"backlink":"cloud-native/cncf-sandbox-criteria.html#fig8.4.1","level":"8.4","list_caption":"Figure: sandbox 流程","alt":"sandbox 流程","nro":293,"url":"../images/sandbox-process.png","index":1,"caption_template":"图片 - _CAPTION_","label":"sandbox 流程","attributes":{},"skip":false,"key":"8.4.1"},{"backlink":"cloud-native/cncf-project-governing.html#fig8.5.1","level":"8.5","list_caption":"Figure: CNCF 项目的成熟度分类","alt":"CNCF 项目的成熟度分类","nro":294,"url":"../images/cncf-graduation.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF 项目的成熟度分类","attributes":{},"skip":false,"key":"8.5.1"},{"backlink":"cloud-native/cncf-project-governing.html#fig8.5.2","level":"8.5","list_caption":"Figure: CNCF中的项目运作","alt":"CNCF中的项目运作","nro":295,"url":"../images/006tNc79ly1g1yz80ag98j31cs0n2gr7.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"CNCF中的项目运作","attributes":{},"skip":false,"key":"8.5.2"},{"backlink":"cloud-native/cncf-project-governing.html#fig8.5.3","level":"8.5","list_caption":"Figure: CNCF项目成熟度级别","alt":"CNCF项目成熟度级别","nro":296,"url":"../images/cncf-graduation-criteria-v2.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"CNCF项目成熟度级别","attributes":{},"skip":false,"key":"8.5.3"},{"backlink":"appendix/material-share.html#fig9.3.1","level":"9.3","list_caption":"Figure: Kubernetes 资源图标示例","alt":"Kubernetes 资源图标示例","nro":297,"url":"../images/006tNc79ly1fzmnolp5ghj30z90u0gwf.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 资源图标示例","attributes":{},"skip":false,"key":"9.3.1"},{"backlink":"appendix/issues.html#fig9.6.1","level":"9.6","list_caption":"Figure: pvc-storage-limit","alt":"pvc-storage-limit","nro":298,"url":"../images/pvc-storage-limit.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"pvc-storage-limit","attributes":{},"skip":false,"key":"9.6.1"},{"backlink":"appendix/kubernetes-1.14-changelog.html#fig9.7.8.1","level":"9.7.8","list_caption":"Figure: 大鱿鱼:kubectl log","alt":"大鱿鱼:kubectl log","nro":299,"url":"../images/006tKfTcly1g1gbdpsdbgj303c03cwel.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"大鱿鱼:kubectl log","attributes":{},"skip":false,"key":"9.7.8.1"},{"backlink":"appendix/kubernetes-1.14-changelog.html#fig9.7.8.2","level":"9.7.8","list_caption":"Figure: Kubernetes 吉祥物 kubee-cuddle","alt":"Kubernetes 吉祥物 kubee-cuddle","nro":300,"url":"../images/006tKfTcly1g1gbjvx2ugj305k05mmx9.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 吉祥物 kubee-cuddle","attributes":{},"skip":false,"key":"9.7.8.2"},{"backlink":"appendix/kubernetes-1.15-changelog.html#fig9.7.9.1","level":"9.7.9","list_caption":"Figure: KubeAdmin Logo","alt":"KubeAdmin Logo","nro":301,"url":"https://d33wubrfki0l68.cloudfront.net/285b361256db9bb624c22ff9cd32557b4bc61aba/759c7/images/blog/2019-06-19-kubernetes-1-15-release-announcement/kubeadm-logo.png","index":1,"caption_template":"图片 - _CAPTION_","label":"KubeAdmin Logo","attributes":{},"skip":false,"key":"9.7.9.1"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.1","level":"9.8.2","list_caption":"Figure: Kubernetes 搜索趋势(来自 Google trends)","alt":"Kubernetes 搜索趋势(来自 Google trends)","nro":302,"url":"../images/006tNc79ly1fzne6y4f2ej31q60fedho.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 搜索趋势(来自 Google trends)","attributes":{},"skip":false,"key":"9.8.2.1"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.2","level":"9.8.2","list_caption":"Figure: Kubernetes 的百度指数","alt":"Kubernetes 的百度指数","nro":303,"url":"../images/006tNc79ly1fznegoocmvj31y00hmgon.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 的百度指数","attributes":{},"skip":false,"key":"9.8.2.2"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.3","level":"9.8.2","list_caption":"Figure: Istio 中的 CRD","alt":"Istio 中的 CRD","nro":304,"url":"../images/006tNc79ly1fzna87wmfij30u00zc4qp.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Istio 中的 CRD","attributes":{},"skip":false,"key":"9.8.2.3"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.4","level":"9.8.2","list_caption":"Figure: 2019 Q1 软件架构趋势 - 来自 InfoQ","alt":"2019 Q1 软件架构趋势 - 来自 InfoQ","nro":305,"url":"../images/006tNc79ly1fzor2k6f7wj313j0u0dl3.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"2019 Q1 软件架构趋势 - 来自 InfoQ","attributes":{},"skip":false,"key":"9.8.2.4"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.5","level":"9.8.2","list_caption":"Figure: ServiceMesher 社区 Logo","alt":"ServiceMesher 社区 Logo","nro":306,"url":"../images/006tNc79ly1fznadbp63qj31jt0beq9s.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"ServiceMesher 社区 Logo","attributes":{},"skip":false,"key":"9.8.2.5"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.6","level":"9.8.2","list_caption":"Figure: ServiceMesher社区2018年活动一览","alt":"ServiceMesher社区2018年活动一览","nro":307,"url":"../images/006tNc79ly1fzm9vs4o3aj31s00u0x6p.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"ServiceMesher社区2018年活动一览","attributes":{},"skip":false,"key":"9.8.2.6"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.7","level":"9.8.2","list_caption":"Figure: CNCF Landscape 中的 Serverless 单元","alt":"CNCF Landscape 中的 Serverless 单元","nro":308,"url":"../images/006tNc79ly1fznbh3vfbwj310f0jxgxj.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"CNCF Landscape 中的 Serverless 单元","attributes":{},"skip":false,"key":"9.8.2.7"},{"backlink":"appendix/cncf-annual-report-2018.html#fig9.9.1.1","level":"9.9.1","list_caption":"Figure: CNCF 项目成熟度级别","alt":"CNCF 项目成熟度级别","nro":309,"url":"../images/006tNc79ly1g04s0oznytj31tg0ok7ca.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF 项目成熟度级别","attributes":{},"skip":false,"key":"9.9.1.1"},{"backlink":"appendix/cncf-annual-report-2018.html#fig9.9.1.2","level":"9.9.1","list_caption":"Figure: KCSP","alt":"KCSP","nro":310,"url":"../images/006tNc79ly1g04tl97vm4j318v0h7dpt.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"KCSP","attributes":{},"skip":false,"key":"9.9.1.2"},{"backlink":"appendix/about-cka-candidate.html#fig9.11.1","level":"9.11","list_caption":"Figure: cka-question","alt":"cka-question","nro":311,"url":"../images/cka-question.png","index":1,"caption_template":"图片 - _CAPTION_","label":"cka-question","attributes":{},"skip":false,"key":"9.11.1"},{"backlink":"appendix/about-cka-candidate.html#fig9.11.2","level":"9.11","list_caption":"Figure: CKA mindmap","alt":"CKA mindmap","nro":312,"url":"../images/cka-mindmap.png","index":2,"caption_template":"图片 - _CAPTION_","label":"CKA mindmap","attributes":{},"skip":false,"key":"9.11.2"}]},"title":"Kubernetes Handbook - Kubernetes中文指南/云原生应用架构实践手册 by Jimmy Song(宋净超)","language":"zh-hans","links":{"sidebar":{"回到主页":"https://jimmysong.io","Awesome Cloud Native":"https://jimmysong.io/awesome-cloud-native","云原生社区":"https://cloudnative.to","中国云原生发展白皮书2020":"https://cloudnativeindustryalliance.github.io/whitepaper2020/","云原生应用白皮书":"https://jimmysong.io/guide-to-cloud-native-app/"}},"gitbook":"*","description":"Kubernetes Handbook - Kubernetes中文指南/云原生应用架构实践手册,本书记录了本人从零开始学习和使用Kubernetes的心路历程,着重于经验分享和总结,同时也会有相关的概念解析,希望能够帮助大家少踩坑,少走弯路,还会指引大家关注Kubernetes生态周边,如微服务构建、DevOps、大数据应用、Service Mesh、Cloud Native等领域。"},"file":{"path":"cloud-native/cloud-native-programming-language-pulumi.md","mtime":"2020-06-19T06:25:56.869Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2020-06-19T06:27:05.421Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"云原生编程语言 Pulumi","level":"2.8.2","depth":2,"next":{"title":"云原生的未来","level":"2.9","depth":1,"path":"cloud-native/the-future-of-cloud-native.md","ref":"cloud-native/the-future-of-cloud-native.md","articles":[]},"previous":{"title":"云原生编程语言 Ballerina","level":"2.8.1","depth":2,"path":"cloud-native/cloud-native-programming-language-ballerina.md","ref":"cloud-native/cloud-native-programming-language-ballerina.md","articles":[]},"dir":"ltr"},"config":{"plugins":["github","codesnippet","splitter","page-toc-button","image-captions","editlink","back-to-top-button","-lunr","-search","search-plus","github-buttons@2.1.0","favicon@^0.0.2","tbfed-pagefooter@^0.0.1","3-ba","theme-default","-highlight","prism","prism-themes","sitemap-general","lightbox","ga","copy-code-button","alerts"],"styles":{"ebook":"styles/ebook.css","epub":"styles/epub.css","mobi":"styles/mobi.css","pdf":"styles/pdf.css","print":"styles/print.css","website":"styles/website.css"},"pluginsConfig":{"tbfed-pagefooter":{"copyright":"加入中国最大的有技术、有温度、有情怀的云原生社区

    Copyright © 2017-2020 | Distributed under CC BY 4.0 | jimmysong.io","modify_label":" Updated at ","modify_format":"YYYY-MM-DD HH:mm:ss"},"prism":{"css":["prism-themes/themes/prism-ghcolors.css"]},"github":{"url":"https://github.com/rootsongjc/kubernetes-handbook"},"editlink":{"label":"编辑本页","multilingual":false,"base":"https://github.com/rootsongjc/kubernetes-handbook/blob/master/"},"splitter":{},"codesnippet":{},"sitemap-general":{"prefix":"https://jimmysong.io/kubernetes-handbook/"},"fontsettings":{"theme":"white","family":"sans","size":2},"favicon":{"shortcut":"favicon.ico","bookmark":"favicon.ico"},"lightbox":{"jquery":true,"sameUuid":false},"page-toc-button":{},"back-to-top-button":{},"prism-themes":{},"alerts":{},"github-buttons":{"repo":"rootsongjc/kubernetes-handbook","types":["star"],"size":"small"},"3-ba":{"configuration":"auto","token":"11f7d254cfa4e0ca44b175c66d379ecc"},"copy-code-button":{},"ga":{"configuration":"auto","token":"UA-93485976-1"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"showLevel":true,"styles":{"ebook":"styles/ebook.css","epub":"styles/epub.css","mobi":"styles/mobi.css","pdf":"styles/pdf.css","print":"styles/print.css","website":"styles/website.css"}},"search-plus":{},"image-captions":{"caption":"图片 - _CAPTION_","variable_name":"_pictures"}},"theme":"default","author":"Jimmy Song(宋净超)","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{"_pictures":[{"backlink":"index.html#fig1.1.1","level":"1.1","list_caption":"Figure: Stargazers over time","alt":"Stargazers over time","nro":1,"url":"https://starcharts.herokuapp.com/rootsongjc/kubernetes-handbook.svg","index":1,"caption_template":"图片 - _CAPTION_","label":"Stargazers over time","attributes":{},"skip":false,"key":"1.1.1"},{"backlink":"cloud-native/play-with-kubernetes.html#fig2.3.1","level":"2.3","list_caption":"Figure: Play with Kubernetes网页截图","alt":"Play with Kubernetes网页截图","nro":2,"url":"../images/play-with-kubernetes.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Play with Kubernetes网页截图","attributes":{},"skip":false,"key":"2.3.1"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.1","level":"2.4","list_caption":"Figure: Kubernetes dashboard","alt":"Kubernetes dashboard","nro":3,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/dashboard-animation.gif","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes dashboard","attributes":{},"skip":false,"key":"2.4.1"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.2","level":"2.4","list_caption":"Figure: Grafana","alt":"Grafana","nro":4,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/grafana-animation.gif","index":2,"caption_template":"图片 - _CAPTION_","label":"Grafana","attributes":{},"skip":false,"key":"2.4.2"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.3","level":"2.4","list_caption":"Figure: Traefik dashboard","alt":"Traefik dashboard","nro":5,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/traefik-ingress.gif","index":3,"caption_template":"图片 - _CAPTION_","label":"Traefik dashboard","attributes":{},"skip":false,"key":"2.4.3"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.4","level":"2.4","list_caption":"Figure: bookinfo示例","alt":"bookinfo示例","nro":6,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/bookinfo-demo.gif","index":4,"caption_template":"图片 - _CAPTION_","label":"bookinfo示例","attributes":{},"skip":false,"key":"2.4.4"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.5","level":"2.4","list_caption":"Figure: vistio视图动画","alt":"vistio视图动画","nro":7,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/vistio-animation.gif","index":5,"caption_template":"图片 - _CAPTION_","label":"vistio视图动画","attributes":{},"skip":false,"key":"2.4.5"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.6","level":"2.4","list_caption":"Figure: Kiali页面","alt":"Kiali页面","nro":8,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/kiali.gif","index":6,"caption_template":"图片 - _CAPTION_","label":"Kiali页面","attributes":{},"skip":false,"key":"2.4.6"},{"backlink":"cloud-native/cloud-native-local-quick-start.html#fig2.4.7","level":"2.4","list_caption":"Figure: Scope页面","alt":"Scope页面","nro":9,"url":"https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster/raw/master/images/weave-scope-animation.gif","index":7,"caption_template":"图片 - _CAPTION_","label":"Scope页面","attributes":{},"skip":false,"key":"2.4.7"},{"backlink":"cloud-native/setup-kubernetes-with-rancher-and-aliyun.html#fig2.5.1","level":"2.5","list_caption":"Figure: Rancher 界面","alt":"Rancher 界面","nro":10,"url":"../images/rancher-web.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Rancher 界面","attributes":{},"skip":false,"key":"2.5.1"},{"backlink":"cloud-native/setup-kubernetes-with-rancher-and-aliyun.html#fig2.5.2","level":"2.5","list_caption":"Figure: 自定义节点信息","alt":"自定义节点信息","nro":11,"url":"../images/rancher-customize-node.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"自定义节点信息","attributes":{},"skip":false,"key":"2.5.2"},{"backlink":"cloud-native/setup-kubernetes-with-rancher-and-aliyun.html#fig2.5.3","level":"2.5","list_caption":"Figure: Rancher 集群监控页面","alt":"Rancher 集群监控页面","nro":12,"url":"../images/rancher-cluster.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Rancher 集群监控页面","attributes":{},"skip":false,"key":"2.5.3"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.1","level":"2.6","list_caption":"Figure: 云计算演进历程","alt":"云计算演进历程","nro":13,"url":"../images/cloud-computing-evolution-road.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"云计算演进历程","attributes":{},"skip":false,"key":"2.6.1"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.2","level":"2.6","list_caption":"Figure: 来自Twitter @MarcWilczek","alt":"来自Twitter @MarcWilczek","nro":14,"url":"../images/cloud-native-comes-of-age.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"来自Twitter @MarcWilczek","attributes":{},"skip":false,"key":"2.6.2"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.3","level":"2.6","list_caption":"Figure: Cloud native思维导图","alt":"Cloud native思维导图","nro":15,"url":"../images/cloud-native-architecutre-mindnode.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Cloud native思维导图","attributes":{},"skip":false,"key":"2.6.3"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.4","level":"2.6","list_caption":"Figure: 十二因素应用","alt":"十二因素应用","nro":16,"url":"../images/12-factor-app.png","index":4,"caption_template":"图片 - _CAPTION_","label":"十二因素应用","attributes":{},"skip":false,"key":"2.6.4"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.5","level":"2.6","list_caption":"Figure: 容器生态","alt":"容器生态","nro":17,"url":"../images/container-ecosystem.png","index":5,"caption_template":"图片 - _CAPTION_","label":"容器生态","attributes":{},"skip":false,"key":"2.6.5"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.6","level":"2.6","list_caption":"Figure: 使用Jenkins进行持续集成与发布流程图","alt":"使用Jenkins进行持续集成与发布流程图","nro":18,"url":"../images/kubernetes-jenkins-ci-cd.png","index":6,"caption_template":"图片 - _CAPTION_","label":"使用Jenkins进行持续集成与发布流程图","attributes":{},"skip":false,"key":"2.6.6"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.7","level":"2.6","list_caption":"Figure: filebeat日志收集架构图","alt":"filebeat日志收集架构图","nro":19,"url":"../images/filebeat-log-collector-arch.png","index":7,"caption_template":"图片 - _CAPTION_","label":"filebeat日志收集架构图","attributes":{},"skip":false,"key":"2.6.7"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.8","level":"2.6","list_caption":"Figure: API文档","alt":"API文档","nro":20,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":8,"caption_template":"图片 - _CAPTION_","label":"API文档","attributes":{},"skip":false,"key":"2.6.8"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.9","level":"2.6","list_caption":"Figure: 迁移步骤示意图","alt":"迁移步骤示意图","nro":21,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":9,"caption_template":"图片 - _CAPTION_","label":"迁移步骤示意图","attributes":{},"skip":false,"key":"2.6.9"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.10","level":"2.6","list_caption":"Figure: service mesh架构图","alt":"service mesh架构图","nro":22,"url":"../images/serivce-mesh-control-plane.png","index":10,"caption_template":"图片 - _CAPTION_","label":"service mesh架构图","attributes":{},"skip":false,"key":"2.6.10"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.11","level":"2.6","list_caption":"Figure: kibana界面","alt":"kibana界面","nro":23,"url":"../images/filebeat-docker-test.jpg","index":11,"caption_template":"图片 - _CAPTION_","label":"kibana界面","attributes":{},"skip":false,"key":"2.6.11"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.12","level":"2.6","list_caption":"Figure: Grafana界面示意图1","alt":"Grafana界面示意图1","nro":24,"url":"../images/kubernetes-devops-example-grafana-1.png","index":12,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图1","attributes":{},"skip":false,"key":"2.6.12"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.13","level":"2.6","list_caption":"Figure: Grafana界面示意图2","alt":"Grafana界面示意图2","nro":25,"url":"../images/kubernetes-devops-example-grafana-2.png","index":13,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图2","attributes":{},"skip":false,"key":"2.6.13"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.14","level":"2.6","list_caption":"Figure: Grafana界面示意图3","alt":"Grafana界面示意图3","nro":26,"url":"../images/kubernetes-devops-example-grafana-3.png","index":14,"caption_template":"图片 - _CAPTION_","label":"Grafana界面示意图3","attributes":{},"skip":false,"key":"2.6.14"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.15","level":"2.6","list_caption":"Figure: dashboard","alt":"dashboard","nro":27,"url":"../images/spark-job-on-kubernetes-example-1.jpg","index":15,"caption_template":"图片 - _CAPTION_","label":"dashboard","attributes":{},"skip":false,"key":"2.6.15"},{"backlink":"cloud-native/kubernetes-and-cloud-native-app-overview.html#fig2.6.16","level":"2.6","list_caption":"Figure: Grafana","alt":"Grafana","nro":28,"url":"../images/spark-job-on-kubernetes-example-2.jpg","index":16,"caption_template":"图片 - _CAPTION_","label":"Grafana","attributes":{},"skip":false,"key":"2.6.16"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.1","level":"2.7","list_caption":"Figure: 容器生态图 Container ecosystem","alt":"容器生态图 Container ecosystem","nro":29,"url":"../images/container-ecosystem.png","index":1,"caption_template":"图片 - _CAPTION_","label":"容器生态图 Container ecosystem","attributes":{},"skip":false,"key":"2.7.1"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.2","level":"2.7","list_caption":"Figure: Kubernetes架构","alt":"Kubernetes架构","nro":30,"url":"../images/kubernetes-high-level-component-archtecture.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes架构","attributes":{},"skip":false,"key":"2.7.2"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.3","level":"2.7","list_caption":"Figure: Cloud Native Core target","alt":"Cloud Native Core target","nro":31,"url":"../images/cloud-native-core-target.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Cloud Native Core target","attributes":{},"skip":false,"key":"2.7.3"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.4","level":"2.7","list_caption":"Figure: FaaS Landscape","alt":"FaaS Landscape","nro":32,"url":"../images/redpoint-faas-landscape.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"FaaS Landscape","attributes":{},"skip":false,"key":"2.7.4"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.5","level":"2.7","list_caption":"Figure: Workloads running on Kubernetes","alt":"Workloads running on Kubernetes","nro":33,"url":"../images/0069RVTdgy1fv5mxr6fxtj31kw11q484.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Workloads running on Kubernetes","attributes":{},"skip":false,"key":"2.7.5"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.6","level":"2.7","list_caption":"Figure: Gartner技术爆发趋势图2017","alt":"Gartner技术爆发趋势图2017","nro":34,"url":"../images/0069RVTdgy1fv5my2jtxzj315o0z8dkr.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"Gartner技术爆发趋势图2017","attributes":{},"skip":false,"key":"2.7.6"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.7","level":"2.7","list_caption":"Figure: Microservices concerns","alt":"Microservices concerns","nro":35,"url":"../images/microservices-concerns.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Microservices concerns","attributes":{},"skip":false,"key":"2.7.7"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.8","level":"2.7","list_caption":"Figure: 两种服务发现方式","alt":"两种服务发现方式","nro":36,"url":"../images/service-discovery-in-microservices.png","index":8,"caption_template":"图片 - _CAPTION_","label":"两种服务发现方式","attributes":{},"skip":false,"key":"2.7.8"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.9","level":"2.7","list_caption":"Figure: Cloud Native Features","alt":"Cloud Native Features","nro":37,"url":"https://jimmysong.io/kubernetes-handbook/images/cloud-native-architecutre-mindnode.jpg","index":9,"caption_template":"图片 - _CAPTION_","label":"Cloud Native Features","attributes":{},"skip":false,"key":"2.7.9"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.10","level":"2.7","list_caption":"Figure: Cloud Native Landscape v1.0","alt":"Cloud Native Landscape v1.0","nro":38,"url":"../images/0069RVTdgy1fv5myp6ednj31kw0w0u0x.jpg","index":10,"caption_template":"图片 - _CAPTION_","label":"Cloud Native Landscape v1.0","attributes":{},"skip":false,"key":"2.7.10"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.11","level":"2.7","list_caption":"Figure: Building a Cloud Native Architecture with Kubernetes followed 12 factor app","alt":"Building a Cloud Native Architecture with Kubernetes followed 12 factor app","nro":39,"url":"../images/building-cloud-native-architecture-with-kubernetes.png","index":11,"caption_template":"图片 - _CAPTION_","label":"Building a Cloud Native Architecture with Kubernetes followed 12 factor app","attributes":{},"skip":false,"key":"2.7.11"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.12","level":"2.7","list_caption":"Figure: Creating Kubernetes native app","alt":"Creating Kubernetes native app","nro":40,"url":"../images/creating-kubernetes-native-app.jpg","index":12,"caption_template":"图片 - _CAPTION_","label":"Creating Kubernetes native app","attributes":{},"skip":false,"key":"2.7.12"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.13","level":"2.7","list_caption":"Figure: istio vs linkerd","alt":"istio vs linkerd","nro":41,"url":"../images/istio-vs-linkerd.jpg","index":13,"caption_template":"图片 - _CAPTION_","label":"istio vs linkerd","attributes":{},"skip":false,"key":"2.7.13"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.14","level":"2.7","list_caption":"Figure: Deployment pipeline","alt":"Deployment pipeline","nro":42,"url":"../images/0069RVTdgy1fv5mzj8rj6j318g1ewtfc.jpg","index":14,"caption_template":"图片 - _CAPTION_","label":"Deployment pipeline","attributes":{},"skip":false,"key":"2.7.14"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.15","level":"2.7","list_caption":"Figure: Spark on Kubernetes with different schedulers","alt":"Spark on Kubernetes with different schedulers","nro":43,"url":"../images/spark-on-kubernetes-with-different-schedulers.jpg","index":15,"caption_template":"图片 - _CAPTION_","label":"Spark on Kubernetes with different schedulers","attributes":{},"skip":false,"key":"2.7.15"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.16","level":"2.7","list_caption":"Figure: Kubernetes solutions","alt":"Kubernetes solutions","nro":44,"url":"../images/0069RVTdgy1fv5mzywc83j31fk1i8qg4.jpg","index":16,"caption_template":"图片 - _CAPTION_","label":"Kubernetes solutions","attributes":{},"skip":false,"key":"2.7.16"},{"backlink":"cloud-native/from-kubernetes-to-cloud-native.html#fig2.7.17","level":"2.7","list_caption":"Figure: Kubernetes SIG","alt":"Kubernetes SIG","nro":45,"url":"../images/kubernetes-sigs.jpg","index":17,"caption_template":"图片 - _CAPTION_","label":"Kubernetes SIG","attributes":{},"skip":false,"key":"2.7.17"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.1","level":"2.8.1","list_caption":"Figure: 云原生编程语言ballerina","alt":"云原生编程语言ballerina","nro":46,"url":"../images/philosophy-page-diagrams-top.png","index":1,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言ballerina","attributes":{},"skip":false,"key":"2.8.1.1"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.2","level":"2.8.1","list_caption":"Figure: 云原生编程语言Ballerina的序列图设计理念","alt":"云原生编程语言Ballerina的序列图设计理念","nro":47,"url":"../images/philosophy-principle-diagrams-01.png","index":2,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言Ballerina的序列图设计理念","attributes":{},"skip":false,"key":"2.8.1.2"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.3","level":"2.8.1","list_caption":"Figure: 云原生编程语言Ballerina的并发理念","alt":"云原生编程语言Ballerina的并发理念","nro":48,"url":"../images/philosophy-principle-diagrams-02.png","index":3,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言Ballerina的并发理念","attributes":{},"skip":false,"key":"2.8.1.3"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.4","level":"2.8.1","list_caption":"Figure: 云原生编程语言ballerina运行时架构","alt":"云原生编程语言ballerina运行时架构","nro":49,"url":"../images/philosophy-diagrams-for-site-02.png","index":4,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言ballerina运行时架构","attributes":{},"skip":false,"key":"2.8.1.4"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.5","level":"2.8.1","list_caption":"Figure: 云原生编程语言ballerina部署架构图","alt":"云原生编程语言ballerina部署架构图","nro":50,"url":"../images/philosophy-diagrams-for-site-03.png","index":5,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言ballerina部署架构图","attributes":{},"skip":false,"key":"2.8.1.5"},{"backlink":"cloud-native/cloud-native-programming-language-ballerina.html#fig2.8.1.6","level":"2.8.1","list_caption":"Figure: 云原生编程语言ballerina生命周期架构图","alt":"云原生编程语言ballerina生命周期架构图","nro":51,"url":"../images/philosophy-diagrams-for-site-04.png","index":6,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言ballerina生命周期架构图","attributes":{},"skip":false,"key":"2.8.1.6"},{"backlink":"cloud-native/cloud-native-programming-language-pulumi.html#fig2.8.2.1","level":"2.8.2","list_caption":"Figure: 云原生编程语言Pulumi","alt":"云原生编程语言Pulumi","nro":52,"url":"../images/00704eQkgy1fsm4v0a6qwj30xc0m8t9d.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言Pulumi","attributes":{},"skip":false,"key":"2.8.2.1"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.1","level":"2.9","list_caption":"Figure: Kubernetes 云原生的操作系统","alt":"Kubernetes 云原生的操作系统","nro":53,"url":"../images/00704eQkgy1frr4z08j6oj31p20w2n6n.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 云原生的操作系统","attributes":{},"skip":false,"key":"2.9.1"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.2","level":"2.9","list_caption":"Figure: 操作系统层次","alt":"操作系统层次","nro":54,"url":"../images/00704eQkgy1frr52hl4eaj31qy15en74.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"操作系统层次","attributes":{},"skip":false,"key":"2.9.2"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.3","level":"2.9","list_caption":"Figure: 云原生景观图","alt":"云原生景观图","nro":55,"url":"../images/00704eQkgy1frr53j3aiuj32fs1dc7wi.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"云原生景观图","attributes":{},"skip":false,"key":"2.9.3"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.4","level":"2.9","list_caption":"Figure: KubeVirt架构图","alt":"KubeVirt架构图","nro":56,"url":"../images/00704eQkgy1frr54de5oyj31qw14qn2x.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"KubeVirt架构图","attributes":{},"skip":false,"key":"2.9.4"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.5","level":"2.9","list_caption":"Figure: Kubernetes中的资源隔离","alt":"Kubernetes中的资源隔离","nro":57,"url":"../images/00704eQkgy1frr54ztql2j329q0zwwlf.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Kubernetes中的资源隔离","attributes":{},"skip":false,"key":"2.9.5"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.6","level":"2.9","list_caption":"Figure: OpenEBS 控制平面架构","alt":"OpenEBS 控制平面架构","nro":58,"url":"../images/00704eQkgy1frr56m7z2sj31y010y17y.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"OpenEBS 控制平面架构","attributes":{},"skip":false,"key":"2.9.6"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.7","level":"2.9","list_caption":"Figure: OpenEBS 的存储卷管理","alt":"OpenEBS 的存储卷管理","nro":59,"url":"../images/00704eQkgy1frr57nm2mnj31xk11qqej.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"OpenEBS 的存储卷管理","attributes":{},"skip":false,"key":"2.9.7"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.8","level":"2.9","list_caption":"Figure: Hadoop YARN 迁移到 Kubernetes的示例","alt":"Hadoop YARN 迁移到 Kubernetes的示例","nro":60,"url":"../images/00704eQkgy1frr58ebf2lj323o11219r.jpg","index":8,"caption_template":"图片 - _CAPTION_","label":"Hadoop YARN 迁移到 Kubernetes的示例","attributes":{},"skip":false,"key":"2.9.8"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.9","level":"2.9","list_caption":"Figure: Spark on Yarn with Kubernetes","alt":"Spark on Yarn with Kubernetes","nro":61,"url":"../images/00704eQkgy1frr59gzzwsj32gg16k4qp.jpg","index":9,"caption_template":"图片 - _CAPTION_","label":"Spark on Yarn with Kubernetes","attributes":{},"skip":false,"key":"2.9.9"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.10","level":"2.9","list_caption":"Figure: 云原生与12因素应用","alt":"云原生与12因素应用","nro":62,"url":"../images/00704eQkgy1frr5arzvetj31no12mdre.jpg","index":10,"caption_template":"图片 - _CAPTION_","label":"云原生与12因素应用","attributes":{},"skip":false,"key":"2.9.10"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.11","level":"2.9","list_caption":"Figure: 云原生编程语言","alt":"云原生编程语言","nro":63,"url":"../images/00704eQkgy1frr5c8bwmtj31ou152qc3.jpg","index":11,"caption_template":"图片 - _CAPTION_","label":"云原生编程语言","attributes":{},"skip":false,"key":"2.9.11"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.12","level":"2.9","list_caption":"Figure: Gitkube","alt":"Gitkube","nro":64,"url":"../images/00704eQkgy1frr5bulhuhj329m10iwua.jpg","index":12,"caption_template":"图片 - _CAPTION_","label":"Gitkube","attributes":{},"skip":false,"key":"2.9.12"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.13","level":"2.9","list_caption":"Figure: Kuberentes中的流量管理","alt":"Kuberentes中的流量管理","nro":65,"url":"../images/00704eQkgy1frr5dsurx6j320i140tpf.jpg","index":13,"caption_template":"图片 - _CAPTION_","label":"Kuberentes中的流量管理","attributes":{},"skip":false,"key":"2.9.13"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.14","level":"2.9","list_caption":"Figure: Istio Service Mesh架构图","alt":"Istio Service Mesh架构图","nro":66,"url":"../images/00704eQkgy1frr5exqm7kj320u18mh2t.jpg","index":14,"caption_template":"图片 - _CAPTION_","label":"Istio Service Mesh架构图","attributes":{},"skip":false,"key":"2.9.14"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.15","level":"2.9","list_caption":"Figure: Service Mesh架构","alt":"Service Mesh架构","nro":67,"url":"../images/00704eQkgy1frr5fxzoltj32f81akqr2.jpg","index":15,"caption_template":"图片 - _CAPTION_","label":"Service Mesh架构","attributes":{},"skip":false,"key":"2.9.15"},{"backlink":"cloud-native/the-future-of-cloud-native.html#fig2.9.16","level":"2.9","list_caption":"Figure: Envoy proxy架构图","alt":"Envoy proxy架构图","nro":68,"url":"../images/envoy-arch.png","index":16,"caption_template":"图片 - _CAPTION_","label":"Envoy proxy架构图","attributes":{},"skip":false,"key":"2.9.16"},{"backlink":"cloud-native/define-cloud-native-app.html#fig2.10.1","level":"2.10","list_caption":"Figure: 云原生应用模型","alt":"云原生应用模型","nro":69,"url":"../images/cloud-native-app-model.png","index":1,"caption_template":"图片 - _CAPTION_","label":"云原生应用模型","attributes":{},"skip":false,"key":"2.10.1"},{"backlink":"cloud-native/define-cloud-native-app.html#fig2.10.2","level":"2.10","list_caption":"Figure: 云原生应用模型中的目标角色","alt":"云原生应用模型中的目标角色","nro":70,"url":"../images/roles.png","index":2,"caption_template":"图片 - _CAPTION_","label":"云原生应用模型中的目标角色","attributes":{},"skip":false,"key":"2.10.2"},{"backlink":"concepts/index.html#fig3.1.1","level":"3.1","list_caption":"Figure: Borg架构","alt":"Borg架构","nro":71,"url":"../images/borg.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Borg架构","attributes":{},"skip":false,"key":"3.1.1"},{"backlink":"concepts/index.html#fig3.1.2","level":"3.1","list_caption":"Figure: Kubernetes架构","alt":"Kubernetes架构","nro":72,"url":"../images/architecture.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes架构","attributes":{},"skip":false,"key":"3.1.2"},{"backlink":"concepts/index.html#fig3.1.3","level":"3.1","list_caption":"Figure: Kuberentes架构(图片来自于网络)","alt":"Kuberentes架构(图片来自于网络)","nro":73,"url":"../images/kubernetes-high-level-component-archtecture.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Kuberentes架构(图片来自于网络)","attributes":{},"skip":false,"key":"3.1.3"},{"backlink":"concepts/index.html#fig3.1.4","level":"3.1","list_caption":"Figure: kubernetes整体架构示意图","alt":"kubernetes整体架构示意图","nro":74,"url":"../images/kubernetes-whole-arch.png","index":4,"caption_template":"图片 - _CAPTION_","label":"kubernetes整体架构示意图","attributes":{},"skip":false,"key":"3.1.4"},{"backlink":"concepts/index.html#fig3.1.5","level":"3.1","list_caption":"Figure: Kubernetes master架构示意图","alt":"Kubernetes master架构示意图","nro":75,"url":"../images/kubernetes-master-arch.png","index":5,"caption_template":"图片 - _CAPTION_","label":"Kubernetes master架构示意图","attributes":{},"skip":false,"key":"3.1.5"},{"backlink":"concepts/index.html#fig3.1.6","level":"3.1","list_caption":"Figure: kubernetes node架构示意图","alt":"kubernetes node架构示意图","nro":76,"url":"../images/kubernetes-node-arch.png","index":6,"caption_template":"图片 - _CAPTION_","label":"kubernetes node架构示意图","attributes":{},"skip":false,"key":"3.1.6"},{"backlink":"concepts/index.html#fig3.1.7","level":"3.1","list_caption":"Figure: Kubernetes分层架构示意图","alt":"Kubernetes分层架构示意图","nro":77,"url":"../images/kubernetes-layers-arch.png","index":7,"caption_template":"图片 - _CAPTION_","label":"Kubernetes分层架构示意图","attributes":{},"skip":false,"key":"3.1.7"},{"backlink":"concepts/concepts.html#fig3.1.1.1","level":"3.1.1","list_caption":"Figure: Kubernetes 分层架构示意图","alt":"Kubernetes 分层架构示意图","nro":78,"url":"../images/006tNc79ly1fzniqvmi51j31gq0s0q5u.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 分层架构示意图","attributes":{},"skip":false,"key":"3.1.1.1"},{"backlink":"concepts/open-interfaces.html#fig3.1.3.1","level":"3.1.3","list_caption":"Figure: 开放接口","alt":"开放接口","nro":79,"url":"../images/open-interfaces.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"开放接口","attributes":{},"skip":false,"key":"3.1.3.1"},{"backlink":"concepts/cri.html#fig3.1.3.1.1","level":"3.1.3.1","list_caption":"Figure: CRI架构-图片来自kubernetes blog","alt":"CRI架构-图片来自kubernetes blog","nro":80,"url":"../images/cri-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"CRI架构-图片来自kubernetes blog","attributes":{},"skip":false,"key":"3.1.3.1.1"},{"backlink":"concepts/flannel.html#fig3.2.1.1","level":"3.2.1","list_caption":"Figure: flannel网络架构(图片来自openshift)","alt":"flannel网络架构(图片来自openshift)","nro":81,"url":"../images/flannel-networking.png","index":1,"caption_template":"图片 - _CAPTION_","label":"flannel网络架构(图片来自openshift)","attributes":{},"skip":false,"key":"3.2.1.1"},{"backlink":"concepts/calico.html#fig3.2.2.1","level":"3.2.2","list_caption":"Figure: Calico","alt":"Calico","nro":82,"url":"../images/006tNc79gy1fz65bt7ieej30c90bsgn2.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Calico","attributes":{},"skip":false,"key":"3.2.2.1"},{"backlink":"concepts/calico.html#fig3.2.2.2","level":"3.2.2","list_caption":"Figure: CRI架构-图片来自https://www.jianshu.com/p/f0177b84de66","alt":"CRI架构-图片来自https://www.jianshu.com/p/f0177b84de66","nro":83,"url":"../images/calico.png","index":2,"caption_template":"图片 - _CAPTION_","label":"CRI架构-图片来自https://www.jianshu.com/p/f0177b84de66","attributes":{},"skip":false,"key":"3.2.2.2"},{"backlink":"concepts/cilium.html#fig3.2.3.1","level":"3.2.3","list_caption":"Figure: Cilium","alt":"Cilium","nro":84,"url":"../images/006tNbRwly1fwqi98i51ij30sc0j80zn.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Cilium","attributes":{},"skip":false,"key":"3.2.3.1"},{"backlink":"concepts/cilium-concepts.html#fig3.2.3.1.1","level":"3.2.3.1","list_caption":"Figure: Cilium 组件(来自 Cilium 官网)","alt":"Cilium 组件(来自 Cilium 官网)","nro":85,"url":"../images/006tNbRwly1fwztvhg0gmj318z143tdv.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Cilium 组件(来自 Cilium 官网)","attributes":{},"skip":false,"key":"3.2.3.1.1"},{"backlink":"concepts/cilium-concepts.html#fig3.2.3.1.2","level":"3.2.3.1","list_caption":"Figure: Cilium 网络配置策略","alt":"Cilium 网络配置策略","nro":86,"url":"../images/006tNbRwly1fwzreaalj6j30dz0dy3z3.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Cilium 网络配置策略","attributes":{},"skip":false,"key":"3.2.3.1.2"},{"backlink":"concepts/pod-overview.html#fig3.4.1.1","level":"3.4.1","list_caption":"Figure: pod diagram","alt":"pod diagram","nro":87,"url":"../images/pod-overview.png","index":1,"caption_template":"图片 - _CAPTION_","label":"pod diagram","attributes":{},"skip":false,"key":"3.4.1.1"},{"backlink":"concepts/pod.html#fig3.4.2.1","level":"3.4.2","list_caption":"Figure: Pod示意图","alt":"Pod示意图","nro":88,"url":"../images/pod-overview.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Pod示意图","attributes":{},"skip":false,"key":"3.4.2.1"},{"backlink":"concepts/pod.html#fig3.4.2.2","level":"3.4.2","list_caption":"Figure: Pod Cheatsheet","alt":"Pod Cheatsheet","nro":89,"url":"../images/kubernetes-pod-cheatsheet.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Pod Cheatsheet","attributes":{},"skip":false,"key":"3.4.2.2"},{"backlink":"concepts/pause-container.html#fig3.4.4.1","level":"3.4.4","list_caption":"Figure: Pause容器","alt":"Pause容器","nro":90,"url":"../images/pause-container.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Pause容器","attributes":{},"skip":false,"key":"3.4.4.1"},{"backlink":"concepts/pod-lifecycle.html#fig3.4.6.1","level":"3.4.6","list_caption":"Figure: Pod的生命周期示意图(图片来自网络)","alt":"Pod的生命周期示意图(图片来自网络)","nro":91,"url":"../images/kubernetes-pod-life-cycle.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Pod的生命周期示意图(图片来自网络)","attributes":{},"skip":false,"key":"3.4.6.1"},{"backlink":"concepts/label.html#fig3.5.3.1","level":"3.5.3","list_caption":"Figure: label示意图","alt":"label示意图","nro":92,"url":"../images/labels.png","index":1,"caption_template":"图片 - _CAPTION_","label":"label示意图","attributes":{},"skip":false,"key":"3.5.3.1"},{"backlink":"concepts/horizontal-pod-autoscaling.html#fig3.6.7.1","level":"3.6.7","list_caption":"Figure: horizontal-pod-autoscaler","alt":"horizontal-pod-autoscaler","nro":93,"url":"../images/horizontal-pod-autoscaler.png","index":1,"caption_template":"图片 - _CAPTION_","label":"horizontal-pod-autoscaler","attributes":{},"skip":false,"key":"3.6.7.1"},{"backlink":"concepts/service.html#fig3.7.1.1","level":"3.7.1","list_caption":"Figure: userspace代理模式下Service概览图","alt":"userspace代理模式下Service概览图","nro":94,"url":"../images/services-userspace-overview.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"userspace代理模式下Service概览图","attributes":{},"skip":false,"key":"3.7.1.1"},{"backlink":"concepts/service.html#fig3.7.1.2","level":"3.7.1","list_caption":"Figure: iptables代理模式下Service概览图","alt":"iptables代理模式下Service概览图","nro":95,"url":"../images/services-iptables-overview.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"iptables代理模式下Service概览图","attributes":{},"skip":false,"key":"3.7.1.2"},{"backlink":"concepts/service.html#fig3.7.1.3","level":"3.7.1","list_caption":"Figure: ipvs代理模式下Service概览图","alt":"ipvs代理模式下Service概览图","nro":96,"url":"../images/service-ipvs-overview.png","index":3,"caption_template":"图片 - _CAPTION_","label":"ipvs代理模式下Service概览图","attributes":{},"skip":false,"key":"3.7.1.3"},{"backlink":"concepts/service-catalog.html#fig3.10.5.1","level":"3.10.5","list_caption":"Figure: Service Catalog Architecture","alt":"Service Catalog Architecture","nro":97,"url":"../images/service-catalog-architecture.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Service Catalog Architecture","attributes":{},"skip":false,"key":"3.10.5.1"},{"backlink":"concepts/service-catalog.html#fig3.10.5.2","level":"3.10.5","list_caption":"Figure: List Services","alt":"List Services","nro":98,"url":"../images/service-catalog-list.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"List Services","attributes":{},"skip":false,"key":"3.10.5.2"},{"backlink":"concepts/service-catalog.html#fig3.10.5.3","level":"3.10.5","list_caption":"Figure: Provision a Service","alt":"Provision a Service","nro":99,"url":"../images/service-catalog-provision.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Provision a Service","attributes":{},"skip":false,"key":"3.10.5.3"},{"backlink":"concepts/service-catalog.html#fig3.10.5.4","level":"3.10.5","list_caption":"Figure: Bind to a managed service","alt":"Bind to a managed service","nro":100,"url":"../images/service-catalog-bind.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Bind to a managed service","attributes":{},"skip":false,"key":"3.10.5.4"},{"backlink":"concepts/service-catalog.html#fig3.10.5.5","level":"3.10.5","list_caption":"Figure: Map connection credentials","alt":"Map connection credentials","nro":101,"url":"../images/service-catalog-map.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Map connection credentials","attributes":{},"skip":false,"key":"3.10.5.5"},{"backlink":"guide/using-kubectl.html#fig4.3.2.1","level":"4.3.2","list_caption":"Figure: kubectl cheatsheet","alt":"kubectl cheatsheet","nro":102,"url":"../images/kubernetes-kubectl-cheatsheet.png","index":1,"caption_template":"图片 - _CAPTION_","label":"kubectl cheatsheet","attributes":{},"skip":false,"key":"4.3.2.1"},{"backlink":"guide/using-kubectl.html#fig4.3.2.2","level":"4.3.2","list_caption":"Figure: 增加kubeclt命令的工具(图片来自网络)","alt":"增加kubeclt命令的工具(图片来自网络)","nro":103,"url":"../images/tools-to-supercharge-kubectl.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"增加kubeclt命令的工具(图片来自网络)","attributes":{},"skip":false,"key":"4.3.2.2"},{"backlink":"guide/using-kubectl.html#fig4.3.2.3","level":"4.3.2","list_caption":"Figure: 增强的kubectl命令","alt":"增强的kubectl命令","nro":104,"url":"../images/supercharged-kubectl.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"增强的kubectl命令","attributes":{},"skip":false,"key":"4.3.2.3"},{"backlink":"guide/using-kubectl.html#fig4.3.2.4","level":"4.3.2","list_caption":"Figure: kube-shell页面","alt":"kube-shell页面","nro":105,"url":"../images/kube-shell.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"kube-shell页面","attributes":{},"skip":false,"key":"4.3.2.4"},{"backlink":"guide/ip-masq-agent.html#fig4.4.5.1","level":"4.4.5","list_caption":"Figure: IP伪装代理示意图","alt":"IP伪装代理示意图","nro":106,"url":"../images/ip-masq.png","index":1,"caption_template":"图片 - _CAPTION_","label":"IP伪装代理示意图","attributes":{},"skip":false,"key":"4.4.5.1"},{"backlink":"guide/auth-with-kubeconfig-or-token.html#fig4.4.6.1","level":"4.4.6","list_caption":"Figure: kubeconfig文件","alt":"kubeconfig文件","nro":107,"url":"../images/brand-kubeconfig-yaml.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubeconfig文件","attributes":{},"skip":false,"key":"4.4.6.1"},{"backlink":"guide/authentication.html#fig4.4.7.1","level":"4.4.7","list_caption":"Figure: Kubernetes OpenID Connect Flow","alt":"Kubernetes OpenID Connect Flow","nro":108,"url":"../images/kubernetes-oidc-login.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes OpenID Connect Flow","attributes":{},"skip":false,"key":"4.4.7.1"},{"backlink":"guide/cabin-mobile-dashboard-for-kubernetes.html#fig4.5.6.1","level":"4.5.6","list_caption":"Figure: App Store","alt":"App Store","nro":109,"url":"../images/cabin-kubernetes-mobile-dashboard-1.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"App Store","attributes":{},"skip":false,"key":"4.5.6.1"},{"backlink":"guide/cabin-mobile-dashboard-for-kubernetes.html#fig4.5.6.2","level":"4.5.6","list_caption":"Figure: 在手机上操作Kubernetes集群","alt":"在手机上操作Kubernetes集群","nro":110,"url":"../images/cabin-kubernetes-mobile-dashboard-4.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"在手机上操作Kubernetes集群","attributes":{},"skip":false,"key":"4.5.6.2"},{"backlink":"guide/kubernetes-desktop-client.html#fig4.5.7.1","level":"4.5.7","list_caption":"Figure: Kubernetic客户端","alt":"Kubernetic客户端","nro":111,"url":"../images/kubernetic-desktop-ui.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetic客户端","attributes":{},"skip":false,"key":"4.5.7.1"},{"backlink":"guide/kubernator-kubernetes-ui.html#fig4.5.8.1","level":"4.5.8","list_caption":"Figure: Kubernator catalog页面","alt":"Kubernator catalog页面","nro":112,"url":"../images/kubernator-catalog.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernator catalog页面","attributes":{},"skip":false,"key":"4.5.8.1"},{"backlink":"guide/kubernator-kubernetes-ui.html#fig4.5.8.2","level":"4.5.8","list_caption":"Figure: Kubernator rbac页面","alt":"Kubernator rbac页面","nro":113,"url":"../images/kubernator-rbac.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernator rbac页面","attributes":{},"skip":false,"key":"4.5.8.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.1","level":"4.6.1","list_caption":"Figure: 流程图","alt":"流程图","nro":114,"url":"../images/how-to-use-kubernetes-with-istio.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"流程图","attributes":{},"skip":false,"key":"4.6.1.1"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.2","level":"4.6.1","list_caption":"Figure: API","alt":"API","nro":115,"url":"../images/k8s-app-monitor-test-api-doc.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"API","attributes":{},"skip":false,"key":"4.6.1.2"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.3","level":"4.6.1","list_caption":"Figure: wercker构建页面","alt":"wercker构建页面","nro":116,"url":"../images/k8s-app-monitor-agent-wercker.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"wercker构建页面","attributes":{},"skip":false,"key":"4.6.1.3"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.4","level":"4.6.1","list_caption":"Figure: 图表","alt":"图表","nro":117,"url":"../images/k8s-app-monitor-agent.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"图表","attributes":{},"skip":false,"key":"4.6.1.4"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.5","level":"4.6.1","list_caption":"Figure: Grafana页面","alt":"Grafana页面","nro":118,"url":"../images/k8s-app-monitor-istio-grafana.png","index":5,"caption_template":"图片 - _CAPTION_","label":"Grafana页面","attributes":{},"skip":false,"key":"4.6.1.5"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.6","level":"4.6.1","list_caption":"Figure: servicegraph页面","alt":"servicegraph页面","nro":119,"url":"../images/k8s-app-monitor-istio-servicegraph-dotviz.png","index":6,"caption_template":"图片 - _CAPTION_","label":"servicegraph页面","attributes":{},"skip":false,"key":"4.6.1.6"},{"backlink":"guide/deploy-applications-in-kubernetes.html#fig4.6.1.7","level":"4.6.1","list_caption":"Figure: Zipkin页面","alt":"Zipkin页面","nro":120,"url":"../images/k8s-app-monitor-istio-zipkin.png","index":7,"caption_template":"图片 - _CAPTION_","label":"Zipkin页面","attributes":{},"skip":false,"key":"4.6.1.7"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig4.6.2.1","level":"4.6.2","list_caption":"Figure: 将单体应用迁移到云原生(图片来自DevOpsDay Toronto)","alt":"将单体应用迁移到云原生(图片来自DevOpsDay Toronto)","nro":121,"url":"../images/migrating-monolith-to-kubernetes.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"将单体应用迁移到云原生(图片来自DevOpsDay Toronto)","attributes":{},"skip":false,"key":"4.6.2.1"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig4.6.2.2","level":"4.6.2","list_caption":"Figure: spark on yarn with kubernetes","alt":"spark on yarn with kubernetes","nro":122,"url":"../images/spark-on-yarn-with-kubernetes.png","index":2,"caption_template":"图片 - _CAPTION_","label":"spark on yarn with kubernetes","attributes":{},"skip":false,"key":"4.6.2.2"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig4.6.2.3","level":"4.6.2","list_caption":"Figure: Terms","alt":"Terms","nro":123,"url":"../images/terms-in-kubernetes-app-deployment.png","index":3,"caption_template":"图片 - _CAPTION_","label":"Terms","attributes":{},"skip":false,"key":"4.6.2.3"},{"backlink":"guide/migrating-hadoop-yarn-to-kubernetes.html#fig4.6.2.4","level":"4.6.2","list_caption":"Figure: 分解步骤解析","alt":"分解步骤解析","nro":124,"url":"../images/migrating-hadoop-yarn-to-kubernetes.png","index":4,"caption_template":"图片 - _CAPTION_","label":"分解步骤解析","attributes":{},"skip":false,"key":"4.6.2.4"},{"backlink":"practice/node-installation.html#fig5.2.7.1","level":"5.2.7","list_caption":"Figure: nginx欢迎页面","alt":"nginx欢迎页面","nro":125,"url":"../images/kubernetes-installation-test-nginx.png","index":1,"caption_template":"图片 - _CAPTION_","label":"nginx欢迎页面","attributes":{},"skip":false,"key":"5.2.7.1"},{"backlink":"practice/dashboard-addon-installation.html#fig5.2.9.1","level":"5.2.9","list_caption":"Figure: kubernetes dashboard","alt":"kubernetes dashboard","nro":126,"url":"../images/kubernetes-dashboard-raw.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes dashboard","attributes":{},"skip":false,"key":"5.2.9.1"},{"backlink":"practice/dashboard-addon-installation.html#fig5.2.9.2","level":"5.2.9","list_caption":"Figure: V1.6.3版本的dashboard界面","alt":"V1.6.3版本的dashboard界面","nro":127,"url":"../images/dashboard-v163.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"V1.6.3版本的dashboard界面","attributes":{},"skip":false,"key":"5.2.9.2"},{"backlink":"practice/dashboard-addon-installation.html#fig5.2.9.3","level":"5.2.9","list_caption":"Figure: pod无法正常启动","alt":"pod无法正常启动","nro":128,"url":"../images/dashboard-addon-installation001.png","index":3,"caption_template":"图片 - _CAPTION_","label":"pod无法正常启动","attributes":{},"skip":false,"key":"5.2.9.3"},{"backlink":"practice/heapster-addon-installation.html#fig5.2.10.1","level":"5.2.10","list_caption":"Figure: dashboard-heapster","alt":"dashboard-heapster","nro":129,"url":"../images/kubernetes-dashboard-with-heapster.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"dashboard-heapster","attributes":{},"skip":false,"key":"5.2.10.1"},{"backlink":"practice/heapster-addon-installation.html#fig5.2.10.2","level":"5.2.10","list_caption":"Figure: grafana","alt":"grafana","nro":130,"url":"../images/kubernetes-heapster-grafana.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"grafana","attributes":{},"skip":false,"key":"5.2.10.2"},{"backlink":"practice/heapster-addon-installation.html#fig5.2.10.3","level":"5.2.10","list_caption":"Figure: kubernetes-influxdb-heapster","alt":"kubernetes-influxdb-heapster","nro":131,"url":"../images/kubernetes-influxdb-heapster.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"kubernetes-influxdb-heapster","attributes":{},"skip":false,"key":"5.2.10.3"},{"backlink":"practice/heapster-addon-installation.html#fig5.2.10.4","level":"5.2.10","list_caption":"Figure: 修改grafana模板","alt":"修改grafana模板","nro":132,"url":"../images/grafana-dashboard-setting.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"修改grafana模板","attributes":{},"skip":false,"key":"5.2.10.4"},{"backlink":"practice/efk-addon-installation.html#fig5.2.11.1","level":"5.2.11","list_caption":"Figure: es-setting","alt":"es-setting","nro":133,"url":"../images/es-setting.png","index":1,"caption_template":"图片 - _CAPTION_","label":"es-setting","attributes":{},"skip":false,"key":"5.2.11.1"},{"backlink":"practice/efk-addon-installation.html#fig5.2.11.2","level":"5.2.11","list_caption":"Figure: es-home","alt":"es-home","nro":134,"url":"../images/kubernetes-efk-kibana.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"es-home","attributes":{},"skip":false,"key":"5.2.11.2"},{"backlink":"practice/traefik-ingress-installation.html#fig5.4.1.1","level":"5.4.1","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":135,"url":"../images/traefik-dashboard.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"5.4.1.1"},{"backlink":"practice/traefik-ingress-installation.html#fig5.4.1.2","level":"5.4.1","list_caption":"Figure: traefik-nginx","alt":"traefik-nginx","nro":136,"url":"../images/traefik-nginx.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"traefik-nginx","attributes":{},"skip":false,"key":"5.4.1.2"},{"backlink":"practice/traefik-ingress-installation.html#fig5.4.1.3","level":"5.4.1","list_caption":"Figure: traefik-guestbook","alt":"traefik-guestbook","nro":137,"url":"../images/traefik-guestbook.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"traefik-guestbook","attributes":{},"skip":false,"key":"5.4.1.3"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.1","level":"5.4.2","list_caption":"Figure: 使用dashboard来扩容","alt":"使用dashboard来扩容","nro":138,"url":"../images/dashbaord-scale.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"使用dashboard来扩容","attributes":{},"skip":false,"key":"5.4.2.1"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.2","level":"5.4.2","list_caption":"Figure: Traefik的UI","alt":"Traefik的UI","nro":139,"url":"../images/traefik-dashboard-locust.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Traefik的UI","attributes":{},"skip":false,"key":"5.4.2.2"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.3","level":"5.4.2","list_caption":"Figure: Locust启动界面","alt":"Locust启动界面","nro":140,"url":"../images/locust-start-swarming.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Locust启动界面","attributes":{},"skip":false,"key":"5.4.2.3"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.4","level":"5.4.2","list_caption":"Figure: Dashboard查看页面","alt":"Dashboard查看页面","nro":141,"url":"../images/sample-webapp-rc.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Dashboard查看页面","attributes":{},"skip":false,"key":"5.4.2.4"},{"backlink":"practice/distributed-load-test.html#fig5.4.2.5","level":"5.4.2","list_caption":"Figure: Locust测试结果页面","alt":"Locust测试结果页面","nro":142,"url":"../images/locust-dashboard.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Locust测试结果页面","attributes":{},"skip":false,"key":"5.4.2.5"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig5.4.3.1","level":"5.4.3","list_caption":"Figure: kubernetes-dashboard","alt":"kubernetes-dashboard","nro":143,"url":"../images/kubenetes-e2e-test.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"kubernetes-dashboard","attributes":{},"skip":false,"key":"5.4.3.1"},{"backlink":"practice/network-and-cluster-perfermance-test.html#fig5.4.3.2","level":"5.4.3","list_caption":"Figure: locust测试页面","alt":"locust测试页面","nro":144,"url":"../images/kubernetes-locust-test.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"locust测试页面","attributes":{},"skip":false,"key":"5.4.3.2"},{"backlink":"practice/edge-node-configuration.html#fig5.4.4.1","level":"5.4.4","list_caption":"Figure: 边缘节点架构","alt":"边缘节点架构","nro":145,"url":"../images/kubernetes-edge-node-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"边缘节点架构","attributes":{},"skip":false,"key":"5.4.4.1"},{"backlink":"practice/edge-node-configuration.html#fig5.4.4.2","level":"5.4.4","list_caption":"Figure: 使用域名来访问Kubernetes中的服务","alt":"使用域名来访问Kubernetes中的服务","nro":146,"url":"../images/accessing-kubernetes-services-with-dns-name.png","index":2,"caption_template":"图片 - _CAPTION_","label":"使用域名来访问Kubernetes中的服务","attributes":{},"skip":false,"key":"5.4.4.2"},{"backlink":"practice/configuring-dns.html#fig5.4.6.1.1","level":"5.4.6.1","list_caption":"Figure: DNS lookup flow","alt":"DNS lookup flow","nro":147,"url":"https://d33wubrfki0l68.cloudfront.net/340889cb80e81dcd19a16bc34697a7907e2b229a/24ad0/docs/tasks/administer-cluster/dns-custom-nameservers/dns.png","index":1,"caption_template":"图片 - _CAPTION_","label":"DNS lookup flow","attributes":{},"skip":false,"key":"5.4.6.1.1"},{"backlink":"practice/master-ha.html#fig5.5.1.1","level":"5.5.1","list_caption":"Figure: Master HA架构图","alt":"Master HA架构图","nro":148,"url":"../images/master-ha.JPG","index":1,"caption_template":"图片 - _CAPTION_","label":"Master HA架构图","attributes":{},"skip":false,"key":"5.5.1.1"},{"backlink":"practice/app-log-collection.html#fig5.5.3.1","level":"5.5.3","list_caption":"Figure: filebeat日志收集架构图","alt":"filebeat日志收集架构图","nro":149,"url":"../images/filebeat-log-collector.png","index":1,"caption_template":"图片 - _CAPTION_","label":"filebeat日志收集架构图","attributes":{},"skip":false,"key":"5.5.3.1"},{"backlink":"practice/app-log-collection.html#fig5.5.3.2","level":"5.5.3","list_caption":"Figure: Kibana页面","alt":"Kibana页面","nro":150,"url":"../images/filebeat-docker-test.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kibana页面","attributes":{},"skip":false,"key":"5.5.3.2"},{"backlink":"practice/app-log-collection.html#fig5.5.3.3","level":"5.5.3","list_caption":"Figure: filebeat收集的日志详细信息","alt":"filebeat收集的日志详细信息","nro":151,"url":"../images/kubernetes-filebeat-detail.png","index":3,"caption_template":"图片 - _CAPTION_","label":"filebeat收集的日志详细信息","attributes":{},"skip":false,"key":"5.5.3.3"},{"backlink":"practice/monitor.html#fig5.5.5.1","level":"5.5.5","list_caption":"Figure: Kubernetes集群中的监控","alt":"Kubernetes集群中的监控","nro":152,"url":"../images/monitoring-in-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes集群中的监控","attributes":{},"skip":false,"key":"5.5.5.1"},{"backlink":"practice/monitor.html#fig5.5.5.2","level":"5.5.5","list_caption":"Figure: kubernetes的容器命名规则示意图","alt":"kubernetes的容器命名规则示意图","nro":153,"url":"../images/kubernetes-container-naming-rule.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"kubernetes的容器命名规则示意图","attributes":{},"skip":false,"key":"5.5.5.2"},{"backlink":"practice/monitor.html#fig5.5.5.3","level":"5.5.5","list_caption":"Figure: Heapster架构图(改进版)","alt":"Heapster架构图(改进版)","nro":154,"url":"../images/kubernetes-heapster-monitoring.png","index":3,"caption_template":"图片 - _CAPTION_","label":"Heapster架构图(改进版)","attributes":{},"skip":false,"key":"5.5.5.3"},{"backlink":"practice/monitor.html#fig5.5.5.4","level":"5.5.5","list_caption":"Figure: 应用监控架构图","alt":"应用监控架构图","nro":155,"url":"../images/kubernetes-app-monitoring.png","index":4,"caption_template":"图片 - _CAPTION_","label":"应用监控架构图","attributes":{},"skip":false,"key":"5.5.5.4"},{"backlink":"practice/monitor.html#fig5.5.5.5","level":"5.5.5","list_caption":"Figure: 应用拓扑图","alt":"应用拓扑图","nro":156,"url":"../images/weave-scope-service-topology.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"应用拓扑图","attributes":{},"skip":false,"key":"5.5.5.5"},{"backlink":"practice/data-persistence-problem.html#fig5.5.6.1","level":"5.5.6","list_caption":"Figure: 日志持久化收集解决方案示意图","alt":"日志持久化收集解决方案示意图","nro":157,"url":"../images/log-persistence-logstash.png","index":1,"caption_template":"图片 - _CAPTION_","label":"日志持久化收集解决方案示意图","attributes":{},"skip":false,"key":"5.5.6.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig5.6.1.3.1","level":"5.6.1.3","list_caption":"Figure: 创建存储","alt":"创建存储","nro":158,"url":"../images/create-gluster-storage.png","index":1,"caption_template":"图片 - _CAPTION_","label":"创建存储","attributes":{},"skip":false,"key":"5.6.1.3.1"},{"backlink":"practice/storage-for-containers-using-glusterfs-with-openshift.html#fig5.6.1.3.2","level":"5.6.1.3","list_caption":"Figure: Screen Shot 2017-03-24 at 11.09.34.png","alt":"Screen Shot 2017-03-24 at 11.09.34.png","nro":159,"url":"https://keithtenzer.files.wordpress.com/2017/03/screen-shot-2017-03-24-at-11-09-341.png?w=440","index":2,"caption_template":"图片 - _CAPTION_","label":"Screen Shot 2017-03-24 at 11.09.34.png","attributes":{},"skip":false,"key":"5.6.1.3.2"},{"backlink":"practice/openebs.html#fig5.6.4.1","level":"5.6.4","list_caption":"Figure: OpenEBS集群数据平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","alt":"OpenEBS集群数据平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","nro":160,"url":"../images/OpenEBS-Data-Plane.png","index":1,"caption_template":"图片 - _CAPTION_","label":"OpenEBS集群数据平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","attributes":{},"skip":false,"key":"5.6.4.1"},{"backlink":"practice/openebs.html#fig5.6.4.2","level":"5.6.4","list_caption":"Figure: OpenEBS集群的控制平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","alt":"OpenEBS集群的控制平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","nro":161,"url":"../images/OpenEBS-Control-Plane.png","index":2,"caption_template":"图片 - _CAPTION_","label":"OpenEBS集群的控制平面(图片来自https://github.com/openebs/openebs/blob/master/contribute/design/README.md)","attributes":{},"skip":false,"key":"5.6.4.2"},{"backlink":"practice/using-openebs-for-persistent-storage.html#fig5.6.4.1.1","level":"5.6.4.1","list_caption":"Figure: Kubernetes iSCSI架构","alt":"Kubernetes iSCSI架构","nro":162,"url":"../images/iscsi-on-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes iSCSI架构","attributes":{},"skip":false,"key":"5.6.4.1.1"},{"backlink":"practice/using-heapster-to-get-object-metrics.html#fig5.7.1.1.1","level":"5.7.1.1","list_caption":"Figure: Heapster架构图","alt":"Heapster架构图","nro":163,"url":"../images/heapster-architecture.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Heapster架构图","attributes":{},"skip":false,"key":"5.7.1.1.1"},{"backlink":"practice/prometheus.html#fig5.7.2.1","level":"5.7.2","list_caption":"Figure: Prometheus 架构图","alt":"Prometheus 架构图","nro":164,"url":"../images/006tNbRwly1fwcgsn11fej311j0mjadw.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Prometheus 架构图","attributes":{},"skip":false,"key":"5.7.2.1"},{"backlink":"practice/using-prometheus-to-monitor-kuberentes-cluster.html#fig5.7.2.1.1","level":"5.7.2.1","list_caption":"Figure: Grafana页面","alt":"Grafana页面","nro":165,"url":"../images/kubernetes-prometheus-monitoring.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Grafana页面","attributes":{},"skip":false,"key":"5.7.2.1.1"},{"backlink":"practice/promql.html#fig5.7.2.2.1","level":"5.7.2.2","list_caption":"Figure: Prometheus 的查询页面","alt":"Prometheus 的查询页面","nro":166,"url":"../images/006tNbRwly1fwcl7v28rhj30xl0onadv.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Prometheus 的查询页面","attributes":{},"skip":false,"key":"5.7.2.2.1"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.1","level":"5.7.3","list_caption":"Figure: Vistio的集群级别可视化","alt":"Vistio的集群级别可视化","nro":167,"url":"../images/00704eQkgy1fshft5oxlwj318g0pe0wp.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Vistio的集群级别可视化","attributes":{},"skip":false,"key":"5.7.3.1"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.2","level":"5.7.3","list_caption":"Figure: Prometheus查询","alt":"Prometheus查询","nro":168,"url":"../images/00704eQkgy1fshg0vw25ij318g0jzqjq.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Prometheus查询","attributes":{},"skip":false,"key":"5.7.3.2"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.3","level":"5.7.3","list_caption":"Figure: vistio-api的期望输出","alt":"vistio-api的期望输出","nro":169,"url":"../images/00704eQkgy1fshi61t04oj310q17c0y1.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"vistio-api的期望输出","attributes":{},"skip":false,"key":"5.7.3.3"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.4","level":"5.7.3","list_caption":"Figure: Vistio主页面","alt":"Vistio主页面","nro":170,"url":"../images/00704eQkgy1fshi98duzgj318g0l2406.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Vistio主页面","attributes":{},"skip":false,"key":"5.7.3.4"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.5","level":"5.7.3","list_caption":"Figure: istio mesh的网络流量","alt":"istio mesh的网络流量","nro":171,"url":"../images/00704eQkgy1fshibdwcj3j318g0p8th1.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"istio mesh的网络流量","attributes":{},"skip":false,"key":"5.7.3.5"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.6","level":"5.7.3","list_caption":"Figure: 查明网络问题","alt":"查明网络问题","nro":172,"url":"../images/00704eQkgy1fshicc7or1j318g0p8ahr.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"查明网络问题","attributes":{},"skip":false,"key":"5.7.3.6"},{"backlink":"practice/vistio-visualize-your-istio-mesh.html#fig5.7.3.7","level":"5.7.3","list_caption":"Figure: vistio api的不正确输出","alt":"vistio api的不正确输出","nro":173,"url":"../images/00704eQkgy1fshie7wxkyj30ks0f4myd.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"vistio api的不正确输出","attributes":{},"skip":false,"key":"5.7.3.7"},{"backlink":"practice/opentracing.html#fig5.8.1.1","level":"5.8.1","list_caption":"Figure: Jaeger UI","alt":"Jaeger UI","nro":174,"url":"../images/006tNbRwly1fwjg48fh7xj31kw0wedrg.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Jaeger UI","attributes":{},"skip":false,"key":"5.8.1.1"},{"backlink":"practice/opentracing.html#fig5.8.1.2","level":"5.8.1","list_caption":"Figure: Chrome Inspector","alt":"Chrome Inspector","nro":175,"url":"../images/006tNbRwly1fwjkfbvfluj30y70hf0y9.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Chrome Inspector","attributes":{},"skip":false,"key":"5.8.1.2"},{"backlink":"practice/helm.html#fig5.9.1.1","level":"5.9.1","list_caption":"Figure: Helm 架构图(来自 IBM Developer Blog)","alt":"Helm 架构图(来自 IBM Developer Blog)","nro":176,"url":"../images/helm-chart.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Helm 架构图(来自 IBM Developer Blog)","attributes":{},"skip":false,"key":"5.9.1.1"},{"backlink":"practice/create-private-charts-repo.html#fig5.9.2.1","level":"5.9.2","list_caption":"Figure: Helm monocular界面","alt":"Helm monocular界面","nro":177,"url":"../images/helm-monocular-jimmysong.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Helm monocular界面","attributes":{},"skip":false,"key":"5.9.2.1"},{"backlink":"practice/ci-cd.html#fig5.10.1","level":"5.10","list_caption":"Figure: CI/CD with Kubernetes","alt":"CI/CD with Kubernetes","nro":178,"url":"../images/00704eQkgy1fsaxszh01vj30da0j2jvn.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CI/CD with Kubernetes","attributes":{},"skip":false,"key":"5.10.1"},{"backlink":"practice/ci-cd.html#fig5.10.2","level":"5.10","list_caption":"Figure: Kubernetes改变了应用的基础架构","alt":"Kubernetes改变了应用的基础架构","nro":179,"url":"../images/00704eQkgy1fsayashxz3j31c00w6aed.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes改变了应用的基础架构","attributes":{},"skip":false,"key":"5.10.2"},{"backlink":"practice/ci-cd.html#fig5.10.3","level":"5.10","list_caption":"Figure: Kubernetes中的CI/CD","alt":"Kubernetes中的CI/CD","nro":180,"url":"../images/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Kubernetes中的CI/CD","attributes":{},"skip":false,"key":"5.10.3"},{"backlink":"practice/ci-cd.html#fig5.10.4","level":"5.10","list_caption":"Figure: 云原生工作负载","alt":"云原生工作负载","nro":181,"url":"../images/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"云原生工作负载","attributes":{},"skip":false,"key":"5.10.4"},{"backlink":"practice/ci-cd.html#fig5.10.5","level":"5.10","list_caption":"Figure: 云原生工作负载映射到Kuberentes原语","alt":"云原生工作负载映射到Kuberentes原语","nro":182,"url":"../images/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"云原生工作负载映射到Kuberentes原语","attributes":{},"skip":false,"key":"5.10.5"},{"backlink":"practice/ci-cd.html#fig5.10.6","level":"5.10","list_caption":"Figure: spinnaker中的组件及角色交互关系","alt":"spinnaker中的组件及角色交互关系","nro":183,"url":"../images/00704eQkgy1fsaz2wirz9j31bs0vygsb.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"spinnaker中的组件及角色交互关系","attributes":{},"skip":false,"key":"5.10.6"},{"backlink":"practice/ci-cd.html#fig5.10.7","level":"5.10","list_caption":"Figure: Spinnaker部署流水线","alt":"Spinnaker部署流水线","nro":184,"url":"../images/00704eQkgy1fsaz3yo227j31c60mgdim.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Spinnaker部署流水线","attributes":{},"skip":false,"key":"5.10.7"},{"backlink":"practice/ci-cd.html#fig5.10.8","level":"5.10","list_caption":"Figure: Spinnaker的预发布流水线","alt":"Spinnaker的预发布流水线","nro":185,"url":"../images/00704eQkgy1fsaz50k2atj31bs0mitbn.jpg","index":8,"caption_template":"图片 - _CAPTION_","label":"Spinnaker的预发布流水线","attributes":{},"skip":false,"key":"5.10.8"},{"backlink":"practice/ci-cd.html#fig5.10.9","level":"5.10","list_caption":"Figure: Spinnaker的生产流水线","alt":"Spinnaker的生产流水线","nro":186,"url":"../images/00704eQkgy1fsaz5n5qs9j31by0motbm.jpg","index":9,"caption_template":"图片 - _CAPTION_","label":"Spinnaker的生产流水线","attributes":{},"skip":false,"key":"5.10.9"},{"backlink":"practice/ci-cd.html#fig5.10.10","level":"5.10","list_caption":"Figure: 可观察性","alt":"可观察性","nro":187,"url":"../images/00704eQkgy1fsazabn0b9j31by0w6791.jpg","index":10,"caption_template":"图片 - _CAPTION_","label":"可观察性","attributes":{},"skip":false,"key":"5.10.10"},{"backlink":"practice/ci-cd.html#fig5.10.11","level":"5.10","list_caption":"Figure: Prometheus生态系统中的组件","alt":"Prometheus生态系统中的组件","nro":188,"url":"../images/00704eQkgy1fsazcclee6j31c20w6n5y.jpg","index":11,"caption_template":"图片 - _CAPTION_","label":"Prometheus生态系统中的组件","attributes":{},"skip":false,"key":"5.10.11"},{"backlink":"practice/jenkins-ci-cd.html#fig5.10.1.1","level":"5.10.1","list_caption":"Figure: 基于Jenkins的持续集成与发布","alt":"基于Jenkins的持续集成与发布","nro":189,"url":"../images/kubernetes-jenkins-ci-cd.png","index":1,"caption_template":"图片 - _CAPTION_","label":"基于Jenkins的持续集成与发布","attributes":{},"skip":false,"key":"5.10.1.1"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.1","level":"5.10.2","list_caption":"Figure: OAuth注册","alt":"OAuth注册","nro":190,"url":"../images/github-oauth-register.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"OAuth注册","attributes":{},"skip":false,"key":"5.10.2.1"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.2","level":"5.10.2","list_caption":"Figure: OAuth key","alt":"OAuth key","nro":191,"url":"../images/github-oauth-drone-key.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"OAuth key","attributes":{},"skip":false,"key":"5.10.2.2"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.3","level":"5.10.2","list_caption":"Figure: Drone登陆界面","alt":"Drone登陆界面","nro":192,"url":"../images/drone-login-github.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Drone登陆界面","attributes":{},"skip":false,"key":"5.10.2.3"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.4","level":"5.10.2","list_caption":"Figure: Github启用repo设置","alt":"Github启用repo设置","nro":193,"url":"../images/drone-github-active.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Github启用repo设置","attributes":{},"skip":false,"key":"5.10.2.4"},{"backlink":"practice/drone-ci-cd.html#fig5.10.2.5","level":"5.10.2","list_caption":"Figure: Github单个repo设置","alt":"Github单个repo设置","nro":194,"url":"../images/drone-github-repo-setting.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Github单个repo设置","attributes":{},"skip":false,"key":"5.10.2.5"},{"backlink":"practice/manually-upgrade.html#fig5.11.1.1","level":"5.11.1","list_caption":"Figure: Kubernetes零宕机时间升级建议","alt":"Kubernetes零宕机时间升级建议","nro":195,"url":"../images/zero-downtime-kubernetes-upgrade-tips.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes零宕机时间升级建议","attributes":{},"skip":false,"key":"5.11.1.1"},{"backlink":"practice/manually-upgrade.html#fig5.11.1.2","level":"5.11.1","list_caption":"Figure: Kuberentes API对象的版本演进","alt":"Kuberentes API对象的版本演进","nro":196,"url":"../images/kubernetes-apversions-changes.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kuberentes API对象的版本演进","attributes":{},"skip":false,"key":"5.11.1.2"},{"backlink":"practice/dashboard-upgrade.html#fig5.11.2.1","level":"5.11.2","list_caption":"Figure: 登陆界面","alt":"登陆界面","nro":197,"url":"../images/kubernetes-dashboard-1.7.1-login.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"登陆界面","attributes":{},"skip":false,"key":"5.11.2.1"},{"backlink":"practice/dashboard-upgrade.html#fig5.11.2.2","level":"5.11.2","list_caption":"Figure: Dashboard首页","alt":"Dashboard首页","nro":198,"url":"../images/kubernetes-dashboard-1.7.1-default-page.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Dashboard首页","attributes":{},"skip":false,"key":"5.11.2.2"},{"backlink":"practice/dashboard-upgrade.html#fig5.11.2.3","level":"5.11.2","list_caption":"Figure: Dashboard用户空间页面","alt":"Dashboard用户空间页面","nro":199,"url":"../images/kubernetes-dashboard-1.7.1-brand.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Dashboard用户空间页面","attributes":{},"skip":false,"key":"5.11.2.3"},{"backlink":"practice/dashboard-upgrade.html#fig5.11.2.4","level":"5.11.2","list_caption":"Figure: kubeconfig文件","alt":"kubeconfig文件","nro":200,"url":"../images/brand-kubeconfig-yaml.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"kubeconfig文件","attributes":{},"skip":false,"key":"5.11.2.4"},{"backlink":"usecases/microservices.html#fig6.2.1","level":"6.2","list_caption":"Figure: 微服务关注的部分","alt":"微服务关注的部分","nro":201,"url":"../images/microservices-concerns.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"微服务关注的部分","attributes":{},"skip":false,"key":"6.2.1"},{"backlink":"usecases/service-discovery-in-microservices.html#fig6.2.1.1","level":"6.2.1","list_caption":"Figure: 微服务中的服务发现","alt":"微服务中的服务发现","nro":202,"url":"../images/service-discovery-in-microservices.png","index":1,"caption_template":"图片 - _CAPTION_","label":"微服务中的服务发现","attributes":{},"skip":false,"key":"6.2.1.1"},{"backlink":"usecases/microservices-for-java-developers.html#fig6.2.2.1","level":"6.2.2","list_caption":"Figure: Spring技术栈","alt":"Spring技术栈","nro":203,"url":"../images/spring-stack.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Spring技术栈","attributes":{},"skip":false,"key":"6.2.2.1"},{"backlink":"usecases/microservices-for-java-developers.html#fig6.2.2.2","level":"6.2.2","list_caption":"Figure: Spring Boot的知识点","alt":"Spring Boot的知识点","nro":204,"url":"../images/spring-boot-note-spots.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Spring Boot的知识点","attributes":{},"skip":false,"key":"6.2.2.2"},{"backlink":"usecases/service-mesh.html#fig6.3.1","level":"6.3","list_caption":"Figure: 下一代异构微服务架构","alt":"下一代异构微服务架构","nro":205,"url":"../images/polyglot-microservices-serivce-mesh.png","index":1,"caption_template":"图片 - _CAPTION_","label":"下一代异构微服务架构","attributes":{},"skip":false,"key":"6.3.1"},{"backlink":"usecases/service-mesh.html#fig6.3.2","level":"6.3","list_caption":"Figure: Service Mesh 架构图","alt":"Service Mesh 架构图","nro":206,"url":"../images/serivce-mesh-control-plane.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Service Mesh 架构图","attributes":{},"skip":false,"key":"6.3.2"},{"backlink":"usecases/service-mesh.html#fig6.3.3","level":"6.3","list_caption":"Figure: Istio vs linkerd","alt":"Istio vs linkerd","nro":207,"url":"../images/istio-vs-linkerd.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Istio vs linkerd","attributes":{},"skip":false,"key":"6.3.3"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.1","level":"6.3.1.1","list_caption":"Figure: Service Mesh模型对比","alt":"Service Mesh模型对比","nro":208,"url":"../images/0069RVTdly1fuafvbnuc7j310a0oqdm9.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Service Mesh模型对比","attributes":{},"skip":false,"key":"6.3.1.1.1"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.2","level":"6.3.1.1","list_caption":"Figure: 网状网络拓扑","alt":"网状网络拓扑","nro":209,"url":"../images/0069RVTdly1fuaie8jan8j310a0kitem.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"网状网络拓扑","attributes":{},"skip":false,"key":"6.3.1.1.2"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.3","level":"6.3.1.1","list_caption":"Figure: Service Mesh架构图","alt":"Service Mesh架构图","nro":210,"url":"../images/0069RVTdly1fuail4d24jj31080rkgr7.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Service Mesh架构图","attributes":{},"skip":false,"key":"6.3.1.1.3"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.4","level":"6.3.1.1","list_caption":"Figure: Istio Mixer","alt":"Istio Mixer","nro":211,"url":"../images/0069RVTdly1fuam4ln45jj30yu0o6wkc.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Istio Mixer","attributes":{},"skip":false,"key":"6.3.1.1.4"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.5","level":"6.3.1.1","list_caption":"Figure: Istio架构图","alt":"Istio架构图","nro":212,"url":"../images/0069RVTdly1fuamvq97cuj30yu0wg7cr.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Istio架构图","attributes":{},"skip":false,"key":"6.3.1.1.5"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.6","level":"6.3.1.1","list_caption":"Figure: OSI模型","alt":"OSI模型","nro":213,"url":"../images/0069RVTdly1fuanez4qbtj30v4183n7p.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"OSI模型","attributes":{},"skip":false,"key":"6.3.1.1.6"},{"backlink":"usecases/service-mesh-fundamental.html#fig6.3.1.1.7","level":"6.3.1.1","list_caption":"Figure: 在L5解耦","alt":"在L5解耦","nro":214,"url":"../images/006tNbRwly1fubfiiryirj30w20ayjui.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"在L5解耦","attributes":{},"skip":false,"key":"6.3.1.1.7"},{"backlink":"usecases/comparing-service-mesh-technologies.html#fig6.3.1.2.1","level":"6.3.1.2","list_caption":"Figure: 客户端库","alt":"客户端库","nro":215,"url":"../images/006tNbRwly1fubnx0q9bpj30vq0pq465.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"客户端库","attributes":{},"skip":false,"key":"6.3.1.2.1"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.1","level":"6.3.1.3","list_caption":"Figure: Service Mesh架构图","alt":"Service Mesh架构图","nro":216,"url":"../images/006tNbRwly1fubs6ts3sgj30vo0osdnj.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Service Mesh架构图","attributes":{},"skip":false,"key":"6.3.1.3.1"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.2","level":"6.3.1.3","list_caption":"Figure: Ingress或边缘代理架构图","alt":"Ingress或边缘代理架构图","nro":217,"url":"../images/006tNbRwly1fubsk4v16hj30vo0bq75z.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Ingress或边缘代理架构图","attributes":{},"skip":false,"key":"6.3.1.3.2"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.3","level":"6.3.1.3","list_caption":"Figure: 路由器网格架构图","alt":"路由器网格架构图","nro":218,"url":"../images/006tNbRwly1fubsxrph3dj30vq0duq53.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"路由器网格架构图","attributes":{},"skip":false,"key":"6.3.1.3.3"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.4","level":"6.3.1.3","list_caption":"Figure: Proxy per Node架构图","alt":"Proxy per Node架构图","nro":219,"url":"../images/006tNbRwly1fubt5a97h7j30vq0bcq5p.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Proxy per Node架构图","attributes":{},"skip":false,"key":"6.3.1.3.4"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.5","level":"6.3.1.3","list_caption":"Figure: Sidecar代理/Fabric模型架构图","alt":"Sidecar代理/Fabric模型架构图","nro":220,"url":"../images/006tNbRwly1fubvi0dnhlj30vo0ekwhx.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Sidecar代理/Fabric模型架构图","attributes":{},"skip":false,"key":"6.3.1.3.5"},{"backlink":"usecases/service-mesh-adoption-and-evolution.html#fig6.3.1.3.6","level":"6.3.1.3","list_caption":"Figure: Sidecar代理/控制平面架构图","alt":"Sidecar代理/控制平面架构图","nro":221,"url":"../images/006tNbRwly1fubvr83wvgj30vq0mmdip.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"Sidecar代理/控制平面架构图","attributes":{},"skip":false,"key":"6.3.1.3.6"},{"backlink":"usecases/service-mesh-customization-and-integration.html#fig6.3.1.4.1","level":"6.3.1.4","list_caption":"Figure: nginMesh架构图","alt":"nginMesh架构图","nro":222,"url":"../images/006tNbRwly1fucp8yralaj30vu0sijx8.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"nginMesh架构图","attributes":{},"skip":false,"key":"6.3.1.4.1"},{"backlink":"usecases/service-mesh-customization-and-integration.html#fig6.3.1.4.2","level":"6.3.1.4","list_caption":"Figure: Mixer adapter","alt":"Mixer adapter","nro":223,"url":"../images/006tNbRwly1fucplat3l9j30vo0lw43l.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Mixer adapter","attributes":{},"skip":false,"key":"6.3.1.4.2"},{"backlink":"usecases/service-mesh-customization-and-integration.html#fig6.3.1.4.3","level":"6.3.1.4","list_caption":"Figure: SOFAMesh","alt":"SOFAMesh","nro":224,"url":"../images/mosn-with-service-mesh.png","index":3,"caption_template":"图片 - _CAPTION_","label":"SOFAMesh","attributes":{},"skip":false,"key":"6.3.1.4.3"},{"backlink":"usecases/service-mesh-customization-and-integration.html#fig6.3.1.4.4","level":"6.3.1.4","list_caption":"Figure: SOFAMosn模块架构图","alt":"SOFAMosn模块架构图","nro":225,"url":"../images/006tNbRwly1fucpc5fn8wj31kw0sfdnu.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"SOFAMosn模块架构图","attributes":{},"skip":false,"key":"6.3.1.4.4"},{"backlink":"usecases/istio.html#fig6.3.2.1","level":"6.3.2","list_caption":"Figure: Istio的mindmap","alt":"Istio的mindmap","nro":226,"url":"../images/istio-mindmap.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Istio的mindmap","attributes":{},"skip":false,"key":"6.3.2.1"},{"backlink":"usecases/istio.html#fig6.3.2.2","level":"6.3.2","list_caption":"Figure: Istio架构图","alt":"Istio架构图","nro":227,"url":"../images/istio-arch.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Istio架构图","attributes":{},"skip":false,"key":"6.3.2.2"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.1","level":"6.3.2.1","list_caption":"Figure: Istio 在 Kubernetes 中的部署架构图","alt":"Istio 在 Kubernetes 中的部署架构图","nro":228,"url":"../images/istio-deployment-architecture-diagram.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Istio 在 Kubernetes 中的部署架构图","attributes":{},"skip":false,"key":"6.3.2.1.1"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.2","level":"6.3.2.1","list_caption":"Figure: BookInfo Sample应用架构图","alt":"BookInfo Sample应用架构图","nro":229,"url":"../images/bookinfo-sample-arch.png","index":2,"caption_template":"图片 - _CAPTION_","label":"BookInfo Sample应用架构图","attributes":{},"skip":false,"key":"6.3.2.1.2"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.3","level":"6.3.2.1","list_caption":"Figure: BookInfo Sample页面","alt":"BookInfo Sample页面","nro":230,"url":"../images/bookinfo-sample.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"BookInfo Sample页面","attributes":{},"skip":false,"key":"6.3.2.1.3"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.4","level":"6.3.2.1","list_caption":"Figure: Istio Grafana界面","alt":"Istio Grafana界面","nro":231,"url":"../images/istio-grafana.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Istio Grafana界面","attributes":{},"skip":false,"key":"6.3.2.1.4"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.5","level":"6.3.2.1","list_caption":"Figure: Prometheus页面","alt":"Prometheus页面","nro":232,"url":"../images/istio-prometheus.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Prometheus页面","attributes":{},"skip":false,"key":"6.3.2.1.5"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.6","level":"6.3.2.1","list_caption":"Figure: Zipkin页面","alt":"Zipkin页面","nro":233,"url":"../images/istio-zipkin.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"Zipkin页面","attributes":{},"skip":false,"key":"6.3.2.1.6"},{"backlink":"usecases/istio-installation.html#fig6.3.2.1.7","level":"6.3.2.1","list_caption":"Figure: ServiceGraph页面","alt":"ServiceGraph页面","nro":234,"url":"../images/istio-servicegraph.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"ServiceGraph页面","attributes":{},"skip":false,"key":"6.3.2.1.7"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.1","level":"6.3.2.4","list_caption":"Figure: katacoda","alt":"katacoda","nro":235,"url":"../images/006tNc79gy1ftwe77v4u5j31kw0ziwtw.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"katacoda","attributes":{},"skip":false,"key":"6.3.2.4.1"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.2","level":"6.3.2.4","list_caption":"Figure: weavescope","alt":"weavescope","nro":236,"url":"../images/006tNc79gy1ftwhtmzhfej31kw0ziww1.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"weavescope","attributes":{},"skip":false,"key":"6.3.2.4.2"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.3","level":"6.3.2.4","list_caption":"Figure: weavescope","alt":"weavescope","nro":237,"url":"../images/006tNc79gy1ftwhvtu1vxj31kw0zitvc.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"weavescope","attributes":{},"skip":false,"key":"6.3.2.4.3"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.4","level":"6.3.2.4","list_caption":"Figure: Red Hat","alt":"Red Hat","nro":238,"url":"../images/006tNc79gy1ftwiolw1tyj31kw0zib29.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Red Hat","attributes":{},"skip":false,"key":"6.3.2.4.4"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.5","level":"6.3.2.4","list_caption":"Figure: Red Hat developers","alt":"Red Hat developers","nro":239,"url":"../images/006tNc79gy1ftwjyxiw1pj31kw0zi4qp.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"Red Hat developers","attributes":{},"skip":false,"key":"6.3.2.4.5"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.6","level":"6.3.2.4","list_caption":"Figure: IBM developerWorks","alt":"IBM developerWorks","nro":240,"url":"../images/006tNc79gy1ftweryj0zrj31kw0zix6q.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"IBM developerWorks","attributes":{},"skip":false,"key":"6.3.2.4.6"},{"backlink":"usecases/istio-tutorials-collection.html#fig6.3.2.4.7","level":"6.3.2.4","list_caption":"Figure: IBM developers","alt":"IBM developers","nro":241,"url":"../images/006tNc79gy1ftwesjg1e2j31kw0s8woq.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"IBM developers","attributes":{},"skip":false,"key":"6.3.2.4.7"},{"backlink":"usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html#fig6.3.2.5.1","level":"6.3.2.5","list_caption":"Figure: Sidecar 模式示意图","alt":"Sidecar 模式示意图","nro":242,"url":"../images/sidecar-pattern.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Sidecar 模式示意图","attributes":{},"skip":false,"key":"6.3.2.5.1"},{"backlink":"usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html#fig6.3.2.5.2","level":"6.3.2.5","list_caption":"Figure: Sidecar 流量劫持示意图","alt":"Sidecar 流量劫持示意图","nro":243,"url":"../images/envoy-sidecar-traffic-interception-jimmysong-blog.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Sidecar 流量劫持示意图","attributes":{},"skip":false,"key":"6.3.2.5.2"},{"backlink":"usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html#fig6.3.2.5.3","level":"6.3.2.5","list_caption":"Figure: iptables 调用链","alt":"iptables 调用链","nro":244,"url":"../images/iptables.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"iptables 调用链","attributes":{},"skip":false,"key":"6.3.2.5.3"},{"backlink":"usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.html#fig6.3.2.5.4","level":"6.3.2.5","list_caption":"Figure: hook-connect 原理示意图","alt":"hook-connect 原理示意图","nro":245,"url":"../images/hook-connect.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"hook-connect 原理示意图","attributes":{},"skip":false,"key":"6.3.2.5.4"},{"backlink":"usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.html#fig6.3.2.6.1","level":"6.3.2.6","list_caption":"Figure: Bookinfo 示例","alt":"Bookinfo 示例","nro":246,"url":"../images/006tNbRwgy1fvlwjd3302j31bo0ro0x5.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Bookinfo 示例","attributes":{},"skip":false,"key":"6.3.2.6.1"},{"backlink":"usecases/linkerd.html#fig6.3.3.1","level":"6.3.3","list_caption":"Figure: source https://linkerd.io","alt":"source https://linkerd.io","nro":247,"url":"../images/diagram-individual-instance.png","index":1,"caption_template":"图片 - _CAPTION_","label":"source https://linkerd.io","attributes":{},"skip":false,"key":"6.3.3.1"},{"backlink":"usecases/linkerd.html#fig6.3.3.2","level":"6.3.3","list_caption":"Figure: Linkerd 部署架构(图片来自https://buoyant.io/2016/10/14/a-service-mesh-for-kubernetes-part-ii-pods-are-great-until-theyre-not/)","alt":"Linkerd 部署架构(图片来自https://buoyant.io/2016/10/14/a-service-mesh-for-kubernetes-part-ii-pods-are-great-until-theyre-not/)","nro":248,"url":"https://buoyant.io/wp-content/uploads/2017/07/buoyant-k8s-daemonset-mesh.png","index":2,"caption_template":"图片 - _CAPTION_","label":"Linkerd 部署架构(图片来自https://buoyant.io/2016/10/14/a-service-mesh-for-kubernetes-part-ii-pods-are-great-until-theyre-not/)","attributes":{},"skip":false,"key":"6.3.3.2"},{"backlink":"usecases/linkerd.html#fig6.3.3.3","level":"6.3.3","list_caption":"Figure: 基于 dtab 的路由规则配置阶段发布","alt":"基于 dtab 的路由规则配置阶段发布","nro":249,"url":"https://buoyant.io/wp-content/uploads/2017/07/buoyant-4_override.png","index":3,"caption_template":"图片 - _CAPTION_","label":"基于 dtab 的路由规则配置阶段发布","attributes":{},"skip":false,"key":"6.3.3.3"},{"backlink":"usecases/linkerd.html#fig6.3.3.4","level":"6.3.3","list_caption":"Figure: Linkerd ingress controller","alt":"Linkerd ingress controller","nro":250,"url":"https://buoyant.io/wp-content/uploads/2017/07/buoyant-k8s-hello-world-ingress-controller-1.png","index":4,"caption_template":"图片 - _CAPTION_","label":"Linkerd ingress controller","attributes":{},"skip":false,"key":"6.3.3.4"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.1","level":"6.3.3.1","list_caption":"Figure: Jenkins pipeline","alt":"Jenkins pipeline","nro":251,"url":"../images/linkerd-jenkins-pipeline.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Jenkins pipeline","attributes":{},"skip":false,"key":"6.3.3.1.1"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.2","level":"6.3.3.1","list_caption":"Figure: Jenkins config","alt":"Jenkins config","nro":252,"url":"../images/linkerd-jenkins.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Jenkins config","attributes":{},"skip":false,"key":"6.3.3.1.2"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.3","level":"6.3.3.1","list_caption":"Figure: namerd","alt":"namerd","nro":253,"url":"../images/namerd-internal.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"namerd","attributes":{},"skip":false,"key":"6.3.3.1.3"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.4","level":"6.3.3.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":254,"url":"../images/linkerd-helloworld-outgoing.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"6.3.3.1.4"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.5","level":"6.3.3.1","list_caption":"Figure: linkerd监控","alt":"linkerd监控","nro":255,"url":"../images/linkerd-helloworld-incoming.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"linkerd监控","attributes":{},"skip":false,"key":"6.3.3.1.5"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.6","level":"6.3.3.1","list_caption":"Figure: linkerd性能监控","alt":"linkerd性能监控","nro":256,"url":"../images/linkerd-grafana.png","index":6,"caption_template":"图片 - _CAPTION_","label":"linkerd性能监控","attributes":{},"skip":false,"key":"6.3.3.1.6"},{"backlink":"usecases/linkerd-user-guide.html#fig6.3.3.1.7","level":"6.3.3.1","list_caption":"Figure: Linkerd ingress controller","alt":"Linkerd ingress controller","nro":257,"url":"../images/linkerd-ingress-controller.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Linkerd ingress controller","attributes":{},"skip":false,"key":"6.3.3.1.7"},{"backlink":"usecases/conduit-installation.html#fig6.3.4.2.1","level":"6.3.4.2","list_caption":"Figure: Conduit dashboard","alt":"Conduit dashboard","nro":258,"url":"../images/conduit-dashboard.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Conduit dashboard","attributes":{},"skip":false,"key":"6.3.4.2.1"},{"backlink":"usecases/envoy.html#fig6.3.5.1","level":"6.3.5","list_caption":"Figure: 负载均衡器的特性以及拓扑类型","alt":"负载均衡器的特性以及拓扑类型","nro":259,"url":"../images/load-balancing-and-proxing.png","index":1,"caption_template":"图片 - _CAPTION_","label":"负载均衡器的特性以及拓扑类型","attributes":{},"skip":false,"key":"6.3.5.1"},{"backlink":"usecases/envoy-terminology.html#fig6.3.5.1.1","level":"6.3.5.1","list_caption":"Figure: Envoy proxy 架构图","alt":"Envoy proxy 架构图","nro":260,"url":"../images/envoy-arch.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Envoy proxy 架构图","attributes":{},"skip":false,"key":"6.3.5.1.1"},{"backlink":"usecases/envoy-front-proxy.html#fig6.3.5.2.1","level":"6.3.5.2","list_caption":"Figure: Front proxy 部署结构图(转自https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/front_proxy)","alt":"Front proxy 部署结构图(转自https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/front_proxy)","nro":261,"url":"../images/envoyproxy-docker-compose.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Front proxy 部署结构图(转自https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/front_proxy)","attributes":{},"skip":false,"key":"6.3.5.2.1"},{"backlink":"usecases/envoy-mesh-in-kubernetes-tutorial.html#fig6.3.5.3.1","level":"6.3.5.3","list_caption":"Figure: Envoy Mesh架构图","alt":"Envoy Mesh架构图","nro":262,"url":"../images/envoy-mesh-in-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Envoy Mesh架构图","attributes":{},"skip":false,"key":"6.3.5.3.1"},{"backlink":"usecases/big-data.html#fig6.4.1","level":"6.4","list_caption":"Figure: Spark on yarn with kubernetes","alt":"Spark on yarn with kubernetes","nro":263,"url":"../images/spark-on-yarn-with-kubernetes.png","index":1,"caption_template":"图片 - _CAPTION_","label":"Spark on yarn with kubernetes","attributes":{},"skip":false,"key":"6.4.1"},{"backlink":"usecases/big-data.html#fig6.4.2","level":"6.4","list_caption":"Figure: 在kubernetes上使用多种调度方式","alt":"在kubernetes上使用多种调度方式","nro":264,"url":"../images/spark-on-kubernetes-with-different-schedulers.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"在kubernetes上使用多种调度方式","attributes":{},"skip":false,"key":"6.4.2"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig6.4.1.1","level":"6.4.1","list_caption":"Figure: spark master ui","alt":"spark master ui","nro":265,"url":"../images/spark-ui.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"spark master ui","attributes":{},"skip":false,"key":"6.4.1.1"},{"backlink":"usecases/spark-standalone-on-kubernetes.html#fig6.4.1.2","level":"6.4.1","list_caption":"Figure: zeppelin ui","alt":"zeppelin ui","nro":266,"url":"../images/zeppelin-ui.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"zeppelin ui","attributes":{},"skip":false,"key":"6.4.1.2"},{"backlink":"usecases/serverless.html#fig6.5.1","level":"6.5","list_caption":"Figure: Serverless Landscape","alt":"Serverless Landscape","nro":267,"url":"../images/006tNbRwly1fx0ie2kb90j31kw0ynha3.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Serverless Landscape","attributes":{},"skip":false,"key":"6.5.1"},{"backlink":"usecases/serverless.html#fig6.5.2","level":"6.5","list_caption":"Figure: 从物理机到函数计算","alt":"从物理机到函数计算","nro":268,"url":"../images/from-bare-metal-to-functions.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"从物理机到函数计算","attributes":{},"skip":false,"key":"6.5.2"},{"backlink":"usecases/serverless.html#fig6.5.3","level":"6.5","list_caption":"Figure: FaaS Landscape","alt":"FaaS Landscape","nro":269,"url":"../images/redpoint-faas-landscape.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"FaaS Landscape","attributes":{},"skip":false,"key":"6.5.3"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.1","level":"6.5.1","list_caption":"Figure: Serverless 在云原生技术中的地位","alt":"Serverless 在云原生技术中的地位","nro":270,"url":"../images/cloud-landscape-zh.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Serverless 在云原生技术中的地位","attributes":{},"skip":false,"key":"6.5.1.1"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.2","level":"6.5.1","list_caption":"Figure: 服务端软件的运行环境","alt":"服务端软件的运行环境","nro":271,"url":"../images/serverless-server-side-software.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"服务端软件的运行环境","attributes":{},"skip":false,"key":"6.5.1.2"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.3","level":"6.5.1","list_caption":"Figure: FaaS应用架构","alt":"FaaS应用架构","nro":272,"url":"../images/serverless-faas-platform.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"FaaS应用架构","attributes":{},"skip":false,"key":"6.5.1.3"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.4","level":"6.5.1","list_caption":"Figure: Serverless 中的函数定义","alt":"Serverless 中的函数定义","nro":273,"url":"../images/006y8mN6ly1g7ldey3l7gj31ti0mwta9.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"Serverless 中的函数定义","attributes":{},"skip":false,"key":"6.5.1.4"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.5","level":"6.5.1","list_caption":"Figure: FaaS 中的函数","alt":"FaaS 中的函数","nro":274,"url":"../images/006y8mN6ly1g7ldhm7bxyj31040u0q5n.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"FaaS 中的函数","attributes":{},"skip":false,"key":"6.5.1.5"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.6","level":"6.5.1","list_caption":"Figure: 传统应用程序架构","alt":"传统应用程序架构","nro":275,"url":"../images/non-serverless-game-arch.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"传统应用程序架构","attributes":{},"skip":false,"key":"6.5.1.6"},{"backlink":"usecases/understanding-serverless.html#fig6.5.1.7","level":"6.5.1","list_caption":"Figure: Serverless架构","alt":"Serverless架构","nro":276,"url":"../images/serverless-game-arch.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"Serverless架构","attributes":{},"skip":false,"key":"6.5.1.7"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.1","level":"6.5.2.1","list_caption":"Figure: OpenFaaS架构","alt":"OpenFaaS架构","nro":277,"url":"../images/openfaas-arch.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"OpenFaaS架构","attributes":{},"skip":false,"key":"6.5.2.1.1"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.2","level":"6.5.2.1","list_caption":"Figure: OpenFaaS Prometheus","alt":"OpenFaaS Prometheus","nro":278,"url":"../images/openfaas-prometheus.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"OpenFaaS Prometheus","attributes":{},"skip":false,"key":"6.5.2.1.2"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.3","level":"6.5.2.1","list_caption":"Figure: OpenFaas Grafana监控","alt":"OpenFaas Grafana监控","nro":279,"url":"../images/openfaas-grafana.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"OpenFaas Grafana监控","attributes":{},"skip":false,"key":"6.5.2.1.3"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.4","level":"6.5.2.1","list_caption":"Figure: OpenFaas Dashboard","alt":"OpenFaas Dashboard","nro":280,"url":"../images/openfaas-deploy-a-function.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"OpenFaas Dashboard","attributes":{},"skip":false,"key":"6.5.2.1.4"},{"backlink":"usecases/openfaas-quick-start.html#fig6.5.2.1.5","level":"6.5.2.1","list_caption":"Figure: NodeInfo执行结果","alt":"NodeInfo执行结果","nro":281,"url":"../images/openfaas-nodeinfo.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"NodeInfo执行结果","attributes":{},"skip":false,"key":"6.5.2.1.5"},{"backlink":"usecases/knative.html#fig6.5.3.1","level":"6.5.3","list_caption":"Figure: Knative logo","alt":"Knative logo","nro":282,"url":"https://tva1.sinaimg.cn/large/006y8mN6ly1g7pg0iwbzfj30d8080dfp.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Knative logo","attributes":{},"skip":false,"key":"6.5.3.1"},{"backlink":"usecases/knative.html#fig6.5.3.2","level":"6.5.3","list_caption":"Figure: Knative 受众(图片来自 knative.dev)","alt":"Knative 受众(图片来自 knative.dev)","nro":283,"url":"https://tva1.sinaimg.cn/large/006y8mN6ly1g7po5i7cgqj31ap0u075l.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Knative 受众(图片来自 knative.dev)","attributes":{},"skip":false,"key":"6.5.3.2"},{"backlink":"usecases/oam.html#fig6.6.1.1","level":"6.6.1","list_caption":"Figure: OAM 的原理","alt":"OAM 的原理","nro":284,"url":"../images/oam-principle.png","index":1,"caption_template":"图片 - _CAPTION_","label":"OAM 的原理","attributes":{},"skip":false,"key":"6.6.1.1"},{"backlink":"usecases/edge-computing.html#fig6.7.1","level":"6.7","list_caption":"Figure: KubeEdge logo","alt":"KubeEdge logo","nro":285,"url":"https://tva1.sinaimg.cn/large/006y8mN6ly1g7vfsugr2fj306y06yjra.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"KubeEdge logo","attributes":{},"skip":false,"key":"6.7.1"},{"backlink":"develop/sigs-and-working-group.html#fig7.2.1","level":"7.2","list_caption":"Figure: Kubernetes SIG","alt":"Kubernetes SIG","nro":286,"url":"../images/kubernetes-sigs.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes SIG","attributes":{},"skip":false,"key":"7.2.1"},{"backlink":"develop/testing.html#fig7.4.1","level":"7.4","list_caption":"Figure: test-infra架构图(图片来自官方GitHub)","alt":"test-infra架构图(图片来自官方GitHub)","nro":287,"url":"../images/kubernetes-test-architecture.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"test-infra架构图(图片来自官方GitHub)","attributes":{},"skip":false,"key":"7.4.1"},{"backlink":"develop/client-go-sample.html#fig7.5.1","level":"7.5","list_caption":"Figure: 使用kubernetes dashboard进行故障排查","alt":"使用kubernetes dashboard进行故障排查","nro":288,"url":"../images/kubernetes-client-go-sample-update.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"使用kubernetes dashboard进行故障排查","attributes":{},"skip":false,"key":"7.5.1"},{"backlink":"cloud-native/cncf.html#fig8.1.1","level":"8.1","list_caption":"Figure: CNCF landscape","alt":"CNCF landscape","nro":289,"url":"../images/006tNbRwly1fxmx633ymqj31dp0u0kjn.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF landscape","attributes":{},"skip":false,"key":"8.1.1"},{"backlink":"cloud-native/cncf.html#fig8.1.2","level":"8.1","list_caption":"Figure: CNCF项目成熟度级别","alt":"CNCF项目成熟度级别","nro":290,"url":"../images/cncf-graduation-criteria-v2.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"CNCF项目成熟度级别","attributes":{},"skip":false,"key":"8.1.2"},{"backlink":"cloud-native/cncf-charter.html#fig8.2.1","level":"8.2","list_caption":"Figure: CNCF组织架构图","alt":"CNCF组织架构图","nro":291,"url":"../images/cncf-org-arch.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF组织架构图","attributes":{},"skip":false,"key":"8.2.1"},{"backlink":"cloud-native/cncf-charter.html#fig8.2.2","level":"8.2","list_caption":"Figure: 云原生的理想分层架构","alt":"云原生的理想分层架构","nro":292,"url":"../images/006tKfTcly1ft3zgjlisxj30n70ffjth.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"云原生的理想分层架构","attributes":{},"skip":false,"key":"8.2.2"},{"backlink":"cloud-native/cncf-sandbox-criteria.html#fig8.4.1","level":"8.4","list_caption":"Figure: sandbox 流程","alt":"sandbox 流程","nro":293,"url":"../images/sandbox-process.png","index":1,"caption_template":"图片 - _CAPTION_","label":"sandbox 流程","attributes":{},"skip":false,"key":"8.4.1"},{"backlink":"cloud-native/cncf-project-governing.html#fig8.5.1","level":"8.5","list_caption":"Figure: CNCF 项目的成熟度分类","alt":"CNCF 项目的成熟度分类","nro":294,"url":"../images/cncf-graduation.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF 项目的成熟度分类","attributes":{},"skip":false,"key":"8.5.1"},{"backlink":"cloud-native/cncf-project-governing.html#fig8.5.2","level":"8.5","list_caption":"Figure: CNCF中的项目运作","alt":"CNCF中的项目运作","nro":295,"url":"../images/006tNc79ly1g1yz80ag98j31cs0n2gr7.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"CNCF中的项目运作","attributes":{},"skip":false,"key":"8.5.2"},{"backlink":"cloud-native/cncf-project-governing.html#fig8.5.3","level":"8.5","list_caption":"Figure: CNCF项目成熟度级别","alt":"CNCF项目成熟度级别","nro":296,"url":"../images/cncf-graduation-criteria-v2.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"CNCF项目成熟度级别","attributes":{},"skip":false,"key":"8.5.3"},{"backlink":"appendix/material-share.html#fig9.3.1","level":"9.3","list_caption":"Figure: Kubernetes 资源图标示例","alt":"Kubernetes 资源图标示例","nro":297,"url":"../images/006tNc79ly1fzmnolp5ghj30z90u0gwf.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 资源图标示例","attributes":{},"skip":false,"key":"9.3.1"},{"backlink":"appendix/issues.html#fig9.6.1","level":"9.6","list_caption":"Figure: pvc-storage-limit","alt":"pvc-storage-limit","nro":298,"url":"../images/pvc-storage-limit.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"pvc-storage-limit","attributes":{},"skip":false,"key":"9.6.1"},{"backlink":"appendix/kubernetes-1.14-changelog.html#fig9.7.8.1","level":"9.7.8","list_caption":"Figure: 大鱿鱼:kubectl log","alt":"大鱿鱼:kubectl log","nro":299,"url":"../images/006tKfTcly1g1gbdpsdbgj303c03cwel.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"大鱿鱼:kubectl log","attributes":{},"skip":false,"key":"9.7.8.1"},{"backlink":"appendix/kubernetes-1.14-changelog.html#fig9.7.8.2","level":"9.7.8","list_caption":"Figure: Kubernetes 吉祥物 kubee-cuddle","alt":"Kubernetes 吉祥物 kubee-cuddle","nro":300,"url":"../images/006tKfTcly1g1gbjvx2ugj305k05mmx9.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 吉祥物 kubee-cuddle","attributes":{},"skip":false,"key":"9.7.8.2"},{"backlink":"appendix/kubernetes-1.15-changelog.html#fig9.7.9.1","level":"9.7.9","list_caption":"Figure: KubeAdmin Logo","alt":"KubeAdmin Logo","nro":301,"url":"https://d33wubrfki0l68.cloudfront.net/285b361256db9bb624c22ff9cd32557b4bc61aba/759c7/images/blog/2019-06-19-kubernetes-1-15-release-announcement/kubeadm-logo.png","index":1,"caption_template":"图片 - _CAPTION_","label":"KubeAdmin Logo","attributes":{},"skip":false,"key":"9.7.9.1"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.1","level":"9.8.2","list_caption":"Figure: Kubernetes 搜索趋势(来自 Google trends)","alt":"Kubernetes 搜索趋势(来自 Google trends)","nro":302,"url":"../images/006tNc79ly1fzne6y4f2ej31q60fedho.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 搜索趋势(来自 Google trends)","attributes":{},"skip":false,"key":"9.8.2.1"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.2","level":"9.8.2","list_caption":"Figure: Kubernetes 的百度指数","alt":"Kubernetes 的百度指数","nro":303,"url":"../images/006tNc79ly1fznegoocmvj31y00hmgon.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"Kubernetes 的百度指数","attributes":{},"skip":false,"key":"9.8.2.2"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.3","level":"9.8.2","list_caption":"Figure: Istio 中的 CRD","alt":"Istio 中的 CRD","nro":304,"url":"../images/006tNc79ly1fzna87wmfij30u00zc4qp.jpg","index":3,"caption_template":"图片 - _CAPTION_","label":"Istio 中的 CRD","attributes":{},"skip":false,"key":"9.8.2.3"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.4","level":"9.8.2","list_caption":"Figure: 2019 Q1 软件架构趋势 - 来自 InfoQ","alt":"2019 Q1 软件架构趋势 - 来自 InfoQ","nro":305,"url":"../images/006tNc79ly1fzor2k6f7wj313j0u0dl3.jpg","index":4,"caption_template":"图片 - _CAPTION_","label":"2019 Q1 软件架构趋势 - 来自 InfoQ","attributes":{},"skip":false,"key":"9.8.2.4"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.5","level":"9.8.2","list_caption":"Figure: ServiceMesher 社区 Logo","alt":"ServiceMesher 社区 Logo","nro":306,"url":"../images/006tNc79ly1fznadbp63qj31jt0beq9s.jpg","index":5,"caption_template":"图片 - _CAPTION_","label":"ServiceMesher 社区 Logo","attributes":{},"skip":false,"key":"9.8.2.5"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.6","level":"9.8.2","list_caption":"Figure: ServiceMesher社区2018年活动一览","alt":"ServiceMesher社区2018年活动一览","nro":307,"url":"../images/006tNc79ly1fzm9vs4o3aj31s00u0x6p.jpg","index":6,"caption_template":"图片 - _CAPTION_","label":"ServiceMesher社区2018年活动一览","attributes":{},"skip":false,"key":"9.8.2.6"},{"backlink":"appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.html#fig9.8.2.7","level":"9.8.2","list_caption":"Figure: CNCF Landscape 中的 Serverless 单元","alt":"CNCF Landscape 中的 Serverless 单元","nro":308,"url":"../images/006tNc79ly1fznbh3vfbwj310f0jxgxj.jpg","index":7,"caption_template":"图片 - _CAPTION_","label":"CNCF Landscape 中的 Serverless 单元","attributes":{},"skip":false,"key":"9.8.2.7"},{"backlink":"appendix/cncf-annual-report-2018.html#fig9.9.1.1","level":"9.9.1","list_caption":"Figure: CNCF 项目成熟度级别","alt":"CNCF 项目成熟度级别","nro":309,"url":"../images/006tNc79ly1g04s0oznytj31tg0ok7ca.jpg","index":1,"caption_template":"图片 - _CAPTION_","label":"CNCF 项目成熟度级别","attributes":{},"skip":false,"key":"9.9.1.1"},{"backlink":"appendix/cncf-annual-report-2018.html#fig9.9.1.2","level":"9.9.1","list_caption":"Figure: KCSP","alt":"KCSP","nro":310,"url":"../images/006tNc79ly1g04tl97vm4j318v0h7dpt.jpg","index":2,"caption_template":"图片 - _CAPTION_","label":"KCSP","attributes":{},"skip":false,"key":"9.9.1.2"},{"backlink":"appendix/about-cka-candidate.html#fig9.11.1","level":"9.11","list_caption":"Figure: cka-question","alt":"cka-question","nro":311,"url":"../images/cka-question.png","index":1,"caption_template":"图片 - _CAPTION_","label":"cka-question","attributes":{},"skip":false,"key":"9.11.1"},{"backlink":"appendix/about-cka-candidate.html#fig9.11.2","level":"9.11","list_caption":"Figure: CKA mindmap","alt":"CKA mindmap","nro":312,"url":"../images/cka-mindmap.png","index":2,"caption_template":"图片 - _CAPTION_","label":"CKA mindmap","attributes":{},"skip":false,"key":"9.11.2"}]},"title":"Kubernetes Handbook - Kubernetes中文指南/云原生应用架构实践手册 by Jimmy Song(宋净超)","language":"zh-hans","links":{"sidebar":{"回到主页":"https://jimmysong.io","Awesome Cloud Native":"https://jimmysong.io/awesome-cloud-native","云原生社区":"https://cloudnative.to","中国云原生发展白皮书2020":"https://cloudnativeindustryalliance.github.io/whitepaper2020/","云原生应用白皮书":"https://jimmysong.io/guide-to-cloud-native-app/"}},"gitbook":"*","description":"Kubernetes Handbook - Kubernetes中文指南/云原生应用架构实践手册,本书记录了本人从零开始学习和使用Kubernetes的心路历程,着重于经验分享和总结,同时也会有相关的概念解析,希望能够帮助大家少踩坑,少走弯路,还会指引大家关注Kubernetes生态周边,如微服务构建、DevOps、大数据应用、Service Mesh、Cloud Native等领域。"},"file":{"path":"cloud-native/cloud-native-programming-language-pulumi.md","mtime":"2020-06-19T06:31:45.061Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2020-06-19T06:32:57.939Z"},"basePath":"..","book":{"language":""}}); }); diff --git a/cloud-native/cloud-native-programming-languages.html b/cloud-native/cloud-native-programming-languages.html index a0f11bb7f..c92b8f51d 100644 --- a/cloud-native/cloud-native-programming-languages.html +++ b/cloud-native/cloud-native-programming-languages.html @@ -4590,7 +4590,7 @@

    使用这种相同类型的配置表示基于容器的微服务、serverless和细粒度托管服务之间的关系导致了异常的复杂性。将应用程序转变为分布式系统应该是事后的想法。事实证明,云覆盖了您的架构和设计。表达架构和设计的最好的方式是使用代码,使用真正的编程语言编写抽象,重用和优秀的工具。

    早些时候,Eric和我采访了几十个客户。我们发现,开发人员和DevOps工程师都普遍感到幻灭。我们发现了极端的专业化,即使在同一个团队中,工程师也不会使用同一种语言。最近几周我已经听到了这个消息,我期待有一天会出现NoYAML运动。

    @@ -4634,7 +4634,7 @@ diff --git a/cloud-native/component.html b/cloud-native/component.html index 1c68769e6..d343aad24 100644 --- a/cloud-native/component.html +++ b/cloud-native/component.html @@ -4611,7 +4611,7 @@
  • The Open Application Model specification - github.com
  • @@ -4655,7 +4655,7 @@ diff --git a/cloud-native/define-cloud-native-app.html b/cloud-native/define-cloud-native-app.html index a4c3bb37b..2e04f338b 100644 --- a/cloud-native/define-cloud-native-app.html +++ b/cloud-native/define-cloud-native-app.html @@ -4578,7 +4578,7 @@

    云原生应用是一个相互关联但又不独立的组件(service、task、worker)的集合,这些组件与配置结合在一起并在适当的运行时实例化后,共同完成统一的功能目的。

    云原生应用模型

    下图是 OAM 定义的云原生应用模型示意图,为了便于理解,图中相同颜色的部分为同一类别的对象定义。

    -
    云原生应用模型
    图片 - 云原生应用模型
    +
    云原生应用模型
    图片 - 云原生应用模型

    OAM 的规范中定义了以下对象,它们既是 OAM 规范中的基本术语也是云原生应用的基本组成。

    • Workload(工作负载):应用程序的工作负载类型,由平台提供。
    • @@ -4590,7 +4590,7 @@

      OAM 规范中提供了一个使用以上对象定义云原生应用的工作流示例

      关注点分离

      下图是不同角色对于该模型的关注点示意图。

      -
      云原生应用模型中的目标角色
      图片 - 云原生应用模型中的目标角色
      +
      云原生应用模型中的目标角色
      图片 - 云原生应用模型中的目标角色

      我们可以看到对于一个云原生应用来说,不同的对象是由不同的角色来负责的:

      @@ -4648,7 +4648,7 @@ diff --git a/cloud-native/from-kubernetes-to-cloud-native.html b/cloud-native/from-kubernetes-to-cloud-native.html index 11842ffc4..6919ec18e 100644 --- a/cloud-native/from-kubernetes-to-cloud-native.html +++ b/cloud-native/from-kubernetes-to-cloud-native.html @@ -4583,7 +4583,7 @@

      容器最初是通过开发者工具而流行,可以使用它来做隔离的开发测试环境和持续集成环境,这些都是因为容器轻量级,易于配置和使用带来的优势,docker和docker-compose这样的工具极大的方便的了应用开发环境的搭建,开发者就像是化学家一样在其中小心翼翼的进行各种调试和开发。

      随着容器的在开发者中的普及,已经大家对CI流程的熟悉,容器周边的各种工具蓬勃发展,俨然形成了一个小生态,在2016年达到顶峰,下面这张是我画的容器生态图:

      -
      容器生态图 Container ecosystem
      图片 - 容器生态图 Container ecosystem
      +
      容器生态图 Container ecosystem
      图片 - 容器生态图 Container ecosystem

      该生态涵盖了容器应用中从镜像仓库、服务编排、安全管理、持续集成与发布、存储和网络管理等各个方面,随着在单主机中运行容器的成熟,集群管理和容器编排成为容器技术亟待解决的问题。譬如化学家在实验室中研究出来的新产品,如何推向市场,进行大规模生产,成了新的议题。

      为什么使用Kubernetes

      @@ -4592,28 +4592,28 @@

      Kubernetes是容器编排系统的事实标准

      在单机上运行容器,无法发挥它的最大效能,只有形成集群,才能最大程度发挥容器的良好隔离、资源分配与编排管理的优势,而对于容器的编排管理,Swarm、Mesos和Kubernetes的大战已经基本宣告结束,Kubernetes成为了无可争议的赢家。

      下面这张图是Kubernetes的架构图(图片来自网络),其中显示了组件之间交互的接口CNI、CRI、OCI等,这些将Kubernetes与某款具体产品解耦,给用户最大的定制程度,使得Kubernetes有机会成为跨云的真正的云原生应用的操作系统。

      -
      Kubernetes架构
      图片 - Kubernetes架构
      +
      Kubernetes架构
      图片 - Kubernetes架构

      随着Kubernetes的日趋成熟,“Kubernetes is becoming boring”,基于该“操作系统”之上构建的适用于不同场景的应用将成为新的发展方向,就像我们将石油开采出来后,提炼出汽油、柴油、沥青等等,所有的材料都将找到自己的用途,Kubernetes也是,毕竟我们谁也不是为了部署和管理容器而用Kubernetes,承载其上的应用才是价值之所在。

      云原生的核心目标

      -
      Cloud Native Core target
      图片 - Cloud Native Core target
      +
      Cloud Native Core target
      图片 - Cloud Native Core target

      云已经可以为我们提供稳定可以唾手可得的基础设施,但是业务上云成了一个难题,Kubernetes的出现与其说是从最初的容器编排解决方案,倒不如说是为了解决应用上云(即云原生应用)这个难题。

      包括微服务和FaaS/Serverless架构,都可以作为云原生应用的架构。

      -
      FaaS Landscape
      图片 - FaaS Landscape
      +
      FaaS Landscape
      图片 - FaaS Landscape

      但就2017年为止,Kubernetes的主要使用场景也主要作为应用开发测试环境、CI/CD和运行Web应用这几个领域,如下图TheNewStack的Kubernetes生态状况调查报告所示。

      -
      Workloads running on Kubernetes
      图片 - Workloads running on Kubernetes
      +
      Workloads running on Kubernetes
      图片 - Workloads running on Kubernetes

      另外基于Kubernetes的构建PaaS平台和Serverless也处于爆发的准备的阶段,如下图中Gartner的报告中所示:

      -
      Gartner技术爆发趋势图2017
      图片 - Gartner技术爆发趋势图2017
      +
      Gartner技术爆发趋势图2017
      图片 - Gartner技术爆发趋势图2017

      当前各大公有云如Google GKE、微软Azure ACS、亚马逊EKS(2018年上线)、VMWare、Pivotal、腾讯云、阿里云等都提供了Kubernetes服务。

      微服务

      微服务——Cloud Native的应用架构。

      下图是Bilgin Ibryam给出的微服务中应该关心的主题,图片来自RedHat Developers

      -
      Microservices concerns
      图片 - Microservices concerns
      +
      Microservices concerns
      图片 - Microservices concerns

      微服务带给我们很多开发和部署上的灵活性和技术多样性,但是也增加了服务调用的开销、分布式系统管理、调试与服务治理方面的难题。

      当前最成熟最完整的微服务框架可以说非Spring莫属,而Spring又仅限于Java语言开发,其架构本身又跟Kubernetes存在很多重合的部分,如何探索将Kubernetes作为微服务架构平台就成为一个热点话题。

      就拿微服务中最基础的服务注册发现功能来说,其方式分为客户端服务发现服务端服务发现两种,Java应用中常用的方式是使用Eureka和Ribbon做服务注册发现和负载均衡,这属于客户端服务发现,而在Kubernetes中则可以使用DNS、Service和Ingress来实现,不需要修改应用代码,直接从网络层面来实现。

      -
      两种服务发现方式
      图片 - 两种服务发现方式
      +
      两种服务发现方式
      图片 - 两种服务发现方式

      Cloud Native

      DevOps——通向云原生的云梯

      @@ -4625,9 +4625,9 @@
    • 微服务化:明确服务间的依赖,互相解耦。

    下图是我整理的关于云原生所需要的能力和特征。

    -
    Cloud Native Features
    图片 - Cloud Native Features
    +
    Cloud Native Features
    图片 - Cloud Native Features

    CNCF所托管的应用(目前已达12个),即朝着这个目标发展,其公布的Cloud Native Landscape,给出了云原生生态的参考体系。

    -
    Cloud Native Landscape v1.0
    图片 - Cloud Native Landscape v1.0
    +
    Cloud Native Landscape v1.0
    图片 - Cloud Native Landscape v1.0

    使用Kubernetes构建云原生应用

    我们都是知道Heroku推出了适用于PaaS的12 factor app的规范,包括如下要素:

      @@ -4651,9 +4651,9 @@
    1. 监控与告警
    2. 如果落实的具体的工具,请看下图,使用Kubernetes构建云原生架构:

      -
      Building a Cloud Native Architecture with Kubernetes followed 12 factor app
      图片 - Building a Cloud Native Architecture with Kubernetes followed 12 factor app
      +
      Building a Cloud Native Architecture with Kubernetes followed 12 factor app
      图片 - Building a Cloud Native Architecture with Kubernetes followed 12 factor app

      结合这12因素对开发或者改造后的应用适合部署到Kubernetes之上,基本流程如下图所示:

      -
      Creating Kubernetes native app
      图片 - Creating Kubernetes native app
      +
      Creating Kubernetes native app
      图片 - Creating Kubernetes native app

      迁移到云架构

      迁移到云端架构,相对单体架构来说会带来很多挑战。比如自动的持续集成与发布、服务监控的变革、服务暴露、权限的管控等。这些具体细节请参考Kubernetes-handbook中的说明:https://jimmysong.io/kubernetes-handbook,在此就不细节展开,另外推荐一本我翻译的由Pivotal出品的电子书——Migrating to Cloud Native Application Architectures,地址:https://jimmysong.io/migrating-to-cloud-native-application-architectures/

      Service Mesh

      @@ -4723,7 +4723,7 @@

      关于两者的架构可以参考各自的官方文档,我只从其在Kubernetes上的部署结构来说明其区别。

      -
      istio vs linkerd
      图片 - istio vs linkerd
      +
      istio vs linkerd
      图片 - istio vs linkerd

      Istio的组件复杂,可以分别部署在Kubernetes集群中,但是作为核心路由组件Envoy是以Sidecar形式与应用运行在同一个Pod中的,所有进入该Pod中的流量都需要先经过Envoy。

      Linker的部署十分简单,本身就是一个镜像,使用Kubernetes的DaemonSet方式在每个node节点上运行。

      更多信息请参考kubernetes-handbook

      @@ -4733,7 +4733,7 @@

      GitOps

      给开发者带来最大的配置和上线的灵活性,践行DevOps流程,改善研发效率,下图这样的情况将更少发生。

      -
      Deployment pipeline
      图片 - Deployment pipeline
      +
      Deployment pipeline
      图片 - Deployment pipeline

      我们知道Kubernetes中的所有应用的部署都是基于YAML文件的,这实际上就是一种Infrastructure as code,完全可以通过Git来管控基础设施和部署环境的变更。

      Big Data

      Spark现在已经非官方支持了基于Kubernetes的原生调度,其具有以下特点:

      @@ -4780,7 +4780,7 @@

      下图是在Kubernetes上运行三种调度方式的spark的单个节点的应用部分对比:

      -
      Spark on Kubernetes with different schedulers
      图片 - Spark on Kubernetes with different schedulers
      +
      Spark on Kubernetes with different schedulers
      图片 - Spark on Kubernetes with different schedulers

      从上图中可以看到在Kubernetes上使用YARN调度、standalone调度和Kubernetes原生调度的方式,每个node节点上的Pod内的Spark Executor分布,毫无疑问,使用Kubernetes原生调度的Spark任务才是最节省资源的。

      提交任务的语句看起来会像是这样的:

      ./spark-submit \
      @@ -4815,9 +4815,9 @@
       

      Contributing is Not only about code, it is about helping a community.

      下图是我们刚调研准备使用Kubernetes时候的调研方案选择。

      -
      Kubernetes solutions
      图片 - Kubernetes solutions
      +
      Kubernetes solutions
      图片 - Kubernetes solutions

      对于一个初次接触Kubernetes的人来说,看到这样一个庞大的架构选型时会望而生畏,但是Kubernetes的开源社区帮助了我们很多。

      -
      Kubernetes SIG
      图片 - Kubernetes SIG
      +
      Kubernetes SIG
      图片 - Kubernetes SIG

      我组建了K8S&Cloud Native实战ServiceMesher微信群,参与了k8smeetup、KEUC2017、kubernetes-docs-cn Kubernetes官方中文文档项目。

      有用的资料和链接

        @@ -4832,7 +4832,7 @@
      • KubeCon + CloudNativeCon 2018年11月14-15日 上海
      @@ -4876,7 +4876,7 @@ diff --git a/cloud-native/kubernetes-and-cloud-native-app-overview.html b/cloud-native/kubernetes-and-cloud-native-app-overview.html index d8c4f6baa..f8ee277c8 100644 --- a/cloud-native/kubernetes-and-cloud-native-app-overview.html +++ b/cloud-native/kubernetes-and-cloud-native-app-overview.html @@ -4578,9 +4578,9 @@

      作为全书的开头,首先从历史、生态和应用角度介绍一下Kubernetes与云原生应用,深入浅出,高屋建瓴,没有深入到具体细节,主要是为了给初次接触Kubernetes的小白扫盲,具体细节请参考链接。

      从云计算到微服务再到云原生计算

      下面将从云计算的发展历程引入云原生计算,请先看下图:

      -
      云计算演进历程
      图片 - 云计算演进历程
      +
      云计算演进历程
      图片 - 云计算演进历程

      云原生应用到2020年将比目前至少翻一番,下图是Marc Wilczek的调查报告。

      -
      来自Twitter @MarcWilczek
      图片 - 来自Twitter @MarcWilczek
      +
      来自Twitter @MarcWilczek
      图片 - 来自Twitter @MarcWilczek

      云计算介绍

      云计算包含的内容十分繁杂,也有很多技术和公司牵强附会说自己是云计算公司,说自己是做云的,实际上可能风马牛不相及。说白了,云计算就是一种配置资源的方式,根据资源配置方式的不同我们可以把云计算从宏观上分为以下三种类型:

        @@ -4594,7 +4594,7 @@

        下文中会谈到Kubernetes与微服务的关系,其中Kubernetes的service天生就适合于微服务。

        云原生概念介绍

        下面是Cloud Native概念思维导图

        -
        Cloud native思维导图
        图片 - Cloud native思维导图
        +
        Cloud native思维导图
        图片 - Cloud native思维导图

        云原生准确来说是一种文化,更是一种潮流,它是云计算的一个必然导向。它的意义在于让云成为云化战略成功的基石,而不是阻碍,如果业务应用上云之后开发和运维人员比原先还痛苦,成本还高的话,这样的云我们宁愿不上。

        自从云的概念开始普及,许多公司都部署了实施云化的策略,纷纷搭建起云平台,希望完成传统应用到云端的迁移。但是这个过程中会遇到一些技术难题,上云以后,效率并没有变得更高,故障也没有迅速定位。

        为了解决传统应用升级缓慢、架构臃肿、不能快速迭代、故障不能快速定位、问题无法快速解决等问题,云原生这一概念横空出世。云原生可以改进应用开发的效率,改变企业的组织结构,甚至会在文化层面上直接影响一个公司的决策。

        @@ -4619,7 +4619,7 @@

        12因素应用

        12因素应用提出已经有几年的时间了,每个人对其可能都有自己的理解,切不可生搬硬套,也不一定所有云原生应用都必须符合这12条法则,其中有几条法则可能还有点争议,有人对其的解释和看法不同。

        大家不要孤立的来看这每一个因素,将其与自己软件开发流程联系起来,这12个因素大致就是按照软件从开发到交付的流程顺序来写的。

        -
        十二因素应用
        图片 - 十二因素应用
        +
        十二因素应用
        图片 - 十二因素应用

        1.基准代码

        每个代码仓库(repo)都生成docker image保存到镜像仓库中,并使用唯一的ID管理,在Jenkins中使用编译时的ID。

        2.依赖

        @@ -4671,7 +4671,7 @@

        Kubernetes中的资源管理与容器设计模式

        Kubernetes通过声明式配置,真正让开发人员能够理解应用的状态,并通过同一份配置可以立马启动一个一模一样的环境,大大提高了应用开发和部署的效率,其中Kubernetes设计的多种资源类型可以帮助我们定义应用的运行状态,并使用资源配置来细粒度的明确限制应用的资源使用。

        而容器生态的成熟是 Kubernetes 诞生的前提,在谈到容器的设计模式之前我们先来了解下容器生态,请看下图:

        -
        容器生态
        图片 - 容器生态
        +
        容器生态
        图片 - 容器生态

        关于 Docker 容器的更多内容请参考 Docker最佳实践

        容器的设计模式

        Kubernetes提供了多种资源对象,用户可以根据自己应用的特性加以选择。这些对象有:

        @@ -4757,7 +4757,7 @@

      详见Kubernetes Handbook - 服务发现与负载均衡

      持续集成与发布

      -
      使用Jenkins进行持续集成与发布流程图
      图片 - 使用Jenkins进行持续集成与发布流程图
      +
      使用Jenkins进行持续集成与发布流程图
      图片 - 使用Jenkins进行持续集成与发布流程图

      应用构建和发布流程说明:

      1. 用户向Gitlab提交代码,代码中必须包含Dockerfile
      2. @@ -4772,7 +4772,7 @@

      日志收集与监控

      基于现有的ELK日志收集方案,稍作改造,选用filebeat来收集日志,可以作为sidecar的形式跟应用运行在同一个Pod中,比较轻量级消耗资源比较少。

      -
      filebeat日志收集架构图
      图片 - filebeat日志收集架构图
      +
      filebeat日志收集架构图
      图片 - filebeat日志收集架构图

      详见Kubernetes Handbook - 应用日志收集

      安全性与权限管理

      Kubernetes是一个多租户的云平台,因此必须对用户的权限加以限制,对用户空间进行隔离。Kubernetes中的隔离主要包括这几种:

      @@ -4798,7 +4798,7 @@

      定义API生成API文档

      使用API blueprint格式,定义API文档,格式类似于markdown,再使用aglio生成HTML文档。

      -
      API文档
      图片 - API文档
      +
      API文档
      图片 - API文档

      详见:如何开发部署Kubernetes Native应用

      如何迁移到云原生应用架构

      Pivotal 是云原生应用的提出者,并推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中先驱者和探路者。

      @@ -4816,7 +4816,7 @@

      详见:迁移到云原生应用架构

      迁移案例解析

      迁移步骤示意图如下:

      -
      迁移步骤示意图
      图片 - 迁移步骤示意图
      +
      迁移步骤示意图
      图片 - 迁移步骤示意图

      步骤说明:

      1. 将原有应用拆解为服务
      2. @@ -4839,7 +4839,7 @@

        此外还有很多其它的Service Mesh鱼贯而出,请参考awesome-cloud-native

        什么是Service Mesh

        如果用一句话来解释什么是 Service Mesh,可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心 TCP/IP 这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用 Service Mesh 也就无须关心服务之间的那些原来是通过应用程序或者其他框架实现的事情,比如 Spring Cloud、OSS,现在只要交给 Service Mesh 就可以了。

        -
        service mesh架构图
        图片 - service mesh架构图
        +
        service mesh架构图
        图片 - service mesh架构图

        详见什么是 Service Mesh - jimmysong.io

        Service Mesh使用指南

        两款Service Mesh各有千秋,我分别写了他们的使用案例指南:

        @@ -4867,17 +4867,17 @@

      使用Kibana查看日志

      日志字段中包括了应用的标签、容器名称、主机名称、宿主机名称、IP地址、时间。

      -
      kibana界面
      图片 - kibana界面
      +
      kibana界面
      图片 - kibana界面

      使用Grafana查看应用状态

      :感谢【K8S🤘Cloud Native实战群】尊贵的黄金会员小刚同学提供下面的Grafana监控图🙏

      监控分类示意图:

      -
      Grafana界面示意图1
      图片 - Grafana界面示意图1
      +
      Grafana界面示意图1
      图片 - Grafana界面示意图1

      Kubernetes集群全局监控图1

      该监控图可以看到集群硬件使用情况。

      -
      Grafana界面示意图2
      图片 - Grafana界面示意图2
      +
      Grafana界面示意图2
      图片 - Grafana界面示意图2

      Kubernetes全局监控图2

      该监控可以看到单个用户的namespace下的所有资源的使用情况。

      -
      Grafana界面示意图3
      图片 - Grafana界面示意图3
      +
      Grafana界面示意图3
      图片 - Grafana界面示意图3

      Spark on Kubernetes

      TL;DR https://jimmysong.io/spark-on-k8s

      Spark原生支持standalone、mesos和YARN资源调度,现已支持Kubernetes原生调度,详见运行支持Kubernetes原生调度的spark程序-Spark on Kubernetes

      @@ -4921,9 +4921,9 @@

      监控

      下图是从Kubernetes dashboard上看到的spark-cluster这个namespace上运行的应用情况。

      -
      dashboard
      图片 - dashboard
      +
      dashboard
      图片 - dashboard

      下图是从Grafana监控页面上查看到的某个executor资源占用情况。

      -
      Grafana
      图片 - Grafana
      +
      Grafana
      图片 - Grafana

      参考

      @@ -4976,7 +4976,7 @@ diff --git a/cloud-native/play-with-kubernetes.html b/cloud-native/play-with-kubernetes.html index a2fb1de8f..1f2b98884 100644 --- a/cloud-native/play-with-kubernetes.html +++ b/cloud-native/play-with-kubernetes.html @@ -4603,10 +4603,10 @@

      注意:192.168.0.13是master节点的IP,请替换您的master节点的实际IP。

      再添加几个实例,重复执行第四步,即可向Kubernetes集群中增加节点。

      此时在master节点上执行kubectl get nodes查看节点所有节点状态,并创建nginx deployment,如下图所示:

      -
      Play with Kubernetes网页截图
      图片 - Play with Kubernetes网页截图
      +
      Play with Kubernetes网页截图
      图片 - Play with Kubernetes网页截图

      Play with Kuberentes (PWK) is a project hacked by Marcos Lilljedahl and Jonathan Leibiusky and sponsored by Docker Inc.

      @@ -4650,7 +4650,7 @@ diff --git a/cloud-native/setup-kubernetes-with-rancher-and-aliyun.html b/cloud-native/setup-kubernetes-with-rancher-and-aliyun.html index 75b7046c7..07b2d44c5 100644 --- a/cloud-native/setup-kubernetes-with-rancher-and-aliyun.html +++ b/cloud-native/setup-kubernetes-with-rancher-and-aliyun.html @@ -4595,18 +4595,18 @@

      步骤

      假设现在我们有两个节点 master 和 node,请参考 Rancher Quick Start Guide 安装 Rancher。

      -
      Rancher 界面
      图片 - Rancher 界面
      +
      Rancher 界面
      图片 - Rancher 界面

      Master

      先在 Master 节点安装 Rancher server、control、etcd 和 worker。

      选择网络组件为 Flannel,同时在自定义主机运行命令中选择主机角色、填写主机的内网和外网 IP。

      -
      自定义节点信息
      图片 - 自定义节点信息
      +
      自定义节点信息
      图片 - 自定义节点信息
      docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
       

      Rancher 将自动创建 Kubernetes 集群,并默认在 80 端口运行 web server。

      Node

      添加 Node 节点时只需要在 Rancher 的 web 界面上找到您刚安装的集群并选择【编辑集群】并选择节点角色为 Worker 即可增加一台 Kubenretes 集群节点。

      集群交互

      -
      Rancher 集群监控页面
      图片 - Rancher 集群监控页面
      +
      Rancher 集群监控页面
      图片 - Rancher 集群监控页面

      如果您习惯使用命令行与集群交互可以 Rancher 的 web 上找到集群首页上的 Kubeconfig File 下载按钮,将该文件中的内容保存到您自己电脑的 ~/.kube/config 文件中。然后现在对应 Kubernetes 版本的 kubectl 命令并放到 PATH 路径下即可。

      如果您没有在本地安装 kubectl 工具,也可以通过 Rancher 的集群页面上的 Launch kubectl 命令通过 web 来操作集群。

      参考

      @@ -4615,7 +4615,7 @@
    3. 阿里云容器服务 ACK - aliyun.com
    4. @@ -4659,7 +4659,7 @@ diff --git a/cloud-native/the-future-of-cloud-native.html b/cloud-native/the-future-of-cloud-native.html index 04a4086c1..844e843ac 100644 --- a/cloud-native/the-future-of-cloud-native.html +++ b/cloud-native/the-future-of-cloud-native.html @@ -4589,10 +4589,10 @@

      一句话解释什么是云原生应用:云原生应用就是为了在云上运行而开发的应用。

      Kubernetes:云原生操作系统

      -
      Kubernetes 云原生的操作系统
      图片 - Kubernetes 云原生的操作系统
      +
      Kubernetes 云原生的操作系统
      图片 - Kubernetes 云原生的操作系统

      要运行这样的应用必须有一个操作系统,就像我们运行PC或手机应用一样,而Kubernetes就是一个这样的操作系统。

      我们再来看下操作系统包括哪些层次。

      -
      操作系统层次
      图片 - 操作系统层次
      +
      操作系统层次
      图片 - 操作系统层次
      • 硬件管理:可以管理CPU、内存、网络和存储
      • 设备接口、虚拟化工具、实用工具
      • @@ -4600,7 +4600,7 @@
      • 各种终端工具,如awk、sort、grep、vim等

      下面是CNCF给出的云原生景观图。

      -
      云原生景观图
      图片 - 云原生景观图
      +
      云原生景观图
      图片 - 云原生景观图

      该图中包括云原生的各种层次的提供者和应用,通过该图可以组合出一些列的云原生平台。

      • IaaS云提供商(公有云、私有云)
      • @@ -4615,13 +4615,13 @@

        Kubernetes发展已经有3年多的时间了,它已经基本成为了容器编排调度框架的标准。它的各种抽象与资源定义已经被大家广为接受。其中最基础的调度单元Pod。

        创建一个自定义资源类型需要满足的条件。

        这是KubeVirt的架构图。

        -
        KubeVirt架构图
        图片 - KubeVirt架构图
        +
        KubeVirt架构图
        图片 - KubeVirt架构图

        我们看到图中有两个是Kubernetes原生的组件,API server和kubelet,我们创建了virt-controller就是为了创建CRD的controller,它扩展了kube-controller的功能,用于管理虚拟机的生命周期,同时在每个节点上都用DaemonSet的方式运行一个virt-handler,这个handler是用于创建虚拟机的处理器,每个节点上即可用运行虚拟机也可以运行容器,只要这个节点上有virt-handler就可以运行和调度虚拟机。

        Kubernetes做了什么?

        Kubernetes优秀的分布式架构设计,给我们提供了众多了可扩展接口,可以让我们很方便的扩展自己的运行时、网络和存储插件,同时还可以通过CRD管理我们自己的分布式应用。它的声明式配置方式可以让我们利用Kubernetes的原语快速的编排出一个云原生应用。

        Kubernetes的资源隔离也能保证对集群资源的最大化和最优利用率。

        下图中展示了Kubernetes中的资源隔离层次。

        -
        Kubernetes中的资源隔离
        图片 - Kubernetes中的资源隔离
        +
        Kubernetes中的资源隔离
        图片 - Kubernetes中的资源隔离
        • 容器
        • Pod:命名空间的隔离,共享网络,每个Pod都有独立IP,使用Service Account为Pod赋予账户
        • @@ -4636,17 +4636,17 @@
        • 存储:PV、PVC、ConfigMap、Secret

        在最近一届的KubeCon & CloudNativeCon上Operator已经变得越来越流行。下面是OpenEBS的一个使用Operator的例子。

        -
        OpenEBS 控制平面架构
        图片 - OpenEBS 控制平面架构
        +
        OpenEBS 控制平面架构
        图片 - OpenEBS 控制平面架构

        OpenEBS是一款容器化存储,它基于Ceph构建,容器化存储最大的好处就是复用Kubernetes的资源类型,简化存储应用的部署,将单体的存储拆分为“微服务化”的存储,即每个应用在声明PV的时候才会创建存储,并与PV的生命周期一样都是独立于应用的。

        OpenEBS的存储也是分控制平面和数据平面的,下图是OpenEBS的架构图。

        -
        OpenEBS 的存储卷管理
        图片 - OpenEBS 的存储卷管理
        +
        OpenEBS 的存储卷管理
        图片 - OpenEBS 的存储卷管理

        黄色部分是OpenEBS的组件(除了kube-dashboard),它是使用Kubernetes的各种原语和CRD来创建的,架构跟Kubernetes本身也很类似。

        用户在使用OpenEBS的StorageClass创建PV的时候,OpenEBS会为每个PV创建一个用户管理该PV的Deployment,这个Deployment再来创建存储副本,每个PV的存储副本都可以不同,这取决的用户如何定义的StorageClass。这样就可以将原来的单体存储拆分为微服务化的存储。

        上面说到了Operator的一个应用,下面再来看一个我们之前在Kubernetes中部署Hadoop YARN和Spark的例子。

        -
        Hadoop YARN 迁移到 Kubernetes的示例
        图片 - Hadoop YARN 迁移到 Kubernetes的示例
        -
        Spark on Yarn with Kubernetes
        图片 - Spark on Yarn with Kubernetes
        +
        Hadoop YARN 迁移到 Kubernetes的示例
        图片 - Hadoop YARN 迁移到 Kubernetes的示例
        +
        Spark on Yarn with Kubernetes
        图片 - Spark on Yarn with Kubernetes

        Kubernetes始于12因素应用的PaaS平台,它是微服务的绝佳部署管理平台,基于它可以应用多种设计模式。它的未来将变成什么样呢?

        -
        云原生与12因素应用
        图片 - 云原生与12因素应用
        +
        云原生与12因素应用
        图片 - 云原生与12因素应用
        • Service Mesh:解决微服务治理问题
        • Auto Pilot:自动驾驭能力,服务自动扩展,智能运维
        • @@ -4656,7 +4656,7 @@

          为了实现上述的各种能力,急需解决的就是基于Kubernetes的持续集成和发布问题。

          当前出现了一系列的基于Kubernetes的CI/CD工具,如Jenkins-x、Gitkube,它提供了从代码提交、自动编译、打包镜像、配置注入、发布部署到Kubernetes平台的一系列自动化流程。

          甚至出现了像ballerina这样的云原生编程语言,它的出现就是为了解决应用开发到服务集成之间的鸿沟的。它有以下几个特点。

          -
          云原生编程语言
          图片 - 云原生编程语言
          +
          云原生编程语言
          图片 - 云原生编程语言
          • 使用云原生语义的DSL
          • 注解式配置
          • @@ -4664,30 +4664,30 @@
          • 支持微服务的治理

          要完成云的集成CI/CD,或者用一个词代替来说就是GitOps的需求越来越强烈。

          -
          Gitkube
          图片 - Gitkube
          +
          Gitkube
          图片 - Gitkube

          Kubernetes没有做什么

          看下这张图中的两个服务,它们使用的是kube-proxy里基于iptables的原生的负载均衡,并且服务间的流量也没有任何控制。

          -
          Kuberentes中的流量管理
          图片 - Kuberentes中的流量管理
          +
          Kuberentes中的流量管理
          图片 - Kuberentes中的流量管理

          Kubernetes缺少的最重要的一个功能就是微服务的治理,微服务比起单体服务来说使得部署和运维起来更加复杂,对于微服务的可观测性也有更高的要求,同时CI/CD流程Kubernetes本身也没有提供。

          Service Mesh

          Service Mesh是一个专用的基础设施层,它能够将微服务的治理层应用层下沉到基础设施层,将原来开发人员很多活给分担出去,让开发人员更注重业务逻辑和应用的性能本身,将服务治理的能力交给平台来解决。使用Service Mesh能够提供安全的服务间通讯、在服务间通讯应用各种策略实现灰度发布、流量切分等功能,它还能适配多语言,让微服务应用无感知的迁移到云原生。

          这是Istio在Kubenetes中创建的各种CRD,这些CRD有些是作为路由策略、有些是做监控指标和权限控制的。

          这是Istio Service Mesh的架构图。

          -
          Istio Service Mesh架构图
          图片 - Istio Service Mesh架构图
          +
          Istio Service Mesh架构图
          图片 - Istio Service Mesh架构图
          • Pilot:提供用户接口,用户可以通过该接口配置各种路由规则,Pilot还可以通过适配器获取平台上各种服务之间的管理,Evnoy这个使用Sidecar方式部署到每个应用pod中的进程会通过Pilot中的Envoy API获得平台上各个服务之间的管理,同时也会应用用户配置的路由规则。
          • Mixer:获取各种平台属性,服务间通讯时会先访问Mixer兼容各平台的属性信息,如quota、访问控制和策略评估,将服务间的访问信息记录后上报到mixer形成遥测报告。
          • 每个Pod上还有SA和SPIFFE做权限管控。

          Service Mesh实际上为了解决社会分工问题,它本身是为了解决微服务的治理。

          -
          Service Mesh架构
          图片 - Service Mesh架构
          +
          Service Mesh架构
          图片 - Service Mesh架构

          Pilot和控制平面是为了运维人员准备的。

          数据平面是为开发人员准备的。

          Isito在每个上下游服务之间部署一个Envoy,Envoy中有几个基本的服务发现服务,监听器即Envoy要转发的流量端口,Endpoint是要转发的目的地,Cluster是一系列Endpoint用来做负载均衡,Route是定义各种路由规则,每个Envoy进程里可以设置多个Listener。

          -
          Envoy proxy架构图
          图片 - Envoy proxy架构图
          +
          Envoy proxy架构图
          图片 - Envoy proxy架构图

          本文根据 Jimmy Song 于2018年5月20日在第四届南京全球技术周上【互联网技术专场】上的题为【云原生应用的下一站】的演讲的部分内容的文字整理而成。

          @@ -4731,7 +4731,7 @@ diff --git a/cloud-native/trait.html b/cloud-native/trait.html index e27e22ca5..eff789b05 100644 --- a/cloud-native/trait.html +++ b/cloud-native/trait.html @@ -4610,7 +4610,7 @@
        • The Open Application Model specification - github.com
        @@ -4654,7 +4654,7 @@ diff --git a/cloud-native/workload.html b/cloud-native/workload.html index 0bf9706a0..1ebb8d20a 100644 --- a/cloud-native/workload.html +++ b/cloud-native/workload.html @@ -4596,7 +4596,7 @@
      • The Open Application Model specification - github.com
      @@ -4640,7 +4640,7 @@ diff --git a/images/cloud-native-app-model.png b/images/cloud-native-app-model.png index a7a09484a2aa6935f413789f729859c0df90bc12..9f3919a630404041dbea9ec1a014bc8269243ddb 100644 GIT binary patch literal 57262 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 literal 82236 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

      |@0q6^7H#qtwykrky?C%IhM57 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
      Y1%E-Kj47R)Da65kO<9X||6 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 UfKk8Q3}Z+%>c(}K*Sa3~5A1e6tpET3 literal 83860 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

      (&0u+uZpQO>^RIhQ)I{2dkU|rV@>+0k#F0z0& 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 P_$4o+0;zs#`ucwXu!iZ^ diff --git a/index.html b/index.html index c32c83ced..551ea443e 100644 --- a/index.html +++ b/index.html @@ -4578,13 +4578,13 @@

      关于本书

      - CircleCI + CircleCI

      - Kubernetes Handbook——Kubernetes 中文指南 / 云原生应用架构实践手册 by Jimmy Song (宋净超) + Kubernetes Handbook——Kubernetes 中文指南 / 云原生应用架构实践手册 by Jimmy Song (宋净超)

      @@ -4626,16 +4626,16 @@

      License

      - CC4 License + CC4 License

      署名 - 非商业性使用 - 相同方式共享 4.0 (CC BY-NC-SA 4.0)

      Stargazers over time

      -
      Stargazers over time
      图片 - Stargazers over time
      +
      Stargazers over time
      图片 - Stargazers over time

      云原生社区

      云原生社区是一个有技术、有温度、有情怀的开源社区,由 Jimmy 和他的伙伴们 成立于 2020 年 5 月 12 日,秉持 “共识、共治、共建、共享” 的原则。立足中国,面向世界,企业中立,旨在借助开源打破企业的边界,关注技术人的成长,面向全球华人,促进中国云原生开源的发展。云原生官方网站 https://cloudnative.to,关注社区微信公众号,获取加入方式。

      -云原生社区微信公众号 +云原生社区微信公众号

      云原生出版物

      @@ -4654,7 +4654,7 @@
    5. 《Istio Handbook——Istio 服务网格进阶实战》:ServiceMesher 社区出品的开源电子书
    6. @@ -4694,7 +4694,7 @@