Herramientas de usuario

Herramientas del sitio


informatica:sistemas_operativos:cursos:docker_a_fondo_introduccion_kubernetes

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
informatica:sistemas_operativos:cursos:docker_a_fondo_introduccion_kubernetes [2024/03/07 10:05] – [Resumen comandos] tempwininformatica:sistemas_operativos:cursos:docker_a_fondo_introduccion_kubernetes [2024/03/07 15:49] (actual) – [Conceptos avanzados de Docker] tempwin
Línea 235: Línea 235:
   * Añadiendo una sentencia ''COPY'' en el ''Dockerfile'' para copiar el fichero de configuración y recrear la imagen   * Añadiendo una sentencia ''COPY'' en el ''Dockerfile'' para copiar el fichero de configuración y recrear la imagen
  
 +**Tienes un StatefulSet con 3 pods. El StatefulSet define una plantilla de PVC. Luego se desescala el StatefulSeta dos pods. ¿Qué ocurre con el PVC del tercer pod, con la configuración por defecto del StatefulSet?**
 +
 +  * Se elimina automáticamente
 +  * Se mantiene (**correcto**)
 +  * El desescalado da error, ya que hay que eliminar manualmente el PVC antes 
 +
 +**Un desarrollador necesita conectarse a la BBDD de desarrollo, pero no conoce la cadena de conexión. Actualmente hay un pod que usa dicha cadena de conexión. El YAML del pod es como sigue:**
 +
 +<code yaml>
 +apiVersion: v1
 +kind: Pod
 +metadata:
 +  name: client
 +spec:
 +  containers:
 +  - name: app
 +    image: acme-org/client:v1
 +    env:
 +    - name: DB_CONSTR
 +      valueFrom:
 +      - secretKeyRef:
 +        name: db-data
 +        key: constr
 +</code>
 +
 +**¿Qué le indicas al desarrollador para que pueda ver la cadena de conexión?**
 +
 +  * Que pregunte al departamento de seguridad
 +  * Que ejecute el comando ''kubectl get secret db-data -o yaml'' y luego decodifique el valor de la clave ''constr'' que estará en BASE64. (**correcto**)
 +  * Que ejecute el comando ''kubectl get cm db-data -o yaml'' y mire el valor de la clave ''constr''
 +  * Que mire los logs del pod
 +  * Que mire los logs del nodo
 +  * Que abra una sesión interactiva con el pod y ejecute el comando ''env''
 +  * ''grep DB_CONSTR''
 +
 +**¿Todos los pods de un StatefulSet tienen que tener la misma plantilla?**
 +
 +  * Para nada, para crear pods idénticos se usa el Deployment
 +  * Sí, porque un StatefulSet crea siempre pods idénticos (**correcto**)
 +  * Sólo si no usan volúmenes persistentes
 +  * El StatefulSet no crea pods, crea estados.
 +
 +**¿Es posible configurar un StatefulSet para que elimine un PVC cuando el StatefulSet es desescalado?**
 +
 +  * Sí, con la opción whenScaled a Delete (**correcto**)
 +  * No, porque los PVCs son eliminados automáticamente cuando se elimina un pod
 +  * No, solo puedes configurar que se borren los PVCs al eliminar el StatefulSet entero
 +  * No, los PVCs siempre deben ser eliminados manualmente 
 +
 +**¿Puedes exponer MySQL a través de NodePort?**
 +
 +  * No, debes usar Ingress
 +  * No, debes usar un servicio ExternalName
 +  * No, debes usar un servicio LoadBalancer
 +  * No, debes usar un servicio ClusterIP
 +  * Sí (**correcto**)
 ===== Resumen comandos ===== ===== Resumen comandos =====
  
Línea 241: Línea 297:
   * ''docker %%--%%version'': verifica la versión de Docker instalada.   * ''docker %%--%%version'': verifica la versión de Docker instalada.
   * ''docker context''   * ''docker context''
-  * ''docker context ls'': listar contextos +  * ''docker context ls'': listar contextos actuales. 
-  * ''docker context use <NOMBRE_CONTEXTO>'': alternar contexto.+  * ''docker context use <NOMBRE_CONTEXTO>'': cambia de contexto. 
 +  * ''docker context create shared-vm %%--%%docker host=tcp:%%//%%shared-vm:2735'': crea un contexto que apunta a ''%%TCP://shared-vm:2375%%'' (donde debe haber un //daemon// de Docker escuchando por el puerto 2735). 
 +  * ''docker context import <nombre-contexto>'': exporta un contexto. 
 +  * ''docker context import <nombre-contexto> <nombre-fichero>'': importa un contexto.
   * ''docker pull <NOMBRE_IMAGEN>'': descarga una imagen   * ''docker pull <NOMBRE_IMAGEN>'': descarga una imagen
   * ''docker images'': lista las imágenes descargadas   * ''docker images'': lista las imágenes descargadas
Línea 257: Línea 316:
     * ''docker run -d <NOMBRE_IMAGEN>'': libera el terminal tras la creación (segundo plano).     * ''docker run -d <NOMBRE_IMAGEN>'': libera el terminal tras la creación (segundo plano).
     * ''docker run -d -p 8080:80 <IMAGEN>'': redirige el puerto 8080 del host al 80 del contenedor creado.     * ''docker run -d -p 8080:80 <IMAGEN>'': redirige el puerto 8080 del host al 80 del contenedor creado.
 +    * ''docker run -it <IMAGEN> /bin/bash'': inicia una sesión interactiva (ejecutando ''bash'').
 +    * ''docker run -v /etc/tmp:/test-volume test-volume'': crea un //bind mount// que asocia ''/etc/tmp'' del host con ''/test-volume'' del contenedor.
 +    * ''docker run -v /test-volume test-volume'': crea un volumen anónimo (Docker lo hace automáticamente).
 +    * ''docker run -e %%"variable=valor"%% <nombre_imagen>'': pasa variable de entorno a un contenedor.
 +    * ''docker run %%--%%network test-network <IMAGEN>'': crea un contenedor que use la red ''test-network''.
   * ''docker ps'': lista los contenedores en ejecución.   * ''docker ps'': lista los contenedores en ejecución.
     * ''docker ps -a'': lista los contenedores en ejecución y parados.     * ''docker ps -a'': lista los contenedores en ejecución y parados.
Línea 262: Línea 326:
     * ''docker rm $(docker ps -q -a)'': borra todos los contenedores.     * ''docker rm $(docker ps -q -a)'': borra todos los contenedores.
     * ''docker rm $(docker ps -q -a -f)'': borra todos los contenedores (incluso los que están en marcha).     * ''docker rm $(docker ps -q -a -f)'': borra todos los contenedores (incluso los que están en marcha).
 +    * ''docker ps -s'': lista los contenedores y su tamaño, tanto virtual (total capas) como el de la capa de escritura (última capa).
   * ''docker stop <CONTENEDOR>'': detiene un contenedor   * ''docker stop <CONTENEDOR>'': detiene un contenedor
   * ''docker kill <CONTENEDOR>'': mata el proceso del contenedor.   * ''docker kill <CONTENEDOR>'': mata el proceso del contenedor.
-  * ''docker start <CONTENEDOR>'': reinicia un contenedor.+  * ''docker start <CONTENEDOR>'': reinicia un contenedor que estaba parado.
   * ''docker inspect <ID_CONTENEDOR> -f %%"{{ .NetworkSettings.IPAddress }}"%%'': muestra la IP del contenedor   * ''docker inspect <ID_CONTENEDOR> -f %%"{{ .NetworkSettings.IPAddress }}"%%'': muestra la IP del contenedor
   * ''docker build . -t <NOMBRE>'': crea una imagen llamada ''NOMBRE'' a partir de un ''Dockerfile'' del mismo directorio.   * ''docker build . -t <NOMBRE>'': crea una imagen llamada ''NOMBRE'' a partir de un ''Dockerfile'' del mismo directorio.
Línea 270: Línea 335:
   * ''docker history <IMAGEN>'': información de las capas que componen una imagen.   * ''docker history <IMAGEN>'': información de las capas que componen una imagen.
   * ''docker exec <CONTENEDOR> <COMANDO>'': ejecuta un proceso nuevo en un contenedor en marcha.   * ''docker exec <CONTENEDOR> <COMANDO>'': ejecuta un proceso nuevo en un contenedor en marcha.
 +  * ''docker inspect %%--format "{{json .Mounts}}"%% <id-contenedor>'': ver los volúmenes de un contenedor.
 +  * ''docker volume create <NOMBRE_VOLUMEN>'': crea un volumen
 +  * ''docker volume ls'': lista los volúmenes
 +  * ''docker inspect <NOMBRE_VOLUMEN>'': obtiene los datos del volumen.
 +  * ''docker volume prune'': borra los volúmenes que no usan ningún contenedor.
 +  * ''docker tag <IMAGEN> <IMAGEN:ETIQUETA>'': etiqueta una imagen con ''ETIQUETA''.
 +    * ''docker build . -t test-volume:v2'': etiqueta una imagen a la hora de construirla.
 +    * ''docker rmi test-volume:v2'': borra una etiqueta.
 +  * ''docker push <USUARIO/IMAGEN>'': sube la imagen a un repositorio.
 +  * ''docker login <REPOSITORIO>'': autenticarse contra un repositorio.
 +  * ''docker buildx build %%--%%platform linux/arm/v7 -t demo:arm .'': construye una imagen para cierta plataforma.
 +  * ''docker system df'': espacio usado en disco.
 +  * ''docker system prune'': elimina contenedores parados, imágenes sin dependencias y redes no utilizadas.
 +  * ''docker compose %%--%%version'': verifica la versión instalada de Docker Compose.
 +    * ''docker compose up'': descarga la imagen (si no existe en local) y pone en marcha un contenedor a partir de ella
 +    * ''docker compose up -d'': levanta los servicios en segundo plano (no se enlaza con ellos).
 +    * ''docker compose up <SERVICIO>'': levanta solo el servicio ''SERVICIO''.
 +    * ''docker compose -f docker-compose.development.yml up'': especifica el fichero Docker Compose a utilizar.
 +    * ''docker compose -f docker-compose.yml -f docker-compose.prod.yml up''.
 +    * ''docker compose -f docker-compose.yml -f docker-compose.prod.yml config'': ver el fichero combinado resultante.
 +    * ''docker compose --profile front up'': levanta los servicios con el perfil ''up'' y los que no tienen ningún perfil asociado.
 +    * ''docker compose build'': construye imágenes con Docker Compose.
 +    * ''docker compose up %%--%%scale <SERVICIO=5>'': escalar un servicio con 5 instancias.
 +  * ''docker attach <CONTENEDOR>'': permite enlazarnos a un contenedor.
 +  * ''docker network ls'': lista las redes de Docker que hay en la máquina.
 +  * ''docker network create %%--%%driver bridge <nombre-red>'': crea una red tipo bridge.
 +  * ''docker network create %%--%%driver host <nombre-red>'': crea una red tipo host (solo puede existir una).
 +  * ''docker network rm <ID_RED>'': elimina una red.
 +  * ''docker network prune'': elimina todas las redes que no estén en uso.
 +  * ''docker logs <CONTENEDOR>'': ver los //logs// de un contenedor (la salida por pantalla, //stdin//, o errores, //stdout//).
 +  * ''docker cp <CONTENEDOR>:logs/log.txt .'': copia del contenedor al host.
 +  * ''docker cp foo.txt <CONTENEDOR>:/app/foo.txt'': copia del host al contenedor
 +  * ''docker commit <CONTENEDOR> <NUEVA_IMAGE>'': crea una imagen a partir de un contenedor.
  
 Listado de ficheros: Listado de ficheros:
Línea 275: Línea 373:
   * ''/var/run/docker.sock'': //named pipe// que utilizan cliente y servidor de Docker para comunicarse.   * ''/var/run/docker.sock'': //named pipe// que utilizan cliente y servidor de Docker para comunicarse.
   * ''Dockerfile'': instrucciones para la creación de imágenes.   * ''Dockerfile'': instrucciones para la creación de imágenes.
 +  * ''docker-compose.yml'': nombre habitual del fichero de configuración de Docker Compose.
 +  * ''docker-compose.override.yml''
 +  * ''kubectl get secrets'': muestra los secretos que hay en el clúster.
 +  * ''kubectl create secret generic my_secret %%--%%from-literal password=PassW0rD'': crea un secreto.
 +  * ''kubectl logs <NOMBRE_POD>'': muestra los logs de un pod (lo que su contenedor o contenedores muestren por //stdout// o //stderr//).
 +    * ''kubectl logs -l <etiqueta=valor>'': muestra los logs de los pods que tengan la etiqueta indicada.
  
 Dockerfile: Dockerfile:
Línea 280: Línea 384:
   * ''FROM <IMAGEN>'': indica la imagen base.   * ''FROM <IMAGEN>'': indica la imagen base.
   * ''ENV <variable>=<valor>'': define variables de entorno del contenedor.   * ''ENV <variable>=<valor>'': define variables de entorno del contenedor.
 +  * ''ARG <ETIQUETA>'': crea una variable en tiempo de construcción (no existirá en el contenedor).
   * ''WORKDIR <DIRECTORIO>'': se sitúa en ''DIRECTORIO'' en el contenedor (como hacer ''cd DIRECTORIO'')   * ''WORKDIR <DIRECTORIO>'': se sitúa en ''DIRECTORIO'' en el contenedor (como hacer ''cd DIRECTORIO'')
   * ''COPY <ORIGEN_LOCAL> <DESTINO_CONTENEDOR>'': copia ficheros de un directorio local a un directorio del contenedor.   * ''COPY <ORIGEN_LOCAL> <DESTINO_CONTENEDOR>'': copia ficheros de un directorio local a un directorio del contenedor.
Línea 287: Línea 392:
     * ''CMD [<COMANDO1>, <COMANDO2>]'': ejecuta en forma //exec// (COMANDO1 COMANDO2)     * ''CMD [<COMANDO1>, <COMANDO2>]'': ejecuta en forma //exec// (COMANDO1 COMANDO2)
     * ''CMD <COMANDO1> <COMANDO2>'': ejecuta en forma //shell// (''/bin/sh -c 'COMANDO1 COMANDO2''')     * ''CMD <COMANDO1> <COMANDO2>'': ejecuta en forma //shell// (''/bin/sh -c 'COMANDO1 COMANDO2''')
-  * ''ENTRYPOINT <COMANDO>'': +  * ''ENTRYPOINT <COMANDO>'': igual que ''CMD'', pero recomendado si no queremos permitir que se modifique el proceso inicial de la imagen. 
 +  * ''EXPOSE <PUERTO>'': indica el puerto que quiere exponer / abrir el contenedor. Es informativo. 
 +  * ''VOLUME <DIRECTORIO>'': indica que ''DIRECTORIO'' será un volumen 
 + 
 +Dockerfile multi-stage: 
 + 
 +<code> 
 +FROM golang:1.9-stretch 
 +WORKDIR /go/src/hello_world 
 +COPY hello_world.go . 
 +RUN go build 
 + 
 +FROM ubuntu:latest 
 +WORKDIR /root/ 
 +COPY --from=0 /go/src/hello_world . 
 +ENTRYPOINT ["/root/hello_world"
 +</code> 
 + 
 +Docker Compose: 
 + 
 +<code yaml> 
 +version: '3' 
 + 
 +services: 
 +  sample-api: 
 +    image: dockercampusmvp/nodejs-sample 
 +    ports: 
 +      - "9000:3000" 
 +    environment: 
 +      - PORT=80 
 +    volumes: 
 +      - /home/data:/var/lib/data 
 +      - data-volume:/var/lib/data 
 +      - data-volume2:/tmp 
 +    profiles: ["backend"
 + 
 +volumes: 
 +  data-volume: 
 +   
 +volumes: 
 +  data-volume2: 
 +     external: true 
 +</code> 
 + 
 +Multicontenedor: 
 + 
 +<code yaml> 
 +version: '3' 
 + 
 +services: 
 +  client: 
 +    image: dockercampusmvp/nodejs-sample 
 +  server: 
 +    image: dockercampusmvp/nodejs-sample 
 +</code> 
 + 
 +Construir imágenes con Docker Compose: 
 + 
 +<code yaml> 
 +version: '3' 
 + 
 +services: 
 +  sample-api: 
 +    image: dockercampusmvp/nodejs-sample:dev 
 +    build: 
 +      context: ./nodejs-sample 
 +      dockerfile: Dockerfile 
 +</code> 
 + 
 +**Kubernetes**: 
 + 
 +  * ''minikube start'': Minikube ejecuta Kubernetes como un contenedor de Docker. 
 +  * ''minikube stop'': detine el contenedor de Minikube. 
 +  * ''minikube ip'':muestra la IP de Minikube. 
 +  * ''minikube tunnel'': crea un emulador de balanceador de carga (para probar los //LoadBalancer//). 
 +  * ''minikube addons enable ingress'': instalar un controlador ingress en Minikube. 
 +  * ''minikube service -n ingress-nginx ingress-controller'': muestra las URL de acceso al controlador de ingress ''ingress-controller'' del espacio de nombres ''ingress-nginx''
 +  * ''kubectl version'': información sobre la versión del cliente y servidor de Kubernetes instalados. 
 +  * ''kubectl get nodes'': lista los nodoso de nuestro clúster. 
 +  * ''kubectl get pods'': lista los pods. 
 +    * ''kubectl get pods -o wide'': lista los pods y muestra su IP y otros campos más. 
 +  * ''kubectl config get-contexts'': lista los contextos de configuración que tengamos 
 +  * ''kubectl config current-context'': muestra el contexto actual. 
 +  * ''kubectl config use-context <nombre-contexto>'': cambia el contexto actual. 
 +  * ''kubectl %%--%%kubeconfig=<RUTA_FICHERO_CONFIG> <comando-de-kubcetl>'': especifica el fichero de configuración de Kubernetes a usar. 
 +  * ''kubectl run my-first-deployment %%--%%image=dockercampusmvp/go-hello-world'': crea y despliega un pod con 1 contenedor. 
 +    * ''kubectl run bb %%--%%image busybox %%--%%rm %%--%%restart=Never -it %%--%% /bin/sh'': crea un pod llamado ''bb'' a partir de la imagen ''busybox'', lo enlaza a nuestra terminal y ejecuta un shell. Se eliminará el pod cuando termine de ejecutarse. El pod no intentará reiniciar el contenedor. 
 +  * ''kubectl delete pod <nombre-del-pod>'': elimina un pod. 
 +  * ''kubectl create deployment <NOMBRE_DEPLOYMENT> --image=<IMAGEN>'': crea un //deployment// indicando que debe ejecutarse un contenedor a partir de cierta imagen. Se puede abreviar ''deployment'' con ''deploy''
 +  * ''kubectl describe'': detalle sobre los eventos de cierto objeto. 
 +  * ''kubectl expose pod <NOMBRE_POD> %%--%%name <NOMBRE_SERVICIO> %%--%%port <puerto>'': crea un servicio pra exponer cierto pod por un determinado puerto. 
 +  * ''kubectl get services'': muestra los servicios. También se puede acortar ''services'' con ''svc''
 +  * ''kubectl get pods %%--%%show-labels'': mostrar las etiquetas de los pods. 
 +  * ''kubectl get pod <nombre_pod> -o json'': muestra la descripción del pod en formato JSON. 
 +  * ''kubectl get nodes'': mostrar los nodos del clúster de kubernetes. 
 +  * ''kubectl taint node <nombre-node> <clave>=<valor>:<efecto>'': "contamina" un nodo para que no se ejecute pods en él. 
 +  * ''kubectl get svc hello-svc -o yaml'': obtiene la definición del servicio ''hello-svc'' en YAML. 
 +  * ''kubectl get pod hello -o yaml'': obtiene la definición del objeto ''hello'' en YAML. 
 +  * ''kubectl create ns <nombre-namespace>'': crea un espacio de nombres. 
 +    * ''kubectl run nginx --image nginx -n mi-espacio-nombres'': creamos el pod ''nginx'' en el espacio de nombres ''mi-espacio-nombres'' con un contenedor basado en la imagen ''nginx''
 +  * ''kubectl delete ns <espacio-de-nombres>'': elimina un espacio de nombres y todo recurso contenido en él. 
 +  * ''kubectl apply -f <NOMBRE_FICHERO>'': aplica un fichero para la creación de algún objeto en Kubernetes. 
 +  * ''kubectl delete -f <fichero>'': elimina los recursos definidos en el fichero (secciones ''kind'' y ''metadata.name''). 
 +  * ''kubectl run hello %%--%%image dockercampusmvp/go-hello-world %%--%%dry-run=client -o yaml > pod.yaml'': genera el YAML necesario para poder crear un pod de forma declarativa. 
 +  * ''kubectl explain <recurso>'': muestra la especificación YAML de cualquier recurso. 
 +    * ''kubectl explain pod.spec'': muestra los campos que tiene ''spec'' en la especificación YAML de un pod. 
 +  * ''kubectl port-forward <nombre-pod> <puerto-local>:<puerto-pod>'': establece un túnel entre nuestra máquina y el pod para poder acceder a él. 
 +  * ''kubectl delete rs <nombre-replicaset> .'': elimina un ReplicaSet y los pods que gestiona. 
 +  * ''kubectl scale rs/<nombre-replicaset> %%--%%replicas=4'': escala un ReplicaSet a 4 pods. 
 +  * ''kubectl scale deploy/<nombre-deployment> %%--%%replicas=<numero-replicas>'': escala un deployment. 
 +  * ''kubectl rollout status'': muestra el estado de un //rolling update//. 
 +  * ''kubectl rollout history'': mostrar las versiones de //deployment//
 +  * ''kubectl rollout undo deploy/<NOMBRE_DEPLOY> %%--%%to-revision=1'': vamos a la versión 1 de cierto deployment. 
 +  * ''kubectl annotate deploy/hello kubernetes.io/change-cause="volvemos atrás porque eso no va"'': indicamos una nota sobre la razón que provoca el //rollling update//. 
 +  * ''kubectl create cm staging %%--%%from-literal api_url=%%https://api_service%% %%--%%from-literal environment_name=staging'': crea un Config Map 
 +  * ''kubectl create cm config_files %%--%%from-file web.config %%--%%from-file config.ini=config.staging.ini'': crea un Config Map con fichero. 
 +  * ''kubectl get ing'': ver recursos //Ingress//
 +  * ''kubectl describe ing <nombre-recurso-ingress>'': información sobre un recurso //Ingress//
 +  * ''kubectl get svc -n ingress-nginx'': ver el servicio que se expone al exterior del espacio de nombres ''ingress-nginx''
 +  * ''kubectl get deploy'': muestra los //deployments//
 + 
 +Creación de un pod de forma declarativa: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +kind: Pod 
 +metadata: 
 +  labels: 
 +    run: hello-declarative 
 +  name: hello-declarative 
 +spec: 
 +  containers: 
 +  - image: dockercampusmvp/go-hello-world 
 +    name: hello 
 +</code> 
 + 
 +Creación de pod de forma declarativa indicando variables de entorno: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +kind: Pod 
 +metadata: 
 +  name: mypod 
 +spec: 
 +  containers: 
 +  - image: imagenAUsar 
 +    name: ctr 
 +    env: 
 +    - name: FooVar 
 +      value: FooValue 
 +    - name: BarVar 
 +      value: BarValue 
 +</code> 
 + 
 +Creando un servicio de forma declarativa: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +kind: Service 
 +metadata: 
 +  name: hello-svc-declarative 
 +spec: 
 +  ports: 
 +  - port: 8080 
 +    targetPort: 80 
 +    name: http 
 +    protocol: TCP 
 +  - port: 9000 
 +    targetPort: 3000 
 +    name: metrics 
 +  selector: 
 +    run: hello-declarative 
 +</code> 
 + 
 +ReplicaSet: 
 + 
 +<code yaml> 
 +apiVersion: apps/v1 
 +kind: ReplicaSet 
 +metadata: 
 +  name: hello 
 +spec: 
 +  replicas: 1 
 +  selector: 
 +    matchLabels: 
 +      app: hello 
 +  template: 
 +    metadata: 
 +      labels: 
 +        app: hello 
 +    spec: 
 +      containers: 
 +      - name: hello 
 +        image: dockercampusmvp/go-hello-world 
 +</code> 
 + 
 +Deployment: 
 + 
 +<code yaml> 
 +apiVersion: apps/v1 
 +kind: Deployment 
 +metadata: 
 +  name: hello 
 +spec: 
 +  strategy: 
 +    type: rollingUpdate 
 +    rollingUpdate: 
 +      maxSurge: 1               # El valor por defecto es 25% 
 +      maxUnavailable: 20%       # El valor por defecto es 25% 
 +  replicas: 5 
 +  selector: 
 +    matchLabels: 
 +      app: hello 
 +  template: 
 +    metadata: 
 +      labels: 
 +        app: hello 
 +    spec: 
 +      containers: 
 +      - name: hello 
 +        image: dockercampusmvp/go-hello-world 
 +</code> 
 + 
 +ConfigMap: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +kind: ConfigMap 
 +metadata: 
 +  name: staging 
 +data: 
 +  api_url: https://api_service 
 +  environment_name: staging 
 +</code> 
 + 
 +Config Map que contiene un fichero: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +kind: ConfigMap 
 +metadata: 
 +  name: config_staging 
 +data: 
 +  config.json:
 +    { 
 +        "environment": "staging", 
 +        "api":
 +            "server": "https://myapi" 
 +        } 
 +    } 
 +</code> 
 + 
 +Definición de volúmenes de pod: 
 + 
 +<code yaml> 
 +spec: 
 +  volumes: 
 +  - name: shared 
 +    emptyDir: {} 
 +</code> 
 + 
 +Montaje de un Config Map en un contenedor de un pod: 
 + 
 +<code yaml> 
 +apiVersion: apps/v1 
 +kind: Deployment 
 +metadata: 
 +  name: demovol 
 +spec: 
 +  selector: 
 +    matchLabels: 
 +      app: demovol 
 +  template: 
 +    metadata: 
 +      labels: 
 +        app: demovol 
 +    spec: 
 +      # Definimos el volumen 
 +      volumes: 
 +      - name: cfg 
 +        configMap: 
 +          name: config_staging  # Nombre del configmap 
 +      containers: 
 +      - name: demo 
 +        image: dockercampusmvp/go-hello-world 
 +        # Montamos el volumen 
 +        volumeMounts: 
 +        - name: cfg     # Nombre del volumen 
 +          mountPath: /app/config 
 +</code> 
 + 
 +Secretos: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +data: 
 +  password: VmVyeUNvbXBsZXhQYXNzdzByZA== 
 +kind: Secret 
 +metadata: 
 +  name: mysecret 
 +</code> 
 + 
 +Comando inicial de un contenedor: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +kind: Pod 
 +metadata: 
 +  name: command 
 +spec: 
 +  containers: 
 +  - name: main 
 +    image: alpine 
 +    command: 
 +    - /bin/ls 
 +  restartPolicy: Never 
 +</code> 
 + 
 +Servicio NodePort: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +kind: Service 
 +metadata: 
 +  name: hello 
 +spec: 
 +  selector: 
 +    app: hello 
 +  ports: 
 +  - name: http 
 +    port: 8080 
 +    targetPort: http 
 +  type: NodePort 
 +</code> 
 + 
 +Servicio LoadBalancer: 
 + 
 +<code yaml> 
 +apiVersion: v1 
 +kind: Service 
 +metadata: 
 +  name: hello 
 +spec: 
 +  selector: 
 +    app: hello 
 +  ports: 
 +  - name: http 
 +    port: 8080 
 +    targetPort: http 
 +  type: LoadBalancer 
 +</code> 
 + 
 + 
 +Recurso Ingress: 
 + 
 +<code yaml> 
 +apiVersion: networking.k8s.io/v1 
 +kind: Ingress 
 +metadata: 
 +  labels: 
 +    app: demo-ingress 
 +  name: demo-ingress 
 +  annotations: 
 +    ingress.kubernetes.io/ssl-redirect: "false" 
 +spec: 
 +  rules: 
 +  - http: 
 +      paths: 
 +      - path: /api 
 +        pathType: ImplementationSpecific 
 +        backend: 
 +          service: 
 +            name: apisvc 
 +            port: 
 +              number: 80 
 +      - path: /hello 
 +        pathType: ImplementationSpecific 
 +        backend: 
 +          service: 
 +            name: hellosvc 
 +            port: 
 +              number: 80 
 +</code> 
 + 
 +Recurso Ingress con hosts virtuales: 
 + 
 +<code yaml> 
 +apiVersion: networking.k8s.io/v1 
 +kind: Ingress 
 +metadata: 
 +  name: hello-ingress 
 +spec: 
 +  rules: 
 +  - host: dev.campusmvp.es 
 +    http: 
 +      paths: 
 +      - pathType: Prefix 
 +        path: "/api" 
 +        backend: 
 +          service: 
 +            name: hellosvc 
 +            port: 
 +              name: http 
 +</code>
informatica/sistemas_operativos/cursos/docker_a_fondo_introduccion_kubernetes.1709802310.txt.gz · Última modificación: por tempwin