Kubernetes —— 全生命流程
Posted 刘小豆豆豆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes —— 全生命流程相关的知识,希望对你有一定的参考价值。
作为实习生,整天听组里的大佬们谈一些kubectl、Pod等有关k8s的概念,听不懂很难受,于是下定决心学一下。K8s作为虚拟化容器的集大成者想要搞懂真的很难,看了很多概念仍然是一头雾水,感觉比较合适的学习路线是先搞懂它是用来干嘛的,然后弄清楚几个关键概念,比如Pod,再把集群搭起来,服务部署上去(怎么用),然后反过来看原理。
本篇将从整体上(全生命流程中)了解什么是kubernetes。
学习K8S前最好要了解一点云原生的相关内容。
1、k8s是什么?
kubernetes是一个基于容器技术的分布式架构领先方案,是编排容器的工具。其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。
k8s可以更快的更新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。
2、k8s的全生命周期管理
在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。
1、创建集群:为什么要使用集群?
在各种环境中,底层的硬件各不相同,有的是各种低廉的服务器,有的各种云环境,有的是各种vm,有的各种host machine,要想屏蔽底层的细节,增强可靠性和稳定性,从而需要创建集群。创建集群的好处就是,统一对外提供接口,无须进行各种复杂的调用;提供更好的可靠性,服务器宕机那么频繁,物理磁盘那么容易损坏,无须担心,集群统一进行调配;提供更好的性能,组合集群中各个机器的计算存储网络资源,提供更好的TPS和PS;提供横向扩容的能力,在进行横向扩容的时候,性能基本上能呈线性增长。总而言之,集群可以把多台服务器的计算、存储能力结合起来统一对外提供。
K8S搭建集群只需要两条指令即可,首先使用kubectl init
进行初始化,创建一个master节点,然后再通过kubectl join xxx
创建一个node节点,加入这个集群。
k8s在物理上进行划分的时候,划分了两种类型的主机,一个master节点,主要用来调度,控制集群的资源等功能。node节点,主要是用来运行容器的节点,也就是运行服务的节点。master用来控制,用来存储各种元数据,node节点是一个工作节点,真正来干活的;node节点定时与master进行通信,通过kubelet进程来汇报信息。
2、部署应用
一条指令就能运行一个服务,有了image之后就是这么简单。所以,在开发完成程序之后,需要将程序打包成image,然后放到registry中,然后就能够运行应用了。
在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。
3、发布服务
发布应用主要就是对外提供服务,这里有一个疑问:都运行了服务,为什么还不能提供服务?这是因为在集群当中,创建的ip地址等资源,只有在同一个集群中才能访问,每个pod也有独一的ip地址,当有多个pod提供相同的服务的时候,就需要有负载均衡的能力,从而这里就涉及到一个概念就是service,专门用来提供服务的。
服务主要是用来提供外界访问的接口,服务可以关联一组pod,这些pod的ip地址各不相同,而service相当于一个负载均衡的调度器,用来指向各个pod,当pod的ip地址发生改变之后,也能做到自动进行负载均衡。在关联的时候,service和pod之间主要通过label来关联,也就是标签(-l表示为label)。简言之,由于系统稳定/容灾等要求,同一种服务可能有多个Pod来提供,Service用来管理这一组Pod进行负载均衡,并提供一个访问接口,当其中一个Pod不可用时,由其他Pod顶替,保障服务的可用。
4、弹性伸缩
上文中提到一个服务可由多个Pod提供,由Service统一管理。当业务上线后,访问量激增需要扩容时,只需要由一个Pod生产出多个Pod即可,然后交给Service自动负载均衡即可。
若访问量降下来,采取缩容即可
K8s提供了极其方便的横向扩展能力,每次扩容、缩容一行指令即可不用重新去一台机器部署服务,修改配置。
5、更新服务
k8s可以更快的更新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。
K8S可用滚动更新,根据新的image创建一个pod,分配各种资源,然后自动负载均衡,删除老的pod,然后继续灰度,不会中断服务。当更新出现问题时,K8S也提供了回滚功能,极其方便。
了解K8S的全生命周期后再学习K8S的基础概念就会明了很多
以上是关于Kubernetes —— 全生命流程的主要内容,如果未能解决你的问题,请参考以下文章
从Gradle生命周期到自定义Task挂接到Build构建流程全解
从Gradle生命周期到自定义Task挂接到Build构建流程全解