Files
kuboard-press/learning/k8s-basics/k8s-core-concepts.md
huanqing.shao 6ffe11aef3 ConfigMap
2019-08-29 16:25:04 +08:00

108 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
description: 以 gif 动图的形式形象的描述 Kubernetes 核心概念。本文将会简单介绍Kubernetes的核心概念。因为这些定义可以在Kubernetes的文档中找到所以文章也会避免用大段的枯燥的文字介绍。相反我们会使用一些图表其中一些是动画和示例来解释这些概念。我们发现一些概念比如Service如果没有图表的辅助就很难全面地理解。在合适的地方我们也会提供Kubernetes文档的链接以便读者深入学习。
---
# 6. 复习Kubernetes核心概念
> 转载信息:
>
> [译文链接](http://www.dockone.io/article/932) 译者:崔婧雯
>
> [原文链接](http://omerio.com/2015/12/18/learn-the-kubernetes-key-concepts-in-10-minutes/) 作者Omer Dawelbeit
本文将会简单介绍Kubernetes的核心概念。因为这些定义可以在Kubernetes的文档中找到所以文章也会避免用大段的枯燥的文字介绍。相反我们会使用一些图表其中一些是动画和示例来解释这些概念。我们发现一些概念比如Service如果没有图表的辅助就很难全面地理解。在合适的地方我们也会提供Kubernetes文档的链接以便读者深入学习。
## 什么是Kubernetes
Kubernetesk8s是自动化容器操作的开源平台这些操作包括部署调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker还支持Rocket这是另一种容器技术。
使用Kubernetes可以
* 自动化容器的部署和复制
* 随时扩展或收缩容器规模
* 将容器组织成组,并且提供容器间的负载均衡
* 很容易地升级应用程序容器的新版本
* 提供容器弹性,如果容器失效就替换它,等等...
## 集群
集群是一组节点这些节点可以是物理服务器或者虚拟机之上安装了Kubernetes平台。下图展示这样的集群。注意该图为了强调核心概念有所简化。这里可以看到一个典型的Kubernetes架构图。
![1.png](./k8s-core-concepts.assets/d7ce07842371eab180725bab5164ec17.png)
上图可以看到如下组件使用特别的图标表示Service和Label
* PodContainer容器
* Label(![label](./k8s-core-concepts.assets/label.png))(标签)
* Replication Controller复制控制器
* Service![enter image description here](./k8s-core-concepts.assets/service.png))(服务)
* Node节点
* Kubernetes MasterKubernetes主节点
## Pod
[Pod](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/)上图绿色方框安排在节点上包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间可以使用localhost互相通信。Pod是短暂的不是持续性实体。你可能会有这些问题
- 如果Pod是短暂的那么我怎么才能持久化容器数据使其能够跨重启而存在呢 是的Kubernetes支持 ***卷*** 的概念,因此可以使用持久化的卷类型。
- 是否手动创建Pod如果想要创建同一个容器的多份拷贝需要一个个分别创建出来么可以手动创建单个Pod但是也可以使用Replication Controller使用Pod模板创建出多份拷贝下文会详细介绍。
- 如果Pod是短暂的那么重启时IP地址可能会改变那么怎么才能从前端容器正确可靠地指向后台容器呢这时可以使用Service下文会详细介绍。
## Label
正如图所示一些Pod有Label![enter image description here](./k8s-core-concepts.assets/label-20190731101545553.png)。一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。比如,你可能创建了一个"tier"和“app”标签通过Label**tier=frontend, app=myapp**来标记前端Pod容器使用Label**tier=backend, app=myapp**标记后台Pod。然后可以使用 [Selectors](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) 选择带有特定Label的Pod并且将Service或者Replication Controller应用到上面。
## Replication Controller
*是否手动创建Pod如果想要创建同一个容器的多份拷贝需要一个个分别创建出来么能否将Pods划到逻辑组里*
Replication Controller确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Replication Controller并且指定3个副本它会创建3个Pod并且持续监控它们。如果某个Pod不响应那么Replication Controller会替换它保持总数为3.如下面的动画所示:
![2.gif](./k8s-core-concepts.assets/03d07039d9fc80c0f692d6176f65936e.gif)
如果之前不响应的Pod恢复了现在就有4个Pod了那么Replication Controller会将其中一个终止保持总数为3。如果在运行中将副本总数改为5Replication Controller会立刻启动2个新Pod保证总数为5。还可以按照这样的方式缩小Pod这个特性在执行滚动 [升级](https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#rolling_updates) 时很有用。
当创建Replication Controller时需要指定两个东西
1. Pod模板用来创建Pod副本的模板
2. LabelReplication Controller需要监控的Pod的标签。现在已经创建了Pod的一些副本那么在这些副本上如何均衡负载呢我们需要的是Service。
::: tip
最新 Kubernetes 版本里,推荐使用 Deployment
:::
## Service
*如果Pods是短暂的那么重启时IP地址可能会改变怎么才能从前端容器正确可靠地指向后台容器呢*
[Service](https://kubernetes.io/docs/concepts/services-networking/service/) **抽象**
现在假定有2个后台Pod并且定义后台Service的名称为backend-servicelable选择器为。 的Service会完成如下两件重要的事情
- 会为Service创建一个本地集群的DNS入口因此前端Pod只需要DNS查找主机名为 backend-service就能够解析出前端应用程序可用的IP地址。
- 现在前端已经得到了后台服务的IP地址但是它应该访问2个后台Pod的哪一个呢Service在这2个后台Pod之间提供透明的负载均衡会将请求分发给其中的任意一个如下面的动画所示。通过每个Node上运行的代理kube-proxy完成。
下述动画展示了Service的功能。注意该图作了很多简化。如果不进入网络配置那么达到透明的负载均衡目标所涉及的底层网络和路由相对先进。如果有兴趣有更深入的介绍。
![3.gif](./k8s-core-concepts.assets/e7a273fcdc03d2417b354b60c253552f.gif)
每个节点都运行如下Kubernetes关键组件
- Kubelet是主节点代理。
- Kube-proxyService使用其将链接路由到Pod如上文所述。
- Docker或RocketKubernetes使用的容器技术来创建容器。
### Kubernetes Master
集群拥有一个Kubernetes Master紫色方框。Kubernetes Master提供集群的独特视角并且拥有一系列组件比如Kubernetes API Server。API Server提供可以用来和集群交互的REST端点。master节点包括用来创建和复制Pod的Replication Controller。