Error de Kubernetes: API de métricas no disponible

El clúster de Kubernetes encontró "error: la API de métricas no está disponible"

La causa de este problema es que Metrics Server no está instalado A continuación, presentaré el rol de Metrics Server en el clúster y la explicación en el sitio web oficial. Si desea solucionar el error directamente, consulte el capítulo "Resolver el error "Error: Metrics API not available"".

1. Comprender el rol de Metrics Server

Enlace del sitio web oficial de Kubernetes
Kubernetes Metrics Server es un componente de clúster de Kubernetes que recopila datos de métricas para varios objetos en Kubernetes (como nodos, pods, contenedores, etc.) y luego agrega y almacena estos datos para que otros componentes y herramientas de Kubernetes puedan utilizar estos datos para monitorear y ajustar.

Metrics Server adopta el estándar de la API de métricas de Kubernetes, que utiliza la interfaz HTTP para exponer datos de métricas, recopila estos datos a través de sondeos y luego los almacena en la memoria.

A través de la API de métricas de Kubernetes, puede obtener varios datos de métricas, como la utilización de la CPU, el uso de la memoria, la E/S de la red, la E/S del disco, etc. Estos indicadores pueden ayudar a los usuarios a comprender el estado de salud de cada objeto en el clúster de Kubernetes y ayudar a los usuarios a solucionar problemas y optimizar el rendimiento.

Metrics Server es muy importante para el funcionamiento normal del clúster de Kubernetes. Si Metrics Server no se ejecuta correctamente, el estado y el rendimiento de cada objeto del clúster no se supervisarán y algunas herramientas y componentes basados ​​en Metrics API, como Horizontal Pod Autoscaler (HPA), no estarán disponibles.

En el clúster de Kubernetes, el componente Metrics Server no se incluye de forma predeterminada y debe instalarse y configurarse manualmente. Los métodos y procesos para instalar y configurar Metrics Server varían según la versión y el entorno de Kubernetes. Por lo general, puede usar el archivo yaml oficial proporcionado por Kubernetes para la instalación, o usar algunas herramientas y complementos de terceros para la instalación y configuración.

2. Solucione el error "error: API de métricas no disponible"

Solución oficial La
solución oficial incluye dos tipos de instalaciones de Metrics Server:
a. Instalación convencional de copia única de Metrics Server
b. Instalación de alta disponibilidad de copias múltiples de Metrics Server.
A continuación se describe el método de instalación de copia única.

#下载yaml文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

#修改yaml文件中的部分内容
vi components.yaml
#需要修改的内容包括Deployment下spec.template.spec.containers.args内添加“- --kubelet-insecure-tls”
#Deployment下spec.template.spec.containers.image修改为“image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3”

#直接定位到“containers”位点
    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        - --kubelet-insecure-tls  #添加此行内容
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3 #修改为国内镜像仓库地址

Si la versión del clúster de Kubernetes es 1.19+, puede usar directamente el siguiente archivo yaml para implementar

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-view: "true"
  name: system:aggregated-metrics-reader
rules:
- apiGroups:
  - metrics.k8s.io
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
  name: system:metrics-server
rules:
- apiGroups:
  - ""
  resources:
  - nodes/metrics
  verbs:
  - get
- apiGroups:
  - ""
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server-auth-reader
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server:system:auth-delegator
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: system:metrics-server
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:metrics-server
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  strategy:
    rollingUpdate:
      maxUnavailable: 0
  template:
    metadata:
      labels:
        k8s-app: metrics-server
    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s
        - --kubelet-insecure-tls
        image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.6.3
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /livez
            port: https
            scheme: HTTPS
          periodSeconds: 10
        name: metrics-server
        ports:
        - containerPort: 4443
          name: https
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /readyz
            port: https
            scheme: HTTPS
          initialDelaySeconds: 20
          periodSeconds: 10
        resources:
          requests:
            cpu: 100m
            memory: 200Mi
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
        volumeMounts:
        - mountPath: /tmp
          name: tmp-dir
      nodeSelector:
        kubernetes.io/os: linux
      priorityClassName: system-cluster-critical
      serviceAccountName: metrics-server
      volumes:
      - emptyDir: {
    
    }
        name: tmp-dir
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  labels:
    k8s-app: metrics-server
  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

¡Se acabaron las flores! ! !

Supongo que te gusta

Origin blog.csdn.net/weixin_46660849/article/details/130601159
Recomendado
Clasificación