Saiba como migrar o Knative serving no VMware para usar frotas e fazer upgrade para o Anthos versão 1.8.
O Knative serving agora é uma experiência separada do Cloud Run e agora é fornecido como um componente da frota nos clusters. A instalação dos recursos do Knative Serving no VMware como um componente da frota permite gerenciar e fazer upgrade da instalação independentemente de outros componentes da frota.
Em geral, para migrar o Knative serving na instalação do VMware para usar uma frota, você precisa do seguinte:
- Configure o Knative serving na instalação do VMware para atender aos requisitos da frota.
- Ative o componente de recurso do Knative serving na frota.
O servidor da API Kubernetes não é afetado durante essa migração.
Para mais detalhes sobre como realizar uma nova instalação do Knative serving no VMware, consulte Como instalar o Knative serving no VMware.
Antes de começar
Você precisa atender aos seguintes requisitos:
Estas etapas exigem que o serviço do Knative no cluster do VMware esteja registrado em uma frota e visível no console Google Cloud :
A instalação do Knative serving no VMware está em um cluster que executa o Anthos versão 1.7 ou anterior.
O Istio não é mais compatível com o Anthos 1.8. A versão do Cloud Service Mesh 1.18 deve ser instalada na frota, e a instalação do Knative serving precisa ser configurada antes do upgrade do cluster para a versão 1.8.
Consulte as instruções do Cloud Service Mesh para mais detalhes sobre como instalar no Google Distributed Cloud.
O Cloud Service Mesh requer que o cluster use um tipo de máquina que tenha pelo menos quatro vCPUs, como
e2-standard-4. Se você precisar alterar o tipo de máquina do cluster, consulte Como migrar cargas de trabalho para diferentes tipos de máquina.Há duas opções para migrar o Knative serving para o Cloud Service Mesh:
Consiga um novo endereço IP externo para configurar o balanceador de carga.
Reutilize o endereço IP do balanceador de carga existente.
Verifique se o ambiente de linha de comando está configurado e atualizado.
Migrar para frotas
Para fazer o upgrade do Anthos para a versão 1.8, primeiro siga estas etapas para garantir que o Knative serving no VMware seja migrado para usar o componente de frota.
Acessar o cluster de administrador
Para conseguir o caminho e o nome do arquivo kubeconfig do cluster de administrador e
criar a variável de ambiente ADMIN_KUBECONFIG:
export ADMIN_KUBECONFIG=[ADMIN_CLUSTER_KUBECONFIG]
Substitua [ADMIN_CLUSTER_KUBECONFIG] pelo caminho e nome do arquivo para o arquivo kubeconfig do cluster de usuário.
Configurar cada cluster de usuário
Crie as seguintes variáveis de ambiente locais para o cluster de usuário:
Crie a variável de ambiente
USER_KUBECONFIGcom o caminho do arquivo kubeconfig do cluster de usuário:export USER_KUBECONFIG=[USER_CLUSTER_KUBECONFIG]Substitua [USER_CLUSTER_KUBECONFIG] pelo caminho e nome do arquivo para o arquivo kubeconfig do cluster de usuário.
Crie variáveis de ambiente para as seguintes configurações:
- ID do seu projeto Google Cloud .
- Local dos seus recursos do Google Cloud .
- Nome do cluster de usuário.
export PROJECT_ID=$(kubectl get configmaps --namespace knative-serving config-observability --output jsonpath="{.data['metrics\.stackdriver-project-id']}") export CLUSTER_LOCATION=$(kubectl get configmaps --namespace knative-serving config-observability --output jsonpath="{.data['metrics\.stackdriver-gcp-location']}") export CLUSTER_NAME=$(kubectl get configmaps --namespace knative-serving config-observability --output jsonpath="{.data['metrics\.stackdriver-cluster-name']}")
Remova a configuração
cloudrundo recurso personalizadoOnPremUserClusterno cluster de administrador:Verifique se
cloudRunestá definido emOnPremUserCluster:$ kubectl get onpremusercluster \ "${CLUSTER_NAME}" \ --namespace "${CLUSTER_NAME}-gke-onprem-mgmt" \ --kubeconfig="${ADMIN_KUBECONFIG}" \ --output=jsonpath="{.spec.cloudRun}"Resultado:
{"enabled":true}Remova
cloudRundeOnPremUserCluster:kubectl patch onpremusercluster \ "${CLUSTER_NAME}" \ --namespace "${CLUSTER_NAME}-gke-onprem-mgmt" \ --kubeconfig="${ADMIN_KUBECONFIG}" \ --type="merge" \ --patch '{"spec": {"cloudRun": null}}'Valide se
cloudRunfoi removido deOnPremUserCluster, executando o mesmo comandogete verificando se alguma configuração foi retornada:kubectl get onpremusercluster \ "${CLUSTER_NAME}" \ --namespace "${CLUSTER_NAME}-gke-onprem-mgmt" \ --kubeconfig="${ADMIN_KUBECONFIG}" \ --output=jsonpath="{.spec.cloudRun}"Não haverá saída para o terminal.
Atualize o secret create-config do cluster de usuário:
Crie uma cópia YAML local do arquivo create-config:
kubectl get secret create-config \ --kubeconfig="${ADMIN_KUBECONFIG}" \ --namespace "${CLUSTER_NAME}" \ --output=jsonpath={.data.cfg} \ | base64 -d > "${CLUSTER_NAME}_create_secret.yaml"Abra o arquivo
${CLUSTER_NAME}_create_secret.yamlque você acabou de criar em um editor e remova o campocloudrunemspec.Codifique em base64 o arquivo
${CLUSTER_NAME}_cluster_create_secret.yamlem um arquivo.b64:cat "${CLUSTER_NAME}_create_secret.yaml" | base64 -w0 > "${CLUSTER_NAME}_create_secret.b64"No editor, abra o arquivo
.b64local que você acabou de criar e copie a string do atributodata.cfgpara usar na próxima etapa.Copie somente o conteúdo do atributo
cfg. Por exemplo, não inclua novas linhas (\n).Execute o seguinte comando para editar o secret no cluster de usuário:
kubectl edit secret create-config --kubeconfig="${ADMIN_KUBECONFIG}" \ --namespace "${CLUSTER_NAME}"No editor que será aberto, substitua o campo
data[cfg]pela string que você copiou do arquivo.b64local e salve as alterações.Verifique se as alterações foram implantadas no cluster de usuário e se o atributo
cloudrunfoi removido dos secretscreate-config:kubectl get secret create-config \ --kubeconfig="${ADMIN_KUBECONFIG}" \ --namespace ${CLUSTER_NAME} \ --output=jsonpath={.data.cfg} \ | base64 -d
Configure o namespace
knative-servingno cluster de usuário:Exclua o operador
cloudrun-operatordo namespaceknative-serving:kubectl delete deployments.apps --kubeconfig=${USER_KUBECONFIG} --namespace knative-serving cloudrun-operatorCorrija o configmap
config-networkno namespaceknative-serving:kubectl patch configmap --kubeconfig=${USER_KUBECONFIG} --namespace knative-serving config-network --patch '{"metadata": {"annotations":{"knative.dev/example-checksum": null}}}'
Remova a configuração
cloudrun.enableddo arquivo de configuração do cluster de usuáriouser-config.yamlda instalação do Google Distributed Cloud.Os seguintes atributos precisam ser excluídos do arquivo
user-config.yaml:cloudRun: enabled: trueQuando você executa o upgrade de cluster para o Anthos versão 1.8, essa alteração de configuração é implantada.
Se você tiver vários clusters de usuário, repita todas as etapas nesta seção para "Configurar cada cluster de usuário".
Configurar o componente da frota
Ative o componente do Knative serving na sua frota:
gcloud container fleet cloudrun enable --project=$PROJECT_IDPara mais detalhes e opções, consulte a referência gcloud container fleet cloudrun enable.
Opcional: verifique se o componente do recurso Knative serving está ativado:
Console
Confira se o componente do Knative serving está ativado no console doGoogle Cloud :
Linha de comando
Veja se o estado
appdevexperienceéENABLED:gcloud container fleet features list --project=$PROJECT_IDPara mais detalhes e opções, consulte a referência da lista de recursos da frota de contêiner do gcloud.
Resultado:
NAME STATE appdevexperience ENABLEDImplante o recurso personalizado
CloudRunpara instalar o Knative serving no VMware em cada um dos clusters de usuário. Por padrão, a versãolatestdo Knative Serving é implantada.Execute o comando
kubectl applya seguir para implantar a configuração padrão do recurso personalizadoCloudRun:cat <<EOF | kubectl apply -f - apiVersion: operator.run.cloud.google.com/v1alpha1 kind: CloudRun metadata: name: cloud-run spec: metricscollector: stackdriver: projectid: $PROJECT_ID gcpzone: $CLUSTER_LOCATION clustername: $CLUSTER_NAME secretname: "stackdriver-service-account-key" secretkey: "key.json" EOF
Configurar o Cloud Service Mesh
Configure o balanceador de carga do Cloud Service Mesh para cada um dos clusters de usuário.
É possível configurar o gateway de entrada do Cloud Service Mesh definindo um novo endereço IP externo ou reutilizando o endereço IP existente:
Com o novo endereço IP externo que você recebeu, configure o balanceador de carga seguindo as etapas na documentação do Cloud Service Mesh.
Essa opção garante que os serviços do Knative serving sejam reiniciados sem interrupção.
Alternativa: use as etapas a seguir para configurar o balanceador de carga do Cloud Service Mesh para seu endereço IP existente.
Configure o gateway dos serviços para o Cloud Service Mesh executando os seguintes comandos:
export CURRENT_INGRESS_IP=$(kubectl get service --namespace gke-system istio-ingress --output jsonpath='{.spec.loadBalancerIP}') kubectl patch service --namespace istio-system istio-ingressgateway --patch "{\"spec\":{\"loadBalancerIP\": \"$CURRENT_INGRESS_IP\"}}" kubectl patch service --namespace gke-system istio-ingress --patch "{\"spec\":{\"loadBalancerIP\": null}}"Remova as configurações atuais do Istio:
kubectl patch configmap --namespace knative-serving config-istio --patch '{"data":{"local-gateway.cluster-local-gateway": null}}' kubectl patch configmap --namespace knative-serving config-istio --patch '{"data":{"gateway.gke-system-gateway": null}}'
Verificar a migração
É possível verificar se o appdevexperience-operator
está em execução para verificar se o Knative serving no VMware foi
migrado para a frota.
Para cada cluster de usuário, execute o seguinte comando:
kubectl get deployment -n appdevexperience appdevexperience-operatorO
operador
appdevexperience-operator mostrará 1/1 como pronto, por exemplo:
NAME READY UP-TO-DATE AVAILABLE AGE
appdevexperience-operator 1/1 1 1 1h
Se o operador não atingir o estado pronto, visualize a página de cargas de trabalho do cluster no console do Google Cloud para identificar problemas de recursos:
Acessar as cargas de trabalho do Google Kubernetes Engine
Fazer upgrade do cluster
Agora que você migrou a instalação do Knative serving no VMware para usar o componente da frota, é possível fazer upgrade do cluster para a versão 1.8 do Anthos. Siga as instruções detalhadas em Como fazer upgrade do GKE On-Prem.
Solução de problemas
- O processo de upgrade do cluster de usuário não é concluído
O pod
cluster-local-gatewayno namespacegke-systempode impedir que o cluster de usuário conclua o upgrade para o Anthos versão 1.8. O podcluster-local-gatewaynão é mais necessário e pode ser removido com segurança.Para ajudar manualmente no processo de upgrade, remova o pod
cluster-local-gatewaymanualmente reduzindo a escala vertical das réplicas de implantação para0. Exemplo:Reduza a escala vertical dos
cluster-local-gateway:kubectl scale deployment cluster-local-gateway --replicas 0 --namespace gke-systemO pod
cluster-local-gatewayno namespacegke-systeme todas as cargas de trabalho no namespaceknative-servingsão removidas.Aguarde a conclusão do upgrade.