Nota:
- En este tutorial se necesita acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por valores específicos de su entorno en la nube.
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:
- Cree un cluster de Kubernetes (OKE) con la tecnología de los recursos informáticos de Ampere A1.
- Despliegue Apache Tomcat en el cluster.
- Cree despliegues que se puedan transferir sin problemas a través de los clusters de kubernetes basados en x86 y Arm.
- Despliegue aplicaciones Java y microservicios en el contenedor web Tomcat.
¿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.
- Los pasos de compilación específicos de la plataforma pueden ser opciones de compilador, en el caso de lenguajes compilados como C/C++, Go y Rust. En estos casos, normalmente agrega un paso de creación para compilar la aplicación para Arm junto con la versión x86 de la aplicación. Si utiliza un lenguaje de código de byte, lenguaje compilado Just-In-Time (JIT) o un lenguaje interpretado como Java, JavaScript, TypeScript, Python o Ruby, normalmente no hay indicadores o opciones de tiempo de compilación. Estos lenguajes no producen binarios ejecutables específicos de la plataforma; en su lugar, utilizan un tiempo de ejecución específico de la plataforma, como el tiempo de ejecución de Java o Node.js para Arm, que ejecuta el mismo código fuente en varias plataformas.
- El empaquetado específico de la plataforma incluye el empaquetado de sus aplicaciones como imágenes de Docker, imágenes de máquina virtual personalizadas o artefactos de despliegue específicos de la plataforma. En estos casos, deseará modificar el proceso de creación con un paso adicional para producir el paquete de aplicación específico de Arm. En el caso de las imágenes de contenedor, por ejemplo, deseará tener una versión de la imagen de aplicación que se va a desplegar en un sistema Arm. Los formatos de imagen de contenedor soportan varias arquitecturas, de modo que los entornos de ejecución de contenedor de cada plataforma simplemente pueden recuperar la imagen adecuada y ejecutar la aplicación. Consulte el blog de Docker para obtener más información sobre las imágenes de varios archivos y cómo crearlas.
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.
-
En el menú de navegación de la consola de Oracle Cloud, vaya a Servicios para desarrolladores y haga clic en Clusters de Kubernetes.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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:
- Objeto de despliegue con el nombre
tomcat
y la etiquetaapp: tomcat
. - El despliegue tiene 3 réplicas.
- Los pods del despliegue tienen un único contenedor:
tomcat:9
. Tenga en cuenta que el manifiesto no especifica la arquitectura, lo que la hace válida en todas las arquitecturas. Docker extraerá la imagen que soporte la arquitectura adecuada en tiempo de ejecución. - Un objeto Volume se crea a partir de ConfigMap y se monta en el contenedor. Este ConfigMap se creará más adelante y contendrá la aplicación.
- El manifiesto también contiene un objeto Service y expone el despliegue en LoadBalancer.
-
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.
-
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
-
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.
-
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.
Get started with Arm-based Kubernetes clusters in Oracle Cloud Infrastructure
F50328-01
November 2021
Copyright © 2021, Oracle and/or its affiliates.