
Sem dúvida, o Kubernetes se tornou a plataforma dominante para a implantação de contêineres. Ele fornece a capacidade de gerenciar quase tudo usando suas APIs e controladores de usuário que estendem sua API através dos recursos do usuário.
No entanto, o usuário ainda precisa tomar decisões detalhadas sobre como implantar, configurar, gerenciar e dimensionar aplicativos. A critério do usuário, permanecem questões sobre o dimensionamento do aplicativo, proteção e passagem do tráfego. Isso distingue o Kubernetes das “plataformas como serviço” (PaaS) convencionais, como Cloud Foundry e Heroku.
As plataformas têm uma interface de usuário simplificada, focada nos desenvolvedores de aplicativos que estão frequentemente envolvidos na personalização de aplicativos individuais. Roteamento, implantação e métricas transparentes para o usuário são gerenciados pelo sistema PaaS subjacente.
O fluxo de trabalho de entrega de origem é tratado pelo PaaS, criando uma imagem de contêiner personalizada, implantando-a, configurando uma nova rota e um subdomínio DNS para o tráfego de entrada. Tudo isso é acionado pelo comando git push
.
O Kubernetes (intencionalmente) fornece apenas os blocos de construção básicos para essas plataformas, dando à comunidade a oportunidade de fazer esse trabalho por conta própria. Como Kelsey Hightower disse :
Kubernetes é uma plataforma para construção de plataformas. A melhor posição para começar, mas não para terminar.
Como resultado, vemos vários assemblies do Kubernetes, além de hospedar empresas que estão tentando criar PaaS para o Kubernetes, por exemplo, OpenShift e Rancher. No contexto do crescente mercado Kube-PaaS, a Knative, criada em julho de 2018 pelo Google e Pivotal, está entrando no ringue.
Knative foi uma colaboração entre Google e Pivotal, com pouca colaboração de outras empresas como IBM, RedHat e Solo.im. Oferece material PaaS semelhante para o Kubernetes com suporte a aplicativos de computação sem servidor de primeira classe. Diferentemente dos assemblies do Kubernetes, o Knative é instalado como um complemento para qualquer cluster Kubernetes compatível e é configurado através dos recursos do usuário.
O que é Knative?
Knative é descrito como "Uma plataforma baseada no Kubernetes para fornecer e gerenciar cargas de trabalho com a moderna computação sem servidor". Ao se declarar uma plataforma desse tipo, o Knative ativa automaticamente os contêineres proporcionalmente às solicitações HTTP simultâneas. Os serviços não utilizados são redimensionados para zero, fornecendo dimensionamento sob demanda no estilo da computação sem servidor.
O Knative consiste em um conjunto de controladores instalados em qualquer cluster Kubernetes e fornece os seguintes recursos:
- montagem de aplicativos em contêiner a partir do código-fonte (fornecido pelo componente Build ),
- fornecendo acesso ao tráfego de entrada para aplicativos (fornecido pelo componente Serving ),
- entrega e dimensionamento automático de aplicativos sob demanda (também fornecidos pelo componente Serving ),
- determinação das fontes de eventos que levaram ao lançamento de aplicativos (fornecidos pelo componente Eventing ).
Um componente-chave é o fornecimento, que fornece entrega, dimensionamento automático e controle de tráfego para aplicativos gerenciados. Depois de instalar o Knative, você ainda tem acesso total à API do Kubernetes, que permite aos usuários gerenciar aplicativos da maneira usual , e também serve para depurar serviços do Knative, trabalhando com as mesmas primitivas de API que esses serviços usam (módulos, serviços, etc.).
A veiculação também automatiza o roteamento de tráfego azul esverdeado, fornecendo separação de tráfego entre as versões nova e antiga do aplicativo quando o usuário entrega uma versão atualizada do aplicativo.
O próprio Knative depende da instalação de um controlador de ingresso compatível. No momento da redação deste artigo, o Gloo API Gateway e o Istio Service Mesh são suportados. Ele configurará a entrada disponível para rotear o tráfego para aplicativos controlados pela Knative.
O Istio Service Mesh pode se tornar um grande vício para os usuários do Knative que desejam experimentá-lo sem instalar o painel de controle do Istio, porque o Knative depende apenas do gateway.
Por esse motivo, a maioria dos usuários prefere o Gloo como uma porta de entrada para o Knative, que fornece um conjunto semelhante de recursos com o Istio (se falarmos sobre o objetivo de usar apenas o Knative), além de usar significativamente menos recursos e fornecer custos operacionais mais baixos.
Vamos verificar o Knative em ação no estande. Vou usar um cluster recém-instalado em execução no GKE:
kubectl get namespace NAME STATUS AGE default Active 21h kube-public Active 21h kube-system Active 21h
Prosseguimos com a instalação do Knative e do Gloo. Isso pode ser feito em qualquer ordem:
# Knative-Serving kubectl apply -f \ https://github.com/knative/serving/releases/download/v0.8.0/serving-core.yaml namespace/knative-serving created # ... # Gloo kubectl apply -f \ https://github.com/solo-io/gloo/releases/download/v0.18.22/gloo-knative.yaml namespace/gloo-system created # ...
Verifique se todos os pods estão no status "Em execução":
kubectl get pod -n knative-serving NAME READY STATUS RESTARTS AGE activator-5dd55958cc-fkp7r 1/1 Running 0 7m32s autoscaler-fd66459b7-7d5s2 1/1 Running 0 7m31s autoscaler-hpa-85b5667df4-mdjch 1/1 Running 0 7m32s controller-85c8bb7ffd-nj9cs 1/1 Running 0 7m29s webhook-5bd79b5c8b-7czrm 1/1 Running 0 7m29s kubectl get pod -n gloo-system NAME READY STATUS RESTARTS AGE discovery-69548c8475-fvh7q 1/1 Running 0 44s gloo-5b6954d7c7-7rfk9 1/1 Running 0 45s ingress-6c46cdf6f6-jwj7m 1/1 Running 0 44s knative-external-proxy-7dd7665869-x9xkg 1/1 Running 0 44s knative-internal-proxy-7775476875-9xvdg 1/1 Running 0 44s
O Gloo está pronto para o roteamento, vamos criar um serviço Knative escalável automaticamente (vamos chamá-lo de kservice) e direcionar o tráfego para ele.
Os serviços Knative fornecem uma maneira mais fácil de entregar aplicativos ao Kubernetes - em comparação com o modelo Deployment + Service + Ingress regular. Vamos trabalhar com um exemplo:
apiVersion: serving.knative.dev/v1alpha1 kind: Service metadata: name: helloworld-go namespace: default spec: template: spec: containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET Value: Knative user
Copiei isso para um arquivo e apliquei no meu cluster Kubernetes da seguinte maneira:
kubectl apply -f ksvc.yaml -n default
Podemos visualizar os recursos criados por Knative no cluster após a entrega do nosso kservice 'helloworld-go':
kubectl get pod -n default NAME READY STATUS RESTARTS AGE helloworld-go-fjp75-deployment-678b965ccb-sfpn8 2/2 Running 0 68s
O pod com a nossa imagem 'helloworld-go' começa quando você implanta o kservice. Se não houver tráfego, o número de pods será reduzido a zero. E vice-versa, se o número de solicitações simultâneas exceder algum valor limite personalizado, o número de pods aumentará.
kubectl get ingresses.networking.internal.knative.dev -n default NAME READY REASON helloworld-go True
O Knative configura sua entrada usando um recurso especial de 'entrada' na API interna da Knative. O Gloo usa essa API como sua configuração para expor as propriedades inerentes ao PaaS, incluindo o modelo de implantação azul esverdeado, TLS automático, tempos limite e outros recursos avançados de roteamento.
Depois de algum tempo, vemos que nossos pods desapareceram (já que não havia tráfego de entrada):
kubectl get pod -n default No resources found. kubectl get deployment -n default NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE helloworld-go-fjp75-deployment 0 0 0 0 9m46s
Finalmente, tentaremos alcançá-los. Obter URLs para Knative Proxy é fácil e fácil com o glooctl
:
glooctl proxy url --name knative-external-proxy http://35.190.151.188:80
Sem o glooctl
instalado, glooctl
pode espionar o endereço e a porta no serviço kube:
kubectl get svc -n gloo-system knative-external-proxy NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE knative-external-proxy LoadBalancer 10.16.11.157 35.190.151.188 80:32168/TCP,443:30729/TCP 77m
Execute um pouco de dados com cURL:
curl -H "Host: helloworld-go.default.example.com" http://35.190.151.188 Hello Knative user!
A Knative fornece quase PaaS para desenvolvedores além do Kubernetes, usando o gateway de API de alto desempenho e recursos da Gloo. Esta nota tocou apenas levemente o grande número de recursos Knative disponíveis para personalização, além de recursos adicionais. Da mesma forma com Gloo!
Apesar de Knative ainda ser um projeto jovem, sua equipe lança novas versões a cada seis semanas, a implementação de funções avançadas começou, por exemplo, a implantação automática do TLS, o dimensionamento automático do painel de controle. Há uma alta probabilidade de que, como resultado da cooperação entre inúmeras empresas de nuvem, bem como a base da nova oferta do Cloud Run do Google, o Knative possa se tornar a principal opção para organizar a computação sem servidor e o PaaS no Kubernetes. Acompanhe as novidades!
De SouthBridge
A opinião dos leitores é importante para nós, por isso pedimos que você participe de uma pequena pesquisa relacionada a futuros artigos sobre Knative, Kubernetes, computação sem servidor: