DevOps Engineer - Guía de Entorno¶
Esta guía detalla las herramientas necesarias para que Claude Code pueda ayudarte eficazmente en tareas de DevOps, CI/CD, y automatización de infraestructura.
Resumen de Capacidades¶
| Capacidad | Herramientas Requeridas |
|---|---|
| Gestión de contenedores | Docker, Podman |
| Orquestación | Kubernetes, kubectl, Helm |
| Infrastructure as Code | Terraform, Pulumi, OpenTofu |
| Configuración | Ansible, Chef, Puppet |
| CI/CD | GitLab CI, GitHub Actions, Jenkins |
| Cloud CLI | AWS CLI, Azure CLI, gcloud |
| Monitoring | Prometheus, Grafana |
| Logs | Loki, ELK Stack |
Contenedores¶
Docker¶
# Windows
winget install Docker.DockerDesktop
# macOS
brew install --cask docker
# Linux (Ubuntu)
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Verificar
docker --version
docker compose version
# Comandos comunes
docker build -t myapp .
docker run -d -p 8080:80 myapp
docker ps
docker logs <container>
docker exec -it <container> /bin/sh
docker compose up -d
docker compose logs -f
docker system prune -a
Podman (Alternativa sin daemon)¶
# Windows
winget install RedHat.Podman
# macOS
brew install podman
# Linux
sudo apt install podman
# Verificar
podman --version
Kubernetes¶
kubectl¶
# Windows
winget install Kubernetes.kubectl
# macOS
brew install kubectl
# Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/
# Verificar
kubectl version --client
# Comandos comunes
kubectl get pods -A
kubectl describe pod <pod>
kubectl logs <pod> -f
kubectl exec -it <pod> -- /bin/sh
kubectl apply -f manifest.yaml
kubectl delete -f manifest.yaml
kubectl port-forward svc/myservice 8080:80
kubectl get events --sort-by='.lastTimestamp'
Helm¶
# Windows
winget install Helm.Helm
# macOS
brew install helm
# Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Verificar
helm version
# Comandos comunes
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm search repo nginx
helm install myrelease bitnami/nginx
helm upgrade myrelease bitnami/nginx
helm uninstall myrelease
helm list
helm template myrelease ./mychart
k9s (TUI para Kubernetes)¶
# Windows
winget install derailed.k9s
# macOS
brew install k9s
# Linux
curl -sS https://webi.sh/k9s | sh
# Ejecutar
k9s
minikube (Desarrollo local)¶
# Windows
winget install Kubernetes.minikube
# macOS
brew install minikube
# Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Iniciar cluster
minikube start
minikube dashboard
minikube tunnel # Para LoadBalancer
kind (Kubernetes in Docker)¶
# Todas las plataformas con Go instalado
go install sigs.k8s.io/kind@latest
# macOS
brew install kind
# Crear cluster
kind create cluster --name dev
kind get clusters
kind delete cluster --name dev
Infrastructure as Code¶
Terraform¶
# Windows
winget install Hashicorp.Terraform
# macOS
brew install terraform
# Linux
sudo apt install terraform
# O desde HashiCorp repo
# Verificar
terraform --version
# Comandos comunes
terraform init
terraform plan
terraform apply
terraform destroy
terraform fmt
terraform validate
terraform state list
terraform import aws_instance.example i-1234567890
terraform output
OpenTofu (Fork open source de Terraform)¶
# macOS
brew install opentofu
# Linux
curl -fsSL https://get.opentofu.org/install-opentofu.sh | sh
# Verificar
tofu --version
# Comandos idénticos a Terraform
tofu init
tofu plan
tofu apply
Pulumi¶
# Windows
winget install Pulumi.Pulumi
# macOS
brew install pulumi
# Linux
curl -fsSL https://get.pulumi.com | sh
# Verificar
pulumi version
# Comandos comunes
pulumi new aws-typescript
pulumi up
pulumi preview
pulumi destroy
pulumi stack ls
Configuración¶
Ansible¶
# Instalar (requiere Python)
pip install ansible ansible-lint
# Verificar
ansible --version
ansible-lint --version
# Comandos comunes
ansible-playbook playbook.yml
ansible-playbook playbook.yml -i inventory.ini
ansible-playbook playbook.yml --check # Dry run
ansible-playbook playbook.yml --limit "webservers"
ansible-vault encrypt secrets.yml
ansible-galaxy install geerlingguy.docker
ansible-lint playbook.yml
Cloud CLIs¶
AWS CLI¶
# Windows
winget install Amazon.AWSCLI
# macOS
brew install awscli
# Linux
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# Configurar
aws configure
# O con SSO
aws configure sso
# Verificar
aws --version
aws sts get-caller-identity
# Comandos comunes
aws s3 ls
aws ec2 describe-instances
aws ecs list-clusters
aws eks list-clusters
aws logs tail /aws/lambda/my-function --follow
Azure CLI¶
# Windows
winget install Microsoft.AzureCLI
# macOS
brew install azure-cli
# Linux
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# Configurar
az login
# Verificar
az --version
az account show
# Comandos comunes
az group list
az vm list
az aks list
az acr list
az storage account list
Google Cloud CLI¶
# Windows
winget install Google.CloudSDK
# macOS
brew install google-cloud-sdk
# Linux
curl https://sdk.cloud.google.com | bash
# Configurar
gcloud init
gcloud auth login
# Verificar
gcloud --version
gcloud config list
# Comandos comunes
gcloud compute instances list
gcloud container clusters list
gcloud run services list
gcloud functions list
CI/CD Tools¶
GitHub CLI¶
# Windows
winget install GitHub.cli
# macOS
brew install gh
# Linux
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update && sudo apt install gh
# Autenticar
gh auth login
# Comandos comunes
gh pr list
gh pr create
gh pr checkout 123
gh pr merge
gh workflow run
gh workflow list
gh run list
gh run watch
GitLab CLI¶
# Instalar
pip install python-gitlab
# O
brew install glab # GitLab CLI oficial
# Configurar
glab auth login
# Comandos comunes
glab mr list
glab mr create
glab ci status
glab ci trigger
Act (GitHub Actions local)¶
# Instalar
brew install act # macOS
go install github.com/nektos/act@latest # Con Go
# Ejecutar workflows localmente
act -l # Listar workflows
act push # Simular push event
act -j build # Ejecutar job específico
Monitoring y Observability¶
Prometheus + Grafana (Docker)¶
# docker-compose.monitoring.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
Loki (Logs)¶
# Docker
docker run -d --name loki -p 3100:3100 grafana/loki:latest
# Promtail (log shipper)
docker run -d --name promtail -v /var/log:/var/log grafana/promtail:latest
Herramientas Adicionales¶
jq (JSON processing)¶
# Windows
winget install jqlang.jq
# macOS
brew install jq
# Linux
sudo apt install jq
# Uso
kubectl get pods -o json | jq '.items[].metadata.name'
aws ec2 describe-instances | jq '.Reservations[].Instances[].InstanceId'
yq (YAML processing)¶
# Windows
winget install MikeFarah.yq
# macOS
brew install yq
# Linux
sudo snap install yq
# Uso
yq '.spec.replicas = 3' deployment.yaml
yq eval-all 'select(.kind == "Deployment")' manifest.yaml
HTTPie¶
# Instalar
pip install httpie
# Uso
http GET https://api.example.com/users
http POST https://api.example.com/users name=John
http --auth user:pass GET https://api.example.com/protected
kubectx + kubens¶
# macOS
brew install kubectx
# Linux
sudo apt install kubectx
# Uso
kubectx # Listar contextos
kubectx production # Cambiar contexto
kubens # Listar namespaces
kubens kube-system # Cambiar namespace
Comandos que Claude Code Ejecutará¶
# Docker
docker build -t myapp .
docker compose up -d
docker compose logs -f
docker system prune
# Kubernetes
kubectl apply -f manifest.yaml
kubectl get pods -A
kubectl logs <pod> -f
kubectl describe pod <pod>
helm upgrade --install myrelease ./chart
# Terraform
terraform init
terraform plan
terraform apply -auto-approve
terraform destroy
# Ansible
ansible-playbook playbook.yml
ansible-lint playbook.yml
# Cloud
aws s3 sync ./dist s3://mybucket
az storage blob upload-batch
gcloud compute ssh myinstance
# CI/CD
gh pr create
gh workflow run
act push
Verificación del Entorno¶
#!/bin/bash
echo "=== Verificación Entorno DevOps ==="
echo -e "\n--- Contenedores ---"
docker --version
docker compose version 2>/dev/null || echo "Docker Compose no encontrado"
podman --version 2>/dev/null || echo "Podman no instalado"
echo -e "\n--- Kubernetes ---"
kubectl version --client 2>/dev/null || echo "kubectl no instalado"
helm version --short 2>/dev/null || echo "Helm no instalado"
k9s version 2>/dev/null || echo "k9s no instalado"
echo -e "\n--- IaC ---"
terraform --version 2>/dev/null || echo "Terraform no instalado"
ansible --version 2>/dev/null || echo "Ansible no instalado"
echo -e "\n--- Cloud CLIs ---"
aws --version 2>/dev/null || echo "AWS CLI no instalado"
az --version 2>/dev/null | head -1 || echo "Azure CLI no instalado"
gcloud --version 2>/dev/null | head -1 || echo "gcloud no instalado"
echo -e "\n--- Utilidades ---"
jq --version 2>/dev/null || echo "jq no instalado"
yq --version 2>/dev/null || echo "yq no instalado"
gh --version 2>/dev/null || echo "GitHub CLI no instalado"
echo -e "\n=== Verificación Completa ==="