k8s(Kubernetes)
k8s 容器编排工具,可以高效、批量、智能的去管理容器
1. 特点
- 可移植
- 可拓展:模块化、插件化、可挂载、可组合
- 自动化:自动部署,自动重启,自动复制,自动拓展
- 无缝对接新应用
- 节省资源,优化硬件资源的使用
2. 特性
- 自动装箱:基于资源的依赖及其约束能自动完成容器的部署且不影响其可用性。
- 自我修复:一旦容器崩了,可自动重启一个新的容器代替从而实现自我修复。
- 自动实现水平拓展:一个容器不够,再启动一个,可以不断进行拓展,只要物理平台资源支持。
- 储存编排:把储存卷实现动态供给,当容器需要储存卷时,根据容器自身的需求创建能够满足其需要的存储卷。
- 自动进行服务发现和负载均衡
- 密钥和配置管理
- 自动发布和回滚
- 任务批处理运行
3. 配置中心:服务拆分后,多个服务公共的配置服务。
- 用户在配置中心更新配置信息,服务A、B及时得到配置更新通知,从配置中心获取配置。
- 合格的配置中心需满足
-
- 配置项容易读取和修改
- 分布式下应用配置可管理,即提供远程管理配置的能力
- 支持对配置修改的监视以把控风险
- 可以查看配置修改的历史记录
4. 功能
- Pod提供复合应用并保留一个应用一个容器模型
- 挂载外部存储
- Secret管理
- 应用健康检查
- 副本应用实例
- 横向自动扩缩容
- 服务发现
- 负载均衡
- 滚动更新
- 资源监测
- 日志采集和存储
- 支持自检和调试
- 认证和鉴权
5. 关键进程
-
master 节点运行的负责集群管理调度的一组进程
-
- api server: k8s中所有资源增删改查等操作的唯一入口,是集群控制的入口进程
- controller manager:k8s中所有资源对象的自动化控制中心
- scheduler: 负责资源调度
-
node节点运行的负责资源创建、通信、负载均衡、Docker容器创建与管理的一组进程
-
- kubelet: 与master节点密切协作实现集群管理,负责Pod对应的容器创建与启停等任务
- kube-proxy: 实现服务间的通信与负载均衡
- Docker Engine:负责本机Docker容器的创建与管理
6. 相关名词概念
-
Pod
- pod可以理解为容器的外壳,它为容器做了一层抽象的封装,pod里面运行容器,
pod的特点是可以将多个容器放在同一网络名称的空间中,同一个pod可以共享存储卷。 - 一个pod中无论运行一个容器还是多个容器,一旦将此pod调度到某个node上运行时,
这个pod中的所有容器只能在这个pod上运行。
- pod可以理解为容器的外壳,它为容器做了一层抽象的封装,pod里面运行容器,
-
标签选择器
- 标签选择器就是一种根据标签过滤符合条件的资源对象的机制。
- 应用于批量管理大量pod,具体是,给一类pod分组,即在创建pod的时候为其附上app的key的一个键值对,
在进行批量操作时检查pod中是否存在app的key的键值对,来实现对多个pod的控制与管理。
-
Master节点
- k8s的控制平面,负责这个集群的管理和控制,k8s所有控制命令都是发给master,master执行命令,note负责实际工作
- 一般独立运行在一台主机,因至关重要,一旦宕机会导致整个集群失效不可用,可对其做高可用(主备切换故障转移)
-
Node节点
- node是k8s中的工作节点,是负责工作的。
- node可以是任何形式的计算设备,能装k8s的集群代理程序,它都可以作为整个k8s集群的成员。
7. 相关组件
-
master上的组件:API服务器、调度器、控制器管理器、etcd
-
node上的组件:kubelet、kube-proxy、docker
- etcd:存储集群状态及各种原数据,通过API服务器读写
- API服务器:以RESTFUL API的形式提供CRUD接口其他组件或客户端调用,实现对象存储读取以及校验,kubectl为其客户端之一,也支持监听资源
- 调度器:为没有节点集的Pod分配节点,即:API服务器更新pod的定义(已调度)并通知kubelet,目标节点上的kubelet发现pod已被调度到本节点就会创建并运行pod的容器
- 控制器管理器:负责管理控制器,确保系统真实状态朝API服务器定义的期望的状态收敛
- Kubelet:管理本个node上的容器的生命周期,监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等,也是容器存活探针运行的组件,探针报错它会重启容器
- kube-proxy:确保对服务ip和端口的连接到达支持服务的某个pod处,如果有多个pod支撑一个服务,那么代理会发挥对pod的负载均衡作用。
- DNS服务器
- Ingress控制器:Ingress控制器运行一个反向代理服务器,根据集群中定义的Ingress,service以及Endpoint资源来配置该控制器.所以需要订阅这些资源,然后每次其中一个发生变化则更新代理服务器的配置
8. k8s流程
- 准备好对应的yaml文件,通过kubectl发送到Api Server中
- Api Server接收到客户端的请求将请求内容保存到etcd中
- Scheduler会监测etcd,发现没有分配节点的pod对象通过过滤和打分筛选出最适合的节点运行pod
- 节点会通过Container Runtime 运行对应pod的容器以及创建对应的副本数
- 节点上的kubelet会对自己节点上的容器进行管理
- controller会监测集群中的每个节点,发现期望状态和实际状态不符合的话,就会通知对应的节点
- 节点收到通知,会通过container runtime来对pod内的容器进行收缩或者扩张