k8s架构补充
高可用集群副本数最好是 >= 3 奇数个
master节点
scheduler
调度器,负责介绍任务,选择合适的节点进行分配任务
决定将任务分配至哪个node节点中,与api server进行交互
api server
所有服务访问的统一入口
压力巨大,为了减轻apiserver的压力,每个组件可以在自己本地生成一定的缓存,减少与apiserver交互的次数。
todo : 官方是如何给他减压的
controllerManager
控制器,功能之一是维护副本期望数目。
etcd
go语言编写,键值对的数据库,储存k8s集群所有重要信息(持久化)
etcd 的官方将它定位成一个可信赖的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转。
可信赖:为了让etcd能够 持久化不会造成单节点故障,所以天生支持集群化,并不需要其他组件来实现集群化方案
分布式键值存储服务:意味着扩缩容非常方便
协助分布式集群的正常运转:保存分布式集群需要持久化的 配置文件信息,一旦集群宕机死亡,可以借助配置信息来恢复
etcd v2版本与v3版本
v2版本会把所有的数据写入内存中,v3版本会引入一个卷的持久化操作,也就意味着关机之后不会造成数据损坏,会从本地磁盘进行恢复。
推荐在kubernetes集群中使用Etcd v3,v2版本已在Kubernetes v1.11中弃用
etcd内部架构图
etcd采用的是http server的形式,http协议
k8s也采用的是http协议进行cls开发
因为http天生支持Restful协议,以及授权认证,没有必要采用标准tcp协议来开发一系列的认证流程
raft:所有的读写信息都会存在这里
wal:预写日志,防止信息损坏丢失,包括完整备份和快照
node节点
kubelet
直接跟容器引擎交互实现容器的生命周期管理
会跟CRL进行交互,操作docker创建相对应的容器,维持pod的生命周期
容器运行时接口(Container Runtime Interface),简称 CRI。CRI 中定义了 容器 和 镜像 的服务的接口,因为容器运行时与镜像的生命周期是彼此隔离的,因此需要定义两个服务。
kubeproxy
负责写入规则至iptables、ipvs 实现服务映射访问的
svc的负载操作就是通过kubeproxy来完成的,实现pod与pod的访问以及负载均衡
默认操作对象是操作firewall,去实现这里pod的映射
集群插件
coreDNS
可以为集群中的svc创建一个域名IP的对应关系解析,实现负载均衡的其中一项功能。
Dashboard
k8s的web操作界面
Ingress Controller
官方只能实现四层代理,ingress可以实现七层代理
Federation
提供一个可以跨集群中心多k8s统一管理功能
prometheus
提供一个k8s集群的监控能力
ELK
提供k8s集群日志统一分析接入平台
01-Kubernetes介绍 · 语雀 (yuque.com)