Use este guia para migrar as suas cargas de trabalho para execução na oferta Knative de código aberto com o Google Kubernetes Engine. Em geral, a migração das suas cargas de trabalho requer a instalação do componente Knative Serving num novo cluster do GKE e, em seguida, a reimplementação de cada um dos seus serviços nesse cluster do Knative.
Embora a utilização, a gestão e o apoio técnico do Knative de código aberto sejam da sua escolha e responsabilidade, a migração para o Knative oferece-lhe a oportunidade de continuar a executar as suas cargas de trabalho na plataforma Google Kubernetes Engine.
Diferenças importantes:
- O suporte está limitado ao Google Kubernetes Engine. Pode contactar a comunidade Knative para receber apoio técnico do Knative.
- A CLI do Google Cloud (
gcloud
) só é suportada pelo Google Kubernetes Engine. O Knative suporta os comandoskubectl
ekn
. Saiba como instalarkn
Antes de começar
- Tem de ter acesso a um novo cluster do GKE.
- Pode criar o novo cluster no mesmo Google Cloud projeto ou num novo.
- O cluster tem de cumprir os requisitos do Knative.
- Saiba como criar um cluster:
- Tem de transferir manualmente todas as configurações de cluster para o novo cluster do Knative, incluindo, entre outros:
- Tem de criar e configurar novos controlos de acesso IAM e RBAC:
Instalar o Knative no Google Kubernetes Engine
O Knative oferece várias opções de instalação e camadas de rede que pode optar por usar. Os seguintes passos de instalação do Knative usam o método do operador do Knative e a camada de rede do Istio.
Instale o operador Knative:
Implemente o operador no seu cluster:
kubectl apply -f https://github.com/knative/operator/releases/download/knative-vVERSION/operator.yaml
Substitua VERSION por uma versão do operador Knative.
Exemplo:
kubectl apply -f https://github.com/knative/operator/releases/download/knative-v1.3.1/operator.yaml
Defina a
kubectl
CLI para usar o espaço de nomesdefault
:kubectl config set-context --current --namespace=default
Verifique se o operador foi criado com êxito:
kubectl get deployment knative-operator
Resultado:
NAME READY UP-TO-DATE AVAILABLE AGE knative-operator 1/1 1 1 6m43s
Instale o componente Knative Serving:
Crie um ficheiro YAML com o seguinte, por exemplo: SERVING_FILENAME.yaml:
apiVersion: v1 kind: Namespace metadata: name: knative-serving --- apiVersion: operator.knative.dev/v1alpha1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving
Implemente o ficheiro YAML no cluster:
kubectl apply -f SERVING_FILENAME.yaml
Substitua SERVING_FILENAME pelo ficheiro YAML que criou.
Instale o Istio com a injeção de sidecar como a camada de rede:
Tem a opção de realizar e configurar uma instalação alternativa do Istio. Consulte todas as opções de instalação do Istio no Website do Knative. Tenha em atenção que esta instalação pode demorar 30 minutos ou mais.
Instale o Istio executando o seguinte comando com a flag
--set hub=gcr.io/istio-release
para evitar a limitação de taxa do Docker:istioctl install --set hub=gcr.io/istio-release
Execute o seguinte comando para ativar a injeção de sidecar:
kubectl label namespace default istio-injection=enabled
Opcional: por predefinição, o Istio é instalado no espaço de nomes
istio-system
. Se quiser configurar um espaço de nomes diferente, pode seguir os seguintes passos:Para configurar um espaço de nomes personalizado para o Istio, anexe os atributos
spec.config.istio
ao ficheiro de configuração SERVING_FILENAME.yaml. Por exemplo:apiVersion: operator.knative.dev/v1alpha1 kind: KnativeServing metadata: name: knative-serving namespace: knative-serving spec: # ... config: istio: local-gateway.LOCAL_GATEWAY_NAMESPACE.knative-local-gateway: "knative-local-gateway.ISTIO_NAMESPACE.svc.cluster.local"
Substituição:
- LOCAL_GATEWAY_NAMESPACE é o espaço de nomes
onde instalou o Knative Serving. Predefinição:
knative-serving
- ISTIO_NAMESPACE é o espaço de nomes onde o Istio está instalado. Predefinição:
istio-system
- LOCAL_GATEWAY_NAMESPACE é o espaço de nomes
onde instalou o Knative Serving. Predefinição:
Implemente o serviço SERVING_FILENAME.yaml atualizado no seu cluster do Knative:
kubectl apply -f SERVING_FILENAME.yaml
Valide a instalação do Istio confirmando que o
istio-ingressgateway
reside no espaço de nomes especificado:kubectl get svc istio-ingressgateway -n ISTIO_NAMESPACE
Substitua ISTIO_NAMESPACE pelo espaço de nomes onde instalou o Istio. Predefinição:
istio-system
Resultado:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway LoadBalancer 10.232.10.190 34.123.5.116 15021:30337/TCP,80:32549/TCP,443:31210/TCP 119m
Migrar um serviço
Para migrar um serviço, implementa o ficheiro de configuração YAML do serviço no cluster do Knative.
Exporte o seu serviço Knative serving para um ficheiro YAML local executando o seguinte comando:
gcloud run services describe SERVICE --format export --namespace NAMESPACE --cluster CLUSTER --platform gke > FILENAME.yaml
Substituição:
SERVICE
com o nome do seu serviço de fornecimento do Knative.NAMESPACE
com o espaço de nomes onde o seu serviço está a ser executado.CLUSTER
com o nome do cluster onde o seu serviço está a ser executado.FILENAME
com um nome de ficheiro único à sua escolha.
Modifique o ficheiro
FILENAME.yaml
exportado para remover configurações de serviço Knative indesejadas eliminando qualquer um dos seguintes atributos e os respetivos valores:metadata.annotations.kubectl.kubernetes.io/last-applied-configuration
metadata.managedFields
spec.template.spec.containers.readinessProbes
spec.template.spec.enableServiceLinks
Por exemplo, pode ter de remover a seguinte configuração dos atributos
spec:
>template:
>spec:
>containers:
:... readinessProbe: successThreshold: 1 tcpSocket: {} ...
Implemente o ficheiro
.yaml
modificado no seu cluster do Knative:kubectl apply -f SERVICE.yaml
Substitua SERVICE pelo nome do ficheiro de configuração do seu serviço.
Aceda ao seu serviço implementado através de um domínio de teste ou de comandos
cURL
. Pode usar um serviço DNS de caráter universal para testar o acesso externo ao seu serviço. Consulte a secção configurar DNS na documentação do Knative para ver mais opções.Para usar o DNS mágico (sslip.io), execute o seguinte comando.
Tenha em atenção que também pode usar diretamente sslip.io.
kubectl apply -f https://github.com/knative/serving/releases/download/knative-vVERSION/serving-default-domain.yaml
Substitua VERSION pela sua versão do Knative Serving.
Exemplo:
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.3.0/serving-default-domain.yaml
Migrar tráfego para o seu serviço
Depois de testar os serviços implementados recentemente e quando tiver tudo preparado para migrar todo o tráfego de produção, pode configurar o domínio personalizado e atualizar os registos DNS com a sua entidade de registo. Siga as instruções em Configurar domínios personalizados.