Cómo instalar Kubernetes en Ubuntu 20.04 | Ubuntu 20.10

Cómo instalar Kubernetes en Ubuntu 20.04 | Ubuntu 20.10

 

Los contenedores son una buena opción para agrupar y ejecutar nuestras propias aplicaciones. Cuando la cantidad de contenedores aumenta rápidamente y necesita administrarlos de manera conveniente. 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 administra 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 en Ubuntu 20.04.

Preparando el Ambiente

  • Use 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

  • Configurar el nombre de host para cada máquina

Usaremos el nodo 1 como maestro y el nodo 2 como nodo trabajador.

$ sudo hostnamectl set-hostname node-1
$ sudo hostnamectl set-hostname node-2
  • Deshabilite 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, por lo que debe 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 http://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 los nodos principal y trabajador .

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, instalaremos la versión 1.18.0-00 de kubeadm, 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

Kubectles 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 de 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 compatible con OCI (CRI). El tiempo de ejecución más utilizado es Docker. Desde el lanzamiento de Kubernetes 1.20, la corrección de compatibilidad 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 (Iniciativa de contenedor abierto).

Deberíamos usar el tiempo de ejecución del contenedor compatible con OCI para extraer y ejecutar imágenes OCI, especialmente si usa servicios de Kubernetes como GKE, EKS o AKS.

Todavía puede usar la ventana acoplable, luego instalar usando sudo apt-get install docker.io

Aquí usaré cri-o, que es un tiempo de ejecución compatible. Mantenga la versión de cri-o coincidente con la versión de Kubernetes.

Asegúrese de instalar la versión compatible .

Primero, use modprobeel comando para cargar los módulos de superposición y br_netfilter en los nodos Maestro y 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 del filtro de red durante los reinicios insertando las siguientes líneas en /etc/sysctl.d/99-kubernetes-cri.confel 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 rootusuario:

# echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
# echo "deb http://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, se instaló la utilidad común (Container Monitoring). Encuentre la ruta de acceso común:

$ which conmon

/usr/bin/conmon

Edite el /etc/crio/crio.confarchivo 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 el cri-o y asegúrese de que esté funcionando:

$ 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 comunicarse con el servidor de la API en el nodo principal y de impulsar el tiempo de ejecución del contenedor para iniciar las cargas de trabajo.

Configure kubeletpara comprender cómo interactuar con cri-o insertando la siguiente línea en el /etc/default/kubeletarchivo:

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

Implementación del clúster de Kubernetes

La implementación del clúster de Kubernetes implica 2 pasos. El primer paso sería inicializar el nodo maestro y el segundo paso sería unir el nodo trabajador al clúster.

Inicializar nodo maestro

Para inicializar Kubernetes en el nodo principal , escriba:

$ 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 realizada la inicialización, el terminal mostrará la salida de la siguiente manera:

Tome nota de la línea para unirse al clúster marcada arriba, la usará en el siguiente paso para unir el nodo trabajador al 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 módulos en el clúster:

$ 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 maestro 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.

Conclusión

A medida que la contenedorización se vuelve 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 la nube comenzaron a admitir Kubernetes administrados, lo que facilita la vida.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.