Como habilitar Metric Server en Docker-Desktop

Advertisements

Docker Desktop le permite tener una instalación de Kubernetes en su máquina local; de forma predeterminada, proporciona la mayoría de las funciones requeridas por un desarrollador. Sin embargo, metric-server no forma parte de las características integradas de docker-desktop. Significa que si necesita o desea acceder al servidor de métricas desde su Kubernetes local (Docker-Desktop), primero deberá configurarlo.

¿Qué es Metrics Server?

El servidor de métricas de Kubernetes es un agregador de datos de uso de recursos de todo el clúster. El servidor de métricas de Kubernetes recopila métricas de recursos del kubelet que se ejecuta en cada nodo trabajador y las expone en el servidor de la API de Kubernetes a través de la API de métricas de Kubernetes.

En otras palabras, te permite saber cuántos recursos (CPU, memoria) están consumiendo los pods o nodos en un momento específico.

¿Para qué podría necesitar de Metric Server ?

Metric Server ayuda a la observabilidad del clúster, desde la verificación manual con kubectl hasta el “dashboard” de Kubernetes, alguna otra herramienta de monitoreo sobre el clúster k8s o incluso una herramienta personalizada para monitorear nuestros pods en el clúster. Cualquiera que sea el escenario, la forma de conocer la memoria y el consumo de CPU de un POD o Nodo en un momento específico es mediante el “metric server”.

Advertisements

En clústers listos para producción (no Docker Desktop), podría usarse para definir políticas para nodos de escalado automático horizontal. Por lo tanto, se podría agregar un nuevo nodo al clúster si los recursos del nodo existente superan un umbral definido.

Instalación de Metric Server

Es muy sencillo, simplemente copie el siguiente fragmento de código y guárdelo en un archivo con extensión yaml. Luego, apliquemos el archivo en la instancia de Kubernetes de docker-desktop.

kubectl apply -f metric-server.yaml

Este es el YAML que debe de copiar…

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:
  - pods
  - nodes
  - nodes/stats
  - namespaces
  - configmaps
  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
        - --kubelet-insecure-tls
        image: k8s.gcr.io/metrics-server/metrics-server:v0.4.2
        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
          periodSeconds: 10
        securityContext:
          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

Verificando que Metric Server ya está instalado

Debe de ver un pod metric-server-XXXX corriendo en el namespace kube-system.

kubectl get pods -n kube-system | grep metrics-server

Referencias

Advertisements

Leave a Reply

Your email address will not be published.