sql >> Base de Datos >  >> RDS >> Database

Uso de Jenkins con Kubernetes AWS, Parte 1

CoreOS es el sistema operativo diseñado para contenedores Docker. CoreOS tiene Docker preinstalado de fábrica. Kubernetes se puede instalar en CoreOS mediante CloudFormation, como se explica en detalle en un artículo anterior, "Introducción a Kubernetes en Amazon Web Services (AWS)".

Problema

Kubernetes no está preinstalado en CoreOS y puede instalarse mediante kube-aws herramienta y requiere alguna entrada y configuración del usuario. La instalación de Kubernetes en CoreOS es un proceso complicado y consta de las siguientes etapas que se muestran en la Figura 1.


Figura 1: Instalación de Kubernetes en CoreOS Stages

Solución

Se puede usar un Pipeline de Jenkins para automatizar la instalación de Kubernetes, como se muestra en la Figura 2. Las distintas etapas de la instalación se pueden configurar en un Jenkinsfile y, cuando se ejecuta Pipeline, kube-aws se descarga la herramienta, CloudFormation la pila se inicializa, el contenido del directorio de activos se procesa, los parámetros del clúster, como la cantidad de instancias de trabajo, se personalizan y, posteriormente, el clúster se valida y se lanza.


Figura 2: Pipeline de Jenkins para instalar Kubernetes en CoreOS

La instalación de Kubernetes con Jenkins Pipeline es un ejemplo de la Automatización Patrón de diseño DevOps.

En un tutorial de tres artículos, automatizaremos el proceso de instalación de Kubernetes usando un Pipeline de Jenkins. Este artículo tiene las siguientes secciones:

  • Configuración del entorno
  • Creación de los artefactos de requisitos previos
  • Creación de un nodo de Jenkins
  • Conclusión

Configuración del entorno

Instalaremos Jenkins usando la imagen de Docker "jenkins" en una instancia de CoreOS. Lanzaremos un clúster de Kubernetes en una instancia de Amazon AMI Linux EC2 mediante un Pipeline de Jenkins. Primero, inicie dos instancias EC2, una con Amazon Linux y la otra con CoreOS, como se muestra en la Figura 3.


Figura 3: Obtención de la dirección IP pública

Al crear la instancia de Amazon Linux, cree un nuevo par de claves ("jenkins", por ejemplo) seleccionando "Crear un nuevo par de claves" y descargue la clave privada "jenkins.pem" que se usará para configurar un agente de Jenkins. Obtenga la dirección IP pública de la instancia EC2 que ejecuta CoreOS e inicie sesión SSH en la instancia.

ssh -i "jenkins.pem"  [email protected]

Ejecute la imagen de Docker para que Jenkins inicie Jenkins.

docker run -name jenkins -p 8080:8080 -p 50000:50000 jenkins

Se descarga la imagen de Docker "Jenkins". Jenkins se pone en marcha. Copie la contraseña generada. Obtenga el DNS público de la instancia EC2 que ejecuta Jenkins. Usando la URL :8080 , inicie sesión en el Panel de Jenkins, como se muestra en la Figura 4.


Figura 4: Consola de administración de Jenkins

Creación de los artefactos de requisitos previos

Ahora, necesitamos crear algunos artefactos para un clúster de Kubernetes que no se puedan automatizar.

  • Par de claves EC2
  • Clave KMS
  • Directorio de Jenkins /var/jenkins
  • Inicio de sesión SSH en la instancia Amazon EC2 que ejecuta Amazon Linux
ssh -i "jenkins.pem"  [email protected]

Debido a que se utiliza Amazon EC2, se requiere una cuenta de AWS. Necesitamos crear un conjunto de credenciales de seguridad de AWS, que usaremos para configurar la instancia EC2 desde la que se inicia la pila de CloudFormation. Para crear nuevas credenciales de seguridad de AWS, haga clic en Credenciales de seguridad para la cuenta de usuario y haga clic en Crear nueva clave de acceso para crear una clave de acceso. Copie el ID de clave de acceso y la clave de acceso. En la instancia de Amazon Linux, ejecute el siguiente comando para configurar la instancia con las credenciales de AWS:

aws configure

Especifique la identificación de la clave de acceso y la clave de acceso cuando se le solicite. Especifique el nombre de región predeterminado (us-east-1 ) y el formato de salida (json ), como se muestra en la Figura 5.


Figura 5: Configuración de la instancia de Jenkins con credenciales de AWS, región y formato de salida predeterminado

A continuación, cree un par de claves EC2. Ejecute el siguiente comando para crear un par de claves llamado kubernetes-coreos y guárdelo como kubernetes-coreos.pem .

aws ec2 create-key-pair
   --key-name kubernetes-coreos
   --query 'KeyMaterial'
   --output text > kubernetes-coreos.pem

Modifique los permisos de acceso del par de claves utilizando el modo 400, que establece los permisos de acceso para leer por propietario.

chmod 400 kubernetes-coreos.pem

Se crea un par de claves y se establecen los permisos de acceso (consulte la Figura 6).


Figura 6: Creación de un par de claves para Kubernetes

El par de claves también aparece en la consola de AWS EC2, como se muestra en la Figura 7.


Figura 7: Obtención de la dirección IP pública

A continuación, cree una clave KMS, que se utiliza para cifrar/descifrar activos TLS del clúster y se identifica mediante una cadena Arn. Usa las aws interfaz de línea de comandos para crear una clave KMS para la región us-east-1 .

aws kms
   --region=us-east-1 create-key
   --description="kube-aws assets"

Se crea una clave KMS, como se muestra en la Figura 8. Copie el KeyMetadata.Arn cadena que comienza con arn:aws:kms:us-east-1 para ser utilizado más tarde para inicializar el clúster CloudFormation.


Figura 8: Creación de una clave KMS

También necesitamos crear un directorio para Jenkins:

sudo mkdir /var/Jenkins
sudo chmod 777 /var/jenkins

Se crea un directorio y se establecen los permisos, como se muestra en la Figura 9.


Figura 9: Creación de un directorio para Jenkins

Creación de un nodo de Jenkins

Una canalización de Jenkins es un proyecto de Jenkins que utiliza el complemento de canalización de Jenkins. Una canalización normalmente consta de una secuencia de pasos, y cada paso realiza una tarea. Los ejecutores disponibles en los agentes se utilizan para ejecutar un proyecto de Jenkins. Un "agente" es una máquina configurada para descargar proyectos del nodo principal. El nodo "maestro" es la máquina en la que está instalado Jenkins y maneja todas las tareas del sistema de compilación, incluido el análisis de secuencias de comandos de Pipeline y la ejecución de un proyecto de Jenkins en un ejecutor. Un "ejecutor" es un recurso computacional para compilar código y puede configurarse en los nodos maestro o agente. En esta sección, crearemos un nodo agente y configuraremos un ejecutor en el nodo. Seleccione Administrar Jenkins. en el Panel de Jenkins, como se muestra en la Figura 10.


Figura 10: Obtención de la dirección IP pública

Posteriormente, seleccione Administrar nodos , como se muestra en la Figura 11.


Figura 11: Obtención de la dirección IP pública

El nodo "maestro" debería aparecer en la lista. Haga clic en Nuevo nodo para crear un nodo de agente, como se muestra en la Figura 12.


Figura 12: Obtención de la dirección IP pública

Especifique un Nombre de nodo (jenkins , por ejemplo) y seleccione el Agente Permanente botón de opción, como se muestra en la Figura 13. Haga clic en Aceptar.


Figura 13: Obtención de la dirección IP pública

Para configurar el nuevo nodo de agente, necesitaremos el DNS del host en el que se creará el agente. Copie el DNS público de la consola EC2 de AWS para la instancia EC2 que ejecuta una imagen de Amazon Linux, como se muestra en la Figura 14.


Figura 14: Obtención de la dirección IP pública

En la nueva interfaz de usuario de entrada del agente, especifique un Nombre (jenkins , por ejemplo). Especifique el # de ejecutores como 1. Especifique un directorio raíz remoto como /var/jenkins , que se creó anteriormente. Especificar Etiquetas como “jenkins”, cuyo significado discutiremos en una sección posterior. En Uso , mantenga la configuración predeterminada de "Usar este nodo tanto como sea posible". En método de lanzamiento , seleccione "Lanzar agentes esclavos en máquinas Unix a través de SSH". En Host , especifique el DNS público copiado de EC2 Console. En Disponibilidad , seleccione "Mantener este agente en línea tanto como sea posible". Para Credenciales , haz clic en Agregar desplegable y seleccione Proveedor de credenciales de Jenkins , como se muestra en la Figura 15.


Figura 15: Obtención de la dirección IP pública

En Agregar Credenciales cuadro de diálogo, seleccione Dominio como Credenciales globales y Amable como Global . Especifique Nombre de usuario como "usuario ec2" y seleccione Entrar directamente . Copie y pegue el contenido del archivo de clave privada jenkins.pem en la Clave campo, como se muestra en la Figura 16.


Figura 16: Adición de credenciales de Jenkins

Haz clic en Agregar , como se muestra en la Figura 17.


Figura 17: Proveedor de credenciales de Jenkins>Agregar

Seleccione el usuario ec2 credencial en Credenciales , como se muestra en la Figura 18. Haga clic en Guardar .


Figura 18: Configuración del nodo Jenkins

Se agrega un nuevo agente, como se muestra en la Figura 19. Inicialmente, es posible que el agente no esté disponible porque aún se está iniciando.


Figura 19: Agente Jenkins creado

Haga clic en el enlace del agente y haga clic en Relanzar agente , si es necesario, como se muestra en la Figura 20.


Figura 20: Agente de relanzamiento

El mensaje de salida "Agente conectado correctamente y en línea" indica que el agente se ha iniciado (consulte la Figura 21).


Figura 21: Agente conectado con éxito y en línea

El agente "jenkins" debería aparecer como en ejecución, como se muestra en la Figura 22.


Figura 22: Agente de Jenkins corriendo

Conclusión

En este artículo, presentamos la importancia de automatizar una instalación de Kubernetes con Jenkins. Comenzamos instalando Jenkins en CoreOS, creando los artefactos de requisitos previos y creando un nodo de Jenkins. En un artículo posterior, configuraremos un Jenkinsfile para una canalización de Jenkins y crearemos una canalización de Jenkins. Y, en un tercer artículo, ejecutaremos la canalización de Jenkins para instalar Kubernetes.