前言

本人2017年第一次接触K8S. 中间断断续续学习K8S相关的内容.
但是最近一年,几乎没太有学习.
因为之前学习了四五年, 一直以为产品马上要用
结果一直被浇冷水.
去年开始学乖了. 不这么搞了
但是发现产品要开始用了..
这里只能临时抱佛脚. 猜测一下可能影响K8S上面应用性能的要点.

摘要

1. 物理层面的影响
2. 虚拟化层的影响(如果有)
3. OS层的影响(内核参数, 网络参数等)
4. K8S部署模式的影响
5. K8S网络组件,服务注册发现(etcd压力)的影响.
6. 应用配置的影响(limit request等)
7. POD数量的以及服务出口的影响.
8. 镜像层数,大小,复杂度对拉取,启动和运行性能的影响.
9. 容器运行的损耗.
10.K8S的监控,探针对性能的影响.
11.POD迁移,auto scale 等对性能波动的影响.
12.启动脚本的影响(JVM内存参数优化等)

1. 物理层

1. 物理机器的价格
贵的服务器不一定好, 但是好的服务器一定贵.
2. 物理机器的CPU,主频,核数.电源模式.
注意 最好是设置最高性能, 避免平衡模式导致性能下降.
3. 空调温度
举个例子. 温度较高时,DDR内存的充电会从64ms充电完成,降低到32ms.
会导致充电频率增大一倍,将低内存带宽.
CPU温度过高也会导致自主降频保护.
4. 网络设备.
网卡性能,双工设置,网线材质,交换机配置,交换机压力负责.机房机柜距离.
5. 硬盘类型-raid卡性能.
影响镜像拉取,有应用服务器的启动速度.并且如果前端文件较多,会影响响应速度.
6. 机器CPU类型.是否信创. 内存参数等.

2. 虚拟化层的影响

1. 虚拟化大大降低了部署复杂度,提高了部署效率.
但是也会导致一定的性能开销. 理论上会导致至少15%-25%的性能损失.
2. 虚拟化的超售情况.
虚拟化一般内存超售的比较少(除非是气泡技术).
CPU可能会超售, 会出现挤占的情况,影响性能.
3. 虚拟化的类型.
理论上类似于阿里的神龙,腾讯的黑石,是最佳的虚拟化(不完全)实现技术
ESXi的效率理论上比Openstack的KVM要优秀一些.
4. 虚拟化驱动.
不管是硬件和软件驱动一定要最新.
最新可能有bug,但是旧的一般 性能都不好

3. OS层的影响

1. 内核版本
至少4.18, 太低的版本无法发挥高版本软件的性能.
2. 内核参数
tcp 文件 进程树 磁盘文件类型 落盘参数 是否开启大页等等.
3. 机器剩余磁盘空间
影响IO.
4. 是否进行过优化, 是否关闭了不必要的服务.

4. K8S部署模式的影响

1. K8S的版本
不同版本可能有不同的性能表现
2. K8S的部署方式
是源码部署, 二进制部署, 容器化部署,还是其他部署模式.
理论上经过最优秀编译参数的源码部署性能可能最好
但是技术要求最高.难度也最高.
越是简单的部署,兼容性越高的产品.他越难发挥特定硬件上面的性能.
3. 特定的部署工具
不建议minikube 等方式用于生产.建议选用商业版.
4. K8S使用的容器平台与操作系统内核是否最佳适配.
建议选用官方文档里面测试过最优秀的组合.

5. K8S网络组件,服务注册发现(etcd压力)的影响.

1. 网络组件
flannel calico cilium 不同网络组件对网络性能影响很大.
2. 服务注册发现的性能
拆分SU的情况下可能用到Kube DNS等的组建, 会有一定的性能损耗.
3. service 去找pod时也需要使用pod - id转换.可能也有开销.
4. etcd等的压力
etcd里面存储的内容很多,不仅有网络等的配置(pod node ip设置.)
还影响产品的部署效率和k8s命令的查询速度.

6. 应用配置的影响(limit request等)

1. 需要确认好node的配置.一遍进行pod的资源限制.
建议优化好pod的最低配置,避免影响性能.
2. Pod与node的affinity的影响.
不建议pod集中于某一些node. 一方面有争用.
另外一方面不高可用.
3. pod的配置需要与产品进行验证.
不建议私自修改参数. 尤其是内存和CPU的参数.
而且需要针对不同的应用类型进行定制话的修改.
比如前端应用可能需要更多的内存缓存, 更好的磁盘读写.
后端计算查询汇总应用可能需要更多的CPU进行计算

7. POD数量的以及服务出口的影响.

1. 建议对产品的容量进行规划. 定义好pod数量.
每个pod支撑的用户数量是有限制的, 建议可以进行自动扩展等.
2. 应用出口ingress 面对 service 以及service面对 pod的黏性.
虽然黏性能够降低部分云原生的要求
但是建议还是使用黏性来降低必须要分布式一致性的缓存要求.
3. proxy对服务出口转发的性能的影响
ingress可能需要对所有的node进行转发. 里面的参数和配置也表重要.

8. 镜像层数,大小,复杂度对拉取,启动和运行性能的影响.

1. 镜像尽量要精简.
一方面是大小,一方面是层数.
太大了拉取和推送性能低.层数多了IO性能会收到影响.
2. 降低复杂度
建议镜像内复用文件系统的部署模式.减少不必要的兼容性问题.
3. 进行启动优化.
springboot复杂之后启动速度太慢了 需要优化.
4. 镜像存储路径的设置
建议要尽量大. 定期清理. IO要好,避免影响部署效率.

9. 容器运行的损耗.

1. 容器层需要关注有调优
避免容器启动过多,调度出问题. 并且因为路由表增多后导致路由性能下降.
2. 建议选择最优的容器层的设置.
建议部署时确认版本, 确认参数(systemd,或者是一些部署参数等.)
3. 容器自己也有网络栈, 建议选用最佳的网络栈, 避免不必要的损耗.

10. K8S的监控,探针对性能的影响.

1. cAdviser 等组件的影响.
K8S会自动收集pod等的运行情况, 虽然不会影响POD自身的运行,但是会对整个服务器产生更多的压力.
2. sideCar模式的影响.
istio等组件,以及安全设置可能对应影响产品的交互性.
3. 监控探针会产生多余的非产品的流量, 如果产品并发量足够多,建议能够拆分不同的物理网卡进行承载.
区分开东西和南北流量.

11.POD迁移,auto scale 等对性能波动的影响.

1. POD迁移等
从容器承载应用开始一般就要求应用服务器是无状态.
因为再K8S看来容器都是朝生墓死的. 最开始K8S都是要求不开swap
可以做到fast failure 避免程序在半死不活状态影响判断.
但是这就导致了一个问题. pod可能会不听的启动迁移.
如果没有预热和预加载会导致前几次响应超级缓慢. 需要优化.
2. 自动扩容等的影响.
与上面一个内容类似. 因为可以自动或者是人工的扩容, 这一块必须得进行相关的优化.
不然首次访问可能存在问题
可能需要预热和特定脚本进行拉起特定产品的缓存.

12. 启动脚本的影响(JVM内存参数优化等)

1. JDK_1.8_191开始.java就可以识别自己是在镜像内了.
但是建议针对不同的应用还是进行JVM内存参数的设置.
比如文档系统高IO占用的和流程高CPU占用的使用相同的JVM参数肯定不合适.
建议需要有最佳时间, 进行比率设置.
2. JAVA版本的选择.
不建议选用没有验证过的java版本跑生产. 建议使用成熟稳定测试过的版本.
3. 不同CPU的处理
华为鲲鹏社区曾经发文称,ARM的codecache的要求要比x86的codecache内存要大
因为RISC的指令集在相同代码编译时会产生更大的code cache item.
同样的产品, 对code cache 方法区缓存的要求会更大.
建议针对不同架构的CPU进行特定的参数设置.

部署于K8S集群上面应用性能影响点推测的更多相关文章

  1. Centos7 安装部署Kubernetes(k8s)集群

    目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernetes集群 4. ...

  2. China Azure中部署Kubernetes(K8S)集群

    目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...

  3. 基于 Sealos 的镜像构建能力,快速部署自定义 k8s 集群

    Sealos 是一个快速构建高可用 k8s 集群的命令行工具,该工具部署时会在第一个 k8s master 节点部署 registry 服务(sealos.hub),该域名通过 hosts 解析到第一 ...

  4. 用kubeadm+dashboard部署一个k8s集群

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 1. 安装要求 在开始之前,部署Kubernetes集群 ...

  5. 5.基于二进制部署kubernetes(k8s)集群

    1 kubernetes组件 1.1 Kubernetes 集群图 官网集群架构图 1.2 组件及功能 1.2.1 控制组件(Control Plane Components) 控制组件对集群做出全局 ...

  6. Centos 7 部署Kubernetes(K8S)集群

    资源链接:https://pan.baidu.com/s/1-PT_QQAf7cTu_znX-S-r9Q 密码:33sr 转发:http://blog.51cto.com/lizhenliang/19 ...

  7. [k8s]jenkins部署在k8s集群

    $ cat jenkins-pvc.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: jenkins-pvc spec: ...

  8. Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14

    目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...

  9. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  10. 通过kubeadm工具部署k8s集群

    1.概述 kubeadm是一工具箱,通过kubeadm工具,可以快速的创建一个最小的.可用的,并且符合最佳实践的k8s集群. 本文档介绍如何通过kubeadm工具快速部署一个k8s集群. 2.主机规划 ...

随机推荐

  1. 云原生2.0时代下,DevOps实践如何才能更加高效敏捷?

    当前全球的数字化浪潮逐步加深,云计算成为当今信息化发展的重要基础设施,云原生(Cloud Native)在数字化浪潮中的角色逐步提升,成为近几年云计算领域炙手可热的话题. 首先我们来看看一张图,看看云 ...

  2. 使用Mask R-CNN模型实现人体关键节点标注

    摘要:在本案例中,我们将展示如何对基础的Mask R-CNN进行扩展,完成人体关键节点标注的任务. 本文分享自华为云社区<使用Mask R-CNN模型实现人体关键节点标注>,作者: 运气男 ...

  3. 一文带你 GNN 从入门到起飞,做一个饭盆最稳 GNN 饭人!

    摘要:本文介绍了图神经网络在学界和业界的发展情况,并给出了图神经网络的基本概念与表示形式,总结了图神经网络的变体,最后介绍了华为云图神经网络框架. 本文分享自华为云社区<干饭人,干饭魂,搞懂图神 ...

  4. 火山引擎DataLeap数据血缘技术建设实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 DataLeap是火山引擎数智平台VeDI旗下的大数据研发治理套件产品,帮助用户快速完成数据集成.开发.运维.治理 ...

  5. PPT 商务报告,如何去表现客户LOGO

    PPT 商务报告,如何去表现客户LOGO LOGO 如何下载 LOGO 如何展示 矩阵排列 删除背景,变成白色 删除背景 设置透明度 AI 软件做成矢量图 LOGO 转色法

  6. Mysql--between

    between 用于where 表达式中,选取介于两个值之间的数据范围,同and一起搭配使用 语法: expr [NOT] BETWEEN begin_expr AND end_expr; 在整个表达 ...

  7. L2-008 最长对称子串 (回文子串 / DP / Manacher算法)

    对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11. 输入格式: 输入在一 ...

  8. 写SAE评测,获 Airpods 2大奖【集结令】!

    Serverless 应用引擎 SAE 开启测评有奖!名额有限,先到先得! Serverless应用引擎SAE是一款极简易用.自适应弹性的容器化应用平台.现面向所有用户发出诚挚邀请,参与一分钟部署在线 ...

  9. win32com操作word API精讲 第八集 Range和Selection的区别

    本课程<win32com操作word API精讲&项目实战>以视频为主,文字为辅,公众号ID:一灯编程 众所周知,在word编程中Range和Selection都能实现范围的选中, ...

  10. sipp3.6多方案压测脚本

    概述 SIP压测工具sipp,免费,开源,功能足够强大,配置灵活,优点多. 有时候我们需要模拟现网的生产环境来压测,就需要同时有多个sipp脚本运行,并且需要不断的调整呼叫并发. 通过python脚本 ...