Introducción
Kubernetes es una herramienta de gestión de contenedores de código abierto y gratuita. Se usa para implementar automáticamente aplicaciones basadas en contenedores en un entorno de clúster, además de para administrar contenedores Docker en hosts de clúster de Kubernetes. Kubernetes también se conoce como K8.
En esta guía, configuraremos el clúster de Kubernetes de dos nodos más simple posible. El primer nodo con el nombre de host kubernetes-master actuará como nodo principal.
El segundo nodo, con el nombre de host kubernetes-slave también ejecutará Ubuntu 18.04 será un nodo esclavo que simplemente se unirá al clúster de Kuberneets. Una vez que el clúster de Kubernetes esté en funcionamiento, se implementará un contenedor de servidor Nginx.
Si su intención es instalar Kubernetes en un servidor remoto, continúe leyendo; de lo contrario, si desea instalar Kubernetes en su computadora local, omita el primer párrafo "Conexión al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará la contraseña para la autenticación.
Para conectarse al servidor como root, escriba este comando:
ssh root@IP_DEL_SERVER
A continuación, se le pedirá que ingrese la contraseña del usuario root.
Si no usa el usuario root, puede iniciar sesión con otro nombre de usuario usando el mismo comando, luego cambie el primer parámetro:
ssh VOSTRO_UTENTE@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
Ahora está conectado a su servidor, está listo para comenzar a instalar Kubernetes en Ubuntu 18.04 LTS.
Instalar Docker
Instale Docker en ambos servidores Ubuntu, luego en kubernetes-master y kubernetes-slave. Docker está presente en los repositorios oficiales de Ubuntu.
Actualice la lista de paquetes de Ubuntu:
sudo apt-get update
Para instalar Docker, simplemente escriba desde la terminal:
sudo apt install docker.io
Una vez instalado, asegúrese de que el inicio automático esté habilitado después de reiniciar el servidor:
sudo systemctl enable docker
Instalar Kubernetes
Nuevamente, necesitamos instalar Kubernetes en todos los nodos. Luego, ejecute los siguientes comandos en ambos servidores (maestro y esclavo) para instalar Kubernetes:
Agrega la clave de firma de Kubernetes:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
Agregue el repositorio necesario para descargar Kubernetes:
sudo apt-add-repository "deb http://apt.kubernetes.io/kubernetes-xenial main"
Instalar kudeadm:
sudo apt install kubeadm
Kubernetes no funcionará si su sistema usa memoria de intercambio, por lo que debe deshabilitar la memoria de intercambio en todos sus nodos (maestro y esclavo):
sudo swapoff -a
Asegúrese de que todos los nodos tengan un nombre de host único. Luego, establezca el nombre de host en ambos nodos. El nodo principal con el nombre de host kubernetes-master:
sudo hostnamectl set-hostname kubernetes-master
El nodo secundario con nombre de host kubernetes-slave
sudo hostnamectl set-hostname kubernetes-slave
Actualización de Bash:
exec bash
Es importante configurar la fecha y la hora correctamente en todos los nodos, de lo contrario, puede haber problemas con los certificados TLS.
Configurar Kubernetes-master
Ahora estamos listos para inicializar el nodo maestro de Kubernetes. Para hacer esto, ejecute el siguiente comando en su nodo principal:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
Advertencia: se requieren al menos 2 CPU para inicializar el nodo principal, si no tiene 2 CPU, puede agregar el indicador --ignore-preflight-errors = NumCPU para continuar sin errores. No debe usarse en un servidor de producción, solo para pruebas.
Entonces:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
Advertencia: Copie la última parte del mensaje de salida de inicialización del nodo maestro de Kubernetes, ya que se necesita un comando más adelante para acceder desde el nodo esclavo de Kubernetes.
Ejecute estos comandos sugeridos por la inicialización de Kubernetes con un usuario no root con privilegios de sudo:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
El siguiente paso es implementar una red de pods. La red de pod se utiliza para la comunicación entre nodos dentro del clúster de Kubernetes. Para ello usaremos la red de vainas Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Utilice el siguiente comando para confirmar el estado:
kubectl get pods --all-namespaces
Configurar esclavo de Kubernetes
Ahora podemos conectarnos con el nodo esclavo al clúster de Kubernetes. Utilice el comando kubeadm join copiado anteriormente del resultado de inicialización de kubernetes-master: Advertencia: no copie el siguiente código de ejemplo, no funcionará en su servidor.
sudo kubeadm join 10.1.1.9:6443 --token qdjnpd.5glu39uxr92xarsj --discovery-token-ca-cert-hash sha256:ed0684156c718caf425ceae6c85a56c05f7b49037cde3a2f1fd57430a4f58f89
Puede tomar varios minutos.
En el nodo principal de Kubernetes-master, emita el siguiente comando para confirmar la conexión con el nodo de kubernetes-esclavo:
kubectl get nodes
Implementar un servicio en el clúster de Kubernetes
Para verificar la implementación, puede usar Nginx en el clúster de Kubernetes. Ejecute estos comandos desde el nodo principal, kubernetes-master:
kubectl run nginx --image=nginx --port 80
kubectl expose deploy nginx --port 80 --target-port 80 --type NodePort
Ahora debería ver un nuevo contenedor acoplable Nginx en el nodo secundario, esclavo:
sudo docker ps
Para confirmar que el servicio Nginx está en funcionamiento, enumere todos los servicios disponibles en el nodo principal y use el comando curl para realizar una solicitud HTTP en la IP del clúster:
kubectl get svc
Debería recibir un mensaje de salida similar al siguiente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5m52s
nginx NodePort 10.103.44.31 <none> 80:new_nginx_port/TCP 2m50s
Para verificar que todo está funcionando, conéctese a la dirección IP del nodo secundario, kubernetes-slave, usando el puerto que se muestra en el resultado anterior. Debería ver la página de bienvenida de Nginx:
http://INDIRIZZO_IP_NODO_SLAVE:new_nginx_port
Si desea eliminar la aplicación Nginx, primero elimine el servicio Nginx del nodo raíz:
kubectl delete service nginx
Para garantizar la eliminación del servicio, emita el siguiente comando:
kubectl get services
Debería recibir un mensaje de salida similar al siguiente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9m59s
Luego, para eliminar la distribución de Nginx:
kubectl delete deployment nginx
Comando de confirmación:
kubectl get deployments
Debería recibir un mensaje de salida similar al siguiente:
No resources found.
La instalación y configuración de Kubernetes en Ubuntu 18.04 LTS ha finalizado