Introducción
En este tutorial serio y detallado aprenderemos a desplegar un clúster de Kubernetes en Oracle Cloud Infrastructure (OCI) utilizando el servicio Oracle Container Engine for Kubernetes (OKE). Veremos los pasos necesarios, las mejores prácticas y configuraciones recomendadas para obtener un entorno productivo y escalable.
Requisitos Previos
- Cuenta activa en Oracle Cloud con permisos de administrador o el rol adecuado.
- OCI CLI instalada y configurada (Guía de instalación).
- kubectl instalado (Documentación oficial).
- Conocimientos básicos de redes (VCN, subredes), IAM y Kubernetes.
1. Configuración de OCI CLI
Luego de instalar el OCI CLI, asegúrate de tener tu perfil configurado. Ejecuta:
oci setup config
Sigue las indicaciones para definir tenancy OCID, user OCID, region y clave API.
2. Crear un Compartimento
Recomendamos separar recursos en compartimentos. Para crear uno nuevo:
oci iam compartment create --compartment-id ltRoot-Compartment-OCIDgt
--name K8s-Compartment
--description Compartimento para OKE
Guarda el OCID del compartimento resultante.
3. Red de Máquina Virtual (VCN) y Subredes
OKE requiere una VCN y subredes públicas/privadas. OCI ofrece un asistente, pero aquí mostramos comandos mínimos:
- Crear VCN:
- Obtener OCID de la VCN:
- Crear subred pública:
- Crear subred privada:
oci network vcn create --compartment-id ltcompartment-ocidgt
--display-name oke-vcn
--cidr-block 10.0.0.0/16
VCN_OCID=(oci network vcn list --compartment-id ltcompartment-ocidgt --display-name oke-vcn --query data[0].id --raw-output)
oci network subnet create --compartment-id ltcompartment-ocidgt
--vcn-id VCN_OCID
--display-name oke-subnet-public
--cidr-block 10.0.1.0/24
--prohibit-public-ip-on-vnic false
oci network subnet create --compartment-id ltcompartment-ocidgt
--vcn-id VCN_OCID
--display-name oke-subnet-private
--cidr-block 10.0.2.0/24
--prohibit-public-ip-on-vnic true
4. Crear Cluster OKE
Puedes crear el clúster desde la consola o con OCI CLI. A continuación el ejemplo CLI:
oci ce cluster create --compartment-id ltcompartment-ocidgt
--name oke-cluster
--vcn-id VCN_OCID
--kubernetes-version v1.24.10
--pod-subnet-id ltprivate-subnet-ocidgt
--service-subnet-id ltpublic-subnet-ocidgt
Guarda el cluster-OCID resultante y espera a que el estado sea ACTIVE.
5. Crear Pool de Nodos
Creamos un Node Pool con varias instancias. Ajusta shape y count según tus necesidades:
oci ce node-pool create --compartment-id ltcompartment-ocidgt
--cluster-id ltcluster-ocidgt
--name oke-nodepool
--kubernetes-version v1.24.10
--node-shape VM.Standard2.1
--node-shape-config {memoryInGBs:8,ocpus:1}
--quantity-per-subnet 2
--subnet-ids [ltpublic-subnet-ocidgt]
Verifica el estado del node pool:
oci ce node-pool get --cluster-id ltcluster-ocidgt --node-pool-id ltnodepool-ocidgt --query data.lifecycle-state
6. Configurar kubectl
Descargamos el kubeconfig del clúster:
oci ce cluster create-kubeconfig --cluster-id ltcluster-ocidgt
--file HOME/.kube/config
--region us-phoenix-1
--token-version 2.0.0
Prueba la conexión:
kubectl get nodes
7. Desplegar una Aplicación de Ejemplo
Vamos a crear un Deployment de NGINX y un Service de tipo LoadBalancer:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.23
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
targetPort: 80
Aplica el manifiesto:
kubectl apply -f nginx-deployment.yaml
Verifica el external IP:
kubectl get svc nginx-lb
8. Gestión y Escalado
- Autoscaling de nodos: con OKE Node Pool Auto Scaling (más info).
- Horizontal Pod Autoscaler:
kubectl autoscale deployment nginx-deploy --cpu-percent=50 --min=3 --max=10
9. Seguridad y Buenas Prácticas
- Usar Network Policies para aislar pods.
- Implementar Pod Security Standards.
- Controlar acceso con RBAC y IAM de OCI.
- Actualizar versiones de Kubernetes y parches de seguridad regularmente.
Resumen de Recursos
| Recurso | Descripción |
|---|---|
| VCN | Red virtual para el clúster y los nodos. |
| Subredes | Pública para LoadBalancers, privada para nodos. |
| OKE Cluster | Plano de control gestionado por OCI. |
| Node Pool | Conjunto de instancias para ejecutar pods. |
| LoadBalancer | Servicio exponiendo aplicaciones al exterior. |
Conclusión
La combinación de Kubernetes con Oracle Cloud y OKE permite desplegar aplicaciones de forma rápida, segura y escalable. Siguiendo este tutorial, podrás tener un entorno funcional y con buenas prácticas listas para producción. Explora más configuraciones avanzadas y adáptalas a tus necesidades.
Leave a Reply