Este documento mostra como executar uma ferramenta autónoma em preparação para uma atualização. Antes de atualizar um cluster de administrador ou de utilizador que esteja na versão 1.9 e versões posteriores do Google Distributed Cloud, recomendamos que execute a ferramenta de pré-atualização.
Para executar a ferramenta, use o script bash neste documento que usa algoritmos hash seguros (SHA) codificados. Para cada lançamento da ferramenta, este documento é atualizado com o novo SHA. O script cria um trabalho do Kubernetes para executar uma versão específica das verificações prévias, consoante a versão para a qual está a fazer a atualização.
Verificações pré-atualização
A ferramenta verifica o seguinte antes de atualizar um cluster de utilizadores:
Categoria | Descrição |
---|---|
Estado do cluster |
|
Configurações |
|
A ferramenta verifica o seguinte antes de atualizar um cluster de administrador:
Categoria | Descrição |
---|---|
Estado do cluster | Valida os PodDisruptionBudgets (PDBs) em todos os
namespaces do cluster de administrador. |
Configurações |
|
Prepare-se para executar a ferramenta
Atualize a sua estação de trabalho de administrador se ainda não o fez.
Execute
gkectl prepare
para importar imagens do SO para o vSphere, se ainda não o tiver feito:gkectl prepare \ --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Substitua o seguinte:
TARGET_VERSION
: A versão de patch do Google Distributed Cloud para a qual quer fazer a atualização. O formato do número da versão tem de ser uma versão de patch completa, como1.13.10-gke.42
.ADMIN_CLUSTER_KUBECONFIG
: o caminho para o kubeconfig do cluster de administrador.
Se estiver a usar um registo privado, transfira a imagem do contentor de pré-publicação com o resumo do Docker fornecido e carregue a imagem para o registo privado. Se não estiver a usar um registo privado, avance para o passo seguinte.
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
Substitua
REGISTRY_ADDRESS
pelo endereço do registo privado.No seguinte script bash, defina valores para estes marcadores de posição:
ADMIN_CLUSTER_KUBECONFIG
: o caminho para o kubeconfig do cluster de administrador.REGISTRY_ADDRESS
: se o cluster de administrador usar um registo privado, este é o endereço do registo privado que especificou no passo anterior. Se não estiver a usar um registo privado, especifique o registo 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
Guarde o script bash acima num ficheiro denominado
pre-upgrade.sh
e torne-o executável:chmod +x pre-upgrade.sh
Execute o script
Os argumentos que fornece quando executa o script dependem de estar a atualizar um cluster de utilizadores ou um cluster de administrador:
- Antes de atualizar um cluster de administrador, execute o script da seguinte forma:
./pre-upgrade.sh TARGET_VERSION
- Antes de atualizar um cluster de utilizadores:
./pre-upgrade.sh TARGET_VERSION USER_CLUSTER_NAME
Substitua
USER_CLUSTER_NAME
pelo nome do cluster de utilizadores que vai atualizar.O resultado é semelhante ao seguinte:
job.batch/pre-upgrade-2023-0822-213551 created
Execute o seguinte comando nos pods controlados pela tarefa para obter uma lista de resultados da validação.
kubectl logs -n JOB_NAMESPACE jobs/JOB_NAME \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Substitua o seguinte:
JOB_NAME
: este é o nome da tarefa que o script gera a partir do passo anterior.JOB_NAMESPACE
: o valor que define depende de estar a atualizar um cluster de administrador ou de utilizador. Se estiver a atualizar um cluster de administrador, especifiquekube-system
. Se estiver a atualizar um cluster de utilizadores, especifiqueUSER_CLUSTER_NAME-gke-onprem-mgmt
.
Aguarde alguns minutos até que a tarefa seja concluída ou atinja o limite de recuo e falhe. Nos resultados, reveja o
Reason
para qualquer verificação com o estadoWarning
,Unknown
ouFailure
para ver se consegue resolver o problema.Antes de atualizar os clusters, execute o seguinte comando para eliminar a tarefa:
kubectl delete jobs JOB_NAME -n JOB_NAMESPACE \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG