背景
用户想在TKE环境中自己部署metrics-server去获取监控数据, 想对监控系统有更多的控制权,好多用户会选择在TKE中自己部署一套Metrics-Server Prometheus Grafana
这里只讲述Metric-Server 在TKE中的部署以及注意事项风险。
用户遇到的问题有一下几点:
- 部署后访问不通(因为使用create -f 命令导致访问的是hap的地址)
- 部署成功hpa出现问题
metrics-server架构:
kubernetes 集群资源监控在初期是通过过 heapster 来获取数据,在 1.11 开始开始逐渐废弃 heapster 了,采用 metrics-server 来代替,metrics-server 是集群的核心监控数据的聚合器,它从 kubelet 公开的 Summary API 中采集指标信息,metrics-server 是扩展的 APIServer,依赖于kube-aggregator,因此我们需要在 APIServer 中开启相关参数:
代码语言:txt复制- --requestheader-client-ca-file=/etc/kubernetes/certs/proxy-ca.crt
- --proxy-client-cert-file=/etc/kubernetes/certs/proxy.crt
- --proxy-client-key-file=/etc/kubernetes/certs/proxy.key
- --requestheader-allowed-names=aggregator
- --requestheader-extra-headers-prefix=X-Remote-Extra-
- --requestheader-group-headers=X-Remote-Group
- --requestheader-username-headers=X-Remote-User
- --enable-aggregator-routing=true
注意: 如果master节点没有启动kube-proxy, kube-apiserver 启动参数需要增加
--enable-aggregator-routing=true
部署
环境:
- TKE
- Metrics-Server Version: 0.3.6 在github官网中下载https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
因为国内访问google镜像问题需要修改镜像地址,以及其他参数:
代码语言:txt复制 - --cert-dir=/tmp
- --secure-port=4443
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
image: ccr.ccs.tencentyun.com/ruiqingzhu-tke/metrics-server-amd64:v0.3.6 ##如果有自己的metrics-server的镜像地址可以修改为自己的地址
创建:
kubectl apply -f components.yaml
注意 这里不能用
create -f
, 不能用create -f的原因是 托管集群中有h pa-metrics-server , create命令不会覆盖,会导致注册的 apiservce 依然是hpa的service
检查部署状态
部署完之后检查pod 启动状态,以及查看注册apiserver 选择的svc label是否正确
- 检查pod状态
kubectl get apiservice v1beta1.metrics.k8s.io
NAME SERVICE AVAILABLE AGE
v1beta1.metrics.k8s.io kube-system/metrics-server True 43
- 检查apiservice资源是否关联的是名字为metrics-server的svc资源.
# kubectl get apiservice v1beta1.metrics.k8s.io -o yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apiregistration.k8s.io/v1beta1","kind":"APIService","metadata":{"annotations":{},"name":"v1beta1.metrics.k8s.io"},"spec":{"group":"metrics.k8s.io","groupPriorityMinimum":100,"insecureSkipTLSVerify":true,"service":{"name":"metrics-server","namespace":"kube-system"},"version":"v1beta1","versionPriority":100}}
creationTimestamp: "2020-06-03T04:38:37Z"
name: v1beta1.metrics.k8s.io
resourceVersion: "1643663569"
selfLink: /apis/apiregistration.k8s.io/v1/apiservices/v1beta1.metrics.k8s.io
uid: 3f84bb0b-4023-4ce4-9e50-e8b44253306e
spec:
group: metrics.k8s.io
groupPriorityMinimum: 100
insecureSkipTLSVerify: true
service:
name: metrics-server ## 需要注意查看这个name是否是我们metrics-server的svc name
namespace: kube-system
port: 443
version: v1beta1
versionPriority: 100
status:
conditions:
- lastTransitionTime: "2020-07-16T14:12:47Z"
message: all checks passed
reason: Passed
status: "True"
type: Available
以下结果中hpa是tke自带的metrics-service,第二个是我们部署的metrics-service
代码语言:txt复制➜ ~ kubectl get apiservice |grep metric
v1beta1.custom.metrics.k8s.io kube-system/hpa-metrics-service True 129d
v1beta1.metrics.k8s.io kube-system/metrics-server True 129d
- 检查svc的情况
➜ ~ kubectl get svc -n kube-system |grep metrics
hpa-metrics-service ClusterIP 172.16.252.133 <none> 443/TCP 129d
metrics-server ClusterIP 172.16.255.25 <none> 443/TCP 99d
验证
以上表明部署正常
注意
托管集群由于已经部署了hpa-metrics-server的 apiservce 所以用户如果自己部署metrics-server 会覆盖掉hpa-metrics-server
影响 : 控制台将不能使用HPA自动扩缩容,需要用户自己实现。