Lo haremos con Kubeadm. La página de referencia es "https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/".
En otra entrada explicaremos la instalación y uso de otro laboratorio que usamos habitualmente en nuestras pruebas: Minikube.
Configuración
Para la realización de este pequeño manual hemos utilizado un Ubuntu Server (18.04 de 64 bits), sin entorno gráfico, virtualizado sobre VirtualBox. Consultar la página oficial de descargas de Ubuntu.
No nos detenemos en la instalación ya que es la habitual de cualquier iso sobre VirtualBox.
Kubeadm
Según la documentación, los requerimientos de instalación son los siguientes:
- Ubuntu, CentOS, Debian....
- 2 GB de RAM
- 2 CPU's
- Conexión de red.
Comencemos
Instalación
Fijamos una ip para nuestro ubuntu virtualizado. En la vesión 18.04 se puede hacer mediante netplan. En nuestro caso creamos el fichero "/etc/netplan/01-netcfg.yaml" e introducimos la siguiente configuración:
Aplicamossudo netplan apply
podemos validar con "ifconfig" de forma que vemos la ip configurada.
Más adelante usaremos la ip configurada (192.168.1.70) en el arranque de kubeadm.
Instalamos Docker. Para ello ejecutamos:
sudo apt-get update
sudo apt-get install -y docker.io
Validamos ejecutando "sudo docker version", lo cual devuelve, en el momento de hacer esta entrada
Client:
Version: 17.12.1-ce
API version: 1.35
...
Ahora instalamos
- kubeadm: el comando para levantar nuestro cluster de prueba
- kubelet: el daemon que corre en cada nodo del cluster y permite el arranque de pods, etc...
- kubectl: el cliente que permite hablar con nuestro cluster
Lanzamos los siguientes comandos
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
Creamos el fichero siguiente:
sudo vi /etc/apt/sources.list.d/kubernetes.list
añadimos
deb http://apt.kubernetes.io/ kubernetes-xenial main
y grabamos (:wq + enter)
Finalmente
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
Inicio
Habilitamos el servicio docker
sudo systemctl enable docker.service
Deshabilitamos swap (espacio de intercambio), en otro caso no nos arrancará
sudo swapoff -a
Arrancamos informando la ip fijada más arriba
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.1.70 --ignore-preflight-errors=all
conifiguramos kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Instalamos Calico como proveedor de red
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
sudo systemctl enable docker.service
Deshabilitamos swap (espacio de intercambio), en otro caso no nos arrancará
sudo swapoff -a
Arrancamos informando la ip fijada más arriba
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.1.70 --ignore-preflight-errors=all
conifiguramos kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Instalamos Calico como proveedor de red
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
Revisamos
watch kubectl get pods --all-namespaces
Cuando veamos todos los pods en running proseguimos (Ctrl + c)
En un entorno real, en el nodo master no deberíamos instalar ningún pod. Sin embargo, al ser un entorno de test, hemos de habilitar esta posibilidad (deshabilitada por defecto)
sudo kubectl taint nodes --all node-role.kubernetes.io/master-
Nos devuelve "node/ubuntu18system untainted".
Vemos los nodos activos
sudo kubectl get nodes -o wide
Si hubiésemos de configurar un entorno real con más nodos, en el arranque de kubeadm se indica como deberíamos proceder para hacer el join del resto de nodos. En nuestro caso nos aparece el siguiente log:
You can now join any number of machines by running the following on each node as root:
kubeadm join 192.168.1.70:6443 --token 7z00kz.h3zrsijjih4hf3cg --discovery-token-ca-cert-hash sha256:97540b4036babb5c314c02b82fd6319b24eba3a2f4e987bde860b43b7d0ef4ce
Prueba
Finalmente validaremos la instalación de una imagen, levantando un pod y accediendo desde nuestro windows.
Utilizaremos una imagen nginx para ello.
Creamos el deployment
kubectl create deployment nginx --image=nginx
Creamos el servicio exponiendo el puerto 80
kubectl create svc nodeport nginx --tcp=80:80
Revisamos deployment y servicio con
kubectl get deployments
kubectl get svc
Vemos la ip y puerto que nuestro kubeadm ha generado para el servicio
kubectl describe service nginx
Ahora, para poder acceder desde nuestro windows al pod del kubeadm dentro del ubuntu virtualizado en Virtual Box hemos de recoger todos los datos necesarios y realizar dos configuraciones extras:
sudo kubectl port-forward svc/nginx 90:80
dentro de ubuntu podemos validar ahora que accedemos a nginx con
curl -v http://127.0.0.1:90
Como se puede ver, hemos configurado el acceso a nginx.
También un acceso ssh para trabajar de forma más cómoda (putty...) en la consola ubuntu.
Ahora ya podemos ver nuestro pod nginx desde windows con http://localhost:90
Más info
Se puede encontrar más información en los siguientes enlaces:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
https://kubernetes.io/docs/concepts/cluster-administration/addons/
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/
Port forward en kubernetes
https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/
Configuración estática ip en ubuntu
https://websiteforstudents.com/configure-static-ip-addresses-on-ubuntu-18-04-beta/
watch kubectl get pods --all-namespaces
Cuando veamos todos los pods en running proseguimos (Ctrl + c)
En un entorno real, en el nodo master no deberíamos instalar ningún pod. Sin embargo, al ser un entorno de test, hemos de habilitar esta posibilidad (deshabilitada por defecto)
sudo kubectl taint nodes --all node-role.kubernetes.io/master-
Nos devuelve "node/ubuntu18system untainted".
Vemos los nodos activos
sudo kubectl get nodes -o wide
Si hubiésemos de configurar un entorno real con más nodos, en el arranque de kubeadm se indica como deberíamos proceder para hacer el join del resto de nodos. En nuestro caso nos aparece el siguiente log:
You can now join any number of machines by running the following on each node as root:
kubeadm join 192.168.1.70:6443 --token 7z00kz.h3zrsijjih4hf3cg --discovery-token-ca-cert-hash sha256:97540b4036babb5c314c02b82fd6319b24eba3a2f4e987bde860b43b7d0ef4ce
No lanzaremos dicho comando en ningún lugar ya que sólo estamos configurando un único nodo.
Finalmente validaremos la instalación de una imagen, levantando un pod y accediendo desde nuestro windows.
Utilizaremos una imagen nginx para ello.
Creamos el deployment
kubectl create deployment nginx --image=nginx
Creamos el servicio exponiendo el puerto 80
kubectl create svc nodeport nginx --tcp=80:80
Revisamos deployment y servicio con
kubectl get deployments
kubectl get svc
Vemos la ip y puerto que nuestro kubeadm ha generado para el servicio
kubectl describe service nginx
Ahora, para poder acceder desde nuestro windows al pod del kubeadm dentro del ubuntu virtualizado en Virtual Box hemos de recoger todos los datos necesarios y realizar dos configuraciones extras:
- Port forward dentro de ubuntu
sudo kubectl port-forward svc/nginx 90:80
dentro de ubuntu podemos validar ahora que accedemos a nginx con
curl -v http://127.0.0.1:90
- Ahora, configuramos reenvío de puertos en nuestro VirtualBox:
Como se puede ver, hemos configurado el acceso a nginx.
También un acceso ssh para trabajar de forma más cómoda (putty...) en la consola ubuntu.
Ahora ya podemos ver nuestro pod nginx desde windows con http://localhost:90
Más info
Se puede encontrar más información en los siguientes enlaces:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
https://kubernetes.io/docs/concepts/cluster-administration/addons/
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/
Port forward en kubernetes
https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/
Configuración estática ip en ubuntu
https://websiteforstudents.com/configure-static-ip-addresses-on-ubuntu-18-04-beta/
No hay comentarios:
Publicar un comentario