Kubernetes笔记(一)Kubernetes入门
Kubernetes这个名字起源于古希腊,是舵手的意思。并且,Kubernetes是第一个将“一切以服务(Service)为中心,一切围绕服务运转”作为指导思想的创新型产品,它的功能和架构设计自始至终都遵循了这一指导思想,构建在Kubernetes上的系统不仅可以独立运行在物理机、虚拟机或者企业私有云上,也可以托管在公有云中。Kubernetes的另一个亮点是自动化,在Kubernetes的解决方案中,一个服务可以自我扩展、自我诊断,并且容易升级。
1.Kubernetes是什么
Kubernetes是一个全新的基于容器技术的分布式架构领先方案,对标dokcer swarm。Kubernetes是谷歌Borg的一个开源版本,而Borg是谷歌内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。
Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展到资源自动调度机制,以及多粒度的资源配额管理能力。
Kubernetes中的一些基本知识:
- 服务(Service)
- 容器(Container)
- 集群管理
- Pod
- RC(Replication Controller)
(1)服务
服务(Service)是分布式集群架构的核心,一个Service对象拥有如下特征:
- 有一个唯一指定的名字
- 由一个虚拟IP和端口号
- 能提供某种远程服务能力
- 被映射到提供这种服务能力的一组容器应用上
(2)容器
容器提供了隔离功能,所以有必要把为Service提供服务的这组进程放入容器中进行隔离。为此,Kubernetes设计了Pod对象,将每个服务进程包装到相应的Pod中,使其成为Pod中运行的一个容器。
(3)集群管理
Kubernetes将集群中的机器划分为一个Master节点和一群工作节点。其中,在Master节点上运行着集群管理的相关一组进程,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且全为自动完成。
(4)Pod
Pod运行在我们称之为节点(Node)的环境中,这个节点可以是物理机,也可以是私有云或者公有云中的一个虚拟机。通常在一个节点上运行几百个Pod;其次,每个Pod里运行着一个特殊的被称之为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷。
(5)RC
在Kubernetes集群中,需为扩容Service关联的Pod创建一个Replication Controller(RC)。一个RC定义文件包括:
- 目标Pod的定义
- 目标Pod需运行的副本数量(Replicas)
- 要监控的目标Pod的标签(Label)
在创建好RC后,Kubernetes会通过RC中定义的Label筛选出对应的Pod实例并实时监控其状态和数量,如果实例数量少于定义副本数量(Replicas)则会根据RC中定义的Pod模板来创建一个新的Pod,然后将此Pod调度到合适的Node上启动运行,只到Pod实例的数量达到预定目标。整个过程是自动化的。
2.Kubernetes的优点
(1)减轻复杂系统开发和运维的负担。
从前十几人的团队分工协作才能实现和运维的分布式系统,在使用Kubuernetes解决方案后,只需一个小团队就能轻松应对,减轻了人力,提高了效率。
(2)Kubernetes采用微服务架构。
微服务架构使得每个服务都可以由专门开发团队来开发,每个微服务独立开发、升级、扩展,因此系统具备很高的稳定性和快速迭代能力,更有利于解决复杂业务系统架构问题。
(3)Kubernetes系统架构具备强大的横向扩容能力。
一个Kubernetes集群可以从只包含几个Node的小集群平滑扩展到拥有上百个Node的大规模集群,利用Kubernetes提供的工具,可以在线完成集群扩容。在硬件或公有云资源的支持下,系统能承受大量用户并发访问所带来的压力。
3.Kubernetes基本概念和术语
(1)Master
Kubernetes里Master指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责整个集群的管理和控制。
Master节点上运行的关键进程:
- Kubernetes API Server(kube-apiserver),提供了HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程。
- Kubernetes Controller Manager(kube-controller-manager),Kubernetes里所有资源对象的自动化控制中心。
- Kubernetes Scheduler(kube-scheduler),负责资源调度(Pod调度)的进程。
(2)Node
和Master一样,Node节点可以是一台物理主机,也可以是一台虚拟机。Node节点是Kubernetes集群中的工作负载节点,每个Node都被Master分配一些工作负载,当某个Node宕机时,其上工作的负载会被Master自动转移到其他节点。
每个Node节点上运行的关键进程:
- Kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
- Kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
- Docker Engine(docker):Docker引擎,负责本机容器创建和管理工作。
Node节点可以在运行期间动态增加到Kubernetes集群中,在默认情况下kubelet会向Master注册自己,这也是Kubernetes推荐的Node管理方式。一旦Node被纳入集群管理范围,kubelet进程会定时向Master节点汇报自身的情报。某个Node超过指定时间不上报信息,会被Master判定为“失联”,Node状态被标记为不可用(Not Ready),随后Master会触发“工作负载大转移”自动流程。
(3)Pod
Pod是Kubernetes最基本的概念,每个Pod都有一个特殊的被称为“根容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或多个紧密相关的用户业务容器。
在Kubernetes里,一个Pod里的容器与另外主机上的Pod容器能够直接通信。
(4)Label
Label相当于“标签”,给某个资源对象定义一个Label,相当于给它打了一个标签,我们可以通过Label Selector查询和筛选拥有某些Label的资源对象,Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制。
(5)Replication Controller
RC定义了Pod副本数量的期望就能够符合预期值的期望场景,RC的定义包括以下部分:
- Pod期待的副本数(replicas)
- 用于筛选目标Pod的Label Selector
- 当Pod副本数量小于预期数量的时候,用于创建新的Pod的Pod模板(temeplata)
RC的一些特性和作用:
- 大多数情况,通过定义RC实现Pod的创建过程及副本数量的自动控制
- RC里包括完整的Pod定义模板
- RC通过Label Selector机制实现对Pod副本的自动控制
- 通过改变RC里Pod副本数量,可以实现Pod扩容或缩容功能
- 通过改变RC里Pod模板中的镜像版本,可以实现Pod的滚动升级功能
(6)Deployment
Deployment相对于RC的优势是我们可以随时知道当前Pod“部署”的进度,更有利于我们解决Pod编排问题。
(7)Horizontal Pod Autoscaler
简称HPA,Pod横向自动扩容。通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性地调整目标Pod的副本数。
HPA可以有两种方式作为Pod负载的度量标准:
- CPUUtilizationPercentage
- 应用程序自定义的度量指标
(8)服务
Kubernetes的Service定义了一个服务的访问入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,Service与其后端Pod副本集群之间则通过Label Selector来实现“无缝对接”,RC保证Service的服务能力和服务质量始终处于预期的标准。
我们的系统由多个提供不同业务能力而又彼此独立的微服务单元所组成,服务之间通过TCP/IP进行通信,从而形成强大而灵活的弹性网络,拥有分布式能力、弹性扩展能力、容错能力。
每个Pod都会被分配一个单独的IP地址,每个Pod都提供了独立的Endpoint(Pod IP+ContainerPort)以被客户端访问。
多个Pod副本组成的集群服务如何通过客户端访问?通过部署负载均衡器,为这组Pod开启一个对外服务端口,并将Pod的Endpoint列表加入对外服务端口的转发列表中,客户端通过负载均衡器的对外IP+服务端口来访问服务。
更多推荐



所有评论(0)