Pruebe sus experimentos de Kubernetes con una interfaz web de código abierto

¿Quería crear caos para probar sus sistemas pero prefiere usar herramientas visuales en lugar de la terminal? Bueno, este artículo es para ti, amigo. En el primer artículo de esta serie expliqué qué es la ingeniería del caos; en el segundo artículo, demostré cómo obtener el estado estable de su sistema para que pueda compararlo con un estado de caos; y en el tercero, mostré cómo usar Litmus para probar fallas y experimentos arbitrarios en su clúster de Kubernetes.

El cuarto artículo introduce camisa del caos, un orquestador de caos de código abierto con una interfaz de usuario web que cualquiera puede usar. Le permite crear experimentos y ver estadísticas en una interfaz de usuario web para presentaciones o narraciones visuales. El Base de computación nativa en la nube alberga el proyecto Chaos Mesh, lo que significa que es una buena opción para Kubernetes. ¡Entonces empecemos! En este tutorial, usaré Pop! _OS 20.04, Helm 3, Minikube 1.14.2 y Kubernetes 1.19.

Índice

    Configurar Minikube

    Si aún no lo has hecho, instalar Minikube de cualquier manera que tenga sentido para su entorno. Si tiene suficientes recursos, le recomiendo darle a su máquina virtual un poco más que la memoria y la potencia de la CPU predeterminadas:

    $ minikube config set memory 8192
    ❗  These changes will take effect upon a minikube delete and then a minikube start
    $ minikube config set cpus 6
    ❗  These changes will take effect upon a minikube delete and then a minikube start

    Luego inicie y verifique el estado de su sistema:

    $ minikube start
    ?  minikube v1.14.2 on Debian bullseye/sid
    ?  minikube 1.19.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.19.0
    ?  To disable this notice, run: 'minikube config set WantUpdateNotification false'

    ✨  Using the docker driver based on user configuration
    ?  Starting control plane node minikube in cluster minikube
    ?  Creating docker container (CPUs=6, Memory=8192MB) ...
    ?  Preparing Kubernetes v1.19.0 on Docker 19.03.8 ...
    ?  Verifying Kubernetes components...
    ?  Enabled addons: Almacenamiento-provisioner, default-storageclass
    ?  Done! kubectl is now configured to use "minikube" by default
    $ minikube status
    minikube
    type: Control Plane
    host: Running
    kubelet: Running
    apiserver: Running
    kubeconfig: Configured

    Instalar malla de caos

    Comience a instalar Chaos Mesh agregando el repositorio a Helm:

    $ helm repo add chaos-mesh https://charts.chaos-mesh.org
    "chaos-mesh" has been added to your repositories

    Luego busque su gráfico de Helm:

    $ helm search repo chaos-mesh
    NAME                    CHART VERSION   APP VERSION     DESCRIPTION                                      
    chaos-mesh/chaos-mesh   v0.5.0          v1.2.0          Chaos Mesh® is a cloud-native Chaos Engineering...

    Una vez que haya encontrado el gráfico, puede comenzar con los pasos de instalación, comenzando con la creación de un chaos-Pruebas espacio de nombres:

    $ kubectl create ns chaos-Pruebas
    namespace/chaos-Pruebas created

    Luego, instale su gráfico Chaos Mesh en este espacio de nombres y asígnele un nombre chaos-mesh:

    $ helm install chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-Pruebas
    NAME: chaos-mesh
    LAST DEPLOYED: Mon May 10 10:08:52 2021
    NAMESPACE: chaos-Pruebas
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    1. Make sure chaos-mesh components are running
       kubectl get pods --namespace chaos-Pruebas -l app.kubernetes.io/instance=chaos-mesh

    Como lo indica el resultado, verifique que los componentes de Chaos Mesh se estén ejecutando:

    $ kubectl get pods --namespace chaos-Pruebas -l app.kubernetes.io/instance=chaos-mesh
    NAME                                       READY   STATUS    RESTARTS   AGE
    chaos-controller-manager-bfdcb99fd-brkv7   1/1     Running   0          85s
    chaos-daemon-4mjq2                         1/1     Running   0          85s
    chaos-dashboard-865b778d79-729xw           1/1     Running   0          85s

    Ahora que todo funciona correctamente, puede configurar los servicios para ver el tablero de Chaos Mesh y asegurarse de que chaos-dashboard el servicio está disponible:

    $ kubectl get svc -n chaos-Pruebas
    NAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                       AGE
    chaos-daemon                    ClusterIP   None            <none>        31767/TCP,31766/TCP           3m42s
    chaos-dashboard                 NodePort    10.99.137.187   <none>        2333:30029/TCP                3m42s
    chaos-mesh-controller-manager   ClusterIP   10.99.118.132   <none>        10081/TCP,10080/TCP,443/TCP   3m42s

    Ahora que sabe que el servicio se está ejecutando, continúe y expóngalo, cámbiele el nombre y abra el tablero usando minikube service:

    $ kubectl expose service chaos-dashboard --namespace chaos-Pruebas --type=NodePort --target-port=2333 --name=chaos
    service/chaos exposed

    $ minikube service chaos --namespace chaos-Pruebas
    |---------------|-------|-------------|---------------------------|
    |   NAMESPACE   | NAME  | TARGET PORT |            URL            |
    |---------------|-------|-------------|---------------------------|
    | chaos-Pruebas | chaos |        2333 | http://192.168.49.2:32151 |
    |---------------|-------|-------------|---------------------------|
    ?  Opening service chaos-Pruebas/chaos in default browser...

    Cuando se abra el navegador, verá una ventana del Generador de tokens. Marque la casilla junto a Ámbito de clústery siga las instrucciones en pantalla.

    Luego puede iniciar sesión en Chaos Mesh y ver el tablero.

    ¡Ha instalado su instancia de Chaos Mesh y puede comenzar a trabajar en la prueba de caos!

    Conviértete en una malla en tu grupo

    Ahora que todo está en funcionamiento, puede configurar algunos experimentos nuevos para que los pruebe. La documentación ofrece algunos experimentos predefinidos y elegiré Caos de estrés de las opciones. En este tutorial, creará algo en un nuevo espacio de nombres para subrayar y escalar para que se pueda destacar en más de una cosa.

    Cree el espacio de nombres:

    $ kubectl create ns app-demo
    namespace/app-demo created

    Luego crea la distribución en tu nuevo espacio de nombres:

    $ kubectl create deployment nginx --image=nginx --namespace app-demo
    deployment.apps/nginx created

    Escale la implementación hasta ocho pods:

    $ kubectl scale deployment/nginx --replicas=8 --namespace app-demo
    deployment.apps/nginx scaled

    Finalmente, confirme que todo esté listo y funcionando correctamente al verificar sus pods en el espacio de nombres:

    $ kubectl get pods -n app-demo
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-6799fc88d8-7kphn   1/1     Running   0          69s
    nginx-6799fc88d8-82p8t   1/1     Running   0          69s
    nginx-6799fc88d8-dfrlz   1/1     Running   0          69s
    nginx-6799fc88d8-kbf75   1/1     Running   0          69s
    nginx-6799fc88d8-m25hs   1/1     Running   0          2m44s
    nginx-6799fc88d8-mg4tb   1/1     Running   0          69s
    nginx-6799fc88d8-q9m2m   1/1     Running   0          69s
    nginx-6799fc88d8-v7q4d   1/1     Running   0          69s

    Ahora que tiene algo para probar, puede comenzar a trabajar en la definición de su experimento. Empiece por crear chaos-test.yaml:

    $ touch chaos-test.yaml

    Luego, cree la definición para la prueba de caos. Copie y pegue esta definición de experimento en la suya chaos-test.yaml Archivo:

    apiVersion: chaos-mesh.org/v1alpha1
    kind
    : StressChaos
    metadata
    :
      name
    : burn-cpu
      namespace
    : chaos-Pruebas
    spec
    :
      mode
    : one
      selector
    :
        namespaces
    :
         - app-demo
        labelSelectors
    :
          app
    : "nginx"
      stressors
    :
        cpu
    :
          workers
    : 1
      duration
    : '30s'
      scheduler
    :
        cron
    : '@every 2m'

    Esta prueba quemará 1 CPU durante 30 segundos cada 2 minutos en pods en app-demo espacio de nombres Finalmente, aplique el archivo YAML para iniciar el experimento y vea qué sucede en su tablero.

    Aplicar el archivo de experimento:

    $ kubectl apply -f chaos-test.yaml
    stresschaos.chaos-mesh.org/burn-cpu created

    A continuación, vaya al panel de control y haga clic en Experimentos para ver la prueba de estrés en ejecución. Puede pausar el experimento presionando la tecla Pausa botón en el lado derecho del experimento.

    Hacer clic Panel de control para ver el estado con un recuento del total de experimentos, el gráfico de estado y una línea de tiempo de eventos en ejecución o pruebas ejecutadas previamente.

    Elegir Eventos para ver la línea de tiempo y los experimentos debajo de ella con detalles.

    ¡Felicitaciones por completar su primera prueba! Ahora que está en funcionamiento, compartiré más detalles sobre qué más puede hacer con sus experimentos.

    Pero espera hay mas

    Otras cosas que puede hacer con este experimento usando la línea de comando incluyen:

    • Actualización del experimento para modificar su funcionamiento
    • Suspensión del experimento si es necesario devolver el grupo a un estado estable
    • Reanudar el experimento para continuar con la prueba.
    • Descartar el experimento si ya no es necesario para la prueba

    Actualización del experimento

    Por ejemplo, actualice el experimento en su clúster para aumentar la duración entre pruebas. de vuelta a la tuya cluster-test.yaml y modifique el programador para cambiar de 2 minutos a 20 minutos:

    Antes:

     scheduler:
        cron
    : '@every 2m'

    Después:

     scheduler:
        cron
    : '@every 20m'

    Guarde y vuelva a aplicar su archivo; la salida debería mostrar la nueva configuración de la prueba de estrés:

    $ kubectl apply -f chaos-test.yaml
    stresschaos.chaos-mesh.org/burn-cpu configured

    Si observa el panel, el experimento debería mostrar la nueva configuración de cron.

    Suspensión y reanudación del experimento.

    Pausar manualmente el experimento en la línea de comando requerirá agregar un anotación al experimento. Reanudar el experimento requerirá eliminar la anotación.

    Para agregar la anotación, necesitará el tipo de experimento, el nombre y el espacio de nombres de su archivo YAML.

    Pausar un experimento:

    $ kubectl annotate stresschaos burn-cpu experiment.chaos-mesh.org/pause=true  -n chaos-Pruebas

    stresschaos.chaos-mesh.org/burn-cpu annotated

    La interfaz de usuario web muestra que está en pausa.

    Reanudar un experimento

    Necesita la misma información para reanudar el experimento. Sin embargo, en lugar de la palabra true, utilice un guión para eliminar la pausa.

    $ kubectl annotate stresschaos burn-cpu experiment.chaos-mesh.org/pause-  -n chaos-Pruebas

    stresschaos.chaos-mesh.org/burn-cpu annotated

    Ahora puede ver que el experimento se reanuda en la interfaz de usuario web.

    Eliminar un experimento

    Eliminar un experimento por completo requiere uno simple delete comando con el nombre del archivo:

    $ kubectl delete -f chaos-test.yaml

    stresschaos.chaos-mesh.org "burn-cpu" deleted

    Nuevamente, debería ver el resultado deseado en la interfaz de usuario web.

    Muchas de estas tareas se realizaron con la línea de comandos, pero también puede crear sus propios experimentos mediante la interfaz de usuario o importar experimentos que haya creado como un archivo YAML. Esto ayuda a muchas personas a sentirse más cómodas con la creación de nuevos experimentos. También hay un botón Descargar para cada experimento, por lo que puede ver el archivo YAML que creó haciendo clic en algunos botones.

    Pensamientos finales

    Ahora que tiene esta nueva herramienta, puede sintonizar su entorno. Chaos Mesh permite una interacción más intuitiva, lo que significa que más personas pueden unirse al equipo del caos. Espero que hayas aprendido lo suficiente aquí para expandir tu ingeniería del caos. ¡Feliz caza de vainas!

    Artículos de interés

    Subir