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! ! !