Kubernetes - Metodos de instalación (On-Premise sobre VMs)


Hola mundo!!!!!

Hace tiempo que no escribo y ahora, con este estado de confinamiento que tenemos en España, y también a nivel mundial, he tenido tiempo de hacer algunos cursos y quiero plasmar en esta publicación los conocimiento que voy adquiriendo a modo de apuntes.

Instalación de Kubernetes (sobre VMs) 

Ha cambiado mucho la cosas desde el año 2016 en el que escribía cómo montar el Cluster Kubernetes On-Premise. Ahora hay herramientas que lo han automatizado mucho y vamos a usar una de ellas.

He generado dos VMs (Ubuntu 18.04 LTS Minimal) con 30 GB de disco cada una. Las IPs de las vms son:

Nombre IP
controller 10.240.0.11 
worker-0 10.240.0.20
worker-1 10.240.0.21

Instalación de las aplicaciones necesarias

Es necesario que los servidores donde vayamos a instalar los componentes del Cluster tenga el swap desactivado (swappoff -a).


apt update -y && apt upgrade -y && apt install vim iptuils-ping -y
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

apt update
apt install docker.io kubelet kubeadm kubectl  -y
apt-mark hold docker.io kubelet kubeadm kubectl


swapoff -a

systemctl enable kubelet.service

systemctl enable docker.service


Lanzar la creación del Cluster (kubeadm)

Por medio de la herramienta Kubeadm vamos a generar nuestro el Control Plane de nuestro Cluster Kubernetes desde cero. La herramienta sigue el siguiente proceso por defecto:
  1. Inicializa la herramienta. (init)
  2. Comprueba que la VMs tenga los recursos necesarios para continuar.
  3. Crea una autoridad certificadora. (Autofirmada, se puede configurar para que haga uso de de un PKI externo). Estos certificados aseguran la API, las comunicaciones, los usuarios, etc.
  4. Genera los ficheros de configuración (kubeconfig files). Estos ficheros son los que usaremos para conectarnos al Cluster.
    • Los ficheros se generan en /etc/kubernetes
      • admin.conf (Superuser del Cluster)
      • kubelet.conf (Configuración del kubelet del nodo maestro)
      • controller-manager.conf
      • scheduler.conf
  5. Genera los pods estáticos (son los pods que forman el control plane). Más tarde, nuestro kubelet se encargará de poner en marcha estos pods. Esta manera de hacerlo, con el kubelet,  permite la ejecución de los Pods cuando todavía no tenemos el Cluster Kubernetes montado.
    • Los ficheros se generan en /etc/kubernetes/manifest
      • etcd
      • API Server
      • Controller Manager
      • Scheduler
  6. Arranca el control plane del nuevo Cluster. (API, etcd, etc)
  7. Configura las reglas de tipo taint para permitir que en el nodo Master solo se ejecuten ciertos Pods, sólo los pods del sistema y no del usuario.
  8. Se genera un bootstrap token para poder añadir nuevos nodos al cluster.
  9. Arranca los pods que forman parte de los addons del Cluster. (kube-proxy o DNS)
Inicialización del Cluster:
  • En el controller
    • kubeadm init --pod-network-cidr 192.168.0.0/16
    • mkdir -p $HOME/.kube
    • cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • chown $(id -u):$(id -g) $HOME/.kube/config
    • curl https://docs.projectcalico.org/manifests/calico.yaml -O
    • kubectl apply -f calico.yaml
  • En los nodos
    • kubeadm join 10.240.0.11:6443 --token 6hoae5.qua4h3k0o5cjx4gh --discovery-token-ca-cert-hash sha256:4d2df9fb97482915769677s6sgs96136549a53495671
Comprobar todo:

kubectl get node
NAME         STATUS   ROLES    AGE     VERSION
controller   Ready    master   5m45s   v1.18.0
worker-0     Ready    <none>   2m13s   v1.18.0
worker-1     Ready    <none>   80s     v1.18.0

Ficheros generados en el controller











Kubeadm admite parámetros adicionales que nos permiten crear el Cluster con parámetros/opciones que modifiquen nuestra implantación.


Puertos de los servicios trasversales al Cluster









Puertos en los nodos del Cluster

... si que ha cambiado la cosa!!!!





Comentarios

Entradas populares