Migrar cargas de trabalho para o Knative OSS

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 comandos kubectl e kn. Saiba como instalar kn

Antes de começar

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.

  1. Instale o operador Knative:

    1. 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
      
    2. Defina a kubectl CLI para usar o espaço de nomes default:

      kubectl config set-context --current --namespace=default
      
    3. 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
      
  2. Instale o componente Knative Serving:

    1. 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
      
    2. Implemente o ficheiro YAML no cluster:

      kubectl apply -f SERVING_FILENAME.yaml
      

      Substitua SERVING_FILENAME pelo ficheiro YAML que criou.

  3. 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.

    1. Transfira o Istio da página de lançamento.

    2. 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
      
    3. Execute o seguinte comando para ativar a injeção de sidecar:

      kubectl label namespace default istio-injection=enabled
      
    4. 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:

      1. 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
      2. Implemente o serviço SERVING_FILENAME.yaml atualizado no seu cluster do Knative:

        kubectl apply -f SERVING_FILENAME.yaml
        
      3. 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.

  1. 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.
  2. 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: {}
      ...
      
  3. 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.

  4. 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.