Rodolfo Pilas
bloger podcaster devops sysadmin profesor father
docker command
docker daemon (API)
docker registry
?
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-simple
spec:
containers:
- name: hostname
image: oguzpastirmaci/hostname
# kubectl apply -f hostname-replicaset.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: hostname-rs-example
labels:
app: hostname
spec:
replicas: 3
selector:
matchLabels:
app: hostname
template:
metadata:
name: hostname-pod-example
labels:
app: 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:
app: hostname
spec:
replicas: 5
selector:
matchLabels:
app: hostname
strategy:
type: RollingUpdate
template:
metadata:
name: hostname-pod-example
labels:
app: 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:
app: hostname
spec:
replicas: 5
selector:
matchLabels:
app: hostname
strategy:
type: RollingUpdate
template:
metadata:
name: hostname-pod-example
labels:
app: 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: hostname
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: hostname
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
https://creativecommons.org/licenses/by/4.0/deed.es
By Rodolfo Pilas