O Google Kubernetes Engine (GKE) Agent Sandbox oferece isolamento no nível do kernel para código não confiável gerado por modelos usando o gVisor. Ao combinar o GKE Agent Sandbox com volumes de agentes do Filestore, você pode oferecer ambientes isolados e seguros com suporte de armazenamento de arquivos persistente e de alta densidade.
Neste guia, mostramos como configurar um pool de nós ativado para gVisor, definir um
SandboxTemplate com modelos de declaração de volume do Filestore, pré-aquecer sandboxes com SandboxWarmPool e reivindicar sandboxes com
SandboxClaim.
Antes de começar
Conclua a configuração do cluster e do driver CSI em Configurar o ambiente do GKE para volumes do agente do Filestore.
Criar um pool de nós com o gVisor ativado
Crie um pool de nós dedicado configurado com isolamento de sandbox do gVisor:
gcloud container node-pools create gvisor-pool \
--cluster=CLUSTER_NAME \
--location=REGION \
--project=PROJECT_ID \
--image-type=cos_containerd \
--sandbox=type=gvisor \
--num-nodes=2 \
--machine-type=n2-standard-16 \
--enable-autoscaling \
--min-nodes=1 \
--max-nodes=10 \
--scopes=cloud-platform
Substitua:
CLUSTER_NAME: o nome do cluster do GKE.REGION: a região em que o cluster está localizado.PROJECT_ID: o ID do projeto Google Cloud .
Criar um SandboxTemplate
Defina um manifesto SandboxTemplate chamado warmpool-filestore-template.yaml.
O modelo configura as definições de ambiente de execução do gVisor, contextos de segurança não raiz e um bloco volumeClaimTemplates que segmenta o volume-pool-sc StorageClass:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxTemplate
metadata:
name: warmpool-filestore-template
namespace: default
spec:
podTemplate:
spec:
runtimeClassName: gvisor
automountServiceAccountToken: false
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000
nodeSelector:
sandbox.gke.io/runtime: gvisor
tolerations:
- key: "sandbox.gke.io/runtime"
value: "gvisor"
effect: "NoSchedule"
containers:
- name: agent-container
image: busybox
command: ["/bin/sh", "-c"]
args:
- |
echo "Sandbox started with Filestore volume mounted!"
ls -la /workspace
date > /workspace/session-init.txt
cat /workspace/session-init.txt
sleep 3600
securityContext:
capabilities:
drop: ["ALL"]
allowPrivilegeEscalation: false
resources:
requests:
cpu: "250m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
volumeMounts:
- name: agent-workspace
mountPath: /workspace
volumeClaimTemplates:
- metadata:
name: agent-workspace
spec:
accessModes: ["ReadWriteMany"]
storageClassName: "volume-pool-sc"
resources:
requests:
storage: "1Gi"
Aplique o manifesto:
kubectl apply -f warmpool-filestore-template.yaml
Criar um SandboxWarmPool
Para minimizar a latência de inicialização da sandbox, defina um manifesto SandboxWarmPool chamado
sandbox-warmpool.yaml que mantenha instâncias de pod pré-aquecidas:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
name: filestore-warmpool
namespace: default
spec:
replicas: 3
sandboxTemplateRef:
name: warmpool-filestore-template
Aplique o manifesto:
kubectl apply -f sandbox-warmpool.yaml
Verifique se os pods do pool quente estão prontos:
kubectl get sandboxwarmpool filestore-warmpool -n default
Reivindicar um pod de sandbox
Quando uma sessão de agente começar, envie um manifesto SandboxClaim chamado
sandbox-claim.yaml para reivindicar um sandbox pré-aquecido:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxClaim
metadata:
name: agent-session-1
namespace: default
spec:
sandboxTemplateRef:
name: warmpool-filestore-template
Aplique o manifesto:
kubectl apply -f sandbox-claim.yaml
Verificar o volume ativado
Verifique se a declaração está vinculada a um pod:
kubectl get sandboxclaim agent-session-1
Encontre o pod associado à sua reivindicação:
kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
Verifique se o volume está ativado dentro do contêiner reivindicado:
kubectl logs POD_NAME -c agent-container
Substitua
POD_NAMEpelo nome do pod retornado na etapa anterior.O registro confirma que
/workspace/session-init.txtfoi criado no volume montado do Filestore.
A seguir
- Conheça o sandbox do agente com vinculação tardia.
- Implante cargas de trabalho do GKE autogerenciadas.
- Saiba como criar e gerenciar pools de volume.