Kubernetes简介

序言

k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行。
k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。

Kubernetes概述

Kubernetes特性

  • 1.自我修复
    在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
  • 2.弹性伸缩
    使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用船序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。
  • 3.自动部署和回滚
    K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务。
  • 4.服务发现和负载均衡
    K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称》,并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。
  • 5.机密和配!置管理
    管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用
  • 6.存储编排
    挂裁外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、GlusterfS、 Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。
  • 7.批处理
    提供一次性任务,定时任务:满足批量数据处理和分析的场景。

基本组件

在这里插入图片描述

1、master组件

1、auth/认证模块

K8S 内部支持使用RBAC认证的方式进行认证

2、kube-apiserver/api接口

用于暴露kubernetes API,不管是kubectl 还是HTTP 调用来操作kubernets 集群各种资源,都是通过kube-apiserver 提供的接口进行操作的,Node 节点与Master之间的通信也是主要依赖于kube-apiserver,例如pod调度: kube-scheduler 将调度结果写入etcd,kubelet 监听etcd 获取到调度任务。

Kubernetes APl,集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给ETCD存储。

3、kube-scheduler/k8s pod调度器

调度器,接收来自于管理控制器(kube-controller-manager)触发的调度操作请求,然后根据请求规格、调度约束、整体资源情况等因素进行调度计算,最后将任务写到etcd,目标节点的kubelet 组件监听到由其负责的资源创建工作,然后执行具体调度任务。

根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。

4、kube-controller-manager/k8s管理器
  • 管理负责整个kubernetes的管理工作,保障集群中各种资源处于期望状态,当监控到某个资源状态不正常时,管理控制器会触发对应的调度操作,主要由以下几个部分组成:
    • 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应

    • 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod

    • 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)

    • 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌

处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

5、cloud-controller-manager/云控制器管理器

运行与基础云提供商交互的控制器,从k8s1.6之后出现的新功能

也包括了多个控制器:节点控制器、路由控制器、服务控制器、数据卷控制器

6、etcd/k8s后台数据库

一款用于共享配置和服务发现的高效KV存储系统,具有分布式、强一致性等特点,在kubernetes 环境中主要用于存储所有需要持久化的数据。

分布式键值存储系统(特性:服务自动发现)。用于保存集群状态数据,比如IPod、Service等对象信息。

2、work-node组件

1、kubelet/节点管理工具

kubelet负责管理节点的pod,可以理解为当在master上执行创建、删除对象时,kubelet负责执行从kube-apiserver下达的指令

2、kube-proxy/网络管理器

service 在逻辑上代表了后端多个pod,外界通过service 访问pod。service 接收到的请求是如何转发到pod的,这个就是kube-proxy 要完成的工作,每个node 都会运行kube-proxy服务,它负责将访问service的TCP/UDP 数据流转发到后端的容器,如果有多个副本,kube-proxy 会实现负载均衡。

kube-proxy运行在每个node节点上,管理维护node上的网络规则

3、docker或rocket
  1. 提供容器操作的底层引擎
  2. 为kubernets中Pod提供容器

K8S概念补充

1、pod

  • pod是K8S的最小管理单元。
  • 一个pod中可运行2+个容器。
  • pod内的容器共享使用pod的唯一ip地址和一组存储卷。
  • 同一pod内的容器使用localhost进行通信;而与pod外的容器通信时,需要pod内的容器协调使用pod的端口进行通信
  • pod有生命周期,当一个pod生命周期结束后,该pod将不复存在,k8s会重新部署一个新的pod提供和该pod一样的服务。这样就用到service概念用于标记k8s集群提供一组服务的pod。

2、service

service是pod的代理层,根据用户请求的端口和服务,service找到对应标签的pod,将请求代理到这些pod去处理。如果您想要在应用程序中使用 Kubernetes 接口进行服务发现,则可以查询 API Server 的 endpoint 资源,只要服务中的Pod集合发生更改,endpoint 就会更新。

官方说:逻辑上的一组 Pod,一种可以访问它们的策略 —— 通常称为微服务。这一组 Pod 能够被Service 访问到,通常是通过selector实现的

3、volume

基本数据(网页文件),Kubernetes 卷具有明确的生命周期——与包裹它的 Pod 相同,但是卷比 Pod 中运行的任何容器的存活期都长,在容器重新启动时数据也会得到保留。Kubernetes支持多种类型的卷,如nfs、iscsi、cinder、azureDisk等。

4、Deployment

顾名思义,Deployment是一个部署,作用主要是创建、更新、回滚ReplicaSet以控制pod

5、namespace(命名空间)

命名空间为名称提供了一个范围。资源的名称需要在命名空间内是唯一的,但不能跨命名空间。命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中。

6、Job

可创建一个或者多个pod,job在指定次数、指定个数的pod创建后job的工作就完成了

删除一个job,会将其创建的pod一并清除

7、endpoint

endpoint是kubernetes的一个资源对象,存储于etcd数据库中,用以记录service的所有pod的访问地址

8、object(对象)

object是持久化的实体,用以表示整个集群的状态:

哪些容器化应用在运行

可以被应用使用的资源

应用运行时重启策略、升级策略,以及容错策略

一个object一旦创建,kubernetes会持续工作以保证对象存在;也就是通过对象棵设置kubernetes集群的期望状态

object的操作依赖于Kubernetes API,如果使用kubectl也是通过调用Kubernetes API完成的操作(使用yaml文件操作会将文件的内容从yaml转换为json格式)

9、Object Name 和 UID(对象名和UID)

集群中的每一个对象都一个名称 来标识在同类资源中的唯一性。

每个 Kubernetes 对象也有一个UID 来标识在整个集群中的唯一性。

10、label(标签)

label是附加到对象的键/值对;label可以在创建时附加到对象,然后可以随时添加和修改。每个对象可以定义一组键/值标签。每个键对于给定的对象必须是唯一的。label不是唯一的,也就是说多个对象可以拥有同一个label,如我们可以创建多个label为nginx的pod用于统一管理。

11、label selector(标签选择器)

与名称和UID不同,标签不提供唯一性。通常,我们希望许多对象携带相同的标签。通过标签选择器,客户端/用户就可以识别一组同标签的对象。

12、ReplicaSet

ReplicaSet 是Replication Controller(RC)的下一代,区别在于支持基于集合的选择器。

官方说:ReplicaSet 确保任何时间都有指定数量的Pod副本在运行。然而,Deployment 是一个更高级的概念,它管理 ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能, 因此,我们建议使用 Deployment 而不是直接使用 ReplicaSet。

13、ReplicationController(RC)

是kubernetes的pod数量控制器,RC同时跨多个节点(node)控制多个pod的数量而不是仅限于单机。工作的内容主要是当pod数量跟预期不一样了,RC会将该数量维持为预期的数量

14、StatefulSets

StatefulSets用来管理 Deployment 和扩展一组 Pod

StatefulSet 和 Deployment 相同的是管理了基于相同容器定义的一组 Pod;但是StatefulSet 为它的每个 Pod 维护了一个固定的 ID,并且该ID是基于声明创建的,无论pod如何调度,ID永久不变

StatefulSet多用于满足以下一个或多个条件的应用程序:

稳定的、唯一的网络标识符。

稳定的、持久的存储。

有序的、优雅的部署和缩放。

有序的、自动的滚动更新。

15、DaemonSet

DaemonSet管理节点上的各个守护的pod,例如集存储群、日志收集器、监控客户端,通俗来讲就是K8S集群状态的控制器

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐