SlideShare a Scribd company logo
1 of 40
0
Uso básico Kubernetes| Moisés E. Araya
[1]
Instalación y uso básico
de Kubernetes
Moisés Elías Araya
2021
Uso básico Kubernetes| Moisés E. Araya
[2]
Tabla de contenido
Introducción. ....................................................................................................................... 3
¿Qué es Kubernetes?............................................................................................................... 4
Componentes Kubernetes.................................................................................................. 5
Objetos en Kubernetes. .................................................................................................... 6
Instalación Kubernetes. ....................................................................................................... 7
Instalar Minikube. .............................................................................................................. 8
Procedimiento................................................................................................................ 8
Primeros pasos con minikube.............................................................................................. 8
Instalar kubectl. ...............................................................................................................10
Procedimiento...............................................................................................................10
Primeros comandos con kubectl. ........................................................................................11
Desplegar primera aplicación en Kubernetes utilizando kubectl. .................................................12
Uso de archivos en formato YAML. .........................................................................................16
ReplicaSet....................................................................................................................16
Deployment..................................................................................................................18
Eliminar las configuraciones..............................................................................................20
Archivos de ejemplo. ......................................................................................................20
Instalar Dashboard.............................................................................................................21
Procedimiento...............................................................................................................21
Lista de comandos utilizados................................................................................................25
Alternativas a Kubernetes....................................................................................................26
Anexo A – Google Kubernetes Engine. .....................................................................................27
Parte 1- Crear Clúster utilizando la consola web de GCP. ..........................................................27
Parte 2 - Desplegar una aplicación NGINX en el clúster. ............................................................31
Parte 3 – Exponer la aplicación. .........................................................................................33
Parte 4 - Borrar el Clúster. ...............................................................................................34
Anexo B - Kubernetes Windows 10..........................................................................................35
Comandos Kubernetes. ....................................................................................................36
Anexo C - Instalar VirtualBox en CentOs V8...............................................................................37
Procedimiento...............................................................................................................37
Conclusión. .....................................................................................................................39
Referencias. ....................................................................................................................39
Uso básico Kubernetes| Moisés E. Araya
[3]
Introducción.
El propósito de este documento es ofrecer una descripción general de la tecnología de Kubernetes, abordando
conceptos básicos incluyendo prácticas de laboratorio esenciales para el entendimiento de un entorno de
Kubernetes.
Este documento se divide en 4 partes principales;
• En la primera parte de describe que es Kubernetes, sus componentes principales y sus objetos más
usados.
• En la segunda parte se realiza la instalación de las herramientas minikube y kubectl para luego
realizar prácticas de creación de despliegues y exponer un servicio utilizando la línea de comandos y
archivos yaml.
• En la tercera parte se describe la instalación del Dashboard de Kubernetes como también el listado de
comandos usados y las alternativas que tenemos para Kubernetes.
• Finalmente, en la última parte se ofrecen una serie de anexos de apoyo a esta obra tales como; crear
un cluster de Kubernetes (GKE) utilizando la consola web de Google Cloud, habilitar Kubernetes en un
entorno Windows por medio de Docker Desktop y la instalación de Oracle VirtualBox en CentOS que
prerrequisito para el uso de la herramienta minikube.
Este documento requiere conocimientos básicos de contenedores, entornos cloud y Linux.
Uso básico Kubernetes| Moisés E. Araya
[4]
¿Qué es Kubernetes?
Kubernetes es una plataforma de código abierto que es
utilizada para la administración, escalado e implementación
de aplicaciones en contenedores, en palabras más simples, es
un orquestador de contenedores que está escrito en el
lenguaje Go, fue creado por Google en 2014 y actualmente es
mantenido por la CNCF (Cloud Native Computing Foundation).
Kubernetes viene del griego κυβερνήτης (pronunciado “koo-
burr-NET-eez”) y es el equivalente a piloto o timonel (pilot o
helmsman en inglés), K8S es su abreviación.
Algunas características y ventajas:
• Planificación automatizada.
• Capacidad de auto-reparación.
• Actualizaciones y rollbacks automáticos.
• Balanceo de carga y escalado horizontal.
• Simplifica el despliegue de aplicaciones.
• Auto escalado/expansión de los Pods.
• Replicación de instancias de la aplicación.
• Proporciona autenticación y autorización.
• Nombrado y descubrimiento de servicios.
• Posee un ecosistema en crecimiento.
Que no es Kubernetes.
• No es un PaaS.
• No limita el tipo de aplicación.
• No despliega código fuente ni crea aplicaciones.
• No es una solución de monitoreo ni de alertas ni de logging.
• No provee servicios de middleware, bases de datos ni otros servicios.
¿Dónde puede ser utilizado?
• Servidores físicos (Bare Metal)
• Máquinas virtuales On premise.
• Nubes públicas.
¿Porque Kubernetes?
El desarrollo de aplicaciones actuales está fuertemente marcado por el uso de microservicios, una aplicación
puede constar de varios microservicios, normalmente estos microservicios van insertos en contenedores y en
los entornos productivos cuentan con varios de ellos (cientos o miles), si este número crece en nuestro
sistema, se puede volver tediosa la administración de demasiados contenedores dado que se precisa coordinar
despliegues, rollbacks, escalado automático, administración de los servicios, etc, acá es donde entra
Kubernetes. Kubernetes posee las características de gestión de contenedores a gran escala.
Uso básico Kubernetes| Moisés E. Araya
[5]
Componentes Kubernetes.
Componentes de Kubernetes.
En Kubernetes existen dos tipos de nodos; el nodo máster y el nodo worker, el nodo máster es el encargado de
gestionar todo el clúster de K8S mientras que el nodo worker se encarga de ejecutar todos los trabajos que
son recepcionados por el clúster, puede ser una máquina virtual o una maquina física.
Máster contiene:
• API server: Permite interactuar con el clúster, toda la comunicación en el clúster utiliza esta API.
• Scheduler: Posiciona los pod en nodos con suficientes recursos para ser creados/ejecutados.
• Controller Manager: Contiene: controlador de nodos/replicas/enlaces/identidad de servicios y
token/administrador de controlador de proveedores de la nube.
• etcd: Base de datos de clave-valor, es donde se almacenan todos los datos/configuración/información
de kubernetes.
Nodo contiene:
• Kubelet: Agente principal, existe en todos los nodos y nos asegura que todos los componentes están
operativos.
• Kubernetes Proxy: Permite la conexión de red y enruta las conexiones al pod o servicios necesarios.
• Container Engine: Ejecuta los contenedores (docker/crio/containerd).
Puertos TCP utilizados por Kubernetes.
Todos: Solicitudes API, Nodos Worker y usuarios finales.
Componente Puerto Utilizado por
API 6443 *Todos
Kubelet 10250 Kubelet API
Scheduler 10251 kube-scheduler
Controller Manager 10252 kube-controller-manager
etcd 2379-2380 API/etcd
NodePort 30000-32767 Aplicaciones de consumo externas
Uso básico Kubernetes| Moisés E. Araya
[6]
Objetos en Kubernetes.
De acuerdo con la documentación oficial de Kubernetes, los objetos:
“Son entidades persistentes en el sistema de Kubernetes, Kubernetes usa estas entidades para
representar el estado de su clúster. Específicamente, ellos pueden describir que aplicaciones corren en
contenedores (y en que nodos), los recursos disponibles para dichas aplicaciones y las políticas acerca de
cómo dichas aplicaciones se comportan, como reiniciar políticas, actualizaciones y tolerancia a fallos”.
A continuación, se van a describir los objetos más importantes o utilizados en K8S.
• Pod (vaina): La unidad más pequeña y básica que se puede crear y administrar en K8S, contiene uno o
más contenedores, comparten la red y el almacenamiento, ejecutan una aplicación o un componente
de ella. Los pods son volátiles, es decir, cuando se destruyen pierden toda la información.
• Controladores: Agrupación de objetos que permiten desplegar, mantener y atender los recursos
deseados en un clúster, kubernetes dispone de los siguientes controladores:
o ReplicaSets: Asegura que un número determinado de pods siempre se están ejecutando en
todo momento.
o Replication Controller: Realiza la misma labor que ReplicaSet pero no admite selectores.
o Deployments: Permite actualizaciones declarativas para Pods y ReplicaSets, controlar el
número de replicas, automatizar despliegues y hacer rollbacks de aplicaciones.
o StatefulSets: Se diferencia del Deployment por gestionar aplicaciones persistentes y utilizar
identificadores únicos.
o Demon Sets: Asegura que todos los nodos ejecuten un pod especifico.
o Jobs: Crea uno o más pods y se asegura que completa su ejecución completamente.
o Cron Jobs: Es un Job que se ejecuta de forma programada.
• Servicios: Permite agrupar los pods y establecer un punto de acceso común para acceder/conectar a
las aplicaciones desplegadas en ellos, sirve de balanceador de carga para el acceso interno/externo,
los tipos de servicios básicos disponibles son:
o ClusterIP: Es el tipo de servicio predeterminado que expone una dirección IP dentro del
clúster.
o NodePort: Asigna un puerto estático en los pods para el reenvío del tráfico hacia el exterior.
o LoadBalancer: Crea un balanceador de cargas que reenvía todo el tráfico al servicio, es el
tipo de servicio que usualmente se utiliza para exponer un servicio en Internet.
Según la documentación oficial de Kubernetes un servicio es: “Es una forma abstracta de exponer una
aplicación que se ejecuta en un conjunto de pods como un servicio de red".
• Namespaces (Espacio de nombres): Permite la creación de clústeres lógicos y aislar los recursos para
separar/agrupar y trabajar en distintos proyectos, se pueden definir cuotas, reglas y políticas de
acceso. Normalmente existen 3 namespaces:
o default: sitio por defecto donde se ejecutan los recursos.
o kube-system: Donde se ejecutan todos los recursos esenciales del sistema y administrador por
Kubernetes.
o kube-public: Sirve para guardar datos públicos donde usuarios autenticados y no puedan
acceder.
Otros objetos disponibles en Kubernetes son: Ingress, NetworkPolicy, PersistenVolume,
PersistentVolumeClaim, StorageClass, ConfigMap y Secrets.
Uso básico Kubernetes| Moisés E. Araya
[7]
Instalación Kubernetes.
K8S puede ser instalado en distintas modalidades, en esta oportunidad se utilizará el modo AIO (minikube)
donde todos los componentes se ejecutan en un solo nodo, esto es útil para tareas de aprendizaje, desarrollo
y pruebas.
Arquitectura local.
Minikube es una versión resumida de Kubernetes escrita en lenguaje GO que permite crear un clúster local en
un solo nodo.
Minikube soporta las siguientes características de Kubernetes:
• DNS.
• NodePorts.
• ConfigMaps and Secrets.
• Dashboards.
• Container Runtime: Docker, CRI-O y containerd.
• Enabling CNI (Container Network Interface)
• Ingress.
• PersistentVolumes of type hostPath.
Entorno utilizado.
• Máquina Virtual Centos V8 5GB RAM/2CPU.
• Docker V19 instalado en MV.
• Virtual Box V6 instalado en MV.
Prerrequisitos.
• En Hypervisor de máquina virtual, activar virtualización y aumentar a 2 Cores.
Después de iniciar MV, verificar que esta activa la virtualización ejecutando el comando:
[root@centos8 ~]# sort -u <<<$(egrep -o -i --color "vmx|svm" /proc/cpuinfo)
vmx
Uso básico Kubernetes| Moisés E. Araya
[8]
Instalar Minikube.
Procedimiento.
• Descargar minikube.
• Modificar permisos.
• Crear directorio.
• Mover a directorio.
• Instalar.
• Verificar versión.
[root@centos8 ~]# wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
--2020-08-31 22:04:55-- https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
Resolviendo storage.googleapis.com (storage.googleapis.com)... 172.217.192.128, 2800:3f0:4003:c02::80
Conectando con storage.googleapis.com (storage.googleapis.com)[172.217.192.128]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 58633547 (56M) [application/octet-stream]
Grabando a: “minikube-linux-amd64”
minikube-linux-amd64
100%[============================================================================>] 55,92M 2,37MB/s en 21s
2020-08-31 22:05:16 (2,71 MB/s) - “minikube-linux-amd64” guardado [58633547/58633547]
[root@centos8 ~]# chmod +x minikube-linux-amd64
[root@centos8 ~]# mkdir -p /usr/local/bin/
[root@centos8 ~]# mv minikube-linux-amd64 minikube
[root@centos8 ~]# install minikube /usr/local/bin/
[root@centos8 ~]# minikube versión
minikube version: v1.12.3
commit: 2243b4b97c131e3244c5f014faedca0d846599f5-dirty
Primeros pasos con minikube.
# Cambiar de usuario e iniciar servicio.
[dockerusr@centos8 ~]$ minikube start
* minikube v1.12.3 en Centos 8.1.1911
* Automatically selected the docker driver
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
* Downloading Kubernetes v1.18.3 preload ...
> preloaded-images-k8s-v5-v1.18.3-docker-overlay2-amd64.tar.lz4: 510.91 MiB
* Creating docker container (CPUs=2, Memory=2200MB) ...
* Preparando Kubernetes v1.18.3 en Docker 19.03.8...
* Verifying Kubernetes components...
* Enabled addons: default-storageclass, storage-provisioner
* Done! kubectl is now configured to use "minikube"
Al iniciar el servicio por primera vez, Minikube descarga una imagen para ejecutarla en el hypervisor
instalado.
Revisar estado de Minikube.
[dockerusr@centos8 ~]$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
Uso básico Kubernetes| Moisés E. Araya
[9]
Ver las opciones de comando para Minikube.
[dockerusr@centos8 ~]$ minikube
minikube provisions and manages local Kubernetes clusters optimized for development workflows.
Basic Commands:
start Starts a local Kubernetes cluster
status Gets the status of a local Kubernetes cluster
stop Stops a running local Kubernetes cluster
delete Deletes a local Kubernetes cluster
dashboard Access the Kubernetes dashboard running within the minikube cluster
pause pause Kubernetes
unpause unpause Kubernetes
Images Commands:
docker-env Configure environment to use minikube's Docker daemon
podman-env Configure environment to use minikube's Podman service
cache Add, delete, or push a local image into minikube
Configuration and Management Commands:
addons Enable or disable a minikube addon
config Modify persistent configuration values
[. . . Salida omitida . . .]
Mostrar las URLS de los servicios del clúster local.
[dockerusr@centos8 ~]$ minikube service list
|-------------|------------|--------------|-----|
| NAMESPACE | NAME | TARGET PORT | URL |
|-------------|------------|--------------|-----|
| default | kubernetes | No node port |
| kube-system | kube-dns | No node port |
|-------------|------------|--------------|-----|
Mostrar los valores seteados en archivo de configuración de Minikube.
[dockerusr@centos8 ~]$ minikube config view
- driver: virtualbox
- vm-driver: virtualbox
Iniciar sesión en el entorno de Minikube y listar contenedores en ejecución.
[dockerusr@centos8 ~]$ minikube ssh
docker@minikube:~$ hostname
minikube
docker@minikube:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
1e997e1f532b 9c3ca9f065bb "/storage-provisioner" 16 minutes ago Up 16 minutes
k8s_storage-provisioner_storage-provisioner_kube-system_7af6ddf0-8827-48bb-a42f-0fbfdf25c05a_0
f8266d95b580 k8s.gcr.io/pause:3.2 "/pause" 16 minutes ago Up 16 minutes
k8s_POD_storage-provisioner_kube-system_7af6ddf0-8827-48bb-a42f-0fbfdf25c05a_0
a2c09c1ec682 67da37a9a360 "/coredns -conf /etc…" 17 minutes ago Up 17 minutes
k8s_coredns_coredns-66bff467f8-7sbpt_kube-system_67e07ae0-4b7f-4399-a6a7-0622e80e9c08_0
5b7295405fcc k8s.gcr.io/pause:3.2 "/pause" 17 minutes ago Up 17 minutes
k8s_POD_coredns-66bff467f8-7sbpt_kube-system_67e07ae0-4b7f-4399-a6a7-0622e80e9c08_0
[. . . Salida omitida . . .]
docker@minikube:~$ exit
logout
Uso básico Kubernetes| Moisés E. Araya
[10]
Detener y eliminar Minikube.
[dockerusr@centos8 ~]$ minikube stop
* Stopping node "minikube" ...
* Apagando "minikube" mediante SSH...
* 1 nodes stopped.
[dockerusr@centos8 ~]$ minikube delete
* Eliminando "minikube" en docker...
* Deleting container "minikube" ...
* Eliminando /home/dockerusr/.minikube/machines/minikube...
* Removed all traces of the "minikube" cluster.
[dockerusr@centos8 ~]$ minikube status
* There is no local cluster named "minikube"
- To fix this, run: "minikube start"
Si se quiere eliminar por completo Minikube del sistema, eliminar los archivos presentes en los directorios;
.minikube/, /usr/local/bin/ y .kube/
[dockerusr@centos8 ~]$ ls .minikube/
addons ca.crt ca.pem certs files last_update_check machines proxy-client-ca.crt
cache ca.key cert.pem config key.pem logs profiles proxy-client-ca.key
[dockerusr@centos8 ~]$ ls /usr/local/bin/
docker-compose docker-machine docker-machine-driver-kvm2 kubectl minikube
[dockerusr@centos8 ~]$ ls .kube/
cache config
Instalar kubectl.
Kubectl es una herramienta de línea de comandos para la administración de Kubernetes, con ella se pueden
realizar tareas de creación, actualización, inspección y eliminación de componentes.
Procedimiento.
• Descargar kubectl.
• Modificar permisos.
• Crear directorio.
• Mover a directorio.
• Instalar.
• Verificar versión.
[root@centos8 ~]# curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s
https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 41.0M 100 41.0M 0 0 3012k 0 0:00:13 0:00:13 --:--:-- 3492k
[root@centos8 ~]# chmod +x kubectl
[root@centos8 ~]# mv kubectl /usr/local/bin/
[root @centos8 ~]$ kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0",
GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z",
GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3",
GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:43:34Z",
GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Uso básico Kubernetes| Moisés E. Araya
[11]
Se muestran la versión cliente y servidor.
[root@centos8 ~]# kubectl version --client -o json
{
"clientVersion": {
"major": "1",
"minor": "19",
"gitVersion": "v1.19.0",
"gitCommit": "e19964183377d0ec2052d1f1fa930c4d7575bd50",
"gitTreeState": "clean",
"buildDate": "2020-08-26T14:30:33Z",
"goVersion": "go1.15",
"compiler": "gc",
"platform": "linux/amd64"
}
}
Alternativa para ver la versión de kubectl en formato json.
Primeros comandos con kubectl.
Ver la información del clúster y su estado.
[dockerusr@centos8 ~]$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Mostrar la configuración actual de kubectl.
[dockerusr@centos8 ~]$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/dockerusr/.minikube/ca.crt
server: https://192.168.99.100:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/dockerusr/.minikube/profiles/minikube/client.crt
client-key: /home/dockerusr/.minikube/profiles/minikube/client.key
Mostrar los nodos disponibles.
[dockerusr@centos8 ~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 16m v1.18.3
[dockerusr@centos8 ~]$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION
CONTAINER-RUNTIME
minikube Ready master 33d v1.18.3 192.168.99.100 <none> Buildroot 2019.02.11 4.19.114
docker://19.3.12
El resultado arroja uno solo, también se muestra una alternativa del comando extendido, el nodo está listo
para desplegar aplicaciones.
Uso básico Kubernetes| Moisés E. Araya
[12]
Desplegar primera aplicación en Kubernetes utilizando kubectl.
Desplegar aplicación NGINX utilizando el comando kubectl create deployment, se necesita el nombre del
despliegue y la ubicación de la imagen, en este caso se utiliza el repositorio de Docker Hub.
[dockerusr@centos8 ~]$ kubectl create deployment nginx-lab --image=nginx:alpine
deployment.apps/nginx-lab created
Listar los despliegues.
[dockerusr@centos8 ~]$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-lab 1/1 1 1 13s
Como resultado tenemos solo 1 despliegue ejecutándose en una instancia (única).
Listar los pods existentes y su versión ampliada del comando.
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-5dc48c9776-v2mjk 1/1 Running 0 4m39s
[dockerusr@centos8 ~]$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
READINESS GATES
nginx-lab-5dc48c9776-v2mjk 1/1 Running 0 5m7s 172.17.0.5 minikube <none> <none>
Como resultado tenemos solo 1 pod ejecutándose.
Uso básico Kubernetes| Moisés E. Araya
[13]
Mostrar detalles del pod.
[dockerusr@centos8 ~]$ kubectl describe pod nginx-lab
Name: nginx-lab-5dc48c9776-v2mjk
Namespace: default
Priority: 0
Node: minikube/192.168.99.100
Start Time: Tue, 06 Oct 2020 16:15:35 -0300
Labels: app=nginx-lab
pod-template-hash=5dc48c9776
Annotations: <none>
Status: Running
IP: 172.17.0.5
IPs:
IP: 172.17.0.5
Controlled By: ReplicaSet/nginx-lab-5dc48c9776
Containers:
nginx:
Container ID: docker://61c0355ae0254beb3cbfd6ff034a6740743a9970e1d4dea656c5b63107fb356f
Image: nginx:alpine
Image ID: docker-
pullable://nginx@sha256:5fcbe9a6b09b6525651d1e5d5a2df373eec1a13c75f0eaa724a369f43ce589f4
Port: <none>
Host Port: <none>
State: Running
Started: Tue, 06 Oct 2020 16:15:36 -0300
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-hcjlc (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-hcjlc:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-hcjlc
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 5m38s default-scheduler Successfully assigned default/nginx-lab-5dc48c9776-v2mjk to
minikube
Normal Pulled 5m37s kubelet, minikube Container image "nginx:alpine" already present on machine
Normal Created 5m37s kubelet, minikube Created container nginx
Normal Started 5m37s kubelet, minikube Started container nginx
La salida del comando describe muestra detalles como; direcciones IP, puertos utilizados y una lista de
eventos relacionados con el ciclo de vida del pod.
Ver logs del contenedor.
[dockerusr@centos8 ~]$ kubectl logs nginx-lab-5dc48c9776-v2mjk
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
172.17.0.1 - - [06/Oct/2020:19:25:42 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.1" "127.0.0.1, 192.168.99.1"
Uso básico Kubernetes| Moisés E. Araya
[14]
Ejecutar un comando en el contenedor.
[dockerusr@centos8 ~]$ kubectl exec nginx-lab-5dc48c9776-v2mjk env
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] --
[COMMAND] instead.
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=nginx-lab-5dc48c9776-v2mjk
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
NGINX_VERSION=1.19.3
NJS_VERSION=0.4.4
PKG_RELEASE=1
HOME=/root
Se muestran las variables de entorno existentes en el pod.
Utilizar un servicio para exponer la aplicación creada en el puerto 80.
[dockerusr@centos8 ~]$ kubectl expose deployment nginx-lab --type=NodePort --port=80
service/nginx-lab exposed
Listar los servicios.
[dockerusr@centos8 ~]$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 163m
nginx-lab NodePort 10.110.0.219 <none> 80:30974/TCP 5s
[dockerusr@centos8 ~]$ kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 166m <none>
nginx-lab NodePort 10.110.0.219 <none> 80:30974/TCP 3m26s app=nginx-lab
Se muestra el servicio nginx-lab recién creado, también se muestra una variante extendida del comando.
Uso básico Kubernetes| Moisés E. Araya
[15]
Mostrar información detallada del servicio.
[dockerusr@centos8 ~]$ kubectl describe service nginx-lab
Name: nginx-lab
Namespace: default
Labels: app=nginx-lab
Annotations: <none>
Selector: app=nginx-lab
Type: NodePort
IP: 10.110.0.219
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 30974/TCP
Endpoints: 172.17.0.5:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
Obtener dirección IP interna de Minikube para realizar prueba de servicio.
[dockerusr@centos8 ~]$ minikube service nginx-lab --url
http://192.168.99.100:30974
Prueba de conexión al servicio web de NGINX.
[dockerusr@centos8 ~]$ curl http://192.168.99.100:30974
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Método alternativo para realizar la misma prueba:
curl $(minikube ip):30974
Uso básico Kubernetes| Moisés E. Araya
[16]
Uso de archivos en formato YAML.
Los objetos de Kubernetes se pueden crear de dos formas: directamente desde la línea de comandos (como se
ha visto anteriormente) o por medio de archivos de manifiesto de tipo Yaml. A este tipo de configuración se le
conoce con el nombre de declarativa y el de comandos como imperativo.
ReplicaSet.
Ahora ¿qué sucede si un pod falla?, en un clúster se necesita ejecutar varias instancias de un solo pod, esto se
logra con un controlador llamado replica set, este controlador permite escalar y mantener el estado del
clúster deseado, por ejemplo, si un pod falla automáticamente lanza otro, por lo tanto, este RS (replica set)
entrega capacidad de alta disponibilidad al clúster.
Archivo replicaset de ejemplo.
Crear y guardar el siguiente archivo como replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-lab-rs
labels:
tier: frontend
spec:
selector:
matchLabels:
app: nginx-lab
tier: frontend
replicas: 3
template:
metadata:
name: nginx-lab
labels:
app: nginx-lab
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
El selector indica que pod el RS debe estar monitoreando/administrando y el template le indica al RS que tipo
de pod debe ser lanzando cuando hay una falla.
Crear un replicaset por medio de un archivo yaml
[dockerusr@centos8 ~]$ kubectl apply -f replicaset.yml
replicaset.apps/nginx-lab created
# Para aplicar se puede utilizar el comando apply o el comando create, el primero crea y/o aplica las diferencias (si las
hubiera) y el segundo borra y crea.
Listar replicasets existentes.
[dockerusr@centos8 ~]$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
nginx-lab 3 3 2 10s
nginx-lab-5dc48c9776 1 1 1 168m
[dockerusr@centos8 ~]$ kubectl get replicaset -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
nginx-lab 3 3 3 9m37s nginx nginx app=nginx-
lab,tier=frontend
nginx-lab-5dc48c9776 1 1 1 177m nginx nginx:alpine app=nginx-lab,pod-
template-
hash=5dc48c9776
Uso básico Kubernetes| Moisés E. Araya
[17]
Listar pods
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-5dc48c9776-v2mjk 1/1 Running 0 168m
nginx-lab-7j5v8 1/1 Running 0 33s
nginx-lab-qllrt 1/1 Running 0 33s
nginx-lab-r57vd 1/1 Running 0 33s
Borrar un pod para validar funcionamiento del RS.
[dockerusr@centos8 ~]$ kubectl delete pod nginx-lab-7j5v8
pod "nginx-lab-7j5v8" deleted
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 10m
nginx-lab-ftfjw 0/1 ContainerCreating 0 5s
nginx-lab-qllrt 1/1 Running 0 11m
nginx-lab-r57vd 1/1 Running 0 11m
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 10m
nginx-lab-ftfjw 1/1 Running 0 9s
nginx-lab-qllrt 1/1 Running 0 11m
nginx-lab-r57vd 1/1 Running 0 11m
Al borrar un pod, automáticamente se crea otro para reemplazar y mantener la cantidad deseada
Escalar un pod.
[dockerusr@centos8 ~]$ kubectl scale replicaset nginx-lab --replicas=4
replicaset.apps/nginx-lab scaled
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 13m
nginx-lab-ftfjw 1/1 Running 0 3m20s
nginx-lab-kdt6t 0/1 ContainerCreating 0 3s
nginx-lab-qllrt 1/1 Running 0 14m
nginx-lab-r57vd 1/1 Running 0 14m
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 13m
nginx-lab-ftfjw 1/1 Running 0 3m30s
nginx-lab-kdt6t 1/1 Running 0 13s
nginx-lab-qllrt 1/1 Running 0 14m
nginx-lab-r57vd 1/1 Running 0 14m
Algo similar sucede cuando se escala un pod, se crea el numero indicado en la cantidad de replicas, en este
caso habían 3 por lo que se crea solo uno.
Hacer un scale-down de los pods.
[dockerusr@centos8 ~]$ kubectl scale replicaset nginx-lab --replicas=2
replicaset.apps/nginx-lab scaled
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 16m
nginx-lab-ftfjw 0/1 Terminating 0 6m19s
nginx-lab-qllrt 1/1 Running 0 17m
nginx-lab-r57vd 1/1 Running 0 17m
Uso básico Kubernetes| Moisés E. Araya
[18]
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 16m
nginx-lab-qllrt 1/1 Running 0 17m
nginx-lab-r57vd 1/1 Running 0 17m
En este caso se disminuye la cantidad de pods de 4 a 2.
Deployment.
¿Qué sucede ahora si tenemos esa misma aplicación, pero aparte de instalar la necesitamos actualizar (Rolling
update) y si falla que ejecute una restauración? (rollback), esto se puede lograr con el uso del objeto llamado
Deployment.
Para esto se usa otro archivo yml que contiene la definición completa del servicio, el tipo (kind) cambia a
Deployment y si bien es parecido al contenido del objeto ReplicaSet, este agrega las características de
Rolling update y Rollback.
Archivo deployment de ejemplo.
Crear y guardar el siguiente archivo como deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-lab-deployment
labels:
tier: frontend
spec:
selector:
matchLabels:
app: nginx-lab
tier: frontend
replicas: 3
template:
metadata:
name: nginx-lab
labels:
app: nginx-lab
tier: frontend
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
Descripción rápida del archivo:
• apiVersion: Es la versión API del recurso que estamos utilizando, no todos los recursos usan las
mismas APIs.
• kind: Tipo de recurso, en este caso un Deployment.
• metadata: Nombre al recurso, etiquetas (útiles para clasificar el servicio o aplicación), también se
pueden agregar otras para agrupar o clasificar.
• spec: Contiene la especificación del despliegue a realizar.
o Selector: Agrupa recursos inferiores dentro del despliegue
o Replicas: Cantidad de contenedores a lanzar.
o Plantilla: Contiene medatatos, nombre, etiquetas y nombre de aplicación.
o Especificación del contenedor
▪ Nombre, imagen y puerto TCP.
Uso básico Kubernetes| Moisés E. Araya
[19]
Crear un deployment por medio de un archivo yaml
[dockerusr@centos8 ~]$ kubectl apply -f deployment.yml
deployment.apps/nginx-lab-deployment created
Al ejecutar el archivo, se crea un despliegue, los pods y un replicaset.
Listar despliegues, pods y replicaset.
[dockerusr@centos8 ~]$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-lab-deployment 1/3 3 1 8s
[dockerusr@centos8 ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-lab-deployment-549c9f75fb-494wl 1/1 Running 0 46s
nginx-lab-deployment-549c9f75fb-vnf5x 1/1 Running 0 46s
nginx-lab-deployment-549c9f75fb-xzml6 1/1 Running 0 46s
[dockerusr@centos8 ~]$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
nginx-lab-deployment-549c9f75fb 3 3 3 49s
Actualizar contenedor del deployment (despliegue).
Para actualizar el deployment, utilizar el comando kubectl set image, le indicamos al despliegue que
actualice la versión de nginx a la 1.9.1 por medio del siguiente comando:
kubectl set image deployment/nginx-lab-deployment nginx=nginx:1.9.1
[dockerusr@centos8 ~]$ kubectl set image deployment/nginx-lab-deployment nginx=nginx:1.9.1
deployment.apps/nginx-lab-deployment image updated
Listar las versiones disponibles.
Usar la opción rollout para ver las versiones disponibles, se muestran dos, una es el resultado del primer
despliegue y el segundo es debido a la actualización de nginx.
[dockerusr@centos8 ~]$ kubectl rollout history deployment/nginx-lab-deployment
deployment.apps/nginx-lab-deployment
REVISION CHANGE-CAUSE
1 <none>
2 <none>
Mostrar la versión de nginx aplicada.
Utilizar la opción describe para obtener la versión y otra información importante como el número de revisión.
[dockerusr@centos8 ~]$ kubectl describe deployment nginx-lab-deployment
Name: nginx-lab-deployment
Namespace: default
CreationTimestamp: Tue, 06 Oct 2020 19:48:30 -0300
Labels: tier=frontend
Annotations: deployment.kubernetes.io/revision: 2
Selector: app=nginx-lab,tier=frontend
Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx-lab
tier=frontend
Containers:
nginx:
Image: nginx:1.9.1
Port: 80/TCP
Host Port: 0/TCP
[. . . Salida omitida . . .]
Uso básico Kubernetes| Moisés E. Araya
[20]
[dockerusr@centos8 ~]$ kubectl describe deployment nginx-lab-deployment |grep "Image*"
Image: nginx:1.9.1
#Tambien podemos iniciar una sesión interactiva en uno de los pods del deployment y ejecutar el comando
nginx -v
Forzar error de un despliegue.
[dockerusr@centos8 ~]$ kubectl set image deployment/nginx-lab-deployment nginx=echoserver:1.10
deployment.apps/nginx-lab-deployment image updated
[dockerusr@centos8 ~]$ kubectl rollout status deployment/nginx-lab-deployment
Waiting for deployment "nginx-lab-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-deployment-579458cf85-gjg2b 1/1 Running 0 36m
nginx-lab-deployment-579458cf85-jk7bn 1/1 Running 0 36m
nginx-lab-deployment-579458cf85-qcxjs 1/1 Running 0 36m
nginx-lab-deployment-7f87694c4-cdmfz 0/1 ImagePullBackOff 0 56s
En comando inicial se indica un contenedor distinto para que entregue un error, se revisa el estado de este y
no termina por lo que se induce que tenemos un problema, se revisa el estado del despliegue y se confirma
que tenemos un pod con error.
Ejecutar un rollback (vuelta atrás).
[dockerusr@centos8 ~]$ kubectl rollout undo deployment/nginx-lab-deployment
deployment.apps/nginx-lab-deployment rolled back
[dockerusr@centos8 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-lab-deployment-579458cf85-gjg2b 1/1 Running 0 37m
nginx-lab-deployment-579458cf85-jk7bn 1/1 Running 0 37m
nginx-lab-deployment-579458cf85-qcxjs 1/1 Running 0 37m
Para volver la aplicación a la última versión estable, se ejecuta el comando rollout undo, esto hace que los
pods con error sean eliminados y recreados.
Eliminar las configuraciones.
Para finalizar, se deben eliminar todos los objetos y recursos creados para dejar el ambiente limpio.
Eliminar pods, deployments, replicasets y verificar que no quede nada.
[dockerusr@centos8 ~]$ kubectl delete --all pods --namespace=default
pod "nginx-lab-5dc48c9776-jl4ws" deleted
[dockerusr@centos8 ~]$ kubectl delete --all deployments --namespace=default
deployment.apps "nginx-lab" deleted
[dockerusr@centos8 ~]$ kubectl delete --all replicasets --namespace=default
replicaset.apps "nginx-lab-5dc48c9776" deleted
[dockerusr@centos8 ~]$ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h43m
Archivos de ejemplo.
Los archivos ReplicaSet.yaml y Deployment.yaml están disponibles en el siguiente repositorio de GitHub:
https://github.com/EliasGH/kubernetesexamples
Uso básico Kubernetes| Moisés E. Araya
[21]
Instalar Dashboard.
Kubernetes dispone de una interfaz web que, si bien no posee todas las características, nos sirve para
monitorear algún clúster de prueba o similar.
Procedimiento.
Aplicar la definición yaml que contiene la configuración recomendada del dashboard.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml
[dockerusr@centos8 ~]$ kubectl apply -f
https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
El dashboard se crea correctamente.
Agregar cuenta de servicio para acceder.
Crear archivo del tipo yaml con dos contenidos; ServiceAccount y ClusterRoleBinding.
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
Uso básico Kubernetes| Moisés E. Araya
[22]
Aplicar archivo.
[dockerusr@centos8 ~]$ kubectl apply -f userdashboard.yaml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
Se crea y se agregan permisos a esa cuenta de servicio.
Obtener token.
Para hacer el login se necesita un token de autenticación, copiar y pegar el siguiente comando para obtener
el token:
[dockerusr@centos8 ~]$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get
secret | grep admin-user | awk '{print $1}' )
Name: admin-user-token-6zc29
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: kubernetes.io/service-account.name: admin-user
kubernetes.io/service-account.uid: c44c2bf2-4500-4c1a-afe5-2164162b4510
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1066 bytes
namespace: 20 bytes
token:
eyJhbGciOiJSUzI1NiIsImtpZCI6ImNuNlRMYnQzRk16aEdSUzRsLTNmM3FMMjBheXpPNWtRRERxdWllSTM5WGsifQ.eyJpc3MiOiJrdWJlcm5ldG
VzL3NlcnZpY2VhY2NvdW50Iiwia
3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZW
FjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c
2VyLXRva2VuLTZ6YzI5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdW
Jlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Nlc
nZpY2UtYWNjb3VudC51aWQiOiJjNDRjMmJmMi00NTAwLTRjMWEtYWZlNS0yMTY0MTYyYjQ1MTAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bn
Q6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4td XNlciJ9.RU5T1ak9EIzjYYl5NXxj-
zVZkby7CsiD074gvRVr_RXrczKmylts8XJOiHLKG1PWiu1EYgw23HrtBTbDOx0s0frZ7KME3jiHhCLbVbkgUDLBcTsskSwLxeZZ7VwImEkjAr-
rucJLJQ9Djp02 uh2UtMuPf6F6tV3XD4jR_kr17pvLp7weOKSXdZv7JLqOgCd_pdT7CHWs7iz941IU0ApEfEynert4FIDj7xOdp9WJ-
O9eaOXNAGFewYE0Db8bNrc3rdw0XEEQhbA8TiYO5NKk01BnWpBUoYyTX7Sa5CCa Lyi_kM47NSiAlULvB5qliF4l4YGvAC5XuQAIqUb95w9pFg
Conectarse al clúster.
Abre una conexión privada.
dockerusr@centos8 ~]$ kubectl proxy
Starting to serve on 127.0.0.1:8001
Acceder a URL, pegar el token y acceder.
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
Se pueden todos los componentes de todos los namespaces existentes; deployments, nodos, pods, replicaset,
etc.
Uso básico Kubernetes| Moisés E. Araya
[23]
Vista general.
Vista Pods.
Vista Replica Sets.
Uso básico Kubernetes| Moisés E. Araya
[24]
Crear objetos directamente desde la consola.
Existen 3 formas de creación; ingresar archivo yaml/json con las definiciones de Kubernetes, seleccionar
archivo remoto y crear directamente desde un formulario.
Pod creado.
Uso básico Kubernetes| Moisés E. Araya
[25]
Lista de comandos utilizados.
minikube version Verificar instalación
minikube start Iniciar el clúster
minikube status Verificar estado
minikube service list Muestra las URLS de servicio del clúster
minikube config view Mostrar valores seteados en configuración
minikube ssh Iniciar sesión en entorno minikube
minikube stop Detener servicios
minikube delete Eliminar servicio
kubectl version Verificar instalación
kubectl version --client -0 json Mostrar versión cliente en formato JSON
kubectl config view Muestra la configuración actual
kubectl cluster-info Ver detalles del clúster
kubectl get nodes Ver los nodos del clúster
kubectl get nodes -o wide Ver nodos en modo extendido
kubectl get all Mostrar todas las configuraciones existentes
kubectl create deployment NAME IMAGE_PATH Crear despliegue
kubectl get deployments Listar los despliegues
kubectl get pods Listar los pods
kubectl get pods -o wide Listar pods en modo extendido
kubectl describe pod POD_NAME Obtener información detallada de un pod
kubectl proxy Iniciar servidor proxy
kubectl logs POD_NAME Obtener los registros de logs de un pod
kubectl exec POD_NAME comando Ejecutar un comando en un pod
kubectl expose deployment NAME_DEPLOYMENT --
type=NodePort --port=PORT_NUMBER Exponer un despliegue
kubectl get services Listar los servicios
kubectl get services -o wide Listar los servicios en modo extendido
kubectl describe service SERVICE_NAME Obtener detalle de un servicio
kubectl apply -f YAML_FILE Aplicar una configuración utilizando un archivo yaml
kubectl get replicaset Listar los replicaset
kubectl get replicaset -o wide Listar los replicaset en modo extendido
kubectl delete pod POD_NAME Eliminar un pod
kubectl scale replicaset REPLICASET_NAME --
replicas=NUMBER Escalar un pod
kubectl set image deployment/DEPLOYMENT_NAME
IMAGEN=VERSIONDESEADA Actualizar la imagen de un contenedor de un despliegue
kubectl rollout history deployment/DEPLOYMENT_NAME Mostrar el historial de versiones de un despliegue
kubectl rollout status deployment/DEPLOYMENT_NAME Mostrar el estado de un despliegue
kubectl rollout undo deployment/DEPLOYMENT_NAME Realizar un rollback de un despliegue
kubectl delete --all pods --namespace=default
Eliminar todos los pods creados en el espacio de nombres por
defecto
kubectl delete --all deployments --namespace=default
Eliminar todos los despliegues creados en el espacio de nombres
por defecto
kubectl delete --all replicasets --namespace=default
Eliminar todos los replicasets creados en el espacio de nombres
por defecto
kubectl get all Listar los objetos creados en kubernetes
Uso básico Kubernetes| Moisés E. Araya
[26]
Alternativas a Kubernetes.
Docker Swarm.
• Herramienta de Docker para la administración de contenedores.
• https://docs.docker.com/engine/swarm/
Apache Mesos.
• Es un administrador de clústeres de código abierto que puede trabajar con
kubernetes.
• http://mesos.apache.org/
OpenShift.
• Plataforma PaaS de Red Hat, es de código cerrado
• https://www.openshift.com/
Algunas de las implementaciones de Kubernetes en la nube.
Azure Kubernetes Services (AKS)
• https://azure.microsoft.com/es-es/services/kubernetes-service/
Elastic Container Service for Kubernetes (EKS)
• https://aws.amazon.com/es/eks/
Google Kubernetes Engine (GKE)
• https://cloud.google.com/kubernetes-engine?hl=es
Otras son: OKE (Oracle Engine for Kubernetes) y DOKS (Digital Ocean for Kubernetes).
Uso básico Kubernetes| Moisés E. Araya
[27]
Anexo A – Google Kubernetes Engine.
Parte 1- Crear Clúster utilizando la consola web de GCP.
Google Kubernetes Engine (GKE) es el servicio de Google Cloud para el sistema Kubernetes, el acceso a su
consola está en: https://console.cloud.google.com
Prerrequisitos.
• Contar con una cuenta activa de Google Cloud Platform.
Procedimiento.
En la consola GCP, clic en menú Kubernetes Engine > Clusters
Clic crear clúster.
Ver e ingresar información básica del clúster.
• Nombre.
• Zona.
• Versión de Kubernetes.
• No modificar los otros valores (dejar todo por defecto).
Uso básico Kubernetes| Moisés E. Araya
[28]
En sección detalle de pool de Nodos, ingresar
información:
• Nombre pool.
• Versión de nodo.
• Tamaño del clúster (cantidad de nodos).
• No modificar los otros valores.
Opcionalmente podemos ver los valores que
aparecen en sección Nodos:
• Tipo de imagen: cos que es una imagen Linux
optimizada para contenedores de GCP.
• Configuración de maquina:
o Serie: E2
o Tipo de maquina: 2vCPU y 4GB RAM.
• Disco estándar: 100 GB.
Clic en crear clúster.
Comienza el aprovisionamiento del clúster y
esperamos unos minutos hasta que quede listo.
Uso básico Kubernetes| Moisés E. Araya
[29]
Clúster creado.
Para ver los detalles del clúster, clic en nombre.
En pestaña nodos, se muestran los 3 nodos creados.
Uso básico Kubernetes| Moisés E. Araya
[30]
Conectarse al clúster vía kubectl.
En pestaña principal, hacer clic en Connect, se despliega una ventana con el comando para ejecutar en la
consola Google Cloud Shell, el comando se debe copiar y luego pegar en la consola para acceder y poder
ejecutar comandos kubectl.
Luego de iniciar la consola de comandos, podemos listar los nodos:
student_01_c0ca219a11da@cloudshell:~)$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
gke-labcluster-lab-pool-676a36ee-9sfk Ready <none> 6m35s v1.16.13-gke.401
gke-labcluster-lab-pool-676a36ee-tb32 Ready <none> 6m35s v1.16.13-gke.401
gke-labcluster-lab-pool-676a36ee-znz8 Ready <none> 6m33s v1.16.13-gke.401
Diagrama referencial del clúster creado en GCP.
Uso básico Kubernetes| Moisés E. Araya
[31]
Parte 2 - Desplegar una aplicación NGINX en el clúster.
Para desplegar una aplicación, debemos hacer clic en la pestaña Workloads del menú Kubernetes Engine
y luego hacer clic en Deploy.
En pestaña siguiente mantener los valores presentados, clic siguiente.
Mantener los valores presentados y modificar nombre de aplicación (opcional), finalizar haciendo clic
en botón Deploy.
Uso básico Kubernetes| Moisés E. Araya
[32]
Creación en progreso.
Aplicación lista.
Detalles de aplicación.
Revisar estado de despliegue con kubectl.
student_01_c0ca219a11da@cloudshell:~ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-app 3/3 3 3 4m3s
Uso básico Kubernetes| Moisés E. Araya
[33]
Parte 3 – Exponer la aplicación.
En apartado Workloads, clic sobre botón EXPOSE.
Ver resultados en menú Services & Ingress.
Servicio nginx-1-service listo.
Revisar estado del servicio con kubectl.
student_01_c0ca219a11da@cloudshell:~ $ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-app-service LoadBalancer 10.36.6.164 34.123.219.50 80:32653/TCP 6m52s
Acceder a aplicación vía web.
Copiar y pegar en un navegador el endpoint mostrado en imagen o en salida comando kubectl.
Uso básico Kubernetes| Moisés E. Araya
[34]
Diagrama referencial de la configuración realizada.
Parte 4 - Borrar el Clúster.
Para finalizar, se deben borrar los recursos creados.
Clic en Clústers, seleccionar y presionar el botón DELETE.
Confirmar borrado del clúster.
Clúster eliminado.
Uso básico Kubernetes| Moisés E. Araya
[35]
Anexo B - Kubernetes Windows 10.
Una alternativa a Minikube para entornos de prueba es instalar habilitar Kubernetes dentro de Docker para
Windows.
Requisitos:
• Windows 10 Profesional o Enterprise.
• Docker Desktop 2.0 o superior.
• Hyper-V habilitado.
Kubernetes por defecto esta desactivado, la instalación se realiza desde la interfaz de Docker activando la
casilla “Enable Kubernetes”
Nos pide confirmar para instalar.
Esperar unos minutos para que acabe la instalación
Kubernetes activo.
Uso básico Kubernetes| Moisés E. Araya
[36]
Comandos Kubernetes.
Kubernetes cuenta con el utilitario kubectl que sirve para iniciar, controlar, inspeccionar, gestionar,
desplegar y escalar aplicaciones en el clúster.
Algunos comandos son:
• kubectl versión.
• kubectl cluster-info.
• kubectl get componentstatuses.
También se puede obtener el listado completo de comandos disponibles ejecutando kubectl –help o -h
Como guía o ayuda para la parte de Docker pueden seguir el siguiente manual:
• https://es2.slideshare.net/mike741/instalar-docker-windows
Uso básico Kubernetes| Moisés E. Araya
[37]
Anexo C - Instalar VirtualBox en CentOs V8.
Procedimiento.
• Actualizar sistema y reiniciar.
• Descargar e instalar repositorio de Oracle VirtualBox.
[root@centos8 ~]# yum update -y --skip-broken --nobest
Última comprobación de caducidad de metadatos hecha hace 0:11:18, el mar 01 sep 2020 19:38:45 -04.
Dependencias resueltas.
.
.
.
¡Listo!
[root@centos8 ~]# init 6
[root@centos8 ~]# wget https://www.virtualbox.org/download/oracle_vbox.asc
--2020-09-01 19:37:47-- https://www.virtualbox.org/download/oracle_vbox.asc
Resolviendo www.virtualbox.org (www.virtualbox.org)... 137.254.60.32
Conectando con www.virtualbox.org (www.virtualbox.org)[137.254.60.32]:443... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 1734 (1,7K) [text/plain]
Grabando a: “oracle_vbox.asc”
oracle_vbox.asc
100%[==========================================================================>] 1,69K 10,1KB/s en 0,2s
2020-09-01 19:37:49 (10,1 KB/s) - “oracle_vbox.asc” guardado [1734/1734]
[root@centos8 ~]# rpm --import oracle_vbox.asc
[root@centos8 ~]# wget http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -O
/etc/yum.repos.d/virtualbox.repo
--2020-09-01 19:38:10-- http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo
Resolviendo download.virtualbox.org (download.virtualbox.org)... 23.40.56.108
Conectando con download.virtualbox.org (download.virtualbox.org)[23.40.56.108]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 259 [text/plain]
Grabando a: “/etc/yum.repos.d/virtualbox.repo”
/etc/yum.repos.d/virtualbox.repo
100%[==========================================================================>] 259 --.-KB/s en 0,005s
2020-09-01 19:38:11 (46,7 KB/s) - “/etc/yum.repos.d/virtualbox.repo” guardado [259/259]
[root@centos8 ~]# cat <<EOF >> /etc/yum.repos.d/virtualbox.repo
> [virtualbox]
> name=Oracle Linux / RHEL / CentOS - 8 x86_64 - VirtualBox
> baseurl=http://download.virtualbox.org/virtualbox/rpm/rhel/8/x86_64/
> enabled=1
> gpgcheck=1
> repo_gpgcheck=1
> gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc
> EOF
Instalar VirtualBox desde el repositorio.
[root@centos8 ~]# yum install -y VirtualBox-6.0
Oracle Linux / RHEL / CentOS - 8 x86_64 - VirtualBox
91 B/s | 181 B 00:01
Oracle Linux / RHEL / CentOS - 8 x86_64 - VirtualBox
1.5 kB/s | 1.7 kB 00:01
Importando llave GPG 0x98AB5139:
ID usuario: "Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>"
Huella : 7B0F AB3A 13B9 0743 5925 D9C9 5442 2A4B 98AB 5139
Desde : https://www.virtualbox.org/download/oracle_vbox.asc
Oracle Linux / RHEL / CentOS - 8 x86_64 - VirtualBox
64 kB/s | 130 kB 00:02
Dependencias resueltas.
Uso básico Kubernetes| Moisés E. Araya
[38]
Validar versión.
[root@centos8 ~]# VBoxManage --version
6.0.24r139119
Habilitar e iniciar servicio.
[root@centos8 ~]# systemctl enable vboxdrv
[root@centos8 ~]# systemctl start vboxdrv
[root@centos8 ~]# systemctl status vboxdrv
● vboxdrv.service - VirtualBox Linux kernel module
Loaded: loaded (/usr/lib/virtualbox/vboxdrv.sh; enabled; vendor preset: disabled)
Active: active (exited) since Fri 2020-09-25 00:06:52 -03; 1 weeks 5 days ago
Process: 964 ExecStart=/usr/lib/virtualbox/vboxdrv.sh start (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 32027)
Memory: 0B
CGroup: /system.slice/vboxdrv.service
sep 25 00:06:49 centos8.lab systemd[1]: Starting VirtualBox Linux kernel module...
sep 25 00:06:49 centos8.lab vboxdrv.sh[964]: vboxdrv.sh: Starting VirtualBox services.
sep 25 00:06:52 centos8.lab systemd[1]: Started VirtualBox Linux kernel module.
Mostrar VMS en ejecución.
[dockerusr@centos8 ~]$ vboxmanage list vms
"minikube" {04dcc81f-5787-4994-b8d0-7a6bff1d225d}
Mostrar información de la máquina virtual en ejecución.
[dockerusr@centos8 ~]$ vboxmanage showvminfo "minikube"
Name: minikube
Groups: /
Guest OS: Linux 2.6 / 3.x / 4.x (64-bit)
UUID: 04dcc81f-5787-4994-b8d0-7a6bff1d225d
Config file: /home/dockerusr/.minikube/machines/minikube/minikube/minikube.vbox
Snapshot folder: /home/dockerusr/.minikube/machines/minikube/minikube/Snapshots
Log folder: /home/dockerusr/.minikube/machines/minikube/minikube/Logs
Hardware UUID: 04dcc81f-5787-4994-b8d0-7a6bff1d225d
Memory size 2200MB
Page Fusion: disabled
VRAM size: 8MB
CPU exec cap: 100%
HPET: enabled
CPUProfile: host
Chipset: piix3
Firmware: BIOS
Number of CPUs: 2
[. . . Salida omitida . . .]
Uso básico Kubernetes| Moisés E. Araya
[39]
Conclusión.
En este documento se han presentado los siguientes temas:
• Presentación de Kubernetes.
• Componentes principales.
• Objetos relevantes.
• Instalación de Minikube y Kubectl.
• Prácticas de laboratorio y casos de uso prácticos.
• Presentación y uso de objetos por medio de archivos yaml.
• Instalación de Dashboard de Kubernetes.
• Repaso de comandos utilizados.
• Instalación y uso de un clúster de Kubernetes en GCP.
• Instalación de Kubernetes en Windows 10.
• Instalación de VirtualBox en CentOS.
• Tecnologías alternativas a Kubernetes.
Referencias.
• Documentación oficial.
o https://kubernetes.io
o https://kubernetes.io/docs/tasks/tools/install-kubectl/
o https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
• Repositorio GitHub.
o https://github.com/kubernetes/kubernetes
• Documentación Minikube.
o https://minikube.sigs.k8s.io/docs/
• Dashboard Kubernetes.
o https://github.com/kubernetes/dashboard
o https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-
sample-user.md
• Google Kubernetes Engine.
o https://cloud.google.com/kubernetes-engine
o https://www.qwiklabs.com
• Comandos VirtualBox
o https://www.virtualbox.org/manual/ch08.html
• Repositorio de imágenes.
o https://pixabay.com/es/

More Related Content

What's hot

Kubernetes and container security
Kubernetes and container securityKubernetes and container security
Kubernetes and container security
Volodymyr Shynkar
 

What's hot (20)

Kubernetes
KubernetesKubernetes
Kubernetes
 
Kubernetes Security
Kubernetes SecurityKubernetes Security
Kubernetes Security
 
kubernetes, pourquoi et comment
kubernetes, pourquoi et commentkubernetes, pourquoi et comment
kubernetes, pourquoi et comment
 
Intro to docker
Intro to dockerIntro to docker
Intro to docker
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
A la découverte de kubernetes
A la découverte de kubernetesA la découverte de kubernetes
A la découverte de kubernetes
 
Modern CI/CD in the microservices world with Kubernetes
Modern CI/CD in the microservices world with KubernetesModern CI/CD in the microservices world with Kubernetes
Modern CI/CD in the microservices world with Kubernetes
 
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
Kubernetes Architecture | Understanding Kubernetes Components | Kubernetes Tu...
 
Kubernetes 101
Kubernetes 101Kubernetes 101
Kubernetes 101
 
What is Docker
What is DockerWhat is Docker
What is Docker
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Kubernetes and container security
Kubernetes and container securityKubernetes and container security
Kubernetes and container security
 
Kubernetes or OpenShift - choosing your container platform for Dev and Ops
Kubernetes or OpenShift - choosing your container platform for Dev and OpsKubernetes or OpenShift - choosing your container platform for Dev and Ops
Kubernetes or OpenShift - choosing your container platform for Dev and Ops
 
Rancher Labs - Your own PaaS in action
Rancher Labs - Your own PaaS in actionRancher Labs - Your own PaaS in action
Rancher Labs - Your own PaaS in action
 
Container orchestration overview
Container orchestration overviewContainer orchestration overview
Container orchestration overview
 
Tadx - Présentation Conteneurisation
Tadx -  Présentation ConteneurisationTadx -  Présentation Conteneurisation
Tadx - Présentation Conteneurisation
 
Advanced Container Security
Advanced Container Security Advanced Container Security
Advanced Container Security
 
Kubernetes - Security Journey
Kubernetes - Security JourneyKubernetes - Security Journey
Kubernetes - Security Journey
 
Introduction of Kubernetes - Trang Nguyen
Introduction of Kubernetes - Trang NguyenIntroduction of Kubernetes - Trang Nguyen
Introduction of Kubernetes - Trang Nguyen
 
Docker 101
Docker 101Docker 101
Docker 101
 

Similar to Instalacion y uso basico de Kubernetes.

Similar to Instalacion y uso basico de Kubernetes. (20)

meetup digital ocean kubernetes
meetup digital ocean kubernetesmeetup digital ocean kubernetes
meetup digital ocean kubernetes
 
Cloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesCloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a Kubernetes
 
Kubernetes 101 - Plain Concepts Dev Day
Kubernetes 101 - Plain Concepts Dev DayKubernetes 101 - Plain Concepts Dev Day
Kubernetes 101 - Plain Concepts Dev Day
 
Meetup de kubernetes, conceptos básicos.
Meetup  de kubernetes, conceptos básicos.Meetup  de kubernetes, conceptos básicos.
Meetup de kubernetes, conceptos básicos.
 
Kubernetes workshop
Kubernetes workshopKubernetes workshop
Kubernetes workshop
 
El camino de Java a Kubernetes
El camino de Java a KubernetesEl camino de Java a Kubernetes
El camino de Java a Kubernetes
 
Kubernetes Operator 101 - Edith Puclla
Kubernetes Operator 101 - Edith PucllaKubernetes Operator 101 - Edith Puclla
Kubernetes Operator 101 - Edith Puclla
 
Introducción Evento SUSE CaaSP 2017
Introducción Evento SUSE CaaSP 2017Introducción Evento SUSE CaaSP 2017
Introducción Evento SUSE CaaSP 2017
 
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019 Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
 
Cloud Native en Azure impartido en Microsoft Madrid y Barcelona
 Cloud Native en Azure impartido en Microsoft Madrid y Barcelona Cloud Native en Azure impartido en Microsoft Madrid y Barcelona
Cloud Native en Azure impartido en Microsoft Madrid y Barcelona
 
Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de KubernetesCloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
Cloud Native MX Meetup - Asegurando tu Cluster de Kubernetes
 
Game of pods - Kubernetes
Game of pods - KubernetesGame of pods - Kubernetes
Game of pods - Kubernetes
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18
 
Java Dev Day 2019 No kuberneteen por convivir
Java Dev Day 2019  No kuberneteen por convivirJava Dev Day 2019  No kuberneteen por convivir
Java Dev Day 2019 No kuberneteen por convivir
 
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
 
Kubernetes 101
Kubernetes   101Kubernetes   101
Kubernetes 101
 
Instalacion y cofiguracion de un cluster de alta disponibilidad con reparto d...
Instalacion y cofiguracion de un cluster de alta disponibilidad con reparto d...Instalacion y cofiguracion de un cluster de alta disponibilidad con reparto d...
Instalacion y cofiguracion de un cluster de alta disponibilidad con reparto d...
 
Kubernetes: Más Allá de la Orquestación de Contenedores
Kubernetes: Más Allá de la Orquestación de ContenedoresKubernetes: Más Allá de la Orquestación de Contenedores
Kubernetes: Más Allá de la Orquestación de Contenedores
 
Meetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architectureMeetup DigitalOcean Cloud Native architecture
Meetup DigitalOcean Cloud Native architecture
 
Ejemplo de articulo cloud computing
Ejemplo de articulo cloud computingEjemplo de articulo cloud computing
Ejemplo de articulo cloud computing
 

More from Moisés Elías Araya

More from Moisés Elías Araya (20)

Instalar Docker Desktop y Kubernetes en Windows 10
Instalar Docker Desktop y Kubernetes en Windows 10Instalar Docker Desktop y Kubernetes en Windows 10
Instalar Docker Desktop y Kubernetes en Windows 10
 
Instalacion Vz Linux
Instalacion Vz LinuxInstalacion Vz Linux
Instalacion Vz Linux
 
Conectar instancia gcp con putty
Conectar instancia gcp con puttyConectar instancia gcp con putty
Conectar instancia gcp con putty
 
Instalar SDK Google Cloud
Instalar SDK Google CloudInstalar SDK Google Cloud
Instalar SDK Google Cloud
 
Terraform Cosmos DB
Terraform Cosmos DBTerraform Cosmos DB
Terraform Cosmos DB
 
Conceptos BPM
Conceptos BPMConceptos BPM
Conceptos BPM
 
Instalacion basica ELK (elasticsearch) Windows
Instalacion basica ELK (elasticsearch) WindowsInstalacion basica ELK (elasticsearch) Windows
Instalacion basica ELK (elasticsearch) Windows
 
Cuadro mando Excel
Cuadro mando ExcelCuadro mando Excel
Cuadro mando Excel
 
Graficar SAR Linux (System Activity Report)
Graficar SAR Linux (System Activity Report)Graficar SAR Linux (System Activity Report)
Graficar SAR Linux (System Activity Report)
 
Instalacion Weblogic Server 12c Windows 10.
Instalacion Weblogic Server 12c Windows 10.Instalacion Weblogic Server 12c Windows 10.
Instalacion Weblogic Server 12c Windows 10.
 
Ver uptime Windows
Ver uptime WindowsVer uptime Windows
Ver uptime Windows
 
Modificar aspecto consola Windows
Modificar aspecto consola WindowsModificar aspecto consola Windows
Modificar aspecto consola Windows
 
Resaltar celdas en Microsoft Excel.
Resaltar celdas en Microsoft Excel.Resaltar celdas en Microsoft Excel.
Resaltar celdas en Microsoft Excel.
 
Instalar y Configurar Python para Windows
Instalar y Configurar Python para WindowsInstalar y Configurar Python para Windows
Instalar y Configurar Python para Windows
 
Instalacion y uso basico de Jenkins
Instalacion y uso basico de JenkinsInstalacion y uso basico de Jenkins
Instalacion y uso basico de Jenkins
 
Instalacion de Docker CE en Windows 10
Instalacion de Docker CE en Windows 10Instalacion de Docker CE en Windows 10
Instalacion de Docker CE en Windows 10
 
Instalacion Weblogic Server 11g Linux
Instalacion Weblogic Server 11g LinuxInstalacion Weblogic Server 11g Linux
Instalacion Weblogic Server 11g Linux
 
Instalacion y Uso de JMeter
Instalacion y Uso de JMeterInstalacion y Uso de JMeter
Instalacion y Uso de JMeter
 
Instalar DB Adventure Works SQL Server 2012
Instalar DB Adventure Works SQL Server 2012Instalar DB Adventure Works SQL Server 2012
Instalar DB Adventure Works SQL Server 2012
 
Habilitar repositorio EPEL RHEL
Habilitar repositorio EPEL RHELHabilitar repositorio EPEL RHEL
Habilitar repositorio EPEL RHEL
 

Recently uploaded

Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
EdwinGarca59
 

Recently uploaded (20)

PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
PRÁCTICA Nº 4: “Análisis de secuencias del ADN con el software BioEdit y uso ...
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacion
 
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptxTipos de Datos de Microsoft Access-JOEL GARCIA.pptx
Tipos de Datos de Microsoft Access-JOEL GARCIA.pptx
 
Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.Actividad 6/Las TIC en la Vida Cotidiana.
Actividad 6/Las TIC en la Vida Cotidiana.
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
 
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiCVelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
VelderrainPerez_Paola_M1C1G63-097.pptx. LAS TiC
 
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdfRedes Neuronales profundas convolucionales CNN ́s-1.pdf
Redes Neuronales profundas convolucionales CNN ́s-1.pdf
 
Introduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptxIntroduccion-a-la-electronica-industrial.pptx
Introduccion-a-la-electronica-industrial.pptx
 
De Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptxDe Olmos Santiago_Dolores _ M1S3AI6.pptx
De Olmos Santiago_Dolores _ M1S3AI6.pptx
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
el uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptxel uso de las TIC en la vida cotidiana.pptx
el uso de las TIC en la vida cotidiana.pptx
 
Desarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - EstradaDesarrollo del Dominio del Internet - Estrada
Desarrollo del Dominio del Internet - Estrada
 
herramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el temaherramientas web para estudiantes interesados en el tema
herramientas web para estudiantes interesados en el tema
 
BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).BUSCADORES DE INTERNET (Universidad de Sonora).
BUSCADORES DE INTERNET (Universidad de Sonora).
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la ComunicaciónNavegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
Navegadores de internet - Nuevas Tecnologías de la Información y la Comunicación
 
CARPETA PEDAGOGICA DE TOE.docbbbbbbbbbbbx
CARPETA PEDAGOGICA DE TOE.docbbbbbbbbbbbxCARPETA PEDAGOGICA DE TOE.docbbbbbbbbbbbx
CARPETA PEDAGOGICA DE TOE.docbbbbbbbbbbbx
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8
 
Tipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de DatosTipos de datos en Microsoft Access de Base de Datos
Tipos de datos en Microsoft Access de Base de Datos
 
Chat GPT para la educación Latinoamerica
Chat GPT para la educación LatinoamericaChat GPT para la educación Latinoamerica
Chat GPT para la educación Latinoamerica
 

Instalacion y uso basico de Kubernetes.

  • 1. 0
  • 2. Uso básico Kubernetes| Moisés E. Araya [1] Instalación y uso básico de Kubernetes Moisés Elías Araya 2021
  • 3. Uso básico Kubernetes| Moisés E. Araya [2] Tabla de contenido Introducción. ....................................................................................................................... 3 ¿Qué es Kubernetes?............................................................................................................... 4 Componentes Kubernetes.................................................................................................. 5 Objetos en Kubernetes. .................................................................................................... 6 Instalación Kubernetes. ....................................................................................................... 7 Instalar Minikube. .............................................................................................................. 8 Procedimiento................................................................................................................ 8 Primeros pasos con minikube.............................................................................................. 8 Instalar kubectl. ...............................................................................................................10 Procedimiento...............................................................................................................10 Primeros comandos con kubectl. ........................................................................................11 Desplegar primera aplicación en Kubernetes utilizando kubectl. .................................................12 Uso de archivos en formato YAML. .........................................................................................16 ReplicaSet....................................................................................................................16 Deployment..................................................................................................................18 Eliminar las configuraciones..............................................................................................20 Archivos de ejemplo. ......................................................................................................20 Instalar Dashboard.............................................................................................................21 Procedimiento...............................................................................................................21 Lista de comandos utilizados................................................................................................25 Alternativas a Kubernetes....................................................................................................26 Anexo A – Google Kubernetes Engine. .....................................................................................27 Parte 1- Crear Clúster utilizando la consola web de GCP. ..........................................................27 Parte 2 - Desplegar una aplicación NGINX en el clúster. ............................................................31 Parte 3 – Exponer la aplicación. .........................................................................................33 Parte 4 - Borrar el Clúster. ...............................................................................................34 Anexo B - Kubernetes Windows 10..........................................................................................35 Comandos Kubernetes. ....................................................................................................36 Anexo C - Instalar VirtualBox en CentOs V8...............................................................................37 Procedimiento...............................................................................................................37 Conclusión. .....................................................................................................................39 Referencias. ....................................................................................................................39
  • 4. Uso básico Kubernetes| Moisés E. Araya [3] Introducción. El propósito de este documento es ofrecer una descripción general de la tecnología de Kubernetes, abordando conceptos básicos incluyendo prácticas de laboratorio esenciales para el entendimiento de un entorno de Kubernetes. Este documento se divide en 4 partes principales; • En la primera parte de describe que es Kubernetes, sus componentes principales y sus objetos más usados. • En la segunda parte se realiza la instalación de las herramientas minikube y kubectl para luego realizar prácticas de creación de despliegues y exponer un servicio utilizando la línea de comandos y archivos yaml. • En la tercera parte se describe la instalación del Dashboard de Kubernetes como también el listado de comandos usados y las alternativas que tenemos para Kubernetes. • Finalmente, en la última parte se ofrecen una serie de anexos de apoyo a esta obra tales como; crear un cluster de Kubernetes (GKE) utilizando la consola web de Google Cloud, habilitar Kubernetes en un entorno Windows por medio de Docker Desktop y la instalación de Oracle VirtualBox en CentOS que prerrequisito para el uso de la herramienta minikube. Este documento requiere conocimientos básicos de contenedores, entornos cloud y Linux.
  • 5. Uso básico Kubernetes| Moisés E. Araya [4] ¿Qué es Kubernetes? Kubernetes es una plataforma de código abierto que es utilizada para la administración, escalado e implementación de aplicaciones en contenedores, en palabras más simples, es un orquestador de contenedores que está escrito en el lenguaje Go, fue creado por Google en 2014 y actualmente es mantenido por la CNCF (Cloud Native Computing Foundation). Kubernetes viene del griego κυβερνήτης (pronunciado “koo- burr-NET-eez”) y es el equivalente a piloto o timonel (pilot o helmsman en inglés), K8S es su abreviación. Algunas características y ventajas: • Planificación automatizada. • Capacidad de auto-reparación. • Actualizaciones y rollbacks automáticos. • Balanceo de carga y escalado horizontal. • Simplifica el despliegue de aplicaciones. • Auto escalado/expansión de los Pods. • Replicación de instancias de la aplicación. • Proporciona autenticación y autorización. • Nombrado y descubrimiento de servicios. • Posee un ecosistema en crecimiento. Que no es Kubernetes. • No es un PaaS. • No limita el tipo de aplicación. • No despliega código fuente ni crea aplicaciones. • No es una solución de monitoreo ni de alertas ni de logging. • No provee servicios de middleware, bases de datos ni otros servicios. ¿Dónde puede ser utilizado? • Servidores físicos (Bare Metal) • Máquinas virtuales On premise. • Nubes públicas. ¿Porque Kubernetes? El desarrollo de aplicaciones actuales está fuertemente marcado por el uso de microservicios, una aplicación puede constar de varios microservicios, normalmente estos microservicios van insertos en contenedores y en los entornos productivos cuentan con varios de ellos (cientos o miles), si este número crece en nuestro sistema, se puede volver tediosa la administración de demasiados contenedores dado que se precisa coordinar despliegues, rollbacks, escalado automático, administración de los servicios, etc, acá es donde entra Kubernetes. Kubernetes posee las características de gestión de contenedores a gran escala.
  • 6. Uso básico Kubernetes| Moisés E. Araya [5] Componentes Kubernetes. Componentes de Kubernetes. En Kubernetes existen dos tipos de nodos; el nodo máster y el nodo worker, el nodo máster es el encargado de gestionar todo el clúster de K8S mientras que el nodo worker se encarga de ejecutar todos los trabajos que son recepcionados por el clúster, puede ser una máquina virtual o una maquina física. Máster contiene: • API server: Permite interactuar con el clúster, toda la comunicación en el clúster utiliza esta API. • Scheduler: Posiciona los pod en nodos con suficientes recursos para ser creados/ejecutados. • Controller Manager: Contiene: controlador de nodos/replicas/enlaces/identidad de servicios y token/administrador de controlador de proveedores de la nube. • etcd: Base de datos de clave-valor, es donde se almacenan todos los datos/configuración/información de kubernetes. Nodo contiene: • Kubelet: Agente principal, existe en todos los nodos y nos asegura que todos los componentes están operativos. • Kubernetes Proxy: Permite la conexión de red y enruta las conexiones al pod o servicios necesarios. • Container Engine: Ejecuta los contenedores (docker/crio/containerd). Puertos TCP utilizados por Kubernetes. Todos: Solicitudes API, Nodos Worker y usuarios finales. Componente Puerto Utilizado por API 6443 *Todos Kubelet 10250 Kubelet API Scheduler 10251 kube-scheduler Controller Manager 10252 kube-controller-manager etcd 2379-2380 API/etcd NodePort 30000-32767 Aplicaciones de consumo externas
  • 7. Uso básico Kubernetes| Moisés E. Araya [6] Objetos en Kubernetes. De acuerdo con la documentación oficial de Kubernetes, los objetos: “Son entidades persistentes en el sistema de Kubernetes, Kubernetes usa estas entidades para representar el estado de su clúster. Específicamente, ellos pueden describir que aplicaciones corren en contenedores (y en que nodos), los recursos disponibles para dichas aplicaciones y las políticas acerca de cómo dichas aplicaciones se comportan, como reiniciar políticas, actualizaciones y tolerancia a fallos”. A continuación, se van a describir los objetos más importantes o utilizados en K8S. • Pod (vaina): La unidad más pequeña y básica que se puede crear y administrar en K8S, contiene uno o más contenedores, comparten la red y el almacenamiento, ejecutan una aplicación o un componente de ella. Los pods son volátiles, es decir, cuando se destruyen pierden toda la información. • Controladores: Agrupación de objetos que permiten desplegar, mantener y atender los recursos deseados en un clúster, kubernetes dispone de los siguientes controladores: o ReplicaSets: Asegura que un número determinado de pods siempre se están ejecutando en todo momento. o Replication Controller: Realiza la misma labor que ReplicaSet pero no admite selectores. o Deployments: Permite actualizaciones declarativas para Pods y ReplicaSets, controlar el número de replicas, automatizar despliegues y hacer rollbacks de aplicaciones. o StatefulSets: Se diferencia del Deployment por gestionar aplicaciones persistentes y utilizar identificadores únicos. o Demon Sets: Asegura que todos los nodos ejecuten un pod especifico. o Jobs: Crea uno o más pods y se asegura que completa su ejecución completamente. o Cron Jobs: Es un Job que se ejecuta de forma programada. • Servicios: Permite agrupar los pods y establecer un punto de acceso común para acceder/conectar a las aplicaciones desplegadas en ellos, sirve de balanceador de carga para el acceso interno/externo, los tipos de servicios básicos disponibles son: o ClusterIP: Es el tipo de servicio predeterminado que expone una dirección IP dentro del clúster. o NodePort: Asigna un puerto estático en los pods para el reenvío del tráfico hacia el exterior. o LoadBalancer: Crea un balanceador de cargas que reenvía todo el tráfico al servicio, es el tipo de servicio que usualmente se utiliza para exponer un servicio en Internet. Según la documentación oficial de Kubernetes un servicio es: “Es una forma abstracta de exponer una aplicación que se ejecuta en un conjunto de pods como un servicio de red". • Namespaces (Espacio de nombres): Permite la creación de clústeres lógicos y aislar los recursos para separar/agrupar y trabajar en distintos proyectos, se pueden definir cuotas, reglas y políticas de acceso. Normalmente existen 3 namespaces: o default: sitio por defecto donde se ejecutan los recursos. o kube-system: Donde se ejecutan todos los recursos esenciales del sistema y administrador por Kubernetes. o kube-public: Sirve para guardar datos públicos donde usuarios autenticados y no puedan acceder. Otros objetos disponibles en Kubernetes son: Ingress, NetworkPolicy, PersistenVolume, PersistentVolumeClaim, StorageClass, ConfigMap y Secrets.
  • 8. Uso básico Kubernetes| Moisés E. Araya [7] Instalación Kubernetes. K8S puede ser instalado en distintas modalidades, en esta oportunidad se utilizará el modo AIO (minikube) donde todos los componentes se ejecutan en un solo nodo, esto es útil para tareas de aprendizaje, desarrollo y pruebas. Arquitectura local. Minikube es una versión resumida de Kubernetes escrita en lenguaje GO que permite crear un clúster local en un solo nodo. Minikube soporta las siguientes características de Kubernetes: • DNS. • NodePorts. • ConfigMaps and Secrets. • Dashboards. • Container Runtime: Docker, CRI-O y containerd. • Enabling CNI (Container Network Interface) • Ingress. • PersistentVolumes of type hostPath. Entorno utilizado. • Máquina Virtual Centos V8 5GB RAM/2CPU. • Docker V19 instalado en MV. • Virtual Box V6 instalado en MV. Prerrequisitos. • En Hypervisor de máquina virtual, activar virtualización y aumentar a 2 Cores. Después de iniciar MV, verificar que esta activa la virtualización ejecutando el comando: [root@centos8 ~]# sort -u <<<$(egrep -o -i --color "vmx|svm" /proc/cpuinfo) vmx
  • 9. Uso básico Kubernetes| Moisés E. Araya [8] Instalar Minikube. Procedimiento. • Descargar minikube. • Modificar permisos. • Crear directorio. • Mover a directorio. • Instalar. • Verificar versión. [root@centos8 ~]# wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 --2020-08-31 22:04:55-- https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 Resolviendo storage.googleapis.com (storage.googleapis.com)... 172.217.192.128, 2800:3f0:4003:c02::80 Conectando con storage.googleapis.com (storage.googleapis.com)[172.217.192.128]:443... conectado. Petición HTTP enviada, esperando respuesta... 200 OK Longitud: 58633547 (56M) [application/octet-stream] Grabando a: “minikube-linux-amd64” minikube-linux-amd64 100%[============================================================================>] 55,92M 2,37MB/s en 21s 2020-08-31 22:05:16 (2,71 MB/s) - “minikube-linux-amd64” guardado [58633547/58633547] [root@centos8 ~]# chmod +x minikube-linux-amd64 [root@centos8 ~]# mkdir -p /usr/local/bin/ [root@centos8 ~]# mv minikube-linux-amd64 minikube [root@centos8 ~]# install minikube /usr/local/bin/ [root@centos8 ~]# minikube versión minikube version: v1.12.3 commit: 2243b4b97c131e3244c5f014faedca0d846599f5-dirty Primeros pasos con minikube. # Cambiar de usuario e iniciar servicio. [dockerusr@centos8 ~]$ minikube start * minikube v1.12.3 en Centos 8.1.1911 * Automatically selected the docker driver * Starting control plane node minikube in cluster minikube * Pulling base image ... * Downloading Kubernetes v1.18.3 preload ... > preloaded-images-k8s-v5-v1.18.3-docker-overlay2-amd64.tar.lz4: 510.91 MiB * Creating docker container (CPUs=2, Memory=2200MB) ... * Preparando Kubernetes v1.18.3 en Docker 19.03.8... * Verifying Kubernetes components... * Enabled addons: default-storageclass, storage-provisioner * Done! kubectl is now configured to use "minikube" Al iniciar el servicio por primera vez, Minikube descarga una imagen para ejecutarla en el hypervisor instalado. Revisar estado de Minikube. [dockerusr@centos8 ~]$ minikube status minikube type: Control Plane host: Running kubelet: Running apiserver: Running kubeconfig: Configured
  • 10. Uso básico Kubernetes| Moisés E. Araya [9] Ver las opciones de comando para Minikube. [dockerusr@centos8 ~]$ minikube minikube provisions and manages local Kubernetes clusters optimized for development workflows. Basic Commands: start Starts a local Kubernetes cluster status Gets the status of a local Kubernetes cluster stop Stops a running local Kubernetes cluster delete Deletes a local Kubernetes cluster dashboard Access the Kubernetes dashboard running within the minikube cluster pause pause Kubernetes unpause unpause Kubernetes Images Commands: docker-env Configure environment to use minikube's Docker daemon podman-env Configure environment to use minikube's Podman service cache Add, delete, or push a local image into minikube Configuration and Management Commands: addons Enable or disable a minikube addon config Modify persistent configuration values [. . . Salida omitida . . .] Mostrar las URLS de los servicios del clúster local. [dockerusr@centos8 ~]$ minikube service list |-------------|------------|--------------|-----| | NAMESPACE | NAME | TARGET PORT | URL | |-------------|------------|--------------|-----| | default | kubernetes | No node port | | kube-system | kube-dns | No node port | |-------------|------------|--------------|-----| Mostrar los valores seteados en archivo de configuración de Minikube. [dockerusr@centos8 ~]$ minikube config view - driver: virtualbox - vm-driver: virtualbox Iniciar sesión en el entorno de Minikube y listar contenedores en ejecución. [dockerusr@centos8 ~]$ minikube ssh docker@minikube:~$ hostname minikube docker@minikube:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e997e1f532b 9c3ca9f065bb "/storage-provisioner" 16 minutes ago Up 16 minutes k8s_storage-provisioner_storage-provisioner_kube-system_7af6ddf0-8827-48bb-a42f-0fbfdf25c05a_0 f8266d95b580 k8s.gcr.io/pause:3.2 "/pause" 16 minutes ago Up 16 minutes k8s_POD_storage-provisioner_kube-system_7af6ddf0-8827-48bb-a42f-0fbfdf25c05a_0 a2c09c1ec682 67da37a9a360 "/coredns -conf /etc…" 17 minutes ago Up 17 minutes k8s_coredns_coredns-66bff467f8-7sbpt_kube-system_67e07ae0-4b7f-4399-a6a7-0622e80e9c08_0 5b7295405fcc k8s.gcr.io/pause:3.2 "/pause" 17 minutes ago Up 17 minutes k8s_POD_coredns-66bff467f8-7sbpt_kube-system_67e07ae0-4b7f-4399-a6a7-0622e80e9c08_0 [. . . Salida omitida . . .] docker@minikube:~$ exit logout
  • 11. Uso básico Kubernetes| Moisés E. Araya [10] Detener y eliminar Minikube. [dockerusr@centos8 ~]$ minikube stop * Stopping node "minikube" ... * Apagando "minikube" mediante SSH... * 1 nodes stopped. [dockerusr@centos8 ~]$ minikube delete * Eliminando "minikube" en docker... * Deleting container "minikube" ... * Eliminando /home/dockerusr/.minikube/machines/minikube... * Removed all traces of the "minikube" cluster. [dockerusr@centos8 ~]$ minikube status * There is no local cluster named "minikube" - To fix this, run: "minikube start" Si se quiere eliminar por completo Minikube del sistema, eliminar los archivos presentes en los directorios; .minikube/, /usr/local/bin/ y .kube/ [dockerusr@centos8 ~]$ ls .minikube/ addons ca.crt ca.pem certs files last_update_check machines proxy-client-ca.crt cache ca.key cert.pem config key.pem logs profiles proxy-client-ca.key [dockerusr@centos8 ~]$ ls /usr/local/bin/ docker-compose docker-machine docker-machine-driver-kvm2 kubectl minikube [dockerusr@centos8 ~]$ ls .kube/ cache config Instalar kubectl. Kubectl es una herramienta de línea de comandos para la administración de Kubernetes, con ella se pueden realizar tareas de creación, actualización, inspección y eliminación de componentes. Procedimiento. • Descargar kubectl. • Modificar permisos. • Crear directorio. • Mover a directorio. • Instalar. • Verificar versión. [root@centos8 ~]# curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 41.0M 100 41.0M 0 0 3012k 0 0:00:13 0:00:13 --:--:-- 3492k [root@centos8 ~]# chmod +x kubectl [root@centos8 ~]# mv kubectl /usr/local/bin/ [root @centos8 ~]$ kubectl version Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.0", GitCommit:"e19964183377d0ec2052d1f1fa930c4d7575bd50", GitTreeState:"clean", BuildDate:"2020-08-26T14:30:33Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:43:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
  • 12. Uso básico Kubernetes| Moisés E. Araya [11] Se muestran la versión cliente y servidor. [root@centos8 ~]# kubectl version --client -o json { "clientVersion": { "major": "1", "minor": "19", "gitVersion": "v1.19.0", "gitCommit": "e19964183377d0ec2052d1f1fa930c4d7575bd50", "gitTreeState": "clean", "buildDate": "2020-08-26T14:30:33Z", "goVersion": "go1.15", "compiler": "gc", "platform": "linux/amd64" } } Alternativa para ver la versión de kubectl en formato json. Primeros comandos con kubectl. Ver la información del clúster y su estado. [dockerusr@centos8 ~]$ kubectl cluster-info Kubernetes master is running at https://192.168.99.100:8443 KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. Mostrar la configuración actual de kubectl. [dockerusr@centos8 ~]$ kubectl config view apiVersion: v1 clusters: - cluster: certificate-authority: /home/dockerusr/.minikube/ca.crt server: https://192.168.99.100:8443 name: minikube contexts: - context: cluster: minikube user: minikube name: minikube current-context: minikube kind: Config preferences: {} users: - name: minikube user: client-certificate: /home/dockerusr/.minikube/profiles/minikube/client.crt client-key: /home/dockerusr/.minikube/profiles/minikube/client.key Mostrar los nodos disponibles. [dockerusr@centos8 ~]$ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 16m v1.18.3 [dockerusr@centos8 ~]$ kubectl get nodes -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME minikube Ready master 33d v1.18.3 192.168.99.100 <none> Buildroot 2019.02.11 4.19.114 docker://19.3.12 El resultado arroja uno solo, también se muestra una alternativa del comando extendido, el nodo está listo para desplegar aplicaciones.
  • 13. Uso básico Kubernetes| Moisés E. Araya [12] Desplegar primera aplicación en Kubernetes utilizando kubectl. Desplegar aplicación NGINX utilizando el comando kubectl create deployment, se necesita el nombre del despliegue y la ubicación de la imagen, en este caso se utiliza el repositorio de Docker Hub. [dockerusr@centos8 ~]$ kubectl create deployment nginx-lab --image=nginx:alpine deployment.apps/nginx-lab created Listar los despliegues. [dockerusr@centos8 ~]$ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE nginx-lab 1/1 1 1 13s Como resultado tenemos solo 1 despliegue ejecutándose en una instancia (única). Listar los pods existentes y su versión ampliada del comando. [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-5dc48c9776-v2mjk 1/1 Running 0 4m39s [dockerusr@centos8 ~]$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-lab-5dc48c9776-v2mjk 1/1 Running 0 5m7s 172.17.0.5 minikube <none> <none> Como resultado tenemos solo 1 pod ejecutándose.
  • 14. Uso básico Kubernetes| Moisés E. Araya [13] Mostrar detalles del pod. [dockerusr@centos8 ~]$ kubectl describe pod nginx-lab Name: nginx-lab-5dc48c9776-v2mjk Namespace: default Priority: 0 Node: minikube/192.168.99.100 Start Time: Tue, 06 Oct 2020 16:15:35 -0300 Labels: app=nginx-lab pod-template-hash=5dc48c9776 Annotations: <none> Status: Running IP: 172.17.0.5 IPs: IP: 172.17.0.5 Controlled By: ReplicaSet/nginx-lab-5dc48c9776 Containers: nginx: Container ID: docker://61c0355ae0254beb3cbfd6ff034a6740743a9970e1d4dea656c5b63107fb356f Image: nginx:alpine Image ID: docker- pullable://nginx@sha256:5fcbe9a6b09b6525651d1e5d5a2df373eec1a13c75f0eaa724a369f43ce589f4 Port: <none> Host Port: <none> State: Running Started: Tue, 06 Oct 2020 16:15:36 -0300 Ready: True Restart Count: 0 Environment: <none> Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-hcjlc (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: default-token-hcjlc: Type: Secret (a volume populated by a Secret) SecretName: default-token-hcjlc Optional: false QoS Class: BestEffort Node-Selectors: <none> Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 5m38s default-scheduler Successfully assigned default/nginx-lab-5dc48c9776-v2mjk to minikube Normal Pulled 5m37s kubelet, minikube Container image "nginx:alpine" already present on machine Normal Created 5m37s kubelet, minikube Created container nginx Normal Started 5m37s kubelet, minikube Started container nginx La salida del comando describe muestra detalles como; direcciones IP, puertos utilizados y una lista de eventos relacionados con el ciclo de vida del pod. Ver logs del contenedor. [dockerusr@centos8 ~]$ kubectl logs nginx-lab-5dc48c9776-v2mjk /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuration complete; ready for start up 172.17.0.1 - - [06/Oct/2020:19:25:42 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.61.1" "127.0.0.1, 192.168.99.1"
  • 15. Uso básico Kubernetes| Moisés E. Araya [14] Ejecutar un comando en el contenedor. [dockerusr@centos8 ~]$ kubectl exec nginx-lab-5dc48c9776-v2mjk env kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=nginx-lab-5dc48c9776-v2mjk KUBERNETES_PORT_443_TCP_PROTO=tcp KUBERNETES_PORT_443_TCP_PORT=443 KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 KUBERNETES_SERVICE_HOST=10.96.0.1 KUBERNETES_SERVICE_PORT=443 KUBERNETES_SERVICE_PORT_HTTPS=443 KUBERNETES_PORT=tcp://10.96.0.1:443 KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 NGINX_VERSION=1.19.3 NJS_VERSION=0.4.4 PKG_RELEASE=1 HOME=/root Se muestran las variables de entorno existentes en el pod. Utilizar un servicio para exponer la aplicación creada en el puerto 80. [dockerusr@centos8 ~]$ kubectl expose deployment nginx-lab --type=NodePort --port=80 service/nginx-lab exposed Listar los servicios. [dockerusr@centos8 ~]$ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 163m nginx-lab NodePort 10.110.0.219 <none> 80:30974/TCP 5s [dockerusr@centos8 ~]$ kubectl get services -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 166m <none> nginx-lab NodePort 10.110.0.219 <none> 80:30974/TCP 3m26s app=nginx-lab Se muestra el servicio nginx-lab recién creado, también se muestra una variante extendida del comando.
  • 16. Uso básico Kubernetes| Moisés E. Araya [15] Mostrar información detallada del servicio. [dockerusr@centos8 ~]$ kubectl describe service nginx-lab Name: nginx-lab Namespace: default Labels: app=nginx-lab Annotations: <none> Selector: app=nginx-lab Type: NodePort IP: 10.110.0.219 Port: <unset> 80/TCP TargetPort: 80/TCP NodePort: <unset> 30974/TCP Endpoints: 172.17.0.5:80 Session Affinity: None External Traffic Policy: Cluster Events: <none> Obtener dirección IP interna de Minikube para realizar prueba de servicio. [dockerusr@centos8 ~]$ minikube service nginx-lab --url http://192.168.99.100:30974 Prueba de conexión al servicio web de NGINX. [dockerusr@centos8 ~]$ curl http://192.168.99.100:30974 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> Método alternativo para realizar la misma prueba: curl $(minikube ip):30974
  • 17. Uso básico Kubernetes| Moisés E. Araya [16] Uso de archivos en formato YAML. Los objetos de Kubernetes se pueden crear de dos formas: directamente desde la línea de comandos (como se ha visto anteriormente) o por medio de archivos de manifiesto de tipo Yaml. A este tipo de configuración se le conoce con el nombre de declarativa y el de comandos como imperativo. ReplicaSet. Ahora ¿qué sucede si un pod falla?, en un clúster se necesita ejecutar varias instancias de un solo pod, esto se logra con un controlador llamado replica set, este controlador permite escalar y mantener el estado del clúster deseado, por ejemplo, si un pod falla automáticamente lanza otro, por lo tanto, este RS (replica set) entrega capacidad de alta disponibilidad al clúster. Archivo replicaset de ejemplo. Crear y guardar el siguiente archivo como replicaset.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx-lab-rs labels: tier: frontend spec: selector: matchLabels: app: nginx-lab tier: frontend replicas: 3 template: metadata: name: nginx-lab labels: app: nginx-lab tier: frontend spec: containers: - name: nginx image: nginx ports: - containerPort: 80 El selector indica que pod el RS debe estar monitoreando/administrando y el template le indica al RS que tipo de pod debe ser lanzando cuando hay una falla. Crear un replicaset por medio de un archivo yaml [dockerusr@centos8 ~]$ kubectl apply -f replicaset.yml replicaset.apps/nginx-lab created # Para aplicar se puede utilizar el comando apply o el comando create, el primero crea y/o aplica las diferencias (si las hubiera) y el segundo borra y crea. Listar replicasets existentes. [dockerusr@centos8 ~]$ kubectl get replicaset NAME DESIRED CURRENT READY AGE nginx-lab 3 3 2 10s nginx-lab-5dc48c9776 1 1 1 168m [dockerusr@centos8 ~]$ kubectl get replicaset -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR nginx-lab 3 3 3 9m37s nginx nginx app=nginx- lab,tier=frontend nginx-lab-5dc48c9776 1 1 1 177m nginx nginx:alpine app=nginx-lab,pod- template- hash=5dc48c9776
  • 18. Uso básico Kubernetes| Moisés E. Araya [17] Listar pods [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-5dc48c9776-v2mjk 1/1 Running 0 168m nginx-lab-7j5v8 1/1 Running 0 33s nginx-lab-qllrt 1/1 Running 0 33s nginx-lab-r57vd 1/1 Running 0 33s Borrar un pod para validar funcionamiento del RS. [dockerusr@centos8 ~]$ kubectl delete pod nginx-lab-7j5v8 pod "nginx-lab-7j5v8" deleted [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 10m nginx-lab-ftfjw 0/1 ContainerCreating 0 5s nginx-lab-qllrt 1/1 Running 0 11m nginx-lab-r57vd 1/1 Running 0 11m [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 10m nginx-lab-ftfjw 1/1 Running 0 9s nginx-lab-qllrt 1/1 Running 0 11m nginx-lab-r57vd 1/1 Running 0 11m Al borrar un pod, automáticamente se crea otro para reemplazar y mantener la cantidad deseada Escalar un pod. [dockerusr@centos8 ~]$ kubectl scale replicaset nginx-lab --replicas=4 replicaset.apps/nginx-lab scaled [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 13m nginx-lab-ftfjw 1/1 Running 0 3m20s nginx-lab-kdt6t 0/1 ContainerCreating 0 3s nginx-lab-qllrt 1/1 Running 0 14m nginx-lab-r57vd 1/1 Running 0 14m [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 13m nginx-lab-ftfjw 1/1 Running 0 3m30s nginx-lab-kdt6t 1/1 Running 0 13s nginx-lab-qllrt 1/1 Running 0 14m nginx-lab-r57vd 1/1 Running 0 14m Algo similar sucede cuando se escala un pod, se crea el numero indicado en la cantidad de replicas, en este caso habían 3 por lo que se crea solo uno. Hacer un scale-down de los pods. [dockerusr@centos8 ~]$ kubectl scale replicaset nginx-lab --replicas=2 replicaset.apps/nginx-lab scaled [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 16m nginx-lab-ftfjw 0/1 Terminating 0 6m19s nginx-lab-qllrt 1/1 Running 0 17m nginx-lab-r57vd 1/1 Running 0 17m
  • 19. Uso básico Kubernetes| Moisés E. Araya [18] [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-5dc48c9776-2nx8c 1/1 Running 0 16m nginx-lab-qllrt 1/1 Running 0 17m nginx-lab-r57vd 1/1 Running 0 17m En este caso se disminuye la cantidad de pods de 4 a 2. Deployment. ¿Qué sucede ahora si tenemos esa misma aplicación, pero aparte de instalar la necesitamos actualizar (Rolling update) y si falla que ejecute una restauración? (rollback), esto se puede lograr con el uso del objeto llamado Deployment. Para esto se usa otro archivo yml que contiene la definición completa del servicio, el tipo (kind) cambia a Deployment y si bien es parecido al contenido del objeto ReplicaSet, este agrega las características de Rolling update y Rollback. Archivo deployment de ejemplo. Crear y guardar el siguiente archivo como deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-lab-deployment labels: tier: frontend spec: selector: matchLabels: app: nginx-lab tier: frontend replicas: 3 template: metadata: name: nginx-lab labels: app: nginx-lab tier: frontend spec: containers: - name: nginx image: nginx ports: - containerPort: 80 Descripción rápida del archivo: • apiVersion: Es la versión API del recurso que estamos utilizando, no todos los recursos usan las mismas APIs. • kind: Tipo de recurso, en este caso un Deployment. • metadata: Nombre al recurso, etiquetas (útiles para clasificar el servicio o aplicación), también se pueden agregar otras para agrupar o clasificar. • spec: Contiene la especificación del despliegue a realizar. o Selector: Agrupa recursos inferiores dentro del despliegue o Replicas: Cantidad de contenedores a lanzar. o Plantilla: Contiene medatatos, nombre, etiquetas y nombre de aplicación. o Especificación del contenedor ▪ Nombre, imagen y puerto TCP.
  • 20. Uso básico Kubernetes| Moisés E. Araya [19] Crear un deployment por medio de un archivo yaml [dockerusr@centos8 ~]$ kubectl apply -f deployment.yml deployment.apps/nginx-lab-deployment created Al ejecutar el archivo, se crea un despliegue, los pods y un replicaset. Listar despliegues, pods y replicaset. [dockerusr@centos8 ~]$ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-lab-deployment 1/3 3 1 8s [dockerusr@centos8 ~]$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-lab-deployment-549c9f75fb-494wl 1/1 Running 0 46s nginx-lab-deployment-549c9f75fb-vnf5x 1/1 Running 0 46s nginx-lab-deployment-549c9f75fb-xzml6 1/1 Running 0 46s [dockerusr@centos8 ~]$ kubectl get replicaset NAME DESIRED CURRENT READY AGE nginx-lab-deployment-549c9f75fb 3 3 3 49s Actualizar contenedor del deployment (despliegue). Para actualizar el deployment, utilizar el comando kubectl set image, le indicamos al despliegue que actualice la versión de nginx a la 1.9.1 por medio del siguiente comando: kubectl set image deployment/nginx-lab-deployment nginx=nginx:1.9.1 [dockerusr@centos8 ~]$ kubectl set image deployment/nginx-lab-deployment nginx=nginx:1.9.1 deployment.apps/nginx-lab-deployment image updated Listar las versiones disponibles. Usar la opción rollout para ver las versiones disponibles, se muestran dos, una es el resultado del primer despliegue y el segundo es debido a la actualización de nginx. [dockerusr@centos8 ~]$ kubectl rollout history deployment/nginx-lab-deployment deployment.apps/nginx-lab-deployment REVISION CHANGE-CAUSE 1 <none> 2 <none> Mostrar la versión de nginx aplicada. Utilizar la opción describe para obtener la versión y otra información importante como el número de revisión. [dockerusr@centos8 ~]$ kubectl describe deployment nginx-lab-deployment Name: nginx-lab-deployment Namespace: default CreationTimestamp: Tue, 06 Oct 2020 19:48:30 -0300 Labels: tier=frontend Annotations: deployment.kubernetes.io/revision: 2 Selector: app=nginx-lab,tier=frontend Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx-lab tier=frontend Containers: nginx: Image: nginx:1.9.1 Port: 80/TCP Host Port: 0/TCP [. . . Salida omitida . . .]
  • 21. Uso básico Kubernetes| Moisés E. Araya [20] [dockerusr@centos8 ~]$ kubectl describe deployment nginx-lab-deployment |grep "Image*" Image: nginx:1.9.1 #Tambien podemos iniciar una sesión interactiva en uno de los pods del deployment y ejecutar el comando nginx -v Forzar error de un despliegue. [dockerusr@centos8 ~]$ kubectl set image deployment/nginx-lab-deployment nginx=echoserver:1.10 deployment.apps/nginx-lab-deployment image updated [dockerusr@centos8 ~]$ kubectl rollout status deployment/nginx-lab-deployment Waiting for deployment "nginx-lab-deployment" rollout to finish: 1 out of 3 new replicas have been updated... [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-deployment-579458cf85-gjg2b 1/1 Running 0 36m nginx-lab-deployment-579458cf85-jk7bn 1/1 Running 0 36m nginx-lab-deployment-579458cf85-qcxjs 1/1 Running 0 36m nginx-lab-deployment-7f87694c4-cdmfz 0/1 ImagePullBackOff 0 56s En comando inicial se indica un contenedor distinto para que entregue un error, se revisa el estado de este y no termina por lo que se induce que tenemos un problema, se revisa el estado del despliegue y se confirma que tenemos un pod con error. Ejecutar un rollback (vuelta atrás). [dockerusr@centos8 ~]$ kubectl rollout undo deployment/nginx-lab-deployment deployment.apps/nginx-lab-deployment rolled back [dockerusr@centos8 ~]$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-lab-deployment-579458cf85-gjg2b 1/1 Running 0 37m nginx-lab-deployment-579458cf85-jk7bn 1/1 Running 0 37m nginx-lab-deployment-579458cf85-qcxjs 1/1 Running 0 37m Para volver la aplicación a la última versión estable, se ejecuta el comando rollout undo, esto hace que los pods con error sean eliminados y recreados. Eliminar las configuraciones. Para finalizar, se deben eliminar todos los objetos y recursos creados para dejar el ambiente limpio. Eliminar pods, deployments, replicasets y verificar que no quede nada. [dockerusr@centos8 ~]$ kubectl delete --all pods --namespace=default pod "nginx-lab-5dc48c9776-jl4ws" deleted [dockerusr@centos8 ~]$ kubectl delete --all deployments --namespace=default deployment.apps "nginx-lab" deleted [dockerusr@centos8 ~]$ kubectl delete --all replicasets --namespace=default replicaset.apps "nginx-lab-5dc48c9776" deleted [dockerusr@centos8 ~]$ kubectl get all NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h43m Archivos de ejemplo. Los archivos ReplicaSet.yaml y Deployment.yaml están disponibles en el siguiente repositorio de GitHub: https://github.com/EliasGH/kubernetesexamples
  • 22. Uso básico Kubernetes| Moisés E. Araya [21] Instalar Dashboard. Kubernetes dispone de una interfaz web que, si bien no posee todas las características, nos sirve para monitorear algún clúster de prueba o similar. Procedimiento. Aplicar la definición yaml que contiene la configuración recomendada del dashboard. kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml [dockerusr@centos8 ~]$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml namespace/kubernetes-dashboard created serviceaccount/kubernetes-dashboard created service/kubernetes-dashboard created secret/kubernetes-dashboard-certs created secret/kubernetes-dashboard-csrf created secret/kubernetes-dashboard-key-holder created configmap/kubernetes-dashboard-settings created role.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created deployment.apps/kubernetes-dashboard created service/dashboard-metrics-scraper created deployment.apps/dashboard-metrics-scraper created El dashboard se crea correctamente. Agregar cuenta de servicio para acceder. Crear archivo del tipo yaml con dos contenidos; ServiceAccount y ClusterRoleBinding. apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard
  • 23. Uso básico Kubernetes| Moisés E. Araya [22] Aplicar archivo. [dockerusr@centos8 ~]$ kubectl apply -f userdashboard.yaml serviceaccount/admin-user created clusterrolebinding.rbac.authorization.k8s.io/admin-user created Se crea y se agregan permisos a esa cuenta de servicio. Obtener token. Para hacer el login se necesita un token de autenticación, copiar y pegar el siguiente comando para obtener el token: [dockerusr@centos8 ~]$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}' ) Name: admin-user-token-6zc29 Namespace: kubernetes-dashboard Labels: <none> Annotations: kubernetes.io/service-account.name: admin-user kubernetes.io/service-account.uid: c44c2bf2-4500-4c1a-afe5-2164162b4510 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1066 bytes namespace: 20 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImNuNlRMYnQzRk16aEdSUzRsLTNmM3FMMjBheXpPNWtRRERxdWllSTM5WGsifQ.eyJpc3MiOiJrdWJlcm5ldG VzL3NlcnZpY2VhY2NvdW50Iiwia 3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZW FjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c 2VyLXRva2VuLTZ6YzI5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdW Jlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Nlc nZpY2UtYWNjb3VudC51aWQiOiJjNDRjMmJmMi00NTAwLTRjMWEtYWZlNS0yMTY0MTYyYjQ1MTAiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bn Q6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4td XNlciJ9.RU5T1ak9EIzjYYl5NXxj- zVZkby7CsiD074gvRVr_RXrczKmylts8XJOiHLKG1PWiu1EYgw23HrtBTbDOx0s0frZ7KME3jiHhCLbVbkgUDLBcTsskSwLxeZZ7VwImEkjAr- rucJLJQ9Djp02 uh2UtMuPf6F6tV3XD4jR_kr17pvLp7weOKSXdZv7JLqOgCd_pdT7CHWs7iz941IU0ApEfEynert4FIDj7xOdp9WJ- O9eaOXNAGFewYE0Db8bNrc3rdw0XEEQhbA8TiYO5NKk01BnWpBUoYyTX7Sa5CCa Lyi_kM47NSiAlULvB5qliF4l4YGvAC5XuQAIqUb95w9pFg Conectarse al clúster. Abre una conexión privada. dockerusr@centos8 ~]$ kubectl proxy Starting to serve on 127.0.0.1:8001 Acceder a URL, pegar el token y acceder. http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ Se pueden todos los componentes de todos los namespaces existentes; deployments, nodos, pods, replicaset, etc.
  • 24. Uso básico Kubernetes| Moisés E. Araya [23] Vista general. Vista Pods. Vista Replica Sets.
  • 25. Uso básico Kubernetes| Moisés E. Araya [24] Crear objetos directamente desde la consola. Existen 3 formas de creación; ingresar archivo yaml/json con las definiciones de Kubernetes, seleccionar archivo remoto y crear directamente desde un formulario. Pod creado.
  • 26. Uso básico Kubernetes| Moisés E. Araya [25] Lista de comandos utilizados. minikube version Verificar instalación minikube start Iniciar el clúster minikube status Verificar estado minikube service list Muestra las URLS de servicio del clúster minikube config view Mostrar valores seteados en configuración minikube ssh Iniciar sesión en entorno minikube minikube stop Detener servicios minikube delete Eliminar servicio kubectl version Verificar instalación kubectl version --client -0 json Mostrar versión cliente en formato JSON kubectl config view Muestra la configuración actual kubectl cluster-info Ver detalles del clúster kubectl get nodes Ver los nodos del clúster kubectl get nodes -o wide Ver nodos en modo extendido kubectl get all Mostrar todas las configuraciones existentes kubectl create deployment NAME IMAGE_PATH Crear despliegue kubectl get deployments Listar los despliegues kubectl get pods Listar los pods kubectl get pods -o wide Listar pods en modo extendido kubectl describe pod POD_NAME Obtener información detallada de un pod kubectl proxy Iniciar servidor proxy kubectl logs POD_NAME Obtener los registros de logs de un pod kubectl exec POD_NAME comando Ejecutar un comando en un pod kubectl expose deployment NAME_DEPLOYMENT -- type=NodePort --port=PORT_NUMBER Exponer un despliegue kubectl get services Listar los servicios kubectl get services -o wide Listar los servicios en modo extendido kubectl describe service SERVICE_NAME Obtener detalle de un servicio kubectl apply -f YAML_FILE Aplicar una configuración utilizando un archivo yaml kubectl get replicaset Listar los replicaset kubectl get replicaset -o wide Listar los replicaset en modo extendido kubectl delete pod POD_NAME Eliminar un pod kubectl scale replicaset REPLICASET_NAME -- replicas=NUMBER Escalar un pod kubectl set image deployment/DEPLOYMENT_NAME IMAGEN=VERSIONDESEADA Actualizar la imagen de un contenedor de un despliegue kubectl rollout history deployment/DEPLOYMENT_NAME Mostrar el historial de versiones de un despliegue kubectl rollout status deployment/DEPLOYMENT_NAME Mostrar el estado de un despliegue kubectl rollout undo deployment/DEPLOYMENT_NAME Realizar un rollback de un despliegue kubectl delete --all pods --namespace=default Eliminar todos los pods creados en el espacio de nombres por defecto kubectl delete --all deployments --namespace=default Eliminar todos los despliegues creados en el espacio de nombres por defecto kubectl delete --all replicasets --namespace=default Eliminar todos los replicasets creados en el espacio de nombres por defecto kubectl get all Listar los objetos creados en kubernetes
  • 27. Uso básico Kubernetes| Moisés E. Araya [26] Alternativas a Kubernetes. Docker Swarm. • Herramienta de Docker para la administración de contenedores. • https://docs.docker.com/engine/swarm/ Apache Mesos. • Es un administrador de clústeres de código abierto que puede trabajar con kubernetes. • http://mesos.apache.org/ OpenShift. • Plataforma PaaS de Red Hat, es de código cerrado • https://www.openshift.com/ Algunas de las implementaciones de Kubernetes en la nube. Azure Kubernetes Services (AKS) • https://azure.microsoft.com/es-es/services/kubernetes-service/ Elastic Container Service for Kubernetes (EKS) • https://aws.amazon.com/es/eks/ Google Kubernetes Engine (GKE) • https://cloud.google.com/kubernetes-engine?hl=es Otras son: OKE (Oracle Engine for Kubernetes) y DOKS (Digital Ocean for Kubernetes).
  • 28. Uso básico Kubernetes| Moisés E. Araya [27] Anexo A – Google Kubernetes Engine. Parte 1- Crear Clúster utilizando la consola web de GCP. Google Kubernetes Engine (GKE) es el servicio de Google Cloud para el sistema Kubernetes, el acceso a su consola está en: https://console.cloud.google.com Prerrequisitos. • Contar con una cuenta activa de Google Cloud Platform. Procedimiento. En la consola GCP, clic en menú Kubernetes Engine > Clusters Clic crear clúster. Ver e ingresar información básica del clúster. • Nombre. • Zona. • Versión de Kubernetes. • No modificar los otros valores (dejar todo por defecto).
  • 29. Uso básico Kubernetes| Moisés E. Araya [28] En sección detalle de pool de Nodos, ingresar información: • Nombre pool. • Versión de nodo. • Tamaño del clúster (cantidad de nodos). • No modificar los otros valores. Opcionalmente podemos ver los valores que aparecen en sección Nodos: • Tipo de imagen: cos que es una imagen Linux optimizada para contenedores de GCP. • Configuración de maquina: o Serie: E2 o Tipo de maquina: 2vCPU y 4GB RAM. • Disco estándar: 100 GB. Clic en crear clúster. Comienza el aprovisionamiento del clúster y esperamos unos minutos hasta que quede listo.
  • 30. Uso básico Kubernetes| Moisés E. Araya [29] Clúster creado. Para ver los detalles del clúster, clic en nombre. En pestaña nodos, se muestran los 3 nodos creados.
  • 31. Uso básico Kubernetes| Moisés E. Araya [30] Conectarse al clúster vía kubectl. En pestaña principal, hacer clic en Connect, se despliega una ventana con el comando para ejecutar en la consola Google Cloud Shell, el comando se debe copiar y luego pegar en la consola para acceder y poder ejecutar comandos kubectl. Luego de iniciar la consola de comandos, podemos listar los nodos: student_01_c0ca219a11da@cloudshell:~)$ kubectl get nodes NAME STATUS ROLES AGE VERSION gke-labcluster-lab-pool-676a36ee-9sfk Ready <none> 6m35s v1.16.13-gke.401 gke-labcluster-lab-pool-676a36ee-tb32 Ready <none> 6m35s v1.16.13-gke.401 gke-labcluster-lab-pool-676a36ee-znz8 Ready <none> 6m33s v1.16.13-gke.401 Diagrama referencial del clúster creado en GCP.
  • 32. Uso básico Kubernetes| Moisés E. Araya [31] Parte 2 - Desplegar una aplicación NGINX en el clúster. Para desplegar una aplicación, debemos hacer clic en la pestaña Workloads del menú Kubernetes Engine y luego hacer clic en Deploy. En pestaña siguiente mantener los valores presentados, clic siguiente. Mantener los valores presentados y modificar nombre de aplicación (opcional), finalizar haciendo clic en botón Deploy.
  • 33. Uso básico Kubernetes| Moisés E. Araya [32] Creación en progreso. Aplicación lista. Detalles de aplicación. Revisar estado de despliegue con kubectl. student_01_c0ca219a11da@cloudshell:~ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-app 3/3 3 3 4m3s
  • 34. Uso básico Kubernetes| Moisés E. Araya [33] Parte 3 – Exponer la aplicación. En apartado Workloads, clic sobre botón EXPOSE. Ver resultados en menú Services & Ingress. Servicio nginx-1-service listo. Revisar estado del servicio con kubectl. student_01_c0ca219a11da@cloudshell:~ $ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-app-service LoadBalancer 10.36.6.164 34.123.219.50 80:32653/TCP 6m52s Acceder a aplicación vía web. Copiar y pegar en un navegador el endpoint mostrado en imagen o en salida comando kubectl.
  • 35. Uso básico Kubernetes| Moisés E. Araya [34] Diagrama referencial de la configuración realizada. Parte 4 - Borrar el Clúster. Para finalizar, se deben borrar los recursos creados. Clic en Clústers, seleccionar y presionar el botón DELETE. Confirmar borrado del clúster. Clúster eliminado.
  • 36. Uso básico Kubernetes| Moisés E. Araya [35] Anexo B - Kubernetes Windows 10. Una alternativa a Minikube para entornos de prueba es instalar habilitar Kubernetes dentro de Docker para Windows. Requisitos: • Windows 10 Profesional o Enterprise. • Docker Desktop 2.0 o superior. • Hyper-V habilitado. Kubernetes por defecto esta desactivado, la instalación se realiza desde la interfaz de Docker activando la casilla “Enable Kubernetes” Nos pide confirmar para instalar. Esperar unos minutos para que acabe la instalación Kubernetes activo.
  • 37. Uso básico Kubernetes| Moisés E. Araya [36] Comandos Kubernetes. Kubernetes cuenta con el utilitario kubectl que sirve para iniciar, controlar, inspeccionar, gestionar, desplegar y escalar aplicaciones en el clúster. Algunos comandos son: • kubectl versión. • kubectl cluster-info. • kubectl get componentstatuses. También se puede obtener el listado completo de comandos disponibles ejecutando kubectl –help o -h Como guía o ayuda para la parte de Docker pueden seguir el siguiente manual: • https://es2.slideshare.net/mike741/instalar-docker-windows
  • 38. Uso básico Kubernetes| Moisés E. Araya [37] Anexo C - Instalar VirtualBox en CentOs V8. Procedimiento. • Actualizar sistema y reiniciar. • Descargar e instalar repositorio de Oracle VirtualBox. [root@centos8 ~]# yum update -y --skip-broken --nobest Última comprobación de caducidad de metadatos hecha hace 0:11:18, el mar 01 sep 2020 19:38:45 -04. Dependencias resueltas. . . . ¡Listo! [root@centos8 ~]# init 6 [root@centos8 ~]# wget https://www.virtualbox.org/download/oracle_vbox.asc --2020-09-01 19:37:47-- https://www.virtualbox.org/download/oracle_vbox.asc Resolviendo www.virtualbox.org (www.virtualbox.org)... 137.254.60.32 Conectando con www.virtualbox.org (www.virtualbox.org)[137.254.60.32]:443... conectado. Petición HTTP enviada, esperando respuesta... 200 OK Longitud: 1734 (1,7K) [text/plain] Grabando a: “oracle_vbox.asc” oracle_vbox.asc 100%[==========================================================================>] 1,69K 10,1KB/s en 0,2s 2020-09-01 19:37:49 (10,1 KB/s) - “oracle_vbox.asc” guardado [1734/1734] [root@centos8 ~]# rpm --import oracle_vbox.asc [root@centos8 ~]# wget http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo -O /etc/yum.repos.d/virtualbox.repo --2020-09-01 19:38:10-- http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo Resolviendo download.virtualbox.org (download.virtualbox.org)... 23.40.56.108 Conectando con download.virtualbox.org (download.virtualbox.org)[23.40.56.108]:80... conectado. Petición HTTP enviada, esperando respuesta... 200 OK Longitud: 259 [text/plain] Grabando a: “/etc/yum.repos.d/virtualbox.repo” /etc/yum.repos.d/virtualbox.repo 100%[==========================================================================>] 259 --.-KB/s en 0,005s 2020-09-01 19:38:11 (46,7 KB/s) - “/etc/yum.repos.d/virtualbox.repo” guardado [259/259] [root@centos8 ~]# cat <<EOF >> /etc/yum.repos.d/virtualbox.repo > [virtualbox] > name=Oracle Linux / RHEL / CentOS - 8 x86_64 - VirtualBox > baseurl=http://download.virtualbox.org/virtualbox/rpm/rhel/8/x86_64/ > enabled=1 > gpgcheck=1 > repo_gpgcheck=1 > gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc > EOF Instalar VirtualBox desde el repositorio. [root@centos8 ~]# yum install -y VirtualBox-6.0 Oracle Linux / RHEL / CentOS - 8 x86_64 - VirtualBox 91 B/s | 181 B 00:01 Oracle Linux / RHEL / CentOS - 8 x86_64 - VirtualBox 1.5 kB/s | 1.7 kB 00:01 Importando llave GPG 0x98AB5139: ID usuario: "Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>" Huella : 7B0F AB3A 13B9 0743 5925 D9C9 5442 2A4B 98AB 5139 Desde : https://www.virtualbox.org/download/oracle_vbox.asc Oracle Linux / RHEL / CentOS - 8 x86_64 - VirtualBox 64 kB/s | 130 kB 00:02 Dependencias resueltas.
  • 39. Uso básico Kubernetes| Moisés E. Araya [38] Validar versión. [root@centos8 ~]# VBoxManage --version 6.0.24r139119 Habilitar e iniciar servicio. [root@centos8 ~]# systemctl enable vboxdrv [root@centos8 ~]# systemctl start vboxdrv [root@centos8 ~]# systemctl status vboxdrv ● vboxdrv.service - VirtualBox Linux kernel module Loaded: loaded (/usr/lib/virtualbox/vboxdrv.sh; enabled; vendor preset: disabled) Active: active (exited) since Fri 2020-09-25 00:06:52 -03; 1 weeks 5 days ago Process: 964 ExecStart=/usr/lib/virtualbox/vboxdrv.sh start (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 32027) Memory: 0B CGroup: /system.slice/vboxdrv.service sep 25 00:06:49 centos8.lab systemd[1]: Starting VirtualBox Linux kernel module... sep 25 00:06:49 centos8.lab vboxdrv.sh[964]: vboxdrv.sh: Starting VirtualBox services. sep 25 00:06:52 centos8.lab systemd[1]: Started VirtualBox Linux kernel module. Mostrar VMS en ejecución. [dockerusr@centos8 ~]$ vboxmanage list vms "minikube" {04dcc81f-5787-4994-b8d0-7a6bff1d225d} Mostrar información de la máquina virtual en ejecución. [dockerusr@centos8 ~]$ vboxmanage showvminfo "minikube" Name: minikube Groups: / Guest OS: Linux 2.6 / 3.x / 4.x (64-bit) UUID: 04dcc81f-5787-4994-b8d0-7a6bff1d225d Config file: /home/dockerusr/.minikube/machines/minikube/minikube/minikube.vbox Snapshot folder: /home/dockerusr/.minikube/machines/minikube/minikube/Snapshots Log folder: /home/dockerusr/.minikube/machines/minikube/minikube/Logs Hardware UUID: 04dcc81f-5787-4994-b8d0-7a6bff1d225d Memory size 2200MB Page Fusion: disabled VRAM size: 8MB CPU exec cap: 100% HPET: enabled CPUProfile: host Chipset: piix3 Firmware: BIOS Number of CPUs: 2 [. . . Salida omitida . . .]
  • 40. Uso básico Kubernetes| Moisés E. Araya [39] Conclusión. En este documento se han presentado los siguientes temas: • Presentación de Kubernetes. • Componentes principales. • Objetos relevantes. • Instalación de Minikube y Kubectl. • Prácticas de laboratorio y casos de uso prácticos. • Presentación y uso de objetos por medio de archivos yaml. • Instalación de Dashboard de Kubernetes. • Repaso de comandos utilizados. • Instalación y uso de un clúster de Kubernetes en GCP. • Instalación de Kubernetes en Windows 10. • Instalación de VirtualBox en CentOS. • Tecnologías alternativas a Kubernetes. Referencias. • Documentación oficial. o https://kubernetes.io o https://kubernetes.io/docs/tasks/tools/install-kubectl/ o https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands • Repositorio GitHub. o https://github.com/kubernetes/kubernetes • Documentación Minikube. o https://minikube.sigs.k8s.io/docs/ • Dashboard Kubernetes. o https://github.com/kubernetes/dashboard o https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating- sample-user.md • Google Kubernetes Engine. o https://cloud.google.com/kubernetes-engine o https://www.qwiklabs.com • Comandos VirtualBox o https://www.virtualbox.org/manual/ch08.html • Repositorio de imágenes. o https://pixabay.com/es/