1 of 11

Kubernetes

Orquestadores para las cuatro estaciones

@javierprovecho @canonale

2 of 11

Agenda

  • Contenerización
  • Replicación
  • Exposición
  • Volúmenes
  • Programación

3 of 11

  • Contenerización
  • Unidad atómica de despliegue en K8S
  • Uno o varios contenedores
  • Interfaz genérica para volúmenes
  • Comandos, variables de entorno, modo privilegiado…
  • IP efímera en red interna

pod

volume

container

container

label1: key1=value1

label2: key2=value2

ports

tcp/8080 -

udp/53 -

env vars

env vars

4 of 11

  • Contenerización
  • Unidad atómica de despliegue en K8S
  • Uno o varios contenedores
  • Interfaz genérica para volúmenes
  • Comandos, variables de entorno, modo privilegiado…
  • IP efímera en red interna

apiVersion: v1�kind: Pod�metadata:� name: explorer�spec:� containers:� - name: explorer� image: my-image� args: ["-port=8080"]� ports:� - containerPort: 8080� protocol: TCP� volumeMounts:� - mountPath: "/mount/test-volume"� name: test-volume

env:� - name: "SOME_ENV_VAR"� name: "{\"some value\"}"� volumes:� - name: test-volume� emptyDir: {}

5 of 11

2. Replicación

  • Gestor de despliegues
  • Rolling updates
  • Mantiene un número determinado de réplicas o las escala en base al % de CPU
  • Usa una plantilla de POD

deployment

pod spec

label1: key1=value1

label2: key2=value2

6 of 11

2. Replicación

  • Gestor de despliegues
  • Rolling updates
  • Mantiene un número determinado de réplicas o las escala en base al % de CPU
  • Usa una plantilla de POD

apiVersion: extensions/v1beta1�kind: Deployment�metadata:� name: deployment�spec:� replicas: 1� template:� metadata:� labels:� app: redis� spec:� containers:� - name: redis� image: redis� volumeMounts:� - name: vmfs-vmdk-storage� mountPath: /data/� volumes:� - name: vmfs-vmdk-storage� vsphereVolume:� volumePath: "[Datastore] volumes/testdir"� fsType: ext4

7 of 11

3. Exposición

  • Exponen una IP persistente virtual
  • Accesible vía DNS
  • Balancea automáticamente tráfico a todos los PODs que tengan dichas etiquetas
  • Exportable a IPs de cada nodo o balanceadores cloud externos

service

label1: key1=value1

label2: key2=value2

ports

tcp/8080 -

udp/53 -

8 of 11

3. Exposición

  • Exponen una IP persistente virtual
  • Accesible vía DNS
  • Balancea automáticamente tráfico a todos los PODs que tengan dichas etiquetas
  • Exportable a IPs de cada nodo o balanceadores cloud externos

apiVersion: v1�kind: Service�metadata:� name: openshift-service�spec:� ports:� - port: 9042� targetPort: 9042� selector:� name: openshift

9 of 11

4. Volúmenes

  • hostpath:
    • montaje de un path del nodo donde se ejecuta el POD
  • emptydir:
    • volúmen efímero en caso de que el POD se reinicie
  • secrets:
    • metadata y archivos de configuración
  • 3rdparty
    • proveedores cloud
    • glusterfs
    • ceph

apiVersion: v1�kind: Secret�metadata:� name: conf-data�type: Opaque �data:� key: Y3lsaWNvbiB2YWxsZXk=

---

apiVersion: v1�kind: Pod�metadata:� name: explorer�spec:� containers:� - name: explorer� image: my-image� volumeMounts:� - mountPath: "/mount/test-volume"� name: conf� volumes:� - name: conf� secret:

secretName: mySecret

10 of 11

5. Programación

  • API REST JSON
  • ETCd almacenamiento
  • Operators
    • Recursos customizados
    • SSE watch endpoint
    • Integraciones de servicios externos

11 of 11

5. Programación

  • API REST JSON
  • ETCd almacenamiento
  • Operators
    • Recursos customizados
    • SSE watch endpoint
    • Integraciones de servicios externos

apiVersion: extensions/v1beta1�kind: ThirdPartyResource�metadata:� name: cron-tab.stable.example.com�description: "A specification of a Pod to run on a cron style schedule"�versions:�- name: v1

---

apiVersion: "stable.example.com/v1"�kind: CronTab�metadata:� name: my-new-cron-object�cronSpec: "* * * * /5"�image: my-awesome-cron-image