Aquesta és una revisió antiga del document


Sesión 8 : kubernetes

  • master
    • todo a través de la API
    • etcd (lo que más se muere en entorno multimaster)
      • en algunos casos pierde la coherencia, no se replica, hay que borrar los ficheros de etcd del nodo
    • scheduler: distribuye
    • controllers
    • google no instala cluster de más de 100 nodos, escalan con balanceadores
  • namespaces:
    • comparten servicios
    • como un «stack»
  • pod:
    • contenedores compartiendo IP (se comunican como «localhost»)
  • secrets & configMaps
    • comparten (o pueden) volúmenes
  • uso de etiquetas para relacionar los diferentes objetos
  • redes:
    • swarm: si cmparten red, se ven
    • kubernetes: si comparte *namespace*, se ven
  • conceptos kubernetes
    • deployment
      • apartado *template*: definición del *pod* o *pods*
      • estrategias de autoescalado
      • histórico (roll-back)
    • service
      • clusterIP
      • nodePort
      • LoadBalancer
    • kubelet:
      • agente en los nodos workers
      • obtiene el estado de los pods
      • healtcheck en Dockerfile (para repartir la carga)… si no lo pasa, se suicida
    • kube-proxy:
      • proxy de puertos en el nodo worker
    • volumeclaim
      • casa contendores/pods con los volúmenes
      • se puede afinar su asignación
    • Estratégias despliegue:
    • ventajas
      • autoescalado
      • gestión de volúmenes
      • gestión de red
      • docker-enterprise apuesta por kubernetes, futuro de docker-swarm?
      • kubernetes=linux, swarm=macintosh :-)
    • deployment vs daemonset (swarm «global»)
      • daemontset → recolectores

lab1

lab2

    • kubeadm : aprovisionamiento de nodos
    • kubeadm init –token=102952.1a7dd4cc8d1f4cc5 –kubernetes-version $(kubeadm version -o short) ← en producción no pasar el token para se genere
    • sudo cp /etc/kubernetes/admin.conf $HOME/; sudo chown $(id -u):$(id -g) $HOME/admin.conf; export KUBECONFIG=$HOME/admin.conf : copia certificados y configuración en el $HOME del usuario en curso para su uso
    • kubeadm token list
    • kubeadm join –discovery-token-unsafe-skip-ca-verification –token=102952.1a7dd4cc8d1f4cc5 172.17.0.44:6443
      • –discovery-token-unsafe-skip-ca-verification : bybass Discovery Token verification
    • kubectl get nodes (on master)
    • CNI: Container Network Interface : networks providers
    • kubectl apply -f /opt/weave-kube : deploy del WeaveWorks
    • kubectl get pod -n kube-system
    • kubectl create deployment http –image=katacoda/docker-http-server:latest
    • kubectl get pods
    • docker ps | grep docker-http-server (on node)
    • kubectl apply -f dashboard.yaml
    • kubectl get pods -n kube-system
    • Creacion ServiceAccount:
      cat <<EOF | kubectl create -f - 
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: admin-user
        namespace: kube-system
      ---
      apiVersion: rbac.authorization.k8s.io/v1beta1
      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: kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk «{print $1}»)
    • kubeadm token list

lab3

    • minikube start
    • kubectl get nodes
    • kubectl run http –image=katacoda/docker-http-server:latest –replicas=1
    • kubectl get deployments
    • kubectl describe deployment http
    • kubectl expose deployment http –external-ip=«172.17.0.28» –port=8000 –target-port=80
    • en un solo comando: kubectl run httpexposed –image=katacoda/docker-http-server:latest –replicas=1 –port=80 –hostport=8001 → expone el puerto a nivel de Docker, por lo tanto no se muestra así: kubectl get svc, si no, así: docker ps | grep httpexposed
    • escalar contenedores:
      • kubectl scale –replicas=3 deployment http
        • cada nuevo pod creado se añade al LB
      • kubectl get pods : lista de pods en ejecución
      • kubectl describe svc http : muestra, entre otras cosas, los endpoints

lab4

    • deployment.yaml
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        name: webapp1
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              app: webapp1
          spec:
            containers:
            - name: webapp1
              image: katacoda/docker-http-server:latest
              ports:
              - containerPort: 80
    • kubectl create -f deployment.yaml
    • kubectl get deployment : muestra todos los deploys
    • kubectl describe deployment webapp1 : descripción de un deploy concreto
    • service.yaml
      apiVersion: v1
      kind: Service
      metadata:
        name: webapp1-svc
        labels:
          app: webapp1
      spec:
        type: NodePort
        ports:
        - port: 80
          nodePort: 30080
        selector:
          app: webapp1
    • kubectl create -f service.yaml
    • kubectl get svc
    • kubectl describe svc webapp1-svc
    • (modificación de las réplicas del deployment.yaml) → kubectl apply -f deployment.yaml
    • kubectl get deployment, kubectl get pods

lab5

  • info/cursos/pue/devops/sesion8.1552215050.txt.gz
  • Darrera modificació: 10/03/2019 03:50
  • per mate