首先抛出我的结论,kubernetes一定会火,非常值得我们学习。
就像N年前企业需要自建机房部署服务器,当阿里云等云厂商兴起之后,大家都开始“上云”了,既方便快捷稳定,又免去了运维人员的开销。
而kubernetes能进一步解放生产力,提高项目部署的灵活性,提高应用的容灾能力,动态伸缩等。
简介
Kubernetes(简称:k8s)是Google开源的容器集群管理系统,是一个全新的基于容器技术的分布式架构领先方案,简单来说K8S是容器编排管理平台。
在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
一图胜前言
构成要件
- Kubernetes集群主要由Master和Node两类节点组成
- Master的组件包括:etcd、Api Server、Scheduler和Controller Manager等几个组件,其中Api Server是整个集群的网关。
- Node主要由Docker、Kubelet、Kubenetes Proxy等组件组成。
功能介绍
Master
- 是Kubernetes的主节点,管理节点。
- 是集群的网关和中枢枢纽,主要作用:暴露API接口,跟踪其他服务器的健康状态、以最优方式调度负载,以及编排其他组件之间的通信。
- 单个的Master节点可以完成所有的功能,但是考虑单点故障的痛点,生产环境中通常要部署多个Master节点,组成Cluster。
Node
- 是Kubernetes的工作节点。
- 负责接收来自Master的工作指令,并根据指令相应地创建和销毁Pod对象。
- 调整网络规则进行合理路由和流量转发。
- Node节点往往有多个。
功能
官方的说法是:
- 快速部署和扩展应用
- 无缝对接新的应用
- 节省资源,动态扩缩容
是不是觉得官方介绍的功能很抽象,下面我结合自己的项目经验来介绍一下K8S的功能:
自动化上线和回滚
传统的上线方式大多是通过手动操作git:本地开发好之后上传到测试环境,测试环境确定好之后上传到生产环境。
当团队多人协同开发或者出现特殊情况时,比如:本地和测试环境安装了新的依赖,生产环境没有及时安装,git上传到生产环境后出现异常。
甚至在有些特殊情况下,我们需要在生产环境merge代码(别问我怎么知道的)。在这种情况下真的冒汗, 生产环境merge过程中出现代码冲突,一定会影响项目正常访问的。
有了K8S,能优雅的帮我们解决这个问题:
Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保不会同时终止所有实例。如果出现问题,Kubernetes会为你回滚所作更改。
自动修复
我曾经因为没有很好的管理服务器磁盘出现过一次事故,当时身边又没有电脑,真是愁的跳脚。
从此以后我就把ECS/RDS等都设置了报警,当有隐患或者异常时能第一时间收到信息及时处理。
当时我就在思考