deploy-model-serving-aks — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited deploy-model-serving-aks (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
az aks get-credentialsaz aks create \
--resource-group $RG --name $CLUSTER \
--node-count 2 --node-vm-size Standard_D4s_v5 \
--enable-managed-identity --attach-acr $ACR \
--network-plugin azure --network-policy calico \
--enable-addons monitoringaz aks nodepool add \
--resource-group $RG --cluster-name $CLUSTER \
--name gpupool --node-count 1 \
--node-vm-size Standard_NC24ads_A100_v4 \
--node-taints sku=gpu:NoSchedule \
--labels workload=inference| GPU VM | GPU | VRAM | Use Case | Cost/hr |
|---|---|---|---|---|
| NC6s_v3 | 1× V100 | 16GB | Small models (<7B) | ~$3.06 |
| NC24ads_A100_v4 | 1× A100 | 80GB | Large models (7B-70B) | ~$3.67 |
| ND96asr_v4 | 8× A100 | 640GB | Massive models (70B+) | ~$27.20 |
# vLLM-based serving
docker build -t $ACR.azurecr.io/vllm-serving:v1 -f Dockerfile.vllm .
docker push $ACR.azurecr.io/vllm-serving:v1# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: llm-serving
spec:
replicas: 1
template:
spec:
tolerations:
- key: "sku"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
containers:
- name: vllm
image: ${ACR}/vllm-serving:v1
resources:
limits:
nvidia.com/gpu: "1"
requests:
memory: "32Gi"
cpu: "8"
ports:
- containerPort: 8000
livenessProbe:
httpGet: { path: /health, port: 8000 }
initialDelaySeconds: 120
readinessProbe:
httpGet: { path: /health, port: 8000 }
initialDelaySeconds: 60kubectl apply -f k8s/deployment.yamlapiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: llm-serving-hpa
spec:
scaleTargetRef: { apiVersion: apps/v1, kind: Deployment, name: llm-serving }
minReplicas: 1
maxReplicas: 4
metrics:
- type: Pods
pods:
metric: { name: gpu_utilization }
target: { type: AverageValue, averageValue: "80" }kubectl apply -f k8s/ingress.yaml
# Verify endpoint
curl https://$INFERENCE_ENDPOINT/v1/modelscurl -X POST https://$ENDPOINT/v1/completions \
-H "Content-Type: application/json" \
-d '{"model":"my-model","prompt":"Hello","max_tokens":50}'kubectl get nodes -l workload=inferencekubectl describe pod llm-serving-*| Issue | Cause | Fix |
|---|---|---|
| Pod pending (no GPU) | Insufficient GPU quota | Request quota increase in Azure portal |
| OOM killed | Model too large for VRAM | Use quantization (GPTQ/AWQ) or larger GPU |
| Slow cold start | Large model download | Pre-pull image, use ACR cache |
| GPU not detected | Missing driver | Install NVIDIA GPU operator |
| Health probe fails | Model still loading | Increase initialDelaySeconds (120-300s) |
| Low throughput | No batching | Enable continuous batching in vLLM |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.