001.Kubernetes简介
一 Kubernetes概述
Kubernetes是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。 Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。 同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。 Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征:- 拥有一个唯一指定的名字
- 拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号
- 能够提供某种远程服务能力
- 被映射到了提供这种服务能力的一组容器应用上
- 目标Pod的定义
- 目标Pod需要运行的副本数量(Replicas)
- 要监控的目标Pod标签(Label)
二 Kubernetes优势、场景、特点
Kubernetes主要优势:- 容器编排
- 轻量级
- 开源
- 弹性伸缩
- 负载均衡
- 快速部署应用
- 快速扩展应用
- 无缝对接新的应用功能
- 节省资源,优化硬件资源的使用
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化, 插件化, 可挂载, 可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
三 Kubetcl的核心概念
3.1 Master
k8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。- Kubernetes API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;
- Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;
- Kubernetes Schedule是负责资源调度(Pod调度)的进程。
3.2 Node
Node是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。关联Master管理节点,拥有名称和IP、系统资源信息。运行docker eninge服务,守护进程kunelet及负载均衡器kube-proxy. 每个Node节点都运行着以下一组关键进程- kubelet:负责对Pod对于的容器的创建、启停等任务,同时与Master节点协作,实现集群管理的基本功能;
- kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件;
- Docker Engine(Docker):Docker引擎,负责本机容器的创建和管理工作。
3.3 Pod
运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通信。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。 Pod有两种类型:普通Pod和静态Pod。后者比较特殊,它并不存在Kubernetes的etcd存储中,而是存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动。普通Pod一旦被创建,就会被放入etcd存储中,随后会被Kubernetes Master调度到摸个具体的Node上进行绑定,随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动起来,在默认情况下,当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重启这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上的所有Pod重新调度到其他节点上。

3.4 Label(标签)
Kubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的Key/Value键值对,其中key与value可自定义。Label可以附加到各种资源对象上,如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod,可以通过Label Selector(标签选择器)查询和筛选资源对象。 一些常用的Label如下:- 版本标签:"release":"stable","release":"canary"......
- 环境标签:"environment":"dev","environment":"qa","environment":"production"
- 架构标签:"tier":"frontend","tier":"backend","tier":"middleware"
- 分区标签:"partition":"customerA","partition":"customerB"
- 质量管控标签:"track":"daily","track":"weekly"
- kube-Controller进程通过资源对象RC上定义Label Selector来筛选要监控的Pod副本的数量,从而实现副本数量始终符合预期设定的全自动控制流程
- kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service岛对应Pod的请求转发路由表,从而实现Service的智能负载均衡
- 通过对某些Node定义特定的Label,并且在Pod定义文件中使用Nodeselector这种标签调度策略,kuber-scheduler进程可以实现Pod”定向调度“的特性。

3.5 Replication Controller
Replication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。 定义RC包括如下几个部分:- Pod期待的副本数(replicas);
- 用于筛选目标Pod的Label Selector;
- 当Pod的副本数小于预期数量时,用于创建Pod的Pod模板(template)。
- 通过定义RC实现Pod的创建过程及副本数量自动控制;
- RC里包括完整的Pod定义模板;
- RC通过Label Selector机制实现副本的自动控制;
- 通过改变RC里的Pod副本数量,可以实现Pod的扩容或缩容功能;
- 通过改变RC的Pod模板的镜像版本,可以实现Pod的滚动升级功能。
3.6 Deployment
Deployment在内部使用了RS来实现目的,Deployment相当于RC的一次升级,其最大的特色为可以随时获知当前Pod的部署进度。 Deployment场景:- 创建一个Deployment对象来生成对应的RS并完成Pod副本的创建过程;
- 检查Deployment的状态来看部署动作是否完成(即副本数量是否达到预期值);
- 更新Deployment以创建新的Pod(比如镜像升级);
- 如果当前Deployment不稳定,则回滚到一个早先Deployment版本;
- 挂起或恢复一个Deployment。
3.7 HPA(Horizontal Pod Autoscaler)
Pod的横向自动扩容,也是Kubernetes的一种资源,通过追踪分析RC控制的所有Pod目标的负载变化情况,来确定是否需要针对性的调整Pod副本数量。 HPA针对Pod负载的两种度量方式:- CPUUtilizationPercentage;
- 应用程序自定义的度量指标。
3.8 Service
Service定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行。 外部系统访问Service的机制: Kubernetes的三种IP:- Node IP:Node节点的IP地址
- Pod IP: Pod的IP地址
- Cluster IP:Service的IP地址
- Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配P地址;
- Cluster IP无法被ping,他没有一个“实体网络对象”来响应;
- Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且他们属于Kubernetes集群这样一个封闭的空间。
- Kubernetes集群之内,Node IP网、Pod IP网与Cluster IP网之间的通信,采用的是Kubernetes自己设计的一种区别于常规的IP路由的编程方式的特殊路由规则。
3.9 Volume(存储卷)
Volume是Pod中能够被多个容器访问的共享目录,Kubernetes中的Volume是定义在Pod上,可以被一个或多个Pod中的容器挂载到某个目录下。Kubernetes中的Volume与Pod的生命周期相同,与容器的生命周期并无直接关系。Kubernetes的Volume支持多种类型的后端驱动,如glusterfs、ceph。 Volume常见类型:- emptyDir:为Pod分配到Node的时候创建。无需指定宿主机的目录文件,为Kubernetes自动分配的目录。
- hostPath:为在Pod上挂载宿主机上的文件或目录。
提示:若不同Node上具有相同配置的Pod可能因为宿主机的目录结构不一致从而导致访问结构不一致。
- NFS:NFS网络文件系统;
- iSCSI:iSCSI存储设备;
- flocker;
- rbd:
- glusterfs。
3.10 Namespace(命名空间)
Namespace用于实现多租户的资源隔离,可将集群内部的资源对象分配到不同的Namespace中,形成逻辑上的不同项目、小组或用户组,便于不同的Namespace在共享使用整个集群的资源的同时还能被分别管理。 提示:Kubernetes集群在启动后,会创建一个名为“default”的Namespace,且默认情况下Kubernetes的相关资源,如Pod、RC、Service都将被系统创建到此默认名为default的Namespace中。3.11 Annotation(注释)
Annotation类似Label,也使用key/value形式进行定义。Annotation是用户任意定义的“附加信息”,如电话号码、负责人、网站等等。四 Kubernetes 组件简述
Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件: Kubernetes API Server 作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。 Kubernetes Scheduler 为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。 Kubernetes Controller 负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。 Replication Controller 管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。 Node Controller 管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。 Namespace Controller 管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。 Service Controller 管理维护Service,提供负载以及服务代理。 EndPoints Controller 管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。 Service Account Controller 管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。 Persistent Volume Controller 管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。 Daemon Set Controller 管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。 Deployment Controller 管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。 Job Controller 管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目 Pod Autoscaler Controller 实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。 参考:https://blog.csdn.net/qq_35254726/article/details/54233781
更多精彩