= Getting started with Kubernetes: objects
== kubectl
* kubectl version
* kubectl logs --help
== objects
=== Namespaces
* permite implementar el aislamiento entre múltiples clusters virtuales
* objetos de diferentes namespaces no se ven entre ellos
* ciertos recursos genéricos no pertenecen a ningún namespace
* por defecto, existen 3 namespaces:
* default
* kube-system: almacenar objetos creados por el sistema kubernetes
* kube-public: visible por todos los usuarios
* apiVersion: v1
kind: Namespace
metadata:
name: project1
* kubectl create -f 3-2-1_ns.yaml
* kubectl get [namespaces|ns]
* kubectl run nginx --image=nginx:1.12.0 --replicas=2 --port=80 --namespace=project1
* kubectl get pods --namespace=project1
=== Name
* único en cada namespace
* usa este nombre como parte de la URL de acceso al recurso
* menor a 254c, letras minúsculas, números, guiones y puntos
* kubernetes también le asigna un UID
=== Labels y selector
* asigna etiquetas arbitrarias a los objetos
* labels:
$key1: $value1
$key2: $value2
* se pueden filtrar las etiquetas con selectores
* selector:
matchLabels:
$key1: $value1
matchExpressions:
- {key: $key2, operator: In, values: [$value1, $value2]}
=== Annotations
* al igual que los tags, usado para especificar metadatos no identificables
* almacenar configuración
=== Pods
* miníma unidad deployable
* puede contener uno o varios contenedores (sidecar containers, como por ejemplo el proxy de istio)
* los contenedores de un mismo pod comparten contexto (en el mismo nodo), y por lo tanto red y volúmenes compartidos
* kubectl explain pods
* ejemplo, sin uso práctico, de 2 contenedores en 1 pod:// an example for creating co-located and co-scheduled container by pod
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: web
image: nginx
- name: centos
image: centos
command: ["/bin/sh", "-c", "while : ;do curl http://localhost:80/; sleep 10; done"]
{{ :info:libros:devops-kubernetes:pasted:20200413-110331.png }}
* kubectl create -f 3-2-1_pod.yaml
* kubectl logs example -c centos
* kubectl describe pods example
* un pod está asociado con un **service account** que provee una identidad para los procesos que ejecutan el pod. Lo controla el service account y el token controllers en el API Server
* montará un volumen de solo lectura para cada contenedor en la ruta **/var/run/secrets/kubernetes.io/serviceaccount** con el contenido del token al API access
* listar los service account:kubectl get serviceaccounts
=== ReplicaSet:
* vigila que el número de pods (replica pods) están siempre bien y en ejecución en el cluster
* ejemplo RS:// an example for RS spec
# cat 3-2-2_rs.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
project: chapter3
matchExpressions:
- {key: version, operator: In, values: ["0.1", "0.2"]}
template:
metadata:
name: nginx
labels:
project: chapter3
service: web
version: "0.1"
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
* kubectl create -f 3-2-2_rs.yml
* kubectl get rs
* kubectl get pods
* si creásemos un pod a mano que cumpliese con los criterios del **replicaSet** (label version:0.1), detectará que hay uno de más y lo eliminará:
*
apiVersion: v1
kind: Pod
metadata:
name: our-nginx
labels:
project: chapter3
service: web
version: "0.1"
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
* kubectl create -f 3-2-2_rs_self_created_pod.yaml
* podemos modificar el número de réplicas con:kubectl edit rs nginx
* kubectl describe rs nginx
* kubectl delete rs nginx
=== Deployments
* deploy pods
* rolling updates
* roll back pods y replicaSets
* realizar un deployment:# kubectl run nginx --image=nginx:1.12.0 --replicas=2 --port=80
* {{ :info:libros:devops-kubernetes:pasted:20200413-132455.png }}
* exponer puerto 80 al service port 80: kubectl expose deployment nginx --port=80 --target-port=80
*
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx:1.12.0
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: nginx
labels:
run: nginx
spec:
selector:
run: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
name: http
* kubectl create -f 3-2-3_deployments.yaml
pag:113