基于Custom-metrics-apiserver实现Kubernetes的HPA(内含踩坑)

前言

这里要说一下Prometheus的检控指标从哪里来,它有3个渠道:

  • 主机监控,也就是部署了Node Exporter组件的主机,它以DaemonSet或者系统进程的形式运行,Prometheus会从这里获取关于宿主机相关的资源指标

  • 从Kubernetes自身组件,比如API Server或者Kubelet的/metrics,可以获取工作队列长度、请求QPS以及kubelet暴露出来的关于POD和容器的相关指标,其中容器的是通过Kubelet内置的cAdvisor服务暴露的,它是监控容器内部的。

  • 通过插件获取的,也就是Heapster的替代者Metrics Server,这个用来获取Pod和Node资源使用情况,它主要是用来供HPA使用。它的数据并不是来自于Prometheus,不过Prometheus可以获取。

今天我们说的自定义API其实就是和Metrics Server的实现方式一样,都是通过注册API的形式来完成和Kubernetes的集成的,也就是在API Server增加原本没有的API。不过添加API还可以通过CRD的方式完成,不过我们这里直说聚合方式。看下图:

实际上我们访问API的时候访问的是一个aggregator的代理层,下面绿色的都是可用的后端。我们访问上图中的2个URL其实是被代理到不同的后端,在这个机制下你可以添加更多的后端,而我们今天要说的Custome-metrics-apiserver就是绿色线条的路径。如果你部署Metrics-server的话对于理解今天的内容也不会很难。

通过聚合器实现自定义API需要的步骤

首先在API Server中启用API聚合功能,在kube-apiserver启动参数中加入如下内容,其中证书名称换成你自己环境中的:

# CA根证书
--requestheader-client-ca-file=
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-group-headers=X-Remote-Group
--requestheader-username-headers=X-Remote-User
# 在请求期间验证aggregator的客户端CA证书,我这里就是CA根证书
--proxy-client-cert-file=
# 私钥,我这里配置的就是CA根证书私钥
--proxy-client-key-file=

另外在kube-controller-manager组件上也有一些参数可以配置,但是不是必须的:

# HPT控制器同步Pod副本数量的时间间隔,默认15秒
--horizontal-pod-autoscaler-sync-period=15s
# 执行缩容的等待时间,默认5分钟
--horizontal-pod-autoscaler-downscale-stabilization=5m0s
# 等待Pod到达Reday状态的延时,默认30秒
--horizontal-pod-autoscaler-initial-readiness-delay=30s

其次定义api,然后向API Server进行注册

最后部署提供服务的应用。

演示

本次演示使用的配置清单文件请提前下载。下面对每个文件做一下简要说明。

custom-metrics-apiserver-auth-delegator-cluster-role-binding:

custom-metrics-apiserver-auth-reader-role-binding:

custom-metrics-apiserver-deployment:自定义指标提供者的容器

custom-metrics-apiserver-resource-reader-cluster-role-binding:

custom-metrics-apiserver-service:为deployment创建的service

custom-metrics-apiserver-service-account:创建服务账号

custom-metrics-apiservice:需要注册的apiserver名称以及关联的service

custom-metrics-cluster-role:

custom-metrics-config-map:配置文件

custom-metrics-resource-reader-cluster-role:

hpa-custom-metrics-cluster-role-binding:

上面的文件看起来比较多,我们合并一下,便于演示。

custom-metrics-apiserver-auth-delegator-cluster-role-binding、custom-metrics-apiserver-auth-reader-role-binding、custom-metrics-apiserver-resource-reader-cluster-role-binding、custom-metrics-apiserver-service-account、custom-metrics-cluster-role、custom-metrics-resource-reader-cluster-role、hpa-custom-metrics-cluster-role-binding,这几个合并到一个文件中,主要是服务账号和授权类的。其他保持单独的。合并文件custom-metrics-apiserver-rabc.yaml内容如下:

# 创建名称空间
kind: Namespace
apiVersion: v1
metadata:
  name: custom-metrics
---
# 创建服务账号
kind: ServiceAccount
apiVersion: v1
metadata:
  name: custom-metrics-apiserver
  namespace: custom-metrics
---
# 把系统角色system:auth-delegator绑定到服务账号,使该服务账号可以将认证请求转发到自定义的API上
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: custom-metrics:system:auth-delegator
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
- kind: ServiceAccount
  name: custom-metrics-apiserver
  namespace: custom-metrics
---
# 创建集群角色custom-metrics-resource-reader
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: custom-metrics-resource-reader
rules:
- apiGroups:
  - ""
  resources:
  - namespaces
  - pods
  - services
  verbs:
  - get
  - list
---
# 把集群角色custom-metrics-resource-reader绑定到服务账号
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: custom-metrics-resource-reader
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: custom-metrics-resource-reader
subjects:
- kind: ServiceAccount
  name: custom-metrics-apiserver
  namespace: custom-metrics
---
# 把系统自带的角色extension-apiserver-authentication-reader绑定到服务账号,允许服务账号可以访问系统的ConfigMap extension-apiserver-authentication
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: custom-metrics-auth-reader
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
  name: custom-metrics-apiserver
  namespace: custom-metrics
---
# 创建集群角色custom-metrics-server-resources
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: custom-metrics-server-resources
rules:
- apiGroups:
  - custom.metrics.k8s.io
  resources: ["*"]
  verbs: ["*"]
---
# 把集群角色custom-metrics-server-resources绑定到系统自带的服务账号horizon
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值