GNU/Linux >> Tutoriales Linux >  >> Linux

Clúster de Kubernetes usando K3S con Multipass de Canonical

Esta es otra entrada de cuaderno relacionada con Kubernetes en la que documentaré el procedimiento para configurar un clúster de Kubernetes usando K3S en máquinas virtuales creadas con Multipass de Canonical. Además, describiré cómo configurar kubectl, la herramienta de administración de clústeres de la línea de comandos de Kubernetes para administrar el clúster de K3S desde fuera de las máquinas virtuales en las que se ejecutará el clúster.

Multipass se puede ejecutar en Windows, Mac OS X y Linux, por lo que el procedimiento descrito en este artículo debería aplicarse a todos los entornos mencionados anteriormente, aunque solo lo he probado en Mac OS X.

Antecedentes

El lector astuto recordará un artículo mío reciente en el que describí cómo ejecutar un clúster de Kubernetes en Docker y puede preguntarse por qué ahora pasé a K3S en lugar de Kind.
Hay dos razones para esto:

  • K3S afirma estar listo para la producción.
    Tal vez no esté lista para la producción a escala de Google, pero sospecho que es suficiente para mis necesidades.
  • K3S es más similar a un clúster de Kubernetes real.
    Durante el poco tiempo que he estado trabajando con Kind, encontré dos problemas que me hicieron echar un vistazo a K3S:
  • – El tipo de clúster no se puede reiniciar.
  • – Kind no admite el tipo LoadBalancer.

Requisitos

Para prepararme para K3S, instalaré un par de herramientas que necesitaré y luego crearé las máquinas virtuales en las que se ejecutará K3S.

Herramientas

Antes de instalar K3S, es necesario instalar las siguientes herramientas en la computadora que actuará como host para las máquinas virtuales:

  • Multipase
    Máquina virtual de Canonical en la que se pueden ejecutar instancias de Ubuntu.
    Las instrucciones sobre cómo instalar Multipass se pueden encontrar aquí.
  • kubectl
    Como antes, kubectl es la herramienta de administración de clústeres de la línea de comandos de Kubernetes.
    Puede encontrar instrucciones sobre cómo instalar kubectl aquí.

Máquinas virtuales

Crearé un clúster de Kubernetes que consta de dos nodos; un maestro y un agente. Para esto necesitaré dos máquinas virtuales.

Habiendo instalado Multipass, abra una ventana de terminal:

  • Cree e inicie la máquina virtual del nodo principal:
multipass launch --name k3s-master --mem 4G --disk 5G 18.04
multipass launch --name k3s-agent --mem 4G --disk 5G 18.04
  • Verifique las dos máquinas virtuales:
multipass list

El resultado debe ser similar al siguiente:

Name                    State             IPv4             Image
k3s-agent               Running           192.168.64.10    Ubuntu 18.04 LTS
k3s-master              Running           192.168.64.7     Ubuntu 18.04 LTS

Anote la dirección IP del k3s-master; la necesitará más adelante cuando instale K3S en el nodo del agente.

Instalar K3S

A continuación, se describe cómo instalar K3S en los nodos maestro y agente.

Instalar K3S en el nodo principal

En este paso, instalaremos K3S en el nodo maestro y recuperaremos el token del nodo maestro que luego necesitaremos para crear un nodo K3S que será administrado por el administrador.

  • Abra una ventana de terminal si es necesario.
  • Abra un shell en la máquina virtual k3s-master:
multipass shell k3s-master
curl -sfL https://get.k3s.io | sh -

En la consola debería aparecer una salida similar a la siguiente:

[INFO]  Finding latest release
[INFO]  Using v1.17.4+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
chcon: can't apply partial context to unlabeled file '/usr/local/bin/k3s'
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s

Verifique la instalación de K3S:

k3s -version

por lo que la salida del comando anterior se ve así:

k3s version v1.17.4+k3s1 (3eee8ac3)

Recupere el token del nodo maestro:

sudo cat /var/lib/rancher/k3s/server/node-token
K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8

Salga del shell de máquina virtual k3s-master:

exit

Instalar K3S en el nodo del agente

Con la dirección IP y el token de nodo del maestro K3S, ahora estoy listo para instalar K3S en el nodo del agente:

  • Abra una ventana de terminal si es necesario.
  • Abra un shell en la máquina virtual k3s-agent:
multipass shell k3s-agent
  • Instale la última versión de K3S para un nodo de agente.
    Reemplace la dirección IP del k3s-master en la variable K3S_URL y el token de nodo en la variable K3S_TOKEN:
curl -sfL https://get.k3s.io | K3S_URL="https://192.168.64.7:6443" K3S_TOKEN="K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8" sh -

Una salida similar a esta debería aparecer en la consola:

[INFO]  Finding latest release
[INFO]  Using v1.17.4+k3s1 as release
[INFO]  Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
chcon: can't apply partial context to unlabeled file '/usr/local/bin/k3s'
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-agent-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO]  systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO]  systemd: Starting k3s-agent

Salga del shell de la máquina virtual k3s-agent:

exit

Verificar el clúster

Antes de configurar kubectl en el host de VM de Multipass (o en otro lugar, fuera de las máquinas virtuales de K3S), quiero verificar rápidamente que el clúster de K3S esté configurado correctamente.

  • Abra una ventana de terminal si es necesario.
  • Abra un shell en la máquina virtual k3s-master:
multipass shell k3s-master

Enumere los nodos en el clúster:

sudo kubectl get nodes -o wide

En mi caso, la lista de nodos se ve así:

NAME         STATUS   ROLES    AGE     VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
k3s-agent    Ready    <none>   5m31s   v1.17.4+k3s1   192.168.64.10   <none>        Ubuntu 18.04.4 LTS   4.15.0-91-generic   containerd://1.3.3-k3s2
k3s-master   Ready    master   39m     v1.17.4+k3s1   192.168.64.7    <none>        Ubuntu 18.04.4 LTS   4.15.0-91-generic   containerd://1.3.3-k3s2
exit

Configurar kubectl externo

Con el clúster de K3S en funcionamiento, ahora configuraré kubectl que instalé en el host de VM, que es mi computadora de desarrollo, para poder administrar el clúster de K3S.

Recuperar la configuración de kubectl del nodo principal

Para poder configurar una herramienta de administración de kubectl externa para administrar el clúster de K3S recién creado, copio la configuración de kubectl del nodo maestro y luego realizo algunas modificaciones:

  • Abra una ventana de terminal si es necesario.
  • Abra un shell en la máquina virtual k3s-master:

multipass shell k3s-master

  • Ver la configuración de kubectl del nodo principal:

sudo kubectl config view

En mi caso, se ve así:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: ea3527757bd8c5c9ae8dbb00fef7595c
    username: admin

Tenga en cuenta que su archivo de configuración no será idéntico al anterior; la contraseña será diferente, por ejemplo.

  • Salga del shell de máquina virtual k3s-master:

exit

Reemplazar configuración de kubectl

Ahora puedo reemplazar la configuración de kubectl en el host de VM con una versión modificada de la configuración de kubectl del nodo maestro:

  • Abra una ventana de terminal si es necesario.
  • Edite, o cree, si no existe, la configuración local de kubectl:

vi ~/.kube/config

  • Reemplace el contenido, si lo hay, con la configuración de kubectl del nodo maestro.
  • Cambie la dirección IP del clúster a la dirección IP de la máquina virtual k3s-master y configure para omitir la verificación de TLS.
    El resultado se verá así, con las líneas 4 y 5 modificadas:
apiVersion: v1
clusters:
- cluster:
    insecure-skip-tls-verify: true
    server: https://192.168.64.7:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    password: ea3527757bd8c5c9ae8dbb00fef7595c
    username: admin
  • Guarde la configuración y salga de vi:
    :wq
  • Verifique la configuración:

kubectl get nodes

Los mismos nodos que aparecen en la lista desde el interior del nodo maestro también deberían aparecer ahora, aunque en una lista más compacta:

NAME         STATUS   ROLES    AGE   VERSION
k3s-master   Ready    master   66m   v1.17.4+k3s1
k3s-agent    Ready    <none>   32m   v1.17.4+k3s1

Reiniciar un clúster de K3S

Como en la introducción, una de las razones para cambiar de Kind a K3S es la capacidad de poder reiniciar un clúster K3S. Si necesito interrumpir mi trabajo relacionado con Kubernetes, simplemente apago mi computadora, que es el host de las máquinas virtuales K3S. Cuando luego reinicie la computadora, todo lo que tengo que hacer para reiniciar el clúster K3S y restaurarlo a su estado anterior es reiniciar las máquinas virtuales del clúster con los siguientes dos comandos:

multipass start k3s-master

multipass start k3s-agent


Linux
  1. ¿Qué es Kubernetes? Guía completa

  2. Cómo configurar un clúster de Kubernetes con Rancher

  3. Cómo implementar Redis Cluster en Kubernetes

  4. Cómo implementar su primer pod en un clúster de Kubernetes

  5. Configurar el clúster de Kubernetes con Rancher

Cómo crear un clúster de Kubernetes con AWS CLI

Cómo implementar el clúster de Kubernetes en AWS con Amazon EKS

Comience a aprender Kubernetes desde su máquina local

Creación de un clúster de Kubernetes de plano de control único con kubeadm

Utilizando Grafana y Prometheus Kubernetes Cluster Monitoring

Cómo instalar el clúster de Kubernetes en CentOS 8