Este documento descreve como configurar o Knative Serving em execução no Google Kubernetes Engine (GKE) para usar o GKE Sandbox para melhorar o isolamento da carga de trabalho do kernel do anfitrião.
Objetivos
- Saiba como ativar o GKE Sandbox no seu cluster de serviço do Knative.
- Implemente um serviço especificado para ser executado em nós com sandbox.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
- Este tutorial pressupõe que tem o Knative serving instalado e configurado no seu cluster.
- Certifique-se de que o ambiente de linha de comandos está configurado e que as ferramentas estão atualizadas:
Adicione um node pool do GKE Sandbox a um cluster do Knative Serving existente
Siga os passos para adicionar um conjunto de nós ativado para usar o GKE Sandbox ao seu cluster de serviço do Knative existente. É aqui que são executadas as cargas de trabalho que opta por usar o GKE Sandbox.
Implemente uma carga de trabalho no pool de nós do GKE Sandbox
Assim que tiver um cluster do GKE com um conjunto de nós ativado para o GKE Sandbox, atualize a configuração do Knative Serving. Além disso, atualize cada especificação de serviço para usar os novos nós. Estas atualizações só são necessárias uma vez.
Ative a flag de funcionalidade da classe de tempo de execução
Nesta secção, ativa a classe de tempo de execução do Kubernetes através de flags de funcionalidades e extensões do Knative no config-features
ConfigMap no espaço de nomes knative-serving
. Para ativar a classe de tempo de execução, defina a flag ConfigMap kubernetes.podspec-runtimeclassname
como enabled
. Para mais informações,
consulte a classe de tempo de execução do Kubernetes
e a configuração de
flags
na documentação Funcionalidades e
extensões
do Knative.
Abra o
config-features
ConfigMap para edição:kubectl edit configmap config-features -n knative-serving
Adicione a funcionalidade
kubernetes.podspec-runtimeclassname: enabled
ao campodata
.Em alternativa aos passos anteriores, pode executar o seguinte comando para aplicar um patch a esta flag nas suas funcionalidades do Knative:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
Para validar as edições, execute o seguinte comando para ver o ConfigMap:
kubectl get configmap config-features -n knative-serving -o yaml
O ConfigMap deve ser semelhante ao seguinte:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
Implemente um serviço configurado para ser executado no GKE Sandbox
Depois de ativar o flag da funcionalidade de classe de tempo de execução, pode criar serviços que especifiquem um runtimeClassName
na especificação. Defina o runtimeClassName
como gvisor
para indicar que um serviço deve ser executado no conjunto de nós do GKE Sandbox.
Implemente uma aplicação "Hello World" do Knative executando o seguinte comando:
cat <<EOF | kubectl apply -f - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: runtimeClassName: gvisor containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: "gVisor User" EOF
Se a funcionalidade de nome da classe de tempo de execução do Kubernetes estiver ativada, o comando deve terminar sem erros.
Obtenha os pods para o seu serviço em execução e a respetiva classe de tempo de execução configurada executando o seguinte comando:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
O resultado deve ser semelhante ao seguinte:
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running
O que se segue?
Depois de verificar que pode implementar apps não fidedignas no conjunto de nós do GKE Sandbox recém-criado, está tudo pronto para adicionar runtimeClassName: gvisor
às especificações do Kubernetes para outros serviços não fidedignos que quer executar em conjuntos de nós do GKE Sandbox.
Leitura adicional:
- Documentação do GKE Sandbox docs para compreender as limitações que podem quebrar a compatibilidade com alguns serviços.
- Documentos do gVisor sobre a implementação de serviços Knative para um guia mais detalhado sobre a implementação de apps Knative no gVisor (também denominado GKE Sandbox).