背景
容器(docker)流行开来,容器调度机制风起云涌,各路神仙用systemctl调度, 也有号称容器宗师的出品docker swarm, 各大门派也有各自的旗帜主张。天下混沌,血雨腥风,龙藏深泉,而谷歌的k8s就是这个主角。
LXC像武侠世界里藏在隐匿的一个洞穴,一直没有大的作为。各种体格的应用从单体拥抱了微服务,庞大的app, 复杂的架构,前端,负载均衡,网关,业务应用,公共服务,数据存储,各种缓存机制,消息队列,分布式对象存储,异地多活,高可用,高可靠,历史遗留,新旧语言更替,等等。大型机逐渐被廉价的PC机取代,云操作系统,openstack也进入了中青年阶段,后劲乏力。在这个时空里, 充斥了令人恶心至极的运维部署难度,怎样去解决日益难调和的矛盾?K8S就是在这样的情势下,开天辟地,让混沌的世界立刻变得澄清......
当红炸子鸡
过去十多年,互联网服务个人得到了长足的发展,甚至是超前的烧钱模式引导消费者的变态病毒式侵蚀各行各业。 个人用户服务无论是网络带宽,延时,时长等,都过了快速成长阶段,进入相对稳定,甚至某一些方面,舆论和政策都处于一种高压状态。于是我们也发现一些,过去很火的龙头慢慢跌落神坛,逐渐归于平淡,以至淡出人们饭后茶余的谈资。 那未来互联网行业将如何发展呢?一个快速且有着很强生命力,自身携带融合基因的当红炸子鸡,肯定不是只有一个巅峰。下一个巅峰会在哪里?企业云服务,有可能是另一个着力点。
在切入云原生前,云计算是我们都要讨论的一个课题。就像讲中国文明,绕开黄河,就没法开展。云计算(cloud computing)是一种通过网络统一组织,灵活调度各种软硬件资源,实现大规模计算和信息处理的算力。 单机,运行之上的,俗称OS, 云计算本质是分布式计算和虚拟资源软硬件管理, 通过网络把这些基础软硬件设施集中起来形成共享或隔离的资源池,最终能动态按需和客户定制化、可调节的方式向客户提供服务。
云计算的优势
- 低成本
- 高算力
- 高可靠性
云计算把原来看上去隔离的孤岛算力和存储,通过高速低延时网络把联合起来,做到了,灵活调度资源,按需分配,严控使用,降低成本。个人通过支付宝,把资金都聚到了支付宝中心,资金或进或出,从支付宝账户上来看,钱都在账户上,这个巨大的资金池就可以拿来满足各种资金需求。支付宝的金融风险,换做云计算就是一个富有想象空间的算力。用个更恰当的比喻,就是电网。将来,随着数字化,源源不断的数据生成,数据消费和数据生产也将是我们日常生活的一部分。那时,算力也成为一类类似公共事业的算力资源,人们通过各种接口消费算力资源。那谁可以提供这样的算网呢?没到最后的一刻,谁也说不准。
k8s无论出身和演化都凸显出一种贵族血统和精英气质,在开源宗旨的指引下飞入寻常百姓家。k8s放弃了复杂计算栈和抽象,除了拥有云计算的优势外,他自身还具有以下吸引人的特性。
高可用(HA)
弹性水平扩容(HPA)
自动恢复(AH auto healing)
化繁为简和权责清晰的哲学
Master Node
master node(s)是集群的大Boss, 他掌管整个集群的状态,分配任务到各个worker nodes,也就是真正干活的打工仔。作为一个中央集权机构,虽然用不上三书六部,但master node也将纷繁复杂的公务,用巧夺天工的精妙构思,划分成三大块。
API Server
- 整个集群的入口,运维人员通常用利器
kubectl将操作请求发给API Server
- 整个集群的门卫,负责所有请求的证件查看,确保所有进来的请求都是验证过的,匿名用户是不允许直接访问API Server的
Scheduler
- master不干活,它负责分配活,决定哪一个worker node启动下一个pod. (kubelet)
Controller Manager
- 侦测集群的状态,并且总是恢复集群到原来声明的状态。
- 如果一个pod挂了,控制器会找到合适的worker node启动新的pod,替换掉之前挂的pod。
ETCD
- 集群的大脑
- Key-value存储集群的状态
- 任何集群的状态变化都会存储到这里
- app的数据不能存在这里,想都别想,所存的数据只有集群的状态信息。
Worker Node
作为干活的节点,除了卯足劲干活(containerd)外,还得听得懂命令,及时汇报状态(kubelet)。另外有畅通的道路,方便任务进进出出(kubeproxy)。
kubelet
- worker node和containerd之间的交互得通过kubelet
- 接受来自master的指令在worker node上创建pod
- 汇报worker node的状态给master node
containerd
- 真正干活的长工或短工,容器运行时(dockerd, containerd)
kubeproxy
- 负责worker node和内外流量的进出,提供traffic进出的康庄大道。
- 维护traffic进出的路标(service)
参考文献
https://towardsdatascience.com/a-beginner-friendly-introduction-to-kubernetes-540b5d63b3d7
Learn Kubernetes Basics | Kubernetes