Diferències
Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
info:cursos:pue:devops:sesion8 [09/03/2019 01:52] – [kubernetes] mate | info:cursos:pue:devops:sesion8 [08/04/2020 06:57] (actual) – [Sesión 8 : kubernetes] mate | ||
---|---|---|---|
Línia 1: | Línia 1: | ||
= Sesión 8 : kubernetes | = Sesión 8 : kubernetes | ||
+ | {{tag> | ||
== katacoda | == katacoda | ||
* [[https:// | * [[https:// | ||
Línia 26: | Línia 27: | ||
* deployment | * deployment | ||
* apartado *template*: definición del *pod* o *pods* | * apartado *template*: definición del *pod* o *pods* | ||
+ | * estrategias de autoescalado | ||
+ | * histórico (roll-back) | ||
* service | * service | ||
* clusterIP | * clusterIP | ||
Línia 40: | Línia 43: | ||
* se puede afinar su asignación | * se puede afinar su asignación | ||
* Estratégias despliegue: | * Estratégias despliegue: | ||
+ | * [[https:// | ||
* RollingUpdate | * RollingUpdate | ||
* Blue/Green | * Blue/Green | ||
* Canary | * Canary | ||
+ | * A/B testing | ||
+ | * ventajas | ||
+ | * autoescalado | ||
+ | * gestión de volúmenes | ||
+ | * gestión de red | ||
+ | * docker-enterprise apuesta por kubernetes, futuro de docker-swarm? | ||
+ | * kubernetes=linux, | ||
+ | * deployment vs daemonset (swarm " | ||
+ | * daemontset -> recolectores | ||
+ | |||
+ | == labs | ||
+ | * [[https:// | ||
+ | * helm.sh (no temario) : recetas (Charts) para desplegar sobre kubernetes | ||
+ | * microsoft/ | ||
+ | * gitlab using helm | ||
+ | * duffle = creación de kubernetes + helm | ||
+ | * traefik kubernetes = [[https:// | ||
+ | * istio | ||
+ | * kong = capa + plugin ram lua + nginx | ||
+ | |||
+ | === katacoda | ||
+ | ==== lab1 | ||
+ | * [[https:// | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ==== lab2 | ||
+ | * [[https:// | ||
+ | * kubeadm : aprovisionamiento de nodos | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * **--discovery-token-unsafe-skip-ca-verification** : bybass Discovery Token verification | ||
+ | * '' | ||
+ | * CNI: Container Network Interface : [[https:// | ||
+ | * '' | ||
+ | * [[https:// | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * Creacion **ServiceAccount**:< | ||
+ | apiVersion: v1 | ||
+ | kind: ServiceAccount | ||
+ | metadata: | ||
+ | name: admin-user | ||
+ | namespace: kube-system | ||
+ | --- | ||
+ | apiVersion: rbac.authorization.k8s.io/ | ||
+ | kind: ClusterRoleBinding | ||
+ | metadata: | ||
+ | name: admin-user | ||
+ | roleRef: | ||
+ | apiGroup: rbac.authorization.k8s.io | ||
+ | kind: ClusterRole | ||
+ | name: cluster-admin | ||
+ | subjects: | ||
+ | - kind: ServiceAccount | ||
+ | name: admin-user | ||
+ | namespace: kube-system | ||
+ | EOF</ | ||
+ | * get token: '' | ||
+ | * '' | ||
+ | |||
+ | ==== lab3 | ||
+ | * [[https:// | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * en un solo comando: '' | ||
+ | * escalar contenedores: | ||
+ | * '' | ||
+ | * cada nuevo pod creado se añade al LB | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ==== lab4 | ||
+ | * [[https:// | ||
+ | * <code yaml; deployment.yaml> | ||
+ | kind: Deployment | ||
+ | metadata: | ||
+ | name: webapp1 | ||
+ | spec: | ||
+ | replicas: 1 | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | app: webapp1 | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: webapp1 | ||
+ | image: katacoda/ | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * <code yaml; service.yaml> | ||
+ | kind: Service | ||
+ | metadata: | ||
+ | name: webapp1-svc | ||
+ | labels: | ||
+ | app: webapp1 | ||
+ | spec: | ||
+ | type: NodePort | ||
+ | ports: | ||
+ | - port: 80 | ||
+ | nodePort: 30080 | ||
+ | selector: | ||
+ | app: webapp1</ | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * (modificación de las réplicas del deployment.yaml) -> '' | ||
+ | * '' | ||
+ | |||
+ | ==== lab5 | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * arrancan un cluster k8s con 1 master y 1 nodo: | ||
+ | * API | ||
+ | * Master | ||
+ | * Proxy | ||
+ | * DNS | ||
+ | * k8s service deployment: | ||
+ | * replication controller: cuantas instancias, la imagen docker a usar, el nombre que lo identifica (más otras de configuración y discovery) | ||
+ | * '' | ||
+ | * <code yaml; redis-master-controller.yaml> | ||
+ | kind: ReplicationController | ||
+ | metadata: | ||
+ | name: redis-master | ||
+ | labels: | ||
+ | name: redis-master | ||
+ | spec: | ||
+ | replicas: 1 | ||
+ | selector: | ||
+ | name: redis-master | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | name: redis-master | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: master | ||
+ | image: redis: | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | * service: | ||
+ | * load balancer que reenvia el tráfico a 1 o más contenedores (aunque estén en nodos diferentes) | ||
+ | * comunica dentro del clustes, rara vez expone puertos al exterior | ||
+ | * para comunicarnos desde fuera del cluster se recomienda el uso de un LoadBalancer | ||
+ | * '' | ||
+ | * <code yaml; redis-master-service.yaml> | ||
+ | kind: Service | ||
+ | metadata: | ||
+ | name: redis-master | ||
+ | labels: | ||
+ | name: redis-master | ||
+ | spec: | ||
+ | ports: | ||
+ | # the port that this service should serve on | ||
+ | - port: 6379 | ||
+ | targetPort: 6379 | ||
+ | selector: | ||
+ | name: redis-master</ | ||
+ | * '' | ||
+ | * '' | ||
+ | * replication slave pods | ||
+ | * [[http:// | ||
+ | * uso de variables de entorno para el descubrimiento de otros PODs | ||
+ | * '' | ||
+ | * <code yaml; redis-slave-controller.yaml> | ||
+ | kind: ReplicationController | ||
+ | metadata: | ||
+ | name: redis-slave | ||
+ | labels: | ||
+ | name: redis-slave | ||
+ | spec: | ||
+ | replicas: 2 | ||
+ | selector: | ||
+ | name: redis-slave | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | name: redis-slave | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: worker | ||
+ | image: gcr.io/ | ||
+ | env: | ||
+ | - name: GET_HOSTS_FROM | ||
+ | value: dns | ||
+ | # If your cluster config does not include a dns service, then to | ||
+ | # instead access an environment variable to find the master | ||
+ | # service' | ||
+ | # uncomment the line below. | ||
+ | # value: env | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | * '' | ||
+ | * service redis slaves | ||
+ | * '' | ||
+ | * <code yaml; redis-slave-service.yaml> | ||
+ | kind: Service | ||
+ | metadata: | ||
+ | name: redis-slave | ||
+ | labels: | ||
+ | name: redis-slave | ||
+ | spec: | ||
+ | ports: | ||
+ | # the port that this service should serve on | ||
+ | - port: 6379 | ||
+ | selector: | ||
+ | name: redis-slave</ | ||
+ | * '' | ||
+ | * **PQ NO TIENE UN TARGETPORT COMO EL REDIS-MASTER-SERVICE.YAML** | ||
+ | * deploy de la web app | ||
+ | * '' | ||
+ | * <code yaml; frontend-controller.yaml> | ||
+ | kind: ReplicationController | ||
+ | metadata: | ||
+ | name: frontend | ||
+ | labels: | ||
+ | name: frontend | ||
+ | spec: | ||
+ | replicas: 3 | ||
+ | selector: | ||
+ | name: frontend | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | name: frontend | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: php-redis | ||
+ | image: gcr.io/ | ||
+ | env: | ||
+ | - name: GET_HOSTS_FROM | ||
+ | value: dns | ||
+ | # If your cluster config does not include a dns service, then to | ||
+ | # instead access environment variables to find service host | ||
+ | # info, comment out the ' | ||
+ | # line below. | ||
+ | # value: env | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | * '' | ||
+ | * '' | ||
+ | * hacemos accesible el frontend | ||
+ | * NodePort: expone un puerto | ||
+ | * '' | ||
+ | * <code yaml; frontend-service.yaml> | ||
+ | kind: Service | ||
+ | metadata: | ||
+ | name: frontend | ||
+ | labels: | ||
+ | name: frontend | ||
+ | spec: | ||
+ | # if your cluster supports it, uncomment the following to automatically create | ||
+ | # an external load-balanced IP for the frontend service. | ||
+ | # type: LoadBalancer | ||
+ | type: NodePort | ||
+ | ports: | ||
+ | # the port that this service should serve on | ||
+ | - port: 80 | ||
+ | nodePort: 30080 | ||
+ | selector: | ||
+ | name: frontend</ | ||
+ | * '' | ||
+ | * estado de los pods: '' | ||
+ | * por si no hemos asignado el puerto y queremos ver cual ha sido asignado: '' | ||
+ | == otros | ||
+ | * abreviaturas: | ||
+ | * kubernetes = k8s | ||
+ | * internationalization = i18n | ||
+ | * localization = l10n | ||
+ | * [[https:// | ||
+ | * minikube | ||
+ | * komposer (swarm - k8s) | ||
+ | * tibco |