diff --git a/README.md b/README.md
index adadb5876..cae19d309 100644
--- a/README.md
+++ b/README.md
@@ -69,20 +69,22 @@
- **与我联系**:扫描下面的二维码关注Jimmy Song 的个人微信公众号CloudNativeGo(云原生应用架构)
-
+
+
- **ServiceMesher**:ServiceMesher 社区公众号,下承 Kubernetes、上接 Serverless,云原生应用的通信层,旨在加强行业内部交流,促进开源文化构建,推动 Kubernetes、Service Mesh、Serverless 等云原生技术在企业落地,发布活动及业界最前沿资讯。[加入组织](http://www.servicemesher.com/contact/)。
-
+
+
## 读者反馈
以下是部分读者反馈,希望更多人[加入我们](http://www.servicemesher.com),共同打造中国质量最高的云原生社区!
-![Kubernetes handbook 读者反馈](https://ws2.sinaimg.cn/large/006tKfTcgy1g0oxheyjxfj31bc0u0kej.jpg)
+![Kubernetes handbook 读者反馈](images/feedback.jpg)
## 云原生出版物
@@ -98,6 +100,7 @@
为云原生干杯🍻!使用微信扫一扫请我喝一杯☕️
-
+
+
diff --git a/SUMMARY.md b/SUMMARY.md
index a2b2b6a34..b29952957 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -93,7 +93,7 @@
* [Secret配置](guide/secret-configuration.md)
* [管理namespace中的资源配额](guide/resource-quota-management.md)
* [命令使用](guide/command-usage.md)
- * [Docker用户过度到kubectl命令行指南](guide/docker-cli-to-kubectl.md)
+ * [Docker用户过渡到kubectl命令行指南](guide/docker-cli-to-kubectl.md)
* [kubectl命令概览](guide/using-kubectl.md)
* [kubectl命令技巧大全](guide/kubectl-cheatsheet.md)
* [使用etcdctl访问kubernetes数据](guide/using-etcdctl-to-access-kubernetes-data.md)
diff --git a/appendix/about-cka-candidate.md b/appendix/about-cka-candidate.md
index dfaead74d..63b10d682 100644
--- a/appendix/about-cka-candidate.md
+++ b/appendix/about-cka-candidate.md
@@ -199,4 +199,4 @@ ps: 个人觉得这个课程太贵了,为了省点钱 , 仔细研究下
![CKA mindmap](../images/cka-mindmap.png)
-From: [Github_hackstoic](https://github.com/hackstoic/kubernetes_practice/blob/master/%E5%85%B3%E4%BA%8EK8S%E7%9B%B8%E5%85%B3%E8%AE%A4%E8%AF%81%E7%9A%84%E8%AF%B4%E6%98%8E.md)
\ No newline at end of file
+From: [Github_hackstoic](https://github.com/hackstoic/kubernetes_practice/blob/master/%E5%85%B3%E4%BA%8EK8S%E7%9B%B8%E5%85%B3%E8%AE%A4%E8%AF%81%E7%9A%84%E8%AF%B4%E6%98%8E.md)
diff --git a/appendix/about-kcsp.md b/appendix/about-kcsp.md
index 0f00615d1..f2575a520 100644
--- a/appendix/about-kcsp.md
+++ b/appendix/about-kcsp.md
@@ -29,4 +29,4 @@ KCSP计划的适用对象是通过初审的服务提供商,它们为踏上Kube
## 参考
-- [CNCF 宣布首批 Kubernetes 认证服务提供商](https://mp.weixin.qq.com/s?__biz=MjM5MzM3NjM4MA==&mid=2654684649&idx=2&sn=4bd259d40d4eb33fc07340c07281e6cf)
\ No newline at end of file
+- [CNCF 宣布首批 Kubernetes 认证服务提供商](https://mp.weixin.qq.com/s?__biz=MjM5MzM3NjM4MA==&mid=2654684649&idx=2&sn=4bd259d40d4eb33fc07340c07281e6cf)
diff --git a/appendix/cncf-annual-report-2018.md b/appendix/cncf-annual-report-2018.md
index f37b41b41..d1065fa5c 100644
--- a/appendix/cncf-annual-report-2018.md
+++ b/appendix/cncf-annual-report-2018.md
@@ -130,7 +130,7 @@ CNCF 年度报告的原文主要是汇报了 CNCF 一年来的所展开的活动
自2015年底 CNCF 创立之初 Kubernetes 成为其首个托管项目以来,截止到2018年底,CNCF 已经托管了[32个开源项目](https://www.cncf.io/projects/),随着越来越多的项目加入到 CNCF,为了更好的管理这些项目,为这些项目划分不同的成熟度等级就成了迫在眉睫的事情。
-![CNCF 项目成熟度级别](https://ws2.sinaimg.cn/large/006tNc79ly1g04s0oznytj31tg0ok7ca.jpg)
+![CNCF 项目成熟度级别](../images/006tNc79ly1g04s0oznytj31tg0ok7ca.jpg)
根据《Crossing the Chasm》一书中的技术采用生命周期理论,CNCF 将其托管的项目划分为三个等级:
@@ -146,7 +146,7 @@ CNCF 通过为项目设置成熟度水平是来建议企业应该采用哪些项
通过 [KCSP](https://www.cncf.io/certification/kcsp/) 意味着企业具有为其他企业或组织提供 Kubernetes 支持、咨询、专业服务和培训的资质。 2018年又有46家企业通过了[KCSP](https://www.cncf.io/certification/kcsp/),通过该认证的企业累计达到76家。
-![KCSP](https://ws3.sinaimg.cn/large/006tNc79ly1g04tl97vm4j318v0h7dpt.jpg)
+![KCSP](../images/006tNc79ly1g04tl97vm4j318v0h7dpt.jpg)
**如何通过 KCSP**
diff --git a/appendix/cncf-annual-report.md b/appendix/cncf-annual-report.md
index 102e11e75..9561a9cc2 100644
--- a/appendix/cncf-annual-report.md
+++ b/appendix/cncf-annual-report.md
@@ -5,4 +5,4 @@ CNCF成立于2015年12月11日,自2018年开始每年年初都会发布一次
## 参考
- [CNCF Annual Report 2017 pdf](https://www.cncf.io/wp-content/uploads/2018/03/CNCF-Annual-Report-2017.pdf)
-- [CNCF Annual Report 2018 pdf](https://www.cncf.io/wp-content/uploads/2019/02/CNCF_Annual_Report_2018_FInal.pdf)
\ No newline at end of file
+- [CNCF Annual Report 2018 pdf](https://www.cncf.io/wp-content/uploads/2019/02/CNCF_Annual_Report_2018_FInal.pdf)
diff --git a/appendix/debug-kubernetes-services.md b/appendix/debug-kubernetes-services.md
index 155f2de6a..ce232aa89 100644
--- a/appendix/debug-kubernetes-services.md
+++ b/appendix/debug-kubernetes-services.md
@@ -37,4 +37,4 @@ kubectl logs -f my-pod -c my-container
```bash
kubectl exec my-pod -it /bin/bash
kubectl top pod POD_NAME --containers
-```
\ No newline at end of file
+```
diff --git a/appendix/docker-best-practice.md b/appendix/docker-best-practice.md
index 1276cf9ab..83cffb58f 100644
--- a/appendix/docker-best-practice.md
+++ b/appendix/docker-best-practice.md
@@ -131,4 +131,4 @@ Docker提供了一系列[log drivers](https://docs.docker.com/engine/admin/loggi
- Email:rootsongjc@gmail.com
-更多关于**Docker**、**MicroServices**、**Big Data**、**DevOps**、**Deep Learning**的内容请关注[Jimmy Song's Blog](https://jimmysong.io),将不定期更新。
\ No newline at end of file
+更多关于**Docker**、**MicroServices**、**Big Data**、**DevOps**、**Deep Learning**的内容请关注[Jimmy Song's Blog](https://jimmysong.io),将不定期更新。
diff --git a/appendix/issues.md b/appendix/issues.md
index a96e28465..ce51d017c 100644
--- a/appendix/issues.md
+++ b/appendix/issues.md
@@ -126,4 +126,4 @@ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"templat
## 参考
-- [Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)
\ No newline at end of file
+- [Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)
diff --git a/appendix/kubernetes-1.11-changelog.md b/appendix/kubernetes-1.11-changelog.md
index 06a527dad..ac9330f11 100644
--- a/appendix/kubernetes-1.11-changelog.md
+++ b/appendix/kubernetes-1.11-changelog.md
@@ -30,4 +30,4 @@ CRD不再局限于对单一版本的定制化资源作出定义。如今,利
## 参考
-- [Kubernetes 1.11: In-Cluster Load Balancing and CoreDNS Plugin Graduate to General Availability](https://kubernetes.io/blog/2018/06/27/kubernetes-1.11-release-announcement/)
\ No newline at end of file
+- [Kubernetes 1.11: In-Cluster Load Balancing and CoreDNS Plugin Graduate to General Availability](https://kubernetes.io/blog/2018/06/27/kubernetes-1.11-release-announcement/)
diff --git a/appendix/kubernetes-1.12-changelog.md b/appendix/kubernetes-1.12-changelog.md
index 8790e1759..bca040359 100644
--- a/appendix/kubernetes-1.12-changelog.md
+++ b/appendix/kubernetes-1.12-changelog.md
@@ -48,4 +48,4 @@ Kubernetes 1.12可以[在GitHub上下载](https://github.com/kubernetes/kubernet
## 参考
-- [Kubernetes 1.12: Kubelet TLS Bootstrap and Azure Virtual Machine Scale Sets (VMSS) Move to General Availability](https://kubernetes.io/blog/2018/09/27/kubernetes-1.12-kubelet-tls-bootstrap-and-azure-virtual-machine-scale-sets-vmss-move-to-general-availability/)
\ No newline at end of file
+- [Kubernetes 1.12: Kubelet TLS Bootstrap and Azure Virtual Machine Scale Sets (VMSS) Move to General Availability](https://kubernetes.io/blog/2018/09/27/kubernetes-1.12-kubelet-tls-bootstrap-and-azure-virtual-machine-scale-sets-vmss-move-to-general-availability/)
diff --git a/appendix/kubernetes-1.13-changelog.md b/appendix/kubernetes-1.13-changelog.md
index 923742855..86005b3a0 100644
--- a/appendix/kubernetes-1.13-changelog.md
+++ b/appendix/kubernetes-1.13-changelog.md
@@ -22,4 +22,4 @@
## 参考
- [Overview of kubeadm](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/)
-- [Kubernetes 1.13: Simplified Cluster Management with Kubeadm, Container Storage Interface (CSI), and CoreDNS as Default DNS are Now Generally Available](https://kubernetes.io/blog/2018/12/03/kubernetes-1-13-release-announcement/)
\ No newline at end of file
+- [Kubernetes 1.13: Simplified Cluster Management with Kubeadm, Container Storage Interface (CSI), and CoreDNS as Default DNS are Now Generally Available](https://kubernetes.io/blog/2018/12/03/kubernetes-1-13-release-announcement/)
diff --git a/appendix/kubernetes-1.14-changelog.md b/appendix/kubernetes-1.14-changelog.md
index d993bca7e..16cd0bebb 100644
--- a/appendix/kubernetes-1.14-changelog.md
+++ b/appendix/kubernetes-1.14-changelog.md
@@ -5,9 +5,9 @@
- 对于管理 Windows node 的生产级支持。
- 重写了 kubectl 的文档,并为其专门启用新域名 ,该文档本身类似 Gitbook 的形式,使用 Resource Config 的形式组织,集成了 [kustomize](https://github.com/kubernetes-sigs/kustomize),还有了自己的 logo 和吉祥物 kubee-cuddle。
-![大鱿鱼:kubectl log](https://ws2.sinaimg.cn/large/006tKfTcly1g1gbdpsdbgj303c03cwel.jpg)
+![大鱿鱼:kubectl log](../images/006tKfTcly1g1gbdpsdbgj303c03cwel.jpg)
-![Kubernetes 吉祥物 kubee-cuddle](https://ws1.sinaimg.cn/large/006tKfTcly1g1gbjvx2ugj305k05mmx9.jpg)
+![Kubernetes 吉祥物 kubee-cuddle](../images/006tKfTcly1g1gbjvx2ugj305k05mmx9.jpg)
- kubectl 插件机制发布稳定版本。
- Persistent Local Volume GA。
@@ -17,4 +17,4 @@
## 参考
-- [Kubernetes 1.14: Production-level support for Windows Nodes, Kubectl Updates, Persistent Local Volumes GA - kuberentes.io](https://kubernetes.io/blog/2019/03/25/kubernetes-1-14-release-announcement/)
\ No newline at end of file
+- [Kubernetes 1.14: Production-level support for Windows Nodes, Kubectl Updates, Persistent Local Volumes GA - kuberentes.io](https://kubernetes.io/blog/2019/03/25/kubernetes-1-14-release-announcement/)
diff --git a/appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.md b/appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.md
index 0f4bbae1f..fb484f0d4 100644
--- a/appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.md
+++ b/appendix/kubernetes-and-cloud-native-summary-in-2017-and-outlook-for-2018.md
@@ -111,4 +111,4 @@ Kubernetes已成为GitHub上参与和讨论人数最多的开源项目,在其
2018年的IaaS的运营商将主要提供基础架构服务,如虚拟机、存储和数据库等传统的基础架构和服务,仍然会使用现有的工具如Chef、Terraform、Ansible等来管理;Kubernetes则可能直接运行在裸机上运行,结合CI/CD成为DevOps的得力工具,并成为高级开发人员的应用部署首选;Kubernetes也将成为PaaS层的重要组成部分,为开发者提供应用程序部署的简单方法,但是开发者可能不会直接与Kubernetes或者PaaS交互,实际的应用部署流程很可能落在自动化CI工具如Jenkins上。
-2018年,Kubernetes将更加稳定好用,云原生将会出现更多的落地与最佳实践,这都值得我们期待!
\ No newline at end of file
+2018年,Kubernetes将更加稳定好用,云原生将会出现更多的落地与最佳实践,这都值得我们期待!
diff --git a/appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.md b/appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.md
index 0dccfdd3c..c2deb10db 100644
--- a/appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.md
+++ b/appendix/kubernetes-and-cloud-native-summary-in-2018-and-outlook-for-2019.md
@@ -46,13 +46,13 @@
下图是 Google trend 中过去一年来全球搜索 Kubernetes 的趋势图。
-![Kubernetes 搜索趋势(来自 Google trends)](https://ws2.sinaimg.cn/large/006tNc79ly1fzne6y4f2ej31q60fedho.jpg)
+![Kubernetes 搜索趋势(来自 Google trends)](../images/006tNc79ly1fzne6y4f2ej31q60fedho.jpg)
从图中可以看出 Kubernetes 在全球搜索趋势在2018年底已经达到了最巅峰,2019年可能会开始走下降趋势。
下图是最近5年来 Kubernetes 关键词的百度指数。
-![Kubernetes 的百度指数](https://ws1.sinaimg.cn/large/006tNc79ly1fznegoocmvj31y00hmgon.jpg)
+![Kubernetes 的百度指数](../images/006tNc79ly1fznegoocmvj31y00hmgon.jpg)
上图来自百度指数,可以大体概括 Kubernetes 关键字在中国的搜索情况,同 Kubernetes 在全球的搜索情况一样,可能已经过了巅峰期。
@@ -60,7 +60,7 @@
以 Kubernetes 为核心来运维上层应用,诞生了一种名为”Kubernetes Native“的新型运维方式,真正践行 DevOps 理念的产物,开发者将于软件的运维逻辑写成代码,利用 Kubernetes 的**控制器模式(Controller Pattern)**和 [CRD](../concepts/crd.md) 来扩展 Kubernetes 的 API,各种 Operator 层出不穷,[awesome-operators](https://github.com/operator-framework/awesome-operators) 列举了目前所有的 Operator。例如我们熟悉的 [Istio](https://istio.io) 中就有50个 CRD。
-![Istio 中的 CRD](https://ws2.sinaimg.cn/large/006tNc79ly1fzna87wmfij30u00zc4qp.jpg)
+![Istio 中的 CRD](../images/006tNc79ly1fzna87wmfij30u00zc4qp.jpg)
CNCF 生态中的诸多应用都已支持 Kubernetes Operator,可以说 Operator 将成为云原生中默认的软件动态运行时管理工具,参考 CoreOS(已被 RedHat 收购,RedHat 已被 IBM 收购) CTO Brandon Philips 的这篇文章 [Introducing the Operator Framework: Building Apps on Kubernetes](https://www.redhat.com/en/blog/introducing-operator-framework-building-apps-kubernetes)。
@@ -68,15 +68,15 @@ CNCF 生态中的诸多应用都已支持 Kubernetes Operator,可以说 Operat
下图展示的是 2019 Q1 的软件架构趋势,(图片来自 [Architecture and Design InfoQ Trends Report - January 2019](https://www.infoq.com/articles/architecture-trends-2019))我们可以看到 Service Mesh 还处于创新者阶段,如果从软件生命周期的全阶段来看,它还只是刚刚进入很多人的眼帘,对于这张的新兴技术,在蚂蚁金服的支持的下创办了 [ServiceMesher 社区](http://www.servicemesher.com)。
-![2019 Q1 软件架构趋势 - 来自 InfoQ](https://ws4.sinaimg.cn/large/006tNc79ly1fzor2k6f7wj313j0u0dl3.jpg)
+![2019 Q1 软件架构趋势 - 来自 InfoQ](../images/006tNc79ly1fzor2k6f7wj313j0u0dl3.jpg)
-![ServiceMesher 社区 Logo](https://ws2.sinaimg.cn/large/006tNc79ly1fznadbp63qj31jt0beq9s.jpg)
+![ServiceMesher 社区 Logo](../images/006tNc79ly1fznadbp63qj31jt0beq9s.jpg)
既然 Kubernetes 已经开始变得无聊,2018年落地 Kubernetes 已经不是初创公司的事情了,很多大公司甚至传统企业都开始试水或者大规模落地,在 Kubernetes 进一步成熟之时,以 Kubernetes 为基础向上发展,开辟新的战场就能收获更多的业务场景和需求。
Kubernetes 并不直接对外提供业务能力,而是作为应用运行的底层平台,在应用和平台间还有一个 Gap,这需要中间件的能力来补充。
-![ServiceMesher社区2018年活动一览](https://ws4.sinaimg.cn/large/006tNc79ly1fzm9vs4o3aj31s00u0x6p.jpg)
+![ServiceMesher社区2018年活动一览](../images/006tNc79ly1fzm9vs4o3aj31s00u0x6p.jpg)
- 2018年5月,ServiceMesher 社区由蚂蚁金服发起成立。
- 2018年5月30日,[Envoy最新官方文档中文版发布——由Service Mesh爱好者倾情奉献](http://www.servicemesher.com/envoy/)。
@@ -121,7 +121,7 @@ Kubernetes 并不直接对外提供业务能力,而是作为应用运行的底
我们再看 CNCF 的 [Landscape](https://landscape.cncf.io/),其中右下部分有一个单列的 Serverless 单元,详见 。
-![CNCF Landscape 中的 Serverless 单元](https://ws4.sinaimg.cn/large/006tNc79ly1fznbh3vfbwj310f0jxgxj.jpg)
+![CNCF Landscape 中的 Serverless 单元](../images/006tNc79ly1fznbh3vfbwj310f0jxgxj.jpg)
我们再看下 Kubernetes、Service Mesh、Serviceless 三者之间的关系:
diff --git a/appendix/kubernetes-changelog.md b/appendix/kubernetes-changelog.md
index 47b9e48f4..0f68b7afc 100644
--- a/appendix/kubernetes-changelog.md
+++ b/appendix/kubernetes-changelog.md
@@ -17,4 +17,4 @@
## 更多
-追踪Kubernetes最新特性,请访问互动教学网站提供商 [Katacoda.com](https://katacoda.com) 创建的 [kubernetesstatus.com](http://kubernetesstatus.com/)。
\ No newline at end of file
+追踪Kubernetes最新特性,请访问互动教学网站提供商 [Katacoda.com](https://katacoda.com) 创建的 [kubernetesstatus.com](http://kubernetesstatus.com/)。
diff --git a/appendix/material-share.md b/appendix/material-share.md
index d6733f8e5..9f2a723dd 100644
--- a/appendix/material-share.md
+++ b/appendix/material-share.md
@@ -13,7 +13,7 @@ Kubernetes 社区的贡献、交流和治理方式相关的内容都保存在 SOFAMesh - 基于 Istio 的大规模服务网格解决方案 | SOFAMosn - Golang 版的高性能 Service Mesh Sidecar 代理点击关注【云原生应用架构】公众号回复【加群】加入学习群 | 加入蚂蚁金服金融科技,构建金融级云原生基础设施
Copyright © jimmysong.io 2017-2019",
+ "copyright": "私信我获取KubeCon China 2019门票折扣码和报名SOFAStack Cloud Native Workshop
点击关注【云原生应用架构】公众号回复【加群】加入学习群 | 加入蚂蚁金服金融科技,构建金融级云原生基础设施
Copyright © jimmysong.io 2017-2019",
"modify_label": " Updated at ",
"modify_format": "YYYY-MM-DD HH:mm:ss"
},
@@ -76,13 +75,6 @@
"sitemap-general": {
"prefix": "https://jimmysong.io/kubernetes-handbook/"
},
- "adsense": {
- "client": "ca-pub-4029167986768912",
- "slot": "2445941692",
- "format": "auto",
- "element": ".page-inner section",
- "position": "bottom"
- },
"ga": {
"token": "UA-93485976-1"
}
diff --git a/cloud-native/cloud-native-definition.md b/cloud-native/cloud-native-definition.md
index ffd7de1e1..42b470099 100644
--- a/cloud-native/cloud-native-definition.md
+++ b/cloud-native/cloud-native-definition.md
@@ -40,4 +40,4 @@
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式普惠,让这些创新为大众所用。
-**注**:该定义的中文译本还未正式确定,详见[Cloud Native Definition in Chinese](https://github.com/cncf/toc/blob/master/DEFINITION.md)。
\ No newline at end of file
+**注**:该定义的中文译本还未正式确定,详见[Cloud Native Definition in Chinese](https://github.com/cncf/toc/blob/master/DEFINITION.md)。
diff --git a/cloud-native/cloud-native-local-quick-start.md b/cloud-native/cloud-native-local-quick-start.md
index 7b47323d2..c5f411eaf 100644
--- a/cloud-native/cloud-native-local-quick-start.md
+++ b/cloud-native/cloud-native-local-quick-start.md
@@ -353,4 +353,4 @@ rm -rf .vagrant
- [duffqiu/centos-vagrant](https://github.com/duffqiu/centos-vagrant)
- [coredns/deployment](https://github.com/coredns/deployment)
- [Kubernetes 1.8 kube-proxy 开启 ipvs](https://mritd.me/2017/10/10/kube-proxy-use-ipvs-on-kubernetes-1.8/#%E4%B8%80%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87)
-- [Vistio—使用Netflix的Vizceral可视化Istio service mesh](https://servicemesher.github.io/blog/vistio-visualize-your-istio-mesh-using-netflixs-vizceral/)
\ No newline at end of file
+- [Vistio—使用Netflix的Vizceral可视化Istio service mesh](https://servicemesher.github.io/blog/vistio-visualize-your-istio-mesh-using-netflixs-vizceral/)
diff --git a/cloud-native/cloud-native-programming-language-ballerina.md b/cloud-native/cloud-native-programming-language-ballerina.md
index e74c1fe0b..8b0e0f5b5 100644
--- a/cloud-native/cloud-native-programming-language-ballerina.md
+++ b/cloud-native/cloud-native-programming-language-ballerina.md
@@ -183,4 +183,4 @@ Ballerina 是一种旨在**集成简化**的语言。基于顺序图的交互,
## 参考
- https://ballerina.io
-- [Microservices, Docker, Kubernetes, Serverless, Service Mesh, and Beyond](https://dzone.com/articles/microservices-docker-kubernetes-serverless-service)
\ No newline at end of file
+- [Microservices, Docker, Kubernetes, Serverless, Service Mesh, and Beyond](https://dzone.com/articles/microservices-docker-kubernetes-serverless-service)
diff --git a/cloud-native/cloud-native-programming-language-pulumi.md b/cloud-native/cloud-native-programming-language-pulumi.md
index 0ba71d6c8..3a4ebe461 100644
--- a/cloud-native/cloud-native-programming-language-pulumi.md
+++ b/cloud-native/cloud-native-programming-language-pulumi.md
@@ -4,7 +4,7 @@
下文部分来自Joe Duffy的博客[Hello, Pulumi](http://joeduffyblog.com/2018/06/18/hello-pulumi/)!
-![云原生编程语言Pulumi](https://ws1.sinaimg.cn/large/00704eQkgy1fsm4v0a6qwj30xc0m8t9d.jpg)
+![云原生编程语言Pulumi](../images/00704eQkgy1fsm4v0a6qwj30xc0m8t9d.jpg)
TL;DR 有了Pulumi,38页的手动操作说明将变成了38行代码。25000行YAML配置变成了使用真实编程语言的500行语句。
@@ -151,4 +151,4 @@ $ curl -fsSL https://get.pulumi.com | sh
## 参考
- [Pulumi](https://pulumi.io)
-- [Hello, Pulumi!](http://joeduffyblog.com/2018/06/18/hello-pulumi/)
\ No newline at end of file
+- [Hello, Pulumi!](http://joeduffyblog.com/2018/06/18/hello-pulumi/)
diff --git a/cloud-native/cloud-native-programming-languages.md b/cloud-native/cloud-native-programming-languages.md
index a635c54f8..e636536a4 100644
--- a/cloud-native/cloud-native-programming-languages.md
+++ b/cloud-native/cloud-native-programming-languages.md
@@ -18,4 +18,4 @@
使用这种相同类型的配置表示基于容器的微服务、serverless和细粒度托管服务之间的关系导致了异常的复杂性。将应用程序转变为分布式系统应该是事后的想法。事实证明,云覆盖了您的架构和设计。表达架构和设计的最好的方式是使用代码,使用真正的编程语言编写抽象,重用和优秀的工具。
-早些时候,Eric和我采访了几十个客户。我们发现,开发人员和DevOps工程师都普遍感到幻灭。我们发现了极端的专业化,即使在同一个团队中,工程师也不会使用同一种语言。最近几周我已经听到了这个消息,我期待有一天会出现NoYAML运动。
\ No newline at end of file
+早些时候,Eric和我采访了几十个客户。我们发现,开发人员和DevOps工程师都普遍感到幻灭。我们发现了极端的专业化,即使在同一个团队中,工程师也不会使用同一种语言。最近几周我已经听到了这个消息,我期待有一天会出现NoYAML运动。
diff --git a/cloud-native/cncf-charter.md b/cloud-native/cncf-charter.md
index 3a40af925..eeba6b161 100644
--- a/cloud-native/cncf-charter.md
+++ b/cloud-native/cncf-charter.md
@@ -6,7 +6,7 @@ CNCF(云原生计算基金会)是Linux基金会旗下的一个基金会,
下图是我根据CNCF章程绘制的组织架构图。
-![CNCF组织架构图](https://ws2.sinaimg.cn/large/006tKfTcgy1ft5pe433f6j31kw0s3nnl.jpg)
+![CNCF组织架构图](../images/006tKfTcgy1ft5pe433f6j31kw0s3nnl.jpg)
## 1. CNCF的使命
@@ -345,7 +345,7 @@ CNCF社区坚信云原生计算包含三个核心属性:
- 在标准化子系统的边界处定义良好的API
- 应用程序生命周期管理的最小障碍
-![云原生的理想分层架构](https://ws2.sinaimg.cn/large/006tKfTcly1ft3zgjlisxj30n70ffjth.jpg)
+![云原生的理想分层架构](../images/006tKfTcly1ft3zgjlisxj30n70ffjth.jpg)
因为上述时间表已经有些过时了,CNCF成立已经有三年时间了,正在规划新的方案。
diff --git a/cloud-native/cncf-project-governing.md b/cloud-native/cncf-project-governing.md
index 84aeab4e8..668784df2 100644
--- a/cloud-native/cncf-project-governing.md
+++ b/cloud-native/cncf-project-governing.md
@@ -4,7 +4,7 @@ CNCF 根据“[鸿沟理论](https://www.jianshu.com/p/a305fa93580b)”将其托
> “[鸿沟理论](https://www.jianshu.com/p/a305fa93580b)”是由Geoffrey A. Moore提出的高科技产品的市场营销理论。新技术要想跨越鸿沟,必须能够实现一些跨越式的发展,**拥有某一些以前不可能实现的功能**,具有某种内在价值并能够**赢得非技术人员的**青睐。
-![CNCF 项目的成熟度分类](https://ws1.sinaimg.cn/large/006tNc79ly1g1yzc5xre6j30o20a8q3t.jpg)
+![CNCF 项目的成熟度分类](../images/cncf-graduation.jpg)
目前处于沙箱、孵化中、已毕业项目的数量比例为5:16:13,详见 。其中沙箱(sandbox)项目因为其处于早期阶段并没有直接在上面的链接页面中列出,而是一个单独的 [Sandbox](https://www.cncf.io/sandbox-projects/) 页面,因为 CNCF 为 sandbox 阶段的项目会谨慎背书。
@@ -20,7 +20,7 @@ CNCF 中托管的开源项目要符合云原生定义:
下图演示了开源项目加入 CNCF 后的整个运作流程。
-![CNCF中的项目运作](https://ws4.sinaimg.cn/large/006tNc79ly1g1yz80ag98j31cs0n2gr7.jpg)
+![CNCF中的项目运作](../images/006tNc79ly1g1yz80ag98j31cs0n2gr7.jpg)
## 开源项目如何加入 CNCF
@@ -98,4 +98,5 @@ CNCF 的开源项目遵循如下图所示的成熟度演进。
## 参考
- [鸿沟理论 - jianshu.com](https://www.jianshu.com/p/a305fa93580b)
-- [CNCF Graduation Criteria v1.2 - github.com](https://github.com/cncf/toc/blob/master/process/graduation_criteria.adoc)
\ No newline at end of file
+- [CNCF Graduation Criteria v1.2 - github.com](https://github.com/cncf/toc/blob/master/process/graduation_criteria.adoc)
+
diff --git a/cloud-native/cncf-sandbox-criteria.md b/cloud-native/cncf-sandbox-criteria.md
index 27a3da4a7..00c658203 100644
--- a/cloud-native/cncf-sandbox-criteria.md
+++ b/cloud-native/cncf-sandbox-criteria.md
@@ -27,4 +27,4 @@
## 参考
-- [CNCF Project Proposal Process v1.2 - github.com](https://github.com/cncf/toc/blob/master/process/project_proposals.adoc)
\ No newline at end of file
+- [CNCF Project Proposal Process v1.2 - github.com](https://github.com/cncf/toc/blob/master/process/project_proposals.adoc)
diff --git a/cloud-native/cncf-sig.md b/cloud-native/cncf-sig.md
index f25cd27fb..2bc2ccbcb 100644
--- a/cloud-native/cncf-sig.md
+++ b/cloud-native/cncf-sig.md
@@ -170,4 +170,4 @@ TOC和CNCF工作人员将一起起草一套上述初步章程,并征集/选举
## 参考
-- [CNCF Special Interest Groups(SIGs)](https://github.com/cncf/toc/blob/master/sigs/cncf-sigs.md)
\ No newline at end of file
+- [CNCF Special Interest Groups(SIGs)](https://github.com/cncf/toc/blob/master/sigs/cncf-sigs.md)
diff --git a/cloud-native/cncf.md b/cloud-native/cncf.md
index 5bee49ff7..c66d0d1a1 100644
--- a/cloud-native/cncf.md
+++ b/cloud-native/cncf.md
@@ -6,7 +6,7 @@ CNCF作为一个厂商中立的基金会,致力于Github上的快速成长的
下图是CNCF的全景图。
-![CNCF landscape](https://ws3.sinaimg.cn/large/006tNbRwly1fxmx633ymqj31dp0u0kjn.jpg)
+![CNCF landscape](../images/006tNbRwly1fxmx633ymqj31dp0u0kjn.jpg)
该全景图不断更新中,原图请见:https://github.com/cncf/landscape
diff --git a/cloud-native/from-kubernetes-to-cloud-native.md b/cloud-native/from-kubernetes-to-cloud-native.md
index 5a7c80dae..10b03b748 100644
--- a/cloud-native/from-kubernetes-to-cloud-native.md
+++ b/cloud-native/from-kubernetes-to-cloud-native.md
@@ -44,11 +44,11 @@
但就2017年为止,Kubernetes的主要使用场景也主要作为应用开发测试环境、CI/CD和运行Web应用这几个领域,如下图[TheNewStack](http://thenewstack.io)的Kubernetes生态状况调查报告所示。
-![Workloads running on Kubernetes](https://ws3.sinaimg.cn/large/0069RVTdgy1fv5mxr6fxtj31kw11q484.jpg)
+![Workloads running on Kubernetes](../images/0069RVTdgy1fv5mxr6fxtj31kw11q484.jpg)
另外基于Kubernetes的构建PaaS平台和Serverless也处于爆发的准备的阶段,如下图中Gartner的报告中所示:
-![Gartner技术爆发趋势图2017](https://ws4.sinaimg.cn/large/0069RVTdgy1fv5my2jtxzj315o0z8dkr.jpg)
+![Gartner技术爆发趋势图2017](../images/0069RVTdgy1fv5my2jtxzj315o0z8dkr.jpg)
当前各大公有云如Google GKE、微软Azure ACS、亚马逊EKS(2018年上线)、VMWare、Pivotal、腾讯云、阿里云等都提供了Kubernetes服务。
@@ -84,7 +84,7 @@ CNCF(云原生计算基金会)给出了云原生应用的三大特征:
[CNCF](https://cncf.io)所托管的应用(目前已达12个),即朝着这个目标发展,其公布的[Cloud Native Landscape](https://github.com/cncf/landscape),给出了云原生生态的参考体系。
-![Cloud Native Landscape v1.0](https://ws3.sinaimg.cn/large/0069RVTdgy1fv5myp6ednj31kw0w0u0x.jpg)
+![Cloud Native Landscape v1.0](../images/0069RVTdgy1fv5myp6ednj31kw0w0u0x.jpg)
**使用Kubernetes构建云原生应用**
@@ -181,7 +181,7 @@ Linker的部署十分简单,本身就是一个镜像,使用Kubernetes的[Dae
给开发者带来最大的配置和上线的灵活性,践行DevOps流程,改善研发效率,下图这样的情况将更少发生。
-![Deployment pipeline](https://ws4.sinaimg.cn/large/0069RVTdgy1fv5mzj8rj6j318g1ewtfc.jpg)
+![Deployment pipeline](../images/0069RVTdgy1fv5mzj8rj6j318g1ewtfc.jpg)
我们知道Kubernetes中的所有应用的部署都是基于YAML文件的,这实际上就是一种**Infrastructure as code**,完全可以通过Git来管控基础设施和部署环境的变更。
@@ -246,7 +246,7 @@ Spark现在已经非官方支持了基于Kubernetes的原生调度,其具有
下图是我们刚调研准备使用Kubernetes时候的调研方案选择。
-![Kubernetes solutions](https://ws3.sinaimg.cn/large/0069RVTdgy1fv5mzywc83j31fk1i8qg4.jpg)
+![Kubernetes solutions](../images/0069RVTdgy1fv5mzywc83j31fk1i8qg4.jpg)
对于一个初次接触Kubernetes的人来说,看到这样一个庞大的架构选型时会望而生畏,但是Kubernetes的开源社区帮助了我们很多。
diff --git a/cloud-native/kubernetes-and-cloud-native-app-overview.md b/cloud-native/kubernetes-and-cloud-native-app-overview.md
index 9b5919115..b3004dba6 100644
--- a/cloud-native/kubernetes-and-cloud-native-app-overview.md
+++ b/cloud-native/kubernetes-and-cloud-native-app-overview.md
@@ -1,6 +1,6 @@
# Kubernetes与云原生应用概览
-几个月前Mesos已经宣布支持Kubernetes,而在2017年10月份的DockerCon EU上,Docker公司宣布官方同时支持Swarm和Kubernetes容器编排,Kubernetes已然成为容器编排调度的标准。
+2017年9月,Mesos宣布支持Kubernetes,而在2017年10月份的DockerCon EU上,Docker公司宣布官方同时支持Swarm和Kubernetes容器编排,Kubernetes已然成为容器编排调度的标准。
作为全书的开头,首先从历史、生态和应用角度介绍一下Kubernetes与云原生应用,深入浅出,高屋建瓴,没有深入到具体细节,主要是为了给初次接触Kubernetes的小白扫盲,具体细节请参考链接。
diff --git a/cloud-native/the-future-of-cloud-native.md b/cloud-native/the-future-of-cloud-native.md
index fea05503f..7b411efb8 100644
--- a/cloud-native/the-future-of-cloud-native.md
+++ b/cloud-native/the-future-of-cloud-native.md
@@ -15,13 +15,13 @@
一句话解释什么是云原生应用:云原生应用就是为了在云上运行而开发的应用
-![Kubernetes 云原生的操作系统](https://ws1.sinaimg.cn/large/00704eQkgy1frr4z08j6oj31p20w2n6n.jpg)
+![Kubernetes 云原生的操作系统](../images/00704eQkgy1frr4z08j6oj31p20w2n6n.jpg)
要运行这样的应用必须有一个操作系统,就像我们运行PC或手机应用一样,而Kubernetes就是一个这样的操作系统。
我们再来看下操作系统宝库哪些层次。
-![操作系统层次](https://ws1.sinaimg.cn/large/00704eQkgy1frr52hl4eaj31qy15en74.jpg)
+![操作系统层次](../images/00704eQkgy1frr52hl4eaj31qy15en74.jpg)
- 硬件管理:可以管理CPU、内存、网络和存储
- 设备接口、虚拟化工具、实用工具
@@ -30,7 +30,7 @@
下面是CNCF给出的云原生景观图。
-![云原生景观图](https://ws1.sinaimg.cn/large/00704eQkgy1frr53j3aiuj32fs1dc7wi.jpg)
+![云原生景观图](../images/00704eQkgy1frr53j3aiuj32fs1dc7wi.jpg)
该图中包括云原生的各种层次的提供者和应用,通过该图可以组合出一些列的云原生平台。
@@ -52,7 +52,7 @@ Kubernetes发展已经有3年多的时间了,它已经基本成为了容器编
这是KubeVirt的架构图。
-![KubeVirt架构图](https://ws1.sinaimg.cn/large/00704eQkgy1frr54de5oyj31qw14qn2x.jpg)
+![KubeVirt架构图](../images/00704eQkgy1frr54de5oyj31qw14qn2x.jpg)
我们看到图中有两个是Kubernetes原生的组件,API server和kubelet,我们创建了virt-controller就是为了创建CRD的controller,它扩展了kube-controller的功能,用于管理虚拟机的生命周期,同时在每个节点上都用DaemonSet的方式运行一个virt-handler,这个handler是用于创建虚拟机的处理器,每个节点上即可用运行虚拟机也可以运行容器,只要这个节点上有virt-handler就可以运行和调度虚拟机。
@@ -64,7 +64,7 @@ Kubernetes的资源隔离也能保证对集群资源的最大化和最优利用
下图中展示了Kubernetes中的资源隔离层次。
-![Kubernetes中的资源隔离](https://ws1.sinaimg.cn/large/00704eQkgy1frr54ztql2j329q0zwwlf.jpg)
+![Kubernetes中的资源隔离](../images/00704eQkgy1frr54ztql2j329q0zwwlf.jpg)
- 容器
- Pod:命名空间的隔离,共享网络,每个Pod都有独立IP,使用Service Account为Pod赋予账户
@@ -80,13 +80,13 @@ Kubernetes中的基本资源类型分成了三类:
在最近一届的KubeCon & CloudNativeCon上Operator已经变得越来越流行。下面是OpenEBS的一个使用Operator的例子。
-![OpenEBS 控制平面架构](https://ws1.sinaimg.cn/large/00704eQkgy1frr56m7z2sj31y010y17y.jpg)
+![OpenEBS 控制平面架构](../images/00704eQkgy1frr56m7z2sj31y010y17y.jpg)
OpenEBS是一款容器化存储,它基于Ceph构建,容器化存储最大的好处就是复用Kubernetes的资源类型,简化存储应用的部署,将单体的存储拆分为“微服务化”的存储,即每个应用在声明PV的时候才会创建存储,并与PV的生命周期一样都是独立于应用的。
OpenEBS的存储也是分控制平面和数据平面的,下图是OpenEBS的架构图。
-![OpenEBS 的存储卷管理](https://ws1.sinaimg.cn/large/00704eQkgy1frr57nm2mnj31xk11qqej.jpg)
+![OpenEBS 的存储卷管理](../images/00704eQkgy1frr57nm2mnj31xk11qqej.jpg)
黄色部分是OpenEBS的组件(除了kube-dashboard),它是使用Kubernetes的各种原语和CRD来创建的,架构跟Kubernetes本身也很类似。
@@ -94,13 +94,13 @@ OpenEBS的存储也是分控制平面和数据平面的,下图是OpenEBS的架
上面说到了Operator的一个应用,下面再来看一个我们之前在Kubernetes中部署Hadoop YARN和Spark的例子。
-![Hadoop YARN 迁移到 Kubernetes的示例](https://ws1.sinaimg.cn/large/00704eQkgy1frr58ebf2lj323o11219r.jpg)
+![Hadoop YARN 迁移到 Kubernetes的示例](../images/00704eQkgy1frr58ebf2lj323o11219r.jpg)
-![Spark on Yarn with Kubernetes](https://ws1.sinaimg.cn/large/00704eQkgy1frr59gzzwsj32gg16k4qp.jpg)
+![Spark on Yarn with Kubernetes](../images/00704eQkgy1frr59gzzwsj32gg16k4qp.jpg)
Kubernetes始于12因素应用的PaaS平台,它是微服务的绝佳部署管理平台,基于它可以应用多种设计模式。它的未来将变成什么样呢?
-![云原生与12因素应用](https://ws1.sinaimg.cn/large/00704eQkgy1frr5arzvetj31no12mdre.jpg)
+![云原生与12因素应用](../images/00704eQkgy1frr5arzvetj31no12mdre.jpg)
- Service Mesh:解决微服务治理问题
- Auto Pilot:自动驾驭能力,服务自动扩展,智能运维
@@ -114,7 +114,7 @@ Kubernetes始于12因素应用的PaaS平台,它是微服务的绝佳部署管
甚至出现了像ballerina这样的云原生编程语言,它的出现就是为了解决应用开发到服务集成之间的鸿沟的。它有以下几个特点。
-![云原生编程语言](https://ws1.sinaimg.cn/large/00704eQkgy1frr5c8bwmtj31ou152qc3.jpg)
+![云原生编程语言](../images/00704eQkgy1frr5c8bwmtj31ou152qc3.jpg)
- 使用云原生语义的DSL
- 注解式配置
@@ -123,13 +123,13 @@ Kubernetes始于12因素应用的PaaS平台,它是微服务的绝佳部署管
要完成云的集成CI/CD,或者用一个词代替来说就是GitOps的需求越来越强烈。
-![Gitkube](https://ws1.sinaimg.cn/large/00704eQkgy1frr5bulhuhj329m10iwua.jpg)
+![Gitkube](../images/00704eQkgy1frr5bulhuhj329m10iwua.jpg)
### Kubernetes没有做什么
看下这张图中的两个服务,它们使用的是kube-proxy里基于iptables的原生的负载均衡,并且服务间的流量也没有任何控制。
-![Kuberentes中的流量管理](https://ws1.sinaimg.cn/large/00704eQkgy1frr5dsurx6j320i140tpf.jpg)
+![Kuberentes中的流量管理](../images/00704eQkgy1frr5dsurx6j320i140tpf.jpg)
Kubernetes缺少的最重要的一个功能就是微服务的治理,微服务比起单体服务来说使得部署和运维起来更加复杂,对于微服务的可观测性也有更高的要求,同时CI/CD流程Kubernetes本身也没有提供。
@@ -141,7 +141,7 @@ Service Mesh是一个专用的基础设施层,它能够将微服务的治理
这是Istio Service Mesh的架构图。
-![Istio Service Mesh架构图](https://ws1.sinaimg.cn/large/00704eQkgy1frr5exqm7kj320u18mh2t.jpg)
+![Istio Service Mesh架构图](../images/00704eQkgy1frr5exqm7kj320u18mh2t.jpg)
- Pilot:提供用户接口,用户可以通过该接口配置各种路由规则,Pilot还可以通过适配器获取平台上各种服务之间的管理,Evnoy这个使用Sidecar方式部署到每个应用pod中的进程会通过Pilot中的Envoy API获得平台上各个服务之间的管理,同时也会应用用户配置的路由规则。
- Mixer:获取各种平台属性,服务间通讯时会先访问Mixer兼容各平台的属性信息,如quota、访问控制和策略评估,将服务间的访问信息记录后上报到mixer形成遥测报告。
@@ -149,7 +149,7 @@ Service Mesh是一个专用的基础设施层,它能够将微服务的治理
Service Mesh实际上为了解决社会分工问题,它本身是为了解决微服务的治理。
-![Service Mesh架构](https://ws1.sinaimg.cn/large/00704eQkgy1frr5fxzoltj32f81akqr2.jpg)
+![Service Mesh架构](../images/00704eQkgy1frr5fxzoltj32f81akqr2.jpg)
Pilot和控制平面是为了运维人员准备的。
@@ -157,8 +157,8 @@ Pilot和控制平面是为了运维人员准备的。
Isito在每个上下游服务之间部署一个Envoy,Envoy中有几个基本的服务发现服务,监听器即Envoy要转发的流量端口,Endpoint是要转发的目的地,Cluster是一系列Endpoint用来做负载均衡,Route是定义各种路由规则,每个Envoy进程里可以设置多个Listener。
-![Envoy proxy架构图](https://ws1.sinaimg.cn/large/00704eQkgy1frr5gloob0j31vi18017p.jpg)
+![Envoy proxy架构图](../images/00704eQkgy1frr5gloob0j31vi18017p.jpg)
---
-本文根据 [Jimmy Song](https://jimmysong.io) 于2018年5月20日在[第四届南京全球技术周](http://njsd-china.org/)上【互联网技术专场】上的题为【云原生应用的下一站】的演讲的部分内容的文字整理而成。
\ No newline at end of file
+本文根据 [Jimmy Song](https://jimmysong.io) 于2018年5月20日在[第四届南京全球技术周](http://njsd-china.org/)上【互联网技术专场】上的题为【云原生应用的下一站】的演讲的部分内容的文字整理而成。
diff --git a/concepts/admission-controller.md b/concepts/admission-controller.md
index 07ac44615..c94d42541 100644
--- a/concepts/admission-controller.md
+++ b/concepts/admission-controller.md
@@ -79,4 +79,4 @@ Kubernetes 目前支持的准入控制器有:
## 参考
-- [Using Admission Controllers - kubernetes.io](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/)
\ No newline at end of file
+- [Using Admission Controllers - kubernetes.io](https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/)
diff --git a/concepts/aggregated-api-server.md b/concepts/aggregated-api-server.md
index dd776c452..d4d46ef2f 100644
--- a/concepts/aggregated-api-server.md
+++ b/concepts/aggregated-api-server.md
@@ -25,4 +25,4 @@ Aggregated(聚合的)API server是为了将原来的API server这个巨石
## 参考
-[Aggregated API Servers - kuberentes design-proposals](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/aggregated-api-servers.md)
\ No newline at end of file
+[Aggregated API Servers - kuberentes design-proposals](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/aggregated-api-servers.md)
diff --git a/concepts/apiservice.md b/concepts/apiservice.md
index 4b47ded87..be2c14445 100644
--- a/concepts/apiservice.md
+++ b/concepts/apiservice.md
@@ -129,4 +129,4 @@ v1
## 参考
-- [API Conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#resources)
\ No newline at end of file
+- [API Conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#resources)
diff --git a/concepts/authentication-and-permission.md b/concepts/authentication-and-permission.md
index a0456fc99..099e3a89f 100644
--- a/concepts/authentication-and-permission.md
+++ b/concepts/authentication-and-permission.md
@@ -1,3 +1,3 @@
# 身份与权限认证
-Kubernetes中提供了良好的多租户认证管理机制,如RBAC、ServiceAccount还有各种Policy等。
\ No newline at end of file
+Kubernetes中提供了良好的多租户认证管理机制,如RBAC、ServiceAccount还有各种Policy等。
diff --git a/concepts/calico.md b/concepts/calico.md
index 830e5bacb..6a48ccc10 100644
--- a/concepts/calico.md
+++ b/concepts/calico.md
@@ -2,7 +2,7 @@
[Calico](https://www.projectcalico.org/) 原意为”有斑点的“,如果说一只猫为 calico cat 的话,就是说这是只花猫,也叫三色猫,所以 calico 的 logo 是只三色猫。
-![Calico](https://ws1.sinaimg.cn/large/006tNc79gy1fz65bt7ieej30c90bsgn2.jpg)
+![Calico](../images/006tNc79gy1fz65bt7ieej30c90bsgn2.jpg)
## 概念
diff --git a/concepts/cilium-concepts.md b/concepts/cilium-concepts.md
index 415d3a89b..f716c7ecb 100644
--- a/concepts/cilium-concepts.md
+++ b/concepts/cilium-concepts.md
@@ -14,7 +14,7 @@ KV 存储数据库用存储以下状态:
下图是 Cilium 的组件示意图,Cilium 是位于 Linux kernel 与容器编排系统的中间层。向上可以为容器配置网络,向下可以向 Linux 内核生成 BPF 程序来控制容器的安全性和转发行为。
-![Cilium 组件(来自 Cilium 官网)](https://ws3.sinaimg.cn/large/006tNbRwly1fwztvhg0gmj318z143tdv.jpg)
+![Cilium 组件(来自 Cilium 官网)](../images/006tNbRwly1fwztvhg0gmj318z143tdv.jpg)
管理员通过 Cilium CLI 配置策略信息,这些策略信息将存储在 KV 数据库里,Cilium 使用插件(如 CNI)与容器编排调度系统交互,来实现容器间的联网和容器分配 IP 地址分配,同时 Cilium 还可以获得容器的各种元数据和流量信息,提供监控 API。
@@ -109,7 +109,7 @@ Available Commands:
将该配置保存成 JSON 文件,在使用 `cilium policy import` 命令即可应用到 Cilium 网络中。
-![Cilium 网络配置策略](https://ws1.sinaimg.cn/large/006tNbRwly1fwzreaalj6j30dz0dy3z3.jpg)
+![Cilium 网络配置策略](../images/006tNbRwly1fwzreaalj6j30dz0dy3z3.jpg)
如图所示,此时 `id` 标签为其他值的容器就无法访问 `id=app1` 容器,策略配置中的 `toPorts` 中还可以配置 HTTP `method` 和 `path`,实现更细粒度的访问策略控制,详见 [Cilium 官方文档](https://cilium.readthedocs.io/en/stable/gettingstarted/docker/)。
diff --git a/concepts/cilium.md b/concepts/cilium.md
index c975b2697..3e884412b 100644
--- a/concepts/cilium.md
+++ b/concepts/cilium.md
@@ -4,7 +4,7 @@ Cilium是一个纯开源软件,没有哪家公司提供商业化支持,也
Cilium的基础是一种名为BPF的新Linux内核技术,它可以在Linux本身动态插入强大的安全可见性和控制逻辑。由于BPF在Linux内核中运行,因此可以应用和更新Cilium安全策略,而无需对应用程序代码或容器配置进行任何更改。
-![Cilium](https://ws4.sinaimg.cn/large/006tNbRwly1fwqi98i51ij30sc0j80zn.jpg)
+![Cilium](../images/006tNbRwly1fwqi98i51ij30sc0j80zn.jpg)
基于微服务的应用程序分为小型独立服务,这些服务使用**HTTP**、**gRPC**、**Kafka**等轻量级协议通过API相互通信。但是,现有的Linux网络安全机制(例如iptables)仅在网络和传输层(即IP地址和端口)上运行,并且缺乏对微服务层的可见性。
@@ -113,4 +113,4 @@ BPF的使用使得Cilium能够以高度可扩展的方式实现以上功能,
- [Cilium官方网站 - cilium.io](https://cilium.io)
- [eBPF 简史 - ibm.com](https://www.ibm.com/developerworks/cn/linux/l-lo-eBPF-history/index.html)
-- [网络层拦截可选项 - zhihu.com](https://zhuanlan.zhihu.com/p/25672552)
\ No newline at end of file
+- [网络层拦截可选项 - zhihu.com](https://zhuanlan.zhihu.com/p/25672552)
diff --git a/concepts/cluster.md b/concepts/cluster.md
index 025806acd..9423e2b2d 100644
--- a/concepts/cluster.md
+++ b/concepts/cluster.md
@@ -1,3 +1,3 @@
# 集群信息
-为了管理异构和不同配置的主机,为了便于Pod的运维管理,Kubernetes中提供了很多集群管理的配置和管理功能,通过namespace划分的空间,通过为node节点创建label和taint用于pod的调度等。
\ No newline at end of file
+为了管理异构和不同配置的主机,为了便于Pod的运维管理,Kubernetes中提供了很多集群管理的配置和管理功能,通过namespace划分的空间,通过为node节点创建label和taint用于pod的调度等。
diff --git a/concepts/concepts.md b/concepts/concepts.md
index e25815857..26e68e2a3 100644
--- a/concepts/concepts.md
+++ b/concepts/concepts.md
@@ -10,7 +10,7 @@
Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,如下图所示
-![Kubernetes 分层架构示意图](https://ws4.sinaimg.cn/large/006tNc79ly1fzniqvmi51j31gq0s0q5u.jpg)
+![Kubernetes 分层架构示意图](../images/006tNc79ly1fzniqvmi51j31gq0s0q5u.jpg)
* 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
* 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)
diff --git a/concepts/controllers.md b/concepts/controllers.md
index 7c476cd65..117218b11 100644
--- a/concepts/controllers.md
+++ b/concepts/controllers.md
@@ -1,3 +1,3 @@
# 控制器
-Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为。
\ No newline at end of file
+Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为。
diff --git a/concepts/cri.md b/concepts/cri.md
index 8979b981e..f52a8bfe2 100644
--- a/concepts/cri.md
+++ b/concepts/cri.md
@@ -124,7 +124,7 @@ service ImageService {
- [cri-o](https://github.com/kubernetes-incubator/cri-o):同时兼容OCI和CRI的容器运行时
- [cri-containerd](https://github.com/containerd/cri-containerd):基于[Containerd](https://github.com/containerd/containerd)的Kubernetes CRI 实现
-- [rkt](https://coreos.com/rkt/):由于CoreOS主推的用来跟docker抗衡的容器运行时
+- [rkt](https://coreos.com/rkt/):由CoreOS主推的用来跟docker抗衡的容器运行时
- [frakti](https://github.com/kubernetes/frakti):基于hypervisor的CRI
- [docker](https://www.docker.com):kuberentes最初就开始支持的容器运行时,目前还没完全从kubelet中解耦,docker公司同时推广了[OCI](https://www.opencontainers.org/)标准
- [Clear Containers](https://github.com/clearcontainers):由Intel推出的同时兼容OCI和CRI的容器运行时
diff --git a/concepts/custom-metrics-hpa.md b/concepts/custom-metrics-hpa.md
index a521c461d..2840d3cde 100644
--- a/concepts/custom-metrics-hpa.md
+++ b/concepts/custom-metrics-hpa.md
@@ -66,4 +66,4 @@ $ kubectl get --raw=apis/custom-metrics.metrics.k8s.io/v1alpha1
- [1.7版本的kubernetes中启用自定义HPA](https://docs.bitnami.com/kubernetes/how-to/configure-autoscaling-custom-metrics/)
- [Horizontal Pod Autoscaler Walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/)
- [Kubernetes 1.8: Now with 100% Daily Value of Custom Metrics](https://blog.openshift.com/kubernetes-1-8-now-custom-metrics/)
-- [Arbitrary/Custom Metrics in the Horizontal Pod Autoscaler#117](https://github.com/kubernetes/features/issues/117)
\ No newline at end of file
+- [Arbitrary/Custom Metrics in the Horizontal Pod Autoscaler#117](https://github.com/kubernetes/features/issues/117)
diff --git a/concepts/extension.md b/concepts/extension.md
index 9a6983249..1c8a130f8 100644
--- a/concepts/extension.md
+++ b/concepts/extension.md
@@ -1,3 +1,3 @@
# 扩展
-Kubernetes是一个高度开放可扩展的架构,可以通过自定义资源类型CRD来定义自己的类型,还可以自己来扩展API服务,用户的使用方式跟Kubernetes的原生对象无异。
\ No newline at end of file
+Kubernetes是一个高度开放可扩展的架构,可以通过自定义资源类型CRD来定义自己的类型,还可以自己来扩展API服务,用户的使用方式跟Kubernetes的原生对象无异。
diff --git a/concepts/garbage-collection.md b/concepts/garbage-collection.md
index ef06a93f1..5f0ed0084 100644
--- a/concepts/garbage-collection.md
+++ b/concepts/garbage-collection.md
@@ -133,4 +133,4 @@ kubectl delete replicaset my-repset --cascade=false
原文地址:https://k8smeetup.github.io/docs/concepts/workloads/controllers/garbage-collection/
-译者:[shirdrn](https://github.com/shirdrn)
\ No newline at end of file
+译者:[shirdrn](https://github.com/shirdrn)
diff --git a/concepts/horizontal-pod-autoscaling.md b/concepts/horizontal-pod-autoscaling.md
index 875343d14..919984633 100644
--- a/concepts/horizontal-pod-autoscaling.md
+++ b/concepts/horizontal-pod-autoscaling.md
@@ -150,4 +150,4 @@ Kubernetes 然后查询新的自定义 metric API 来获取相应自定义 metri
- 自定义metrics开发:https://github.com/kubernetes/metrics
-- 1.7版本的kubernetes中启用自定义HPA:[Configure Kubernetes Autoscaling With Custom Metrics in Kubernetes 1.7 - Bitnami](https://docs.bitnami.com/kubernetes/how-to/configure-autoscaling-custom-metrics/)
\ No newline at end of file
+- 1.7版本的kubernetes中启用自定义HPA:[Configure Kubernetes Autoscaling With Custom Metrics in Kubernetes 1.7 - Bitnami](https://docs.bitnami.com/kubernetes/how-to/configure-autoscaling-custom-metrics/)
diff --git a/concepts/init-containers.md b/concepts/init-containers.md
index f1a59b398..f39880e72 100644
--- a/concepts/init-containers.md
+++ b/concepts/init-containers.md
@@ -249,4 +249,4 @@ API Server 版本为 1.6 或更高版本的集群,通过使用 `spec.initConta
>
> 译者:[shirdrn](https://github.com/shirdrn)
>
-> 校对:[Jimmy Song](https://github.com/rootsongjc)
\ No newline at end of file
+> 校对:[Jimmy Song](https://github.com/rootsongjc)
diff --git a/concepts/local-persistent-storage.md b/concepts/local-persistent-storage.md
index 2127a2dab..3dba76b39 100644
--- a/concepts/local-persistent-storage.md
+++ b/concepts/local-persistent-storage.md
@@ -226,4 +226,4 @@ spec:
## 参考
-- [Local Persistent Storage User Guide](https://github.com/kubernetes-incubator/external-storage/tree/master/local-volume)
\ No newline at end of file
+- [Local Persistent Storage User Guide](https://github.com/kubernetes-incubator/external-storage/tree/master/local-volume)
diff --git a/concepts/network-policy.md b/concepts/network-policy.md
index 4405472d2..515be82aa 100644
--- a/concepts/network-policy.md
+++ b/concepts/network-policy.md
@@ -103,4 +103,4 @@ spec:
## 参考
- [Network Policies - k8smeetup.github.io](https://k8smeetup.github.io/docs/concepts/services-networking/network-policies/)
-- [Network Policies - kubernetes.io](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
\ No newline at end of file
+- [Network Policies - kubernetes.io](https://kubernetes.io/docs/concepts/services-networking/network-policies/)
diff --git a/concepts/networking.md b/concepts/networking.md
index a9c20811b..1818e401d 100644
--- a/concepts/networking.md
+++ b/concepts/networking.md
@@ -30,4 +30,4 @@ Kubernetes中的网络可以说对初次接触Kubernetes或者没有网络方面
下面仅以当前最常用的flannel和calico插件为例解析。
- [Kubernetes中的网络解析——以flannel为例](flannel.md)
-- [Kubernetes中的网络解析——以calico为例](calico.md)
\ No newline at end of file
+- [Kubernetes中的网络解析——以calico为例](calico.md)
diff --git a/concepts/persistent-volume.md b/concepts/persistent-volume.md
index c798a27a3..27602b29a 100644
--- a/concepts/persistent-volume.md
+++ b/concepts/persistent-volume.md
@@ -34,7 +34,7 @@ PV 属于集群中的资源。PVC 是对这些资源的请求,也作为对资
### 绑定
-再动态配置的情况下,用户创建或已经创建了具有特定存储量的 `PersistentVolumeClaim` 以及某些访问模式。master 中的控制环路监视新的 PVC,寻找匹配的 PV(如果可能),并将它们绑定在一起。如果为新的 PVC 动态调配 PV,则该环路将始终将该 PV 绑定到 PVC。否则,用户总会得到他们所请求的存储,但是容量可能超出要求的数量。一旦 PV 和 PVC 绑定后,`PersistentVolumeClaim` 绑定是排他性的,不管它们是如何绑定的。 PVC 跟 PV 绑定是一对一的映射。
+在动态配置的情况下,用户创建或已经创建了具有特定存储量的 `PersistentVolumeClaim` 以及某些访问模式。master 中的控制环路监视新的 PVC,寻找匹配的 PV(如果可能),并将它们绑定在一起。如果为新的 PVC 动态调配 PV,则该环路将始终将该 PV 绑定到 PVC。否则,用户总会得到他们所请求的存储,但是容量可能超出要求的数量。一旦 PV 和 PVC 绑定后,`PersistentVolumeClaim` 绑定是排他性的,不管它们是如何绑定的。 PVC 跟 PV 绑定是一对一的映射。
如果没有匹配的卷,声明将无限期地保持未绑定状态。随着匹配卷的可用,声明将被绑定。例如,配置了许多 50Gi PV的集群将不会匹配请求 100Gi 的PVC。将100Gi PV 添加到群集时,可以绑定 PVC。
diff --git a/concepts/pod-hook.md b/concepts/pod-hook.md
index 89c297f6a..8d9963eb6 100644
--- a/concepts/pod-hook.md
+++ b/concepts/pod-hook.md
@@ -38,4 +38,4 @@ Hook调用的日志没有暴露个给Pod的event,所以只能通过`describe`
## 参考
- [Attach Handlers to Container Lifecycle Events](https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/)
-- [Container Lifecycle Hooks](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/)
\ No newline at end of file
+- [Container Lifecycle Hooks](https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/)
diff --git a/concepts/pod-state-and-lifecycle.md b/concepts/pod-state-and-lifecycle.md
index c6391d360..be8dfe74e 100644
--- a/concepts/pod-state-and-lifecycle.md
+++ b/concepts/pod-state-and-lifecycle.md
@@ -8,4 +8,4 @@
- Pod的生命周期
- Pod中容器的启动顺序模板定义
-Kubernetes中的基本组件`kube-controller-manager`就是用来控制Pod的状态和生命周期的,在了解各种controller之前我们有必要先了解下Pod本身和其生命周期。
\ No newline at end of file
+Kubernetes中的基本组件`kube-controller-manager`就是用来控制Pod的状态和生命周期的,在了解各种controller之前我们有必要先了解下Pod本身和其生命周期。
diff --git a/concepts/qos.md b/concepts/qos.md
index 2987667b2..797d473c2 100644
--- a/concepts/qos.md
+++ b/concepts/qos.md
@@ -38,4 +38,4 @@ spec:
## 参考
-- [Configure Quality of Service for Pods](https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/)
\ No newline at end of file
+- [Configure Quality of Service for Pods](https://kubernetes.io/docs/tasks/configure-pod-container/quality-service-pod/)
diff --git a/concepts/rbac.md b/concepts/rbac.md
index 5ec3e83da..422b79f05 100644
--- a/concepts/rbac.md
+++ b/concepts/rbac.md
@@ -583,4 +583,4 @@ kubectl create clusterrolebinding permissive-binding \
--user=admin \
--user=kubelet \
--group=system:serviceaccounts
-```
\ No newline at end of file
+```
diff --git a/concepts/scheduling.md b/concepts/scheduling.md
index 9d376bc20..c32256409 100644
--- a/concepts/scheduling.md
+++ b/concepts/scheduling.md
@@ -9,4 +9,4 @@ Kubernetes中的众多资源类型,例如Deployment、DaemonSet、StatefulSet
考虑以下两种情况:
- 集群中有新增节点,想要让集群中的节点的资源利用率比较均衡一些,想要将一些高负载的节点上的pod驱逐到新增节点上,这是kuberentes的scheduler所不支持的,需要使用如[descheduler](https://github.com/kubernetes-incubator/descheduler)这样的插件来实现。
-- 想要运行一些大数据应用,设计到资源分片,pod需要与数据分布达到一致均衡,避免个别节点处理大量数据,而其它节点闲置导致整个作业延迟,这时候可以考虑使用[kube-batch](https://github.com/kubernetes-incubator/kube-batch)。
\ No newline at end of file
+- 想要运行一些大数据应用,设计到资源分片,pod需要与数据分布达到一致均衡,避免个别节点处理大量数据,而其它节点闲置导致整个作业延迟,这时候可以考虑使用[kube-batch](https://github.com/kubernetes-incubator/kube-batch)。
diff --git a/concepts/service-discovery.md b/concepts/service-discovery.md
index 355cd3f50..c6c933717 100644
--- a/concepts/service-discovery.md
+++ b/concepts/service-discovery.md
@@ -1,3 +1,3 @@
# 服务发现
-Kubernetes中为了实现服务实例间的负载均衡和不同服务间的服务发现,创造了Serivce对象,同时又为从集群外部访问集群创建了Ingress对象。
\ No newline at end of file
+Kubernetes中为了实现服务实例间的负载均衡和不同服务间的服务发现,创造了Serivce对象,同时又为从集群外部访问集群创建了Ingress对象。
diff --git a/concepts/storage.md b/concepts/storage.md
index 4906ca214..eee7f4a7f 100644
--- a/concepts/storage.md
+++ b/concepts/storage.md
@@ -1,3 +1,3 @@
# 存储
-为了管理存储,Kubernetes提供了Secret用于管理敏感信息,ConfigMap存储配置,Volume、PV、PVC、StorageClass等用来管理存储卷。
\ No newline at end of file
+为了管理存储,Kubernetes提供了Secret用于管理敏感信息,ConfigMap存储配置,Volume、PV、PVC、StorageClass等用来管理存储卷。
diff --git a/concepts/taint-and-toleration.md b/concepts/taint-and-toleration.md
index 5ee80ee20..2e4e4e553 100644
--- a/concepts/taint-and-toleration.md
+++ b/concepts/taint-and-toleration.md
@@ -59,4 +59,4 @@ tolerations:
## 参考
-- [Taints and Tolerations - kuberentes.io](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
\ No newline at end of file
+- [Taints and Tolerations - kuberentes.io](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
diff --git a/concepts/volume.md b/concepts/volume.md
index ca789938a..05ac14721 100644
--- a/concepts/volume.md
+++ b/concepts/volume.md
@@ -719,4 +719,4 @@ spec:
- https://kubernetes.io/docs/concepts/storage/volumes/
-- [使用持久化卷来部署 WordPress 和 MySQL](https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/)
\ No newline at end of file
+- [使用持久化卷来部署 WordPress 和 MySQL](https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/)
diff --git a/develop/advance-developer.md b/develop/advance-developer.md
index 3d966e382..4fef441d9 100644
--- a/develop/advance-developer.md
+++ b/develop/advance-developer.md
@@ -99,4 +99,4 @@ Kubernetes 在设计之初就考虑到了可扩展性。如果上面提到的 AP
- 如果您想推荐新功能或跟上Kubernetes应用开发的最新进展,请考虑加入 SIG,如 [SIG Apps](https://github.com/kubernetes/community/tree/master/sig-apps)。
- 如果您有兴趣详细了解 Kubernetes 的内部运作(例如网络),请考虑查看[集群运维之旅](https://kubernetes.io/docs/user-journeys/users/cluster-operator/foundational/)。
-原文:https://kubernetes.io/docs/user-journeys/users/application-developer/advanced
\ No newline at end of file
+原文:https://kubernetes.io/docs/user-journeys/users/application-developer/advanced
diff --git a/develop/developing-environment.md b/develop/developing-environment.md
index 2c3e79010..f01bd9cdb 100644
--- a/develop/developing-environment.md
+++ b/develop/developing-environment.md
@@ -38,4 +38,4 @@ index.tenxcloud.com/jimmy/kube-cross:v1.7.5-2
在我自己的电脑上的整个编译过程大概要半个小时。
-编译完成的二进制文件在`/_output/local/go/bin/`目录下。
\ No newline at end of file
+编译完成的二进制文件在`/_output/local/go/bin/`目录下。
diff --git a/develop/index.md b/develop/index.md
index f7ab0165c..dcc3fa049 100644
--- a/develop/index.md
+++ b/develop/index.md
@@ -1,3 +1,3 @@
# 开发指南说明
-讲解如何在原生 Kubernetes 的基础上做定制开发。
\ No newline at end of file
+讲解如何在原生 Kubernetes 的基础上做定制开发。
diff --git a/develop/kubebuilder.md b/develop/kubebuilder.md
index 47c34d98b..0e7a85f2a 100644
--- a/develop/kubebuilder.md
+++ b/develop/kubebuilder.md
@@ -31,4 +31,4 @@ Kubebuilder 提供基于简洁的精心设计的示例 godoc 来提供整洁的
## 参考
- [Kubebuilder quick start - book.kubebuilder.io](https://book.kubebuilder.io/quick_start.html)
-- [kubebuilder - github.com](https://github.com/kubernetes-sigs/kubebuilder/)
\ No newline at end of file
+- [kubebuilder - github.com](https://github.com/kubernetes-sigs/kubebuilder/)
diff --git a/develop/minikube.md b/develop/minikube.md
index 7ee2a4913..2425fbfd7 100644
--- a/develop/minikube.md
+++ b/develop/minikube.md
@@ -68,4 +68,4 @@ minikube stop
[Install minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/)
-[Driver plugin installation - xhyve-driver](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#xhyve-driver)
\ No newline at end of file
+[Driver plugin installation - xhyve-driver](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#xhyve-driver)
diff --git a/develop/operator-sdk.md b/develop/operator-sdk.md
index 8f0f81fde..9a77a0be1 100644
--- a/develop/operator-sdk.md
+++ b/develop/operator-sdk.md
@@ -64,4 +64,4 @@ operator-sdk new kubernetes-operator-sdk-tutorial --api-version=jimmysong.io/v1a
## 参考
-- [A complete guide to Kubernetes Operator SDK](https://banzaicloud.com/blog/operator-sdk/)
\ No newline at end of file
+- [A complete guide to Kubernetes Operator SDK](https://banzaicloud.com/blog/operator-sdk/)
diff --git a/develop/operator.md b/develop/operator.md
index 1b47493b6..52f2c4684 100644
--- a/develop/operator.md
+++ b/develop/operator.md
@@ -47,4 +47,4 @@ Operator本质上是与应用息息相关的,因为这是特定领域的知识
- [OperatorHub - operatorhub.io](https://www.operatorhub.io)
- [Writing a Kubernetes Operator in Golang](https://medium.com/@mtreacher/writing-a-kubernetes-operator-a9b86f19bfb9)
- [Introducing Operators: Putting Operational Knowledge into Software](https://coreos.com/blog/introducing-operators.html)
-- [Automating Kubernetes Cluster Operations with Operators](https://thenewstack.io/automating-kubernetes-cluster-operations-operators/)
\ No newline at end of file
+- [Automating Kubernetes Cluster Operations with Operators](https://thenewstack.io/automating-kubernetes-cluster-operations-operators/)
diff --git a/develop/sigs-and-working-group.md b/develop/sigs-and-working-group.md
index 83027b0f3..10573ff08 100644
--- a/develop/sigs-and-working-group.md
+++ b/develop/sigs-and-working-group.md
@@ -47,4 +47,4 @@ Kubernetes的社区是以SIG(Special Interest Group特别兴趣小组)和工
- **Kubeadm Adoption**:提高kubeadm工具的采用率。
- **Resource Management**J:资源隔离和提高资源利用率。
-详细信息请参考 https://github.com/kubernetes/community/blob/master/sig-list.md
\ No newline at end of file
+详细信息请参考 https://github.com/kubernetes/community/blob/master/sig-list.md
diff --git a/develop/using-vagrant-and-virtualbox-for-development.md b/develop/using-vagrant-and-virtualbox-for-development.md
index d54f44fb8..f3d13f9c4 100644
--- a/develop/using-vagrant-and-virtualbox-for-development.md
+++ b/develop/using-vagrant-and-virtualbox-for-development.md
@@ -288,4 +288,4 @@ rm -rf .vagrant
- [Kubernetes handbook - jimmysong.io](https://jimmysong.io/kubernetes-handbook)
- [duffqiu/centos-vagrant](https://github.com/duffqiu/centos-vagrant)
- [kubernetes-vagrant-centos-cluster](https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster)
-- [Kubernetes 1.8 kube-proxy 开启 ipvs](https://mritd.me/2017/10/10/kube-proxy-use-ipvs-on-kubernetes-1.8/#%E4%B8%80%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87)
\ No newline at end of file
+- [Kubernetes 1.8 kube-proxy 开启 ipvs](https://mritd.me/2017/10/10/kube-proxy-use-ipvs-on-kubernetes-1.8/#%E4%B8%80%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87)
diff --git a/guide/access-cluster.md b/guide/access-cluster.md
index 6c14943c6..8c6032770 100644
--- a/guide/access-cluster.md
+++ b/guide/access-cluster.md
@@ -247,4 +247,4 @@ $ kubectl cluster-info
- 由一些云提供商提供(例如 AWS ELB,Google Cloud Load Balancer)
- 当 Kubernetes service 类型为 LoadBalancer 时,会自动创建
- 仅使用 UDP/TCP
- - 实施方式因云提供商而异
\ No newline at end of file
+ - 实施方式因云提供商而异
diff --git a/guide/accessing-kubernetes-pods-from-outside-of-the-cluster.md b/guide/accessing-kubernetes-pods-from-outside-of-the-cluster.md
index 4150d04a8..5ce067f68 100644
--- a/guide/accessing-kubernetes-pods-from-outside-of-the-cluster.md
+++ b/guide/accessing-kubernetes-pods-from-outside-of-the-cluster.md
@@ -1,6 +1,6 @@
# 从外部访问Kubernetes中的Pod
-前面几节讲到如何访问kubneretes集群,本文主要讲解访问kubenretes中的Pod和Serivce的集中方式,包括如下几种:
+前面几节讲到如何访问kubneretes集群,本文主要讲解访问kubenretes中的Pod和Serivce的几种方式,包括如下几种:
- hostNetwork
- hostPort
@@ -170,4 +170,4 @@ spec:
## 参考
-- [Accessing Kubernetes Pods from Outside of the Cluster - alesnosek.com](http://alesnosek.com/blog/2017/02/14/accessing-kubernetes-pods-from-outside-of-the-cluster/)
\ No newline at end of file
+- [Accessing Kubernetes Pods from Outside of the Cluster - alesnosek.com](http://alesnosek.com/blog/2017/02/14/accessing-kubernetes-pods-from-outside-of-the-cluster/)
diff --git a/guide/application-development-deployment-flow.md b/guide/application-development-deployment-flow.md
index 1f4ed41f3..845e2d37a 100644
--- a/guide/application-development-deployment-flow.md
+++ b/guide/application-development-deployment-flow.md
@@ -2,4 +2,4 @@
理论上只要可以使用主机名做服务注册的应用都可以迁移到 kubernetes 集群上。看到这里你可能不禁要问,为什么使用 IP 地址做服务注册发现的应用不适合迁移到 kubernetes 集群?因为这样的应用不适合自动故障恢复,因为目前 kubernetes 中不支持固定 Pod 的 IP 地址,当 Pod 故障后自动转移到其他 Node 的时候该 Pod 的 IP 地址也随之变化。
-将传统应用迁移到 kubernetes 中可能还有很长的路要走,但是直接开发 Cloud native 应用,kubernetes 就是最佳运行时环境了。
\ No newline at end of file
+将传统应用迁移到 kubernetes 中可能还有很长的路要走,但是直接开发 Cloud native 应用,kubernetes 就是最佳运行时环境了。
diff --git a/guide/auth-with-kubeconfig-or-token.md b/guide/auth-with-kubeconfig-or-token.md
index e57e1e897..226bf0cd9 100644
--- a/guide/auth-with-kubeconfig-or-token.md
+++ b/guide/auth-with-kubeconfig-or-token.md
@@ -113,4 +113,4 @@ kubectl create rolebinding $ROLEBINDING_NAME --clusterrole=admin --serviceaccoun
## 参考
- [JSONPath 手册](https://kubernetes.io/docs/user-guide/jsonpath/)
-- [Kubernetes 中的认证](https://kubernetes.io/docs/admin/authentication/)
\ No newline at end of file
+- [Kubernetes 中的认证](https://kubernetes.io/docs/admin/authentication/)
diff --git a/guide/authenticate-across-clusters-kubeconfig.md b/guide/authenticate-across-clusters-kubeconfig.md
index 05a3fcd63..71ddcc008 100644
--- a/guide/authenticate-across-clusters-kubeconfig.md
+++ b/guide/authenticate-across-clusters-kubeconfig.md
@@ -284,4 +284,4 @@ $ kubectl config use-context federal-context
- 仔细看一下,了解您的 api-server 的启动方式:在设计 kubeconfig 文件以方便身份验证之前,您需要知道您自己的安全要求和策略。
- 将上面的代码段替换为您的集群的 api-server 端点的信息。
-- 确保您的 api-server 至少能够以提供一个用户(即 `green-user`)凭据的方式启动。 当然您必须查看 api-server 文档,以了解当前关于身份验证细节方面的最新技术。
\ No newline at end of file
+- 确保您的 api-server 至少能够以提供一个用户(即 `green-user`)凭据的方式启动。 当然您必须查看 api-server 文档,以了解当前关于身份验证细节方面的最新技术。
diff --git a/guide/cluster-security-management.md b/guide/cluster-security-management.md
index 1aa8e2ed4..68cb88908 100644
--- a/guide/cluster-security-management.md
+++ b/guide/cluster-security-management.md
@@ -1,3 +1,3 @@
# 集群安全性管理
-Kuberentes 支持多租户,这就需要对集群的安全性进行管理。
\ No newline at end of file
+Kuberentes 支持多租户,这就需要对集群的安全性进行管理。
diff --git a/guide/command-usage.md b/guide/command-usage.md
index 54fbaf9b0..644d3f3ce 100644
--- a/guide/command-usage.md
+++ b/guide/command-usage.md
@@ -1,3 +1,3 @@
# 命令使用
-Kubernetes 中的 kubectl 及其他管理命令使用。
\ No newline at end of file
+Kubernetes 中的 kubectl 及其他管理命令使用。
diff --git a/guide/connecting-to-applications-port-forward.md b/guide/connecting-to-applications-port-forward.md
index 9643d3adc..b1af7b515 100644
--- a/guide/connecting-to-applications-port-forward.md
+++ b/guide/connecting-to-applications-port-forward.md
@@ -77,4 +77,4 @@
## 讨论
-创建连接,将本地的 6379 端口转发到运行在 Pod 中的 Redis 服务器的 6379 端口。有了这个连接您就可以在本地工作站中调试运行在 Pod 中的数据库。
\ No newline at end of file
+创建连接,将本地的 6379 端口转发到运行在 Pod 中的 Redis 服务器的 6379 端口。有了这个连接您就可以在本地工作站中调试运行在 Pod 中的数据库。
diff --git a/guide/deploy-applications-in-kubernetes.md b/guide/deploy-applications-in-kubernetes.md
index e153af24b..e9f0791ad 100644
--- a/guide/deploy-applications-in-kubernetes.md
+++ b/guide/deploy-applications-in-kubernetes.md
@@ -153,4 +153,4 @@ kubectl apply -n default -f <(istioctl kube-inject -f k8s-app-monitor-istio-all-
![Zipkin页面](../images/k8s-app-monitor-istio-zipkin.png)
-至此从代码提交到上线到Kubernetes集群上并集成Istio service mesh的过程就全部完成了。
\ No newline at end of file
+至此从代码提交到上线到Kubernetes集群上并集成Istio service mesh的过程就全部完成了。
diff --git a/guide/docker-cli-to-kubectl.md b/guide/docker-cli-to-kubectl.md
index d9a58b757..4860b1061 100644
--- a/guide/docker-cli-to-kubectl.md
+++ b/guide/docker-cli-to-kubectl.md
@@ -1,4 +1,4 @@
-# docker用户过度到kubectl命令行指南
+# docker用户过渡到kubectl命令行指南
对于没有使用过 kubernetes 的 docker 用户,如何快速掌握 kubectl 命令?
@@ -266,4 +266,4 @@ Grafana is running at https://108.59.85.141/api/v1/namespaces/kube-system/servic
Heapster is running at https://108.59.85.141/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
InfluxDB is running at https://108.59.85.141/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy
```
-原文地址:https://github.com/rootsongjc/kubernetes.github.io/blob/master/docs/user-guide/docker-cli-to-kubectl.md
\ No newline at end of file
+原文地址:https://github.com/rootsongjc/kubernetes.github.io/blob/master/docs/user-guide/docker-cli-to-kubectl.md
diff --git a/guide/ip-masq-agent.md b/guide/ip-masq-agent.md
index 6fec14492..7b7a11cf6 100644
--- a/guide/ip-masq-agent.md
+++ b/guide/ip-masq-agent.md
@@ -95,4 +95,4 @@ MASQUERADE all -- anywhere anywhere /* ip-masq-agent:
原文地址:https://k8smeetup.github.io/docs/tasks/administer-cluster/ip-masq-agent/
-译者:[rootsongjc](https://github.com/rootsongjc)
\ No newline at end of file
+译者:[rootsongjc](https://github.com/rootsongjc)
diff --git a/guide/kubectl-cheatsheet.md b/guide/kubectl-cheatsheet.md
index dcc955859..787396b5d 100644
--- a/guide/kubectl-cheatsheet.md
+++ b/guide/kubectl-cheatsheet.md
@@ -296,4 +296,4 @@ $ kubectl taint nodes foo dedicated=special-user:NoSchedule
- [JsonPath 手册](https://kubernetes.io/docs/user-guide/jsonpath)
-本文是对官方文档的中文翻译,原文地址:
\ No newline at end of file
+本文是对官方文档的中文翻译,原文地址:
diff --git a/guide/kubectl-user-authentication-authorization.md b/guide/kubectl-user-authentication-authorization.md
index 16a3a9311..fca62f045 100644
--- a/guide/kubectl-user-authentication-authorization.md
+++ b/guide/kubectl-user-authentication-authorization.md
@@ -136,4 +136,4 @@ No resources found.
可以使用我写的[create-user.sh脚本](https://github.com/rootsongjc/kubernetes-handbook/blob/master/tools/create-user/create-user.sh)来创建namespace和用户并授权,参考[说明](../tools/create-user/README.md)。
-关于角色绑定的更多信息请参考 [RBAC——基于角色的访问控制](rbac.md)。
\ No newline at end of file
+关于角色绑定的更多信息请参考 [RBAC——基于角色的访问控制](rbac.md)。
diff --git a/guide/kubelet-authentication-authorization.md b/guide/kubelet-authentication-authorization.md
index 8010d6575..b6aeb70f0 100644
--- a/guide/kubelet-authentication-authorization.md
+++ b/guide/kubelet-authentication-authorization.md
@@ -72,4 +72,4 @@ Namespace 和 API 组属性总是空字符串,资源的名字总是 kubelet
- verb=*, resource=nodes, subresource=stats
- verb=*, resource=nodes, subresource=log
- verb=*, resource=nodes, subresource=spec
-- verb=*, resource=nodes, subresource=metrics
\ No newline at end of file
+- verb=*, resource=nodes, subresource=metrics
diff --git a/guide/kubernetes-desktop-client.md b/guide/kubernetes-desktop-client.md
index ab9b93b66..822186ee5 100644
--- a/guide/kubernetes-desktop-client.md
+++ b/guide/kubernetes-desktop-client.md
@@ -10,4 +10,4 @@ Kubernetic - 一款kubenretes桌面客户端,,支
![Kubernetic客户端](../images/kubernetic-desktop-ui.jpg)
-该客户端支持Mac和Windows系统,beta版本免费使用,stable版本需要付费。beta版本某些功能不完善,比如无法在应用内修改ingress配置,无法监控应用的状态等。
\ No newline at end of file
+该客户端支持Mac和Windows系统,beta版本免费使用,stable版本需要付费。beta版本某些功能不完善,比如无法在应用内修改ingress配置,无法监控应用的状态等。
diff --git a/guide/kubernetes-security-best-practice.md b/guide/kubernetes-security-best-practice.md
index dc058636f..cd632f82e 100644
--- a/guide/kubernetes-security-best-practice.md
+++ b/guide/kubernetes-security-best-practice.md
@@ -36,4 +36,4 @@
- [Isolate containers with a user namespace](https://docs.docker.com/engine/security/userns-remap/)
- [Docker Security – It’s a Layered Approach](https://logz.io/blog/docker-security/)
- [Kubernetes 1.8: Security, Workloads and Feature Depth](http://blog.kubernetes.io/2017/09/kubernetes-18-security-workloads-and.html)
-- [Security Matters: RBAC in Kubernetes](https://blog.heptio.com/security-matters-rbac-in-kubernetes-e369b483c8d8)
\ No newline at end of file
+- [Security Matters: RBAC in Kubernetes](https://blog.heptio.com/security-matters-rbac-in-kubernetes-e369b483c8d8)
diff --git a/guide/migrating-hadoop-yarn-to-kubernetes.md b/guide/migrating-hadoop-yarn-to-kubernetes.md
index 6f356f21a..86b18cf60 100644
--- a/guide/migrating-hadoop-yarn-to-kubernetes.md
+++ b/guide/migrating-hadoop-yarn-to-kubernetes.md
@@ -218,4 +218,4 @@
--from-file=artifacts/spark/spark-defaults.conf
```
-所有的配置完成后,可以可以使用 kubectl 命令来启动和管理集群了,我们编写了 Makefile,您可以直接使用该 Makefile 封装的命令实现部分的自动化。
\ No newline at end of file
+所有的配置完成后,可以可以使用 kubectl 命令来启动和管理集群了,我们编写了 Makefile,您可以直接使用该 Makefile 封装的命令实现部分的自动化。
diff --git a/guide/rbac.md b/guide/rbac.md
index c0d0fe18b..7b61ec735 100644
--- a/guide/rbac.md
+++ b/guide/rbac.md
@@ -584,4 +584,4 @@ kubectl create clusterrolebinding permissive-binding \
--user=admin \
--user=kubelet \
--group=system:serviceaccounts
-```
\ No newline at end of file
+```
diff --git a/guide/resource-configuration.md b/guide/resource-configuration.md
index 4e4c9a000..cbf12e53b 100644
--- a/guide/resource-configuration.md
+++ b/guide/resource-configuration.md
@@ -1,3 +1,3 @@
# 资源配置
-Kubernetes 中的各个 Object 的配置指南。
\ No newline at end of file
+Kubernetes 中的各个 Object 的配置指南。
diff --git a/guide/resource-quota-management.md b/guide/resource-quota-management.md
index 335077626..2012dec81 100644
--- a/guide/resource-quota-management.md
+++ b/guide/resource-quota-management.md
@@ -96,4 +96,4 @@ spec:
- [资源配额](https://k8smeetup.github.io/docs/concepts/policy/resource-quotas/)
- [为命名空间配置默认的内存请求与限额](https://k8smeetup.github.io/docs/tasks/administer-cluster/memory-default-namespace/)
-- [在命名空间中配置默认的CPU请求与限额](https://k8smeetup.github.io/docs/tasks/administer-cluster/cpu-default-namespace/)
\ No newline at end of file
+- [在命名空间中配置默认的CPU请求与限额](https://k8smeetup.github.io/docs/tasks/administer-cluster/cpu-default-namespace/)
diff --git a/guide/secret-configuration.md b/guide/secret-configuration.md
index cdf8b715f..89e246a21 100644
--- a/guide/secret-configuration.md
+++ b/guide/secret-configuration.md
@@ -578,4 +578,4 @@ Pod 中有多个容器。但是,pod 中的每个容器必须请求其挂载卷
- 如果运行了多个副本,那么这些 secret 将在它们之间共享。默认情况下,etcd 不能保证与 SSL/TLS 的对等通信,尽管可以进行配置。
- 目前,任何节点的 root 用户都可以通过模拟 kubelet 来读取 API server 中的任何 secret。只有向实际需要它们的节点发送 secret 才能限制单个节点的根漏洞的影响,该功能还在计划中。
-原文地址:https://github.com/rootsongjc/kubernetes.github.io/blob/master/docs/concepts/configuration/secret.md
\ No newline at end of file
+原文地址:https://github.com/rootsongjc/kubernetes.github.io/blob/master/docs/concepts/configuration/secret.md
diff --git a/guide/tls-bootstrapping.md b/guide/tls-bootstrapping.md
index 24a329b3f..82a19f2b9 100644
--- a/guide/tls-bootstrapping.md
+++ b/guide/tls-bootstrapping.md
@@ -182,4 +182,4 @@ kubectl config set-credentials kubelet-bootstrap --token=${BOOTSTRAP_TOKEN} --ku
签名控制器不会立即签署所有证书请求。相反,它会一直等待直到适当特权的用户被标记为 “已批准” 状态。这最终将是由外部审批控制器来处理的自动化过程,但是对于 alpha 版本的 API 来说,可以由集群管理员通过 kubectl 命令手动完成。
-管理员可以使用 `kubectl get csr` 命令列出所有的 CSR,使用 `kubectl describe csr ` 命令描述某个 CSR的详细信息。在 1.6 版本以前,[没有直接的批准/拒绝命令](https://github.com/kubernetes/kubernetes/issues/30163) ,因此审批者需要直接更新 Status 信息([查看如何实现](https://github.com/gtank/csrctl))。此后的 Kubernetes 版本中提供了 `kubectl certificate approve ` 和 `kubectl certificate deny ` 命令。
\ No newline at end of file
+管理员可以使用 `kubectl get csr` 命令列出所有的 CSR,使用 `kubectl describe csr ` 命令描述某个 CSR的详细信息。在 1.6 版本以前,[没有直接的批准/拒绝命令](https://github.com/kubernetes/kubernetes/issues/30163) ,因此审批者需要直接更新 Status 信息([查看如何实现](https://github.com/gtank/csrctl))。此后的 Kubernetes 版本中提供了 `kubectl certificate approve ` 和 `kubectl certificate deny ` 命令。
diff --git a/guide/using-kubectl.md b/guide/using-kubectl.md
index e813460f7..45d0bc26e 100644
--- a/guide/using-kubectl.md
+++ b/guide/using-kubectl.md
@@ -74,4 +74,4 @@ source <(kubectl completion zsh)
保存后重启终端即可生效。
-参考:[Install and Set Up kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#using-zsh)
\ No newline at end of file
+参考:[Install and Set Up kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/#using-zsh)
diff --git a/guide/using-statefulset.md b/guide/using-statefulset.md
index 79fd4e6e3..dc870c0cd 100644
--- a/guide/using-statefulset.md
+++ b/guide/using-statefulset.md
@@ -323,4 +323,4 @@ spec:
## 参考
- https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
-- [kubernetes contrib - statefulsets](https://github.com/kubernetes/contrib/tree/master/statefulsets)
\ No newline at end of file
+- [kubernetes contrib - statefulsets](https://github.com/kubernetes/contrib/tree/master/statefulsets)
diff --git a/images/0069RVTdgy1fu08liarftj31kw0spkeg.jpg b/images/0069RVTdgy1fu08liarftj31kw0spkeg.jpg
new file mode 100644
index 000000000..53ebd0f92
Binary files /dev/null and b/images/0069RVTdgy1fu08liarftj31kw0spkeg.jpg differ
diff --git a/images/0069RVTdgy1fu08m7p22kj31kw1biq98.jpg b/images/0069RVTdgy1fu08m7p22kj31kw1biq98.jpg
new file mode 100644
index 000000000..ed5938765
Binary files /dev/null and b/images/0069RVTdgy1fu08m7p22kj31kw1biq98.jpg differ
diff --git a/images/0069RVTdgy1fv5df9lq1aj317o0o6wia.jpg b/images/0069RVTdgy1fv5df9lq1aj317o0o6wia.jpg
new file mode 100644
index 000000000..5d1d32a6b
Binary files /dev/null and b/images/0069RVTdgy1fv5df9lq1aj317o0o6wia.jpg differ
diff --git a/images/0069RVTdgy1fv5dm4a9ygj30w50czdi3.jpg b/images/0069RVTdgy1fv5dm4a9ygj30w50czdi3.jpg
new file mode 100644
index 000000000..baffb9e4c
Binary files /dev/null and b/images/0069RVTdgy1fv5dm4a9ygj30w50czdi3.jpg differ
diff --git a/images/0069RVTdgy1fv5doj8fuij31kw0ytn7h.jpg b/images/0069RVTdgy1fv5doj8fuij31kw0ytn7h.jpg
new file mode 100644
index 000000000..58a6ee685
Binary files /dev/null and b/images/0069RVTdgy1fv5doj8fuij31kw0ytn7h.jpg differ
diff --git a/images/0069RVTdgy1fv5dq2bptdj31110begnl.jpg b/images/0069RVTdgy1fv5dq2bptdj31110begnl.jpg
new file mode 100644
index 000000000..199cc3c6f
Binary files /dev/null and b/images/0069RVTdgy1fv5dq2bptdj31110begnl.jpg differ
diff --git a/images/0069RVTdgy1fv5mxr6fxtj31kw11q484.jpg b/images/0069RVTdgy1fv5mxr6fxtj31kw11q484.jpg
new file mode 100644
index 000000000..9996ab021
Binary files /dev/null and b/images/0069RVTdgy1fv5mxr6fxtj31kw11q484.jpg differ
diff --git a/images/0069RVTdgy1fv5my2jtxzj315o0z8dkr.jpg b/images/0069RVTdgy1fv5my2jtxzj315o0z8dkr.jpg
new file mode 100644
index 000000000..b0f54e215
Binary files /dev/null and b/images/0069RVTdgy1fv5my2jtxzj315o0z8dkr.jpg differ
diff --git a/images/0069RVTdgy1fv5myp6ednj31kw0w0u0x.jpg b/images/0069RVTdgy1fv5myp6ednj31kw0w0u0x.jpg
new file mode 100644
index 000000000..c627e190f
Binary files /dev/null and b/images/0069RVTdgy1fv5myp6ednj31kw0w0u0x.jpg differ
diff --git a/images/0069RVTdgy1fv5mzj8rj6j318g1ewtfc.jpg b/images/0069RVTdgy1fv5mzj8rj6j318g1ewtfc.jpg
new file mode 100644
index 000000000..8af8e998b
Binary files /dev/null and b/images/0069RVTdgy1fv5mzj8rj6j318g1ewtfc.jpg differ
diff --git a/images/0069RVTdgy1fv5mzywc83j31fk1i8qg4.jpg b/images/0069RVTdgy1fv5mzywc83j31fk1i8qg4.jpg
new file mode 100644
index 000000000..31412e587
Binary files /dev/null and b/images/0069RVTdgy1fv5mzywc83j31fk1i8qg4.jpg differ
diff --git a/images/0069RVTdly1fuafvbnuc7j310a0oqdm9.jpg b/images/0069RVTdly1fuafvbnuc7j310a0oqdm9.jpg
new file mode 100644
index 000000000..746cc6db9
Binary files /dev/null and b/images/0069RVTdly1fuafvbnuc7j310a0oqdm9.jpg differ
diff --git a/images/0069RVTdly1fuaie8jan8j310a0kitem.jpg b/images/0069RVTdly1fuaie8jan8j310a0kitem.jpg
new file mode 100644
index 000000000..d48070acb
Binary files /dev/null and b/images/0069RVTdly1fuaie8jan8j310a0kitem.jpg differ
diff --git a/images/0069RVTdly1fuail4d24jj31080rkgr7.jpg b/images/0069RVTdly1fuail4d24jj31080rkgr7.jpg
new file mode 100644
index 000000000..9b8c5627e
Binary files /dev/null and b/images/0069RVTdly1fuail4d24jj31080rkgr7.jpg differ
diff --git a/images/0069RVTdly1fuam4ln45jj30yu0o6wkc.jpg b/images/0069RVTdly1fuam4ln45jj30yu0o6wkc.jpg
new file mode 100644
index 000000000..96fd1e0e1
Binary files /dev/null and b/images/0069RVTdly1fuam4ln45jj30yu0o6wkc.jpg differ
diff --git a/images/0069RVTdly1fuamvq97cuj30yu0wg7cr.jpg b/images/0069RVTdly1fuamvq97cuj30yu0wg7cr.jpg
new file mode 100644
index 000000000..36272b531
Binary files /dev/null and b/images/0069RVTdly1fuamvq97cuj30yu0wg7cr.jpg differ
diff --git a/images/0069RVTdly1fuanez4qbtj30v4183n7p.jpg b/images/0069RVTdly1fuanez4qbtj30v4183n7p.jpg
new file mode 100644
index 000000000..92d45e36c
Binary files /dev/null and b/images/0069RVTdly1fuanez4qbtj30v4183n7p.jpg differ
diff --git a/images/0069RVTdly1fv5hukl647j30k6145gnt.jpg b/images/0069RVTdly1fv5hukl647j30k6145gnt.jpg
new file mode 100644
index 000000000..53ec4656a
Binary files /dev/null and b/images/0069RVTdly1fv5hukl647j30k6145gnt.jpg differ
diff --git a/images/006tKfTcgy1ft5pe433f6j31kw0s3nnl.jpg b/images/006tKfTcgy1ft5pe433f6j31kw0s3nnl.jpg
new file mode 100644
index 000000000..bbe17b48a
Binary files /dev/null and b/images/006tKfTcgy1ft5pe433f6j31kw0s3nnl.jpg differ
diff --git a/images/006tKfTcgy1ft75ot24lzj31ec18479s.jpg b/images/006tKfTcgy1ft75ot24lzj31ec18479s.jpg
new file mode 100644
index 000000000..16f0d0053
Binary files /dev/null and b/images/006tKfTcgy1ft75ot24lzj31ec18479s.jpg differ
diff --git a/images/006tKfTcgy1ft75pq8rplj31kw19sn5q.jpg b/images/006tKfTcgy1ft75pq8rplj31kw19sn5q.jpg
new file mode 100644
index 000000000..03ba25def
Binary files /dev/null and b/images/006tKfTcgy1ft75pq8rplj31kw19sn5q.jpg differ
diff --git a/images/006tKfTcly1ft3zgjlisxj30n70ffjth.jpg b/images/006tKfTcly1ft3zgjlisxj30n70ffjth.jpg
new file mode 100644
index 000000000..23ff8c299
Binary files /dev/null and b/images/006tKfTcly1ft3zgjlisxj30n70ffjth.jpg differ
diff --git a/images/006tKfTcly1g1gbdpsdbgj303c03cwel.jpg b/images/006tKfTcly1g1gbdpsdbgj303c03cwel.jpg
new file mode 100644
index 000000000..5b8527e3e
Binary files /dev/null and b/images/006tKfTcly1g1gbdpsdbgj303c03cwel.jpg differ
diff --git a/images/006tKfTcly1g1gbjvx2ugj305k05mmx9.jpg b/images/006tKfTcly1g1gbjvx2ugj305k05mmx9.jpg
new file mode 100644
index 000000000..f18efb9f4
Binary files /dev/null and b/images/006tKfTcly1g1gbjvx2ugj305k05mmx9.jpg differ
diff --git a/images/006tNbRwgy1fuyr4vizzwj31kw1biq98.jpg b/images/006tNbRwgy1fuyr4vizzwj31kw1biq98.jpg
new file mode 100644
index 000000000..ed5938765
Binary files /dev/null and b/images/006tNbRwgy1fuyr4vizzwj31kw1biq98.jpg differ
diff --git a/images/006tNbRwgy1fvlwjd3302j31bo0ro0x5.jpg b/images/006tNbRwgy1fvlwjd3302j31bo0ro0x5.jpg
new file mode 100644
index 000000000..2f52e1a32
Binary files /dev/null and b/images/006tNbRwgy1fvlwjd3302j31bo0ro0x5.jpg differ
diff --git a/images/006tNbRwly1fubfiiryirj30w20ayjui.jpg b/images/006tNbRwly1fubfiiryirj30w20ayjui.jpg
new file mode 100644
index 000000000..de7f5767a
Binary files /dev/null and b/images/006tNbRwly1fubfiiryirj30w20ayjui.jpg differ
diff --git a/images/006tNbRwly1fubnx0q9bpj30vq0pq465.jpg b/images/006tNbRwly1fubnx0q9bpj30vq0pq465.jpg
new file mode 100644
index 000000000..09c632628
Binary files /dev/null and b/images/006tNbRwly1fubnx0q9bpj30vq0pq465.jpg differ
diff --git a/images/006tNbRwly1fubs6ts3sgj30vo0osdnj.jpg b/images/006tNbRwly1fubs6ts3sgj30vo0osdnj.jpg
new file mode 100644
index 000000000..6cc67cf75
Binary files /dev/null and b/images/006tNbRwly1fubs6ts3sgj30vo0osdnj.jpg differ
diff --git a/images/006tNbRwly1fubsk4v16hj30vo0bq75z.jpg b/images/006tNbRwly1fubsk4v16hj30vo0bq75z.jpg
new file mode 100644
index 000000000..479c3cf78
Binary files /dev/null and b/images/006tNbRwly1fubsk4v16hj30vo0bq75z.jpg differ
diff --git a/images/006tNbRwly1fubsxrph3dj30vq0duq53.jpg b/images/006tNbRwly1fubsxrph3dj30vq0duq53.jpg
new file mode 100644
index 000000000..2eaa05eb9
Binary files /dev/null and b/images/006tNbRwly1fubsxrph3dj30vq0duq53.jpg differ
diff --git a/images/006tNbRwly1fubt5a97h7j30vq0bcq5p.jpg b/images/006tNbRwly1fubt5a97h7j30vq0bcq5p.jpg
new file mode 100644
index 000000000..c1773320a
Binary files /dev/null and b/images/006tNbRwly1fubt5a97h7j30vq0bcq5p.jpg differ
diff --git a/images/006tNbRwly1fubvi0dnhlj30vo0ekwhx.jpg b/images/006tNbRwly1fubvi0dnhlj30vo0ekwhx.jpg
new file mode 100644
index 000000000..af2827b57
Binary files /dev/null and b/images/006tNbRwly1fubvi0dnhlj30vo0ekwhx.jpg differ
diff --git a/images/006tNbRwly1fubvr83wvgj30vq0mmdip.jpg b/images/006tNbRwly1fubvr83wvgj30vq0mmdip.jpg
new file mode 100644
index 000000000..a80db3f4e
Binary files /dev/null and b/images/006tNbRwly1fubvr83wvgj30vq0mmdip.jpg differ
diff --git a/images/006tNbRwly1fucp8yralaj30vu0sijx8.jpg b/images/006tNbRwly1fucp8yralaj30vu0sijx8.jpg
new file mode 100644
index 000000000..bf5f2f102
Binary files /dev/null and b/images/006tNbRwly1fucp8yralaj30vu0sijx8.jpg differ
diff --git a/images/006tNbRwly1fucpano6gsj31kw1biq98.jpg b/images/006tNbRwly1fucpano6gsj31kw1biq98.jpg
new file mode 100644
index 000000000..ed5938765
Binary files /dev/null and b/images/006tNbRwly1fucpano6gsj31kw1biq98.jpg differ
diff --git a/images/006tNbRwly1fucpc5fn8wj31kw0sfdnu.jpg b/images/006tNbRwly1fucpc5fn8wj31kw0sfdnu.jpg
new file mode 100644
index 000000000..22b0aac6c
Binary files /dev/null and b/images/006tNbRwly1fucpc5fn8wj31kw0sfdnu.jpg differ
diff --git a/images/006tNbRwly1fucplat3l9j30vo0lw43l.jpg b/images/006tNbRwly1fucplat3l9j30vo0lw43l.jpg
new file mode 100644
index 000000000..d6ac7d5fb
Binary files /dev/null and b/images/006tNbRwly1fucplat3l9j30vo0lw43l.jpg differ
diff --git a/images/006tNbRwly1fwcgsn11fej311j0mjadw.jpg b/images/006tNbRwly1fwcgsn11fej311j0mjadw.jpg
new file mode 100644
index 000000000..1574e78a4
Binary files /dev/null and b/images/006tNbRwly1fwcgsn11fej311j0mjadw.jpg differ
diff --git a/images/006tNbRwly1fwcl7v28rhj30xl0onadv.jpg b/images/006tNbRwly1fwcl7v28rhj30xl0onadv.jpg
new file mode 100644
index 000000000..70036eaab
Binary files /dev/null and b/images/006tNbRwly1fwcl7v28rhj30xl0onadv.jpg differ
diff --git a/images/006tNbRwly1fwdlx22rv9j31ec184dlr.jpg b/images/006tNbRwly1fwdlx22rv9j31ec184dlr.jpg
new file mode 100644
index 000000000..4529e225d
Binary files /dev/null and b/images/006tNbRwly1fwdlx22rv9j31ec184dlr.jpg differ
diff --git a/images/006tNbRwly1fwjg48fh7xj31kw0wedrg.jpg b/images/006tNbRwly1fwjg48fh7xj31kw0wedrg.jpg
new file mode 100644
index 000000000..c21adc3ec
Binary files /dev/null and b/images/006tNbRwly1fwjg48fh7xj31kw0wedrg.jpg differ
diff --git a/images/006tNbRwly1fwjkfbvfluj30y70hf0y9.jpg b/images/006tNbRwly1fwjkfbvfluj30y70hf0y9.jpg
new file mode 100644
index 000000000..b57445a4e
Binary files /dev/null and b/images/006tNbRwly1fwjkfbvfluj30y70hf0y9.jpg differ
diff --git a/images/006tNbRwly1fwqi98i51ij30sc0j80zn.jpg b/images/006tNbRwly1fwqi98i51ij30sc0j80zn.jpg
new file mode 100644
index 000000000..a0247a9d8
Binary files /dev/null and b/images/006tNbRwly1fwqi98i51ij30sc0j80zn.jpg differ
diff --git a/images/006tNbRwly1fwzreaalj6j30dz0dy3z3.jpg b/images/006tNbRwly1fwzreaalj6j30dz0dy3z3.jpg
new file mode 100644
index 000000000..a129192ff
Binary files /dev/null and b/images/006tNbRwly1fwzreaalj6j30dz0dy3z3.jpg differ
diff --git a/images/006tNbRwly1fwztvhg0gmj318z143tdv.jpg b/images/006tNbRwly1fwztvhg0gmj318z143tdv.jpg
new file mode 100644
index 000000000..0e6e9a8ac
Binary files /dev/null and b/images/006tNbRwly1fwztvhg0gmj318z143tdv.jpg differ
diff --git a/images/006tNbRwly1fx0ie2kb90j31kw0ynha3.jpg b/images/006tNbRwly1fx0ie2kb90j31kw0ynha3.jpg
new file mode 100644
index 000000000..abefb4ca6
Binary files /dev/null and b/images/006tNbRwly1fx0ie2kb90j31kw0ynha3.jpg differ
diff --git a/images/006tNbRwly1fxmx633ymqj31dp0u0kjn.jpg b/images/006tNbRwly1fxmx633ymqj31dp0u0kjn.jpg
new file mode 100644
index 000000000..c53c8d33b
Binary files /dev/null and b/images/006tNbRwly1fxmx633ymqj31dp0u0kjn.jpg differ
diff --git a/images/006tNbRwly1fyitp0jsghj31o70u0x6p.jpg b/images/006tNbRwly1fyitp0jsghj31o70u0x6p.jpg
new file mode 100644
index 000000000..f8c9000e9
Binary files /dev/null and b/images/006tNbRwly1fyitp0jsghj31o70u0x6p.jpg differ
diff --git a/images/006tNbRwly1fyl39icd27j31c70u04gc.jpg b/images/006tNbRwly1fyl39icd27j31c70u04gc.jpg
new file mode 100644
index 000000000..e611594a5
Binary files /dev/null and b/images/006tNbRwly1fyl39icd27j31c70u04gc.jpg differ
diff --git a/images/006tNc79gy1ftwe77v4u5j31kw0ziwtw.jpg b/images/006tNc79gy1ftwe77v4u5j31kw0ziwtw.jpg
new file mode 100644
index 000000000..00ec6a31d
Binary files /dev/null and b/images/006tNc79gy1ftwe77v4u5j31kw0ziwtw.jpg differ
diff --git a/images/006tNc79gy1ftweryj0zrj31kw0zix6q.jpg b/images/006tNc79gy1ftweryj0zrj31kw0zix6q.jpg
new file mode 100644
index 000000000..43311bdfd
Binary files /dev/null and b/images/006tNc79gy1ftweryj0zrj31kw0zix6q.jpg differ
diff --git a/images/006tNc79gy1ftwesjg1e2j31kw0s8woq.jpg b/images/006tNc79gy1ftwesjg1e2j31kw0s8woq.jpg
new file mode 100644
index 000000000..b9e5c9288
Binary files /dev/null and b/images/006tNc79gy1ftwesjg1e2j31kw0s8woq.jpg differ
diff --git a/images/006tNc79gy1ftwhtmzhfej31kw0ziww1.jpg b/images/006tNc79gy1ftwhtmzhfej31kw0ziww1.jpg
new file mode 100644
index 000000000..1151813d7
Binary files /dev/null and b/images/006tNc79gy1ftwhtmzhfej31kw0ziww1.jpg differ
diff --git a/images/006tNc79gy1ftwhvtu1vxj31kw0zitvc.jpg b/images/006tNc79gy1ftwhvtu1vxj31kw0zitvc.jpg
new file mode 100644
index 000000000..468c25ed9
Binary files /dev/null and b/images/006tNc79gy1ftwhvtu1vxj31kw0zitvc.jpg differ
diff --git a/images/006tNc79gy1ftwiolw1tyj31kw0zib29.jpg b/images/006tNc79gy1ftwiolw1tyj31kw0zib29.jpg
new file mode 100644
index 000000000..0c0f6eb52
Binary files /dev/null and b/images/006tNc79gy1ftwiolw1tyj31kw0zib29.jpg differ
diff --git a/images/006tNc79gy1ftwjyxiw1pj31kw0zi4qp.jpg b/images/006tNc79gy1ftwjyxiw1pj31kw0zi4qp.jpg
new file mode 100644
index 000000000..cfe9774b8
Binary files /dev/null and b/images/006tNc79gy1ftwjyxiw1pj31kw0zi4qp.jpg differ
diff --git a/images/006tNc79gy1fz65bt7ieej30c90bsgn2.jpg b/images/006tNc79gy1fz65bt7ieej30c90bsgn2.jpg
new file mode 100644
index 000000000..2913dfc62
Binary files /dev/null and b/images/006tNc79gy1fz65bt7ieej30c90bsgn2.jpg differ
diff --git a/images/006tNc79ly1fzm9vs4o3aj31s00u0x6p.jpg b/images/006tNc79ly1fzm9vs4o3aj31s00u0x6p.jpg
new file mode 100644
index 000000000..8b036ce8f
Binary files /dev/null and b/images/006tNc79ly1fzm9vs4o3aj31s00u0x6p.jpg differ
diff --git a/images/006tNc79ly1fzmnolp5ghj30z90u0gwf.jpg b/images/006tNc79ly1fzmnolp5ghj30z90u0gwf.jpg
new file mode 100644
index 000000000..6599af7a8
Binary files /dev/null and b/images/006tNc79ly1fzmnolp5ghj30z90u0gwf.jpg differ
diff --git a/images/006tNc79ly1fzna87wmfij30u00zc4qp.jpg b/images/006tNc79ly1fzna87wmfij30u00zc4qp.jpg
new file mode 100644
index 000000000..d5ad2930a
Binary files /dev/null and b/images/006tNc79ly1fzna87wmfij30u00zc4qp.jpg differ
diff --git a/images/006tNc79ly1fznadbp63qj31jt0beq9s.jpg b/images/006tNc79ly1fznadbp63qj31jt0beq9s.jpg
new file mode 100644
index 000000000..250d60ede
Binary files /dev/null and b/images/006tNc79ly1fznadbp63qj31jt0beq9s.jpg differ
diff --git a/images/006tNc79ly1fznbh3vfbwj310f0jxgxj.jpg b/images/006tNc79ly1fznbh3vfbwj310f0jxgxj.jpg
new file mode 100644
index 000000000..985aff8b0
Binary files /dev/null and b/images/006tNc79ly1fznbh3vfbwj310f0jxgxj.jpg differ
diff --git a/images/006tNc79ly1fzne6y4f2ej31q60fedho.jpg b/images/006tNc79ly1fzne6y4f2ej31q60fedho.jpg
new file mode 100644
index 000000000..fdb7a285f
Binary files /dev/null and b/images/006tNc79ly1fzne6y4f2ej31q60fedho.jpg differ
diff --git a/images/006tNc79ly1fznegoocmvj31y00hmgon.jpg b/images/006tNc79ly1fznegoocmvj31y00hmgon.jpg
new file mode 100644
index 000000000..b3f18b620
Binary files /dev/null and b/images/006tNc79ly1fznegoocmvj31y00hmgon.jpg differ
diff --git a/images/006tNc79ly1fzniqvmi51j31gq0s0q5u.jpg b/images/006tNc79ly1fzniqvmi51j31gq0s0q5u.jpg
new file mode 100644
index 000000000..4acd92257
Binary files /dev/null and b/images/006tNc79ly1fzniqvmi51j31gq0s0q5u.jpg differ
diff --git a/images/006tNc79ly1fzor2k6f7wj313j0u0dl3.jpg b/images/006tNc79ly1fzor2k6f7wj313j0u0dl3.jpg
new file mode 100644
index 000000000..f6eedc3df
Binary files /dev/null and b/images/006tNc79ly1fzor2k6f7wj313j0u0dl3.jpg differ
diff --git a/images/006tNc79ly1g04s0oznytj31tg0ok7ca.jpg b/images/006tNc79ly1g04s0oznytj31tg0ok7ca.jpg
new file mode 100644
index 000000000..179bd8c11
Binary files /dev/null and b/images/006tNc79ly1g04s0oznytj31tg0ok7ca.jpg differ
diff --git a/images/006tNc79ly1g04tl97vm4j318v0h7dpt.jpg b/images/006tNc79ly1g04tl97vm4j318v0h7dpt.jpg
new file mode 100644
index 000000000..9bedcf7b7
Binary files /dev/null and b/images/006tNc79ly1g04tl97vm4j318v0h7dpt.jpg differ
diff --git a/images/006tNc79ly1g1yz80ag98j31cs0n2gr7.jpg b/images/006tNc79ly1g1yz80ag98j31cs0n2gr7.jpg
new file mode 100644
index 000000000..69334c9e3
Binary files /dev/null and b/images/006tNc79ly1g1yz80ag98j31cs0n2gr7.jpg differ
diff --git a/images/00704eQkgy1frr4z08j6oj31p20w2n6n.jpg b/images/00704eQkgy1frr4z08j6oj31p20w2n6n.jpg
new file mode 100644
index 000000000..733f69944
Binary files /dev/null and b/images/00704eQkgy1frr4z08j6oj31p20w2n6n.jpg differ
diff --git a/images/00704eQkgy1frr52hl4eaj31qy15en74.jpg b/images/00704eQkgy1frr52hl4eaj31qy15en74.jpg
new file mode 100644
index 000000000..837169963
Binary files /dev/null and b/images/00704eQkgy1frr52hl4eaj31qy15en74.jpg differ
diff --git a/images/00704eQkgy1frr53j3aiuj32fs1dc7wi.jpg b/images/00704eQkgy1frr53j3aiuj32fs1dc7wi.jpg
new file mode 100644
index 000000000..706a77bb1
Binary files /dev/null and b/images/00704eQkgy1frr53j3aiuj32fs1dc7wi.jpg differ
diff --git a/images/00704eQkgy1frr54de5oyj31qw14qn2x.jpg b/images/00704eQkgy1frr54de5oyj31qw14qn2x.jpg
new file mode 100644
index 000000000..5f50cc156
Binary files /dev/null and b/images/00704eQkgy1frr54de5oyj31qw14qn2x.jpg differ
diff --git a/images/00704eQkgy1frr54ztql2j329q0zwwlf.jpg b/images/00704eQkgy1frr54ztql2j329q0zwwlf.jpg
new file mode 100644
index 000000000..eaa13327d
Binary files /dev/null and b/images/00704eQkgy1frr54ztql2j329q0zwwlf.jpg differ
diff --git a/images/00704eQkgy1frr56m7z2sj31y010y17y.jpg b/images/00704eQkgy1frr56m7z2sj31y010y17y.jpg
new file mode 100644
index 000000000..2b6929c6b
Binary files /dev/null and b/images/00704eQkgy1frr56m7z2sj31y010y17y.jpg differ
diff --git a/images/00704eQkgy1frr57nm2mnj31xk11qqej.jpg b/images/00704eQkgy1frr57nm2mnj31xk11qqej.jpg
new file mode 100644
index 000000000..5940ccc0d
Binary files /dev/null and b/images/00704eQkgy1frr57nm2mnj31xk11qqej.jpg differ
diff --git a/images/00704eQkgy1frr58ebf2lj323o11219r.jpg b/images/00704eQkgy1frr58ebf2lj323o11219r.jpg
new file mode 100644
index 000000000..483fa0a52
Binary files /dev/null and b/images/00704eQkgy1frr58ebf2lj323o11219r.jpg differ
diff --git a/images/00704eQkgy1frr59gzzwsj32gg16k4qp.jpg b/images/00704eQkgy1frr59gzzwsj32gg16k4qp.jpg
new file mode 100644
index 000000000..585ca28a0
Binary files /dev/null and b/images/00704eQkgy1frr59gzzwsj32gg16k4qp.jpg differ
diff --git a/images/00704eQkgy1frr5arzvetj31no12mdre.jpg b/images/00704eQkgy1frr5arzvetj31no12mdre.jpg
new file mode 100644
index 000000000..ed3c7e98c
Binary files /dev/null and b/images/00704eQkgy1frr5arzvetj31no12mdre.jpg differ
diff --git a/images/00704eQkgy1frr5bulhuhj329m10iwua.jpg b/images/00704eQkgy1frr5bulhuhj329m10iwua.jpg
new file mode 100644
index 000000000..e70ecf386
Binary files /dev/null and b/images/00704eQkgy1frr5bulhuhj329m10iwua.jpg differ
diff --git a/images/00704eQkgy1frr5c8bwmtj31ou152qc3.jpg b/images/00704eQkgy1frr5c8bwmtj31ou152qc3.jpg
new file mode 100644
index 000000000..928396bfd
Binary files /dev/null and b/images/00704eQkgy1frr5c8bwmtj31ou152qc3.jpg differ
diff --git a/images/00704eQkgy1frr5dsurx6j320i140tpf.jpg b/images/00704eQkgy1frr5dsurx6j320i140tpf.jpg
new file mode 100644
index 000000000..033f07870
Binary files /dev/null and b/images/00704eQkgy1frr5dsurx6j320i140tpf.jpg differ
diff --git a/images/00704eQkgy1frr5exqm7kj320u18mh2t.jpg b/images/00704eQkgy1frr5exqm7kj320u18mh2t.jpg
new file mode 100644
index 000000000..84a1ad349
Binary files /dev/null and b/images/00704eQkgy1frr5exqm7kj320u18mh2t.jpg differ
diff --git a/images/00704eQkgy1frr5fxzoltj32f81akqr2.jpg b/images/00704eQkgy1frr5fxzoltj32f81akqr2.jpg
new file mode 100644
index 000000000..54ef422d7
Binary files /dev/null and b/images/00704eQkgy1frr5fxzoltj32f81akqr2.jpg differ
diff --git a/images/00704eQkgy1frr5gloob0j31vi18017p.jpg b/images/00704eQkgy1frr5gloob0j31vi18017p.jpg
new file mode 100644
index 000000000..80a78b9a7
Binary files /dev/null and b/images/00704eQkgy1frr5gloob0j31vi18017p.jpg differ
diff --git a/images/00704eQkgy1fsaxszh01vj30da0j2jvn.jpg b/images/00704eQkgy1fsaxszh01vj30da0j2jvn.jpg
new file mode 100644
index 000000000..89cc7d0e0
Binary files /dev/null and b/images/00704eQkgy1fsaxszh01vj30da0j2jvn.jpg differ
diff --git a/images/00704eQkgy1fsayashxz3j31c00w6aed.jpg b/images/00704eQkgy1fsayashxz3j31c00w6aed.jpg
new file mode 100644
index 000000000..dbdd0d699
Binary files /dev/null and b/images/00704eQkgy1fsayashxz3j31c00w6aed.jpg differ
diff --git a/images/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg b/images/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg
new file mode 100644
index 000000000..6907eb6ba
Binary files /dev/null and b/images/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg differ
diff --git a/images/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg b/images/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg
new file mode 100644
index 000000000..255081086
Binary files /dev/null and b/images/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg differ
diff --git a/images/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg b/images/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg
new file mode 100644
index 000000000..2d89a4189
Binary files /dev/null and b/images/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg differ
diff --git a/images/00704eQkgy1fsaz2wirz9j31bs0vygsb.jpg b/images/00704eQkgy1fsaz2wirz9j31bs0vygsb.jpg
new file mode 100644
index 000000000..ba7fee168
Binary files /dev/null and b/images/00704eQkgy1fsaz2wirz9j31bs0vygsb.jpg differ
diff --git a/images/00704eQkgy1fsaz3yo227j31c60mgdim.jpg b/images/00704eQkgy1fsaz3yo227j31c60mgdim.jpg
new file mode 100644
index 000000000..fb2d2a2f2
Binary files /dev/null and b/images/00704eQkgy1fsaz3yo227j31c60mgdim.jpg differ
diff --git a/images/00704eQkgy1fsaz50k2atj31bs0mitbn.jpg b/images/00704eQkgy1fsaz50k2atj31bs0mitbn.jpg
new file mode 100644
index 000000000..be385b79d
Binary files /dev/null and b/images/00704eQkgy1fsaz50k2atj31bs0mitbn.jpg differ
diff --git a/images/00704eQkgy1fsaz5n5qs9j31by0motbm.jpg b/images/00704eQkgy1fsaz5n5qs9j31by0motbm.jpg
new file mode 100644
index 000000000..96d5aca41
Binary files /dev/null and b/images/00704eQkgy1fsaz5n5qs9j31by0motbm.jpg differ
diff --git a/images/00704eQkgy1fsazabn0b9j31by0w6791.jpg b/images/00704eQkgy1fsazabn0b9j31by0w6791.jpg
new file mode 100644
index 000000000..016ae14b9
Binary files /dev/null and b/images/00704eQkgy1fsazabn0b9j31by0w6791.jpg differ
diff --git a/images/00704eQkgy1fsazcclee6j31c20w6n5y.jpg b/images/00704eQkgy1fsazcclee6j31c20w6n5y.jpg
new file mode 100644
index 000000000..3c88b4c6b
Binary files /dev/null and b/images/00704eQkgy1fsazcclee6j31c20w6n5y.jpg differ
diff --git a/images/00704eQkgy1fshft5oxlwj318g0pe0wp.jpg b/images/00704eQkgy1fshft5oxlwj318g0pe0wp.jpg
new file mode 100644
index 000000000..3013fb341
Binary files /dev/null and b/images/00704eQkgy1fshft5oxlwj318g0pe0wp.jpg differ
diff --git a/images/00704eQkgy1fshg0vw25ij318g0jzqjq.jpg b/images/00704eQkgy1fshg0vw25ij318g0jzqjq.jpg
new file mode 100644
index 000000000..0160e67d8
Binary files /dev/null and b/images/00704eQkgy1fshg0vw25ij318g0jzqjq.jpg differ
diff --git a/images/00704eQkgy1fshi61t04oj310q17c0y1.jpg b/images/00704eQkgy1fshi61t04oj310q17c0y1.jpg
new file mode 100644
index 000000000..37ad2f176
Binary files /dev/null and b/images/00704eQkgy1fshi61t04oj310q17c0y1.jpg differ
diff --git a/images/00704eQkgy1fshi98duzgj318g0l2406.jpg b/images/00704eQkgy1fshi98duzgj318g0l2406.jpg
new file mode 100644
index 000000000..482f61b76
Binary files /dev/null and b/images/00704eQkgy1fshi98duzgj318g0l2406.jpg differ
diff --git a/images/00704eQkgy1fshibdwcj3j318g0p8th1.jpg b/images/00704eQkgy1fshibdwcj3j318g0p8th1.jpg
new file mode 100644
index 000000000..7930825c5
Binary files /dev/null and b/images/00704eQkgy1fshibdwcj3j318g0p8th1.jpg differ
diff --git a/images/00704eQkgy1fshicc7or1j318g0p8ahr.jpg b/images/00704eQkgy1fshicc7or1j318g0p8ahr.jpg
new file mode 100644
index 000000000..773b42191
Binary files /dev/null and b/images/00704eQkgy1fshicc7or1j318g0p8ahr.jpg differ
diff --git a/images/00704eQkgy1fshie7wxkyj30ks0f4myd.jpg b/images/00704eQkgy1fshie7wxkyj30ks0f4myd.jpg
new file mode 100644
index 000000000..eaa9842ed
Binary files /dev/null and b/images/00704eQkgy1fshie7wxkyj30ks0f4myd.jpg differ
diff --git a/images/00704eQkgy1fsm4v0a6qwj30xc0m8t9d.jpg b/images/00704eQkgy1fsm4v0a6qwj30xc0m8t9d.jpg
new file mode 100644
index 000000000..6165116f2
Binary files /dev/null and b/images/00704eQkgy1fsm4v0a6qwj30xc0m8t9d.jpg differ
diff --git a/images/cncf-graduation.jpg b/images/cncf-graduation.jpg
new file mode 100644
index 000000000..5587cceef
Binary files /dev/null and b/images/cncf-graduation.jpg differ
diff --git a/images/feedback.jpg b/images/feedback.jpg
new file mode 100644
index 000000000..d02b5c306
Binary files /dev/null and b/images/feedback.jpg differ
diff --git a/images/servicemesher-wechat-public.jpg b/images/servicemesher-wechat-public.jpg
new file mode 100644
index 000000000..7e557da62
Binary files /dev/null and b/images/servicemesher-wechat-public.jpg differ
diff --git a/practice/cephfs.md b/practice/cephfs.md
index 2ace6bd8a..5083077b7 100644
--- a/practice/cephfs.md
+++ b/practice/cephfs.md
@@ -1,3 +1,3 @@
# CephFS
-Cephfs 是一个基于 ceph 集群且兼容POSIX标准的文件系统。创建 cephfs 文件系统时需要在 ceph 集群中添加 mds 服务,该服务负责处理 POSIX 文件系统中的 metadata 部分,实际的数据部分交由 ceph 集群中的 OSDs 处理。cephfs 支持以内核模块方式加载也支持 fuse 方式加载。无论是内核模式还是 fuse 模式,都是通过调用 libcephfs 库来实现 cephfs 文件系统的加载,而 libcephfs 库又调用 librados 库与 ceph 集群进行通信,从而实现 cephfs 的加载。
\ No newline at end of file
+Cephfs 是一个基于 ceph 集群且兼容POSIX标准的文件系统。创建 cephfs 文件系统时需要在 ceph 集群中添加 mds 服务,该服务负责处理 POSIX 文件系统中的 metadata 部分,实际的数据部分交由 ceph 集群中的 OSDs 处理。cephfs 支持以内核模块方式加载也支持 fuse 方式加载。无论是内核模式还是 fuse 模式,都是通过调用 libcephfs 库来实现 cephfs 文件系统的加载,而 libcephfs 库又调用 librados 库与 ceph 集群进行通信,从而实现 cephfs 的加载。
diff --git a/practice/ci-cd.md b/practice/ci-cd.md
index 691d113a5..60668ffd1 100644
--- a/practice/ci-cd.md
+++ b/practice/ci-cd.md
@@ -4,7 +4,7 @@
众所周知Kubernetes并不提供代码构建、发布和部署,所有的这些工作都是由CI/CD工作流完成的,最近TheNewStack又出了本小册子(117页)介绍了Kubernetes中CI/CD的现状。下载本书的PDF请访问:https://thenewstack.io/ebooks/kubernetes/ci-cd-with-kubernetes/
-![CI/CD with Kubernetes](https://ws1.sinaimg.cn/large/00704eQkgy1fsaxszh01vj30da0j2jvn.jpg)
+![CI/CD with Kubernetes](../images/00704eQkgy1fsaxszh01vj30da0j2jvn.jpg)
本书的作者有:
@@ -24,13 +24,13 @@
这一章从一些流行的自动化运维工具讲起,比如Chef、Puppet等,引申出CI/CD流水线,进而引出Docker和DevOps,将容器如何解除开发和运维之间的隔阂,但同时也带来了一些挑战,比如频繁的发布变更如何控制,如何控制容器集群的行为,如何拆分应用到容器之中等。这是一个专门用于容器编排调度的工具呼之欲出,Kubernetes的出现彻底改变了局面,可以说它直接改变了应用的基础架构。
-![Kubernetes改变了应用的基础架构](https://ws1.sinaimg.cn/large/00704eQkgy1fsayashxz3j31c00w6aed.jpg)
+![Kubernetes改变了应用的基础架构](../images/00704eQkgy1fsayashxz3j31c00w6aed.jpg)
Kubernetes细化的应用程序的分解粒度,同时将服务发现、配置管理、负载均衡和健康检查等作为基础设施的功能,简化了应用程序的开发。
而Kubernetes这种声明式配置尤其适合CI/CD流程,况且现在还有如Helm、Draft、Spinnaker、Skaffold等开源工具可以帮助我们发布Kuberentes应用。
-![Kubernetes中的CI/CD](https://ws1.sinaimg.cn/large/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg)
+![Kubernetes中的CI/CD](../images/00704eQkgy1fsayfzk3ezj31bu0tkdky.jpg)
有了基于Kubernetes的CI/CD流程后,又诞生了GitOps(的博客中有很多相关文章)和SecOps(Security Operation)。
@@ -53,11 +53,11 @@ Kubernetes细化的应用程序的分解粒度,同时将服务发现、配置
作者然后将应用程序架构中的不同组件映射到云原生的工作负载中,如下图所示:
-![云原生工作负载](https://ws1.sinaimg.cn/large/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg)
+![云原生工作负载](../images/00704eQkgy1fsayrk6vppj31bu0w0gsd.jpg)
这也是DevOps需要关注的部分,如何将云原生的组件映射为Kubernetes的原语(即Kubernetes里的各种资源对象和概念组合)呢?如下图所示。
-![云原生工作负载映射到Kuberentes原语](https://ws1.sinaimg.cn/large/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg)
+![云原生工作负载映射到Kuberentes原语](../images/00704eQkgy1fsaytbabxgj31c00w2n4r.jpg)
总结概括为以下10条:
@@ -78,15 +78,15 @@ Kubernetes细化的应用程序的分解粒度,同时将服务发现、配置
下图是Spinnaker中的组件和角色的交互关系。
-![spinnaker中的组件及角色交互关系](https://ws1.sinaimg.cn/large/00704eQkgy1fsaz2wirz9j31bs0vygsb.jpg)
+![spinnaker中的组件及角色交互关系](../images/00704eQkgy1fsaz2wirz9j31bs0vygsb.jpg)
下图是Spinnaker的几种不同环境的流水线。
-![Spinnaker部署流水线](https://ws1.sinaimg.cn/large/00704eQkgy1fsaz3yo227j31c60mgdim.jpg)
+![Spinnaker部署流水线](../images/00704eQkgy1fsaz3yo227j31c60mgdim.jpg)
-![Spinnaker的预发布流水线](https://ws1.sinaimg.cn/large/00704eQkgy1fsaz50k2atj31bs0mitbn.jpg)
+![Spinnaker的预发布流水线](../images/00704eQkgy1fsaz50k2atj31bs0mitbn.jpg)
-![Spinnaker的生产流水线](https://ws1.sinaimg.cn/large/00704eQkgy1fsaz5n5qs9j31by0motbm.jpg)
+![Spinnaker的生产流水线](../images/00704eQkgy1fsaz5n5qs9j31by0motbm.jpg)
总之作者就是想说Spinnaker很好很强大啦,足以满足您对云原生应用CI/CD的需求。
@@ -101,10 +101,10 @@ Kubernetes细化的应用程序的分解粒度,同时将服务发现、配置
要把其中任何一个方面做好都不容器。
-![可观察性](https://ws1.sinaimg.cn/large/00704eQkgy1fsazabn0b9j31by0w6791.jpg)
+![可观察性](../images/00704eQkgy1fsazabn0b9j31by0w6791.jpg)
作者主要讲述的Prometheus和Grafana的开源监控方案。
-![Prometheus生态系统中的组件](https://ws1.sinaimg.cn/large/00704eQkgy1fsazcclee6j31c20w6n5y.jpg)
+![Prometheus生态系统中的组件](../images/00704eQkgy1fsazcclee6j31c20w6n5y.jpg)
-这一章我不详述,感兴趣大家可以查看报告原文。
\ No newline at end of file
+这一章我不详述,感兴趣大家可以查看报告原文。
diff --git a/practice/configuration-best-practice.md b/practice/configuration-best-practice.md
index 952e9a125..87579418b 100644
--- a/practice/configuration-best-practice.md
+++ b/practice/configuration-best-practice.md
@@ -53,4 +53,4 @@
## 参考
-- [Configuration Best Practices](https://kubernetes.io/docs/concepts/configuration/overview/)
\ No newline at end of file
+- [Configuration Best Practices](https://kubernetes.io/docs/concepts/configuration/overview/)
diff --git a/practice/configuring-dns.md b/practice/configuring-dns.md
index ec93e4ae5..d87c74d44 100644
--- a/practice/configuring-dns.md
+++ b/practice/configuring-dns.md
@@ -329,4 +329,4 @@ Kubernetes 1.3 版本起引入了支持多站点 Kubernetes 安装的集群联
- [Configure DNS Service](https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/)
- [Service 和 Pod 的 DNS](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/)
- [自动扩容集群中的 DNS 服务](https://kubernetes.io/docs/tasks/administer-cluster/dns-horizontal-autoscaling/)
-- [Using CoreDNS for Service Discovery](https://kubernetes.io/docs/tasks/administer-cluster/coredns/)
\ No newline at end of file
+- [Using CoreDNS for Service Discovery](https://kubernetes.io/docs/tasks/administer-cluster/coredns/)
diff --git a/practice/coredns.md b/practice/coredns.md
index 04a38e48d..abc162ad6 100644
--- a/practice/coredns.md
+++ b/practice/coredns.md
@@ -31,4 +31,4 @@ $ kubectl delete --namespace=kube-system deployment kube-dns
## 参考
-- [Kubernetes DNS-Based Service Discovery](https://github.com/kubernetes/dns/blob/master/docs/specification.md)
\ No newline at end of file
+- [Kubernetes DNS-Based Service Discovery](https://github.com/kubernetes/dns/blob/master/docs/specification.md)
diff --git a/practice/create-private-charts-repo.md b/practice/create-private-charts-repo.md
index 6861abef2..e2e6048ed 100644
--- a/practice/create-private-charts-repo.md
+++ b/practice/create-private-charts-repo.md
@@ -136,4 +136,4 @@ $ helm install monocular/monocular
- [Helm Chart - GitHub](https://github.com/kubernetes/helm/blob/master/docs/charts.md)
- [简化Kubernetes应用部署工具-Helm之应用部署](https://www.kubernetes.org.cn/2706.html)
- [Speed deployment on Kubernetes with Helm Chart – Quick YAML example from scratch](https://www.ibm.com/blogs/bluemix/2017/10/quick-example-helm-chart-for-kubernetes/)
-- [Using a private github repo as helm chart repo (https access)](https://medium.com/@kavehmz/using-a-private-github-repo-as-helm-chart-repo-https-access-95629b2af27c)
\ No newline at end of file
+- [Using a private github repo as helm chart repo (https access)](https://medium.com/@kavehmz/using-a-private-github-repo-as-helm-chart-repo-https-access-95629b2af27c)
diff --git a/practice/dashboard-addon-installation.md b/practice/dashboard-addon-installation.md
index 2f329b43a..0fbac648e 100644
--- a/practice/dashboard-addon-installation.md
+++ b/practice/dashboard-addon-installation.md
@@ -247,4 +247,4 @@ kubectl -n kube-system describe pod dashboard-xxxxxxx
## 参考
-- [WebUI(Dashboard) 文档](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/)
\ No newline at end of file
+- [WebUI(Dashboard) 文档](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/)
diff --git a/practice/distributed-tracing.md b/practice/distributed-tracing.md
index 5a2dd7ed4..c1b322f7e 100644
--- a/practice/distributed-tracing.md
+++ b/practice/distributed-tracing.md
@@ -9,4 +9,4 @@ CNCF 提出了分布式追踪的标准 [OpenTracing](https://opentracing.io/),
## 参考
- [OpenTracing 官方网站](https://opentracing.io/)
-- [Jaeger 官方网站](https://www.jaegertracing.io/)
\ No newline at end of file
+- [Jaeger 官方网站](https://www.jaegertracing.io/)
diff --git a/practice/dns-installation.md b/practice/dns-installation.md
index d6d747ef6..91143ba11 100644
--- a/practice/dns-installation.md
+++ b/practice/dns-installation.md
@@ -1,3 +1,3 @@
# 安装配置 DNS
-DNS 组件作为 Kubernetes 中服务注册和发现的一个必要组件,起着举足轻重的作用,是我们在安装好 Kubernetes 集群后部署的第一个容器化应用。
\ No newline at end of file
+DNS 组件作为 Kubernetes 中服务注册和发现的一个必要组件,起着举足轻重的作用,是我们在安装好 Kubernetes 集群后部署的第一个容器化应用。
diff --git a/practice/edge-node-configuration.md b/practice/edge-node-configuration.md
index 279b4ef58..8d66014e1 100644
--- a/practice/edge-node-configuration.md
+++ b/practice/edge-node-configuration.md
@@ -243,4 +243,4 @@ traefik-ingress-lb 3 3 3 3 3 edge
- http://www.keepalived.org/
- [keepalived工作原理与配置说明](http://outofmemory.cn/wiki/keepalived-configuration)
- [LVS简介及使用](http://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html)
-- [基于keepalived 实现VIP转移,lvs,nginx的高可用](http://limian.blog.51cto.com/7542175/1301776)
\ No newline at end of file
+- [基于keepalived 实现VIP转移,lvs,nginx的高可用](http://limian.blog.51cto.com/7542175/1301776)
diff --git a/practice/federation.md b/practice/federation.md
index 02368c877..24843fb4e 100644
--- a/practice/federation.md
+++ b/practice/federation.md
@@ -82,4 +82,4 @@ Kubernetes 集群数量的选择可能是一个相对静态的选择,只是偶
原文地址:https://kubernetes.io/docs/concepts/cluster-administration/federation/
-译文地址:https://k8smeetup.github.io/docs/concepts/cluster-administration/federation/
\ No newline at end of file
+译文地址:https://k8smeetup.github.io/docs/concepts/cluster-administration/federation/
diff --git a/practice/glusterd-2.0.md b/practice/glusterd-2.0.md
index 310d7dcba..86c631c20 100644
--- a/practice/glusterd-2.0.md
+++ b/practice/glusterd-2.0.md
@@ -17,4 +17,4 @@ GlusterD-2.0包含一组用于卷和成员操作的ReSTful界面,允许将DevO
- [新品Gluster 4.0:更强容器集成能力](https://mp.weixin.qq.com/s/eHAz6keGC7CC1yVYpzBVnA)
- [Gluster 官网](https://www.gluster.org/)
-- [GlusterD-2.0 Github开源地址](https://github.com/gluster/glusterd2)
\ No newline at end of file
+- [GlusterD-2.0 Github开源地址](https://github.com/gluster/glusterd2)
diff --git a/practice/glusterfs.md b/practice/glusterfs.md
index 62d8d5611..317980e96 100644
--- a/practice/glusterfs.md
+++ b/practice/glusterfs.md
@@ -1,3 +1,3 @@
# GlusterFS
-GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。
\ No newline at end of file
+GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBand RDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。GlusterFS基于可堆叠的用户空间设计,可为各种不同的数据负载提供优异的性能。
diff --git a/practice/heapster.md b/practice/heapster.md
index 16d864b17..99e828007 100644
--- a/practice/heapster.md
+++ b/practice/heapster.md
@@ -8,4 +8,4 @@ Heapster可以收集Node节点上的cAdvisor数据,还可以按照kubernetes
## 参考
-- [metrics-server - github.com](https://github.com/kubernetes-incubator/metrics-server)
\ No newline at end of file
+- [metrics-server - github.com](https://github.com/kubernetes-incubator/metrics-server)
diff --git a/practice/install-kubernetes-on-centos.md b/practice/install-kubernetes-on-centos.md
index 62811969b..45a9410d7 100644
--- a/practice/install-kubernetes-on-centos.md
+++ b/practice/install-kubernetes-on-centos.md
@@ -95,4 +95,4 @@
2. 部署过程中需要有很多证书的操作,请大家耐心操作,不明白的操作可以参考本书中的其他章节的解释。
3. 该部署操作仅是搭建成了一个可用 kubernetes 集群,而很多地方还需要进行优化,heapster 插件、EFK 插件不一定会用于真实的生产环境中,但是通过部署这些插件,可以让大家了解到如何部署应用到集群上。
-**注:本安装文档参考了 [opsnull 跟我一步步部署 kubernetes 集群](https://github.com/opsnull/follow-me-install-kubernetes-cluster/)**
\ No newline at end of file
+**注:本安装文档参考了 [opsnull 跟我一步步部署 kubernetes 集群](https://github.com/opsnull/follow-me-install-kubernetes-cluster/)**
diff --git a/practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.md b/practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.md
index a7fdc2874..585348bde 100644
--- a/practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.md
+++ b/practice/install-kubernetes-on-ubuntu-server-16.04-with-kubeadm.md
@@ -310,4 +310,4 @@ taint "node-role.kubernetes.io/master:" not found
## 参考
-- [Overview of kubeadm](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/)
\ No newline at end of file
+- [Overview of kubeadm](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/)
diff --git a/practice/kubectl-installation.md b/practice/kubectl-installation.md
index 9a99183f0..84a6a11fb 100644
--- a/practice/kubectl-installation.md
+++ b/practice/kubectl-installation.md
@@ -43,4 +43,4 @@ kubectl config use-context kubernetes
## 更多资料
- [kubectl命令概览](../guide/using-kubectl.md)
-- [kubectl命令技巧大全](../guide/kubectl-cheatsheet.md)
\ No newline at end of file
+- [kubectl命令技巧大全](../guide/kubectl-cheatsheet.md)
diff --git a/practice/manage-compute-resources-container.md b/practice/manage-compute-resources-container.md
index 02260363f..45d2d9d80 100644
--- a/practice/manage-compute-resources-container.md
+++ b/practice/manage-compute-resources-container.md
@@ -265,4 +265,4 @@ spec:
Kubernetes 通过支持通过多级别的 [服务质量](http://issue.k8s.io/168) 来支持资源的过度使用。
-在 kubernetes 1.5 版本中,一个 CPU 单位在不同的云提供商和同一云提供商的不同机器类型中的意味都不同。例如,在 AWS 上,节点的容量报告为 [ECU](http://aws.amazon.com/ec2/faqs/),而在 GCE 中报告为逻辑内核。我们计划修改 cpu 资源的定义,以便在不同的提供商和平台之间保持一致。
\ No newline at end of file
+在 kubernetes 1.5 版本中,一个 CPU 单位在不同的云提供商和同一云提供商的不同机器类型中的意味都不同。例如,在 AWS 上,节点的容量报告为 [ECU](http://aws.amazon.com/ec2/faqs/),而在 GCE 中报告为逻辑内核。我们计划修改 cpu 资源的定义,以便在不同的提供商和平台之间保持一致。
diff --git a/practice/manually-upgrade.md b/practice/manually-upgrade.md
index 62d806146..59d7c6383 100644
--- a/practice/manually-upgrade.md
+++ b/practice/manually-upgrade.md
@@ -123,4 +123,4 @@ NAME STATUS ROLES AGE VERSION
- [How to Upgrade a Kubernetes Cluster With No Downtime](https://medium.com/retailmenot-engineering/zero-downtime-kubernetes-cluster-upgrades-aab4cac943d2)
- [manual upgrade/downgrade testing for Kubernetes 1.6 - google group](https://groups.google.com/forum/#!topic/kubernetes-dev/jDbGKAsfo4Q)
- [Notes/Instructions for Manual Upgrade Testing1.5 -> 1.6](https://docs.google.com/document/d/1DtQFhxmKSZJJ_yv8ttweqotburHHZWxaCYnFbjLDA5g/edit)
-- [Upgrading Kubernetes in Kubespray](https://github.com/kubernetes-incubator/kubespray/blob/master/docs/upgrades.md)
\ No newline at end of file
+- [Upgrading Kubernetes in Kubespray](https://github.com/kubernetes-incubator/kubespray/blob/master/docs/upgrades.md)
diff --git a/practice/monitor.md b/practice/monitor.md
index 19c710a57..186aee2a6 100644
--- a/practice/monitor.md
+++ b/practice/monitor.md
@@ -235,4 +235,4 @@ spec:
## 参考
-- [Monitoring in the Kubernetes Era](https://www.datadoghq.com/blog/monitoring-kubernetes-era/)
\ No newline at end of file
+- [Monitoring in the Kubernetes Era](https://www.datadoghq.com/blog/monitoring-kubernetes-era/)
diff --git a/practice/monitoring.md b/practice/monitoring.md
index d23312b2a..72e8053a5 100644
--- a/practice/monitoring.md
+++ b/practice/monitoring.md
@@ -8,4 +8,4 @@ Kubernetes 使得管理复杂环境变得更简单,但是对 kubernetes 本身
[Prometheus](https://prometheus.io) 是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,再到 2015 年 GitHub 上开源以来,已经吸引了 9k+ 关注,以及很多大公司的使用;2016 年 Prometheus 成为继 k8s 后,第二名 CNCF\([Cloud Native Computing Foundation](https://cncf.io/)\) 成员。
-作为新一代开源解决方案,很多理念与 Google SRE 运维之道不谋而合。
\ No newline at end of file
+作为新一代开源解决方案,很多理念与 Google SRE 运维之道不谋而合。
diff --git a/practice/network-and-cluster-perfermance-test.md b/practice/network-and-cluster-perfermance-test.md
index f715f2aa5..53d6cecf9 100644
--- a/practice/network-and-cluster-perfermance-test.md
+++ b/practice/network-and-cluster-perfermance-test.md
@@ -398,4 +398,4 @@ Locust模拟10万用户,每秒增长100个。
- [CoreOS是如何将Kubernetes的性能提高10倍的](http://dockone.io/article/1050)
- [运用Kubernetes进行分布式负载测试](http://www.csdn.net/article/2015-07-07/2825155)
- [Kubemark User Guide](https://github.com/kubernetes/community/blob/master/contributors/devel/kubemark-guide.md)
-- [Flannel host-gw architecture](https://docs.openshift.com/container-platform/3.4/architecture/additional_concepts/flannel.html)
\ No newline at end of file
+- [Flannel host-gw architecture](https://docs.openshift.com/container-platform/3.4/architecture/additional_concepts/flannel.html)
diff --git a/practice/nginx-ingress-installation.md b/practice/nginx-ingress-installation.md
index 956301517..3d43a1fc3 100644
--- a/practice/nginx-ingress-installation.md
+++ b/practice/nginx-ingress-installation.md
@@ -175,4 +175,4 @@ helm delete --purge nginx-ingress
- [Ingress-nginx github](https://github.com/kubernetes/ingress-nginx)
- [Nginx chart configuration](https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress)
-- [使用Helm管理kubernetes应用](helm.md)
\ No newline at end of file
+- [使用Helm管理kubernetes应用](helm.md)
diff --git a/practice/opentracing.md b/practice/opentracing.md
index 976af0f07..cc17f5fa7 100644
--- a/practice/opentracing.md
+++ b/practice/opentracing.md
@@ -6,7 +6,7 @@
Jaeger 是遵循 OpenTracing 的一种实现。
-![Jaeger UI](https://ws4.sinaimg.cn/large/006tNbRwly1fwjg48fh7xj31kw0wedrg.jpg)
+![Jaeger UI](../images/006tNbRwly1fwjg48fh7xj31kw0wedrg.jpg)
关于 OpenTracing 的详细约定请参考:
@@ -25,7 +25,7 @@ Trace 通常指一次完整的调用链。如上文中的 Jaeger UI 截图就是
每个 trace 都由一系列 Span 组成,一个 span 可以理解为两个微服务之间的调用,如同 Chrome 检查器中查看网络访问瀑布一样。
-![Chrome Inspector](https://ws2.sinaimg.cn/large/006tNbRwly1fwjkfbvfluj30y70hf0y9.jpg)
+![Chrome Inspector](../images/006tNbRwly1fwjkfbvfluj30y70hf0y9.jpg)
根据 OpenTracing 的规格约定,每个 Span 都要包含以下状态:
@@ -107,4 +107,4 @@ Trace 通常指一次完整的调用链。如上文中的 Jaeger UI 截图就是
- [OpenTracing 官方网站](https://opentracing.io/)
- [OpenTracing 语义规范(Semantic Specification)](https://github.com/opentracing/specification/blob/master/specification.md)
- [OpenTracing 语义约定(Semantic Conventions)](https://github.com/opentracing/specification/blob/master/semantic_conventions.md)
-- [开放分布式追踪(OpenTracing)入门与 Jaeger 实现](https://yq.aliyun.com/articles/514488#19)
\ No newline at end of file
+- [开放分布式追踪(OpenTracing)入门与 Jaeger 实现](https://yq.aliyun.com/articles/514488#19)
diff --git a/practice/prometheus.md b/practice/prometheus.md
index 22ad3431d..a69fee302 100644
--- a/practice/prometheus.md
+++ b/practice/prometheus.md
@@ -25,7 +25,7 @@
一图胜千言,先来张官方的架构图:
-![Prometheus 架构图](https://ws3.sinaimg.cn/large/006tNbRwly1fwcgsn11fej311j0mjadw.jpg)
+![Prometheus 架构图](../images/006tNbRwly1fwcgsn11fej311j0mjadw.jpg)
从这个架构图,也可以看出 Prometheus 的主要模块包含:Server、Exporters、Pushgateway、PromQL、Alertmanager、WebUI 等。
@@ -45,4 +45,4 @@
## 参考
- [Prometheus practice - github.com](https://github.com/songjiayang/prometheus_practice/)
-- [Prometheus overview - prometheus.io](https://prometheus.io/docs/introduction/overview/)
\ No newline at end of file
+- [Prometheus overview - prometheus.io](https://prometheus.io/docs/introduction/overview/)
diff --git a/practice/promql.md b/practice/promql.md
index 7dbe3135c..a00d8b532 100644
--- a/practice/promql.md
+++ b/practice/promql.md
@@ -18,7 +18,7 @@ Prometheus 查询语言简称 PromQL,其中包含以下四类数据类型:
可以通过 Prometheus web 页面查询。
-![Prometheus 的查询页面](https://ws2.sinaimg.cn/large/006tNbRwly1fwcl7v28rhj30xl0onadv.jpg)
+![Prometheus 的查询页面](../images/006tNbRwly1fwcl7v28rhj30xl0onadv.jpg)
还可以使用 HTTP API 直接请求查询,例如你使用 [kubernetes-vagrant-centos-cluster](https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster) 部署了 [Istio](https://istio.io/zh),会默认安装 Prometheus,你可以在浏览器中请求 ,将会看到如下格式的 json 返回值。
@@ -98,4 +98,4 @@ Prometheus 查询语言简称 PromQL,其中包含以下四类数据类型:
## 参考
- [QUERYING PROMETHEUS - prometheus.io](https://prometheus.io/docs/prometheus/latest/querying/basics/)
-- [Setting up a distributed Kubernetes cluster along with Istio service mesh locally with Vagrant and VirtualBox - github.com](https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster)
\ No newline at end of file
+- [Setting up a distributed Kubernetes cluster along with Istio service mesh locally with Vagrant and VirtualBox - github.com](https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster)
diff --git a/practice/rbac-support-in-kubernetes.md b/practice/rbac-support-in-kubernetes.md
index 7700edf97..785f43f9a 100644
--- a/practice/rbac-support-in-kubernetes.md
+++ b/practice/rbac-support-in-kubernetes.md
@@ -117,4 +117,4 @@ $ curl -ik \
[Google Cloud Next talks 2](https://www.youtube.com/watch?v=18P7cFc6nTU#t=41m06s )
-[在Kubernetes Pod中使用Service Account访问API Server](http://tonybai.com/2017/03/03/access-api-server-from-a-pod-through-serviceaccount/)
\ No newline at end of file
+[在Kubernetes Pod中使用Service Account访问API Server](http://tonybai.com/2017/03/03/access-api-server-from-a-pod-through-serviceaccount/)
diff --git a/practice/rbd-provisioner.md b/practice/rbd-provisioner.md
index f6e5099b6..ad1dd203a 100644
--- a/practice/rbd-provisioner.md
+++ b/practice/rbd-provisioner.md
@@ -264,4 +264,4 @@ ceph服务器上的rbd image也已清除,自动回收成功;
## 参考
-- [RBD Volume Provisioner for Kubernetes 1.5+](https://github.com/kubernetes-incubator/external-storage/tree/master/ceph/rbd)
\ No newline at end of file
+- [RBD Volume Provisioner for Kubernetes 1.5+](https://github.com/kubernetes-incubator/external-storage/tree/master/ceph/rbd)
diff --git a/practice/rook.md b/practice/rook.md
index a75ce0674..5af500b7f 100644
--- a/practice/rook.md
+++ b/practice/rook.md
@@ -264,4 +264,4 @@ helm delete daemonset rook-agent
## 参考
- [Operator Helm Chart](https://rook.io/docs/rook/master/helm-operator.html)
-- [Creating Rook Clusters](https://rook.io/docs/rook/v0.6/cluster-crd.html)
\ No newline at end of file
+- [Creating Rook Clusters](https://rook.io/docs/rook/v0.6/cluster-crd.html)
diff --git a/practice/service-rolling-update.md b/practice/service-rolling-update.md
index 9d5a20c33..f7e543bd4 100644
--- a/practice/service-rolling-update.md
+++ b/practice/service-rolling-update.md
@@ -236,4 +236,4 @@ replicationcontroller "zeppelin-controller" rolling updated
- [Rolling update机制解析](http://dockone.io/article/328)
- [Running a Stateless Application Using a Deployment](https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/)
-- [使用kubernetes的deployment进行RollingUpdate](https://segmentfault.com/a/1190000008232770)
\ No newline at end of file
+- [使用kubernetes的deployment进行RollingUpdate](https://segmentfault.com/a/1190000008232770)
diff --git a/practice/services-management-tool.md b/practice/services-management-tool.md
index ac0939754..596ce1096 100644
--- a/practice/services-management-tool.md
+++ b/practice/services-management-tool.md
@@ -2,4 +2,4 @@
Kubernetes虽然提供了多种容器编排对象,例如Deployment、StatefulSet、DeamonSet、Job等,还有多种基础资源封装例如ConfigMap、Secret、Serivce等,但是一个应用往往有多个服务,有的可能还要依赖持久化存储,当这些服务之间直接互相依赖,需要有一定的组合的情况下,使用YAML文件的方式配置应用往往十分繁琐还容易出错,这时候就需要服务编排工具。
-服务编排管理工具就是构建在kubernetes的基础[object](../concepts/objects.md)之上,统筹各个服务之间的关系和依赖的。目前常用到的工具是 [Helm](https://github.com/kubernetes/helm)。
\ No newline at end of file
+服务编排管理工具就是构建在kubernetes的基础[object](../concepts/objects.md)之上,统筹各个服务之间的关系和依赖的。目前常用到的工具是 [Helm](https://github.com/kubernetes/helm)。
diff --git a/practice/traefik-ingress-installation.md b/practice/traefik-ingress-installation.md
index 38ed7e54c..7ce9956f3 100644
--- a/practice/traefik-ingress-installation.md
+++ b/practice/traefik-ingress-installation.md
@@ -244,4 +244,4 @@ Traefik会解析http请求header里的Host参数将流量转发给Ingress配置
## 参考
-- [Traefik简介](http://www.tuicool.com/articles/ZnuEfay)
\ No newline at end of file
+- [Traefik简介](http://www.tuicool.com/articles/ZnuEfay)
diff --git a/practice/update-and-upgrade.md b/practice/update-and-upgrade.md
index a62f8ef3a..8627ba324 100644
--- a/practice/update-and-upgrade.md
+++ b/practice/update-and-upgrade.md
@@ -1,3 +1,3 @@
# 更新与升级
-Kubernetes到目前为止基本保持三个月发行一个新版本的节奏,更新节奏可以说非常快,这一部分将主要跟踪kubernetes及其相关组件的更新与升级。
\ No newline at end of file
+Kubernetes到目前为止基本保持三个月发行一个新版本的节奏,更新节奏可以说非常快,这一部分将主要跟踪kubernetes及其相关组件的更新与升级。
diff --git a/practice/using-ceph-for-persistent-storage.md b/practice/using-ceph-for-persistent-storage.md
index 7bd50caaa..c8002e5b4 100644
--- a/practice/using-ceph-for-persistent-storage.md
+++ b/practice/using-ceph-for-persistent-storage.md
@@ -407,4 +407,4 @@ func (util *RBDUtil) CreateImage(p *rbdVolumeProvisioner) (r *v1.RBDVolumeSource
- https://kubernetes.io/docs/concepts/storage/persistent-volumes/#ceph-rbd
-- [Error creating rbd image: executable file not found in $PATH#38923](https://github.com/kubernetes/kubernetes/issues/38923)
\ No newline at end of file
+- [Error creating rbd image: executable file not found in $PATH#38923](https://github.com/kubernetes/kubernetes/issues/38923)
diff --git a/practice/using-heapster-to-get-object-metrics.md b/practice/using-heapster-to-get-object-metrics.md
index 3c85471fc..d3af0c941 100644
--- a/practice/using-heapster-to-get-object-metrics.md
+++ b/practice/using-heapster-to-get-object-metrics.md
@@ -141,4 +141,4 @@ $ date --rfc-3339="seconds"
- [kubernetes metrics](https://github.com/kubernetes/metrics)
- [Heapster metric model](https://github.com/kubernetes/heapster/blob/master/docs/model.md)
-- [Heapster storage schema](https://github.com/kubernetes/heapster/blob/master/docs/storage-schema.md)
\ No newline at end of file
+- [Heapster storage schema](https://github.com/kubernetes/heapster/blob/master/docs/storage-schema.md)
diff --git a/practice/vistio-visualize-your-istio-mesh.md b/practice/vistio-visualize-your-istio-mesh.md
index 0ce0e62ca..1e07ebef7 100644
--- a/practice/vistio-visualize-your-istio-mesh.md
+++ b/practice/vistio-visualize-your-istio-mesh.md
@@ -8,7 +8,7 @@ Vizceral有两个可视化级别,全局可视化和集群级别可视化。在
在集群级别(如下所示),您可以可视化内部网格的流量。通过设置警告和错误级别警报,当应用程序出现问题时可以被快速检测出来。
-![Vistio的集群级别可视化](https://ws1.sinaimg.cn/large/00704eQkgy1fshft5oxlwj318g0pe0wp.jpg)
+![Vistio的集群级别可视化](../images/00704eQkgy1fshft5oxlwj318g0pe0wp.jpg)
### 在Istio服务网格中安装Vistio
@@ -30,7 +30,7 @@ Vizceral有两个可视化级别,全局可视化和集群级别可视化。在
如果您还尚未部署服务网格,可以按照此[Istio Bookinfo Demo](https://istio.io/docs/guides/bookinfo/)中的说明部署Istio及其示例应用程序。您需要能够在应用程序之间生成流量。要测试指标是否从Mixer正确发送到Prometheus,您可以运行以下Prometheus查询`istio_request_count`,应该会看到多个条目。
-![Prometheus查询](https://ws1.sinaimg.cn/large/00704eQkgy1fshg0vw25ij318g0jzqjq.jpg)
+![Prometheus查询](../images/00704eQkgy1fshg0vw25ij318g0jzqjq.jpg)
### 部署Vistio
@@ -78,7 +78,7 @@ kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-api -
vistio-web调用vistio-api来渲染服务网格。访问您应该会看到类似下列的输出。
-![vistio-api的期望输出](https://ws1.sinaimg.cn/large/00704eQkgy1fshi61t04oj310q17c0y1.jpg)
+![vistio-api的期望输出](../images/00704eQkgy1fshi61t04oj310q17c0y1.jpg)
**暴露Vistio**
@@ -92,7 +92,7 @@ kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -
如果一切都已经启动并准备就绪,您就可以访问Vistio UI,开始探索服务网格网络,访问[http://localhost:8080](http://localhost:8080/)您将会看到类似下图的输出。
-![Vistio主页面](https://ws1.sinaimg.cn/large/00704eQkgy1fshi98duzgj318g0l2406.jpg)
+![Vistio主页面](../images/00704eQkgy1fshi98duzgj318g0l2406.jpg)
### 探索
@@ -100,11 +100,11 @@ kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -
如果您点击istio-mesh气泡,您将能够查看您的网状网络。
-![istio mesh的网络流量](https://ws1.sinaimg.cn/large/00704eQkgy1fshibdwcj3j318g0p8th1.jpg)
+![istio mesh的网络流量](../images/00704eQkgy1fshibdwcj3j318g0p8th1.jpg)
在您的Istio网格中,您可以使用许多可视化工具来帮助您查明故障的应用程序。
-![查明网络问题](https://ws1.sinaimg.cn/large/00704eQkgy1fshicc7or1j318g0p8ahr.jpg)
+![查明网络问题](../images/00704eQkgy1fshicc7or1j318g0p8ahr.jpg)
使用屏幕右上方的过滤器可以快速过滤出错误率较高的应用程序。通过高级配置,当错误率超过特定值时,也可以触发警报。警报将显示给定应用程序的当前错误率趋势。
@@ -112,7 +112,7 @@ kubectl -n default port-forward $(kubectl -n default get pod -l app=vistio-web -
访问,如果您从vistio-api中看到以下输出,表示某些功能无法正常工作。正确的输出显示在教程上面。
-![vistio api的不正确输出](https://ws1.sinaimg.cn/large/00704eQkgy1fshie7wxkyj30ks0f4myd.jpg)
+![vistio api的不正确输出](../images/00704eQkgy1fshie7wxkyj30ks0f4myd.jpg)
**1.** 检查vistio-api日志中是否有错误——在大多数情况下,vistio-api将记录与Prometheus通信时遇到的任何问题。
@@ -134,4 +134,4 @@ sum(rate(istio_request_count[1m])) by (source_service,destination_service,respon
## 参考
- https://github.com/nmnellis/vistio
-- [Vistio—使用Netflix的Vizceral可视化Istio service mesh](https://servicemesher.github.io/blog/vistio-visualize-your-istio-mesh-using-netflixs-vizceral/)
\ No newline at end of file
+- [Vistio—使用Netflix的Vizceral可视化Istio service mesh](https://servicemesher.github.io/blog/vistio-visualize-your-istio-mesh-using-netflixs-vizceral/)
diff --git a/usecases/ai.md b/usecases/ai.md
index 30b9017a2..8917909f9 100644
--- a/usecases/ai.md
+++ b/usecases/ai.md
@@ -4,4 +4,4 @@ Kubernetes 在人工智能领域的应用。
## TBD
-- [kubeflow](https://github.com/kubeflow/kubeflow) - Kubernetes 机器学习工具箱
\ No newline at end of file
+- [kubeflow](https://github.com/kubeflow/kubeflow) - Kubernetes 机器学习工具箱
diff --git a/usecases/big-data.md b/usecases/big-data.md
index c96909261..5c4d8731c 100644
--- a/usecases/big-data.md
+++ b/usecases/big-data.md
@@ -36,4 +36,4 @@ Spark on kubernetes,使用kubernetes作为调度引擎,spark的任务直接
![在kubernetes上使用多种调度方式](../images/spark-on-kubernetes-with-different-schedulers.jpg)
-毫无疑问,使用kubernetes原生调度的spark任务才是最节省资源的。
\ No newline at end of file
+毫无疑问,使用kubernetes原生调度的spark任务才是最节省资源的。
diff --git a/usecases/comparing-service-mesh-technologies.md b/usecases/comparing-service-mesh-technologies.md
index eb4b18af2..c09a47286 100644
--- a/usecases/comparing-service-mesh-technologies.md
+++ b/usecases/comparing-service-mesh-technologies.md
@@ -24,6 +24,6 @@
下图是一个使用**客户端库**将应用与服务治理紧耦合的示意图。
-![客户端库](https://ws4.sinaimg.cn/large/006tNbRwly1fubnx0q9bpj30vq0pq465.jpg)
+![客户端库](../images/006tNbRwly1fubnx0q9bpj30vq0pq465.jpg)
-从图中我们可以看到,应用程序代码与客户端度库紧耦合在一起,不同的服务团队需要一起协调超时和重试机制等。容器编排更适用于分布式应用,API Gateway通常只需要部署在系统边缘即可,不需要在每个应用中都部署,而Service Mesh却需要在每个服务或者说节点中部署。
\ No newline at end of file
+从图中我们可以看到,应用程序代码与客户端度库紧耦合在一起,不同的服务团队需要一起协调超时和重试机制等。容器编排更适用于分布式应用,API Gateway通常只需要部署在系统边缘即可,不需要在每个应用中都部署,而Service Mesh却需要在每个服务或者说节点中部署。
diff --git a/usecases/conduit-installation.md b/usecases/conduit-installation.md
index cbc0863b4..1d78795c6 100644
--- a/usecases/conduit-installation.md
+++ b/usecases/conduit-installation.md
@@ -208,4 +208,4 @@ curl https://raw.githubusercontent.com/rootsongjc/kubernetes-handbook/master/man
## 参考
-- [Getting started - conduit.io](https://conduit.io/getting-started/)
\ No newline at end of file
+- [Getting started - conduit.io](https://conduit.io/getting-started/)
diff --git a/usecases/conduit-overview.md b/usecases/conduit-overview.md
index 92c0756f1..b4a828764 100644
--- a/usecases/conduit-overview.md
+++ b/usecases/conduit-overview.md
@@ -38,4 +38,4 @@ Conduit设计用于无缝地融入现有的Kubernetes系统。该设计有几个
## 扩展Conduit的行为
-Conduit控制平面还为构建自定义功能提供了一个便捷的入口。Conduit最初发布时并不支持这一点,在不远的将来,通过编写gRPC插件来作为控制平面的一部分运行,将能扩展Conduit的功能,而无需重新编译Conduit。
\ No newline at end of file
+Conduit控制平面还为构建自定义功能提供了一个便捷的入口。Conduit最初发布时并不支持这一点,在不远的将来,通过编写gRPC插件来作为控制平面的一部分运行,将能扩展Conduit的功能,而无需重新编译Conduit。
diff --git a/usecases/conduit.md b/usecases/conduit.md
index 810bff449..0914d0fc8 100644
--- a/usecases/conduit.md
+++ b/usecases/conduit.md
@@ -15,4 +15,4 @@ Conduit使用Rust和Go语言开发,GitHub地址https://github.com/runconduit/c
- Conduit GitHub:https://github.com/runconduit/conduit
- 关于Conduit的更多资源请参考官方网站:https://conduit.io/
- Conduit的官方文档中文版:https://github.com/doczhcn/conduit
-- 关于Service Mesh的更多内容请访问ServiceMesher:http://www.servicemesher.com
\ No newline at end of file
+- 关于Service Mesh的更多内容请访问ServiceMesher:http://www.servicemesher.com
diff --git a/usecases/dubbo-on-x-protocol-in-sofa-mesh.md b/usecases/dubbo-on-x-protocol-in-sofa-mesh.md
index 1abc67a61..3ad7696f8 100644
--- a/usecases/dubbo-on-x-protocol-in-sofa-mesh.md
+++ b/usecases/dubbo-on-x-protocol-in-sofa-mesh.md
@@ -289,4 +289,4 @@ SOFAMesh Github 地址:https://github.com/alipay/sofa-mesh
- [蚂蚁金服开源的 SOFAMesh 的通用协议扩展解析 - servicemesher.com](http://www.servicemesher.com/blog/ant-financial-sofamesh-common-protocol-extension/)
- [Dubbo quick start - dubbo.incubator.apache.org](https://dubbo.incubator.apache.org/en-us/docs/user/quick-start.html)
-- 关于SOFAMesh的更多信息请访问 https://www.sofastack.tech
\ No newline at end of file
+- 关于SOFAMesh的更多信息请访问 https://www.sofastack.tech
diff --git a/usecases/edge-computing.md b/usecases/edge-computing.md
index 5ae6db332..aa7ccbc08 100644
--- a/usecases/edge-computing.md
+++ b/usecases/edge-computing.md
@@ -6,4 +6,4 @@ TBD
[The Birth of an Edge Orchestrator – Cloudify Meets Edge Computing](http://cloudify.co/2017/07/26/birth-of-edge-orchestrator-cloudify.html)
-[K8s(Kubernetes) and SDN for Multi-access Edge Computing deployment ](http://events.linuxfoundation.org/sites/events/files/slides/HS-OSSjapan-final.pdf)
\ No newline at end of file
+[K8s(Kubernetes) and SDN for Multi-access Edge Computing deployment ](http://events.linuxfoundation.org/sites/events/files/slides/HS-OSSjapan-final.pdf)
diff --git a/usecases/envoy-front-proxy.md b/usecases/envoy-front-proxy.md
index cc6f45779..c44b0a0ea 100644
--- a/usecases/envoy-front-proxy.md
+++ b/usecases/envoy-front-proxy.md
@@ -298,4 +298,4 @@ Envoy 提供了 API 管理端点,可以对 Envoy 进行动态配置,参考 [
## 参考
-- [Front proxy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/front_proxy)
\ No newline at end of file
+- [Front proxy](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/front_proxy)
diff --git a/usecases/envoy-mesh-in-kubernetes-tutorial.md b/usecases/envoy-mesh-in-kubernetes-tutorial.md
index 741e23e17..77f38d636 100644
--- a/usecases/envoy-mesh-in-kubernetes-tutorial.md
+++ b/usecases/envoy-mesh-in-kubernetes-tutorial.md
@@ -308,4 +308,4 @@ usersvc-55b6857d44-s2znk 1/1 Running 0 9m 172.33.10.2
- [Part 2: Deploying Envoy with a Python Flask webapp and Kubernetes](https://www.datawire.io/envoyproxy/envoy-flask-kubernetes/)
- [envoy-steps](https://github.com/datawire/envoy-steps)
- [kubernetes-vagrant-centos-cluster](https://github.com/rootsongjc/kubernetes-vagrant-centos-cluster)
-- [envoy-tutorial](https://github.com/rootsongjc/envoy-tutorial)
\ No newline at end of file
+- [envoy-tutorial](https://github.com/rootsongjc/envoy-tutorial)
diff --git a/usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.md b/usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.md
index 8f17d21f1..b3303a79b 100644
--- a/usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.md
+++ b/usecases/envoy-sidecar-routing-of-istio-service-mesh-deep-dive.md
@@ -6,11 +6,11 @@
下面是 Istio 官方提供的 bookinfo 的请求流程图,假设 bookinfo 应用的所有服务中没有配置 DestinationRule。
-![Bookinfo 示例](https://ws1.sinaimg.cn/large/006tNbRwgy1fvlwjd3302j31bo0ro0x5.jpg)
+![Bookinfo 示例](../images/006tNbRwgy1fvlwjd3302j31bo0ro0x5.jpg)
下面是 Istio 自身组件与 Bookinfo 示例的连接关系图,我们可以看到所有的 HTTP 连接都在 9080 端口监听。
-![Bookinfo 示例与 Istio 组件连接关系图](https://ws4.sinaimg.cn/large/006tNbRwly1fyitp0jsghj31o70u0x6p.jpg)
+![Bookinfo 示例与 Istio 组件连接关系图](../images/006tNbRwly1fyitp0jsghj31o70u0x6p.jpg)
可以在 [Google Drive](https://drive.google.com/open?id=19ed3_tkjf6RgGboxllMdt_Ytd5_cocib) 上下载原图。
@@ -48,7 +48,7 @@
下图展示的是 `productpage` 服务请求访问 `http://reviews.default.svc.cluster.local:9080/`,当流量进入 `reviews` 服务内部时,`reviews` 服务内部的 Envoy Sidecar 是如何做流量拦截和路由转发的。可以在 [Google Drive](https://drive.google.com/file/d/1n-h235tm8DnL_RqxTTA95rgGtrLkBsyr/view?usp=sharing) 上下载原图。
-![Envoy sidecar 流量劫持与路由转发示意图](https://ws2.sinaimg.cn/large/006tNbRwly1fyl39icd27j31c70u04gc.jpg)
+![Envoy sidecar 流量劫持与路由转发示意图](../images/006tNbRwly1fyl39icd27j31c70u04gc.jpg)
第一步开始时,`productpage` Pod 中的 Envoy sidecar 已经通过 EDS 选择出了要请求的 `reviews` 服务的一个 Pod,知晓了其 IP 地址,发送 TCP 连接请求。
diff --git a/usecases/envoy-terminology.md b/usecases/envoy-terminology.md
index eecbaa5df..b52f66ce6 100644
--- a/usecases/envoy-terminology.md
+++ b/usecases/envoy-terminology.md
@@ -150,4 +150,4 @@ Cluster 的配置中至少包含以下信息:
- [Terminology - www.envoyproxy.io](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/terminology)
- [Part 1: Getting started with Envoy Proxy for microservices resilience](https://www.datawire.io/envoyproxy/getting-started-envoyproxy-microservices-resilience/)
-- [Envoy作为前端代理](envoy-front-proxy.md)
\ No newline at end of file
+- [Envoy作为前端代理](envoy-front-proxy.md)
diff --git a/usecases/envoy.md b/usecases/envoy.md
index 615813c23..03f4365a8 100644
--- a/usecases/envoy.md
+++ b/usecases/envoy.md
@@ -40,4 +40,4 @@ Matt Klein 是在他的文章中指出 sidecar 模式的 proxy 将取代另外
- [Introduction to modern network load balancing and proxying](https://blog.envoyproxy.io/introduction-to-modern-network-load-balancing-and-proxying-a57f6ff80236)
- 更多信息请参考 [Envoy 官网](https://www.envoyproxy.io/)
-- [Envoy官方文档中文版](http://www.servicemesher.com/envoy/)
\ No newline at end of file
+- [Envoy官方文档中文版](http://www.servicemesher.com/envoy/)
diff --git a/usecases/faas.md b/usecases/faas.md
index 224bc457c..574b47eb6 100644
--- a/usecases/faas.md
+++ b/usecases/faas.md
@@ -16,4 +16,4 @@ FaaS(Functions as a Service)函数即服务,FaaS是无服务器计算的
- [OpenFaaS](https://github.com/openfaas/faas) - OpenFaaS - Serverless Functions Made Simple for Docker & Kubernetes [https://blog.alexellis.io/introducing-functions-as-a-service/](https://blog.alexellis.io/introducing-functions-as-a-service/)
- [OpenWhisk](http://openwhisk.incubator.apache.org/) - Apache OpenWhisk (Incubating) is a serverless, open source cloud platform that executes functions in response to events at any scale.
-关于整个Cloud Native开源生态,请参考[awesome-cloud-native](https://jimmysong.io/awesome-cloud-native)。
\ No newline at end of file
+关于整个Cloud Native开源生态,请参考[awesome-cloud-native](https://jimmysong.io/awesome-cloud-native)。
diff --git a/usecases/index.md b/usecases/index.md
index f685d6c34..274475d2e 100644
--- a/usecases/index.md
+++ b/usecases/index.md
@@ -1,3 +1,3 @@
# 领域应用
-Kubernetes 和云原生应用在各个领域中的实践。
\ No newline at end of file
+Kubernetes 和云原生应用在各个领域中的实践。
diff --git a/usecases/install-and-expand-istio-mesh.md b/usecases/install-and-expand-istio-mesh.md
index 98119f47b..20db379a0 100644
--- a/usecases/install-and-expand-istio-mesh.md
+++ b/usecases/install-and-expand-istio-mesh.md
@@ -970,4 +970,4 @@ curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
```bash
istioctl get routerules #-- there should be no more routing rules
docker ps -a #-- the BookInfo containers should be delete
- ```
\ No newline at end of file
+ ```
diff --git a/usecases/integrating-vms.md b/usecases/integrating-vms.md
index 23f9dc942..db1f81a0b 100644
--- a/usecases/integrating-vms.md
+++ b/usecases/integrating-vms.md
@@ -117,4 +117,4 @@ istioctl create -n bookinfo -f samples/bookinfo/kube/route-rule-ratings-mysql-vm
您可以验证 bookinfo 应用程序的输出结果,显示来自 Reviewer1 的 1 星级和来自 Reviewer2 的 4 星级,或者更改虚拟机上的评分并查看结果。
-同时,您还可以在 [RawVM MySQL](https://github.com/istio/istio/blob/master/samples/rawvm/README.md) 的文档中找到一些故障排查和其它信息。
\ No newline at end of file
+同时,您还可以在 [RawVM MySQL](https://github.com/istio/istio/blob/master/samples/rawvm/README.md) 的文档中找到一些故障排查和其它信息。
diff --git a/usecases/istio-community-tips.md b/usecases/istio-community-tips.md
index 7499b530d..c06854f07 100644
--- a/usecases/istio-community-tips.md
+++ b/usecases/istio-community-tips.md
@@ -72,4 +72,4 @@ Istio 的 feature 分为四大类:
- 安全性:各种 checker 和安全性配置
- Core:核心功能
-功能划分与各种功能的状态详情请见:
\ No newline at end of file
+功能划分与各种功能的状态详情请见:
diff --git a/usecases/istio-installation.md b/usecases/istio-installation.md
index 029e9e9e6..44a7cf429 100644
--- a/usecases/istio-installation.md
+++ b/usecases/istio-installation.md
@@ -408,4 +408,4 @@ BookInfo示例中有三个版本的`reviews`,可以使用istio来配置路由
## 参考
- [安装 Istio](https://istio.io/zh/docs/setup/kubernetes/)
-- [BookInfo 应用](https://istio.io/zh/docs/examples/bookinfo/)
\ No newline at end of file
+- [BookInfo 应用](https://istio.io/zh/docs/examples/bookinfo/)
diff --git a/usecases/istio-tutorial.md b/usecases/istio-tutorial.md
index 7f8c842f0..ff61188b5 100644
--- a/usecases/istio-tutorial.md
+++ b/usecases/istio-tutorial.md
@@ -1002,4 +1002,4 @@ istioctl delete egressrule httpbin-egress-rule jimmysong-egress-rule github-egre
## 参考
- https://github.com/redhat-developer-demos/istio-tutorial
-- [Book - Introducing Istio Service Mesh for Microservices](https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/)
\ No newline at end of file
+- [Book - Introducing Istio Service Mesh for Microservices](https://developers.redhat.com/books/introducing-istio-service-mesh-microservices/)
diff --git a/usecases/istio-tutorials-collection.md b/usecases/istio-tutorials-collection.md
index 3a833c85e..8a443e701 100644
--- a/usecases/istio-tutorials-collection.md
+++ b/usecases/istio-tutorials-collection.md
@@ -21,13 +21,13 @@ Katacoda已支持Istio 1.0的学习环境。
地址:https://www.katacoda.com/courses/istio/deploy-istio-on-kubernetes
-![katacoda](https://ws4.sinaimg.cn/large/006tNc79gy1ftwe77v4u5j31kw0ziwtw.jpg)
+![katacoda](../images/006tNc79gy1ftwe77v4u5j31kw0ziwtw.jpg)
-![weavescope](https://ws3.sinaimg.cn/large/006tNc79gy1ftwhtmzhfej31kw0ziww1.jpg)
+![weavescope](../images/006tNc79gy1ftwhtmzhfej31kw0ziww1.jpg)
只要傻瓜式操作就可以部署一个Istio出来,同时还提供了Weave scope可以对service mesh的中的服务关系做可视化呈现。
-![weavescope](https://ws2.sinaimg.cn/large/006tNc79gy1ftwhvtu1vxj31kw0zitvc.jpg)
+![weavescope](../images/006tNc79gy1ftwhvtu1vxj31kw0zitvc.jpg)
同时还能提供部分监控功能,比如服务状态,CPU和内存使用情况。
@@ -37,9 +37,9 @@ Katacoda已支持Istio 1.0的学习环境。
推荐原因:教程topic划分简洁得当,RedHat大力加持,未来的频繁更新可以预期。
-![Red Hat](https://ws2.sinaimg.cn/large/006tNc79gy1ftwiolw1tyj31kw0zib29.jpg)
+![Red Hat](../images/006tNc79gy1ftwiolw1tyj31kw0zib29.jpg)
-![Red Hat developers](https://ws2.sinaimg.cn/large/006tNc79gy1ftwjyxiw1pj31kw0zi4qp.jpg)
+![Red Hat developers](../images/006tNc79gy1ftwjyxiw1pj31kw0zi4qp.jpg)
## IBM的Istio示例教程
@@ -49,9 +49,9 @@ Katacoda已支持Istio 1.0的学习环境。
https://developer.ibm.com/code/patterns/manage-microservices-traffic-using-istio
-![IBM developerWorks](https://ws3.sinaimg.cn/large/006tNc79gy1ftweryj0zrj31kw0zix6q.jpg)
+![IBM developerWorks](../images/006tNc79gy1ftweryj0zrj31kw0zix6q.jpg)
-![IBM developers](https://ws2.sinaimg.cn/large/006tNc79gy1ftwesjg1e2j31kw0s8woq.jpg)
+![IBM developers](../images/006tNc79gy1ftwesjg1e2j31kw0s8woq.jpg)
最后更新于2018年5月10号,是基于Istio 0.8的。
@@ -74,4 +74,4 @@ GitHub:https://github.com/servicemesher
微信群:入群请[联系我](https://jimmysong.io/about)
-Twitter: https://twitter.com/servicemesher
\ No newline at end of file
+Twitter: https://twitter.com/servicemesher
diff --git a/usecases/istio.md b/usecases/istio.md
index b5450754b..b12048fac 100644
--- a/usecases/istio.md
+++ b/usecases/istio.md
@@ -69,4 +69,4 @@ Istio-Auth提供强大的服务间和最终用户认证,使用相互TLS,内
## 参考
- [Istio:用于微服务的服务啮合层](http://www.infoq.com/cn/news/2017/05/istio?utm_source=news_about_opensource&utm_medium=link&utm_campaign=opensource)
-- [Istio 是什么?](https://istio.io/zh/docs/concepts/what-is-istio/)
\ No newline at end of file
+- [Istio 是什么?](https://istio.io/zh/docs/concepts/what-is-istio/)
diff --git a/usecases/linkerd.md b/usecases/linkerd.md
index ab8899ff0..81e045d14 100644
--- a/usecases/linkerd.md
+++ b/usecases/linkerd.md
@@ -120,4 +120,4 @@ Linkerd 自己最令人称道的是它在每台主机上只安装一个 Pod,
- [Squeezing blood from a stone: small-memory JVM techniques for microservice sidecars](https://buoyant.io/2016/06/17/small-memory-jvm-techniques-for-microservice-sidecars/)
- [Buoyant发布服务网格Linkerd的1.0版本](http://www.infoq.com/cn/news/2017/05/buoyant-release-ver-1-of-linkerd)
- [Linkerd documentation](https://linkerd.io/documentation/)
-- [Istio:用于微服务的服务啮合层](http://www.infoq.com/cn/news/2017/05/istio)
\ No newline at end of file
+- [Istio:用于微服务的服务啮合层](http://www.infoq.com/cn/news/2017/05/istio)
diff --git a/usecases/microservices-for-java-developers.md b/usecases/microservices-for-java-developers.md
index e0aa47f75..289762750 100644
--- a/usecases/microservices-for-java-developers.md
+++ b/usecases/microservices-for-java-developers.md
@@ -14,4 +14,4 @@ Java作为多年的编程语言届的No.1(使用人数最多,最流行),
![Spring Boot的知识点](../images/spring-boot-note-spots.png)
-Spring Boot是Spring框架的一部分,关于Spring的核心技术请参考[Spring core technologies - spring.io](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html)。
\ No newline at end of file
+Spring Boot是Spring框架的一部分,关于Spring的核心技术请参考[Spring core technologies - spring.io](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html)。
diff --git a/usecases/microservices.md b/usecases/microservices.md
index 7fc925797..252222212 100644
--- a/usecases/microservices.md
+++ b/usecases/microservices.md
@@ -8,4 +8,4 @@ Kubernetes 设计之初就是按照 Cloud Native 的理念设计的,Cloud Nati
![微服务关注的部分](../images/microservices-concerns.jpg)
-当前最成熟最完整的微服务框架可以说非[Spring](https://spring.io)莫属,而Spring又仅限于Java语言开发,其架构本身又跟Kubernetes存在很多重合的部分,如何探索将Kubernetes作为微服务架构平台就成为一个热点话题。
\ No newline at end of file
+当前最成熟最完整的微服务框架可以说非[Spring](https://spring.io)莫属,而Spring又仅限于Java语言开发,其架构本身又跟Kubernetes存在很多重合的部分,如何探索将Kubernetes作为微服务架构平台就成为一个热点话题。
diff --git a/usecases/openfaas-quick-start.md b/usecases/openfaas-quick-start.md
index 5b7cabf3b..c57fa9743 100644
--- a/usecases/openfaas-quick-start.md
+++ b/usecases/openfaas-quick-start.md
@@ -101,4 +101,4 @@ OpenFaaS的命令行工具`faas-cli`的详细使用说明见:https://github.co
## 参考
-- [Deployment guide for Kubernetes - GitHub openfaas/faas](http://docs.openfaas.com/deployment/kubernetes/)
\ No newline at end of file
+- [Deployment guide for Kubernetes - GitHub openfaas/faas](http://docs.openfaas.com/deployment/kubernetes/)
diff --git a/usecases/serverless.md b/usecases/serverless.md
index a5028b934..1c755a4d3 100644
--- a/usecases/serverless.md
+++ b/usecases/serverless.md
@@ -4,7 +4,7 @@
CNCF 的[云原生 landscape](https://github.com/cncf/landscape) 中就包括 Serverless 附图,这也是云原生发展到更高阶段的面向特定应用场景的简易抽象。
-![Serverless Landscape](https://ws2.sinaimg.cn/large/006tNbRwly1fx0ie2kb90j31kw0ynha3.jpg)
+![Serverless Landscape](../images/006tNbRwly1fx0ie2kb90j31kw0ynha3.jpg)
下图来自谷歌云平台官网,是对云计算的一个很好的分层概括,其中 serverless 就是构建在虚拟机和容器之上的一层,与应用本身的关系更加密切。
@@ -65,4 +65,4 @@ Function-as-a-Service景观图(图片来自`https://github.com/amyers1793/Func
- [Serverless架构综述](http://dockone.io/article/1460)
- [2017年会是Serverless爆发之年吗?](http://www.infoq.com/cn/news/2017/04/2017-Serverless)
- [从IaaS到FaaS—— Serverless架构的前世今生](https://aws.amazon.com/cn/blogs/china/iaas-faas-serverless/)
-- [Introducing Redpoint's FaaS Landscape](https://medium.com/memory-leak/this-year-gartner-added-serverless-to-its-hype-cycle-of-emerging-technologies-reflecting-the-5dfe43d818f0)
\ No newline at end of file
+- [Introducing Redpoint's FaaS Landscape](https://medium.com/memory-leak/this-year-gartner-added-serverless-to-its-hype-cycle-of-emerging-technologies-reflecting-the-5dfe43d818f0)
diff --git a/usecases/service-discovery-in-microservices.md b/usecases/service-discovery-in-microservices.md
index 7108d46ee..fdee394d1 100644
--- a/usecases/service-discovery-in-microservices.md
+++ b/usecases/service-discovery-in-microservices.md
@@ -29,4 +29,4 @@
## 参考
-- [谈服务发现的背景、架构以及落地方案](http://www.infoq.com/cn/articles/background-architecture-and-solutions-of-service-discovery)
\ No newline at end of file
+- [谈服务发现的背景、架构以及落地方案](http://www.infoq.com/cn/articles/background-architecture-and-solutions-of-service-discovery)
diff --git a/usecases/service-mesh-adoption-and-evolution.md b/usecases/service-mesh-adoption-and-evolution.md
index ec6b6a8b7..18e7d6fa2 100644
--- a/usecases/service-mesh-adoption-and-evolution.md
+++ b/usecases/service-mesh-adoption-and-evolution.md
@@ -13,7 +13,7 @@
我们在前面看到了通过**客户端库**来治理服务的架构图,那是我们在改造成Service Mesh架构前使用微服务架构通常的形式,下图是使用Service Mesh架构的最终形式。
-![Service Mesh架构图](https://ws1.sinaimg.cn/large/006tNbRwly1fubs6ts3sgj30vo0osdnj.jpg)
+![Service Mesh架构图](../images/006tNbRwly1fubs6ts3sgj30vo0osdnj.jpg)
当然在达到这一最终形态之前我们需要将架构一步步演进,下面给出的是参考的演进路线。
@@ -21,7 +21,7 @@
如果你使用的是Kubernetes做容器编排调度,那么在进化到Service Mesh架构之前,通常会使用Ingress Controller,做集群内外流量的反向代理,如使用Traefik或Nginx Ingress Controller。
-![Ingress或边缘代理架构图](https://ws4.sinaimg.cn/large/006tNbRwly1fubsk4v16hj30vo0bq75z.jpg)
+![Ingress或边缘代理架构图](../images/006tNbRwly1fubsk4v16hj30vo0bq75z.jpg)
这样只要利用Kubernetes的原有能力,当你的应用微服务化并容器化需要开放外部访问且只需要L7代理的话这种改造十分简单,但问题是无法管理服务间流量。
@@ -29,7 +29,7 @@
Ingress或者边缘代理可以处理进出集群的流量,为了应对集群内的服务间流量管理,我们可以在集群内加一个`Router`层,即路由器层,让集群内所有服务间的流量都通过该路由器。
-![路由器网格架构图](https://ws1.sinaimg.cn/large/006tNbRwly1fubsxrph3dj30vq0duq53.jpg)
+![路由器网格架构图](../images/006tNbRwly1fubsxrph3dj30vq0duq53.jpg)
这个架构无需对原有的单体应用和新的微服务应用做什么改造,可以很轻易的迁移进来,但是当服务多了管理起来就很麻烦。
@@ -37,7 +37,7 @@ Ingress或者边缘代理可以处理进出集群的流量,为了应对集群
这种架构是在每个节点上都部署一个代理,如果使用Kubernetes来部署的话就是使用`DaemonSet`对象,Linkerd第一代就是使用这种方式部署的,一代的Linkerd使用Scala开发,基于JVM比较消耗资源,二代的Linkerd使用Go开发。
-![Proxy per Node架构图](https://ws3.sinaimg.cn/large/006tNbRwly1fubt5a97h7j30vq0bcq5p.jpg)
+![Proxy per Node架构图](../images/006tNbRwly1fubt5a97h7j30vq0bcq5p.jpg)
这种架构有个好处是每个节点只需要部署一个代理即可,比起在每个应用中都注入一个sidecar的方式更节省资源,而且更适合基于物理机/虚拟机的大型单体应用,但是也有一些副作用,比如粒度还是不够细,如果一个节点出问题,该节点上的所有服务就都会无法访问,对于服务来说不是完全透明的。
@@ -45,7 +45,7 @@ Ingress或者边缘代理可以处理进出集群的流量,为了应对集群
这个一般不会成为典型部署类型,当企业的服务网格架构演进到这一步时通常只会持续很短时间,然后就会增加控制平面。跟前几个阶段最大的不同就是,应用程序和代理被放在了同一个部署单元里,可以对应用程序的流量做更细粒度的控制。
-![Sidecar代理/Fabric模型架构图](https://ws4.sinaimg.cn/large/006tNbRwly1fubvi0dnhlj30vo0ekwhx.jpg)
+![Sidecar代理/Fabric模型架构图](../images/006tNbRwly1fubvi0dnhlj30vo0ekwhx.jpg)
这已经是最接近Service Mesh架构的一种形态了,唯一缺的就是控制平面了。所有的sidecar都支持热加载,配置的变更可以很容易的在流量控制中反应出来,但是如何操作这么多sidecar就需要一个统一的控制平面了。
@@ -53,10 +53,10 @@ Ingress或者边缘代理可以处理进出集群的流量,为了应对集群
下面的示意图是目前大多数Service Mesh的架构图,也可以说是整个Service Mesh架构演进的最终形态。
-![Sidecar代理/控制平面架构图](https://ws4.sinaimg.cn/large/006tNbRwly1fubvr83wvgj30vq0mmdip.jpg)
+![Sidecar代理/控制平面架构图](../images/006tNbRwly1fubvr83wvgj30vq0mmdip.jpg)
这种架构将代理作为整个服务网格中的一部分,使用Kubernetes部署的话,可以通过以sidecar的形式注入,减轻了部署的负担,可以对每个服务的做细粒度权限与流量控制。但有一点不好就是为每个服务都注入一个代理会占用很多资源,因此要想方设法降低每个代理的资源消耗。
### 多集群部署和扩展
-以上都是单个服务网格集群的架构,所有的服务都位于同一个集群中,服务网格管理进出集群和集群内部的流量,当我们需要管理多个集群或者是引入外部的服务时就需要网格扩展和多集群配置。
\ No newline at end of file
+以上都是单个服务网格集群的架构,所有的服务都位于同一个集群中,服务网格管理进出集群和集群内部的流量,当我们需要管理多个集群或者是引入外部的服务时就需要网格扩展和多集群配置。
diff --git a/usecases/service-mesh-conclusion.md b/usecases/service-mesh-conclusion.md
index 686ab1c20..272c67022 100644
--- a/usecases/service-mesh-conclusion.md
+++ b/usecases/service-mesh-conclusion.md
@@ -30,4 +30,4 @@ Service Mesh还有一些遗留的问题没有解决或者说比较薄弱的功
| API的界限 | API主要是作为客户端为客户提供,内部的API与外部是分离的 | API即产品,API就是你的产品能力 |
| 安全模型 | 通过边缘、防火墙可信内部网络的方式控制安全 | 所有的服务都需要认证和鉴权、服务间要加密、zero-trust安全观念 |
-在考虑完上述因素后,尽量选择开源的平台和解决方案,还要想好开源软件的边界在哪里,哪些能力将是企业版才会提供的。
\ No newline at end of file
+在考虑完上述因素后,尽量选择开源的平台和解决方案,还要想好开源软件的边界在哪里,哪些能力将是企业版才会提供的。
diff --git a/usecases/service-mesh-customization-and-integration.md b/usecases/service-mesh-customization-and-integration.md
index 380b0f2a4..163c21429 100644
--- a/usecases/service-mesh-customization-and-integration.md
+++ b/usecases/service-mesh-customization-and-integration.md
@@ -1,3 +1,7 @@
+---
+typora-root-url: ../images
+---
+
# 定制和集成
**注意:本书中的 Service Mesh 章节已不再维护,请转到 [istio-handbook](https://jimmysong.io/istio-handbook) 中浏览。**
@@ -8,20 +12,20 @@
**nginMesh**
-![nginMesh架构图](https://ws4.sinaimg.cn/large/006tNbRwly1fucp8yralaj30vu0sijx8.jpg)
+![nginMesh架构图](../images/006tNbRwly1fucp8yralaj30vu0sijx8.jpg)
通过扩展Istio Mixer adapter来对接不同的监控后端。
-![Mixer adapter](https://ws3.sinaimg.cn/large/006tNbRwly1fucplat3l9j30vo0lw43l.jpg)
+![Mixer adapter](../images/006tNbRwly1fucplat3l9j30vo0lw43l.jpg)
**SOFAMosn**
还有蚂蚁金服开源的Go语言版的数据平面[SOFAMosn](https://github.com/alipay/sofa-mosn),这是也兼容Istio的SOFAMesh的一部分,也可以单独作为代理使用,详见:[SOFAMesh & SOFA MOSN—基于Istio构建的用于应对大规模流量的Service Mesh解决方案](https://jimmysong.io/posts/sofamesh-and-mosn-proxy-sidecar-service-mesh-by-ant-financial/)。
-![SOFAMesh](https://ws4.sinaimg.cn/large/006tNbRwly1fucpano6gsj31kw1biq98.jpg)
+![SOFAMesh](../images/006tNbRwly1fucpano6gsj31kw1biq98.jpg)
[SOFAMosn](https://github.com/alipay/sofa-mosn)的模块架构图。
-![SOFAMosn模块架构图](https://ws3.sinaimg.cn/large/006tNbRwly1fucpc5fn8wj31kw0sfdnu.jpg)
+![SOFAMosn模块架构图](../images/006tNbRwly1fucpc5fn8wj31kw0sfdnu.jpg)
-在未来我们会看到更多定制的数据平面和Mixer适配器出现。
\ No newline at end of file
+在未来我们会看到更多定制的数据平面和Mixer适配器出现。
diff --git a/usecases/service-mesh-fundamental.md b/usecases/service-mesh-fundamental.md
index c3af1fbcc..900701190 100644
--- a/usecases/service-mesh-fundamental.md
+++ b/usecases/service-mesh-fundamental.md
@@ -16,7 +16,7 @@ Service Mesh是建立在物理或者虚拟网络层之上的,基于策略的
本章主要介绍Service Mesh的定义和组成,为什么要使用Service Mesh,它可以带来哪些好处。
-![Service Mesh模型对比](https://ws1.sinaimg.cn/large/0069RVTdly1fuafvbnuc7j310a0oqdm9.jpg)
+![Service Mesh模型对比](../images/0069RVTdly1fuafvbnuc7j310a0oqdm9.jpg)
Service Mesh与传统网络的区别就是**硬件或者虚拟网络**与**软件定义网络(SDN)**的区别,我们从上图中可以看到物理和虚拟网络中比起SDN还多了**管理平面**。
@@ -26,13 +26,13 @@ Service Mesh与传统网络的区别就是**硬件或者虚拟网络**与**软
下图是网状拓扑,所谓网状拓扑就是每个节点都可以跟所有其他节点直接互联,这样而这也是链接数最多一种拓扑,如果有n个节点的话,链接数就是n(n-1)。
-![网状网络拓扑](https://ws1.sinaimg.cn/large/0069RVTdly1fuaie8jan8j310a0kitem.jpg)
+![网状网络拓扑](../images/0069RVTdly1fuaie8jan8j310a0kitem.jpg)
### Service Mesh架构
下图是[Conduit](https://condiut.io) Service Mesh(现在已合并到Linkerd2中了)的架构图,这是Service Mesh的一种典型的架构。
-![Service Mesh架构图](https://ws2.sinaimg.cn/large/0069RVTdly1fuail4d24jj31080rkgr7.jpg)
+![Service Mesh架构图](../images/0069RVTdly1fuail4d24jj31080rkgr7.jpg)
Service Mesh中分为**控制平面**和**数据平面**,当前流行的两款开源的Service Mesh Istio和Linkerd实际上都是这种构造,只不过Istio的划分更清晰,而且部署更零散,很多组件都被拆分,控制平面中包括Mixer、Pilot、Citadel,数据平面默认是用Envoy;而Linkerd中只分为linkerd做数据平面,namerd作为控制平面。
@@ -61,7 +61,7 @@ Service Mesh中服务是一等公民,它提供L5的网络流量管理,并提
还是拿Istio做例子,Mixer通过适配器将应用的遥测数据发送给后端监控、日志、认证和份额管理系统。
-![Istio Mixer](https://ws1.sinaimg.cn/large/0069RVTdly1fuam4ln45jj30yu0o6wkc.jpg)
+![Istio Mixer](../images/0069RVTdly1fuam4ln45jj30yu0o6wkc.jpg)
从上图可以看到Mixer适配器可以对接多种监控和日志后端。
@@ -73,7 +73,7 @@ Service Mesh中服务是一等公民,它提供L5的网络流量管理,并提
下图是Istio中安全通信路径的示意图。
-![Istio架构图](https://ws3.sinaimg.cn/large/0069RVTdly1fuamvq97cuj30yu0wg7cr.jpg)
+![Istio架构图](../images/0069RVTdly1fuamvq97cuj30yu0wg7cr.jpg)
一般的安全性都是通过证书的方式实现的。Sidecar代理负责证书生命周期的管理,包括证书的生成、分发、刷新和注销。从图中还可以看到,在Pod内部sidecar会与应用容器之间建立本地TCP连接,其中使用mTLS(双向传输层加密)。这一点是非常重要的,因为一个节点上甚至一个Pod内都不一定运行一个容器,容器可能会被暴露到外部访问,保证传输层的双向加密,可以保证流量传输的安全。
@@ -85,7 +85,7 @@ Service Mesh中服务是一等公民,它提供L5的网络流量管理,并提
这是本书最有重要的一个观点,重要到要放到副标题,熟悉OSI模型的人都知道L5是什么。
-![OSI模型](https://ws3.sinaimg.cn/large/0069RVTdly1fuanez4qbtj30v4183n7p.jpg)
+![OSI模型](../images/0069RVTdly1fuanez4qbtj30v4183n7p.jpg)
*OSI模型(图片来自[CSDN](https://blog.csdn.net/yaopeng_2005/article/details/7064869))*
@@ -96,6 +96,6 @@ Service Mesh是在开发和运维之间植入的一个基础设施层。它将
- **产品Owner**可以针对特定服务,根据用户选择的套餐执行配额管理。
- **开发人员**可随时将新版本功能重定向到beta版本,不需要**运维人员**干涉。
-![在L5解耦](https://ws3.sinaimg.cn/large/006tNbRwly1fubfiiryirj30w20ayjui.jpg)
+![在L5解耦](../images/006tNbRwly1fubfiiryirj30w20ayjui.jpg)
-这种职责的解耦大大加速了软件的迭代速度,总之你可以把Service Mesh作为OSI模型中的会话层。
\ No newline at end of file
+这种职责的解耦大大加速了软件的迭代速度,总之你可以把Service Mesh作为OSI模型中的会话层。
diff --git a/usecases/service-mesh.md b/usecases/service-mesh.md
index e844ac207..f3f088e62 100644
--- a/usecases/service-mesh.md
+++ b/usecases/service-mesh.md
@@ -95,4 +95,4 @@ Service mesh 并没有给我们带来新功能,它是用于解决其他工具
- [Introducing Istio: A robust service mesh for microservices](https://istio.io/blog/istio-service-mesh-for-microservices.html)
- [Application Network Functions With ESBs, API Management, and Now.. Service Mesh?](http://blog.christianposta.com/microservices/application-network-functions-with-esbs-api-management-and-now-service-mesh/)
- [Pattern: Service Mesh](http://philcalcado.com/2017/08/03/pattern_service_mesh.html)
-- [Istio官方中文文档](https://istio.io/zh/)
\ No newline at end of file
+- [Istio官方中文文档](https://istio.io/zh/)
diff --git a/usecases/sidecar-spec-in-istio.md b/usecases/sidecar-spec-in-istio.md
index b40a597b5..40c9431db 100644
--- a/usecases/sidecar-spec-in-istio.md
+++ b/usecases/sidecar-spec-in-istio.md
@@ -159,4 +159,4 @@ kubectl apply -n default -f <(istioctl kube-inject -f manifests/istio/k8s-app-mo
## 参考
-- [Installing Istio Sidecar](https://istio.io/docs/setup/kubernetes/sidecar-injection.html)
\ No newline at end of file
+- [Installing Istio Sidecar](https://istio.io/docs/setup/kubernetes/sidecar-injection.html)
diff --git a/usecases/sofamesh.md b/usecases/sofamesh.md
index 10f48fd7d..678eec001 100644
--- a/usecases/sofamesh.md
+++ b/usecases/sofamesh.md
@@ -4,7 +4,7 @@
SOFAMesh由蚂蚁金服开源,在兼容Istio整体架构和协议的基础上,做出部分调整:
-![SOFAMesh architecture](https://ws4.sinaimg.cn/large/0069RVTdgy1fu08m7p22kj31kw1biq98.jpg)
+![SOFAMesh architecture](../images/0069RVTdgy1fu08m7p22kj31kw1biq98.jpg)
1. **使用Go语言开发全新的Sidecar,替代Envoy**
2. **为了避免Mixer带来的性能瓶颈,合并Mixer部分功能进入Sidecar**
@@ -22,7 +22,7 @@ SOFAMesh由蚂蚁金服开源,在兼容Istio整体架构和协议的基础上
SOFAMesh中Golang版本的Sidecar,是一个名为MOSN(Modular Observable Smart Netstub)的全新开发的模块,实现Envoy的功能,兼容Envoy的API,可以和Istio集成。
-![SOFAMesh MOSN](https://ws1.sinaimg.cn/large/006tKfTcgy1ft75ot24lzj31ec18479s.jpg)
+![SOFAMesh MOSN](../images/006tKfTcgy1ft75ot24lzj31ec18479s.jpg)
此外,我们会增加对SOFARPC、Dubbo等通讯协议的支持,以便更好的迎合国内用户包括我们自身的实际需求。
@@ -34,7 +34,7 @@ SOFAMesh中Golang版本的Sidecar,是一个名为MOSN(Modular Observable Smart
我们将大幅扩展和增强Istio中的Pilot模块:
-![SOFAMesh Pilot architecture](https://ws1.sinaimg.cn/large/006tKfTcgy1ft75pq8rplj31kw19sn5q.jpg)
+![SOFAMesh Pilot architecture](../images/006tKfTcgy1ft75pq8rplj31kw19sn5q.jpg)
1. **增加SOFARegistry的Adapter,提供超大规模服务注册和发现的解决方案**
2. **增加数据同步模块,以实现多个服务注册中心之间的数据交换。**
@@ -46,11 +46,11 @@ MOSN和SOFAPilot配合,将可以提供让传统侵入式框架(如Spring Clo
## Roadmap
-![SOFA Mesh roadmap](https://ws2.sinaimg.cn/large/0069RVTdgy1fu08liarftj31kw0spkeg.jpg)
+![SOFA Mesh roadmap](../images/0069RVTdgy1fu08liarftj31kw0spkeg.jpg)
## 参考
- [SOFA MOSN](https://github.com/alipay/sofa-mosn)
- [SOFAMesh](https://github.com/alipay/sofa-mesh)
- [SOFAMesh官方文档](http://www.sofastack.tech/sofa-mesh/docs/Home)
-- [蚂蚁金服大规模微服务架构下的Service Mesh探索之路](http://www.servicemesher.com/blog/the-way-to-service-mesh-in-ant-financial/)
\ No newline at end of file
+- [蚂蚁金服大规模微服务架构下的Service Mesh探索之路](http://www.servicemesher.com/blog/the-way-to-service-mesh-in-ant-financial/)
diff --git a/usecases/sofamosn-in-sofamesh.md b/usecases/sofamosn-in-sofamesh.md
index dbae56434..a2ba1590c 100644
--- a/usecases/sofamosn-in-sofamesh.md
+++ b/usecases/sofamosn-in-sofamesh.md
@@ -19,7 +19,7 @@
**SOFAMosn 是使用 Go 语言开发的 Service Mesh 数据平面代理**,而 SOFAMesh 则是基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案, SOFAMosn **是** SOFAMesh 的关键组件。目前由于 SOFAMosn 相比 Envoy 做了一些改造,无法在 Istio 下直接使用,所以本文的实验需要在 SOFAMesh 体系中进行。下图是 SOFAMesh 整体框架下,SOFAMosn 的工作示意图。
-![SOFAMosn 架构图](https://ws3.sinaimg.cn/large/006tNbRwly1fwdlx22rv9j31ec184dlr.jpg)
+![SOFAMosn 架构图](../images/006tNbRwly1fwdlx22rv9j31ec184dlr.jpg)
## 部署 SOFAMesh
@@ -69,4 +69,4 @@ prometheus ClusterIP 10.254.17.234 9090/TCP
## 参考
- [SOFAMesh - github.com](https://github.com/alipay/sofa-mesh)
-- [SOFAMosn - github.com](https://github.com/alipay/sofa-mosn)
\ No newline at end of file
+- [SOFAMosn - github.com](https://github.com/alipay/sofa-mosn)
diff --git a/usecases/sofamosn.md b/usecases/sofamosn.md
index 91292494c..194c53a87 100644
--- a/usecases/sofamosn.md
+++ b/usecases/sofamosn.md
@@ -48,4 +48,4 @@ MOSN 是一款采用 Golang 开发的 Service Mesh 数据平面代理,功能
## 参考
-- 详细信息请参考[SOFAMosn GitHub仓库](https://github.com/alipay/sofa-mosn)
\ No newline at end of file
+- 详细信息请参考[SOFAMosn GitHub仓库](https://github.com/alipay/sofa-mosn)
diff --git a/usecases/spark-standalone-on-kubernetes.md b/usecases/spark-standalone-on-kubernetes.md
index e5282dbaf..e6c89d87d 100644
--- a/usecases/spark-standalone-on-kubernetes.md
+++ b/usecases/spark-standalone-on-kubernetes.md
@@ -52,4 +52,4 @@ $ kubectl create -f manifests/
访问 `http://zepellin.treafik.io`
-![zeppelin ui](../images/zeppelin-ui.jpg)
\ No newline at end of file
+![zeppelin ui](../images/zeppelin-ui.jpg)
diff --git a/usecases/spring-boot-quick-start-guide.md b/usecases/spring-boot-quick-start-guide.md
index e3c8b34ef..557aaeab0 100644
--- a/usecases/spring-boot-quick-start-guide.md
+++ b/usecases/spring-boot-quick-start-guide.md
@@ -392,4 +392,4 @@ java -jar target/myproject-0.0.1-SNAPSHOT.jar
- [使用 Spring Boot 快速构建 Spring 框架应用](https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/)
- [maven3常用命令、java项目搭建、web项目搭建详细图解](http://blog.csdn.net/edward0830ly/article/details/8748986)
- [Servlet教程 - runoob.com](http://www.runoob.com/servlet/servlet-tutorial.html)
-- [AOP - Aspect Oriented Programming - spring.io](https://docs.spring.io/spring/docs/2.5.x/reference/aop.html)
\ No newline at end of file
+- [AOP - Aspect Oriented Programming - spring.io](https://docs.spring.io/spring/docs/2.5.x/reference/aop.html)
diff --git a/usecases/the-enterprise-path-to-service-mesh-architectures.md b/usecases/the-enterprise-path-to-service-mesh-architectures.md
index 07517aca7..d83efae6a 100644
--- a/usecases/the-enterprise-path-to-service-mesh-architectures.md
+++ b/usecases/the-enterprise-path-to-service-mesh-architectures.md
@@ -6,4 +6,4 @@
追本溯源,Service Mesh实际上是一种SDN,等同于OSI模型中的会话层。 每一次技术变革,必然要导致生产力和生产关系的变革,我们看到这种趋势正在加速。本书中给出了企业上Service Mesh的路径,可供广大技术和管理人员参考。
-**注**:若未加声明,本章中所有图片均来自*The Enterprise Path to Service Mesh*一书。
\ No newline at end of file
+**注**:若未加声明,本章中所有图片均来自*The Enterprise Path to Service Mesh*一书。
diff --git a/usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.md b/usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.md
index 9312cd5ae..e9915db8c 100644
--- a/usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.md
+++ b/usecases/understand-sidecar-injection-and-traffic-hijack-in-istio-service-mesh.md
@@ -25,7 +25,7 @@ productpage istio-proxy
例如下图 [SOFAMesh & SOFA MOSN—基于Istio构建的用于应对大规模流量的Service Mesh解决方案](https://jimmysong.io/posts/sofamesh-and-mosn-proxy-sidecar-service-mesh-by-ant-financial/)的架构图中描述的,MOSN 作为 Sidecar 的方式和应用运行在同一个 Pod 中,拦截所有进出应用容器的流量,[SOFAMesh](https://github.com/alipay/sofa-mesh) 兼容 Istio,其中使用 Go 语言开发的 [SOFAMosn](https://github.com/alipay/sofa-mosn) 替换了 Envoy。
-![SOFAMesh架构图](https://ws4.sinaimg.cn/large/006tNbRwgy1fuyr4vizzwj31kw1biq98.jpg)
+![SOFAMesh架构图](../images/006tNbRwgy1fuyr4vizzwj31kw1biq98.jpg)
**注意**:下文中所指的 Sidecar 都是指的 Envoy 代理容器。
@@ -340,7 +340,7 @@ $ sudo -i
下图展示了 iptables 调用链。
-![iptables 调用链](https://ws4.sinaimg.cn/large/0069RVTdly1fv5hukl647j30k6145gnt.jpg)
+![iptables 调用链](../images/0069RVTdly1fv5hukl647j30k6145gnt.jpg)
### iptables 中的表
@@ -366,7 +366,7 @@ Init 容器中使用的的 iptables 版本是 `v1.6.0`,共包含 5 张表:
下图是 iptables 的调用链顺序。
-![iptables 调用链](https://ws1.sinaimg.cn/large/0069RVTdgy1fv5dq2bptdj31110begnl.jpg)
+![iptables 调用链](../images/0069RVTdgy1fv5dq2bptdj31110begnl.jpg)
### iptables 命令
@@ -398,7 +398,7 @@ Chain OUTPUT (policy ACCEPT 18M packets, 1916M bytes)
下图是 iptables 的建议结构图,流量在经过 INPUT 链之后就进入了上层协议栈,比如
-![iptables结构图](https://ws4.sinaimg.cn/large/0069RVTdgy1fv5dm4a9ygj30w50czdi3.jpg)
+![iptables结构图](../images/0069RVTdgy1fv5dm4a9ygj30w50czdi3.jpg)
图片来自[常见 iptables 使用规则场景整理](https://www.aliang.org/Linux/iptables.html)
@@ -428,7 +428,7 @@ Chain OUTPUT (policy ACCEPT 18M packets, 1916M bytes)
Init 容器通过向 iptables nat 表中注入转发规则来劫持流量的,下图显示的是 productpage 服务中的 iptables 流量劫持的详细过程。
-![Envoy sidecar 流量劫持 Istio iptables 宋净超 Jimmy Song 服务网格 Service Mesh](https://ws1.sinaimg.cn/large/0069RVTdgy1fv5doj8fuij31kw0ytn7h.jpg)
+![Envoy sidecar 流量劫持 Istio iptables 宋净超 Jimmy Song 服务网格 Service Mesh](../images/0069RVTdgy1fv5doj8fuij31kw0ytn7h.jpg)
Init 容器启动时命令行参数中指定了 `REDIRECT` 模式,因此只创建了 NAT 表规则,接下来我们查看下 NAT 表中创建的规则,这是全文中的**重点部分**,前面讲了那么多都是为它做铺垫的。下面是查看 nat 表中的规则,其中链的名字中包含 `ISTIO` 前缀的是由 Init 容器注入的,规则匹配是根据下面显示的顺序来执行的,其中会有多次跳转。
@@ -686,7 +686,7 @@ ENTRYPOINT ["/usr/local/bin/pilot-agent"]
-![Istio bookinfo](https://ws3.sinaimg.cn/large/0069RVTdgy1fv5df9lq1aj317o0o6wia.jpg)
+![Istio bookinfo](../images/0069RVTdgy1fv5df9lq1aj317o0o6wia.jpg)
图片来自 [Istio 官方网站](https://istio.io/zh/docs/examples/bookinfo/)
@@ -720,4 +720,4 @@ envoy 11 istio-proxy 63u IPv4 338525 0t0 TCP productpage-v1-745ffc55
- [iptables 命令使用说明 - wangchujiang.com](https://wangchujiang.com/linux-command/c/iptables.html)
- [How To List and Delete Iptables Firewall Rules - digitalocean.com](https://www.digitalocean.com/community/tutorials/how-to-list-and-delete-iptables-firewall-rules)
- [一句一句解说 iptables的详细中文手册 - cnblog.com](https://www.cnblogs.com/fhefh/archive/2011/04/04/2005249.html)
-- [常见iptables使用规则场景整理 - aliang.org](https://www.aliang.org/Linux/iptables.html)
\ No newline at end of file
+- [常见iptables使用规则场景整理 - aliang.org](https://www.aliang.org/Linux/iptables.html)
diff --git a/usecases/understanding-serverless.md b/usecases/understanding-serverless.md
index 10ac4d9c7..6235c927a 100644
--- a/usecases/understanding-serverless.md
+++ b/usecases/understanding-serverless.md
@@ -134,4 +134,4 @@ FaaS(Functions as a Service)函数即服务,FaaS是无服务器计算的
**本地测试**
-Serverless应用的本地测试困难是一个很棘手的问题。虽然可以在测试环境下使用各种数据库和消息队列来模拟生产环境,但是对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试,并且serverless应用本身也是分布式的,简单的将无数的FaaS和BaaS组件粘合起来也是有挑战性的。
\ No newline at end of file
+Serverless应用的本地测试困难是一个很棘手的问题。虽然可以在测试环境下使用各种数据库和消息队列来模拟生产环境,但是对于无服务应用的集成或者端到端测试尤其困难,很难在本地模拟应用程序的各种连接,并与性能和缩放的特性结合起来测试,并且serverless应用本身也是分布式的,简单的将无数的FaaS和BaaS组件粘合起来也是有挑战性的。