k8s 学习笔记一:简介和组件说明,pod概念简介
一. k8s简介
1.paas(platform as a service)
docker出现之后,成为了paas的标准。其缺陷在于:1.容器之间通信效率较低下;2.管理起来很困难,例如各容器的端口映射关系等,极为复杂。因此,容器集群需要一个资源管理器。
1. MESOS
一个比较早的分布式资源管理框架。目前已被大部分公司放弃。
2. docker swarm
- docker内部自带的组件。和docker绑定。
- 优点:非常轻量级,而且能支撑相当大规模的节点。
- 缺点:其功能相比k8s,太少太少。例如滚动更新、回滚等操作,用docker swarm的实现很难。
3. k8s(kubernetes)
- 功能强大
- google开发,开发语言是Go语言,前身是borg系统
- 特点: (1)轻量级 (2)开源 (3)弹性伸缩:服务器资源的弹性伸缩,平滑 (4)负载均衡:框架为IPVS,负载能力强
二. 组件说明
1. borg 框架的架构
1.BorgMaster负责请求分发,BorgMaster有副本,防止故障。
2.Borglet是真正工作的节点,例如提供计算能力等。
3.Paxos是google内部的一个键值对数据库。
4.Scheduler为调度器,会向Paxos中写入数据,Borglet实时读取Paxos中的数据,以感知是否有请求分发给自己。
注:高可用集群副本数量最好是大于等于3的奇数个。
2. k8s组件
2.1. Master中包含:
(1)Scheduler:调度器。负责接收任务,选择合适的节点分配任务。通过api server,将数据写入etcd。
(2)replication controller:副本控制器。用于维护副本数量,根据副本期望值,来做pod的增加、删除。
(3)api server:一切服务的入口。Scheduler、replication controller、kubectl、web ui、etcd、kubelet、kube proxy都与其交互。工作繁忙。为了减轻其负担,其他组件可以在内部实现一定的缓存,减少交互次数。
2.2. etcd
一个Go语言开发的分布式键值对存储服务,天生支持集群化,能够为整个分布式集群存储一个关键数据,协助分布式集群的正常运转。推荐在k8s集群中使用ETCD v3,v2版本已在k8s v1.11中弃用。
2.3. node 节点
(1)kubelet:和容器引擎进行交互,进行创建容器等操作。管理着pod的生命周期。
(2)kube proxy:负载是通过kube proxy实现的,。默认是通过操作防火墙firewall(写入规则至iptables)来实现pod映射。当然现在的k8s还支持使用ipvs实现映射。
(3)pod:pod中有container,注意这里不一定是docker。docker只是容器引擎的一种。