Kubernetes学习之路1-概念

1.基本概念

Cluster

K8s集群,包含Master节点,Node节点。

Master

Master是k8s集群中主节点,负责应用访问调度,可集群部署,运行多个Master。

Node 

Node归属于Master管理的节点,负责监控汇报容器状态,并根据Master要求管理容器生命周期。

Pod

容器组,可设置标签,K8s运行管理最小单元,一个容器组中运行一个或多个相关联的容器,各个容器之间共享一个网络中的namespace,可通过localhost进行通信,且共享存储。

controller

controller是K8s管理pod的模块,controller定义pod的属性,副本数量,在什么样的Node运行。

   Deployment 可以管理Pod的多个副本,并确保Pod按照期望运行。

   ReplicaSet 使用Deployment会直接创建ReplicaSet来管理副本。

   DaemonSet 用于运行一个Pod场景,通常测试用。

   StatefuleSet能够保证Pod的每个副本在整个生命名称不变,即重启后副本会按照固定的顺序启动,更新,删除。

   Job用于运行完就删除的应用

整体来说用的最多的还是Deployment。

Service

Deployment可以部署多个pod与副本pod,每个pod都有自己的ip,外界访问pod服务,其实是访问service的ip与端口,再自动由Service提供负载均衡。

整体来说,Deployment实现了pod的部署,Service实现了pod的访问。

Namespace

多项目公用K8s集群,如何区分不同项目的Deployment与Pod,即利用Namespace。

Namespace将物理集群划分为多个虚拟集群,每个虚拟集群就是一个Namespace,不同Namespace中资源完全隔离。

K8s默认两个Namespace

default:创建资源不指定,则被放入该Namespace。

kube-system:k8s自己创建的系统资源将被放入这里。

2.K8s架构和集群

Kubernetes学习之路1-概念

 

Kubernetes学习之路1-概念

Master主节点:

API Server:K8S对外的唯一接口,提供HTTP/HTTPS RESTful API,即kubernetes API。所有的请求都需要经过这个接口进行通信。主要处理REST操作以及更新ETCD中的对象。是所有资源增删改查的唯一入口。
Scheduler:资源调度,负责决定将Pod放到哪个Node上运行。Scheduler在调度时会对集群的结构进行分析,当前各个节点的负载,以及应用对高可用、性能等方面的需求。 Controller Manager:负责管理集群各种资源,保证资源处于预期的状态。Controller Manager由多种controller组成,包括replication controller、endpoints controller、namespace controller、serviceaccounts controller等。
ETCD:负责保存k8s 集群的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速地通知k8s相关组件,ETCD一般采用集群方式部署
Pod网络:Pod要能够相互间通信,K8S集群必须部署Pod网络,flannel是其中一种的可选方案。

Node节点:

Kubelet:kubelet是node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet会根据这些信息创建和运行容器,并向master报告运行状态。
Kube-proxy:service在逻辑上代表了后端的多个Pod,外部通过service访问Pod。service接收到请求就需要kube-proxy完成转发到Pod的。每个Node都会运行kube-proxy服务,负责将访问的service的TCP/UDP数据流转发到后端的容器,如果有多个副本,kube-proxy会实现负载均衡,有2种方式:LVS或者Iptables。
Docker Engine:负责节点的容器的管理工作。

创建Pod流程

(1)客户创建请求,可通过API Server Restful API ,可通过kubectl命令行,支持yaml与json.

(2)API接收请求,存储Pod配置数据到etcd。

(3)调度器通过API Server查看未绑定Pod,准备为pod分配主机。

(4)调度预选:调度器用规则过滤一部分不符合的主机,比如Pod指定了所要资源配置等。

(5)调度优选:对符合要求的主机进行打分,调度器考虑整体优化策略,如部署负载等。

(6)确定主机:选择打分最高的主机,进行binding操作,结果存在etcd中。

(7)scheduler调用APIServer的API在etcd中创建一个boundpod对象,描述一个工作节点上绑定运行所有pod信息。运行在各个节点上的kubelet也会定期与etcd同步boundpod信息,一旦发现该工作节点上boundpod没有更新,则调用docker API 创建并启动pod内容器。

参考于CloudMan老师公众号《每天5分钟玩转Kubernetes》https://item.jd.com/26225745440.html