Kubernetes - 什么是Kubernetes

本文摘自书籍《Kubernetes实战》

云计算

从狭义上讲,指IT基础设施的交互和使用模式,即通过网络以及按需、易扩展的方式获取所需资源。广义上讲,指服务的交互和使用模式,通过网络以按需、易扩展的方式获取所需服务。提供资源的网络被形象的比喻成“云”,其计算能力通常是由分布式的大规模集群和虚拟化几首提供的。而“云”中的计算资源在用户看来是可以扩展的,并且可以随时获取、按需使用的。根据云计算提供的服务资源的类型将其划分为以下三类:

  • 基础设施即服务(Infrastructure-as-a-Service, IaaS)
    通过虚拟化和分布式存储技术,实现了对包括服务器、存储设备、网络设备等各种物理资源的抽象,从而形成了一个可扩展、可按需分配的虚拟资源池。例如:虚拟机、磁盘等。
  • 平台即服务(Platform-as-aService, PaaS)
    为开发者提供了应用的开发环境和运行环境,将开发者从繁琐的IT环境管理中解放出来。自动化应用的部署和运维,使开发者能够集中精力与应用业务开发,极大地提升了应用的开发效率。Google的GAE是PaaS的鼻祖,而Kubernetes可以说实在PaaS的定义范畴内。随着PaaS的发展,PaaS技术也越见成熟。在docker风靡时,利用docker的特性构建出了许多PaaS,比如Kubernetes
  • 软件即服务(Software-as-a-Service, SaaS)
    主要面向软件的中断用户。一般来说,SaaS将软件功能以特定的接口形式发布,终端用户通过网路浏览器就可以使用软件功能。终端用户将只关注软件业务的使用。SaaS是应用最广的云计算模式,比如我们使用的邮箱系统和各种管理系统都可以认为是SaaS的范畴。
Docker

链接-了解Docker

什么是Kubernetes

Kubernetes是Google开元的容器集群管理系统。它构建在Docker技术之上,为容器化应用提供资源调度、部署运行、服务发现、扩容缩容等一整套功能,本质上可看作是基于容器技术的Micro-PaaS平台。

特性
  • 强大容器编排能力
    包括容器组合、标签选择和服务发现等。
  • 轻量级
    Kubernetes遵循微服务架构理论,整个系统划分出各个功能独立的组件,组件间边界清晰,部署简单,可轻易的运行在各种系统和环境中。同时插件化使得Kubernetes可以非常方便的进行扩展和替换。
  • 开放开源
Kubernetes核心概念
Pod

Pod是若干容器的组合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命名空间、IP地址和端口,相互之间能够通过localhost来发现和通信。另外,这些容器还可以共享一块数据卷空间。在Kubernetes中创建、调度和管理的最小单位是Pod,而不是容器,Pod通过提供更高层次的抽象,提供了更加灵活的部署和管理模式。

Replication Controller(RC)

用来控制管理Pod副本(Replica,或者成为实例),RC确保任何时候Kubernetes集群中有指定数量的Pod副本在运行。若少于指定数量的Pod副本,RC会启动新的Pod副本,反之会杀死多余副本以保证数量。另外,RC是弹性伸缩、滚动升级的实现核心。

Service

是真实应用服务的抽象,定义了Pod的逻辑集合和访问这个Pod集合的策略。Service将代理Pod对外表现为一个单一访问接口,外部不需要链接后端Pod如何运行,这给扩展和维护带来了好处,提供了一套简化的服务代理和发现机制。

Label

是用于区分Pod、Service、RC的Key/Value对,实际上,Kubernetes中的任意API对象都可以通过Label进行标识。每个API对象可以有多个Label,但是每个Label的Key只能对应一个Value。Label是Service和RC运行的基础,他们都通过Label来关联Pod,相比于强绑定模型,这是一种非常好的松耦合关系。

Node

Kubernetes属于主从分布式集群架构,Node进行 并管理容器,作为Kubernetes的操作但愿,用来分配给Pod进行绑定,Pod最终运行在Node上,Node可以认为是Pod的宿主机。

组件
etcd

Kubernetes使用Etcd作为存储中间件,Etcd是一个高可用的键值存储系统,灵感来源于ZooKeeper和Doozer,通过Raft一致性算法处理日志复制以保证强一致性。Kubernetes使用Etcd作为系统的配置存储中心,Kubernetes中的重要数据都是持久化在Etcd中的,这是的Kubernetes架构的各个组件属于无状态,可以更简单的实施分布式集群部署。

kube-apiserver(Kubernetes API Service)

作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以REST API接口方式提供给外部客户和内部组件调用。它维护的REST对象将持久化到Etcd中。

kube-scheduler

负责集群的资源调度,为新建的Pod分配及其。这部分工作分出来成为一个组件,意味着可以很方便的替换成其他的调度器。

kube-controller-manager

负责执行各种控制器,目前已经实现很多控制器来保证Kubernetes的正常运行,主要包含控制器如下:

控制器 说明
Replication Controller 管理维护RC,关联RC和Pod,保证RC定义的副本数量与实际运行Pod的数量是一致的。
Node Controller 管理维护Node,定期减产Node的健康状况,标识出实效的Node。
Namespace Controller 管理维护Namespace,定期清理无效的Namespace,包括Namespace下的API对象,想Pod、Service和Secret等。
Service Controller 管理维护Service,为LoadBalancer类型的Service创建管理负载均衡器。
Endpoint Controller 管理维护Endpoints,关联Service和Pod,创建Endpoint的作为Service的后端,当Pod发生变化时,实时刷新Endpoints。
Service Account Controller 管理维护Service Account,为每个Namespace创建默认Service Account,同时为Service Account创建Service Account Secret。
Persistent Volumn Controller 管理维护Persistent Volumn和Persistent Volumn Claim,为新的Persistent Volumn Claim分配Persistent Volumn进行绑定,为释放的Persistent Volumn执行清理回收。
Daemon Set Controller 管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常运行Daemon Pod。
Deployment Controller 管理维护Deployment,关联Deployment和RC,保证运行指定书目的Pod。当Deployment更新时,控制实现RC和Pod的更新。
Job Controller 管理维护Job,为Job创建一次性任务Pod,保证完成Job指定完成的任务数目。
Pod Autoscaler Controller 实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。
kubelet

负责管控容器,kubelet会从Kubernetes API Service接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Service。

kube-proxy

负责为Pod创建代理服务,Kube-proxy会从Kubernetes API Service获取所有的Service,并根据Service信息创建代理服务,事项Service到Pod的请求路由和妆发,从而实现Kubernetes层级虚拟转发网络。

Docker

Kubernetes Node是容器的运行节点,需要Docker服务,Kubernetes也支持其他的容器服务。

下一篇:Kubernetes-快速体验

你可能感兴趣的:(Kubernetes学习笔记,Kubernetes)