Kubernetes 基础服务与组件(一)
Last updated
Was this helpful?
Last updated
Was this helpful?
Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制/多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复功能、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时kubernetes提供了完善的管理工具,这些工具覆盖了包括开发、测试部署、运维监控在内的各个环节;因此kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台
Service 和Pod如何关联
下面我们逐一的进行说明
Service(服务)是分布式集群架构的核心
,一个Server 对象拥有如下关键特征
:
Service的服务进程是基于Socker对外提供服务,比如 redis、Mysql,web,虽然一个Service通常由多个相关的服务进程来提供服务,每个服务进程都有一个独立的终端地址(IP+Port),但K8s能够让我们通过Service 虚拟集群(IP+Service Port)
连接到指定的Service上,K8s内置负载均衡和故障恢复机制,所以后端进程以及进程导致的服务宕机,都不会影响我们调用服务。Service本身一旦创建就不再变化
,意味着k8s集群中,我们再也不用为了服务的IP地址变来变去的问题而头疼。
Pod概念 Pod运行在node节点中(node是我们自己给定义的),私有云公有云物理机都可以,通常在一个节点上运行几百个Pod;其次每个Pod里运行着一个特殊的被称之为Pause的容器,其它容器则为业务容器,这些业务容器共享
Pause容器的网络栈和Volume挂载卷,因此他们之间的通讯和数据交换更为高效。在设计时我们可以充分利用这一特征,将一组密切相关的服务进程放入同一个Pod中。
容器具有强大的隔离功能,所以把给Service提供服务的进程放到容器中隔离,k8s就设计了Pod对象;
为了建立Service 和Pod间的关联关系,K8s给每个Pod填上一个标签Lable
,给运行MySQL的Pod贴上name=mysql
标签,给运行PHP的Pod贴上name=php
标签,然后给相应的Service定义标签选择器Label Selector,比如MySQL Service的标签选择器的选择条件为name=mysql,意为该Service 要作用于所有包含name=mysql Label的Pod上。这样就巧妙的解决了Service和Pod关联问题。
在K8s集群中,如果您想给Service扩容,只要给它的Pod创建一个RCReplication Controller
即可 定义一个RC文件包括以下3个关键点:
在创建好RC系统自动创建好Pod
后,k8s会通过RC中定义的标签Label
筛选出对应的Pod实例并实时监控其状态和数量,系统会自动的对比实例数量,如果少就利用RC中Pod模板创建1个新的Pod,找个合适的Node去跑,直到Pod实例的数量达到预定目标,过程完成自动化,无需人参与,只需修改RC
中副本的数量。
K8s里master是用来管理和控制
集群的,基本上k8s所有的控制命令都发给它,他负责具体的执行过程,后面我们实战的管理命令 都是在master上执行,如果master宕机
或不可用,那么集群内容器的管理都会失效。
Master节点上的三个关键
进程:
K8s API Server (kube-apiserver):提供了HTTP Rest接口的关键服务进程,是K8s里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程
K8s Controller Manager (kube-controller-manager):Kubernetes里所有的资源对象的自动化控制中心
K8s Scheduler (kube-scheduler):负责资源调度(Pod调度)的进程
另外在Master节点上还需要启动一个etcd
服务,因为Kubernetes里的所有资源对象的数据全部是保存在etcd中。
除Master以外的其它机器统称Node节点,每个Node都会被Master分配一些工作负载Docker容器
,当某个Node宕机了,Master会自动将这个node上工作转移到其他节点上去。
kubelet:负责Pod对应容器的创建、停止等任务,同时与Master节点密切协作,实现集群管理的基本功能
kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
Docker Engine(Docker):Docker引擎,负责本机的容器创建和管理工作。
k8s集群一般是1个master+N个node节点,
master 其中kube-apiserver、kube-controller-manager和kube-scheduler进程在master上运行,实现了整个集群的的资源管理,Pod调度,弹性收缩,安全控制,系统监控和纠错管理功能,并且都是
全自动
。
并不是每个Pod和它里面运行的容器都能映射到一个Service 上,只有那些提供服务(无论是对内还是对外)的一组Pod才会被映射成一个服务。
node Node主要负责工作,真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着 Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡 此文参考 阳明博客 丛宇鸿 i4t|Kubernetes集群实战 以及 李振良 k8s集群入门与进阶 ,感谢三位大佬的分享。