Creación de una ampliación

Para desplegar cargas de trabajo en clústeres en sentido descendente, primero crea un repositorio de Git, luego crea un recurso GitRepo y aplícalo.

Este tutorial utiliza el repositorio fleet-examples.

Para más detalles sobre cómo estructurar el repositorio y configurar la ampliación de cada bundle, consulta GitRepo Contents. Para más detalles sobre las opciones disponibles por repositorio de Git, consulta Agregar un GitRepo.

Ejemplos de un solo clúster

Todos los ejemplos desplegarán contenido en clústeres sin personalizaciones por clúster. Este es un buen punto de partida para entender los conceptos básicos de estructurar repositorios de Git paraSUSE® Rancher Prime Continuous Delivery.

  • Helm

  • Helm Multi Chart

  • Helm y Kustomize

  • Kustomize

  • Manifiestos

Un ejemplo utilizando Helm. Estamos desplegando el ejemplo de helm en el clúster local.

El repositorio contiene un gráfico de helm y un fleet.yaml opcional para configurar la ampliación:

fleet.yaml
namespace: fleet-helm-example

# Custom helm options
helm:
  # The release name to use. If empty a generated release name will be used
  releaseName: guestbook

  # The directory of the chart in the repo.  Also any valid go-getter supported
  # URL can be used there is specify where to download the chart from.
  # If repo below is set this value if the chart name in the repo
  chart: ""

  # An https to a valid Helm repository to download the chart from
  repo: ""

  # Used if repo is set to look up the version of the chart
  version: ""

  # Force recreate resource that can not be updated
  force: false

  # How long for helm to wait for the release to be active. If the value
  # is less that or equal to zero, we will not wait in Helm
  timeoutSeconds: 0

  # Custom values that will be passed as values.yaml to the installation
  values:
    replicas: 2

Un ejemplo que despliega múltiples gráficos desde un solo repositorio. Esto es similar al ejemplo anterior, pero desplegará tres gráficos de helm desde las subcarpetas, cada uno configurado por su propio fleet.yaml.

kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
  name: helm
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - single-cluster/helm-multi-chart
EOF

Un ejemplo utilizando Kustomize para modificar un gráfico de Helm de terceros. Desplegará la aplicación de ejemplo de Kubernetes guestbook empaquetada como un gráfico de Helm descargado de una fuente de terceros y modificará el gráfico de helm utilizando Kustomize. La aplicación se desplegará en el espacio de nombres fleet-helm-kustomize-example.

kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
  name: helm
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - single-cluster/helm-kustomize
EOF

Ten en cuenta que el fleet.yaml tiene una clave kustomize: para especificar la vía al kustomization.yaml requerido:

fleet.yaml
kustomize:
  # To use a kustomization.yaml different from the one in the root folder
  dir: ""
kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
  name: helm
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - single-cluster/kustomize
EOF
kubectl apply -n fleet-local -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
  name: helm
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - single-cluster/manifests
EOF

Ejemplos de múltiples clústeres

Los ejemplos a continuación desplegarán un repositorio git múltiple en varios clústeres a la vez y configurarán la aplicación de manera diferente para cada objetivo.

  • Helm

  • Helm Externo

  • Helm y Kustomize

  • Kustomize

  • Manifiestos

Un ejemplo utilizando Helm. Estamos desplegando el ejemplo de helm y personalizándolo por clúster objetivo.

El repositorio contiene un gráfico de helm y un fleet.yaml opcional para configurar la ampliación. El fleet.yaml se utiliza para configurar diferentes opciones de ampliación, dependiendo de las etiquetas del clúster:

fleet.yaml
namespace: fleet-mc-helm-example
targetCustomizations:
- name: dev
  helm:
    values:
      replication: false
  clusterSelector:
    matchLabels:
      env: dev

- name: test
  helm:
    values:
      replicas: 3
  clusterSelector:
    matchLabels:
      env: test

- name: prod
  helm:
    values:
      serviceType: LoadBalancer
      replicas: 3
  clusterSelector:
    matchLabels:
      env: prod

Para crear la ampliación, aplicamos el recurso personalizado al clúster en sentido ascendente. El espacio de nombres fleet-default, por defecto, contiene los recursos del clúster en sentido descendente. El gráfico se desplegará en todos los clústeres en el espacio de nombres fleet-default, que tienen recursos de clúster etiquetados que coinciden con cualquier entrada bajo targets:.

gitrepo.yaml
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
  name: helm
  namespace: fleet-default
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - multi-cluster/helm
  targets:
  - name: dev
    clusterSelector:
      matchLabels:
        env: dev

  - name: test
    clusterSelector:
      matchLabels:
        env: test

  - name: prod
    clusterSelector:
      matchLabels:
        env: prod

Al aplicar el recurso gitrepo al clúster en sentido ascendente, fleet comenzará a monitorear el repositorio y crear despliegues:

kubectl apply -n fleet-default -f gitrepo.yaml

Para crear la ampliación, aplicamos el recurso personalizado al clúster en sentido ascendente. El espacio de nombres fleet-default, por defecto, contiene los recursos del clúster en sentido descendente. El gráfico se desplegará en todos los clústeres en el espacio de nombres fleet-default, que tienen recursos de clúster etiquetados que coinciden con cualquier entrada bajo targets:.

gitrepo.yaml
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
  name: helm-external
  namespace: fleet-default
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - multi-cluster/helm-external
  targets:
  - name: dev
    clusterSelector:
      matchLabels:
        env: dev

  - name: test
    clusterSelector:
      matchLabels:
        env: test

  - name: prod
    clusterSelector:
      matchLabels:
        env: prod

Al aplicar el recurso gitrepo al clúster en sentido ascendente, fleet comenzará a monitorear el repositorio y crear despliegues:

kubectl apply -n fleet-default -f gitrepo.yaml

Un ejemplo utilizando Kustomize para modificar un gráfico de Helm de terceros. Desplegará la aplicación de ejemplo de Kubernetes guestbook empaquetada como un gráfico de Helm descargado de una fuente de terceros y modificará el gráfico de Helm utilizando Kustomize. La aplicación se desplegará en el espacio de nombres fleet-helm-kustomize-example.

La aplicación se personalizará de la siguiente manera por entorno:

  • Clústeres de desarrollo: Solo se despliega el líder de redis y no los seguidores.

  • Clústeres de prueba: Escala la ampliación frontal a 3

  • Clústeres de producción: Escala la ampliación frontal a 3 y establece el tipo de servicio en LoadBalancer

    El fleet.yaml se utiliza para controlar qué superposiciones se utilizan, dependiendo de las etiquetas del clúster:

    fleet.yaml
    namespace: fleet-mc-kustomize-example
    targetCustomizations:
    - name: dev
      clusterSelector:
        matchLabels:
          env: dev
      kustomize:
        dir: overlays/dev
    
    - name: test
      clusterSelector:
        matchLabels:
          env: test
      kustomize:
        dir: overlays/test
    
    - name: prod
      clusterSelector:
        matchLabels:
          env: prod
      kustomize:
        dir: overlays/prod

    Para crear la ampliación, aplicamos el recurso personalizado al clúster de origen. El espacio de nombres fleet-default, por defecto, contiene los recursos del clúster de destino. El gráfico se desplegará en todos los clústeres en el espacio de nombres fleet-default, que tienen recursos de clúster etiquetados que coinciden con cualquier entrada bajo targets:.

    gitrepo.yaml
    kind: GitRepo
    apiVersion: fleet.cattle.io/v1alpha1
    metadata:
      name: helm-kustomize
      namespace: fleet-default
    spec:
      repo: https://github.com/rancher/fleet-examples
      paths:
      - multi-cluster/helm-kustomize
      targets:
      - name: dev
        clusterSelector:
          matchLabels:
            env: dev
    
      - name: test
        clusterSelector:
          matchLabels:
            env: test
    
      - name: prod
        clusterSelector:
          matchLabels:
            env: prod

    Al aplicar el recurso gitrepo al clúster de origen, fleet comenzará a monitorear el repositorio y crear despliegues:

    kubectl apply -n fleet-default -f gitrepo.yaml

Un ejemplo utilizando Kustomize y personalizándolo por clúster objetivo.

La personalización en fleet.yaml es idéntica al ejemplo de "Helm & Kustomize".

Para crear la ampliación, aplicamos el recurso personalizado al clúster en sentido ascendente. El espacio de nombres fleet-default, por defecto, contiene los recursos del clúster en sentido descendente. El gráfico se desplegará en todos los clústeres en el espacio de nombres fleet-default, que tienen recursos de clúster etiquetados que coinciden con cualquier entrada bajo targets:.

kubectl apply -n fleet-default -f - <<EOF
kind: GitRepo
apiVersion: fleet.cattle.io/v1alpha1
metadata:
  name: kustomize
  namespace: fleet-default
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - multi-cluster/kustomize
  targets:
  - name: dev
    clusterSelector:
      matchLabels:
        env: dev

  - name: test
    clusterSelector:
      matchLabels:
        env: test

  - name: prod
    clusterSelector:
      matchLabels:
        env: prod
EOF

Al aplicar el recurso gitrepo al clúster en sentido ascendente, fleet comenzará a monitorear el repositorio y crear despliegues:

Un ejemplo utilizando YAML de Kubernetes en bruto y personalizándolo por clúster objetivo. La aplicación se personalizará de la siguiente manera por entorno:

  • Clústeres de desarrollo: Solo se despliega el líder de redis y no los seguidores.

  • Clústeres de prueba: Escala la ampliación frontal a 3

  • Clústeres de producción: Escala la ampliación frontal a 3 y establece el tipo de servicio en LoadBalancer

    El fleet.yaml se utiliza para controlar qué superposiciones 'yaml' se utilizan, dependiendo de las etiquetas del clúster:

    fleet.yaml
    namespace: fleet-mc-manifest-example
    targetCustomizations:
    - name: dev
      clusterSelector:
        matchLabels:
          env: dev
      yaml:
        overlays:
        # Refers to overlays/noreplication folder
        - noreplication
    
    - name: test
      clusterSelector:
        matchLabels:
          env: test
      yaml:
        overlays:
        # Refers to overlays/scale3 folder
        - scale3
    
    - name: prod
      clusterSelector:
        matchLabels:
          env: prod
      yaml:
        # Refers to overlays/servicelb, scale3 folders
        overlays:
        - servicelb
        - scale3

    Para crear la ampliación, aplicamos el recurso personalizado al clúster en sentido ascendente. El espacio de nombres fleet-default, por defecto, contiene los recursos del clúster en sentido descendente. El gráfico se desplegará en todos los clústeres en el espacio de nombres fleet-default, que tienen recursos de clúster etiquetados que coinciden con cualquier entrada bajo targets:.

    gitrepo.yaml
    kind: GitRepo
    apiVersion: fleet.cattle.io/v1alpha1
    metadata:
      name: manifests
      namespace: fleet-default
    spec:
      repo: https://github.com/rancher/fleet-examples
      paths:
      - multi-cluster/manifests
      targets:
      - name: dev
        clusterSelector:
          matchLabels:
            env: dev
    
      - name: test
        clusterSelector:
          matchLabels:
            env: test
    
      - name: prod
        clusterSelector:
          matchLabels:
            env: prod
    kubectl apply -n fleet-default -f gitrepo.yaml