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