资源监控
Metrics Server是一个集群范围的资源使用情况的数据聚合器。
作为一个应用部署在集群中。Metric server从每个节点上Kubelet API收集指标,通过Kubernetes聚合器注册在Master APIServer早期版本使用cAdvisor采集数据,现已将cAdvisor集成到kubelet组件里面。
当然我们可以使用kubectl top来查看监控信息:
metrics项目地址:
https://github.com/kubernetes-sigs/metrics-server
部署metrics-server:
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/metrics-server-helm-chart-3.8.0/components.yaml
Bash复制
修改yaml文件,默认image使用google,image无法拉取,这里我们使用aliyun:
133 containers:
134 - args:
135 - --cert-dir=/tmp
136 - --secure-port=4443
137 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
138 - --kubelet-use-node-status-port
139 - --metric-resolution=15s
140 - --kubelet-insecure-tls
141 #image: k8s.gcr.io/metrics-server/metrics-server:v0.6.0
142 image: registry.aliyuncs.com/google_containers/metrics-server:v0.6.0
143 imagePullPolicy: IfNotPresent
YAML复制

kubectl apply -f components.yaml
Bash复制
执行后pod一直未处于就绪状态:

查看pod状态信息,发现就绪检查失败。因为证书的原因,修改启动参数不验证https证书即可。


重新执行yaml文件,pod启动成功:

使用kubectl top 获取采集信息:
[root@k8s-master ~]# kubectltopnodek8s-node1
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-node1 336m 16% 965Mi 51%
[root@k8s-master ~]# kubectltopnodek8s-node2
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
k8s-node2 357m 17% 961Mi 51%
[root@k8s-master ~]# kubectltoppodmy-busybox
NAME CPU(cores) MEMORY(bytes)
my-busybox 0m 0Mi
Bash复制
Pod水平伸缩
HPA(Horizontal Pod Autoscaler)pod水平伸缩,可以基于cpu使用率、内存使用率自动扩缩 ReplicationController、Deployment和 StatefulSet 中的 Pod 数量,当然也可以基于其他监控程序的指标来执行扩缩容。
kubectl top/hpa -> apiserver -> metrics-server -> kubelet -> pod
要实现水平扩缩容必须满足两个条件:
集群必须安装metrics监控组件; Pod必须配置resource.request(pod limit)。
首先我们创建一个deployment,必须配置request字段:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
resources:
limits:
cpu: "0.5"
memory: 100Mi
requests:
cpu: "0.2"
memory: 50Mi
YAML复制
配置autoscale,最小1个副本最多4个副本,当cpu-percent超过80进行扩容:

创建svc暴露服务,方便访问nginx:

使用ab工具压测测试,-w观察pod数量、HPA指标:

HPA获取到cpu-percent超过80%,扩容,副本加1:


我们再看下pod和endpoint状态:




本文作者:赵建强(上海新炬中北团队)
本文来源:“IT那活儿”公众号
