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.
Preparación del 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 el nodo 1 como maestro y el nodo 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, por lo que debe agregarlo manualmente.
Tanto en el nodo principal 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 nodos maestros y 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, 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
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 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 (Open Container Initiative).
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 docker, 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, usa modprobe
comando para cargar la superposición y br_netfilter módulos en el nodo 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.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 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, el común Se instaló la utilidad (Supervisión de contenedores). Encuentra la ruta de acceso común:
$ which conmon
/usr/bin/conmon
Edite 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 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
Salida:
● 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.
Configurar kubelet
para entender cómo interactuar con cri-o insertando la siguiente línea en /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
En los nodos Maestro y 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, debemos 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 nodo maestro , 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á el resultado 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 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 principal 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 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.
Kubernetes es completamente gratuito y se puede descargar en cualquier momento desde su repositorio. Espero que hayas disfrutado instalando Kubernetes en Ubuntu. Puede intentar implementar aplicaciones como MySQL o WordPress en el clúster K8.
Gracias por leer y por favor deje su sugerencia en la sección de comentarios a continuación.