美文网首页
k8s中metrics-server异常http: TLS ha

k8s中metrics-server异常http: TLS ha

作者: wowshiwoniu | 来源:发表于2020-12-10 18:13 被阅读0次

metrics-server安装

资源指标管道

一、介绍

1、旧版本的监控方案

在k8s 1.12版本之前,k8s通常采用 Heapster + cAdvisor + InfluxDB 来监控集群资源数据

Heapster:在k8s集群中获取metrics和事件数据,写入InfluxDB

cAdvisor:对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况

时序数据库,提供数据的存储,存储在指定的目录下。

Heapster将每个Node上的cAdvisor的数据进行汇总,然后导到InfluxDB。
 
Heapster的前提是使用cAdvisor采集每个node上主机和容器资源的使用情况,
再将所有node上的数据进行聚合。
 
这样不仅可以看到Kubernetes集群的资源情况,
还可以分别查看每个node/namespace及每个node/namespace下pod的资源情况。
可以从cluster,node,pod的各个层面提供详细的资源使用情况。

2、新版本的监控方案

官方文档-资源指标管道

从 v1.8 开始,资源使用情况的监控可以通过 Metrics API的形式获取,具体的组件为Metrics Server,用来替换之前的heapster,heapster从1.11开始逐渐被废弃。

Metrics-Server是集群核心监控数据的聚合器,从 Kubernetes1.8 开始,它作为一个 Deployment对象默认部署在由kube-up.sh脚本创建的集群中

二、安装步骤

1、下载Metrics-Server相关部署资源

# clone代码
git clone https://github.com/kubernetes-sigs/metrics-server.git

2、修改部署文件

切换到下面目录

cd metrics-server/deploy/kubernetes/

修改metrics-server-deployment.yaml文件如下图所示:

image.png

修改如下:

将镜像源 k8s.gcr.io 修改为 registry.cn-hangzhou.aliyuncs.com/google_containers

将镜像卡去策略 imagePullPolicy: Always 修改为 imagePullPolicy: IfNotPresent

将args下添加以下参数

# 从 kubelet 采集数据的周期;
--metric-resolution=30s
 
 
# 优先使用 InternalIP 来访问 kubelet,这样可以避免节点名称没有 DNS 解析记录时,通过节点名称调用节点 kubelet API 失败的情况(未配置时默认的情况)
--kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP  #
 
 
# kubelet 的10250端口使用的是https协议,连接需要验证tls证书。--kubelet-insecure-tls不验证客户端证书
--kubelet-insecure-tls

部署metric-server

kubectl create -f .

验证是否成功

kubectl top nodes

在1.16版本的集群中安装该组件, deployment参考示例

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-dir
        emptyDir: {}
      containers:
      - name: metrics-server
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --metric-resolution=30s
          - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
          - --kubelet-insecure-tls
        ports:
        - name: main-port
          containerPort: 4443
          protocol: TCP
        securityContext:
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
        imagePullPolicy: IfNotPresent 
        volumeMounts:
        - name: tmp-dir
          mountPath: /tmp
      nodeSelector:
        beta.kubernetes.io/os: linux
        kubernetes.io/arch: "amd64"

之前在物理机上的集群、vmware虚机上的集群安装该组件均没有问题,不想在openstack上的集群安装时,日志一直报错,无法正常使用

image.png
在网上查找该错误,偶然在github的issue下发现对于该问题的解决方案
参考地址:https://github.com/kubernetes-sigs/metrics-server/issues/145 image.png

我们集群calico使用的mtu值为1440,官方对于openstack,对于不同网络模式,给了不同的参考值,这里更换为了1430之后,恢复正常。

推测可能是openstack网络路由方面配置的包接受范围小于1440,导致calico在该mtu值下,发送的报文发生了截取,导致了pod运行异常。

相关文章

网友评论

      本文标题:k8s中metrics-server异常http: TLS ha

      本文链接:https://www.haomeiwen.com/subject/uryrgktx.html