组件说明
k8s的前身是borg系统,这里我先说一下谷歌的borg系统
BorgMaster:主要负责资源分发,包含多个副本,对于高可用集群来说,最好保持3个以上的奇数
Borglet:提供各种计算能力
scheduler:调度器,会把数据写入Paxos(谷歌键值对数据库)
K8S架构
c/s架构 http协议
主组件(master组件)
**scheduler:**调度器,选择合适的节点分配任务
**replication controller:**控制器,维护副本期望值
**api server:**服务入口
**etcd:**官方将他定义为一个可信赖的分布式键值存储服务,它可以为整个分布式集群存储一些关键数据,协助集群正常运转(持久化)
node节点
kubelet: 和容器引擎(docker)进行交换,创建相关容器
kube-proxy: 负责写入规则到iptables,ipvs实现服务的映射访问
其他插件说明
**CoreDNS:**可以为集群中的SVC创建一个域名IP的对应关系解析
Dashboard: 给k8s提供一个B/S架构的访问体系
Ingress: 官方只能实现四层代理 igress可以实现七层代理
**Fedetation:**提供一个跨集群中心多k8s统一管理功能
**Prometheus:**提供一个k8s集群的监控能力
**ELK:**提供k8s集群的日志统一接入平台
基础概念
POD
pod概念
pod类型
- 自主式POD
- 控制器管理的POD
pod控制器类型(只针对于控制器管理的Pod)
ReplicationController && ReplicaSet && Deployment
ReplicationController 用来确保容器应用的副本数始终保持在用户定义的副本数,即容器如果存在异常退出,会自动创建新的Pod来替代,而如异常多出来的容器也会自动回收,在新版本中官方建议利益ReplicaSet替代ReplicationController
ReplicaSet和ReplicationSet没有本质的不同,只是名字不一样,并且ReplicaSet支持集合式的selector
虽然ReplicaSet可以独立使用,但是一般红是建议使用Deployment来自动管理RelicaSet
HPA(HorizontalPodAutoScale)
仅适用于Deployment和ReplicaSet,v1中支持根据CPU的利用率来扩缩容,vlalpha,支持用户自定义metric和内存进行扩缩容
StatefulSet 解决有状态的服务问题(对应的Deployments和ReplicaSets是为无状态服务而设计的),其中场景包括:
- 稳定的持久化存储,即Pod重新调度之后还是可以访问相同的持久化数据,基于PVC来实现
- 稳定的网络标志,即Pod重新调度之后其PodName不变和HostName不变,基于Headless Service来实现
- 有序部署
- 有序收缩,有序删除
DaemonSet
DaemonSet确保全部(或者一些)Node上运行一个Pod的副本,当有Node加入集群的时候,也会为他们新增一个Pod,当有Node从这些集群中移除的时候,这些Pod也会被回收,删除DaemonSet
典型用法; - 运行集群存储daemon,例如在每一个Node上运行glusterd,ceph
- 在每一个Node上运行日志收集daemon,例如fluentd,logstash
- 在每一个Node上运行监控daemon
Jod
负责批处理任务
服务发现
网络通信方式
k8s 假定了所有的网络都在一个可以直接联通的扁平的网络空间中,这在GCE(google compute engine)里面是现成的网络模型,k8s假定这个网络存在,而在私有云里搭建k8s集群,就不能假定这个网络存在了,我们需要自己实现这个网络假设
同一个pod的多个容器: lo (localhost)访问pause
各个pod通信 :overlay Network(全覆盖网络)
pod 与Service之间的通信:各个节点的Iptables规则
Flannel 网络规范服务,不同节点主机具有全局唯一的虚拟ip