O autor de nosso novo artigo traduzido afirma que Knative é o melhor que eles poderiam imaginar no universo! Você concorda?
Se você já usa o Kubernetes, provavelmente já ouviu falar da arquitetura sem servidor. Embora ambas as plataformas, Kubernetes e Knative, sejam escalonáveis, é a arquitetura sem servidor que faz tudo o que pode para fornecer aos desenvolvedores código de trabalho sem incomodá-los com problemas de infraestrutura. Ele também reduz os custos de infraestrutura ao dimensionar virtualmente as instâncias de aplicativos do zero.
Por outro lado, você pode aproveitar as vantagens do Kubernetes sem limites, seguindo o modelo de hospedagem tradicional e técnicas avançadas de gerenciamento de tráfego. Graças a isso, abrimos várias oportunidades, por exemplo, implantações azul-verdes e testes A / B.
Knative é um esforço para tirar o melhor dos dois mundos! Como uma plataforma de nuvem de código aberto, o Knative permite que você execute seus aplicativos sem servidor no Kubernetes, aproveitando o poder do Kubernetes, e garante a simplicidade e flexibilidade de uma arquitetura sem servidor.
Dessa forma, os desenvolvedores podem se concentrar na codificação e implantação de um contêiner no Kubernetes com um único comando, enquanto o Knative gerencia o aplicativo enquanto cuida das nuances da rede, escalonamento automático para zero e rastreamento de versão.
Além disso, o Knative permite que os desenvolvedores escrevam código fracamente acoplado com sua estrutura de manipulação de eventos, que fornece assinatura universal, entrega e gerenciamento de eventos. Isso significa que você pode declarar a conectividade do evento e seus aplicativos podem se inscrever em fluxos de dados específicos.
Liderada pelo Google, a plataforma de código aberto foi incluída na Cloud Native Computing Foundation. Isso significa que não há dependência do fornecedor, o que, de outra forma, é uma limitação significativa das soluções FaaS sem servidor em nuvem atuais. Você pode executar o Knative em qualquer cluster do Kubernetes.
Para quem é o Knative?
A Knative auxilia uma grande variedade de profissionais, cada um com seus próprios conhecimentos, experiências e responsabilidades.
Os engenheiros podem se concentrar no gerenciamento do cluster Kubernetes e na instalação e manutenção de instâncias Knative usando kubectl, enquanto os desenvolvedores criam e implantam aplicativos usando a API Knative.
Esta é uma grande vantagem para qualquer organização, pois agora diferentes equipes podem resolver seus problemas sem interferir umas nas outras.
Por que você deve usar o Knative?
A maioria das organizações que usam o Kubernetes tem um processo complexo para gerenciar a implantação e manutenção de cargas de trabalho. Isso leva os desenvolvedores a prestarem atenção aos detalhes com os quais não precisam se preocupar. Os desenvolvedores devem se concentrar na codificação em vez de pensar em montagens e implantações.
O Kubeless ajuda os desenvolvedores a simplificar a execução do código sem ter que saber muito sobre o que está acontecendo nos bastidores do Kubernetes.
Um cluster Kubernetes consome recursos de infraestrutura porque exige que todos os aplicativos tenham pelo menos um contêiner em execução. O Knative gerencia esse aspecto para você e cuida do escalonamento automático dos contêineres no cluster desde o início. Isso permite que os administradores do Kubernetes empacotem vários aplicativos em um único cluster.
Se você tiver vários aplicativos com horários de pico variados ou um cluster com nós de trabalho de escalonamento automático, poderá se beneficiar muito com isso durante o tempo de inatividade.
Uma mina de ouro para aplicativos de arquitetura de microsserviços que podem não precisar de microsserviços em execução em um momento específico. Isso torna o uso de recursos mais eficiente e você pode fazer mais com recursos limitados.
Além disso, ele se integra muito bem com o mecanismo de eventos e facilita o projeto de sistemas não relacionados. O código do aplicativo pode permanecer totalmente livre de qualquer configuração de endpoint, e você pode publicar e se inscrever em eventos declarando configurações no nível do Kubernetes. Esta é uma vantagem significativa para aplicativos complexos de microsserviços!
Como funciona o Knative?
O Knative fornece a API kn usando os operadores Kubernetes e CRD. Usando-os, você pode implantar aplicativos usando a linha de comando. Em segundo plano, o Knative criará tudo o que o Kubernetes precisa (implantações, serviços, entradas e assim por diante) para executar aplicativos sem que você precise se preocupar com isso.
Esteja ciente de que o Knative não cria pods imediatamente. Em vez disso, ele fornece um ponto de extremidade virtual para aplicativos e os escuta. Se uma solicitação atinge esses endpoints, o Knative executa os pods necessários. Isso permite que os aplicativos sejam escalados desde o início até o número desejado de instâncias.
Knative fornece endpoints de aplicativo usando seu próprio domínio no formato [app-name]. [namespace]. [custom-domain] .
Isso ajuda a identificar o aplicativo de maneira exclusiva. Isso é semelhante ao modo como o Kubernetes lida com serviços, mas você precisa criar seus próprios registros A de domínio para apontar para o gateway de entrada do Istio. O Istio gerencia todo o tráfego que passa pelo cluster em segundo plano.
Knative é um amálgama de muitos produtos CNCF e de código aberto, como Kubernetes, Istio, Prometheus, Grafana, e mecanismos de streaming de eventos, como Kafka e Google Pub / Sub.
Instalando Knative
O Knative possui uma estrutura modular razoável e você só pode instalar os componentes de que precisa. Knative oferece eventos, serviços e componentes de monitoramento. Você pode instalá-los usando CRDs personalizados.
O Knative tem dependências externas e requisitos para cada componente. Por exemplo, se você estiver instalando um componente de serviço, também precisará instalar o Istio e o complemento DNS.
Instalar o Knative é muito complicado e vale a pena ler um artigo separado. Mas, para fins de demonstração, vamos começar instalando o componente de serviço.
Para fazer isso, você precisa de um cluster Kubernetes em funcionamento.
Instale o CRD de serviço e os componentes principais de serviço:
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-crds.yaml kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-core.yaml
Instale o Istio para Knative:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.7.0 sh - &&
cd istio-1.7.0 && export PATH=$PWD/bin:$PATH
istioctl install --set profile=demo
kubectl label namespace knative-serving istio-injection=enabled
Aguarde até que o Istio esteja pronto verificando se o Kubernetes alocou um endereço IP externo para o gateway de entrada do Istio:
kubectl -n istio-system get service istio-ingressgateway
Defina seu próprio domínio e configure o DNS para apontar para o endereço IP do gateway de entrada do Istio:
kubectl patch configmap/config-domain --namespace knative-serving --type merge -p "{\"data\":{\"$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}').xip.io\":\"\"}}"
kubectl apply -f https://github.com/knative/net-istio/releases/download/v0.17.0/release.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-default-domain.yaml
Instale o complemento Istio HPA:
kubectl apply -f https://github.com/knative/serving/releases/download/v0.17.0/serving-hpa.yaml
Instalando o Knative CLI
Instalar o Knative CLI é fácil. Você precisa baixar a versão mais recente do binário Knative CLI para a pasta bin ou especificar o caminho apropriado.
sudo wget https://storage.googleapis.com/knative-nightly/client/latest/kn-linux-amd64 -O /usr/local/bin/kn
sudo chmod +x /usr/local/bin/kn
kn version
Lançando o aplicativo Hello, World!
Agora vamos executar nosso primeiro "Hello, World!" aplicativo para ver como é fácil implantar com o Knative.
Vamos usar o aplicativo de amostra Hello, World! em Go para demonstração. Esta é uma API REST simples que retorna Hello $ TARGET , em que $ TARGET é uma variável de ambiente que você pode definir no contêiner.
Execute o seguinte comando para começar:
$ kn service create helloworld-go --image gcr.io/knative-samples/helloworld-go --env TARGET="World" --annotation autoscaling.knative.dev/target=10
Creating service 'helloworld-go' in namespace 'default':
0.171s Configuration "helloworld-go" is waiting for a Revision to become ready.
6.260s ...
6.324s Ingress has not yet been reconciled.
6.496s Waiting for load balancer to be ready
6.637s Ready to serve.
Service 'helloworld-go' created to latest revision 'helloworld-go-zglmv-1' is available at URL:
http://helloworld-go.default.34.71.125.175.xip.io
kubectl get pod
No resources found in default namespace.
Vamos iniciar o serviço helloworld .
$ curl http://helloworld-go.default.34.71.125.175.xip.io Hello World!
E depois de um tempo, obtemos uma resposta. Vamos dar uma olhada nos pods.
$ kubectl get pod NAME READY STATUS RESTARTS AGE helloworld-go-zglmv-1-deployment-6d4b7fb4f-ctz86 2/2 Running 0 50s
Então, como você pode ver, o Knative se desenrolou no fundo com um movimento. Acontece que literalmente escalamos do zero.
Se dermos um pouco de tempo, veremos que o pod começa a ser completado. Vamos ver o que está acontecendo.
$ kubectl get pod -w NAME READY STATUS RESTARTS AGE helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 2/2 Running 0 7s helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 2/2 Terminating 0 67s helloworld-go-zglmv-1-deployment-6d4b7fb4f-d9ks6 1/2 Terminating 0 87s
O exemplo acima mostra que o Knative gerencia os pods de acordo com nossos requisitos. Embora a primeira solicitação seja lenta porque o Knative cria cargas de trabalho para processá-la, as solicitações subsequentes serão executadas com mais rapidez. Você pode ajustar o tempo de desaceleração dos pods de acordo com seus requisitos ou se tiver um SLA mais restrito.
Vamos um pouco mais longe. Se você olhar as anotações, limitamos cada uma em processamento a 10 solicitações simultâneas. Então o que acontece se carregarmos nossas funções em cima disso? Vamos descobrir agora!
Usaremos o utilitário hey para carregar o aplicativo. O comando a seguir envia 50 solicitações simultâneas ao terminal em 30 segundos.
$ hey -z 30s -c 50 http://helloworld-go.default.34.121.106.103.xip.io
Average: 0.1222 secs
Requests/sec: 408.3187
Total data: 159822 bytes
Size/request: 13 bytes
Response time histogram:
0.103 [1] |
0.444 [12243] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.785 [0] |
1.126 [0] |
1.467 [0] |
1.807 [0] |
2.148 [0] |
2.489 [0] |
2.830 [0] |
3.171 [0] |
3.512 [50] |
Latency distribution:
10% in 0.1042 secs
25% in 0.1048 secs
50% in 0.1057 secs
75% in 0.1077 secs
90% in 0.1121 secs
95% in 0.1192 secs
99% in 0.1826 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0010 secs, 0.1034 secs, 3.5115 secs
DNS-lookup: 0.0006 secs, 0.0000 secs, 0.1365 secs
req write: 0.0000 secs, 0.0000 secs, 0.0062 secs
resp wait: 0.1211 secs, 0.1033 secs, 3.2698 secs
resp read: 0.0001 secs, 0.0000 secs, 0.0032 secs
Status code distribution:
[200] 12294 responses
Agora vamos dar uma olhada nos pods.
$ kubectl get pod NAME READY STATUS RESTARTS AGE helloworld-go-thmmb-1-deployment-77976785f5-6cthr 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-7dckg 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-fdvjn 0/2 Pending 0 57s helloworld-go-thmmb-1-deployment-77976785f5-gt55v 0/2 Pending 0 58s helloworld-go-thmmb-1-deployment-77976785f5-rwwcv 2/2 Running 0 59s helloworld-go-thmmb-1-deployment-77976785f5-tbrr7 2/2 Running 0 58s helloworld-go-thmmb-1-deployment-77976785f5-vtnz4 0/2 Pending 0 58s helloworld-go-thmmb-1-deployment-77976785f5-w8pn6 2/2 Running 0 59s
Como podemos ver, o Knative dimensiona os pods conforme a carga na função aumenta e diminui a velocidade quando não há mais carga.
Conclusão
O Knative combina o melhor de uma arquitetura sem servidor com os recursos do Kubernetes. Ele está gradualmente se movendo em direção a uma forma padrão de implementação de FaaS. Como o Knative faz parte da CNCF e está ganhando cada vez mais interesse técnico, em breve descobriremos que os provedores de nuvem estão implementando o Knative em seus produtos sem servidor.
Obrigado por ler o meu artigo! Espero que tenha gostado.