Kubernetes入门概念

来源:互联网 发布:linux 拷贝整个文件夹 编辑:程序博客网 时间:2024/06/05 03:38

 这是在k8s1.40版时的入门学习笔记。根据k8s的tutorials和user guide总结的。本文主要涉及到到k8s操作的一些基本术语概念。不涉及命令行细则。

重要概念

Master/Node

 Master处理集群的活动,控制Node工作,如应用的调度,维持应用的状态,增加应用实例规模更新应用等。
 Node是是一台虚拟机或者真机,主要用于完成具体的支持应用运行的任务。每个Node至少需要以下两个部分:
- 容器,负责将应用容器化,如Docker、rkt
- Kubelet,用于在k8s中Master和Node通信以及管理本机上的pod和容器的工具。

Pod

 在Docker中,我们将应用部署在容器中,而在k8s中,我们还应将这些容器放在Pod中,一方面,Pod是k8s中调度的最小单位,即我们在k8s中是通过管理Pod来管理容器的,另一方面,Pod对于容器(应用)来说,扮演了逻辑主机(logical-host)的角色。此外,一个Pod中可以放置多个容器,一般的,我们会将紧耦合的应用容器放在同一个Pod中,在同一个Pod中的容器有同样的生命周期。一个Pod可能包含下面的内容:
- 一个或者多个容器,如Docker
- 共享存储部分,如Volume
- 一个集群唯一的网络地址

Label/Label Selector

 Label是一个键值对,用来标识资源,如在创建Pod时,可以为其添加一个Label,在以后的部署操作中,可以通过Label Selector指明对应Label从而操作资源。

Deployment

 前面说到我们通过将容器放入Pod来部署应用,可是如何设置Pod的冗余数(增加应用实例)或者更新我们的Pod(应用)呢?这就需要使用Deployment了,通常,我们是通过定义Deployment来部署、更新我们的Pods。

Service

 如果我们通过Deployment部署了一些Pod,并且通过在多个不同的Pod中有一些依赖的服务,如Pod-A作为前端应用依赖Pod-B的后端应用,那么在细节上有一些值得思考的地方:
- 每个Pod都有一个IP,但是在Pod都可能是暂时的(可能被重启),如A通过IP连接B,在B重启后IP变化,A怎么办。
- 同类Pod拥有不同的IP,那么是不是需要做附在均衡?
 这时候就需要Service,Service是一个抽象层,通过Label Selector将有特定Label的Pod定义成一个Service,此时,这些Pods在逻辑上隶属于同一个Service,这样的好处是,他们获得了一个固定的外部IP(相对于Service内部的Pod而言),因而这些Pod就算是重启、在新的机器上部署,只要有这个特定的Label,对外他们的IP是固定的,这就解决了问题1,对于问题2,Service是提供了一个负载均衡的功能,此外,Service还有一个服务发现的功能,当我们通过Deployment增加或者更新一个Pod时,其实就涉及到新的Pod加入到这个Service中来,这样的场景Service依然能够处理。

整体架构

 本文涉及到的概念关系如下图所示,参考k8s官网,有所增加:
k8s架构

 如图所示,k8s主要是一个用来管理集群的工具。在搭建好集群后,一般会做的事情就是,部署应用、定义服务、增加应用实例、更新应用。基本上就是,我们通过Deployment定义应用,然后Master会通过管理调度在Node节点上起一些Pod,Pod中会有Docker容器,容器中是我们真正部署的应用,然后我们需要通过设置Service来管理来定义这些Pod。在这之后,我们根据需要通过Deployment来增加应用实例或者更新应用,这个时候,因为他们都属于同一个Service(相同的Label),这之间会出现的负载均衡、服务发现的问题都会由Service替我们解决。

0 0