Búsqueda de sitios web

Cómo ejecutar Minikube en KVM (Libvirt)


Minikube es una herramienta desarrollada para ayudarlo a ejecutar un único clúster de Kubernetes en su máquina local. Minikube funciona iniciando un clúster de Kubernetes de un solo nodo localmente con fines de desarrollo y prueba. Empaqueta y configura una máquina virtual Linux, Docker y todos los componentes de Kubernetes, optimizados para el desarrollo local. En esta guía aprenderá a ejecutar Minikube en un entorno de virtualización KVM.

Similar :

  • Implementar un clúster de Kubernetes de producción con Ansible y Kubespray
  • Cómo ejecutar clústeres locales de Kubernetes en Docker
  • Implemente Kubernetes liviano con MicroK8 y Snap

Minikube admite funciones de Kubernetes como:

  • NS
  • Puertos de nodo
  • ConfigMaps y secretos
  • Paneles de control
  • Tiempo de ejecución de contenedores: Docker, CRI-O y contenedores
  • Habilitación de CNI (interfaz de red de contenedores)
  • Ingreso
  • Volúmenes persistentes de tipo hostPath

La mayoría de las configuraciones de Minikube disponibles en línea son para VirtualBox como hipervisor para la VM. Si eres un visitante frecuente de mi blog, debes haber notado que soy un gran admirador de KVM. Esta guía es para aquellos que quieren ejecutar Minikube pero en KVM.

Para usuarios de VirtualBox, siga la guía Cómo instalar Minikube en Ubuntu

Requisitos de configuración

Para ejecutar Minikube en KVM, necesita instalar algunas bibliotecas y controladores necesarios para la comunicación con la capa de virtualización. Estos son:

  • Máquina Docker: esta es una herramienta que le permite instalar Docker Engine en hosts virtuales y administrar los hosts con comandos de Docker-machine.
  • Docker Machine KVM2: Este es un controlador de complemento para Docker-machine en KVM.
  • Qemu y Libvirt: biblioteca API de hipervisor y virtualización
  • minikube y kubectl

Paso 1: Instalación de KVM – Libvirt y Qemu

Consulte nuestra guía en el siguiente enlace:

  • Instale KVM en CentOS/Ubuntu/Debian/SLES/Arch Linux

Paso 2: Instale la máquina Docker

La instalación de Docker Machine variará de una distribución a otra. Pero cuando haya agregado el repositorio comunitario de Docker a su sistema, puede instalar docker-machine desde el administrador de paquetes del sistema operativo. Nuestra guía sobre la instalación de Docker tiene un paso para agregar el repositorio:

  • Instale Docker CE en Ubuntu/Debian/Fedora/Arch/CentOS

También puedes echar un vistazo a la página oficial de la máquina Docker.

Paso 3: Descarga Minikube

Necesitas descargar el binario minikube. Pondré el binario en el directorio /usr/local/bin ya que está dentro de ` PATH.

wget https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube

Verifique la versión instalada.

$ minikube version
minikube version: v1.30.1
commit: 08896fd1dc362c097c925146c4a0d0dac715ace0

Para los usuarios de Arch Linux, pueden instalar minikube desde AUR:

yay -Sy minikube-bin

Paso 4: instalar kubectl

Necesitamos kubectl, que es una herramienta de línea de comandos que se utiliza para implementar y administrar aplicaciones en Kubernetes.

curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl

Asigne un bit ejecutable al archivo y muévalo a una ubicación en su RUTA.

chmod +x kubectl
sudo mv kubectl  /usr/local/bin/
kubectl version -o json 

Confirme la versión de kubectl instalada.

$ kubectl version -o json  --client
{
  "clientVersion": {
    "major": "1",
    "minor": "26",
    "gitVersion": "v1.26.1",
    "gitCommit": "8f94681cd294aa8cfd3407b8191f6c70214973a4",
    "gitTreeState": "clean",
    "buildDate": "2023-01-18T15:58:16Z",
    "goVersion": "go1.19.5",
    "compiler": "gc",
    "platform": "linux/amd64"
  },
  "kustomizeVersion": "v4.5.7"
}

Para los usuarios de Arch Linux, también pueden instalar esto desde AUR:

yay -Sy kubectl-bin
kubectl version

Paso 5: Instale el controlador KVM de Docker Machine

El último elemento a instalar es el controlador de la máquina Docker para KVM. Descarga el binario y hazlo ejecutable.

curl -LO https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2
chmod +x docker-machine-driver-kvm2
sudo mv docker-machine-driver-kvm2 /usr/local/bin/

El paquete está disponible en AUR para usuarios de Arch Linux:

yay -Sy docker-machine-driver-kvm2

Puedes confirmar la versión:

$ docker-machine-driver-kvm2 version
version: v1.28.0
commit: 986b1ebd987211ed16f8cc10aed7d2c42fc8392f

Paso 6: Iniciar Minikube en KVM

Con todos los componentes instalados, debería estar listo para iniciar minikube con el controlador KVM.

Agregue su cuenta de usuario al grupo libvirt:

sudo usermod -aG libvirt $USER
newgrp libvirt

Configure KVM como controlador predeterminado:

minikube config set vm-driver kvm2

El comando de inicio de minikube descargará la imagen de la VM y configurará el clúster de nodo único de Kubernetes por usted. ¡¡Trabajo fácil!!..

$ minikube start
...................................
😄  minikube v1.28.0 on linux (amd64)
💿  Downloading Minikube ISO ...
129.33 MB / 129.33 MB [============================================] 100.00% 0s
🔥  Creating kvm2 VM (CPUs=2, Memory=2048MB, Disk=20000MB) ...
😄  minikube v1.28.0 on linux (amd64)
🐳  Configuring environment for Kubernetes v1.25.3
💾  Downloading kubeadm v1.25.3
💾  Downloading kubelet v1.25.3
🚜  Pulling images ...
🚀  Launching Kubernetes ... 
⌛  Verifying: apiserver proxy etcd scheduler controller dns
🏄  Done! kubectl is now configured to use "minikube"

Espere a que finalice la descarga y la configuración y luego confirme que todo funciona bien. Debería ver una máquina virtual en ejecución con un dominio llamado minikube.

$ sudo virsh list
 Id   Name       State
--------------------------
 1    minikube   running

Operaciones básicas de Minikube

Verifique el estado del clúster:

$ kubectl cluster-info
Kubernetes master is running at https://192.168.39.188:8443
KubeDNS is running at https://192.168.39.188:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

El archivo de configuración de Minikube se encuentra en:

~/.minikube/machines/minikube/config.json

Para ver la configuración, utilice:

$ kubectl config view
......................
apiVersion: v1
clusters:
- cluster:
    certificate-authority: /root/.minikube/ca.crt
    extensions:
    - extension:
        last-update: Mon, 23 Jan 2023 23:27:59 EAT
        provider: minikube.sigs.k8s.io
        version: v1.28.0
      name: cluster_info
    server: https://192.168.39.107:8443
  name: minikube
contexts:
- context:
    cluster: minikube
    extensions:
    - extension:
        last-update: Mon, 23 Jan 2023 23:27:59 EAT
        provider: minikube.sigs.k8s.io
        version: v1.28.0
      name: context_info
    namespace: default
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: /root/.minikube/profiles/minikube/client.crt
    client-key: /root/.minikube/profiles/minikube/client.key

Verificar nodos:

$ kubectl get nodes
NAME       STATUS   ROLES           AGE    VERSION
minikube   Ready    control-plane   158m   v1.25.3

Acceda a minikube VM usando ssh:

$ minikube ssh
NAME       STATUS   ROLES           AGE    VERSION
minikube   Ready    control-plane   158m   v1.25.3
root@spinx01:~# minikube ssh
                         _             _
            _         _ ( )           ( )
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

$ cat /etc/os-release 
NAME=Buildroot
VERSION=2021.02.12-1-gb347f1c-dirty
ID=buildroot
VERSION_ID=2021.02.12
PRETTY_NAME="Buildroot 2021.02.12"

$ docker ps

Para detener un clúster de Kubernetes local en ejecución, ejecute:

$ minikube stop

Para eliminar un clúster de Kubernetes local, utilice:

$ minikube delete

Paso 7: habilite el panel de Kubernetes

Kubernete se entrega con un panel web que le permite administrar su clúster sin interactuar con una línea de comando. El complemento del panel está instalado y habilitado de forma predeterminada en minikube.

$ minikube addons list
...........................
|-----------------------------|----------|--------------|--------------------------------|
|         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador                  | minikube | disabled     | 3rd party (Ambassador)         |
| auto-pause                  | minikube | disabled     | Google                         |
| cloud-spanner               | minikube | disabled     | Google                         |
| csi-hostpath-driver         | minikube | disabled     | Kubernetes                     |
| dashboard                   | minikube | disabled     | Kubernetes                     |
| default-storageclass        | minikube | enabled ✅   | Kubernetes                     |
| efk                         | minikube | disabled     | 3rd party (Elastic)            |
| freshpod                    | minikube | disabled     | Google                         |
| gcp-auth                    | minikube | disabled     | Google                         |
| gvisor                      | minikube | disabled     | Google                         |
| headlamp                    | minikube | disabled     | 3rd party (kinvolk.io)         |
| helm-tiller                 | minikube | disabled     | 3rd party (Helm)               |
| inaccel                     | minikube | disabled     | 3rd party (InAccel             |
|                             |          |              | [[email ])            |
| ingress                     | minikube | disabled     | Kubernetes                     |
| ingress-dns                 | minikube | disabled     | Google                         |
| istio                       | minikube | disabled     | 3rd party (Istio)              |
| istio-provisioner           | minikube | disabled     | 3rd party (Istio)              |
| kong                        | minikube | disabled     | 3rd party (Kong HQ)            |
| kubevirt                    | minikube | disabled     | 3rd party (KubeVirt)           |
| logviewer                   | minikube | disabled     | 3rd party (unknown)            |
| metallb                     | minikube | disabled     | 3rd party (MetalLB)            |
| metrics-server              | minikube | disabled     | Kubernetes                     |
| nvidia-driver-installer     | minikube | disabled     | Google                         |
| nvidia-gpu-device-plugin    | minikube | disabled     | 3rd party (Nvidia)             |
| olm                         | minikube | disabled     | 3rd party (Operator Framework) |
| pod-security-policy         | minikube | disabled     | 3rd party (unknown)            |
| portainer                   | minikube | disabled     | 3rd party (Portainer.io)       |
| registry                    | minikube | disabled     | Google                         |
| registry-aliases            | minikube | disabled     | 3rd party (unknown)            |
| registry-creds              | minikube | disabled     | 3rd party (UPMC Enterprises)   |
| storage-provisioner         | minikube | enabled ✅   | Google                         |
| storage-provisioner-gluster | minikube | disabled     | 3rd party (Gluster)            |
| volumesnapshots             | minikube | disabled     | Kubernetes                     |
|-----------------------------|----------|--------------|--------------------------------|

Para abrir directamente en su navegador predeterminado, use:

$ minikube dashboard

Para obtener la URL del panel

$ minikube dashboard --url
http://192.168.39.117:30000

Abra el enlace en el navegador para acceder al Panel.

Limpiar:

$ minikube delete --all --purge

Lo siguiente que debe hacer es consultar las guías de introducción a Minikube como:

  • Serie Hola Minikube: https://kubernetes.io/docs/tutorials/stateless-application/hello-minikube/
  • Guías de Minikube para principiantes: https://kubernetes.io/docs/getting-started-guides/minikube/

Soluciones de almacenamiento:

  • Almacenamiento persistente para Kubernetes con Ceph RBD
  • Almacenamiento persistente Ceph para Kubernetes con Cephfs
  • Configure el aprovisionamiento dinámico de volúmenes de Kubernetes con Heketi y GlusterFS