Kubernetes介绍

应用部署的变迁

部署演进

  • 传统部署时代:应用程序直接部署在物理服务器上。
    • 无法定义应用程序资源边界,导致资源分配不均。
    • 服务器资源利用率低,维护成本高。
  • 虚拟化部署时代:在单个物理服务器上运行多个虚拟机,应用程序在VM之间隔离,提供安全级别访问。
    • 重量级隔离,每个VM是一台完整的计算机,包括自己的操作系统。
    • 性能损耗比较严重。
  • 容器部署时代:类似于VM,轻量级隔离,应用程序共享OS。具有自己的文件系统,CPU,内存,进程空间等,但与基础架构分离,可以跨云或者OS移植。
    • 应用程序敏捷开发和部署
    • 集成CI/CD
    • 开发与运维分离
    • 监控方便
    • 可移植性高
    • 微服务
    • 资源隔离
    • 资源利用率高

Kubernetes提供的功能

Kubernetes是一个可移植,可扩展的开源平台,用于管理容器化的工作负载和服务,声明式配置和自动化。Kubernetes提供了一个可弹性运行分布式系统的框架,主要提供以下功能:

  • 服务发现和负载均衡
  • 存储编排
  • 自动部署和回滚
  • 自动二进制打包
  • 自我修复
  • 密钥与配置管理

Kubernetes并非PaaS系统,它运行在容器级别,而非硬件级别,因此提供了PaaS产品共有的一些普遍使用的功能,如部署,扩展,负载均衡,日志,监控等。Kubernetes并不支持以下操作:

  • 不限制支持的应用程序类型
  • 不部署源码,也不构建应用程序
  • 不提供应用程序级别的服务作为内置服务
  • 不指定日志,监控,报警解决方案
  • 不提供或不要求配置语言或系统
  • 不提供也不采用任何全面的机器配置,维护,管理或自我修复系统
  • 不仅仅是一个编排系统,实际上也消除了编排的需要

Kubernetes组件

Components of Kubernetes

部署完Kubernetes,也就有了一个完整的集群。

  • 一个Kubernetes集群由一组被称为节点的机器组成。
  • 节点上运行Kubernetes所管理的容器化应用。
  • 集群至少需要一个主节点和一个工作节点。
  • 工作节点托管作为应用程序组件的Pod。
  • 主节点管理集群中的工作节点和Pod。
  • 多个主节点用于为集群提供故障转移和高可用性。

Kubernetes的组件可以分为三类:

  • 控制面板组件(Control Plane Components)
  • Node组件(Node Components)
  • 插件(Addons)

控制面板组件

  • 对集群做出全局决策(如调度),以及检测和响应集群事件(如,当不满足部署的replicas字段时,启动新的pod)。
  • 可以在集群的任何节点上运行。然而为了简单起见,设置脚本通常会在同一个计算机上启动所有控制平台组件,并且不会在此计算机上运行用户容器。

具体组件如下:

  • kube-apiserver:负责提供Kubernetes API服务的组件,是资源操作的唯一入口,提供认证、授权、访问控制、API注册和发现等机制,是Kubernetes控制面板的前端。
  • etcd:兼具一致性和高可用性的键值数据库,存储Kubernetes集群的所有状态。
  • kube-scheduler:负责资源调度,按照预定的调度策略将Pod调度到相应机器上。
  • kube-controller-manager:控制器组件,负责维护接群的状态,例如故障检测、自动扩展、滚动更新。主要包含以下控制器:
    • 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
    • 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的Pod。
    • 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。
    • 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌。
  • cloud-controller-manager:运行与基础云提供商交互的控制器,1.6版本中引入的alpha功能。以下控制器具有云提供商依赖性:
    • 节点控制器(Node Controller): 用于检查云提供商以确定节点是否在云中停止响应后被删除。
    • 路由控制器(Route Controller): 用于在底层云基础架构中设置路由。
    • 服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器。
    • 数据卷控制器(Volume Controller): 用于创建、附加和装载卷、并与云提供商进行交互以编排卷。

Node组件

  • 运行在每个节点上,维护运行的Pod并提供Kubernetes运行环境。

具体组件如下:

  • kublet:一个在集群中每个节点上运行的代理,它保证容器都运行在 Pod 中。负责维护容器的声明周期,同时也负责Volume(CSI)和网络(CNI)的管理。
  • kube-proxy:集群中每个节点上运行的网络代理,维护节点上的网络规则。
  • container-runtime:负责镜像管理以及Pod和容器的真正运行(CRI),Kubernetes支持多个容器运行环境:docker,containerd等以及任何实现Kubernetes CRI接口的容器运行环境。

插件

  • 使用Kubernetes资源实现集群功能。
  • 命名空间资源属于kub-system。

具体组件如下:

  • DNS
    • CoreDNS:为整个集群提供DNS服务。
  • Dashboard
    • Dashboard:为集群提供Web UI操作界面。
  • 容器资源监控
    • metrics-server
    • Prometheus
  • 集群层面日志
  • 其他
    • Ingress Controller:为服务提供外网入口。

参考资料

Categories: kubernetes
Tags: #kubernetes
Date: 2020-07-01
Lastmod: 2020-07-01
License: BY-NC-ND 4.0