Introducción

Modelo de Objetos

Entidades en un cluster Kubernetes:

  • Cuales aplicaciones contenidas estamos corriendo y en cual nodo
  • Consumo de recursos de aplicación
  • Diferentes políticas agregadas a aplicaciones (restart/upgrade, fault tolerance, etc)

Los objetos de Kubernetes son:

  • Pods
  • ReplicaSets
  • Deployments
  • Namespaces

Pods

El objeto más pequeño y simple de Kubernetes. Es la unidad de despliegue en Kubernetes que representa una instancia de la aplicación. Un Pod es en una colección local de uno o más contenedores, que:

  • Están programados juntos en el mismo host
  • Comparten el mismo namespace de red
  • Tiene acceso a montar el mismo volumen de almacenamiento externo.

So efímeros en naturalez y no tienen la capacidad de auto-curarse. Por eso se utilizan con controladores que manejan la replcación de los Pod, tolerancia a fallas, aut-cura, etc. Ejemplos de controladores son: Deployments, ReplicaSets, Replication Controllers.

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: nginx:1.15.11
      ports:
      - containerPort: 80

ReplicaSets

Deployments

Namespaces

API

  • Core Group (/api/v1) (Pods, services, namespaces, configmaps, secrets, etc)
  • Named Group /apis/$NAME/$VERSION
    • Alpha
    • Beta
    • Stable
  • System-wide /healthz, /logs, /metrics, /ui

Cuenta de Servicio

Nota: apiVersion del recurso ClusterRoleBinding puede cambiar entre diferentes versiones de Kubernetes en v1.8 apiVersion era rbac.authorization.k8s.io/v1beta1

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

Obetner un Token Bearer

kubectl -n kubernetes-dashboard describe secret $(kubectl \
  -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

kubectl

Define el archivo de configuración de cluster en una variable de entorno.

export KUBECONFIG=~/.kubectl/some-cluster
kubectl version
kubectl cluster-info [dump]

Define el namespace en el cluster

kubectl get namespace
kubectl config set-context --current --namespace=default

Implementaciones de Kubernetes

minikube

minikube dashboard

http://127.0.0.1:37751/api/v1/namespaces/kube-system/services/http:kubernetes-dashboard:/proxy/

kubectl proxy

http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard:/proxy/#!/overview?namespace=default

Get a token

TOKEN=$(kubectl describe secret -n kube-system $(kubectl get secrets \
    -n kube-system | grep default | cut -f1 -d ' ') | grep -E '^token' |\
    cut -f2 -d':' | tr -d '\t' | tr -d " ")

APISERVER=$(kubectl config view |grep https|cut -f2- -d':' |tr -d ' ')

curl $APISERVER --header "Authorization: Bearer $TOKEN" --insecure

curl $APISERVER --cert encoded-cert --key encoded-key --cacert encoded-ca

k3s

curl -sfL https://get.k3s.io | sh -

Red Hat y parientes requiren estas reglas de firewall.

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=8472/udp
firewall-cmd --reload

Kubernetes administrado

Civo

Accede a graphana instalado del marketplace. http://localhost:8080

Usuario: admin, password: prom-operator.

kubectl port-forward $(kubectl get pods -n monitoring -o name | grep
grafana) 8080:3000 -n monitoring

Solución de problemas

Referencias