目录
本节内容涉及metrics-server,Dashboard以及HPA
metrics-server
metrics-server是什么
Metrics-Server是集群核心监控数据的聚合器。通俗地说,它存储了集群中各节点的监控数据,并且提供了API以供分析和使用。Metrics-Server作为一个 Deployment对象默认部署在Kubernetes集群中。不过准确地说,它是Deployment,Service,ClusterRole,ClusterRoleBinding,APIService,RoleBinding等资源对象的综合体。
Metrics Server 并不是 kube-apiserver 的一部分,而是通过 Aggregator 这种插件机制,在独立部署的情况下同 kube-apiserver 一起统一对外服务的。kube-aggregator 其实就是一个根据 URL 选择具体的 API 后端的代理服务器。
metrics-server部署
下载yaml文件
[root@k8s2 metrics]# wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
修改部署文件
端口号改为4443,把镜像路径改为自己仓库
上传镜像到harbor
应用components.yaml文件,可以看到running了,但是没有就绪
[root@k8s2 metrics]# kubectl apply -f components.yaml
如有问题,可以查看日志,如证书签发和内网的DNS服务器等设置问题
[root@k8s2 metrics]# kubectl -n kube-system logs metrics-server-5f5599576c-lbqgm
监控所有节点的cpu和mem资源
Dashboard部署
Dashboard可以给用户提供一个可视化的 Web 界面来查看当前集群的各种信息。用户可以用 Kubernetes Dashboard 部署容器化的应用、监控应用的状态、执行故障排查任务以及管理 Kubernetes 各种资源。
官网:GitHub - kubernetes/dashboard: General-purpose web UI for Kubernetes clusters
下载部署文件,镜像位置一改
[root@k8s2 dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
仓库创建新项目kubernetesui,方便管理镜像,上传所需镜像到harbor
部署应用
[root@k8s2 dashboard]# kubectl apply -f recommended.yaml
修改svc,开放服务的端口,用LoadBalancer方式,以便外部访问
[root@k8s2 dashboard]# kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard
集群需要部署metallb-system,如果没有可以使用NodePort方式
需要token,先授权
因为kubernetes-dashboard这个全局角色中写的权限只有读,不可以写,所以我们加入权限
[root@k8s2 dashboard]# vim rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin #权限使用的是以前创建的cluster-admin,在里面有读写权限
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard #作用对象是kubernetes-dashboard
namespace: kubernetes-dashboard
[root@k8s2 dashboard]# kubectl apply -f rbac.yaml
获取token
[root@k8s2 dashboard]# kubectl -n kubernetes-dashboard create token kubernetes-dashboard
使用token登录网页
查看cpu内存
pod查看工作
交互式创建pod
拉伸pod
版本迭代
HPA
应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的Pod个数根据利用情况自动调整呢?这就有赖于HPA(Horizontal Pod Autoscaling)即使Pod水平自动缩放。
Horizontal Pod Autoscaling仅适用于Deployment控制器和ReplicaSet控制器,在V1版本中仅支持根据Pod的CPU利用率扩容与缩容,在v2版本中,支持根据内存和cpu利用率扩容与缩容。HPA需要与metrics配合使用,metrics负责监控cpu和mem数据,然后提供给HPA,HPA根据使用情况自动扩容与缩容。metrics默认只能用cpu和mem两个指标(系统负载),其他监控指标(访问量等等)需要第三方给数据,比如普罗米修斯。
HPA部署----cpu
官网:HorizontalPodAutoscaler 演练 | Kubernetes
准备镜像上传到仓库
编辑hpa.yaml 文件
[root@k8s2 hpa]# vim hpa.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
应用
[root@k8s2 hpa]# kubectl apply -f hpa.yaml
设定HPA控制器,名字叫php-apache,cpu目标使用率是百分之五十,副本最小个数为1,最大个数为10
[root@k8s2 hpa]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
查看pod的cpu使用情况
[root@k8s2 hpa]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0%/50% 1 10 1 73s
压测实验:每0.01秒访问一次php-apache服务,模拟增加php-apache服务的负荷
[root@k8s2 hpa]# kubectl run -i --tty load-generator --rm --image=busybox --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
pod负载上升
[root@k8s2 ~]# kubectl top pod
NAME CPU(cores) MEMORY(bytes)
load-generator 24m 3Mi
php-apache-6496844877-d7gfz 409m 14Mi
触发hpa扩容pod
多项量度指标
想要同时监测cpu和mem,v1版本的hpa不能满足,需要使用v2版本,下面不再使用命令的方式,使用yaml文件的格式生成hpa
[root@k8s2 hpa]# kubectl get hpa php-apache -o yaml > hpa-v2.yaml
修改文件,增加内存指标
- type: Resource
resource:
name: memory
target:
av/erageValue: 5eMi #mem目标使用大小是50M
type: AverageValue
删除之前的v1版本,应用hpa-v2.yaml 文件产生v2版本的hpa
[root@k8s2 hpa]# kubectl apply -f hpa-v2.yaml
查看
[root@k8s2 hpa]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 15835136/50Mi, 0%/50% 1 10 1 20m