Desplegando servicios en contenedores utilizando Oracle Cloud Infrastructure (OCI) Container Engine for Kubernetes (OKE)

Por Hillmer Chona Java Champion Groundbreaker Ambassador
Publicado en Junio 2019

Revisado por Francisco Riccio




Introducción:


En este artículo se cubren los pasos para el despliegue de servicios utilizando Kubernetes en Oracle Cloud Infrastructure,  desde la creación del Cluster,   hasta el despliegue con Kubernetes. El material de este artículo ha sido preparado con la versión disponible de Oracle cloud en el meses de Enero/Febrero del 2019, debido a la constante evolución que presenta esta plataforma algunos de los pasos presentados pueden presentar variaciones.

El artículo está dividido en tres partes, la primer parte muestra cómo crear un Cluster en Oracle Cloud Infrastructure Container for Kubernetes Engine, la segunda cómo configurar el acceso al Cluster y la última como crear despliegues en el Cluster con Kubernetes.

Información de cómo obtener una cuenta gratuita para probar los servicios de Oracle Cloud la consigue en el siguiente enlace: https://cloud.oracle.com/en_US/tryit





PARTE 1: Creación de instancias en Oracle Cloud Infrastructure


Introducción:

El servicio de Container for Kubernetes Engine, hace parte de los servicios ofrecidos en Oracle Cloud Infrastructure o OCI,  a continuación se describe el proceso para crear una instancia en este servicio.



  • Acceso a Oracle Cloud Infrastructure OCI: Al acceso a OCI se puede hacer desde https://cloud.oracle.com/, una vez iniciada sesión, la opción Compute permite acceder a los servicios de Oracle Cloud

    image4.png




    Al ingresar a Oracle Cloud Infrastructure  OCI encontramos los accesos para los asistentes que permiten crear nuevos servicios (Quick Launch) y para el tablero de control (Dashboard) donde se pueden ver el estado del servicio (View health dashboard)

    image10.png

     



  • Acceso a un Cluster de Contenedores en OCI:  Para crear, consultar y/o administrar un Cluster de contenedores  se utiliza la opción del Menú: Developer Services > Container Clusters (OKE)

    image14.png




    En OCI los Clusters se encuentran organizados en estructuras llamadas Compartimientos (Compartments), para consultar los clusters que se encuentran en un compartimiento se utiliza la opción Pick a compartment

    image2.png

     



  • Creación de un Cluster: La opción Create Cluster (Crear un Cluster)  inicia el asistente para la creación de un nuevo Cluster de contenedores, para esto es necesario cumplir con los requerimientos que se listan en la opción Clusters Requirements: Básicamente un usuario con privilegios y permisos (Minimum required privileges) para acceder y/o crear los elementos que intervienen en el cluster, y una política de seguridad que permita al Cluster acceder y administrar sus recursos (allow service OKE to manage all-resources in tenancy)

    image18.png




    Para verificar si la política allow service OKE to manage all-resources in tenancy se encuentre activa se utiliza  la opción  Identity > Policies del Menú

    image1.png




    Si la política (Policy) no se encuentra creada, se hace necesario hacerlo por medio de la opción Create Policy (Crear Política). Una Policy está compuesta por un  Name (Nombre), Description (Descripción), Versioning (Versión) y  el Statement (Declaración) se debe ingresar el indicado en los requerimientos:  Allow service OKE to manage all-resources in tenancy

    image7.png




    Para continuar con la creación del Cluster se selecciona la opción Create Cluster desde el menú Developer services > Container Clusters (OKE), se diligencia el formulario  Cluster Creation (Creación del Cluster)

    image13.png




    En el proceso de creación se definen los nodos iniciales en el Cluster

    image16.png




    Luego de unos minutos el Cluster es creado, y estará disponible cuando tenga el estado  Active (Activo)

    image17.png






PARTE 2: Acceso al Cluster de Kubernetes (OKE)


  • Configurando el acceso al Cluster de Kubernetes (OKE): Para poder acceder al cluster OKE es necesario configurar la conexión Kubeconfig.  Las instrucciones para realizar la configuración se pueden consultar seleccionando el Cluster que se quiere acceder desde la opción del menú Developer services > Container Clusters (OKE)

    image5.png




    Una vez seleccionado el Cluster mediante la opción Access Kubeconfig (Acceso a Kubeconfig) se pueden ver los requisitos y pasos para realizar la configuración (How to Access Kubeconfig)

    image15.png




    El primer paso para configurar el acceso al Cluster es la instalacción de la herramienta OCI CLI: Oracle Cloud Infrastructure Command-Line Interface (Interfaz de línea de comando para Oracle Cloud Infrastructure), OCI CLI es un asistente o wizard que facilita la creación o actualización de los atrchivos de configuración del acceso al Cluster.


    El comando a continuación descarga e instala OCI CLI:

    bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/
    scripts/install/install.sh)" 

     


    Luego de la instalación de OCI CLI, el siguiente paso es iniciar el asistente para la configuración de la conexión con el siguiente comando:

    oci setup config 

     


    Durante la ejecución del asistente de la configuración del acceso al Cluster, se requiere información que se consulta desde Oracle Cloud Infrastructure OCI, a continuación se muestran los pasos del OCI CLI y en cada uno como consultar la información en OCI. El primer paso del asistente es indicar la ruta y/o nombre del archivo que almacenará la información de la configuración de la conexión:

    Enter a location for your config [/Users/myuser/.oci/config]: 

     


    El siguiente paso es en indicar el usuario (Users OCID) con que se conectará al Cluster:

    Enter a user OCID: 

     


    El User OCID puede ser consultado desde el menú Identity > Users, seleccionando el usuario para ver los detalles de este, el User generalmente tiene una estructura similar a: ocid1.user.oc1.xxx, para ver el valor completo del User puede ser necesario tener que seleccionar la opción Show (Ver)

    image6.png




    Luego de haber ingresado el User OCID, el siguiente paso es el indicar el Tenancy del OCID:

    Enter a tenancy OCID: 

     

    El Tenancy OCID puede ser consultado desde el menú Administration > Tenancy details,  el Tenancy generalmente tiene una estructura similar ocid1.tenancy.oc1.xxx, para ver el valor completo del Tenancy puede ser necesario tener que seleccionar la opción Show (Ver):

     image9.png




    El paso siguiente es la región donde se encuentra el Cluster

    Enter a region (e.g. eu-frankfurt-1, uk-london-1, us-ashburn-1, us-phoenix-1): 

     

    El último paso del asistente es la generación del par de llaves RSA (RSA key pair), para crear unas nuevas se indica Y (Yes)

    Do you want to generate a new RSA key pair? (If you decline you will be asked to 
    supply the path to an existing key.) [Y/n]: Y 

     


    Para crear las llaves se requiere responder unas preguntas adicionales, se pueden tomar las sugeridas por el asistente dando Enter

    Enter a directory for your keys to be created [/Users/myuser/.oci]: 
    Enter a name for your key [oci_api_key]:
    Public key written to: /Users/myuser/.oci/oci_api_key_public.pem
    Enter a passphrase for your private key (empty for no passphrase):
    Private key written to: /Users/myuser/.oci/oci_api_key.pem
    Fingerprint: fb:02:36:37:35:5a:3c:32:33:1f:21:5a:13:ca:0a:3a
    Config written to /Users/myuser/.oci/config

     


    Luego de ejecutar el asistente para la configuración del acceso al Cluster, es necesario adicionar la llave pública generada por el asistente, al usuario en OCI. Para esto se debe acceder a la información del usuario mediante la opción del menú: Identity >Users, y se selecciona la Add Public Key (Adicionar Llave Pública)

    image12.png




    En este paso se debe copiar el contenido de la llave pública creada por el asistente, en el caso de haber utilizado los nombres sugeridos por el asistente, este archivo se encontrará en una ruta similar a:  /Users/myuser/.oci/oci_api_key_public.pem

    image3.png




    Ahora solo queda ejecutar los pasos restantes indicados en How to Access Kubeconfig

    mkdir -p $HOME/.kube 

     


    Y por ultimo

    oci ce cluster create-kubeconfig --cluster-id 
    ocid1.cluster.oc1.iad.aaaaaaaaae3dgolfgy3tcyjrheztgnzvmi3geylbg43ggzbwmc3gemrsgu4w    
    --file $HOME/.kube/config --region us-ashburn-1 
  •  



  • Accediendo al Cluster OKE: El Acceso al Cluster OKE se puede hacer mediante una consola de comandos. Con el siguiente comando se puede probar la conexión con el Cluster OKE:

    kubectl get nodes 

     


    El comando kubectl get nodes muestra los nodos que componen el Cluster,  el resultado es similar al siguiente:

    NAME               STATUS      ROLES       AGE       VERSION
    129.112.144.20     Ready       node        3m        v1.11.5
    129.112.162.187    Ready       node        2m        v1.11.5
    129.112.40.84      Ready       node        3m        v1.11.5
    

     


    Oracle Kubernetes Engine OKE, tiene una Consola Web que permite la administración del Cluster. El siguiente comando permite habilitar esta consola

    kubectl proxy 

     


    Desde el siguiente enlace se puede acceder a la consola web:

    http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

    Para acceder a la Consola Web se requiere el archivo de configuración del acceso al Cluster creado en el paso “Configurando el acceso al Cluster de Kubernetes (OKE)”, es el Archivo Kubeconfig. Para usar el archivo Kubeconfig como mecanismo de autenticación  usamos la opción Choose kubeconfig file (Seleccione el archivo kubeconfig) para buscarlo y seleccionarlo desde el directorio en el cual fue creado.

    image8.png




    En la consola web  de OKE  se tiene al dashboard que muestra la información del Cluster, junto con tareas que permiten la administración del mismo

    image11.png

 




PARTE 3: Despliegue de servicios en el Cluster OKE:


Haciendo uso de los comandos de Kubernetes podemos crear, escalar, eliminar un servicio. A continuación se presenta el proceso para hacer el despliegue del servidor de aplicaciones  WebSphere Liberty.

La información del despliegue se encuentra en el archivo appserver.yaml, su contenido se muestra a continuación:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: myappserver
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      name: myappserver
      labels:
        app: myappserver	
    spec:
      containers:
      - name: myappserver
        image: websphere-liberty
---
apiVersion: v1
kind: Service
metadata:
  name: myappserver
spec:
  type: LoadBalancer #Exposes the service as a node port
  ports:
  - port: 9080
  selector:
    app: myappserver

 


El siguiente comando crea los contenedores o PODs que hacer parte del Deployment configurado en el archivo appserver.yaml, en este caso un solo POD  debido a que el valor del parámetro replicas (Réplicas) se ha definido como 1

kubectl create -f appserver.yaml 

 


Los despliegues  que se encuentran en el Cluster se listan con el siguiente comando

kubectl get deployments 

 


El resultado de la ejecución del comando es similar al siguiente, en donde los valores de las columnas Desired, Current, Up-to-date y Available corresponden al número de réplicas o PODs del Deployment

NAME              DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
myappserver   	  1         1         1            1           1d

 


Para conocer la dirección externa que permite acceder a las aplicaciones que hacen parte del Deployment se utiliza el siguiente comando

kubectl get svc myappserver 

 


El resultado de la ejecución del comando es similar al siguiente:

NAME          TYPE           CLUSTER-IP        EXTERNAL-IP      PORT(S)          AGE
myappserver   LoadBalancer   10.96.40.208      129.123.68.154   9080:32094/TCP   37d


Utilizando la dirección externa (EXTERNAL-IP) y el puerto (PORT) podemos acceder a la aplicación desde un navegador web.

 

Para escalar (aumentar o disminuir) las réplicas o PODs que soportan el despliegue se usan el siguiente comando, en donde el valor del parámetro --replicas corresponde al valor final de PODs

kubectl scale deployment myappserver --replicas=3 

 


Ejecutando el comando: kubectl get deployments se puede verificar el número de el réplicas del despliegue

NAME          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
myappserver   3         3         3            3           1d

 


Los comandos: kubectl get pods , permite ver las PODs que se encuentran en el Cluster, para ver el detalle de un POD se utiliza el comando  kubectl describe pod <Nombre del POD>

Para eliminar el despliegue se ejecuta el siguiente comando

kubectl delete -f appserver.yaml 



Hillmer Chona es un Ingeniero de Sistemas, Java Champion, Oracle GroundBreaker Ambassador, ganador del premio Duke's Choice Award, Líder del Grupo de usuarios de Java de Medellín - Colombia, con mas de 14 años de experiencia en diseño y desarrollo de software con tecnologías Java. En su trabajo combina los roles de desarrollo y operaciones. Ha sido conferencista en Java One, Oracle Code, Java days, Oracle Technology Network OTN y Oracle Developer Community ODC Tour.

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.