Kubernetes简介及集群硬件配置要求

一、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

基于原文略有调整,如有不对之处还请指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注