Skip to content

Commit

Permalink
完善文档
Browse files Browse the repository at this point in the history
  • Loading branch information
ist0ne committed Jan 18, 2019
1 parent 589a43d commit 6385efe
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 96 deletions.
8 changes: 4 additions & 4 deletions 2.kubernetes基础/Kubernetes基础.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Kubernetes 架构总的来讲分为两个平面,即控制平面(Kubernetes M

以上这些组件的运行原理在进阶篇中会详细讲述。

## 2.3 Kubernetes解决了什么问题
## 2.3 Kubernetes 解决了什么问题

编排?调度?容器云?还是集群管理?我个人觉得都是,在不同的阶段,Kubernetes 的作用也是不一样的。我们希望 Kubernetes 提供负载均衡、水平扩展、监控、备份、灾难恢复等一系列运维能力。

Expand All @@ -40,7 +40,7 @@ Kubernetes 项目最主要的设计思想是,从更宏观的角度,以统一

在常规环境下,这些应用往往会被直接部署在同一台机器上,通过 Localhost 通信,通过本地磁盘上的文件进行交互。而在 Kubernetes 项目中,这些容器则会被划分为一个“Pod”,Pod 里的容器共享同一个 Network Namespace、同一组数据卷,从而达到高效率交换信息的目的。

Pod 是 Kubernetes 项目中最基础的一个对象,下一张中我会重中对 Pod 做更进一步地阐述。
Pod 是 Kubernetes 项目中最基础的一个对象,下一章中我会重中对 Pod 做更进一步地阐述。

而对于另外一种更为常见的需求,比如 Web 应用与数据库之间的访问关系,Kubernetes 项目则提供了一种叫作“Service”的服务。像这样的两个应用,往往故意不部署在同一台机器上,这样即使 Web 应用所在的机器宕机了,数据库也完全不受影响。可是,我们知道,对于一个容器来说,它的 IP 地址等信息不是固定的,那么 Web 应用又怎么找到数据库容器的 Pod 呢?

Expand Down Expand Up @@ -190,6 +190,6 @@ kubectl配置文件 ~/.kube/config

## 2.6 小结

本章中我向你讲述了 Kubernetes 是什么,Kubernetes 的架构,以及它解决了什么问题。在工作中,我们的目标是帮我们的应用部署到 Kubernetes 容器云中,在部署我们的应用时,首先遇到了应用间亲密关系的难题,于是就扩展到了 Pod;有了 Pod 之后,我们希望能一次启动多个应用的实例,这样就需要 Deployment 这个 Pod 的多实例管理器;而有了这样一组相同的 Pod 后,我们又需要通过一个固定的 IP 地址和端口以负载均衡的方式访问它,于是就有了 Service。在以后的章节中我会给你重中讲解 Pod、Deployment、Service 这些资源对象。
本章中我向你讲述了 Kubernetes 是什么,Kubernetes 的架构,以及它解决了什么问题。在工作中,我们的目标是把我们的应用部署到 Kubernetes 容器云中,在部署应用时,首先遇到了应用间亲密关系的难题,于是就扩展到了 Pod;有了 Pod 之后,我们希望能一次启动多个应用的实例,这样就需要 Deployment 这个 Pod 的多实例管理器;而有了这样一组相同的 Pod 后,我们又需要通过一个固定的 IP 地址和端口以负载均衡的方式访问它,于是就有了 Service。在以后的章节中我会给你详细讲解 Pod、Deployment、Service 这些资源对象。

最后我介绍了如何在我们的客户端上搭建一个用于测试的 Kubernetes 集群。并通过Dashboard、kubectl访问了我们搭建的集群。在下一章我会着重给你讲解如何在 Kubernetes 集群中部署、升级我们的应用。
最后我演示了如何在我们的客户端上搭建一个用于测试的 Kubernetes 集群。并通过Dashboard、kubectl访问了我们搭建的集群。在下一章我会着重给你讲解如何在 Kubernetes 集群中部署、升级我们的应用。
3 changes: 3 additions & 0 deletions 3.服务编排/deployments/hello-deployment-v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ spec:
mountPath: "/etc/nginx/conf.d"
- name: hello
image: hub.xin.com/example/hello:v2
env:
- name: UWSGI_CHEAPER
value: "5"
ports:
- name: tcp
containerPort: 8000
Expand Down
4 changes: 3 additions & 1 deletion 3.服务编排/服务编排.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,6 @@ Deployment 与它的 ReplicaSet 以及 Pod 的关系,实际上是一种“层
kubectl apply -f deployments/hello-deployment.yaml
kubectl get deployment

## 3.4 小结
## 3.4 小结

本章从 Kubernetes 的最小单位 Pod 开始讲起,为了解决服务编排时两个服务间亲密关系,Kubernetes 引入了 Pod 这个逻辑概念,定义在同一个 Pod 里的容器共享网络空间、存储卷,并且一起被调度。我们解决了服务间的亲密关系后还需要为服务运行多个副本同时对外提供服务,于是引入了 ReplicaSet 这个控制器。为了解决服务滚动升级的问题,引入了 Deployment 这个控制 ReplicaSet 的控制器。通过 Deployment 这个控制器我们就能够轻松的将我们应用部署到 Kubernetes 集群上,并对他进行滚动升级。那我们怎么访问刚刚我们部署的服务呢?下一章我讲向你讲述如何暴露我们刚刚部署的服务供其他服务访问。
16 changes: 12 additions & 4 deletions 4.服务发现/服务发现.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
# 服务发现

## Service
## 4.1 Service

### 为什么需要 Service

集群中的每一个 Pod 都可以通过 Pod IP 直接访问,但是正如我们所看到的,Kubernetes 中的 Pod 是有生命周期的,尤其是被 ReplicaSet、Deployment 等对象管理的 Pod,随时都有可能被销毁和创建。这就会出现一个问题,当 Kuberentes 集群中的一些 Pod 需要为另外的一些 Pod 提供服务时,我们如何为这组 Pod 建立一个抽象让另一组 Pod 找到它。这抽象在 Kubernetes 中其实就是 Service,每一个 Service 都是一组 Pod 的逻辑集合和访问方式的抽象。即 Service 至少帮我们解决了如下两个问题
集群中的每一个 Pod 都可以通过 Pod IP 直接访问,但是正如我们所看到的,Kubernetes 中的 Pod 是有生命周期的,尤其是被 ReplicaSet、Deployment 等对象管理的 Pod,随时都有可能被销毁和创建。这就会出现一个问题,当 Kuberentes 集群中的一些 Pod 需要为另外的一些 Pod 提供服务时,我们如何为这组 Pod 建立一个抽象让另一组 Pod 找到它。这抽象在 Kubernetes 中其实就是 Service,每一个 Service 都是一组 Pod 的逻辑集合和访问方式的抽象。即 Service 至少帮我们解决了如下问题

- 让一组 Pod 发现另一组 Pod
- 对外暴露部署的应用
- 为一组 Pod 提供负载均衡功能
- 监控 Pod 中启动容器的健康状况,不健康踢除
- 将服务名注册到 DNS 中去

![Pods to Pods](https://github.com/findsec-cn/k100/raw/master/docs/pods-to-pods.jpg)

Expand Down Expand Up @@ -44,8 +46,14 @@ Kubernetes 中的 Service 对象将一组 Pod 以统一的形式对外暴露成
minikube ssh
curl https://127.0.0.1:30080

## CoreDNS
## 4.2 CoreDNS

### CoreDNS 服务名解析

在 Kubernetes 集群中,A 服务访问 B 服务,如果 B 服务是一个还未部署的服务,这时,我们是不知道 B 服务的 ClusterIP 是什么的?那我在编写 A 服务的代码时,如何描述 B 服务呢?其实,我们可以给这个服务定义一个名字,当 B 服务部署时自动解析这个名字就可以了。这就是 Kubernetes 内部的服务发现机制。Service 被分配了 ClusterIP 后,还会将自己的服务名注册到 DNS 中,这样其他服务就可以通过这个服务名访问到这个服务了。如果 A、B 两个服务在相同的命名空间,那么他们通过 svc_name 就可以相互访问了(如上例:hello),如果是在不同的命名空间还需要加上命名空间的名字,如 svc_name.namespace(如上例:hello.default),或者使用完整域名去访问,一般是 svc_name.namespace.svc.cluster.local(如上例:hello.default.svc.cluster.local)。

## 4.3 小结

本章服务发现相关的知识,我向你讲解了为什么需要 Service 这个资源,以及如何将 Service 暴露出来。Service 为服务间的相互访问提供了一个固定的端点,也为多个 Pod 提供了负载均衡能力,并且他能够监控 Pod 内容器的健康状况,当容器出错时将其从负载均衡后面摘除。另外 Service 将服务名注册到 DNS 中,以便其他服务发现此服务。

下一章是一节实践课,我们利用前面学到的知识,将一个微服务部署到 Kubernetes 集群中。
6 changes: 5 additions & 1 deletion 5.项目实践/项目实践.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

![微服务架构](https://github.com/findsec-cn/k100/raw/master/docs/micoservice.jpg)

## 项目部署
## 5.1 项目部署

### 部署

Expand Down Expand Up @@ -45,3 +45,7 @@
### 使用Token访问接口成功返回

curl --cacert ./ca.pem -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InVzZXJAZXhhbXBsZS5jb20iLCJleHAiOjE1NDcyNzg4NjcsImlhdCI6MTU0NzAxOTY2NywiaXNzIjoiYXV0aC5zZXJ2aWNlIiwic3ViIjoidXNlciJ9.bT3flMe_VywoFkGCFt08Tw0fxytKZblj8lBHNVLYC6U' https://127.0.0.1:30443/secure

## 5.2 小结

自此,Kubernetes 技术实践--基础篇就讲完了,在基础篇里我给你讲述如何将应用打包成镜像并上传到公有仓库里;如何从公有仓库下载并启动这个镜像;并向你讲述了 Kubernetes 架构及各个组件的作用;如何搭建测试目的的 Kubernetes 集群;如何将应用部署到集群上,并对它进行滚动更新。基础篇的目的是带领大家部署一个服务到 Kubernetes 集群上,在接下来的进阶篇中主要给大家讲解 Kubernetes 如何在企业环境中落到,主要涉及 Kubernetes 生产环境使用的高可用性集群改如何搭建;如何部署企业级的私有仓库;如何使用 helm 部署应用;如何通过CI/CD 自动化我们的部署过程;灰度发布该如何做;自动扩缩容改如何配置;网络该如何选型;持久换存储该如何部署、使用;集群及上面的服务该如何监控、报警;日志该如何收集、分析;还会涉及Service Mesh服务网格的一些知识,比如:如何进行流量路由,如何进行服务降级,如何进行分布式链路追踪等等。大家可以加入QQ 群(774607973),我们会第一时间在群里发布进阶篇相关的信息,敬请期待!谢谢大家!
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@
## 适宜人群

- 了解 Docker,希望能进入 Kubernetes 的各领域工程师
- 正在或即将在生产环境使用 Kubernetes 的后端开发工程师
- 需要维护在公司落地 Kubernetes 的运维工程师
- 正在或即将在生产环境使用 Kubernetes 的开发工程师
- 需要维护 Kubernetes 的运维工程师
Binary file modified docs/Kubernetes技术实践(基础篇).pdf
Binary file not shown.
84 changes: 0 additions & 84 deletions docs/README.md

This file was deleted.

0 comments on commit 6385efe

Please sign in to comment.