k8s中metrics-server異常http: TLS handshake error from 172.30.117.64:25970: EOF

metrics-server安裝

資源指標管道

一、介紹

1、舊版本的監(jiān)控方案

在k8s 1.12版本之前,k8s通常采用 Heapster + cAdvisor + InfluxDB 來監(jiān)控集群資源數(shù)據(jù)

Heapster:在k8s集群中獲取metrics和事件數(shù)據(jù),寫入InfluxDB

cAdvisor:對節(jié)點機器上的資源及容器進行實時監(jiān)控和性能數(shù)據(jù)采集,包括CPU使用情況、內(nèi)存使用情況、網(wǎng)絡吞吐量及文件系統(tǒng)使用情況

時序數(shù)據(jù)庫,提供數(shù)據(jù)的存儲,存儲在指定的目錄下。

Heapster將每個Node上的cAdvisor的數(shù)據(jù)進行匯總,然后導到InfluxDB。
 
Heapster的前提是使用cAdvisor采集每個node上主機和容器資源的使用情況,
再將所有node上的數(shù)據(jù)進行聚合。
 
這樣不僅可以看到Kubernetes集群的資源情況,
還可以分別查看每個node/namespace及每個node/namespace下pod的資源情況。
可以從cluster,node,pod的各個層面提供詳細的資源使用情況。

2、新版本的監(jiān)控方案

官方文檔-資源指標管道

從 v1.8 開始,資源使用情況的監(jiān)控可以通過 Metrics API的形式獲取,具體的組件為Metrics Server,用來替換之前的heapster,heapster從1.11開始逐漸被廢棄。

Metrics-Server是集群核心監(jiān)控數(shù)據(jù)的聚合器,從 Kubernetes1.8 開始,它作為一個 Deployment對象默認部署在由kube-up.sh腳本創(chuàng)建的集群中

二、安裝步驟

1、下載Metrics-Server相關(guān)部署資源

# 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下添加以下參數(shù)

# 從 kubelet 采集數(shù)據(jù)的周期;
--metric-resolution=30s
 
 
# 優(yōu)先使用 InternalIP 來訪問 kubelet,這樣可以避免節(jié)點名稱沒有 DNS 解析記錄時,通過節(jié)點名稱調(diào)用節(jié)點 kubelet API 失敗的情況(未配置時默認的情況)
--kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP  #
 
 
# kubelet 的10250端口使用的是https協(xié)議,連接需要驗證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

在網(wǎng)上查找該錯誤,偶然在github的issue下發(fā)現(xiàn)對于該問題的解決方案
參考地址:https://github.com/kubernetes-sigs/metrics-server/issues/145

image.png

我們集群calico使用的mtu值為1440,官方對于openstack,對于不同網(wǎng)絡模式,給了不同的參考值,這里更換為了1430之后,恢復正常。

推測可能是openstack網(wǎng)絡路由方面配置的包接受范圍小于1440,導致calico在該mtu值下,發(fā)送的報文發(fā)生了截取,導致了pod運行異常。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容