Detalles de instalación

SUSE® Rancher Prime Continuous Delivery se puede instalar en dos modos: instalación de clúster único y instalación de clúster múltiple.

  • Instalación de clúster único: Recomendado para empezar. Este modo ejecuta tanto el Fleet manager como el Fleet agent en el mismo clúster.

  • Instalación de clúster múltiple: Utilizado para gestionar múltiples clústeres descendentes desde un gestor central.

Estática

En la configuración de clúster único, el mismo clúster ejecuta tanto el Fleet manager como el Fleet agent. El clúster se conecta directamente al servidor Git para desplegar recursos localmente. Esta es una configuración simple, soportada en producción, ideal para desarrollo, pruebas y uso a pequeña escala.

Requisitos previos

Helm 3

Fleet se distribuye como un chart de Helm. Helm 3 es una CLI que se ejecuta únicamente en el cliente, sin componente en el servidor. Para instalar Helm 3, sigue las instrucciones oficiales en guía de instalación de Helm.

Kubernetes

SUSE® Rancher Prime Continuous Delivery se ejecuta como un controlador en un clúster de Kubernetes existente. Para una configuración de clúster único, instala SUSE® Rancher Prime Continuous Delivery en el mismo clúster que pretendes gestionar con GitOps. SUSE® Rancher Prime Continuous Delivery soporta cualquier versión de Kubernetes soportada por la comunidad, típicamente {versions.next.kubernetes} o posterior.

Instalación por defecto

Instala los siguientes charts de Helm para configurar SUSE® Rancher Prime Continuous Delivery.

SUSE® Rancher Prime Continuous Delivery en Rancher Rancher incluye charts de Helm separados para SUSE® Rancher Prime Continuous Delivery y utiliza un repositorio diferente.

  1. Añade el repositorio de Fleet Helm

    helm repo add fleet https://rancher.github.io/fleet-helm-charts/
  2. Instala el Fleet CustomResourceDefinitions`

    helm -n cattle-fleet-system install --create-namespace --wait fleet-crd \
        fleet/fleet-crd
  3. Instala los controladores de Fleet

helm -n cattle-fleet-system install --create-namespace --wait fleet \
    fleet/fleet

Verifica la instalación

Ejecuta los siguientes comandos para verificar que los pods del controlador SUSE® Rancher Prime Continuous Delivery están en funcionamiento:

kubectl -n cattle-fleet-system logs -l app=fleet-controller
kubectl -n cattle-fleet-system get pods -l app=fleet-controller

Resultado de ejemplo:

NAME                                READY   STATUS    RESTARTS   AGE
fleet-controller-64f49d756b-n57wq   1/1     Running   0          3m21s

Ahora puedes registrar repositorios de Git en el espacio de nombres fleet-local para comenzar a desplegar recursos.

Ajustando tu instalación de SUSE® Rancher Prime Continuous Delivery

Réplicas de Controlador y Agente

A partir de SUSE® Rancher Prime Continuous Delivery v0.13, el chart de Helm expone configuraciones de recuento de réplicas para cada tipo de controlador y el agente:

  • controller.replicas : Controla los pods fleet-controller que gestionan paquetes, clústeres y grupos.

  • gitjob.replicas : Controla la reconciliación de GitOps GitRepo.

  • helmops.replicas : Controla el controlador experimental de HelmOps.

  • agent.replicas : Controla el agente de Fleet.

Cada uno tiene como valor predeterminado una réplica.

Habilitando imagescan

La función imagescan está desactivada por defecto, lo que significa que:

  • los bloques imageScans no vacíos en tus archivos de configuración fleet.yaml o equivalentes provocarán errores de creación de paquetes, visibles en el estado de tu GitRepo.

  • el controlador de imagescan no se ejecutará, por lo tanto, los repositorios referenciados en los bloques imageScan de fleet.yaml o archivos de configuración equivalentes no serán monitoreados para nuevas imágenes. Esto también significa que las etiquetas de imagen referenciadas en tus manifiestos con anotaciones como image: <image>:<tag> # {"$imagescan": "test-scan"} no se expandirán.

Para remediar esto, instala Fleet con --set imagescan.enabled=true.

Hosts conocidos adicionales de SSH

Al interactuar con repositorios de git a través de SSH, las comprobaciones estrictas de claves de host están habilitadas por defecto, lo que significa que SUSE® Rancher Prime Continuous Delivery rechazará los intentos de conexión SSH a hosts para los cuales no existe una entrada known_hosts.

Para más información, consulta comprobaciones estrictas de claves de host.

Por defecto, Fleet instala entradas known_hosts para algunos proveedores de alojamiento de git ampliamente utilizados.

Las huellas digitales de claves de host añadidas al mapa de configuración son, respectivamente:

Sin embargo, al utilizar una configuración de alojamiento de git diferente, como servidores privados alojados por ti o tu empresa, las entradas para esos servidores pueden añadirse a Fleet en el momento de la instalación utilizando el valor de Helm additionalKnownHosts, que admite un array de cadenas. Cada elemento de ese array sería una entrada adicional, por ejemplo:

helm -n cattle-fleet-system install --create-namespace --wait fleet fleet/fleet \
  --set additionalKnownHosts={'ourgitserver.company ssh-rsa <fingerprint>','our-other-git-server.company ssh-ed25519 <fingerprint2>'}

Instalación Multi-Controlador: Sharding

Distribución

A partir de la versión 0.10, SUSE® Rancher Prime Continuous Delivery admite sharding estático. Cada shard se define por un ID de fragmento único. Puedes asignar opcionalmente un selector de nodo para que todos los pods de controlador para ese shard se ejecuten en nodos específicos.

Instala SUSE® Rancher Prime Continuous Delivery con las siguientes opciones de Helm:

  • --set shards[$index].id=$shard_id

  • --set shards[$index].nodeSelector.$key=$value

Ejemplo:

helm -n cattle-fleet-system install --create-namespace --wait fleet fleet/fleet \
  --set shards[0].id=foo \
  --set shards[0].nodeSelector."kubernetes\.io/hostname"=k3d-upstream-server-0 \
  --set shards[1].id=bar \
  --set shards[1].nodeSelector."kubernetes\.io/hostname"=k3d-upstream-server-1 \
  --set shards[2].id=baz \
  --set shards[2].nodeSelector."kubernetes\.io/hostname"=k3d-upstream-server-2

Verifica los controladores SUSE® Rancher Prime Continuous Delivery y los pods de GitJob:

kubectl -n cattle-fleet-system get pods -l app=fleet-controller \
  -o=custom-columns='Name:.metadata.name,Shard-ID:.metadata.labels.fleet\.cattle\.io/shard-id,Node:spec.nodeName'
Name                                          Shard-ID   Node
fleet-controller-b4c469c85-rj2q8                         k3d-upstream-server-2
fleet-controller-shard-bar-5f5999958f-nt4bm   bar        k3d-upstream-server-1
fleet-controller-shard-baz-75c8587898-2wkk9   baz        k3d-upstream-server-2
fleet-controller-shard-foo-55478fb9d8-42q2f   foo        k3d-upstream-server-0

De manera similar para los pods de GitJob:

kubectl -n cattle-fleet-system get pods -l app=gitjob \
  -o=custom-columns='Name:.metadata.name,Shard-ID:.metadata.labels.fleet\.cattle\.io/shard-id,Node:spec.nodeName'

Cómo funciona

Cada controlador de Fleet procesa recursos etiquetados con su ID de shard. El controlador no fragmentado gestiona todos los recursos sin un ID de fragmento.

Para desplegar un GitRepo en un fragmento específico, añade la etiqueta fleet.cattle.io/shard-ref al recurso.

Ejemplo:

apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
  name: sharding-test
  labels:
    fleet.cattle.io/shard-ref: foo
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - single-cluster/helm

Un GitRepo con un ID de fragmento conocido (por ejemplo, foo) es procesado por ese controlador. Los IDs de fragmento desconocidos (por ejemplo, boo) son ignorados.

Para añadir o eliminar fragmentos, vuelve a desplegar SUSE® Rancher Prime Continuous Delivery con una lista de fragmentos actualizada.

Configuración para Multi-Clúster

Los clústeres descendentes en Rancher se registran automáticamente en SUSE® Rancher Prime Continuous Delivery. La configuración a continuación se aplica únicamente a SUSE® Rancher Prime Continuous Delivery independiente y no ha sido evaluada en QA por Rancher.

Los pasos de instalación son idénticos a una configuración de clúster único. Después de instalar el gestor de Fleet, registra los clústeres remotos manualmente. Para el registro iniciado por el gestor, se requieren detalles adicionales del servidor API. Sin ellos, solo es posible el registro iniciado por el agente.

URL del servidor API y certificado CA

El gestor de Fleet requiere acceso al servidor API de Kubernetes. Los agentes utilizan la URL del servidor API y el certificado CA para comunicarse de forma segura.

Obtén estos valores de tu archivo kubeconfig ($HOME/.kube/config):

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTi...
    server: https://example.com:6443

Extraer certificado CA

El campo certificate-authority-data está codificado en Base64. Decodifícalo y guárdalo en un archivo:

base64 -d encoded-file > ca.pem

Utiliza este comando para extraer todas las CA:

kubectl config view -o json --raw | jq -r '.clusters[].cluster["certificate-authority-data"]' | base64 -d > ca.pem

Para kubeconfigs de múltiples clústeres:

kubectl config view -o json --raw | jq -r '.clusters[] | select(.name=="CLUSTERNAME").cluster["certificate-authority-data"]' | base64 -d > ca.pem

Extraer el servidor API

API_SERVER_URL=$(kubectl config view -o json --raw | jq -r '.clusters[] | select(.name=="CLUSTER").cluster["server"]')
API_SERVER_CA="ca.pem"

Validar

Verifica la URL del servidor API:

curl -fLk "$API_SERVER_URL/version"

Salida esperada: Información de versión JSON o un error de 401 Unauthorized.

Luego valida el certificado CA:

curl -fL --cacert "$API_SERVER_CA" "$API_SERVER_URL/version"

Deberías ver JSON válido o un mensaje de 401 Unauthorized. Si obtienes un error SSL, el archivo CA es incorrecto.

Ejemplo de archivo CA (ca.pem):

-----BEGIN CERTIFICATE-----
MIIBVjCB/qADAgECAgEAMAoGCCqGSM49BAMCMCMxITAfBgNVBAMMGGszcy1zZXJ2
ZXItY2FAMTU5ODM5MDQ0NzAeFw0yMDA4MjUyMTIwNDdaFw0zMDA4MjMyMTIwNDda
...
-----END CERTIFICATE-----

Instalar para Multi-Clúster

Asume que la URL del servidor API es https://example.com:6443 y el CA está en ca.pem. Si tu servidor API utiliza un CA bien conocido, omite el parámetro CA.

API_SERVER_URL="https://example.com:6443"
API_SERVER_CA="ca.pem"

Luego instala los charts de Fleet:

helm repo add fleet https://rancher.github.io/fleet-helm-charts/

Instalar Definiciones de Recursos Personalizados:

helm -n cattle-fleet-system install --create-namespace --wait \
    fleet-crd fleet/fleet-crd

Instalar controladores de Fleet:

helm -n cattle-fleet-system install --create-namespace --wait \
    --set apiServerURL="$API_SERVER_URL" \
    --set-file apiServerCA="$API_SERVER_CA" \
    fleet fleet/fleet

Verificar

kubectl -n cattle-fleet-system logs -l app=fleet-controller
kubectl -n cattle-fleet-system get pods -l app=fleet-controller
NAME                                READY   STATUS    RESTARTS   AGE
fleet-controller-64f49d756b-n57wq   1/1     Running   0          3m21s

En este punto, el gestor de Fleet debería estar listo. Ahora puedes registrar clústeres y añadir repositorios de Git.