Que es kubernetes (En 5 minutos)
Abstracciones de nivel superior
Arquitectura de k8s
Arquitectura de k8s
Alta disponibilidad
ClusterIP
NodePort
LoadBalancer
Ingress
apiVersion: apps/v1 # Usa apps/v1beta2 para versiones anteriores a 1.9.0
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # indica al controlador que ejecute 2 pods
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
kubectl apply -f deployment.yaml
EJemplo de YAML kubernetes
Velocity
Scaling (of both software and teams)
Abstracting your infrastructure
Efficiency
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: k8s.gcr.io/hpa-example
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm
apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: username
envFrom:
- configMapRef:
name: special-config
restartPolicy: Never
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: YWRtaW4=
password: MWYyZDFlMmU2N2Rm
new-app-1.host.com
Velocidad 😍
# create deployment
cat <<EOF | kubectl apply -n "${NAMESPACE}" -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: $DEPLOYMENT
labels:
app: $NAME
spec:
replicas: 1
selector:
matchLabels:
app: $NAME
template:
metadata:
labels:
app: $NAME
spec:
containers:
- name: $NAME_APP
image: $SHA_DOCKER_NAME
ports:
- containerPort: 2000
---
kind: Service
apiVersion: v1
metadata:
name: $NAME_SERVICE
spec:
selector:
app: $NAME
ports:
- port: 2000
EOF
# create ingress
cat <<EOF | kubectl apply -n ${NAMESPACE} -f -
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: $NAME_INGRESS
namespace: $NAMESPACE
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- $HOST
secretName: tls-secret
rules:
- host: $HOST
http:
paths:
- path: /
backend:
serviceName: $NAME_SERVICE
servicePort: 2000
EOF
kubectl rollout status deployment.v1.apps/"$DEPLOYMENT"
Script en CI/CD
Usar helm
Usar calico para politicas de red
K8s dashboard
kops create cluster \
--zones us-west-2a \
test