手动docker run创建容器只是个toy,在企业里,往往会使用k8s平台管理容器;
k8s是一个容器管理、服务编排、资源调度、集群管理的工具,由谷歌开源,在国内已成为主流;
我们开发的服务,最终都将运行在k8s上;
一、K8S集群作用容器管理:容器的创建、监控、销毁等生命周期管理服务编排:一个复杂的产品往往是由几十个、甚至几百个微服务协同组成,服务之间的集成、交互等;资源调度:一个服务需要多少cpu mem、gpu资源,当前服务应该被调度到哪台机器;集群管理:k8s可以将几十、几百台机器管理起来,屏蔽了机器的概念,可以将集群视为一个巨大的cpu mem gpu资源池 二、K8S集群部署优势
1、故障迁移:当某一个node节点关机或挂掉后,node节点上的服务会自动转移到另一个node节点上,这个过程所有服务不中断。这是docker或普通云主机是不能做到的;2、资源调度:当node节点上的cpu、内存不够用的时候,可以扩充node节点,新建的pod就会被kube-schedule调度到新扩充的node节点上3、资源隔离:创建开发、运维、测试三个命名空间,切换上下文后,开发人员就只能看到开发命名空间的所有pod,看不到运维命名空间的pod,这样就不会造成影响,互不干扰4、快速伸缩容自动负载均衡:资源不够,一行扩容;原生内部负载均衡,多分片不再需要单独配置nginx5、资源池:集群即资源池,主机透明(不需要知道哪台机器)、机器资源共享(之前的服务部署是机器独占) 三、CI/CD & K8S
CI/CD可以通过流水线中的deploy_stage这一个步骤,将镜像更新到k8s集群,触发服务在集群上的部署;
集群的搭建、k8s的维护,是运维工程师的工作
开发同学要做到:
知道最终服务会运行在k8s上;会去k8s平台监控服务、排查log; 四、K8S集群配置文件
一个服务(Docker)对应一个deployment文件,deployment文件主要用来:
声明服务名、分片数、镜像版本、端口;声明调度策略,比如调度到gpu机器;声明环境变量、资源需求;
一般不需要开发同学自己写,开发提需求就行
五、dashboard 1、通过k8s提供的dashboard网站,查看所有服务状况; 2、通过dashboard,查看某个服务的所有pod(容器实例);
访问整个服务时,k8s会自动对所有pod做负载均衡;
集群下只能这么做,因为当前pod被调度到哪台机器,你并不知道;