一、 K8S监控组件metrics-server

安装步骤


1.添加开源社的仓库
[root@k8s-master ~]# helm repo add kaiyuanshe http://mirror.kaiyuanshe.cn/kubernetes/charts/#搜索metrics-server
[root@k8s-master ~]# helm search repo metrics-server2.下载metrics-server包
helm pull kaiyuanshe/metrics-server3.解压
tar -xf metrics-server-2.11.4.tgz4.修改values.yaml文件
cd metrics-servervim values.yaml# 替换成下面的镜像源和版本号
image:repository: registry.cn-hangzhou.aliyuncs.com/linxiaowen/metrics-servertag: v0.4.1args: []    # 删掉括号,换行写入下方内容,经测试,下面缩不缩进都没关系,如果端口冲突则在下方修改。- --cert-dir=/tmp- --secure-port=6443- --metric-resolution=30s- --kubelet-insecure-tls- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,externalDNS- --requestheader-username-headers=X-Remote-User- --requestheader-group-headers=X-Remote-Group- --requestheader-extra-headers-prefix=X-Remote-Extra-# 如果出现端口被占用了,改端口的话,需要改两个文件三处地方一起改端口(注:必须同时修改以下端口)
[root@k8s-m-01 metrics-server]# grep -R '8443' ./
./templates/metrics-server-deployment.yaml:            - --secure-port=6443
./templates/metrics-server-deployment.yaml:          - containerPort: 6443
./values.yaml:  - --secure-port=64435.创建用户
[root@k8s-master metrics-server]# kubectl create clusterrolebinding system:anonymous  --clusterrole=cluster-admin  --user=system:anonymous6.安装metrics-server
[root@k8s-master metrics-server]# helm install metrics-server ./7.查看metrics-server的pod服务跑起来没有
[root@k8s-master metrics-server]# kubectl get pod
metrics-server-675ccccb46-84pbm               1/1     Running   0          19m7.服务起来后测试命令
[root@k8s-m-01 metrics-server]# kubectl top nodes
NAME         CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
k8s-master   110m         5%     948Mi           32%
k8s-node1    41m          2%     1013Mi          35%
k8s-node2    60m          3%     1228Mi          42%    [root@k8s-m-01 metrics-server]# kubectl top pod
NAME                                          CPU(cores)   MEMORY(bytes)
nfs-nfs-client-provisioner-8557b8c764-lc4nx   3m           6Mi

二、HPA自动伸缩

在生产环境中,总会有一些意想不到的事情发生,比如公司网站流量突然升高,此时之前创建的Pod已不足以撑住所有的访问,而运维人员也不可能24小时守着业务服务,这时就可以通过配置HPA,实现负载过高的情况下自动扩容Pod副本数以分摊高并发的流量,当流量恢复正常后,HPA会自动缩减Pod的数量。HPA是根据CPU的使用率、内存使用率自动扩展Pod数量的,所以要使用HPA就必须定义Requests参数。

HPA全称是Horizontal Pod Autoscaler,翻译成中文是POD水平自动伸缩HPA可以基于CPU利用率对replication controller、deployment和replicaset中的pod数量进行自动扩缩容(除了CPU利用率也可以基于其他应程序提供的度量指标custom metrics进行自动扩缩容)。pod自动缩放不适用于无法缩放的对象,比如DaemonSets。HPA由Kubernetes API资源和控制器实现。资源决定了控制器的行为。控制器会周期性的获取平均CPU利用率,并与目标值相比较后来调整replication controller或deployment中的副本数量。


# 编写pod资源清单
kind: Deployment
apiVersion: apps/v1
metadata:name: hpa
spec:selector:matchLabels:app: hpatemplate:metadata:labels:app: hpaspec:containers:- name: hpaimage: alvinos/django:v1resources:requests:           # 最少使用多少资源cpu: 100m         # cpu最少给100mmemory: 100Mi     # 内存最少给100Milimits:             # 最多使用多少资源cpu: 200m         # cpu最多给200m,最多不能超过memory: 200Mi     # 内存最多给200Mi,最多不能超过
---
# 配置HPA资源清单
kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2beta1
metadata:name: hpanamespace: default
spec:# HPA的最小pod数量和最大pod数量maxReplicas: 10minReplicas: 2# HPA的伸缩对象描述,HPA会动态修改该对象的pod数量scaleTargetRef:kind: Deploymentname: hpaapiVersion: apps/v1# 监控的指标数组,支持多种类型的指标共存metrics:- type: Resource#  核心指标,包含cpu和内存两种(被弹性伸缩的pod对象中容器的requests和limits中定义的指标。)resource:name: cpu# CPU 阈值# 计算公式:所有目标pod的metric的使用率(百分比)的平均值,# 例如limit.cpu=1000m,实际使用500m,则utilization=50%# 例如(副本数)deployment.replica=3, limit.cpu=1000m,则pod1实际使用cpu=500m, pod2=300m, pod=600m## 则averageUtilization=(500/1000+300/1000+600/1000)/3 = (500 + 300 + 600)/(3*1000))=0.4666666666666667# 例如limit设置200m   40 41 42    计算的结果是:(40+41+42)/600=0.205targetAverageUtilization: 40      # 注:表示cpu使用率超过40%,cpu超过40就立即扩容,cpu最多扩容10个,最小2个。200*0.4=80(80以下都是它的安全范围)---
# 编写service资源清单
kind: Service
apiVersion: v1
metadata:name: hpa
spec:ports:- port: 80targetPort: 80selector:app: hpa

单位解释

requests:代表容器启动请求的资源限制,分配的资源必须要达到此要求
limits:代表最多可以请求多少资源
单位m:CPU的计量单位叫毫核(m)。一个节点的CPU核心数量乘以1000,得到的就是节点总的CPU总数量。如,一个节点有两个核,那么该节点的CPU总量为2000m。

下面拿双核举例:

  resources:requests:cpu: 50m     #等同于0.05memory: 512Milimits:cpu: 100m    #等同于0.1memory: 1Gi

含义:该容器启动时请求50/2000的核心(2.5%)并且允许最多使用100/2000核心(5%)
0.05个核除总核数量2就是2.5%了,0.1个核除总核数就2是5%了

        resources:requests:cpu: 100m    #等同于0.1memory: 512Milimits:cpu: 200m    #等同于0.2memory: 1Gi

cpu单位m的含义:该容器启动时请求100/2000的核心(5%)并且允许最多使用200/2000核心(10%)
0.1个核除总核数量2就是5%了,0.2个核除总核数2就是10%了

应用

2、# 应用资源
[root@k8s-master ~]# kubectl apply -f hpa.yaml
deployment.apps/hpa created# 查看hpa监控cpu的使用率
[root@k8s-master ~]#kubectl get horizontalpodautoscalers.autoscaling
NAME   REFERENCE        TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
hpa    Deployment/hpa   24%/40%   2         10        2          53s3、# 查看主机资源使用率
[root@k8s-master ~]# kubectl top pods
NAME                                          CPU(cores)   MEMORY(bytes)
hpa-5cb8bcdc4f-xvkkf                          11m          54Mi  # 查看pod运行详情
[root@k8s-master ~]# kubectl get pods
NAME                                          READY   STATUS    RESTARTS   AGE
hpa-5cb8bcdc4f-xvkkf                          1/1     Running   0          7m4s# 查看svc运行详情
[root@k8s-master ~]# kubectl get svc
NAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
hpa                            ClusterIP   10.1.159.102   <none>        80/TCP           6m50s# 给集群上每个节点输入下面的命令,进行压力测试
[root@k8s-master ~]# while true; do curl 10.1.159.102/index; echo ''; done# 再次查看本pod的CPU运行状态(cpu流量会增大,如下所示)
[root@k8s-master ~]# kubectl top pods
NAME                                          CPU(cores)   MEMORY(bytes)
hpa-5cb8bcdc4f-xvkkf                          163m         56Mi # 再次查看pod的数量会增加(这就实现了用HPA监控cpu使用率,随着cpu的使用率的增大会自动扩容pod容器)
[root@k8s-master ~]# kubectl get pods
NAME                                          READY   STATUS    RESTARTS   AGE
hpa-7f5d745bf9-45fkj                          1/1     Running   0          4m39s
hpa-7f5d745bf9-5qb4d                          1/1     Running   0          4m55s
hpa-7f5d745bf9-5vnfl                          1/1     Running   0          4m40s
hpa-7f5d745bf9-fh66r                          1/1     Running   0          4m55s
hpa-7f5d745bf9-fnlx4                          1/1     Running   0          15m
hpa-7f5d745bf9-g7r5c                          1/1     Running   0          4m55s
hpa-7f5d745bf9-qdrc7                          1/1     Running   0          4m39s
hpa-7f5d745bf9-s2sbx                          1/1     Running   0          4m39s
hpa-7f5d745bf9-sz9zz                          1/1     Running   0          6m56s
hpa-7f5d745bf9-zw778                          1/1     Running   0          16m

可以看到自动伸缩到十个。

kubernetes中metrics-server与HPA相关推荐

  1. Kubernetes基于Metrics Server的HPA

    Kubernetes基于Metrics Server的HPA [TOC] 1. 环境说明和相关介绍 我的kubernetes环境: kubeadm安装的kubernetes1.11 Horizonta ...

  2. Kubernetes — 安装 Metrics Server

    目录 文章目录 目录 Kubernetes Metrics Server 启用 API Aggregator 安装 Metrics Server Kubernetes Metrics Server K ...

  3. 关于 Kubernetes中API Server授权(RBAC)管理的一些笔记

    写在前面 学习K8s涉及,整理笔记记忆 博文偏实战,内容涉及: k8s中API Server的授权策略简述 RBAC授权策略中涉及到的资源对象创建删除 Role ClusterRole RoleBin ...

  4. 关于Kubernetes中API Server使用token、kubeconfig文件认证的一些笔记

    写在前面 学习K8s涉及,整理笔记记忆 博文偏实战,内容涉及: token方式的API Server认证Demo Kubeconfig文件方式的API Server认证Demo Kubeconfig文 ...

  5. 关于Kubernetes中kubelet的一些笔记

    写在前面 今天和小伙伴们分享K8s中Kubelet组件相关笔记 内容涉及kubelet运行机制解析包括 节点Kubelet服务管理 kubeletPod管理 Pod的健康检查 理解不足小伙伴帮忙指正 ...

  6. 使用 dotnet-monitor 在 Kubernetes 中收集 .NET metrics

    使用 dotnet-monitor 在 Kubernetes 中收集 .NET metrics Intro dotnet-monitor 是微软推出的一个帮助我们诊断和监控 .NET 应用程序的工具, ...

  7. Easypack: Ansible方式部署工具中增加Metrics Server支持

    在Easypack中提供了多套Kubernetes快速部署的工具,基于Bash脚本和Ansible的,Ansible的方式也有基于K3S和普通的Kubernetes的两种.这篇文章介绍一下普通Kube ...

  8. 【K8S 七】Metrics Server部署中的问题

    目录 填坑过程 问题一:启动metrics server报证书错误:x509: cannot validate certificate for x.x.x.x because it doesn't c ...

  9. Kubernetes 【监控】1. Metrics Server、Aggregator APIServer和Prometheus监控体系

    文章目录 1. 背景 2. 简介 3. 监控对象类型 4. Metrics Server简介 5. Metrics Server部署 5.1 下载并解压Metrics-Server 5.2 修改Met ...

  10. Grafana 在 Kubernetes 中的使用

    安装 grafana 是一个可视化面板,有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持 Graphite.zabbix.InfluxDB.Prometheus.OpenTSDB. ...

最新文章

  1. 蓝桥杯基础模块2:蜂鸣器继电器
  2. 《转载》struts旅程《2》
  3. IOS 学习笔记 2015-03-27 我理解的OC-代理模式
  4. 服务器ping多少网站打开正常,服务器网站ping异常问题解析
  5. 2016学计算机软件,2016年夏季学期计算机(软件)学院学年论文字数、页数和格式要求.doc...
  6. 完美解决Python与anaconda之间的冲突问题
  7. 微信安装正确操作方法
  8. BAT算法工程师的成长之路,超详细的学习路线
  9. 微信公众号支付开发(java)实例详解
  10. 在Realview MDK中添加自己的FLASH编程算法
  11. 在网页中实现录音功能
  12. 腐蚀rust图纸怎么找_rust腐蚀建家图纸 | 手游网游页游攻略大全
  13. Dreammaker水疗流行的Eclipse从他们的加州系列,审议
  14. VMD常用命令(转载)
  15. 【B类】BI商业智能、大数据、Mysql、等系列课程集
  16. 英文格式的时间转换为 yyyy-MM-dd 格式
  17. 立创开源 | 基于ESP-01的桌面小彩灯
  18. 计算机逻辑部件按其结构可分为,《数字逻辑电路》期末大作业实验报告
  19. 【命名规则】驼峰命名法
  20. SCAU 18942 偏爱字母

热门文章

  1. MicroLib微库和ARM标准C库有什么区别?
  2. 【第十篇】商城系统-性能测试
  3. ISO 14443 非接触式射频卡标准学习
  4. jvarkit包问题反馈:构建成功,部分方法测试失败第4类错误分析
  5. 是时候让企业拥有“AI自由”了
  6. SCT2430STER电池应用
  7. 诺基亚n1支持java功能_诺基亚(NOKIA)N1平板电脑按键及接口评测-ZOL中关村在线
  8. java毕业设计家庭理财管理系统mybatis+源码+调试部署+系统+数据库+lw
  9. 2019下半年中小学教资考试教育知识与能力试题(中学)——主观题
  10. 国科大学习资料--最优化计算方法(王晓)-期末考试真题3