k8s学习笔记-二进制高可用metrics-server安装
- Metrics API 只可以查询当前的度量数据,并不保存历史数据
- Metrics API URI 为 /apis/metrics.k8s.io/,在 k8s.io/metrics 维护
创建 metrics-server 证书签名请求
然后重启kube-apiserver服务
kubectl get apiservice v1beta1.metrics.k8s.io -o yaml
小问题总结
这里需要提到的还有一点就是kubelet的服务关闭只读端口,还有如果是二进制的高可用的master,需要有flanneld 的组件,要不在kube-apiserver 访问(metrics-serve)POD 的时候,会提示访问超时,因为默认没有路由规则让你访问的
具体验证方式,就是在 ApiServer 节点直接 ping metric-server pod 的 IP,看能否通信我这里是失败了,因为集群是 HA 模式,master 没有安装flanneld 的插件
如下报错:
23668 available_controller.go:353] v1beta1.metrics.k8s.io failed with: Get https://172.17.19.4:443: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
安装过程这里不表述了,参考我前面的文章
https://www.cnblogs.com/centos-python/articles/10901024.html
几个特别说明的参数:
--kubelet-insecure-tls # 不认证kubelet的ssl证书
必须满足kubelet 两种配置方式:
非安全的认证方式,一般不推荐,测试环境可以:
kubelet:
anonymousAuth: true
authorizationMode: AlwaysAllow
安全认证的方式,生成环境kubelet配置方式:
kubelet:
anonymousAuth: false
authenticationTokenWebhook: true #必须开启
authorizationMode: Webhook
--deprecated-kubelet-completely-insecure=true #不使用https连接kubelet,使用http连接,metrics-server本身不推荐,如果你kubete 提供了只读端口可以配置
Flag --deprecated-kubelet-completely-insecure has been deprecated, This is rarely the right option, since it leaves kubelet communication completely insecure. If you encounter auth errors, make sure you've enabled token webhook auth on the Kubelet, and if you're in a test cluster with self-signed Kubelet certificates, consider using kubelet-insecure-tls instead.
建议不用这个参数了
--kubelet-port=10255 # 请求kubelet的10255端口是HTTP 的只读端口
--kubelet-certificate-authority #指定用来验证kubelet证书的ca证书, 但是因为kubelet的证书是由apiserver自动签署的,证书的common name是主机名,
如: k8s-node1 metrics-server以ip连接的时候会失败 所以指定ca也没用。
--kubelet-preferred-address-types 连接kubelet的几种方式 InternalIP,ExternalIP,Hostname
--tls-cert-file # metrics-server自身的ssl证书, 如果不指定, 会自动自己生成一套。
--tls-private-key # 这里的证书无所谓, apiserver不会认证, 因为metrics-server使用serveraccount认证了
更多参数说明可以通过下面这个命令查看
docker run --rm k8s.gcr.io/metrics-server/metrics-server:v0.3.7 --help
https://github.com/kubernetes-sigs/metrics-server
最终会生成一个api
kubectl api-versions |egrep metrics.k8s.io/v1beta1
yum install jq -y
直接通过 kubectl 命令来访问这些 API
kubectl get --raw "/apis/metrics.k8s.io/v1beta1" | jq .
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq .
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/pods" | jq .
kubectl top nodes
kubectl top pods
kube-apiserver: E0515 08:32:53.585964 21151 controller.go:114] loading OpenAPI spec for "v1beta1.custom.metrics.k8s.io" failed with: OpenAPI spec does not exist
# kubectl api-versions
删除这个api组
kubectl get apiservice v1beta1.custom.metrics.k8s.io -o yaml > v1beta1.custom-metrics.metrics.k8s.io.yaml
编辑yaml 文件
如果没有使用到自定义的监控指标可以删除掉
kubectl delete -f v1alpha1.custom-metrics.metrics.k8s.io.yaml
在看日志会出现一条这样的删除日志
May 15 08:35:43 wan129 kube-apiserver: I0515 08:35:43.917990 24411 controller.go:130] OpenAPI AggregationController: action for item v1beta1.custom.metrics.k8s.io: Nothing (removed from the queue)
我们现在回过头来看看 metrics-server 创建的对象PodMetrics:
kubectl get podmetrics
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf