Kubernetes中的大部分概念,如Node、Pod、Replication Controller、Service等都可以看作一种资源对象,而它们都可以通过kubectl或API编程调用,进而执行增删改查操作,并将状态保存在etcd。
我们可以将kubernetes看作高度自动化的资源控制系统,它通过跟踪对比etcd库里保存的“资源期望状态”与当前环境的“世纪资源状态”的差异实现自动控制和自动纠错的高级功能。
Service
在Kubernetes中,Service是分布式集群架构的核心。一个Service对象的关键特征包括:
唯一指定的名字
一个虚拟IP(ClusterIP、Service IP或VIP)和端口号
提供某种远程服务能力
将服务映射到一组容器应用
Service的服务进程目前都是基于Socket通信方式对外提供服务。通常一个Service需要多个相关服务进程提供服务,而每个服务进程都有一个独立的Endpoint(IP+Port),kubernetes能够通过Service(虚拟ClusterIP+Service Port)连接到指定的Service。
这样,就不必关心后端到底有多少服务进程,发生故障如何处理。当Service创建后,服务的IP地址就不会改变。
同时,Kubernetes通过Pod对象将为Service提供服务的进程封装到容器进行隔离。
为了建立Service与Pod之间的关联,kubernetes会为每个Pod贴上标签,然后给相应的Service定义标签选择器(Label Selector)。
Pod
Pod运行在节点(Node)中,节点可以是物理机,也可以是虚拟机。
每个Pod里运行一个特殊的称为Pause的容器,其他容器为业务容器。
业务容器共享Pause容器的网络栈和Volume挂载卷。
并不是每个Pod和它里面运行的容器都会映射到一个Service,只有提供服务的一组Pod才会映射到服务。
集群
kubernetes将集群中的机器划分为一个Master节点和一群工作节点(Node)。
Master节点运行着与集群管理相关的进程如kube-apiserver、kube-controller-manager、kube-scheduler,从而实现整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能。
Node作为集群的工作节点,运行真正的应用程序,包括kubelet、kube-proxy服务进程,负责Pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。
扩容与升级
在Kubernetes中只需要为扩容的Service关联的Pod创建一个Replication Controller(简称RC)即可。
在一个RC定义文件中包括:
目标Pod定义
目标Pod需要运行的副本数量(Replicas)
要监控的目标Pod的标签(Label)