Kubernetes入门之基本概念

Kubernetes概述

      Kubernetes(k8s)是Google在2014年发布的一个开源项目。最初,Google开发了一个叫Borg的系统(现在命名为Omega)来调度庞大数量的容器和工作负载。在积累多年的经验后,Google决定重写这个容器管理系统,并将其贡献到开源社区,让全世界都能受益。这个项目就是Kubernetes。简单地讲,Kubernetes是Google Omega的开源版本

       Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署、调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅支持Docker,还支持Rocket,这是另一种容器技术。

      ​Kubernetes中的大部分概念如Node、Pod、Replication Controller、Service等都可以被看作一种资源对象,几乎所有资源对象都可以通过Kubernetes提供的kubectl工具(或者API编程调用)执行增、删、改、查等操作并将其保存在etcd中持久化存储。从这个角度来看,Kubernetes其实是一个高度自动化的资源控制系统,它通过跟踪对比etcd库里保存的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能

      ​Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,Kubernetes提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。因此,Kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台

特点

(1)自动化容器的部署和复制。
(2)随时扩展或收缩容器规模。
(3)将容器组织成组,并且提供容器间的负载均衡。
(4)轻松升级应用程序容器的新版本。
(5)提供容器弹性,如果容器失效,就替换它。 ### 基本概念

Cluster

​Cluster是计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用

Master

​       Master指的是集群控制节点,在每个Kubernetes集群里都需要有一个Master来负责整个集群的管理和控制,基本上Kubernetes的所有控制命令都发给它,它负责具体的执行过程

在Master上运行着以下关键进程。

Kubernetes API Server(kube-apiserver):提供了HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。

Kubernetes Controller Manager(kube-controller-manager):Kubernetes里所有资源对象的自动化控制中心。

Kubernetes Scheduler(kube-scheduler):负责资源调度(Pod调度)的进程。

另外,在Master上通常还需要部署etcd服务,Kubernetes里的所有资源对象的数据都被保存在etcd中。

Node

​ 除了Master,Kubernetes集群中的其他机器被称为Node,Node可以是一台物理主机,也可以是一台虚拟机。Node是Kubernetes集群中的工作负载节点,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上

在每个Node上都运行着以下关键进程

kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能。

kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。

Docker Engine(docker):Docker引擎,负责本机的容器创建和管理工作。

Node可以在运行期间动态增加到Kubernetes集群中,kubelet进程就会定时向Master上报信息,这样Master就可以获知每个Node的资源使用情况,并实现高效均衡的资源调度策略。而某个Node在超过指定时间不上报信息时,会被Master判定为“失联”,Node的状态被标记为不可用(Not Ready)。

Pod

​       Pod是Kubernetes的最小工作单元。每个Pod包含一个或多个容器。Pod中的容器会作为一个整体被Master调度到一个Node上运行。Pod中的所有容器使用同一个网络命名空间(Namespace),即相同的IP地址和Port空间。它们可以直接用Localhost通信。同样的,这些容器可以共享存储,当Kubernetes挂载Volume到Pod时,本质上是将Volume挂载到Pod中的每一个容器

Controller

      ​Kubernetes是通过Controller来管理Pod的。Controller中定义了Pod的部署特性,比如有几个副本、在什么样的Node上运行等。为了满足不同的业务场景,Kubernetes提供了多种Controller,包括Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等。

Deployment是最常用的,可以管理Pod的多个副本,并确保Pod按照期望的状态运行。

ReplicaSet实现了Pod的多副本管理。使用Deployment时会自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来管理Pod的多个副本的,我们通常不需要直接使用ReplicaSet。

DaemonSet用于每个Node最多只运行一个Pod副本的场景。正如其名称所揭示的,

DaemonSet通常用于运行Daemon。

StatefuleSet能够保证Pod的每个副本在整个生命周期中的名称是不变的,而其他Controller不提供这个功能。当某个Pod发生故障需要删除并重新启动时,Pod的名称会发生变化,同时StatefuleSet会保证副本按照固定的顺序启动、更新或者删除。Job用于运行结束就删除的应用,而其他Controller中的Pod通常是长期持续运行的。

Service

​       Kubernetes Service定义了外界访问一组特定Pod的方式。Service有自己的IP和端口,Service为Pod提供了负载均衡。Kubernetes运行容器(Pod)与访问容器(Pod)这两项任务分别由Controller和Service执行。

Namespace

​       Namespace可以将一个物理的Cluster逻辑上划分成多个虚拟的Cluster,每个Cluster就是一个Namespace。不同Namespace里的资源是完全隔离的。Kubernetes默认创建了3个Namespace

你可能感兴趣的:(容器,kubernetes,docker)