Assess Kubernetes workloads on Amazon EKS against best practices from K8s official documentation and the EKS Best Practices Guide. Covers 8 dimensions: workload configuration, security, observability, networking, storage, EKS platform integration, CI/CD, and image security.
This skill requires:
aws knowledge mcp server tools:
aws___search_documentation — search AWS documentationaws___read_documentation — read full documentation pagesaws___recommend — get related documentationcontext7 MCP tools:
context7_resolve-library-id — resolve K8s library IDcontext7_query-docs — query K8s documentationAWS CLI ( aws) — configured with read access to the target EKS cluster and ECR
kubectl — configured to access the target EKS cluster
jq — for parsing JSON output from AWS CLI and kubectl commands
This skill focuses on workload-level checks — items that require kubectl or in-cluster
inspection. It complements aws-best-practice-research which covers the infrastructure layer
(control plane, node groups, addons, etc.).
This Skill (Workload Layer)aws-best-practice-research (Infra Layer)Pod resource requests/limitsControl plane configurationProbes (liveness/readiness/startup)Node group sizing and AZ distributionPDB, topology constraintsAddon versionsPod security context, PSASecrets envelope encryptionNetwork PoliciesCluster networking (VPC, subnets)Service Accounts, RBACAuthentication mode, Access EntriesContainer image scanningGuardDuty EKS protectionHPA/VPA/Karpenter workload configKarpenter/CA infrastructure config
Determine from user input:
Cluster name and AWS Region
Assessment scope:
kube-system, kube-public, kube-node-lease by default)Include infrastructure layer? — whether to also invoke aws-best-practice-research for
the EKS infrastructure layer and merge results (default: yes)
If the user provides only a cluster name, default to full cluster assessment.
Run the following commands to detect the environment:
bash
# Cluster info via AWS CLI
aws eks describe-cluster --name {CLUSTER} --region {REGION}
# K8s version
kubectl version --output=json
# Node distribution
kubectl get nodes -o wide --no-headers
Record:
Version-aware filtering rules (apply in Step 3):
Research the latest best practices using context7 and aws-knowledge-mcp-server. Run all queries sequentially (one at a time) to avoid rate limiting.
For each of the 8 assessment dimensions, execute the search queries defined in
references/search-queries.md. The general flow per dimension is:
/websites/kubernetes_io) for K8s official best practicesAfter all research is complete, merge results with the baseline framework in
references/check-dimensions.md to ensure no critical dimension is missed.
Apply version-aware filtering from Step 2 to remove inapplicable items and add version-specific recommendations.
Rate limit protection: If any MCP request returns "Too many requests", wait 5 seconds and retry once. If it fails again, skip and continue. Sequential execution is mandatory.
If infrastructure layer assessment is included (default: yes):
aws-best-practice-research skill for the EKS clusterIf the user opts out, skip this step.
Collect workload configurations using kubectl. Independent commands can run in parallel
(they are not subject to MCP rate limits).
See references/kubectl-assessment-commands.md for the complete command list. Key data to collect:
bash
# Core workloads
kubectl get deployments,statefulsets,daemonsets,jobs,cronjobs --all-namespaces -o json
# Pod specifications (within workloads above)
# Already included in the -o json output
# Disruption and scaling
kubectl get pdb,hpa --all-namespaces -o json
# Networking
kubectl get networkpolicies,services,ingresses --all-namespaces -o json
# Security
kubectl get serviceaccounts --all-namespaces -o json
kubectl get clusterrolebindings,rolebindings -o json
# Storage
kubectl get pvc,storageclass -o json
# Namespace labels (for PSA)
kubectl get namespaces -o json
# Events (recent issues)
kubectl get events --all-namespaces --sort-by='.lastTimestamp' -o json
For ECR image scanning (if images are from ECR):
bash
# For each unique ECR image found in workloads
aws ecr describe-image-scan-findings --repository-name {REPO} --image-id imageTag={TAG}
aws ecr describe-repositories --repository-names {REPO}
aws ecr get-lifecycle-policy --repository-name {REPO}
Filter collected data to the assessment scope (namespaces/workloads from Step 1).
For each check item from the research phase (Step 3), evaluate every in-scope workload:
StatusMeaningPASSThe workload configuration meets or exceeds the recommendationFAILThe workload configuration does not meet the recommendationWARNCannot be fully verified, or partially meets the recommendationN/AThe check does not apply (e.g., storage checks for stateless workloads)
For each finding, record:
Generate a single comprehensive report using the template in references/output-template.md
and write it directly to a local markdown file.
IMPORTANT — File Writing Rules:
Use the following file naming convention:
bash
TIMESTAMP=$(TZ=Asia/Shanghai date +%Y-%m-%d-%H-%M-%S)
CLUSTER_SLUG=$(echo "{CLUSTER_NAME}" | tr '[:upper:]' '[:lower:]' | tr ' :/' '-')
Assessment Report — see references/output-template.md
${TIMESTAMP}-${CLUSTER_SLUG}-assessment-report.mdIf infrastructure layer results exist from Step 4, merge them into the report.
After saving, print a brief summary to the terminal listing only:
After saving the reports, offer:
For Critical Issues (FAIL + High priority), provide:
resources.requests.memory: not set — container has no memory request"
Bad: "Memory request missing"kube-system, kube-public, kube-node-lease
unless the user explicitly includes them.aws-best-practice-research.
This skill handles ONLY what requires kubectl/in-cluster access.