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