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
- 3-2-1_ns.yaml
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"]
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:
- 3-2-2_rs.yml
// 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á:
- 3-2-2_rs_self_created_pod.yaml
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
- exponer puerto 80 al service port 80:
kubectl expose deployment nginx --port=80 --target-port=80
- 3-2-3_deployments.yaml
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