一、Kubernetes的定义
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署、规划、更新、维护的一种机制。由于Kubernetes中首尾字母中间有8个字母,所以Kubernetes也被叫做K8s。
Kubernetes官网:https://kubernetes.io/
二、 Kubernetes的优势
1、对于开发人员、测试人员
1)、大大降低日志收集和操作时间
由于公司业务多,开发环境、测试环境、预生产环境和生产环境都是隔离的,而且除了生产环境,为了节省成本,其他环境是没有日志收集的。在没有用K8s的时候,查看线下测试的日志,需要开发或者测试人员,找到对应的机器,在找到对应的容器,然后才能查看日志,在用了K8s之后,开发和测试可以直接在K8s的Dashboard到对应的namespace,即可定位到业务的容器,然后可以直接通过控制台查看到对应的日志,大大降低了操作时间。
2)、大大提高开发效率
把应用部署到K8s之后,代码的发布、回滚,以及蓝绿发布、金丝雀发布等都变得特别简单,不仅加快了业务代码迭代的速度,而且全程无需人工干预。目前我们使用Jenkins、GitRunner进行发版或者回滚等,从开发环境到测试环境,到最后的生产环境,完全遵守一次构建,多集群、多环境部署,通过不同的启动参数、不同的环境变量、不同的配置文件实现区分不同的环境。目前已经实现Python、Java、PHP、NodeJS、Go、.NET Core等多种语言的一键式发版、一键式回滚,大大提高了开发人员的开发效率。
3)、侧重点更集中,更关注于代码本身
在使用服务网格后,开发人员在开发应用的过程中,不用再关心代码的网络部分,这些功能都被服务网格实现,让开发人员可以只关心代码逻辑部分,即可实现网络部分的功能,比如:断流、分流、路由、负载均衡、限速和触发故障等功能。
4)、部署测试更容易、更便捷、更高效
测试过程中,可能同时多套环境,当然也会需要再创建一套测试环境,之前测试环境的创建,需要找运维或者自行手工搭建。在迁移至K8s集群后,只需要在Jenkins上点点鼠标即可在K8s集群上创建一套新的测试环境。
2、对于运维人员
1)、大大降低运维成本
如果你是一名运维人员,可能经常因为一些重复、繁琐的工作感觉厌倦。比如:这个需要一套新的测试环境,那个需要一套新的测试环境,之前可能需要装系统、装依赖环境、开通权限等等。而如今,可以直接用镜像直接部署一套新的测试环境,甚至全程无需自己干预,开发人员通过Jenkins或者自动化运维平台即可一键式创建,大大降低了运维成本。
2)、容错率和自动解决错误提高
一开始,公司业务故障,可能是因为基础环境不一致、依赖不一致、端口冲突等等问题,现在实现镜像部署,所有的依赖、基础都是一样的,大大减少了因为这类基础问题引发的故障。也有可能公司业务是由于服务器宕机、网络等问题,造成服务不可用,此类情况均需要运维人员及时去修复,而如今,可能在你收到告警信息的时候,K8s已经帮你恢复了。
3)、大大提高资源利用率
在没有使用K8s时,业务应用的扩容和缩容,都需要人工去处理,从采购服务器、上架、到部署依赖环境,不仅需要大量的人力物力,而且非常容易在中间过程出现问题,又要花费大量的时间去查找问题。成功上架后,还需要在前端反代端添加或该服务器,而如今,可以利用K8s的弹性计算,一键式进行扩容和缩容,不仅大大提高了运维效率,而且还节省了不少的服务器资源,提高了资源利用率。
4)、对运维人员技术要求降低,更简单和易上手
对于反代配置方面,比如可能你并不会,或者对Nginx的配置规则并不熟悉,一些高级的功能你也不会实现,而如今,利用K8s的Ingress即可简单的实现那些负责的逻辑。并且也不会在遇到Nginx少加一个斜杠和多加一个斜杠的问题。
5)、自动扩容和管理
对于负载均衡方面,之前负载均衡可能是Nginx、LVS、HAProxy、F5等,云上可能是云服务商提供的不在均衡机制。每次添加删除节点时,都需要手动去配置前端负载均衡,手动去匹配后端节点,而如今,使用K8s内部的Service可以动态发现实现自动管理节点,并且支持自动扩容缩容。之前遇到高峰流量时,经常服务器性能不够,需要临时加服务器面对高峰流量,而如今对于高性能K8s集群,无需管理,自动扩容。
6)、大大降低的出错率
对于高可用方面,K8s天生的高可用功能,彻底释放了双手,无需再去创建各类高可用工具、检测检查脚本。K8s支持进程级别的健康检查,如发现接口超时或者返回值不正确,会自动处理该问题。
7)、秒级搭建中间件
对于中间件搭建方面,根据定义好的deploy文件,可以实现秒级搭建各类中间件高可用集群,如Redis、RabbitMQ、Zookeeper等,并且大大减少了出错的概率。
8)、统一配置、统一管理、自动实现负载均衡
对于应用端口方面,传统行业中,一个服务器可能跑了很多进程,每个进程都有一个端口,需要人为的去配置端口,并且还需要考虑端口冲突的问题,如果有防火墙的话,还需要配置防火墙,在K8s中,端口统一管理,统一配置,每个应用的端口都可设置成一样的,之后通过Service进行负载均衡。
3、总结
综上所述,无论是对于开发人员、测试人员还是运维人员,K8s的诞生,不仅减少了工作的复杂性,还减少了各种成本。上述带来的变革只是其中比较小的一部分,更多优点只有用了才能体会到。
三、 Kubernetes的硬件配置
为了能够搭建高效、稳定、安全的K8s高可用系统,需对服务器各项要素,进行周到的考虑,首要的考虑是硬件配置。
1、Master节点(管理节点)规格
通过容器服务创建的Kubernetes集群,Master节点上运行着etcd、kube-apiserver、kube-controller等核心组件,对于Kubernetes集群的稳定性有着至关重要的影响,对于生产环境的集群,必须慎重选择Master规格。Master规格跟集群规模有关,集群规模越大,所需要的Master规格也越高。
可从多个角度衡量集群规模,例如节点数量、Pod数量、部署频率、访问量。这里简单的认为集群规模就是集群里的节点数量,对于常见的集群规模,可以参见如下的方式选择Master节点的规格(对于测试环境,规格可以小一些。下面的选择能尽量保证Master负载维持在一个较低的水平上)。
节点规模 | Master规格 |
1~5个节点 | 4核8G(不建议2核4G) |
6~20个节点 | 4核16G |
21~100个节点 | 8核32G |
100~200个节点 | 16核64G |
2、Worker节点(工作节点)规格
1)、确定整个集群的日常使用的总核数以及可用度的容忍度
例如:集群总的核数有160核,可以容忍10%的错误。那么最小选择10台16核ECS,并且高峰运行的负荷不要超过16090%=144核。如果容忍度是20%,那么最小选择5台32核ECS,并且高峰运行的负荷不要超过16080%=128核。这样就算有一台ECS出现故障,剩余ECS仍可以支持现有业务正常运行。
2)、确定CPU : Memory比例
对于使用内存比较多的应用例如Java类应用,建议考虑使用1 : 8的机型。
引用:
《全网最全的搭建Kubernetes准备工作配置》:https://blog.csdn.net/qq_37840993/article/details/114396787
基于原文略有调整,如有不对之处还请指正。