Kubernetes ---- 理论、架构
Kubernetes的特性:
1. 实现自动装箱(自动完成资源的部署).
2. 自我修复(kill掉,重新启一个).
3. 自动实现水平扩展(物力资源要足够支撑).
4. 服务发现和负载均衡.
5. 自动发布和回滚.
6. 秘钥和配置管理.
7. 存储编排.
8. 任务批量处理执行...
集群:
master/nodes模型
一个或一组节点(高可用): master 集群入口
多组节点: nodes
Master:
接收创建启动容器的请求 -> 调度器分析各node节点的可用资源状态,找到最佳适配运行用户所请求的容器的node,容器引擎启动容器
- API Server: 负责接收请求、解析请求、处理请求.
- Scheduler(预选后优选): 观测每个node上总共可用的物理资源,根据请求创建的容器的资源来评估在哪一个node上合适运行.
- Controller manager(做冗余): 监控每个控制器是健康的.
Node:
所有node组成为一个kube_cluster,将各node上的物理资源整合到一个"资源池"对外提供.
- Kubelet: 接收Scheduler调度结果,负责保证容器的状态始终正常.
- Docker:作为容器引擎运行Pod中的容器.
- kube-proxy: 随时与API Server进行通信,当每一个Pod发生变化的时候,会生成一个事件,事件可被任何关联的组件接收到,结果将保存在API Server中.
例如Pod中的容器IP地址发生了改变,那么kube-proxy会将结果反映到Service也就是IPtables或ipvs中.
Pod: 存放容器.
1.自主式Pod: 提交给API Server,接收后借助于调度器调度至指定的node节点,由node启动此Pod,如果Pod中的容器出现故障,需要重启则由kubelet完成
如果节点故障,则容器消失,无法全局调度.
2. 控制器管理的Pod: 由调度器将其调度至集群中的某节点运行后.
控制器分类:
ReplicationController(副本控制器): 控制同一类Pod对象的各种副本,如果副本缺少了,则会自动添加至定义的副本数量.
ReplicaSet: 副本集控制器,声明式控制器(Deployment).
Deployment: 管理无状态应用副本集.
HPA: 灵活增加Pod,当访问量过高,目前Pod不够用可自动增加,如果Pod够用,则会降低至够用的副本数量.
StatefulSet: 管理有状态应用副本集.
DaemonSet: 每一个Pod上运行一个副本.
Job,Cronjob: 作业、周期性作业.
Service(主机名和地址在不被删除的情况下不会改变):
1. IPtables DNAT规则或IPvS(v1.11版以后使用了IPvS).
2. 访问入口,将客户端请求代理至后端Pod地址.
3. 负载均衡.
4. Pod会将提供的服务注册至Service.
5. 靠标签选择器关联Pod(Pod中拥有标签(label)),关联后Service会动态探测Pod的IP地址及端口,作为后端可用服务器.
6. 通过kube-proxy管理,在每个节点上创建规则,变动也需使用kube-proxy反映到规则上.
Label: 用来分类、识别、管理Pod.
Label Selector: 根据标签过滤符合条件的资源对象的机制.
Controller (支持众多类型): 通过loop持续性探测所管理的容器是否健康,如果不健康则重新像Scheduler发送创建请求,保证服务可用.
同一Pod内的多个容器间通信:通过lo
各Pod之间的通信: Overlay 叠加网络 转发通信
Pod与Service间通信: Pod将请求发往网关(docker0桥),检查IPtables转发
ETCD(重要):
1. 键值存储的数据库系统,可选举,类似Zookeeper.
2. 存储集群中所有的重要信息.
3. 要做冗余,且使用https通信.
4. 2380集群内部通信,2379对外进行通信.
网络配置:
flannel: 网络配置.
calico: 网络配置,网络策略.
canel: 网络配置,网络策略.
在不考虑有状态应用的情况下,下面有一个LNMP的架构图,个人理解,有错误望指出,谢谢。