Skip to content

Tema:

Despliegue de manifiestos YAML

Laboratorio: Despliegue de manifiestos YAML

Descripción

La presente guía aborda la automatización del manejo de manifiestos en formato YAML.

Objetivos

  • Realizar la configuración de los recursos de K8s a través de variables
  • Desplegar los recursos a través de comandos

Antes de comenzar

  • Contar con el acceso al ambiente del laboratorio

Conexion a ambiente de kubernetes

  1. Ingresar al servidor de laboratorio con la llave proporcionada.

    export LAB=X
    ssh student@lab-${LAB}-aio 
    

  2. Cambiar al usuario root

    sudo -i
    

  3. Proporcione accesos administrativos al cluster de Kubernetes

    export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
    
    export PATH=$PATH:/var/lib/rancher/rke2/bin
    
    export CONTAINERD_ADDRESS=/run/k3s/containerd/containerd.sock
    

Inicio de laboratorio

  1. Cree el archivo /etc/rancher/rke2/registries.yaml con el siguiente contenido. Cambiando la url de harbor por su propia url
    configs:
      harbor.x-x-x-x.nip.io:
        tls:
          insecure_skip_verify: true
    

Reinicie el servicio de rke2

systemctl restart rke2-server
  1. Acceda a la carpeta java-demo

    cd ~/java-demo
    

  2. Cree una carpeta llamada manifests

    mkdir manifests
    

  3. Cree un namespace para el aplicativo, llamado user y su numero de usuario.

    kubectl create ns userx
    

  4. Vamos a crear un pull secret en este namespace para poder descargar la imagen a usar

    kubectl create secret docker-registry regcred \
      --docker-server=harbor.x-x-x-x.nip.io \
      --docker-username=pull-image \
      --docker-password=Pull1234 \
      --docker-email=micorreo@example.com \
      -n userx
    

  5. Cree un archivo adentro de manifests llamado k8s-template.yaml con el siguiente contenido

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ${DEPLOYMENT_NAME}
      namespace: ${NAMESPACE}
      labels:
        app: ${DEPLOYMENT_NAME}
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ${DEPLOYMENT_NAME}
      template:
        metadata:
          labels:
            app: ${DEPLOYMENT_NAME}
        spec:
          imagePullSecrets:
            - name: regcred
          containers:
            - name: ${DEPLOYMENT_NAME}
              image: ${REGISTRY_URL}/${REGISTRY_PROJECT}/${IMAGE_NAME}:${IMAGE_TAG}
              ports:
                - containerPort: ${SERVICE_PORT}
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ${DEPLOYMENT_NAME}-service
      namespace: ${NAMESPACE}
    spec:
      selector:
        app: ${DEPLOYMENT_NAME}
      ports:
        - name: http
          protocol: TCP
          port: ${SERVICE_PORT}
          targetPort: ${SERVICE_PORT}
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ${DEPLOYMENT_NAME}-ingress
      namespace: ${NAMESPACE}
    spec:
      rules:
      - host: "${INGRESS_HOST}"
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: ${DEPLOYMENT_NAME}-service
                port:
                  number: ${SERVICE_PORT}
    

  6. Cree una carpeta llamada dev

    mkdir manifests/dev
    

  7. Cree un script llamado apply.sh con el siguiente contenido

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/bin/bash
    
    cd /usr/src/app
    echo $PWD
    
    set -o allexport
    source .env
    set +o allexport
    
    echo "[INFO] Reemplazando variables en archivo template"
    envsubst < manifests/k8s-template.yaml > manifests/dev/k8s-resources.yaml
    
    echo "[INFO] Recursos creados con valores substituidos"
    cat manifests/dev/k8s-resources.yaml
    
    echo "[INFO] Desplegando aplicación"
    kubectl apply -f manifests/dev/k8s-resources.yaml
    

  8. Asigne permisos de ejecución

    chmod +x ./apply.sh
    

  9. Cree el archivo .env con el siguiente contenido

    1
    2
    3
    4
    5
    6
    7
    8
    DEPLOYMENT_NAME=api-demo
    NAMESPACE=userx
    REGISTRY_URL=harbor.x-x-x-x.nip.io
    REGISTRY_PROJECT=api-test
    IMAGE_NAME=api-test
    IMAGE_TAG=1.0
    SERVICE_PORT=8080
    INGRESS_HOST=api-demo.x-x-x-x.nip.io
    

  10. Ejecute el script

    ./apply.sh
    

  11. Verifique los recursos levantados

    kubectl get deploy,pod,svc,ingress -n userx
    

  12. Verifique el archivo manifests/dev/k8s-resources.yaml

    vi manifests/dev/k8s-resources.yaml
    

  13. Edite el archivo .env cambiando el valor de IMAGE_TAG a 1.1

    1
    2
    3
    4
    5
    6
    7
    8
    DEPLOYMENT_NAME=api-demo
    NAMESPACE=userx
    REGISTRY_URL=harbor.x-x-x-x.nip.io
    REGISTRY_PROJECT=api-test
    IMAGE_NAME=api-test
    IMAGE_TAG=1.1
    SERVICE_PORT=8080
    INGRESS_HOST=api-demo.x-x-x-x.nip.io
    

  14. Ejecute el script desde el contenedor

    ./apply.sh
    

  15. Verifique el deployment

    kubectl get deploy -n userx
    kubectl describe deploy/api-demo -n userx
    

  16. Verifique el archivo manifests/dev/k8s-resources.yaml

    vi manifests/dev/k8s-resources.yaml