Kubernetes介绍
应用部署的变迁
- 传统部署时代:应用程序直接部署在物理服务器上。
- 无法定义应用程序资源边界,导致资源分配不均。
- 服务器资源利用率低,维护成本高。
- 虚拟化部署时代:在单个物理服务器上运行多个虚拟机,应用程序在VM之间隔离,提供安全级别访问。
- 重量级隔离,每个VM是一台完整的计算机,包括自己的操作系统。
- 性能损耗比较严重。
- 容器部署时代:类似于VM,轻量级隔离,应用程序共享OS。具有自己的文件系统,CPU,内存,进程空间等,但与基础架构分离,可以跨云或者OS移植。
- 应用程序敏捷开发和部署
- 集成CI/CD
- 开发与运维分离
- 监控方便
- 可移植性高
- 微服务
- 资源隔离
- 资源利用率高
Kubernetes提供的功能
Kubernetes是一个可移植,可扩展的开源平台,用于管理容器化的工作负载和服务,声明式配置和自动化。Kubernetes提供了一个可弹性运行分布式系统的框架,主要提供以下功能:
- 服务发现和负载均衡
- 存储编排
- 自动部署和回滚
- 自动二进制打包
- 自我修复
- 密钥与配置管理
Kubernetes并非PaaS系统,它运行在容器级别,而非硬件级别,因此提供了PaaS产品共有的一些普遍使用的功能,如部署,扩展,负载均衡,日志,监控等。Kubernetes并不支持以下操作:
- 不限制支持的应用程序类型
- 不部署源码,也不构建应用程序
- 不提供应用程序级别的服务作为内置服务
- 不指定日志,监控,报警解决方案
- 不提供或不要求配置语言或系统
- 不提供也不采用任何全面的机器配置,维护,管理或自我修复系统
- 不仅仅是一个编排系统,实际上也消除了编排的需要
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:为服务提供外网入口。