前言
对于大部分后端程序员乃至于非后端程序员来说,在当前的云原生时代,Kubernetes(后称K8s)都是绕不开的一项技术;同时,对于这个时代的程序员来说,“英雄联盟”(后称LOL)也是陪伴包括我在内的很多人成长的一款游戏。
在我的工作经历中,常常在组内有小伙伴需要使用到K8s的时候对K8s没有必要的概念,但是我发现和他们聊起LOL却总能找到共同语言,所以我就在想,既然K8s本身的学习曲线不是那么平缓,那么是不是可以借助LOL来帮大家理解什么是K8s呢?
目的
本系列文章的目的是借助LOL,帮大家更好地理解K8s,入门K8s,上手K8s。
设计的内核
每一项产品都有它的一个设计的内核,对于LOL来说,它本质是一款游戏,它的内核就是“通过各种手段,摧毁对方的基地”,不管你是通过兵线运营、击杀对手、控制中立资源,这所有的一切都是围绕最终的目的:摧毁对方的基地,来服务的
那么对于K8s来说,设计的内核就是更好的进行容器的管理(对于什么是容器,不在本文的讨论范围内,可以自行搜索一下),不管是我们创建deployment,service,statefulset,我们最终的目的,都是对容器进行管控,让封装在容器内的应用更好的运行。
LOL的英雄 - K8s的容器
LOL的一局游戏是根据这局游戏中的10位英雄展开的。不同的英雄有不同的定位:有些是AP英雄、有些是AD英雄;有些擅长输出,有些擅长辅助。
同样,对于K8s来说,一套K8s集群都是围绕着集群中的容器在运转,就像k8s官方描述的那样,它是一个容器编排平台。搭载不同业务的容器有不同的编排方式:有些需要持久化数据,有些只用处理一些无状态的请求;有些需要对外暴露端口,有些则在容器内自己玩就行。
LOL的英雄定位 - K8s的工作负载资源
在LOL中,有了英雄,我们要给它分配不同的定位:上路、中路、下路、打野、辅助,不同场景需要不同定位的英雄,比如作为辅助的风女就是没办法替代盲僧取野区刷野,作为战士的盖伦也没法替代女枪在后期作为射手提供输出。
K8s也是一样,有了镜像或者说应用,我们要给它配置不同的工作负载资源Workload Resources。K8s中的工作负载资源(Workload Resources)是用于管理应用的部署、扩展和操作的核心概念。这些资源帮助用户定义应用程序的期望状态,并自动处理实际状态与期望状态之间的差异。以下是几种主要的工作负载资源及其适用场景:
🌀 Deployment
功能:管理无状态应用的 Pod 副本集,支持声明式更新、滚动升级和回滚。
核心特性:
- 滚动更新:通过
maxUnavailable
(最大不可用 Pod 数)和maxSurge
(最大额外