Nota:

Introducción a los clusters de Kubernetes basados en armadores en Oracle Cloud Infrastructure

En este tutorial se explica cómo crear clusters de Kubernetes basados en Arm que utilizan la plataforma de recursos informáticos Ampere A1 en Oracle Cloud Infrastructure (OCI). También desplegará el popular contenedor web, Apache Tomcat, en el cluster de kubernetes. Con los métodos de este tutorial, puede crear despliegues de aplicación que se pueden transferir sin problemas entre los clusters de kubernetes basados en armadores y los clusters basados en x86(Intel y AMD).

Introducción

Objetivos

En este tutorial:

¿Qué es la plataforma informática A1 de Ampere?

La plataforma de cálculo Ampere A1 basada en las CPU Ampere Altra representa un cambio generacional para empresas y desarrolladores de aplicaciones que crean cargas de trabajo que pueden escalar desde dispositivos de borde a centros de datos en la nube. El diseño exclusivo de esta plataforma proporciona un rendimiento consistente y predecible, ya que no hay ninguna contención de recursos dentro de un núcleo de recursos informáticos y ofrece más aislamiento y seguridad. Esta nueva clase de unidades de computación en Oracle Cloud Infrastructure proporciona una plataforma sin igual que combina la potencia de las CPU Altra con la seguridad, la escalabilidad y el ecosistema de servicios en OCI.

Introducción a la arquitectura del brazo en su entorno

Al introducir la arquitectura del brazo en el proceso de desarrollo de aplicaciones, los flujos de trabajo de desarrollo se mantienen iguales en la mayoría de los casos. Las herramientas y el proceso que utiliza actualmente se transferirán sin problemas, y la configuración de la estación de trabajo de desarrollo seguirá siendo la misma. La excepción general a esto son las aplicaciones del sistema de bajo nivel que se dirigen a funciones de CPU específicas mediante herramientas altamente especializadas. En la mayoría de los casos, puede esperar cambios menores en los pasos de creación o empaquetado del flujo de trabajo para admitir la arquitectura del brazo. Comience analizando el flujo de trabajo existente para identificar si tiene algún paso de creación o empaquetado específico de la plataforma.

Creación de un cluster de Kubernetes basado en un brazo

Container Engine for Kubernetes es fácil de empezar a utilizar y, junto con OCI Cloud Shell, puede tener un control total sin tener que configurar un entorno local. Para empezar, cree un nuevo cluster de Kubernetes en OCI.

  1. En el menú de navegación de la consola de Oracle Cloud, vaya a Servicios para desarrolladores y haga clic en Clusters de Kubernetes.

  2. Haga clic en Crear cluster. Puede utilizar la opción Creación rápida para utilizar valores por defecto o la opción Creación personalizada para especificar valores avanzados. Aquí utilizamos Creación rápida porque los valores por defecto que elige son un gran inicio.

    Descripción de la ilustración create cluster

  3. En la página Crear cluster, seleccione algunas opciones de configuración básicas, como la versión de Kubernetes que desea ejecutar y el número y la unidad de los nodos del cluster. Para este tutorial, seleccione la unidad Ampere A1 para los nodos.

    Nota Seleccione la unidad VM.Standard.A1.Flex para los nodos, como se muestra.

    Descripción de la ilustración create workflow

    También puede especificar un nombre y un compartimento para el cluster. El tipo de visibilidad indica si se puede acceder a los nodos del cluster desde Internet, por ejemplo, a través de SSH. Es más común mantenerlos en una red privada y utilizar bastion o saltar hosts en la red pública para proporcionar rutas de acceso. Aquí seleccionamos el valor por defecto de mantener los nodos privados.

  4. Haga clic en Crear cluster y el flujo de trabajo comenzará a crear todos los recursos necesarios y el propio cluster.

    Una vez creados los recursos de soporte, se muestra la página de detalles del cluster. En unos minutos, el cluster se crea y se activa.

  5. Una vez que el estado del cluster sea Activo, haga clic en el botón Acceder a cluster para ver las formas de acceder al cluster.

  6. Seleccione la opción Cloud Shell. Cloud Shell es un entorno de terminal en línea completo e integrado con la consola. Cloud Shell tiene todas las herramientas necesarias para interactuar con el cluster de Kubernetes y es la forma más rápida de empezar sin configurar un entorno de desarrollo local.

    Descripción de la ilustración access cloudshell

    Puede iniciar Cloud Shell directamente desde la página. Tenga en cuenta que el acceso a Cloud Shell también está disponible en la parte superior de la consola en todo momento para un acceso rápido.

    La página también incluye un comando para ejecutar dentro de Cloud Shell. Este comando utiliza la CLI de OCI para crear el archivo kubeconfig. Los clientes de Kubernetes como kubectl pueden trabajar con un archivo de configuración que facilite el acceso al cluster. Un archivo de este tipo generalmente se denomina archivo kubeconfig. Normalmente, este archivo de configuración reside en ~/.kube. Un único archivo de configuración puede contener la configuración de acceso para varios clusters.

    Nota La CLI de OCI ya está instalada y configurada para usted en el entorno de Cloud Shell.

  7. Inicie Cloud Shell y, a continuación, copie el comando y péguelo en Cloud Shell para ejecutarlo. El cliente de línea de comandos estándar para Kubernetes es kubectl y está preinstalado en el entorno de Cloud Shell.

    Ahora, comprobemos si podemos interactuar con el cluster y ver los nodos del cluster.

  8. Copie el siguiente comando en Cloud Shell y ejecútelo.

    kubectl get nodes -o wide
    

    Debe ver una salida similar al siguiente ejemplo, según el número de nodos del cluster. Tenga en cuenta que la versión del núcleo muestra que estamos ejecutando Oracle Linux para la arquitectura aarch64 (Arm de 64 bits).

    NAME          STATUS                     ROLES   AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                  KERNEL-VERSION                      CONTAINER-RUNTIME
    10.0.10.229   Ready                      node    3d7h   v1.19.7   10.0.10.229   <none>        Oracle Linux Server 7.9   5.4.17-2102.200.13.el7uek.aarch64   docker://19.3.11
    10.0.10.29    Ready                      node    3d7h   v1.19.7   10.0.10.29    <none>        Oracle Linux Server 7.9   5.4.17-2102.200.13.el7uek.aarch64   docker://19.3.11
    10.0.10.87    Ready                      node    3d7h   v1.19.7   10.0.10.87    <none>        Oracle Linux Server 7.9   5.4.17-2102.200.13.el7uek.aarch64   docker://19.3.11
    

    Ahora que tiene un cluster de Kubernetes totalmente funcional y ha configurado las herramientas para interactuar con él, puede desplegar cualquier carga de trabajo de kubernetes en él.

Despliegues perfectos en los clusters de Kubernetes

Ahora puede desplegar cargas de trabajo en contenedores en el cluster de kubernetes basado en ARM. Las imágenes de contenedor se crean para arquitecturas específicas. Las herramientas de contenedor como Docker o Buildah proporcionan los métodos para gestionar estas imágenes y su despliegue sin problemas. En este ejemplo, desplegará Apache Tomcat, el conocido contenedor web de Java en el cluster de kubernetes. El tiempo de ejecución de docker recuperará la imagen arm64v8 cuando se ejecute en Arm y la imagen amd64 cuando se ejecute en arquitecturas x86. Esto nos permite crear manifiestos de despliegue de kubernetes perfectamente portátiles siempre que creamos las imágenes de la aplicación para ambas arquitecturas.

Para comenzar, cree un manifiesto de despliegue neutro en arquitectura. El manifiesto no debe hacer referencia a ningún contenedor específico de la arquitectura, ya que el tiempo de ejecución del contenedor es capaz de detectar la arquitectura correcta y extraer la imagen adecuada. Para crear el manifiesto, ejecute el siguiente comando. Crea un nuevo archivo denominado tomcat.yaml.

cat <<EOF > tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat
  labels:
    app: tomcat
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
        - name: tomcat
          image: tomcat:9
          ports:
            - containerPort: 8080
          volumeMounts:
            - name: app-volume
              mountPath: /usr/local/tomcat/webapps/
      volumes:
        - name: app-volume
          configMap:
            name: app-bundle
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat
  labels:
    app: tomcat
spec:
  ports:
  - port: 80
    name: http
    targetPort: 8080
  selector:
    app: tomcat
  type: LoadBalancer
EOF

Este manifiesto contiene los siguientes objetos y acciones:

  1. Descargue la aplicación de ejemplo para Apache Tomcat y créela como ConfigMap.

    wget https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war
    kubectl create configmap app-bundle --from-file sample.war
    

    Nota Este método de montaje de una aplicación con ConfigMap es solo para mayor comodidad y no se debe utilizar en aplicaciones de producción.

  2. Despliegue el manifiesto. Esto crea los objetos kubernetes, incluidos el despliegue y el servicio. Al crear el despliegue, el tiempo de ejecución de docker detectará su ejecución en la arquitectura de brazo teh y seleccionará automáticamente la variante Arm del contenedor Apache Tomcat. La aplicación Java desplegada en el contenedor es neutra en la plataforma y, por lo tanto, se puede desplegar el mismo archivo .war en todas las arquitecturas.

    kubectl apply -f tomcat.yaml
    
  3. Compruebe el estado del despliegue

    kubectl get deploy,svc
    

    Verá una salida similar a la siguiente.

    NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/tomcat   2/2     2            2           9s
    
    NAME                 TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)        AGE
    service/kubernetes   ClusterIP      10.96.0.1       <none>            443/TCP        3d9h
    service/tomcat       LoadBalancer   10.96.120.212   <pending>   80:32547/TCP         9s
    

    Esto muestra que Tomcat se ha desplegado correctamente en nuestro cluster de kubernetes basado en Arm y está sirviendo a una aplicación web Java. El manifiesto de despliegue que utilizamos no está vinculado a la arquitectura y se puede utilizar para x86, así como clusters basados en Arm.

  4. Opcionalmente, puede obtener detalles detallados de nivel de nodo ejecutando

    kubectl get nodes -o wide
    kubectl describe node <node_name>
    

    Se muestra información detallada sobre el nodo, incluida la arquitectura y los pods programados en ese nodo.

    Cuando la dirección IP externa de LoadBalancer está disponible (esto puede tardar unos minutos), puede visitar el despliegue señalando el explorador web a http://<your_loadbalancer_ip_address>/sample

Pasos Siguientes

Explore más cargas de trabajo que puede desplegar en el cluster de kubernetes basado en Arm visitando el repositorio del hub de docker de las imágenes oficiales de arm64v8 aquí.

Más recursos de aprendizaje

Explore otras prácticas en docs.oracle.com/learn o acceda a contenido de aprendizaje más gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de formación de Oracle.

Para obtener documentación sobre los productos, visite Oracle Help Center.