Docker&Kubernetes ❀ Kubernetes集群基本组件与工作流程

Posted 无糖可乐没有灵魂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker&Kubernetes ❀ Kubernetes集群基本组件与工作流程相关的知识,希望对你有一定的参考价值。

文章目录

1、部署方式的演变


在应用程序历史上主要经理了三个部署模式,分别如下:

1.1 传统部署:

早起将应用程序部署在物理机器上;
优点:简单,不需要其他技术参与;
缺点:不能为应用程序定义资源使用边界,很难合理的分配计算机资源,程序直接容易互相影响;

1.2 虚拟化部署

可以在一台物理机上运行多个虚拟机,每个虚拟机互相独立运行;
优点:程序环境不会相互影响彼此,提供了一定的安全性;
缺点:增加了操作系统,浪费了部分硬件资源;

1.3 容器化部署

与虚拟化部署类似,共享了操作系统;
优点:保证每个容器拥有自己的文件系统、CPU、内存、进程空间等,运行程序所需要的资源都被容器包装,并和底层基础架构解耦,容器化的应用程序可以跨云运营商、跨linux系统进行部署;

容器化部署方式虽然拥有很多便利,但是也会出现一些问题,比如:

  1. 一个容器故障停机,如何让另一个容器立刻启动去替补这个故障停机的容器;
  2. 当访问量突然变大时,如果做到横向扩展容器数量;

这些容器管理的问题统称为 容器编排 ,为了解决这些容器编排问题,就产生了一些容器编排的软件:

  • Swarm:Docker自己设计的容器编排工具;
  • Mesos:Apache的一个资源统一管理工具,需要和Marathon结合使用;
  • Kubernetes:Google开源的容器编排工具;

2、Kubernetes简介


Kubernetes是一个全新的基于容器技术的分布式架构领先方案,是Google Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发布第一个正式版本;
Kubernetes本质是一组服务器集群,它可以在集群的每个节点上运行特定的程序来对节点中的容器进行管理,它的目的就是实现资源管理的自动化,主要提供了以下功能:

  • 自我修复:一旦某个容器崩溃或故障,能够在极短时间内迅速启动新容器来替代故障容器;
  • 弹性伸缩:根据需要自动对集群中正在运行的容器数量进行调整;
  • 服务发现:服务可以通过自动发现的形式找到所依赖的服务;
  • 负载均衡:如果单个服务启动了多个容器,自动实现请求的负载均衡;
  • 版本回退:支持系统版本降级;
  • 存储编排:支持根据容器自身的需求自动创建存储卷;

3、Kubernetes组件


一个Kubernetes集群主要是由 控制节点 master 和 工作节点 node 构成,每个节点都会安装不同的组件;

3.1 master

集群的控制平面,负责集群的决策;

  • Apiserver:资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制;
  • Scheduler:负责集群资源调度,按照预定的调度策略将pod调度到对应的node节点上;
  • ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等;
  • Etcd:负责存储集群中各种资源对象的信息(数据库,可以替换为mysql等,默认使用Etcd);

3.2 node

集群的数据平面,负责为容器提供运行环境;

  • Kubelet:负责维护容器的生命周期,即通过控制docker来创建、更新、销毁容器;
  • KubeProxy:负责提供集群内部的服务发现和负载均衡;
  • Docker:负载节点上容器的各种操作;

3.3 案例演示

以部署一个nginx服务来说明Kubernetes系统各个组件之间的调度关系:

  • 一旦Kubernetes环境启动后,Master和Node都会将自身的信息存储到Etcd数据库中;
  • 一个Nginx服务的安装请求会首先被发送到Master节点的ApiServer组件;
  • ApiServer组件会调用Scheduler组件来决定到底应该把这个服务安装到那个Node节点上,此时他会从Etcd读取各个Node节点的信息,然后按照一定的算法进行选择,将结果告知ApiServer;
  • ApiServer调用Controller-Manager调度Node节点安装Nginx服务;
  • Kuberlet接收到指令后会通知Docker,然后由Docker来启动一个Nginx的pod,Pod是Kubernetes的最小操作单元,容器必须跑在Pod中;
  • 一个Nginx服务就运行了,如果需要访问Nnginx,就需要通过Kube-Proxy来对Pod产生访问代理,这样外界用户就可以访问集群中的Nginx服务了;

3.4 注意事项

ApiServer是Kubernetes管理集群资源的唯一输入,而Kube-Proxy是Pod对外提供服务的代理输入,两者之间并不冲突;

4、Kubernetes概念


Master:集群控制节点,每个集群至少需要一个Master节点负责集群的管控;
Node:工作负载节点,由Master分配容器到这些Node节点上,然后Node节点上的Docker负责容器的运行;
Pod:Kubernetes的最小控制单元,容器都是运行在Pod中的,一个Pod可以有1个或者多个容器;
Controller:控制器,可以实现对Pod的管理,如 启动、停止、伸缩数量等;
Service:Pod对外提供服务的统一入口,下面可以维护同一类型的多个Pod;
Label:标签,用于分类,同一类的Pod拥有相同的标签;
NameSpace:命名空间,用来逻辑隔离不同的Pod;

以上是关于Docker&Kubernetes ❀ Kubernetes集群基本组件与工作流程的主要内容,如果未能解决你的问题,请参考以下文章

Docker&Kubernetes ❀ Kubernetes集群安装部署过程与常见的错误解决方法

Docker&Kubernetes ❀ Kubernetes集群安装部署过程与常见的错误解决方法

Docker&Kubernetes ❀ Kubernetes集群实践与部署笔记知识点梳理

Docker&Kubernetes ❀ Docker 容器技术笔记链接梳理

Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Job

Docker&Kubernetes ❀ Kubernetes集群Service资源配置清单