lunes, 28 de agosto de 2017

Puppet para Google Cloud Platform

 Puppet en Google Cloud.


La capacidad de controlar programando las maquinas virtuales con herramientas que conocen y ofrecen y entregan una gran diferencia para los desarrolladores que crean aplicaciones nativas de la nube. Es por eso que hoy se lanzan  y abren un conjunto de módulos integrales para mejorar la capacidad de los usuarios para administrar los recursos de Google Cloud Platform (GCP) utilizando Puppet o DSL. Los nuevos módulos siguen el modelo de convergencia de objetos de Puppet, lo que le permite definir el estado deseado de sus recursos de GCP que nuestros proveedores aplicarán directamente usando el estandar de Puppet.

Los nuevos módulos soportan los siguientes productos:


Estos nuevos módulos son Puppet Approved, que han pasado la rigurosa calidad y la certificación de revisión del equipo de Puppet Engineering, y son de código abierto bajo la licencia Apache-2.0, disponible en el repositorio Github de GCP.

También publicamos un módulo de autenticación unificado que proporciona un solo mecanismo de autenticación para todos los módulos.

Los módulos han sido probados en CentOS, Debian, Ubuntu, Windows y otros sistemas operativos. Consulte la matriz de soporte de sistema operativos para conocer los detalles de compatibilidad. Trabajan con Puppet Open Source y Puppet Enterprise.

Para obtener más información y verlos en acción, regístrese para el seminario web con Cody Herriges y con Puppet el 13 de septiembre de 2017.

El poder de Puppet 

Es importante tener en cuenta que Puppet no es un lenguaje de scripting. Más bien, sigue un modelo de convergencia de objetos, lo que le permite definir un estado deseado para su recurso, que nuestros proveedores lo hacen aplicando los cambios necesarios.

En otras palabras, con Puppet, no dices "ejecuta esta lista de comandos para instalar Apache en mi máquina", dices que "Apache debería estar instalado y configurado." Hay algunos matices aquí, pero con este último,Puppet analiza instala y configura y certifca si Apache está instalado, verifica las dependencias correctas, lo actualiza si no está en la versión correcta y, lo más importante, no hace nada si todo es bueno. Puppet ya entiende las diferencias de implementación a través del sistema operativo y se encargará de hacer lo correcto para su distribución elegida.

Seguir un modelo de convergencia de objetos tiene varios beneficios: Hace que su recurso manifieste la declaración, abstrayendo varios detalles (por ejemplo, acciones específicas del sistema operativo); Y hace que las definiciones sean más fáciles de leer, modificar y auditar. El siguiente manifiesto crea un clúster completo de Google Container Engine, en sólo 15 líneas de código.

gauth_credential { 'mycred':
  provider => serviceaccount,
  path     => '/home/nelsona/my_account.json',
  scopes   => ['https://www.googleapis.com/auth/cloud-platform'],
}

gcontainer_cluster { 'myapp-netes':
  ensure             => present,
  initial_node_count => 2,
  node_config        => {
    machine_type => 'n1-standard-4', # we want a 4-core machine for our cluster
    disk_size_gb => 500,             # ... and a lot of disk space
  },
  zone               => 'us-central1-f',
  project            => 'google.com:graphite-playground',
  credential         => 'mycred',
}

Para obtener ejemplos específicos de cómo utilizar Puppet con los módulos GCP individuales, visite sus respectivas páginas de Forge.

Empezando con Puppet en GCP

Para empezar con  Puppet y GCP, siga estos pasos básicos:

Instale los módulos apropiados.
  1. Obtenga una cuenta de servicio con privilegios en los recursos GCP que desee administrar y habilite las API para cada uno de los servicios GCP que desea utilizar.
  2. Describa su infraestructura de GCP en Puppet.
    1. Defina un recurso gauth_credential.
    2. Defina los recursos de GCP.
  3. Aplique su manifiesto.
Vamos a seguir estos pasos con más detalle.

1. Instale sus módulos

Todos los módulos de Google para Puppet están disponibles en Puppet Forge. También se entrega un módulo de "bundle" que instala cada módulo GCP a la vez, para que pueda elegir la granularidad del código que extrae de su infraestructura.

Nota: los módulos de Google no requieren privilegios de administrador ni privilegios / alcances especiales en las máquinas que se están ejecutando. Es seguro instalar los módulos como un usuario regular o en su maestro de Puppet. Instalar en el maestro si lo desea distribuido a todos los clientes. 

El módulo de autenticación depende de algunas gemas publicadas por Google. Al igual que con todo lo relacionado con la configuración del sistema, puede instalar las gemas de Puppet a si mismo.


$ puppet apply <<EOF
package { [
    'googleauth',
    'google-api-client',
  ]:
    ensure   =< present,
    provider =< gem,
}
EOF


Este es el comando para Instalar todos los módulos Puppet con un solo comando:


puppet module install google/cloud


O bien, tambien puede instalar los módulos para productos seleccionados:


puppet module install google/gcompute    # Google Compute Engine
puppet module install google/gcontainer  # Google Container Engine
puppet module install google/gdns        # Google Cloud DNS
puppet module install google/gsql        # Google Cloud SQL
puppet module install google/gstorage    # Google Cloud Storage
Una vez instalado, verifique la integridad de los módulos ejecutando:


puppet module list


Debería ver una salida similar a:


$ puppet module list
/home/nelsona/.puppetlabs/etc/code/modules
├── google-cloud (v0.1.0)
├── google-gauth (v0.1.0)
├── google-gcompute (v0.1.0)
├── google-gcontainer (v0.1.0)
├── google-gdns (v0.1.0)
├── google-gsql (v0.1.0)
└── google-gstorage (v0.1.0)
/opt/puppetlabs/puppet/modules (no modules installed)



2. Obtenga las credenciales de su cuenta de servicio y active las API

Para garantizar la máxima flexibilidad y portabilidad, toda autenticación y autorización a los recursos de GCP se debe realizar a través de credenciales de cuenta de servicio. El uso de cuentas de servicio le permite restringir los privilegios al mínimo necesario para realizar el trabajo.

Nota: Como las cuentas de servicio son transferibles, no es necesario ejecutar Puppet dentro de GCP. Nuestros módulos se ejecutan en cualquier ordenador con acceso a Internet, incluso en otros proveedores de la nube. Por ejemplo, puede ejecutar despliegues desde una gestión de sistema CI / CD, como Travis o Jenkins, o desde su propia máquina de desarrollo. 

Haga clic aquí para obtener más información sobre las cuentas de servicio y sobre cómo crearlas y habilitarlas.

También asegúrese de haber habilitado las API para cada uno de los servicios GCP que desea utilizar.

3a. Definir mecanismo de autenticación

Una vez que tenga su cuenta de servicio, añada este bloque a su manifiesto para comenzar a autenticar con él. El título del recurso, aquí 'mycred' se hace referencia en los objetos en el parámetro credencial.

gauth_credential { 'mycred':
  provider => serviceaccount,
  path     => '/home/nelsona/my_account.json',
  scopes   => ['https://www.googleapis.com/auth/cloud-platform'],
}


Para obtener más información sobre cómo configurar o personalizar la autenticación, visite la documentación de autenticación de Google.

3b. Define tus recursos

Se puede administrar cualquier recurso para el que se proporcionamos un "type". El siguiente ejemplo crea un clúster Kubernetes en Google Container Engine. Para obtener la lista completa de recursos que puede administrar, consulte el vínculo correspondiente de la documentación del módulo o mire este sumario.

gcontainer_cluster { 'myapp-netes':
  ensure             => present,
  initial_node_count => 2,
  node_config        => {
    machine_type => 'n1-standard-4', # we want a 4-core machine for our cluster
    disk_size_gb => 500,             # ... and a lot of disk space
  },
  project            => 'google.com:graphite-playground',
  credential         => 'mycred',
}

4. Aplique el manifiesto

A continuación, dígale a Puppet que haga cumplir y lleve sus recursos al estado descrito en el manifiesto. Por ejemplo:

puppet apply <your-file.pp>

Tenga en cuenta que puede aplicar el manifiesto independiente, una vez o periódicamente en segundo plano mediante el agente de puppet.

Próximos pasos

Ahora ya está listo para comenzar a administrar sus recursos de GCP con Puppet y comenzar a aprovechar los beneficios de la gestión de la configuración de nube. Se seguiran mejorando los módulos y añadiendo cobertura a más productos de Google. También estan en Google en el proceso de preparación de la tecnología utilizada para crear estos módulos para su lanzamiento como código abierto. Si tiene preguntas sobre este trabajo, visite el foro Puppet on GCP Discussions o comuníquese con nosotros en puppet-on-gcp@google.com.

Recomendaciones