Ejecuta la herramienta previa a la actualización

En este documento, se muestra cómo ejecutar una herramienta independiente en preparación para una actualización. Antes de actualizar un clúster de administrador o de usuario que se encuentre en la versión 1.9 y versiones posteriores de Google Distributed Cloud, te recomendamos que ejecutes la herramienta previa a la actualización.

Para ejecutar la herramienta, usa la secuencia de comandos de Bash que se incluye en este documento y que utiliza algoritmos de hash seguros (SHA) codificados. Para cada versión de la herramienta, este documento se actualizará con el nuevo SHA. La secuencia de comandos crea un objeto Job de Kubernetes para ejecutar una versión específica de las verificaciones previas al vuelo según la versión a la que actualizas.

Verificaciones previas a la actualización

Antes de actualizar un clúster de usuario, la herramienta verifica lo siguiente:

Categoría Descripción
Estado del clúster
  • Valida los PDB en todos los espacios de nombres del clúster de administrador.
  • Valida los PDB en todos los espacios de nombres del clúster de usuario.
  • Valida que una actualización anterior del clúster de administrador se haya completado correctamente.
Configuraciones
  • Recomienda la versión de parche a la que se debe actualizar.
  • Si actualizas a la versión 1.10, te advierte si deberás aplicar la solución alternativa en este problema conocido.

Antes de actualizar un clúster de administrador, la herramienta verifica lo siguiente:

Categoría Descripción
Estado del clúster Valida los PodDisruptionBudgets (PDB) en todos los espacios de nombres del clúster de administrador.
Configuraciones

Preparación para ejecutar la herramienta

  1. Actualiza tu estación de trabajo de administrador si aún no lo hiciste.

  2. Ejecuta gkectl prepare para importar imágenes de SO a vSphere si aún no lo hiciste:

    gkectl prepare \
        --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Reemplaza lo siguiente:

    • TARGET_VERSION: Es la versión de parche de Google Distributed Cloud a la que deseas actualizar. El formato del número de versión debe ser una versión de parche completa, como 1.13.10-gke.42.

    • ADMIN_CLUSTER_KUBECONFIG: Es la ruta al archivo kubeconfig del clúster de administrador.

  3. Si usas un registro privado, descarga la imagen del contenedor de verificación previa con el resumen de Docker proporcionado y sube la imagen al registro privado. Si no usas un registro privado, ve al siguiente paso.

    export SRC_IMAGE=gcr.io/gke-on-prem-release/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234
    export DST_IMAGE=REGISTRY_ADDRESS/preflight:$(date +%Y-%m%d-%H%M%S)
    docker pull $SRC_IMAGE
    docker tag $SRC_IMAGE $DST_IMAGE
    docker push $DST_IMAGE
    

    Reemplaza REGISTRY_ADDRESS por la dirección del registro privado.

  4. En la siguiente secuencia de comandos Bash, establece valores para estos marcadores de posición:

    • ADMIN_CLUSTER_KUBECONFIG: Es la ruta al archivo kubeconfig del clúster de administrador.

    • REGISTRY_ADDRESS: Si el clúster de administrador usa un registro privado, esta es la dirección del registro privado que especificaste en el paso anterior. Si no usas un registro privado, especifica el registro público: gcr.io/gke-on-prem-release

    #!/bin/bash
    UPGRADE_TARGET_VERSION=${1}
    CLUSTER_NAME=${2}
    ADMIN_KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
    REGISTRY_ADDRESS=REGISTRY_ADDRESS
    pre_upgrade_namespace=kube-system
    if [[ -z "$CLUSTER_NAME" ]]
    then
      echo "Running the pre-ugprade tool before admin cluster upgrade"
    else
      echo "Running the pre-ugprade tool before user cluster upgrade"
      pre_upgrade_namespace=$CLUSTER_NAME-gke-onprem-mgmt
    fi
    kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pre-upgrade-job
      namespace: $pre_upgrade_namespace
    EOF
    kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      creationTimestamp: null
      name: pre-upgrade-job-rolebinding-in-$pre_upgrade_namespace
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: onprem-user-cluster-controller-role
    subjects:
      - kind: ServiceAccount
        name: pre-upgrade-job
        namespace: $pre_upgrade_namespace
    EOF
    kubectl apply --kubeconfig ${ADMIN_KUBECONFIG} -f - <<EOF
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: pre-upgrade-$(date +%Y-%m%d-%H%M%S)
      namespace: $pre_upgrade_namespace
      labels:
        onprem.cluster.gke.io/job-usage: preflight
    spec:
      ttlSecondsAfterFinished: 2592000
      backoffLimit: 2
      template:
        metadata:
          labels:
            onprem.cluster.gke.io/pod-usage: preflight
        spec:
          containers:
          - name: preflight
            image: $REGISTRY_ADDRESS/preflight@sha256:9704315c6637750a014d0079ca04a8f97d0ca3735e175020377107c3181f6234
            imagePullPolicy: Always
            command:
            - /preflight
            - --upgrade-target-version
            - "$UPGRADE_TARGET_VERSION"
            - --cluster-name
            - "$CLUSTER_NAME"
            - --scenario
            - pre-upgrade
          restartPolicy: Never
          serviceAccountName: pre-upgrade-job
          imagePullSecrets:
          - name: private-registry-creds
    EOF
    
  5. Guarda la secuencia de comandos de Bash anterior en un archivo llamado pre-upgrade.sh y haz que sea ejecutable:

    chmod +x pre-upgrade.sh
    

Ejecuta la secuencia de comandos:

  1. Los argumentos que proporcionas cuando ejecutas la secuencia de comandos dependen de si actualizas un clúster de usuario o un clúster de administrador:

    • Antes de actualizar un clúster de administrador, ejecuta la secuencia de comandos de la siguiente manera:
    ./pre-upgrade.sh TARGET_VERSION
    
    • Antes de actualizar un clúster de usuario, haz lo siguiente:
    ./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
    

    Reemplaza USER_CLUSTER_NAME por el nombre del clúster de usuario que actualizarás.

    El resultado es similar a este:

    job.batch/pre-upgrade-2023-0822-213551 created
    
  2. Ejecuta el siguiente comando en los Pods controlados por el trabajo para obtener una lista de los resultados de la validación.

    kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    Reemplaza lo siguiente:

    • JOB_NAME: Es el nombre del trabajo que el script genera en el paso anterior.

    • JOB_NAMESPACE: El valor que establezcas dependerá de si actualizas un clúster de administrador o de usuario. Si actualizas un clúster de administrador, especifica kube-system. Si actualizas un clúster de usuario, especifica USER_CLUSTER_NAME-gke-onprem-mgmt.

    Espera unos minutos a que se complete el trabajo o a que se alcance el límite de reintentos y falle. En los resultados, revisa el Reason para ver si hay alguna verificación con el estado Warning, Unknown o Failure y determinar si puedes resolver el problema.

  3. Antes de actualizar los clústeres, ejecuta el siguiente comando para borrar el trabajo:

    kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG