K8S概念与架构
一、Kubernetes 概述
1、K8S 是什么
K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,不如整个缩写”。
作用:
- 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
- 可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。
由来:
-
K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。
-
云原生基金会(CNCF)于2015年12月成立,隶属于Linux基金会。CNCF孵化的第一个项目就是Kubernetes,随着容器的广泛使用,Kubernetes已经成为容器编排工具的事实标准。
含义:
- 词根源于希腊语的 舵手、飞行员
官网:
https://kubernetes.io
GitHub:
https://github.com/kubernetes/kubernetes
2、为什么要用 K8S
-
试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。
-
设想一下,如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。
-
这样问题就出现了:从监控告警到部署服务,中间需要人力介入!那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?
-
而这就是 K8S 要做的事情:自动化运维管理容器化(Docker)程序。
3、k8s介绍
- K8S是Google开源的容器集群管理系统,在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Kubernetes 主要功能如下:
- 跨主机编排容器。
- 更充分地利用硬件资源来最大化地满足企业应用的需求。
- 控制与自动化应用的部署与升级。
- 为有状态的应用程序挂载和添加存储器。
- 线上扩展或缩减容器化应用程序与它们的资源。
- 声明式的容器管理,保证所部署的应用按照我们部署的方式运作。
- 通过自动布局、自动重启、自动复制、自动伸缩实现应用的状态检查与自我修复。
- 为多个容器提供服务发现和负载均衡,使得用户无需考虑容器IP问题。
二、Kubernetes 集群架构与组件
-
K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责集群的调度、管理和运维,Slave 节点是集群中的运算工作负载节点。
-
在 K8S 中,主节点一般被称为 Master 节点,而从节点则被称为 Worker Node 节点,每个 Node 都会被 Master 分配一些工作负载。
-
Master 组件可以在群集中的任何计算机上运行,但建议 Master 节点占据一个独立的服务器。
-
因为 Master 是整个集群的大脑,如果 Master 所在节点宕机或不可用,那么所有的控制命令都将失效。
-
除了 Master,在 K8S 集群中的其他机器被称为 Worker Node 节点,当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其他节点上去。
2.1、Master核心组件
Kube-apiserver
- 用于暴露 Kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver 提供的接口进行。以 HTTP Restful API 提供接口服务,所有对象资源的增删改查和监听操作都交给 API Server 处理后再提交给 Etcd 存储。
- 可以理解成 API Server 是 K8S 的请求入口服务。API Server 负责接收 K8S 所有请求(来自 UI 界面或者 CLI 命令行工具), 然后根据用户的具体请求,去通知其他组件干活。可以说 API Server 是 K8S 集群架构的大脑。
Kube-controller-manager
- 运行管理控制器,是 K8S 集群中处理常规任务的后台线程,是 K8S 集群里所有资源对象的自动化控制中心。
- 在 K8S 集群中,一个资源对应一个控制器,而 Controller manager 就是负责管理这些控制器的。
- 由一系列控制器组成,通过 API Server 监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
这些控制器主要包括:
•Node Controller(节点控制器):负责在节点出现故障时发现和响应。
•Replication Controller(副本控制器):负责保证集群中一个 RC(资源对象 Replication Controller)所关联的