Rodolfo Pilas
bloger podcaster devops sysadmin profesor father
rodolfo@pilas.guru
@pilasguru
https://pilas.guru
https://deployando.me
Prof. Univ. Católica del Urug.
Red Hat Certified Engeneer
DevOps @ Moove-it
CTO @ RootWay
https://insights.stackoverflow.com/survey/2019
"Virtualización es la creación a través de software de una versión virtual de algún recurso tecnológico.
Dicho de otra manera, se refiere a la abstracción de los recursos de una computadora, llamada Hipervisor, que crea una capa de abstracción entre el hardware de la máquina física (host) y el sistema operativo de la máquina virtual."
Wikipedia
Sistema Operativo
Sistema Operativo
Hipervisor
Sistema Operativo
Hipervisor
HW
Sistema Operativo
Hipervisor
HW
SO
Sistema Operativo
Hipervisor
App
HW
SO
Sistema Operativo
Hipervisor
App
HW
SO
App
App
Sistema Operativo
Hipervisor
App
HW
SO
App
App
App
HW
SO
App
App
App
HW
SO
App
App
App
HW
SO
App
App
"LXC (Linux Containers) es una tecnología de virtualización a nivel de sistema operativo.
LXC permite que un servidor físico ejecute múltiples instancias de sistemas aislados, conocidos como Servidores Privados Virtuales (VPS en inglés).
No es una máquina virtual, más bien es un entorno virtual que tiene su propio espacio de procesos y redes."
Wikipedia
Sistema Operativo
Sistema Operativo
App
Sistema Operativo
App
App
App
App
Sistema Operativo
App
App
App
App
App
App
App
App
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
IP
IP
IP
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
IP
IP
IP
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
IP
IP
IP
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
IP
IP
IP
a
b
c
d
docker command
docker daemon (API)
docker registry
cuota de recursos:
Tiempo compartido UTS
Comunicación entre procesos IPC
ID de procesos PID
Usuarios
Redes
Aislación
Capas + CoW
Caching
Snapshotting
Software Defined Network SDN
cluster
master
node
node
worker
(minion)
worker
(minion)
node
master
kubectl
(cli)
dashboard
(ui)
REST client
(code)
kubelet
API
server
Scheduller
etcd
Controller
Manager
kube-proxy
Pod
Pod
Pod
Junio
2014
Julio
2014
Julio
2015
Marzo
2018
Commit inicial en GitHub (Google) k8s - Go
Microsoft, RedHat, IBM y Docker
Kubernetes v1.0
Nov
2015
Primer KubeCon
Feb
2016
Helm Package Manager
CNCF Certified
# kubectl apply -f namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
# kubectl apply -f hostname-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: hostname-pod-example
spec:
containers:
- name: hostname
image: adongy/hostname-docker
# kubectl apply -f hostname-replicaset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: hostname-rs-example
labels:
name: hostname
spec:
replicas: 3
selector:
matchLabels:
name: hostname
template:
metadata:
name: hostname-pod-example
labels:
name: hostname
language: golang
spec:
containers:
- name: hostname
image: adongy/hostname-docker
# kubectl apply -f hostname-deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-example-1
labels:
name: example-1
spec:
replicas: 5
selector:
matchLabels:
name: hostname
strategy:
type: RollingUpdate
template:
metadata:
name: hostname-pod-example
labels:
name: hostname
language: golang
spec:
containers:
- name: hostname
image: adongy/hostname-docker
Las aplicaciones se ven como
Deployments
# kubectl apply -f hostname-deploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-example-1
labels:
name: example-1
spec:
replicas: 5
selector:
matchLabels:
name: hostname
strategy:
type: RollingUpdate
template:
metadata:
name: hostname-pod-example
labels:
name: hostname
language: golang
spec:
containers:
- name: hostname
image: adongy/hostname-docker
# kubectl apply -f hostname-service.yml
apiVersion: v1
kind: Service
metadata:
name: hostname-svc
labels:
app: hostname
spec:
type: ClusterIP
selector:
app: server
ports:
- port: 9999
protocol: TCP
targetPort: 3000
# kubectl apply -f hostname-service.yml
apiVersion: v1
kind: Service
metadata:
name: hostname-svc
labels:
app: hostname
spec:
type: ClusterIP
selector:
app: server
ports:
- port: 9999
protocol: TCP
targetPort: 3000
El EndPoint es interno al cluster, para conectar necesitamos:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: hostname-ing
labels:
name: hostname
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- http:
paths:
- path: /hostname(/|$)(.*)
backend:
serviceName: hostname-svc
servicePort: 3333
Text
The ultimate introduction to Kubernetes - Pascal Naber
Érase una vez Kubernetes - Manuel Morejón
Basada principalmente en:
By Rodolfo Pilas
Presentación que repasa conceptos de: Contenedores, Docker, Orquestadores y Kubernetes