OKD en la estación de trabajo Fedora con CRC

Este artículo lo guiará a través de la configuración de un clúster OKD de un solo nodo en su propio sistema Fedora Linux. OKD es la distribución comunitaria de Kubernetes. Esto se hará mediante CRC, también conocido como “OpenShift Local”. También explorará cómo funciona OKD internamente e instalará una aplicación a través de la consola web.

Presentando OKD

Los contenedores son omnipresentes en el mundo nativo de la nube actual yKubernetesse ha convertido en el estándar de facto para la orquestación de contenedores a escala. Sin embargo, Kubernetes no llega a ser una plataforma de contenedores completa. Por un lado, los desarrolladores deben familiarizarse con la terminología específica de Kubernetes y dominar la línea de comandos de kubectl para aprovechar su poder de manera efectiva. Por otro lado, los ingenieros de plataformas deben evaluar e integrar cuidadosamente componentes de terceros con Kubernetes para construir una plataforma de contenedores personalizada que aborde requisitos comerciales específicos y dedicar esfuerzos al mantenimiento continuo de esa plataforma. Entonces, ¿existe una solución que aborde ambos desafíos? Introduzca OKD!

OKD, también conocido como OpenShift Origin, es eldistribución comunitaria de Kubernetes que impulsa Red Hat OpenShift. Es de código abierto bajo la permisiva licencia Apache 2.0 en el mismo espíritu que Kubernetes. A diferencia de Kubernetes ascendente, es una plataforma de contenedores completa, una distribución de Kubernetes compatible con desarrolladores y operaciones. Para los desarrolladores, OKD se centra en la experiencia del desarrollador al proporcionar una consola web integrada y herramientas comofuente a imagen (S2I)que simplifican el flujo de trabajo del desarrollador y mejoran así la productividad del desarrollador. Para los ingenieros de plataformas, OKD proporciona una colección estandarizada de componentes diseñados para funcionar juntos como un todo con actualizaciones automatizadas y gestión del ciclo de vida tanto para componentes de nivel de aplicación como de clúster, simplificando así el mantenimiento de la plataforma.

CRC: ejecuta contenedores

CDN, también conocido como OpenShift Local, facilita la ejecución de OKD en una computadora portátil o de escritorio estándar. Su nombre es un acrónimo recursivo de “CRC – Runs Containers”. Este artículo lo guiará a través de la configuración de un clúster OKD de un solo nodo en su propia computadora portátil o de escritorio con CRC. También exploraremos cómo funciona OKD internamente e instalaremos una aplicación a través de la consola web.

Antes de comenzar, asegúrese de que su sistema cumpla con los siguientes requisitos mínimos:

  • Se recomienda la estación de trabajo Fedora 38+
  • 4 núcleos de CPU físicos (8 vCPU)
  • 16 GB de RAM
  • Al menos 35 GiB de almacenamiento disponible

Se supone una comprensión conceptual de los contenedores. La experiencia con contenedores y Kubernetes es útil, pero no obligatoria. ¿Entonces, Qué esperas? ¡Vamos a sumergirnos de lleno!

Instalación de dependencias de libvirt y NetworkManager para CRC

En Linux, CRC depende de libvirt y NetworkManager. Si es necesario, ejecute el siguiente comando en Fedora Workstation 38+:

$ sudo dnf install --refresh -y libvirt NetworkManager

Las dependencias varían según el sistema operativo. Si no utiliza Fedora Workstation 38+, consulte eldocumentación CDNpara detalles.

Descargando e instalando CRC

Descargue y extraiga el archivo tar más reciente para CRC desde la réplica de OpenShift (no se requiere suscripción):

$ wget https://developers.redhat.com/content-gateway/file/pub/openshift-v4/clients/crc/2.31.0/crc-linux-amd64.tar.xz
$ tar xvf crc-linux-amd64.tar.xz

Instale el binario crc en su RUTA:

$ mkdir -p "$HOME/.local/bin/"
$ install crc-linux-*-amd64/crc "$HOME/.local/bin/crc"

Cierre sesión y vuelva a iniciarla para asegurarse de que crc esté disponible en su RUTA.

Ahora verifique que CRC esté instalado correctamente:

$ crc version
CRC version: 2.31.0+6d23b6
OpenShift version: 4.14.7
Podman version: 4.4.4

Configurar e iniciar CRC

CRC solicita que los datos de telemetría se envíen a Red Hat la primera vez que se inicia, a menos que optemos explícitamente por no participar en la recopilación de telemetría de antemano:

$ crc config set consent-telemetry no

CRC apoya lo siguientePreajustes:

  • openshift: Plataforma de contenedores OpenShift
  • bien: bien
  • microcambio: Microcambio
  • podman: tiempo de ejecución del contenedor Podman

De forma predeterminada, se selecciona el ajuste preestablecido de OpenShift Container Platform. Cámbielo a OKD con el siguiente comando:

$ crc config set preset okd

Ejecute el subcomando de configuración que realiza la configuración a nivel de host para garantizar que CRC funcione correctamente cuando se inicie:

$ crc setup

Ahora llega el momento que estábamos esperando: ¡inicie CRC VM!

$ crc start

Esto demora aproximadamente entre 15 y 30 minutos, así que tome una taza de café y té mientras OKD gira.

Explorando OKD con la línea de comando oc

oc es el cliente de línea de comandos oficial de OKD. Si bien la consola web proporciona una interfaz de usuario fácil de usar para principiantes para realizar muchas operaciones comunes, algunas operaciones solo están disponibles en la línea de comandos. El uso de la línea de comandos nos permite comprender mejor OKD como una distribución de Kubernetes, por lo que comenzaremos interactuando con nuestro clúster OKD a través de la línea de comandos, introduciendo los conceptos básicos de Kubernetes involucrados en el camino. No te preocupes, exploraremos la consola web en un momento 🙂

CRC viene incluido con su propia copia de oc; póngala a disposición en nuestra RUTA:

$ eval $(crc oc-env)

Alternativamente, si lo desea, obtenga una copia de oc delEspejo OpenShifty colóquelo debajo de su RUTA.

Nodos

Un clúster de Kubernetes se compone de uno o más nodos. Cada nodo es una máquina física o virtual. Kubernetes es responsable de programar cargas de trabajo (contenedores) en los nodos apropiados para equilibrar el rendimiento de la aplicación y la utilización del nodo. El comando oc que se muestra a continuación devuelve una lista de todos los nodos en nuestro clúster OKD.

$ oc get nodes
NAME                 STATUS   ROLES                         AGE   VERSION
crc-d4g2s-master-0   Ready    control-plane,master,worker   44d   v1.27.6+d548052

oc informa 1 nodo en nuestro clúster OKD que es a la vez un nodo del plano de control y un nodo trabajador.

  • El plano de control es el "cerebro" del clúster y es responsable de gestionar el propio clúster. Es responsable de atender las solicitudes de los clientes de Kubernetes (desde oc o kubectl), programar cargas de trabajo, conciliar el estado del clúster y mantener la integridad de los metadatos del clúster. Por lo general, se compone de 3, 5 o 7 nodos del plano de control para una alta disponibilidad, según el tamaño total del clúster.
  • Los nodos trabajadores forman el "cuerpo" del clúster y son responsables de ejecutar cargas de trabajo de aplicaciones. Juntos forman el plano de datos.

Echemos un vistazo más de cerca a nuestro nodo mostrando campos adicionales (tenga en cuenta que estas líneas están ajustadas):

$ oc get nodes -o wide
NAME                 STATUS   ROLES                         AGE   VERSION           INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                        KERNEL-VERSION          CONTAINER-RUNTIME
crc-d4g2s-master-0   Ready    control-plane,master,worker   44d   v1.27.6+d548052   192.168.126.11   <none>        Fedora CoreOS 38.20231027.3.2   6.5.5-200.fc38.x86_64   cri-o://1.27.0

En particular, observe el campo OS-IMAGE que nos indica que nuestro nodo se está ejecutando.Fedora CoreOS (FCOS). FCOS es un sistema operativo optimizado para contenedores diseñado para ejecutar cargas de trabajo en contenedores a escala. OKD se integra profundamente con FCOS y requiere que todos los nodos del plano de control ejecuten FCOS mientras que los nodos trabajadores pueden ejecutarseServidor Fedoraen cambio. A través de la profunda integración con FCOS, OKD gestiona las actualizaciones del clúster y la gestión del ciclo de vida de los nodos de forma totalmente automatizada.

vainas

Los pods son la unidad atómica de informática en Kubernetes. Una cápsula contiene una colección de uno o más contenedores estrechamente acoplados y son de naturaleza efímera. La mayoría de los pods ejecutan cargas de trabajo de aplicaciones en el plano de datos, mientras que algunos pods ejecutan componentes a nivel de clúster en el plano de control.

Obtenga la cantidad total de pods que se ejecutan en nuestro clúster OKD:

$ oc get pods --all-namespaces --no-headers | wc -l
69

Esto nos lleva a nuestro siguiente concepto: espacios de nombres.

Espacios de nombres

Los espacios de nombres segregan las cargas de trabajo de Kubernetes por propósito para facilitar la categorización y la gestión del acceso. Piense en cada espacio de nombres como si representara una aplicación o proyecto único y coherente. OKD define un objeto API adicional conocido como proyectos, que son solo espacios de nombres con metadatos adicionales, como una descripción del proyecto, implementado con Kubernetes.anotaciones. En OKD, los proyectos y espacios de nombres siempre tienen una asignación 1 a 1, por lo que al crear un espacio de nombres se crea automáticamente el proyecto correspondiente y viceversa.

Vea los espacios de nombres existentes en nuestro clúster OKD:

$ oc get namespaces
NAME                                               STATUS   AGE
default                                            Active   44d
hostpath-provisioner                               Active   43d
kube-node-lease                                    Active   44d
kube-public                                        Active   44d
kube-system                                        Active   44d
openshift                                          Active   44d
openshift-apiserver                                Active   44d
openshift-apiserver-operator                       Active   44d
openshift-authentication                           Active   44d
openshift-authentication-operator                  Active   44d
openshift-cloud-controller-manager                 Active   44d
openshift-cloud-controller-manager-operator        Active   44d
openshift-cloud-credential-operator                Active   44d
openshift-cloud-network-config-controller          Active   44d
openshift-cluster-machine-approver                 Active   44d
openshift-cluster-samples-operator                 Active   44d
openshift-cluster-storage-operator                 Active   44d
openshift-cluster-version                          Active   44d
openshift-config                                   Active   44d
openshift-config-managed                           Active   44d
openshift-config-operator                          Active   44d
openshift-console                                  Active   44d
openshift-console-operator                         Active   44d
openshift-console-user-settings                    Active   44d
openshift-controller-manager                       Active   44d
openshift-controller-manager-operator              Active   44d
openshift-dns                                      Active   44d
openshift-dns-operator                             Active   44d
openshift-etcd                                     Active   44d
openshift-etcd-operator                            Active   44d
openshift-host-network                             Active   44d
openshift-image-registry                           Active   44d
openshift-infra                                    Active   44d
openshift-ingress                                  Active   44d
openshift-ingress-canary                           Active   44d
openshift-ingress-operator                         Active   44d
openshift-kni-infra                                Active   44d
openshift-kube-apiserver                           Active   44d
openshift-kube-apiserver-operator                  Active   44d
openshift-kube-controller-manager                  Active   44d
openshift-kube-controller-manager-operator         Active   44d
openshift-kube-scheduler                           Active   44d
openshift-kube-scheduler-operator                  Active   44d
openshift-kube-storage-version-migrator            Active   44d
openshift-kube-storage-version-migrator-operator   Active   44d
openshift-machine-api                              Active   44d
openshift-machine-config-operator                  Active   44d
openshift-marketplace                              Active   44d
openshift-monitoring                               Active   44d
openshift-multus                                   Active   44d
openshift-network-diagnostics                      Active   44d
openshift-network-node-identity                    Active   44d
openshift-network-operator                         Active   44d
openshift-node                                     Active   44d
openshift-nutanix-infra                            Active   44d
openshift-oauth-apiserver                          Active   44d
openshift-openstack-infra                          Active   44d
openshift-operator-lifecycle-manager               Active   44d
openshift-operators                                Active   44d
openshift-ovirt-infra                              Active   44d
openshift-route-controller-manager                 Active   44d
openshift-sdn                                      Active   44d
openshift-service-ca                               Active   44d
openshift-service-ca-operator                      Active   44d
openshift-user-workload-monitoring                 Active   44d
openshift-vsphere-infra                            Active   44d

4 de estos espacios de nombres son espacios de nombres del sistema reservados para Kubernetes:

  • por defecto
  • arrendar nodos
  • ser publico
  • ser un sistema

hostpath-provisioner contiene unconductor CSIpara el aprovisionamiento dinámico de almacenamiento en Kubernetes. Esto no se tratará en este artículo. El resto son espacios de nombres que comienzan con openshift*, que son espacios de nombres del sistema reservados para OKD.

Servicios

Los servicios exponen los Pods al resto del clúster y al mundo exterior. Los pods son de naturaleza efímera, por lo que los clientes externos y otros pods no pueden depender de la existencia continua de ningún pod en particular para la comunicación a nivel de red y aplicación. Los servicios abordan este problema proporcionando un punto de entrada estable para comunicarse con una aplicación particular representada por su colección dinámica y en constante cambio de pods.

Vea una lista de servicios en el espacio de nombres predeterminado (nuevamente, las siguientes tres líneas están ajustadas):

$ oc get services
NAME         TYPE           CLUSTER-IP   EXTERNAL-IP                            PORT(S)   AGE
kubernetes   ClusterIP      10.217.4.1   <none>                                 443/TCP   44d
openshift    ExternalName   <none>       kubernetes.default.svc.cluster.local   <none>    44d

El servicio de Kubernetes es responsable de servir la API de Kubernetes dentro del clúster. Esto permite que los pods que se ejecutan dentro del clúster consulten información del clúster e incluso programen nuevas cargas de trabajo en el clúster siempre que tengan los privilegios adecuados, de manera similar a cómo oc (o kubectl) interactúa con el clúster. El servicio openshift es simplemente un alias de kubernetes.

Pasemos ahora a la consola web, que es donde brilla OKD. Con OperatorHub integrado en la consola web, es fácil instalar aplicaciones con solo unos pocos clics. También tocaremos brevemente los conceptos deOperadores de Kubernetesimplementado en OKD usando elMarco del operador.

Instalación del operador de CD Argo en OperadorHub

En OKD, las aplicaciones son administradas por operadores que se instalan a través de OperatorHub, que está disponible a través de la consola web de OKD. Un operador es un controlador de software que codifica el conocimiento operativo humano para gestionar una aplicación particular y realizar estas tareas operativas de forma totalmente automatizada. Esto libera al administrador del clúster de la tarea mundana de administrar esa aplicación en particular y le permite concentrarse en tareas que brindan valor comercial real.

En la sección siguiente, instalaremos elOperador de CD Argoa través de la consola web de OKD.CD Argoes una herramienta de entrega continua de GitOps para Kubernetes que facilita las prácticas modernas de implementación de software, como las implementaciones azul-verde y canary. Una vez instalado, aprovecharemos el operador para crear una instancia de Argo CD sin esfuerzo aplicando un recurso personalizado de ArgoCD a nuestro clúster. A los efectos de este artículo no nos centraremos en Argo CD en sí.

Iniciar sesión en la consola web como administrador del clúster

Si cerró la ventana de su terminal en un paso anterior, abra una nueva ventana de terminal ahora y haga que oc esté disponible en su RUTA.

$ eval $(crc oc-env)

El administrador de clúster predeterminado en OKD es kubeadmin. Obtenga la contraseña de kubeadmin ejecutando el siguiente comando.

$ crc console --credentials

Ahora apunta tu navegador ahttps://console-openshift-console.apps-crc.testing, ignore las advertencias del certificado, escriba kubeadmin como nombre de usuario, copie la contraseña del resultado del comando de la consola crc anterior y haga clic en "Iniciar sesión".

Esto abre el panel del administrador. Siéntase libre de explorar los elementos del menú a la izquierda antes de continuar. En particular, eche un vistazo también a la perspectiva de Desarrollador haciendo clic en el menú desplegable "Administrador" en la parte superior izquierda.

Instalación del operador Argo CD a través de la consola web OKD

Ahora regrese al panel de administrador y seleccione "Operadores > OperadorHub" en el menú de la izquierda.

OKD - select OperatorHub

A continuación, busque "Argo CD" y seleccione el operador de Argo CD como se muestra en la siguiente captura de pantalla.

Search for Argo CD

Aparece una advertencia de que se trata de un operador comunitario que no es compatible con Red Hat. Reconozca la advertencia y haga clic en "Continuar".

Lea la descripción y haga clic en "Instalar".

Install the Argo CD operator

Deje las opciones en sus valores predeterminados y confirme su acción haciendo clic en "Instalar" una vez más.

Esto inicia la instalación del operador de CD Argo en su clúster. Espere unos momentos hasta que se complete la instalación, luego haga clic en "Ver operador" para ver los detalles del operador de Argo CD como se muestra a continuación.

Argo CD operator installed

Como se destaca en la captura de pantalla siguiente, el recurso personalizado que usaremos para crear nuestra instancia de Argo CD es ArgoCD.Definiciones de recursos personalizados (CRD)habilite funciones adicionales en Kubernetes ampliando la API de Kubernetes.

Argo CD operator details on OKD web console

Implementar nuestra instancia de Argo CD e iniciar sesión en la consola web de Argo CD

Para crear nuestro recurso personalizado ArgoCD, haga clic en el signo más en la parte superior derecha de la ventana y escriba el YAML apropiado como se muestra en la captura de pantalla a continuación, luego haga clic en "Crear": crearemos un espacio de nombres argocd e implementaremos nuestra instancia de Argo CD. allá.

Si le ayuda, aquí está el YAML exacto para aplicar a nuestro clúster:

---
apiVersion: v1
kind: Namespace
metadata:
  name: argocd
---
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
  name: argocd
  namespace: argocd

Esto es lo que debería ver si la operación fue exitosa.

Ahora regrese a la línea de comando y ejecute el siguiente comando para esperar a que la instancia de Argo CD esté lista.

$ oc -n argocd wait 
      --for=jsonpath="{.status.phase}"=Available 
      argocd.argoproj.io 
      argocd
argocd.argoproj.io/argocd condition met

La consola web de Argo CD está disponible como el servicio argocd-server, que es un ClusterIP de forma predeterminada y, por lo tanto, solo está disponible desde dentro del clúster. Reenvíe este servicio localmente y visitehttps://localhost:8443/en su navegador web. Ignore cualquier advertencia de certificado generada por su navegador.

$ oc -n argocd port-forward service/argocd-server 8443:443
Argo CD login page

Esto nos lleva a la página de inicio de sesión de Argo CD. El administrador predeterminado de Argo CD es admin, mientras que la contraseña se almacena en el clúster secreto de argocd. Extraiga la contraseña de administrador del secreto del clúster argocd abriendo una nueva ventana de terminal, haciendo que oc esté disponible en nuestra RUTA con el comando eval $(crc oc-env) y ejecutando oc extract:

$ oc -n argocd extract secret/argocd-cluster --to=-

Complete admin para el nombre de usuario y la contraseña extraída según el resultado del comando anterior, luego haga clic en "Iniciar sesión" para ingresar al panel de control de Argo CD.

Argo CD web dashboard

¡Felicitaciones, configuró exitosamente un clúster OKD de un solo nodo en su computadora portátil con CRC e instaló Argo CD a través del operador!

Comentarios finales y yendo más allá

Esperamos que haya disfrutado de este artículo y haya aprendido los conceptos básicos de Kubernetes mediante la configuración de un clúster OKD mínimo en su computadora portátil. Obtenga más información sobre OKD a través depágina web oficialy jugar conCD Argosiguiendo algunos de los tutoriales allí. Mientras tanto, no olvides consultarFedora CoreOStambién y aprende participando en el Fedora CoreOSdias de prueba!