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
-
Ingresar al servidor de laboratorio con la llave proporcionada.
export LAB=X ssh student@lab-${LAB}-aio -
Cambiar al usuario root
sudo -i -
Proporcione accesos administrativos al cluster de Kubernetes
export KUBECONFIG=/etc/rancher/rke2/rke2.yamlexport PATH=$PATH:/var/lib/rancher/rke2/binexport CONTAINERD_ADDRESS=/run/k3s/containerd/containerd.sock
Inicio de laboratorio
- 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
-
Acceda a la carpeta
java-democd ~/java-demo -
Cree una carpeta llamada
manifestsmkdir manifests -
Cree un namespace para el aplicativo, llamado user y su numero de usuario.
kubectl create ns userx -
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 -
Cree un archivo adentro de
manifestsllamadok8s-template.yamlcon el siguiente contenido1 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} -
Cree una carpeta llamada
devmkdir manifests/dev -
Cree un script llamado
apply.shcon el siguiente contenido1 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 -
Asigne permisos de ejecución
chmod +x ./apply.sh -
Cree el archivo
.envcon el siguiente contenido1 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 -
Ejecute el script
./apply.sh -
Verifique los recursos levantados
kubectl get deploy,pod,svc,ingress -n userx -
Verifique el archivo
manifests/dev/k8s-resources.yamlvi manifests/dev/k8s-resources.yaml -
Edite el archivo
.envcambiando el valor deIMAGE_TAGa1.11 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 -
Ejecute el script desde el contenedor
./apply.sh -
Verifique el deployment
kubectl get deploy -n userx kubectl describe deploy/api-demo -n userx -
Verifique el archivo
manifests/dev/k8s-resources.yamlvi manifests/dev/k8s-resources.yaml