Los contenedores son una buena opción para agrupar y ejecutar nuestras propias aplicaciones. Cuando el número de contenedores aumenta rápidamente y es necesario gestionarlos de forma cómoda. Esa es la razón por la que viene Kubernetes. Kubernetes (K8s) es un sistema de código abierto para automatizar la implementación, el escalado y la gestión de aplicaciones y servicios en contenedores.
El clúster de Kubernetes contiene nodos maestros y trabajadores. El nodo maestro controla y gestiona un grupo de nodos trabajadores. Puede tener varios nodos maestros para clústeres de alta disponibilidad.
Este tutorial muestra cómo instalar un Clúster de Kubernetes con kubeadm encendido Ubuntu 20.04.
Preparando el entorno
- Utilice 2 hosts Linux con Ubuntu 20.04
Configuración de direcciones IP estáticas para el nodo maestro y el nodo trabajador
– Nodo maestro: 192.168.1.11
– Nodo trabajador: 192.168.1.12
- Configure el nombre de host para cada máquina
Usaremos node-1 como maestro y node-2 como nodo trabajador.
$ sudo hostnamectl set-hostname node-1
$ sudo hostnamectl set-hostname node-2
- Deshabilitar la memoria de intercambio en cada nodo de ubuntu
$ sudo swapoff -a
Agregar repositorio de Kubernetes
Kubernetes no está disponible en el repositorio predeterminado de Ubuntu, así que debes agregarlo manualmente.
Tanto en el nodo maestro como en el trabajador realice lo siguiente:
Agregar la clave de firma de Kubernetes de la siguiente manera:
$ sudo -i
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
Luego, agregue el repositorio de Kubernetes, ejecute:
$ echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
$ sudo mv ~/kubernetes.list /etc/apt/sources.list.d
$ sudo apt update
Instalación de herramientas de Kubernetes
En esta sección, instalaremos Kubeadm, cri-o, Kubelet y Kubernetes-cni. Todas estas herramientas deben instalarse en tanto los nodos maestros como los trabajadores.
Asegúrese de instalar la versión recomendada y compatible. Aquí estamos instalando la versión 1.18 de Kubernetes y crio.
Instalar Kubeadm
Kubeadm es una herramienta que forma parte del proyecto Kubernetes que ayuda a inicializar el clúster de Kubernetes.
En este tutorial, vamos a instalar kubeadm versión 1.18.0-00, escriba:
$ sudo apt install -y kubeadm=1.18.0-00 --allow-unauthenticated
Nota: puede encontrar la versión específica con el siguiente comando:
$ curl -s https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages | grep Version | awk '{print $2}'
Instalar Kubectl
Kubectl
es la herramienta de línea de comandos de Kubernetes. Le permite ejecutar comandos en los clústeres de Kubernetes. Puede usar kubectl para implementar aplicaciones, administrar recursos del clúster y ver registros.
Instale kubectl v1.18.0-00 con el siguiente comando:
$ sudo apt install -y kubectl=1.18.0-00 --allow-unauthenticated
Instalar CRI-O
CRI-O es una interfaz de tiempo de ejecución de contenedor (CRI) compatible con OCI. El tiempo de ejecución más utilizado es Docker. Desde el lanzamiento de Kubernetes 1.20, la corrección de la interfaz de tiempo de ejecución del contenedor (CRI) para Docker está obsoleta. Docker produce imágenes que no son una imagen OCI (Open Container Initiative).
Debemos usar el tiempo de ejecución de contenedor compatible con OCI para extraer y ejecutar imágenes de OCI, especialmente si usa servicios de Kubernetes como GKE, EKS o AKS.
Todavía puede usar Docker, luego instalar usando sudo apt-get install docker.io
Aquí lo usaré créalo que es un tiempo de ejecución compatible. Mantenga la versión cri-o coincidente con la versión de Kubernetes.
Asegúrate de instalar el versión compatible.
Primer uso modprobe
comando para cargar el cubrir y br_netfilter módulos tanto en el nodo maestro como en el trabajador:
$ sudo modprobe overlay
$ sudo modprobe br_netfilter
Luego, cree un archivo de configuración sysctl para habilitar el reenvío de IP y la configuración de netfilter durante los reinicios insertando las siguientes líneas en /etc/sysctl.d/99-kubernetes-cri.conf
archivo en el nodo maestro y trabajador:
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
Aplique el archivo de configuración ejecutando:
$ sudo sysctl --system
Ahora, especificamos el sistema operativo Ubuntu y la versión cri-o de la siguiente manera:
$ sudo -i
# export OS=xUbuntu_20.04
# export VERSION=1.18
Luego ejecute los siguientes comandos como root
usuario:
# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
# curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | apt-key add -
# curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | apt-key add -
# apt update
# apt install cri-o cri-o-runc
Una vez finalizada la instalación, conmon Se instaló la utilidad (Monitoreo de contenedores). Encuentra el camino de conmon:
$ which conmon
/usr/bin/conmon
Edita el /etc/crio/crio.conf
archivo de la siguiente manera:
...
# Path to the conmon binary, used for monitoring the OCI runtime.
conmon = "/usr/bin/conmon" #<-- Edit this line. Around line 108
...
registries = [ #<-- Edit and add registries. Around line 351
"docker.io",
"quay.io",
]
....
Habilite cri-o y asegúrese de que se esté ejecutando:
$ sudo systemctl daemon-reload
$ sudo systemctl enable crio
$ sudo systemctl start crio
$ sudo systemctl status crio
Producción:
● crio.service - Container Runtime Interface for OCI (CRI-O)
Loaded: loaded (/usr/lib/systemd/system/crio.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-12-10 15:46:37 UTC; 3 days ago
Docs: https://github.com/cri-o/cri-o
...
Instalar Kubelet
Kubelet es un agente que se ejecuta en cada nodo y es responsable de hablar con el servidor API en el nodo maestro y de impulsar el tiempo de ejecución del contenedor para iniciar las cargas de trabajo.
Configurar kubelet
para entender cómo interactuar con cri-o insertando la siguiente línea para /etc/default/kubelet
Archivo:
KUBELET_EXTRA_ARGS=--feature-gates="AllAlpha=false,RunAsGroup=true" --container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint="unix:///var/run/crio/crio.sock" --runtime-request-timeout=5m
Tanto en el nodo maestro como en el trabajador, ejecute el siguiente comando para instalar kubelet
:
$ sudo apt install -y kubelet=1.18.0-00 --allow-unauthenticated
Instalar Kubernetes-cni
Para habilitar la red de contenedores en el clúster, tenemos que instalar kubernetes-cni
.
Ejecute el siguiente comando:
$ sudo apt-get install -y kubernetes-cni --allow-unauthenticated
Implementar el clúster de Kubernetes
La implementación del clúster de Kubernetes consta de 2 pasos. El primer paso sería inicializar el nodo maestro y el segundo paso es unir el nodo trabajador al clúster.
Inicializar nodo maestro
Para inicializar Kubernetes en Nodo maestro, escribe:
$ sudo kubeadm init --apiserver-advertise-address=192.168.1.11 --pod-network-cidr=10.244.0.0/16
Tardará unos minutos en terminar. Una vez que se realizó la inicialización, el terminal mostrará la salida de la siguiente manera:

Tome nota de la línea para unirse al clúster marcado arriba, la usará en el siguiente paso para unir nodo trabajador a clúster.
Ahora, ejecute el siguiente comando para crear el directorio de configuración de Kubernetes en el nodo principal:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
A continuación, implemente una red de pod para agrupar:
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Verificación de que todos los componentes del plano de control se hayan instalado correctamente:
$ kubectl get pod --all-namespaces

Unir el nodo trabajador al clúster
Ahora inicie sesión en el nodo trabajador y únase al nodo trabajador al clúster.
En la máquina del nodo trabajador, ejecute el siguiente comando:
$ sudo kubeadm join 192.168.1.11:6443 --token 9ii02d.nsmrmu1asascv2yg
--discovery-token-ca-cert-hash sha256:1104bf70b03a2d030ffc0a462f9dbcbcdd9975393e9a9ac2a1f18500f1b6b74e
Una vez finalizado el proceso de unión, vuelva al nodo principal y ejecute:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
node-1 Ready master 2m37s v1.18.0
node-2 Ready none 22s v1.18.0
Para obtener más información sobre el nodo, escriba:
$ kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node-1 Ready master 9h v1.18.0 10.2.0.4 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
node-2 Ready none 9h v1.18.0 10.2.0.5 Ubuntu 20.04.1 LTS 5.4.0-1029-gcp cri-o://1.18.4
Los resultados muestran detalles del nodo maestro y los nodos que se han unido al clúster.
Lea también: Cómo instalar Kubernetes localmente usando Vagrant / Minikube
Conclusión
A medida que la contenedorización se está volviendo popular, la necesidad de administrar cargas de trabajo y servicios en contenedores hace que Kubernetes sea tan popular. La mayoría de los principales proveedores de nube comenzaron a admitir Kubernetes administrado, lo que hace la vida más fácil.
Kubernetes es completamente gratuito y se puede descargar en cualquier momento desde su repositorio. Espero que haya disfrutado de la instalación de Kubernetes en Ubuntu. Puede intentar implementar aplicaciones como MySQL o WordPress en el clúster K8.
Gracias por leer y deje su sugerencia en la sección de comentarios a continuación.