miércoles, 22 de marzo de 2017

De Cero a Integración continua con Google Cloud Platform

Integración continua en k8s en GCP

 Resultado de imagen de jenkins docker

Power by James Heggs
 
El tutorial proporcionará detalles para crear un clúster en GKE, utilizando Kubernetes (k8s) y Docker para levantar un contenedor de Jenkins, usando k8s y  para arrancar un docker  de  Jenkins, definiendoque gestionara el GKE , creando una aplicación de arranque  como un contenedor y finalmente desplegar la aplicación con k8s.

Pero hay mucho que hacer antes de llegar al final...  Para ayudar con la formación  y enseñar mejor la plataforma GCP, el tutorial también describe la creación de proyectos GCP y la creación de usuarios. La única suposición que se ha  hecho es que te has registrado en GCP y puedes acceder a la consola GCP.

Todo el código para este tutorial es  de código abierto y se puede encontrar en su cuenta github y la presentación se puede encontrar en slideshare.



Creación de Proyectos GCP


Después de registrarse en Google Cloud Platform (en el momento de redactar el artículo, están ofreciendo una prueba gratuita de $ 300/365 dias), use  la consola.


    1. Navegue hasta la pantalla de gestión de proyectos
    2. Haga clic en el botón 'Crear proyecto' (figura 1)
    3. Introduzca el nombre del proyecto y anote el ID del proyecto. Esto es importante para más tarde. La Figura 1 muestra un proyecto de ejemplo que tiene el ID de proyecto de 'docker-meetup-1381'
    4. Haga clic en "Crear" para crear su proyecto GCP
       
      figura(1)

      Ya tenemos el proyecto Creado . Ahora podemos configurar una cuenta de servicio GCP para administrar el proyecto.


      Creación de cuentas de servicio de GCP


      Con el fin de gestionar los recursos que estamos a punto de crear GCP tiene un concepto de cuentas de servicio. Los siguientes pasos mostraran como se hace creación de la cuenta de servicio y la descarga del archivo de clave asociado.
       

      Asegúrese de que su proyecto esté seleccionado en la esquina superior derecha de la consola GCP (mostrada en la figura 2)

          Haga clic en el menú de la esquina superior izquierda y elija 'IAM&Admin'
       
          Haga clic en "Cuentas de servicio" en el menú de la izquierda
       
          Haga clic en el botón "Crear cuenta de servicio"
       
          Proporcione su nombre de cuenta de servicio deseado y marque la opción "Proporcionar una nueva clave privada" (Ejemplo mostrado en la figura 3)
       
          Una vez que haga clic en "Crear", también activará la descarga del navegador de su nuevo archivo de clave de cuenta de servicio.
       
          Anote la ubicación y el nombre de archivo de su archivo clave, ya que se utiliza más adelante.
       
          De vuelta en la pantalla "Cuentas de servicio" asegúrese de que su nueva cuenta de servicio está marcada y haga clic en el botón "Permisos" en la parte superior de la pantalla.
       
          Para mantener las cosas mas sencillas, pero a expensas de la seguridad, le daremos acceso a la cuenta de servicio 'Editor' a nuestros recursos de GCP. 
       
      Sin embargo, aconsejaría revisar los permisos para proyectos a largo plazo. En el panel de permisos de la derecha, escriba el nombre de su cuenta de servicio en el campo "Agregar miembros" y haga clic en la cuenta de servicio correspondiente cuando se le sugiera. Elija "Editor" en el menú desplegable de funciones y haga clic en "Añadir". (Ejemplo mostrado en la figura 4)

      Ahora tenemos nuestro proyecto GCP y credenciales listos para comenzar.

      Nota

      En Safari la clave se descarga a veces como un archivo llamado "Unknown" por alguna razón. Aunque no es necesario, recomendaría mover el archivo fuera del directorio de descargas y renombrarlo para dejar claro que es un archivo JSON. Por ejemplo:



      mkdir ~/keys
      mv ~/Downloads/Unknown ~/keys/gcp-service-account.json







       
      Figura 2


       
      Figura 3
       
        
      Figura4

       

      Creación de clústeres de GKE


      Es hora de crear nuestro cluster GKE (K8S).

       
      1.En primer lugar, instale el SDK de Google Cloud para que funcione en su línea de comandos.
       
      2.Una vez que haya instalado el GCLoud SDK puede seguir adelante e instalar las extensiones kubernetes
       
      # gcloud components install kubectl
       
      3. clonar el repositorio bootstrap
       
      # mkdir ~/gcp-continuous-delivery
      # cd ~/gcp-continuous-delivery
      # git clone https://github.com/eggsy84/gcp-bootstrap-infrastructure.git 
       
      4. Cambiar al repositorio bootstrap

      # cd ~/gcp-continuous-delivery/gcp-bootstrap-infrastructure/bootstrap/

      5. El script bootstrap se ejecuta pero se cecesitan 5 parametros ID que son  proyecto tipicos del Cloud de de Google
      El proyecto que contendrá su clúster GKE. (Tomado de la identificación ID que registro antes)

      Zona GCP
      De la lista de "Zonas Disponibles" proporcionada por GCP

      Tipo de máquina GCP
      De los 'tipos de máquina' proporcionados por GCP. Cada nodo en su clúster GKE se aprovisionará según este tipo.

      Número de nodos del clúster k8s
      Entrada numérica para la cantidad de nodos a crear.

      Ruta de acceso a su archivo de cuenta de servicio
      Ruta de acceso al archivo JSON de la cuenta de servicio que descargó anteriormente en el tutorial.

      # sh deploy.sh \
      docker-meetup-1381 \
      europe-west1-b \
      n1-standard-2 \
      1 \
      ~/keys/gcp-service-account.json
        
      6. El script abrirá su navegador y le pedirá que se autentique. Indique su nombre de usuario y contraseña y haga clic en 'Permitir'. Vuelva al terminal de la línea de comandos y verá una salida similar a:

      About to create a Container Cluster in the ‘docker-meetup-1381’ GCP project located in ‘europe-west1-b’ with 1 x ‘n1-standard-2’ node(s)
      Press any key to continue…or Ctrl+C to exit

      Nos muestra la selección de datos y todo empezara con la confirmación de  la acción.

      Nota importante: El script ahora creara infraestructura en GCP que que lleva asociado gastos, controle los para no encontrarse con un consumo no previstos y de recursos y de dinero..

      7. Extraiga la dirección IP de Jenkins

      La secuencia de comandos mostrará su progreso y hacia la salida final una dirección IP a la que puede acceder Jenkins. Tales como: a:

      Jenkins service up and running on 104.155.36.72 

      Ahora debería ser capaz de abrir un navegador, navegar a esa URL y ver su servidor Jenkins!

      Esencialmente thats it - usted ha crado  un grupo dentro de  GKE, usando Kubernetes y utilizado para desplegar un contenedor  de Jenkins maestro preconfigurado y dio a ese servicio una dirección IP externa para hacerlo accesible.
      La instancia de Jenkins ha sido preconfigurada con un solo trabajo de Jenkins que produce un workflow de construcción de una aplicación de inicio de muestreo de muestreo utilizando los agentes Jenkins JNLP y el complemento Jenkins Pipeline.

      Nota importante: Haga ejercicio para que el lector se ocupe de la seguridad de la instancia, no tiene usuario no esta configurada, es necesario configurar usuario y contraseña en ningún caso  deje su jekins desprotegido.

      ...
       

      Implementación de aplicaciones


      Después de unos 10 minutos (puede que tenga que actualizar su pantalla) su instancia jenkins habrá creado un trabajo llamado 'spring-boot-pipeline' y ejecutado una compilación.

           Navegue hasta el trabajo de jenkins. Desde aquí deberías construir tu pipeline completado sin problemas. (Ejemplo mostrado en la figura 5)

       
      Figura 5

      2. Haga clic en el número del "build 1"

      3. Haga clic en Salida de consola para ver la salida del trabajo.

      4. Desplácese hacia abajo hasta la parte inferior de la salida y debería ver un mensaje similar a:


      [spring-boot-pipeline] Running shell script
      + echo Application up and running on 130.211.78.33
      Application up and running on 130.211.78.33
      [Pipeline] }
      [Pipeline] // node
      [Pipeline] End of Pipeline
      Finished: SUCCESS

      5. Esto indica que las demostraciones que la aplicación definida en jekins se ha construido con éxito y se ha desplegado adentro a nuestro Kubernetes. Puede navegar hasta la dirección IP proporcionada para ver la aplicación en ejecución.

      ...

      ¿Lo que acaba de suceder?


      • Creó un clúster GCP kubernetes
      • Utilizó k8s y docker para desplegar un contenedor maestro Jenkins preconfigurado en ese clúster
      • Tenemos Jenkins para ejecutar una compilación de nuestra aplicación de inicio de ejemplo
      • La construcción de Jenkins hizo desplegar un contenedor Docker que contenía un esclavo Jenkins de JNLP para ejecutar la compilación
      • La compilación compiló el código utilizando Maven
      • A continuación, se produjo una imagen Docker de la aplicación
      • Realice un push pare que aparezca  en el Registro de contenedores de Google
      • Utilice despliegues de k8s para desplegar la imagen proxy en el  clúster k8s
      • Utilice los servicios de k8s para registrar un servicio de proxy y defina su tipo en LoadBalancer para asegurarse de que la aplicación es accesible a través de Internet.