lunes, 31 de agosto de 2020

Métricas de uso en openshift

 Hola, para obtener las métricas de openshift en caso de que nuestro clúster no tenga herramientas de monitoreo puedes ejecutar los siguientes comandos desde una terminal:

Pre-requisitos:
  1. Ejecutar los siguientes comandos desde una máquina donde este instalado el CLI de Openshift y Kubectl
  2. Ingresar previamente al clúster de openshift vía linea de comandos

#obtener los nodos de openshift
oc get nodes

#las métricas de uso de los worker nodes
oc adm top nodes

# en caso de ocurrir falla del comando anterior similar a esto, ejecuta lo siguiente para habilitar la recolección de métricas:
# Error from server (NotFound): the server could not find the requested resource (get services http:heapster:)
        kubectl create -f kubernetes-metrics-server/

#obtener las métricas de los PODs
oc adm top pod --all-namespaces=true

#Obtener todos los PODs en ejecución
oc get pods --all-namespaces=true

#por cada worker node, ejecutar el siguiente comando sustituyendo el nombre o ip del nodo
oc describe node <nodename>

#obtención de los datos del container registry
oc adm top imagestreams
oc adm top images

#obtención de la información de persistent volumes
oc get pv



miércoles, 29 de julio de 2020

Instalando Autoscaling en Openshift en IBM Cloud

Hola, he estado tratando de configurar ibm-iks-autoscaler en un cluster de openshift pero he tenido unas dificultades.

Seguí las instrucciones que se encuentran en esta liga:
https://cloud.ibm.com/docs/openshift?topic=openshift-ca#ca_chart_values


Por ejemplo, sí te salen errores como los siguientes:

Si tienes un error de este tipo:

User "system:serviceaccount:kube-system:default" cannot list resource "configmaps" in API group "" in the namespace "kube-system"


Revisar:
https://github.com/helm/helm/issues/5100

es como lo pudé solucionar.

Espero te sirva, para que puedas configurar el autoescalamiento de tú clúster
Saludos

martes, 19 de noviembre de 2019

Publicar una aplicación en Openshift

Hola,
en este pequeño blog voy a plasmar las instrucciones para públicar una aplicación contenerizable en Openshift.

Voy a usar el código de una aplicación que tengo en Github:
https://github.com/wolfmanx23/cliente-api-kube

Está aplicación por ser contenerizable también la puedo publicar en Kubernetes como explico en la siguiente parte de mí blog: https://nube-paas.blogspot.com/2019/10/workshop-ingresar-ibmcloud.html

Bien, vamos a hacer la publicación de la aplicación:

1. vamos a copiar el login al clúster de Openshift desde la consola:
2. copiamos el comando de login similar al siguiente:
oc login https://xxx.cloud.ibm.com:30478 --token=xxxxx

3. desplegar la aplicación:
oc new-app --name cliente-api https://github.com/wolfmanx23/cliente-api-kube.git

4. crear el servicio edge dentro de Openshift (tienes que esperar aprox 60seg para permitir a la plataforma crear el contenedor y publicarlo)

oc create route edge --service=clienteapi --port 3000

5. ahora obten la ruta para el servicio y visualizarlo en el contenedor
oc get route clienteapi


6. copia la ruta que arroja la consola y visualiza la aplicación en un navegador


Listo, ya tienes una aplicación funcionando en openshift

lunes, 7 de octubre de 2019

Workshop Ingresar a IBMCloud y comandos para Kubernetes

Estas son las instrucciones para ingresar a IBM Cloud:


1. Crea un cluster de kubernetes, con el nombre de: demo
2. Conexión a IBM Cloud: ibmcloud login -a https://api.ng.bluemix.net  --sso
NOTA: --sso sólo si manejas varias cuentas de IBM Cloud

3. Descargamos las configuraciones del cluster:  ibmcloud ks cluster-config demo
4. Establecemos la configuración de la variable de ambiente
5. verificamos que funcione adecuadamente kubectl:  kubectl version 

6. Creación del registro privado: ibmcloud cr namespace-add pruebacontenedorespbarrien
7. git clone https://github.com/IBM/container-service-getting-started-wt.git
   https://github.com/wolfmanx23/cliente-api-kube
8. vamos a crear el contenedor del hola mundo en nuestro registro privado:
            ibmcloud cr build -t us.icr.io/pruebacontenedorespbarrien/clienteapi:1 .
9. Ejecutar el contenedor en el cluster:
        kubectl run clienteapi --image=us.icr.io/pruebacontenedorespbarrien/clienteapi:1
10. Ahora expondremos la aplicación a todo el mundo: 
        kubectl expose deployment/clienteapi  --type=NodePort --port=3000--name=clienteapi --target-port=3000
11. Vamos a obtener la descripción del servicio: kubectl describe service clienteapi
12. Vamos a obtener los workers del cluster: ibmcloud ks workers demo
13. Llama la aplicación con la combinación de ip publica y nodeport asignado por kubernetes

Algunos comandos utiles:
Agregar worker nodes al cluster:

flavors disponibles en DC de México:  ibmcloud ks flavors --zone mex01
después agregar el Worker node: ibmcloud ks worker add --cluster pmbk8s  --machine-type c2c.16x16 --private-vlan 2666621 --workers 1
 donde se tiene que especificar al menos:
el nombre del cluster, el tipo de flavor para el worker node, la VLAN privada, pública y la cantidad de workers.
Mayor referencia en la ayuda:
ibmcloud ks worker add --help



Instalacion Docker y CLI IBM Cloud

Estas son las instrucciones para instalar docker:


subscription-manager repos --enable=rhel-7-server-extras-rpms
sudo yum remove docker docker-common docker-selinux docker-engine-selinux docker-engine docker-ce
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum install docker-ce
sudo systemctl enable docker.service



Instrucciones básicas para iniciar y detener docker


#inicio, stop y reinicio de docker
sudo systemctl start docker.service ## <-- Start docker ##
sudo systemctl stop docker.service ## <-- Stop docker ##
sudo systemctl restart docker.service ## <-- Restart docker ##
sudo systemctl status docker.service ## <-- Get status of docker ##


Instrucciones para IBM Cloud CLI



#install kubectl

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
enabled=1
gpgcheck=1
repo_gpgcheck=1
EOF
yum install -y kubectl


#install ibmcloud

#install registry cli
ibmcloud plugin install container-registry -r Bluemix
#install kubernetes cli
ibmcloud plugin install kubernetes-service -r Bluemix


sábado, 20 de agosto de 2016

Ejemplo Bluemix: Hola Mundo

Para empezar tienes que tener tú ambiente de desarrollo instalado!!!!!
NOTA: Recuerda, estoy haciendo un ejemplo sobre un ambiente de desarrollo windows.

Listo, primer paso.
Crea un directorio para trabajar, por ejemplo:

cd c:\
mkdir trabajo
cd trabajo

Ahora ejecuta el siguiente comando:
npm init

completa la información que te pide el comando:





La información que viene entre parentesis en cada renglón es información por defecto de la aplicación. Después de ingresar toda la información, va a confirmar que la información que ingresaste es correcta:



 Ahora crea el archivo server.js con un editor de texto cualquiera (es muy importante que se llame server.js, sino no funcionará). Por ejemplo notepad e ingresa el siguiente código:

var express = require("express"); //requiere el paquete express de nodejs
var app = express();   //la aplicación utiliza express

var serverPort = 3000; //El puerto por el cual recibirá peticiones la aplicación
var serverHost = 'localhost'; //nombre del servidor

var server = app.listen(serverPort, serverHost, function() { //crea una aplicación escuchando con la información que indiquemos
    var host = server.address().address; //obtiene la dirección del servidor
    var port = server.address().port; //obtiene el puerto por el cual esta escuchando
    console.log('Recibiendo peticiones en http://%s:%s', host, port); //despliega mensaje en consola
});

Ya que hemos indicado que la aplicación requiere express ahora necesitamos instalar el paquete, de la siguiente forma:

npm install express --save


Así se instalan todos los paquetes en NodeJS, estos puedes ser creados por terceros o nosotros y los puedes encontrar en: https://www.npmjs.com/

Ahora ejecuta tú aplicación con el siguiente comando:
npm start

La aplicación no hace más que mandar el mensaje a consola.




Ahora agregaremos la función get de html al archivo js que hemos creado. Anexa el siguiente código:

app.get('/', function(req, res) {
    res.send('Hola mundo');
});

Los métodos que acepta una página cualquiera en internet son:
  •  Post, todos los parámetros pasan ocultos
  • Get, todos los parámetros pasan en la url
NOTA: Más información en: http://www.w3schools.com/tags/ref_httpmethods.asp
Ahora el código se debe ver como sigue:

var express = require("express");
var app = express();

var serverPort = 3000;
var serverHost = 'localhost';
app.get('/', function(req, res) {
    res.send('Hola mundo');
});

var server = app.listen(serverPort, serverHost, function() {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Recibiendo peticiones en http://%s:%s', host, port);
});

Ejecuta nuevamente la aplicación:
npm start

La salida en consola sigue siendo la misma:



Abre el navegador de tú preferencia y ve a la URL que aparece en consola. La salida en el navegador debe ser similar a la siguiente:



Listo!!!! Ya tienes tú primer ejemplo en nodejs

Ahora modificaremos nuestro ejemplo y lo subiremos a Bluemix!!!!

 1. Abre tú cuenta de bluemix, sino la haz abierto aun hazlo desde aquí.
2. Módifica server.js de la siguiente forma:

var express = require("express");
var app = express();

var serverPort = process.env.VCAP_APP_PORT || 3000; //Estamos indicando que utilice la variable de ambiente de bluemix para el puerto
var serverHost = process.env.VCAP_APP_HOST || 'localhost';//Estamos indicando que utilice la variable de ambiente de bluemix para el host
app.get('/', function(req, res) {
    res.send('Hola mundo');
});

var server = app.listen(serverPort, serverHost, function() {
    var host = server.address().address;
    var port = server.address().port;
    console.log('Recibiendo peticiones en http://%s:%s', host, port);
});
Para ver más información sobre las variables de ambiente de Bluemix, las puedes encontrar aquí.

Ahora crea un archivo llamado manifest.yml en la carpeta que estas usando para tú ejemplo con el siguiente código:

---
applications:
- name : ejemplonodejspmb
  instances : 1
  memory : 256M

En la línea name estamos indicando como se llamará nuestra aplicación en bluemix. Debe ser único en todo bluemix, por lo cual no debes copiarlo literalmente.
En la linea instances estamos indicando cuantas instancia de nuestra aplicación tendremos (para resilencia)
En la línea memoría estamos indicando la memoria que tendrá cada instancia

Lo anterior es lo más esencial, pero sí necesitas explorar más, la documentación de cloud fundry es bastante extensa para este archivo.

Antes de publicar, conviene crear el archivo  .cfignore , sin el todos los archivos que componen la aplicación serán cargados a la nube, Bluemix tiene la capacidad de integrar los paquetes que necesita tú aplicación. Crea el archivo con el siguiente código para evitar que los paquetes de NodeJS sean cargados:

node_modules


Ahora vamos a desplegar a Bluemix nuestra aplicación, las regiones disponibles actualmente las puedes encontrar aquí. En mi caso desplegaré la aplicación en USA ejecutando el siguiente comando:

cf l -a api.ng.bluemix.net

NOTA: para ver otros comandos disponibles para CLI (Cloud Foundry Line Command, siempre se me olvida) están disponibles aquí.
Si tienes éxito en ingresar debes ver una pantalla como esta:





 Ahora estamos listos para desplegar la aplicación, ejecuta el siguiente comando desde el directorio donde se encuentra tú aplicación:

cf push

Si tienes éxito debes ver tú aplicación en ejecución en la consola de bluemix:

Haz click en VerApp:

Ahora puedes ver tú app con un subdominio en bluemix.

Listo!!!! Tienes el ejemplo de Hola mundo funcionando en la nube con una plataforma lista para trabajar!!!!!!