Saltar a contenido

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 ==="

Recursos