kubernetesEmpezando con kubernetes


Observaciones

Kubernetes es una plataforma de código abierto para automatizar la implementación, escalado y operaciones de contenedores de aplicaciones en grupos de hosts, proporcionando infraestructura centrada en contenedores.

Con Kubernetes, puede responder rápida y eficientemente a la demanda de los clientes:

  • Despliegue sus aplicaciones de forma rápida y predecible.
  • Escale sus aplicaciones sobre la marcha.
  • Despliegue a la perfección nuevas funcionalidades.
  • Optimice el uso de su hardware utilizando solo los recursos que necesita.

¿Por qué necesito Kubernetes y qué puede hacer?

Kubernetes puede programar y ejecutar contenedores de aplicaciones en grupos de máquinas físicas o virtuales. Sin embargo, Kubernetes también permite a los desarrolladores "cortar el cable" a máquinas físicas y virtuales, pasando de una infraestructura centrada en el host a una infraestructura centrada en el contenedor , que proporciona todas las ventajas y beneficios inherentes a los contenedores. Kubernetes proporciona la infraestructura para construir un entorno de desarrollo verdaderamente centrado en contenedores.

Kubernetes satisface una serie de necesidades comunes de aplicaciones que se ejecutan en producción, como:

  • ubicar conjuntamente los procesos de ayuda, facilitar las aplicaciones compuestas y preservar el modelo de una aplicación por contenedor,
  • montaje de sistemas de almacenamiento,
  • distribuyendo secretos,
  • control de salud de la aplicación,
  • replicando instancias de aplicaciones,
  • autoescalamiento horizontal,
  • nombramiento y descubrimiento,
  • balanceo de carga,
  • actualizaciones continuas,
  • monitoreo de recursos,
  • registro de acceso e ingestión,
  • soporte para introspección y depuración, y
  • Identidad y autorización.

Esto proporciona la simplicidad de la Plataforma como un Servicio (PaaS) con la flexibilidad de la Infraestructura como un Servicio (IaaS), y facilita la portabilidad entre los proveedores de infraestructura.

Versiones

Versión Fecha de lanzamiento
1.7 2017-06-28
1.6 2017-02-22
1.5 2016-12-13
1.4 2016-09-26
1.3 2016-07-06
1.2 2016-03-17
1.1 2015-09-09
1.0 2015-07-18

Configurar kubectl

Un clúster Kubernetes se controla mediante el comando kubectl . El método de configuración de kubectl depende de dónde esté instalado Kubernetes.

Google Cloud (motor de contenedores)

Para instalar kubectl utilizando el SDK de Google Cloud:

gcloud components install kubectl
 

Para configurar kubectl para controlar un clúster Kubernetes existente en Container Engine:

gcloud container clusters get-credentials $CLUSTER_NAME
 

Minikube

Cuando se utiliza minikube, el binario kubectl debe descargarse manualmente y colocarse en la ruta.

# Version of Kubernetes.
K8S_VERSION=$(curl -sS https://storage.googleapis.com/kubernetes-release/release/stable.txt)
# Operating System. Can be one of {linux, darwin}
GOOS=linux
# Architecture. Can be one of {386, amd64, arm64, ppc641e}
GOARCH=amd64

# Download and place in path.
curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/${GOOS}/${GOARCH}/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
 

El binario de minikube configura automáticamente kubectl al iniciar un clúster.

minikube start
# kubectl is now ready to use!
 

Hola Mundo

Una vez que su clúster Kubernetes se esté ejecutando y kubectl esté configurado, podría ejecutar su primera aplicación en unos pocos pasos. Esto se puede hacer usando los comandos imperativos que no necesitan archivos de configuración.

Para ejecutar una aplicación, debe proporcionar un nombre de implementación ( bootcamp ), la ubicación de la imagen del contenedor ( docker.io/jocatalin/kubernetes-bootcamp:v1 ) y el puerto ( 8080 )

$ kubectl run bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1 --port=8080
 

Confirme que funcionó con:

$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
bootcamp               1         1         1            1         6s
 

Para exponer su aplicación y hacerla accesible desde la ejecución externa:

$ kubectl expose deployment/bootcamp --type="LoadBalancer" --port 8080
 

Confirme que funcionó con:

$ kubectl get services
NAME                  CLUSTER-IP   EXTERNAL-IP         PORT(S)    AGE
kubernetes            10.0.0.1     <none>              443/TCP    3m
bootcamp              10.3.245.61  104.155.111.170     8080:32452/TCP   2m
 

Para acceder a los servicios, use la IP externa y el puerto de la aplicación, por ejemplo, así:

$ export EXTERNAL_IP=$(kubectl get service bootcamp --output=jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export PORT=$(kubectl get services --output=jsonpath='{.items[0].spec.ports[0].port}')
$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-2fhnk | v=1
 

Lo mismo se podría hacer manualmente con los datos proporcionados en:

$ kubectl describe service bootcamp
Name:                   bootcamp
Namespace:              default
Labels:                 run=bootcamp
Selector:               run=bootcamp
Type:                   LoadBalancer
IP:                     10.3.245.61
LoadBalancer Ingress:   104.155.111.170
Port:                   <unset> 8080/TCP
NodePort:               <unset> 32452/TCP
Endpoints:              10.0.0.3:8080
... events and details left out ....

$ export NODE=104.155.111.170
$ export PORT=8080
 

Una vez que esto funcione, puedes escalar tu aplicación con:

$ kubectl scale deployments/bootcamp --replicas=4
 

Y verifica el resultado con:

$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
bootcamp               4         4         4            4         30s

$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-2fhnk | v=1
$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-gmtv5 | v=1
 

Cuidado con el cambio de id de pod.

Para poder ejecutar una nueva versión de la aplicación, ejecute:

kubectl set image deployments/bootcamp bootcamp=jocatalin/kubernetes-bootcamp:v2
 

Y confirmarlo con:

$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-284539476-gafwev3 | v=2
 

La limpieza se realiza finalmente con:

$ kubectl delete deployment bootcamp
$ kubectl delete service bootcamp
 

Instalar en Google Cloud

Kubernetes fue desarrollado originalmente por Google para impulsar su motor de contenedores . Como tal, los grupos de Kubernetes son ciudadanos de primera clase en Google.

La creación de un clúster Kubernetes en el motor de contenedor requiere el comando gcloud del Google Cloud SDK . Para instalar este comando localmente, use una de las siguientes opciones:

  • use el instalador interactivo (la forma más fácil para los recién llegados):
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
 
  • descargue el SDK desde https://cloud.google.com/sdk/ y ejecute el archivo de instalación apropiado.

    Por ejemplo, para instalar en Linux (x86_64):

curl -Lo gcloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-142.0.0-linux-x86_64.tar.gz
tar xvf ./gcloud-sdk.tar.gz
./google-cloud-sdk/install.sh
gcloud init
 

Una vez que se gcloud instalado gcloud , cree un clúster Kubernetes con:

# Give our cluster a name
CLUSTER_NAME=example-cluster

# Number of machines in the cluster.
NUM_NODES=3
    
gcloud container clusters create $CLUSTER_NAME --num_nodes=$NUM_VMS
 

Instalación de minikube

Minikube crea un grupo local de máquinas virtuales para ejecutar Kubernetes. Es el método más sencillo para ensuciarse las manos con Kubernetes en su máquina local.

La documentación para Minikube se puede encontrar en http://kubernetes.io/docs/getting-started-guides/minikube/

Requerimientos

Para verificar si el soporte de virtualización está habilitado, ejecute el comando apropiado desde abajo. El comando producirá algo si la virtualización está habilitada.

# On Linux
cat /proc/cpuinfo | grep 'vmx\|svm'
# On OSX
sysctl -a | grep machdep.cpu.features | grep VMX
 

Instalación

Minikube es un solo binario. Por lo tanto, la instalación es tan fácil como descargar el binario y colocarlo en su ruta.

# Specify the version of minikube to download.
# Latest version can be retrieved from 
# https://github.com/kubernetes/minikube/releases
VERSION=v0.16.0

# If on Linux
OS=linux  
# If on OSX
# OS=darwin

# URL to download minikube binary from
URL=https://storage.googleapis.com/minikube/releases/$VERSION/minikube-$OS-amd64

# Download binary and place in path.
curl -Lo minikube $URL 
chmod +x minikube 
sudo mv minikube /usr/local/bin/
 

Uso

Para iniciar un nuevo cluster:

minikube start
 

Esto creará un nuevo grupo de máquinas virtuales locales con Kubernetes ya instalado y configurado.

Puedes acceder al panel de Kubernetes con:

minikube dashboard
 

Minikube crea un contexto relacionado para kubectl que se puede usar con:

kubectl config use-context minikube
 

Una vez listos, los Kubernetes locales pueden ser utilizados:

kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
kubectl expose deployment hello-minikube --type=NodePort
curl $(minikube service hello-minikube --url)
 

Para detener el clúster local:

minikube stop
 

Para eliminar el clúster local, observe que se asignará una nueva IP después de la creación:

minikube delete
 

Kubectl en linea de comando

Después de tener un clúster en ejecución, puede administrarlo con el comando kubectl . La mayoría de los comandos se pueden obtener con el comando kubectl --help , pero le muestro los comandos más comunes, para administrar y obtener información sobre su cluster, nodos, pods, servicios y etiquetas.


Para obtener información sobre el clúster puede utilizar el siguiente comando

kubectl cluster-info
 

Le mostrará la dirección de ejecución y el puerto.


Para obtener información breve sobre los nodos, pods, servicios, etc. o cualquier recurso que tenga lugar en el clúster, puede utilizar el siguiente comando

kubectl get {nodes, pods, services, ...}
 

La salida es principalmente una línea por recurso.


Para obtener una descripción detallada de los recursos, puede usar la bandera de describe para kubectl

kubectl describe {nodes, pods, ...}
 

Las aplicaciones implementadas solo son visibles dentro del clúster, por lo que si desea obtener la salida desde fuera del clúster, debe crear una ruta entre el terminal y el clúster kubernetes.

kubectl proxy
 

Se abrirá una API, donde podemos obtener todo desde el clúster. Si desea obtener el nombre de los pods para obtener información, debe usar el siguiente comando:

kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
 

Se enumerarán las vainas para su uso posterior.

curl http://localhost:8001/api/v1/proxy/namespaces/default/pods/{pod_name}/
 

Otros dos comandos comunes son los registros de obtención y la ejecución de un comando desde / en la aplicación en contenedor.

kubectl logs {pod_name}
kubectl exec {pod_name} {command}
 

La configuración de la finalización de la pestaña para su shell se puede hacer con:

source <(kubectl completion zsh)   # if you're using zsh
source <(kubectl completion bash)  # if you're using bash
 

o más programáticamente:

source <(kubectl completion "${0/-/}")