Skip to content

Apis Deprecadas en RKE2


Introducción

Kubernetes es un sistema bastante grande con muchos componentes y colaboradores, por ende va evolucionando conforme pasa el tiempo y muchas veces ciertas funcionalidades deben de ser eliminadas. Eso puede ser una api, para evitar que un componente pueda inutilizarse, kubernetes sigue una politica de depreciacion para componentes que seran removidos en futuras versiones.

En cada version de kubernetes hay ciertas apis que son o ya sea deprecadas, es decir aun son soportadas pero ya hay otra api nueva que cumple su funcion y seran eliminadas en una version futura y apis que sera eliminadas totalmente.


Objetivo

Objetivo General:

  • El objetivo de este laboratorio es llegar a entender como funciona el proceso de deprecacion de una api en kubernetes, como identificarlas antes de tiempo con herramientas de tercero y como reemplazarlas de ser necesario.

Laboratorio: Apis Deprecadas en RKE2

Antes de comenzar

  • Contar con el acceso al ambiente de laboratorio
  • Haber realizado la validación de conexión y funcionamiento
  • Finalizar las prácticas de laboratorio de las instalaciones de RKE2.
  • Esta práctica utiliza cluster (cluster1).

Inicio de laboratorio

Esta práctica se ejecutará con el usuario student en el sistemas lab-X-bastion

student@lab-0-bastion:~>
1. Habilitaremos el acceso al cluster1 defieniedo la variable KUBECONFIG. Utilizaremos el cluster1.
export KUBECONFIG=/home/student/rke2_conn/cluster1/cluster1_kubeconfig.yaml
2. Kubernetes nos provee una guia de que apis van a ser deprecadas y que apis van a ser removidas en cada version de kubernetes en el siguiente enlace. DeprecatedApis

  1. Pero la mejor forma para encontrar apis deprecadas en nuestro cluster es utilizando herramientas de terceros como por ejemplo pluto que es un cli que nos permite escanear nuestro cluster por apis deprecadas.Pluto.

  2. Vamos a proceder con la instalacion del binario de pluto.

    wget https://github.com/FairwindsOps/pluto/releases/download/v5.20.3/pluto_5.20.3_linux_amd64.tar.gz
    tar xvf pluto_5.20.3_linux_amd64.tar.gz
    chmod +x pluto
    

  3. Ahora que tenemos pluto instalado vamos a ejecutar un comando para verificar los recursos de nuestro cluster.
    ./pluto detect-api-resources -owide
    
    Deberia de decirnos que no tenemos recuross deprecados, debido a que estamos en un cluster que se instalo con las versiones mas recientes de rke2.
  4. Para mostar el funcionamiento de pluto vamos a simular la creacion de un recurso ingress que fue deprecado en una version anterior de kubernetes. Vamos a crear un nuevo archivo llamado ingress.yaml con el siguiente contenido.
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: example-ingress
      namespace: default
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            backend:
              serviceName: example-service
              servicePort: 80
    
    Este ingress utiliza el api extensions/v1beta1 que esta deprecada , entonces pluto nos permite revisar si esta api ya fue deprecada. En este ambiente de laboratorio, no es posible crear este recurso, ya que ha sido eliminado en versiones anteriores de Kubernetes y ya no se encuentra disponible.
  5. Vamos a revisar con pluto si ya esta deprecada con el siguiente comando.
    ./pluto detect ingress.yaml
    
    La salida sera la siguiente
    NAME              KIND      VERSION              REPLACEMENT            REMOVED   DEPRECATED   REPL AVAIL
    example-ingress   Ingress   extensions/v1beta1   networking.k8s.io/v1   true      true         true
    
  6. Una funcion que nos brinda pluto es la de definir versiones de kubernetes en especifico, por ejemplo tomemos el mismo ejemplo del ingress, este fue removido en la version 1.22.0 de kubernetes , entonces tomemos el hipotetico que tenemos un cluster en 1.19.x y queremos subirlo a 1.21.0 , pero queremos saber si el ingress sera removido, utilizamos el siguiente comando.
    ./pluto detect ingress.yaml --target-versions k8s=v1.21.0
    
    La salida sera la siguiente.
    NAME              KIND      VERSION              REPLACEMENT            REMOVED   DEPRECATED   REPL AVAIL
    example-ingress   Ingress   extensions/v1beta1   networking.k8s.io/v1   false     true         true
    
    Podemos ver que en esta version nuestro ingress esta deprecado, pero no ha sido eliminado, por lo cual lo podriamos seguir usando. Esta es una muy buena practica a la hora de acutalizar versiones de kubernetes.