Consejos
Estos son algunos consejos que pueden ayudar bastante durante el examen.
Autocompletado
El autocompletado del comando si no está funcionando es bueno configurarlo.
sudo apt-get install bash-completion # Esto ya viene instalado, pero si está montando un ambiente de estudio lo necesitará.
source <(kubectl completion bash) # configuración de autocompletado en bash del shell actual, el paquete bash-completion necesita haber sido instalado primero.
echo "source <(kubectl completion bash)" >> ~/.bashrc # para agregar el autocompletado permanentemente en su shell bash.
echo "source <(kubectl completion bash)" >> ~/.zshrc # para agregar el autocompletado permanentemente en su shell zsh
echo "source <(etcdctl completion bash)" >> ~/.bashrc # para agregar el autocompletado permanentemente en su shell bash.
echo "source <(etcdctl completion bash)" >> ~/.zshrc # para agregar el autocompletado permanentemente en su shell bash.
Alias
echo "alias k=kubectl" >> ~/.bashrc
echo "alias k=kubectl" >> ~/.zshrc
Exportar variables
Podemos dejar exportados algunos valores que ayudan a ganar tiempo.
echo "export dr='--dry-run=client -o yaml'" >> ~/.bashrc
echo "export dr='--dry-run=client -o yaml'" >> ~/.zshrc
echo "export now='--grace-period=0 --force'" >> ~/.bashrc
echo "export now='--grace-period=0 --force'" >> ~/.zshrc
Por ejemplo el comando kubectl run mipod --image nginx --dry-run=client -o yaml queda resumido en kubectl run mipod --image nginx $dr pudiendo aún ser reducido aún más con k run mipod --image nginx $dr.
Usar Abreviaciones de Nombres de Recursos
k get ns= kubectl get namespacesk get sa= kubectl get serviceaccountsk get svc= kubectl get servicesk get pv,pvc= kubectl get persistentvolumes,persistentvolumeclaim
¿Qué hacer al iniciar el examen?
Ya abra el Firefox y entre en el sitio de https://kubernetes.io/docs/home/. Ya colóquelo en los favoritos para no tener que digitar nuevamente.
Abra el terminal y digite todos los comandos anteriores para garantizar que en caso de cerrar el terminal nuevamente este vuelva con todo lo que usted necesita ya configurado.
Mantenga más de una pestaña del terminal abierta. En la segunda pestaña use para comandos ssh que probablemente tendrá durante el examen.
Las respuestas de las preguntas 1, 2, 3... quedan en /opt/course/1, /opt/course/2, /opt/course/3...
Entonces ya comience colocando el terminal en el punto correcto antes incluso de leer la pregunta.
cd /opt/course/1/
Evite Errores Tontos
- En el encabezado de todas las preguntas tendrá el comando para cambiar al clúster correcto. Aunque sea igual al clúster anterior copie, pegue y ejecute para garantizar
- Siempre que un nombre de recurso sea dado, sea namespace, pod, deploy, imagen, comandos o cualquier otra cosa que puede ser copiada y pegada, haga el copy/paste para evitar errores de digitación.
- Siempre observe el namespace que está siendo pedido. En cada comando piense, ¿está en el namespace correcto? Otra forma es siempre cambiar al namespace específico de la pregunta usando el
kubectl config set-context --current --namespace NOMBRE-DEL-NAMESPACE - Verifique los resultados de lo que aplicó en el clúster antes de cambiar a otra pregunta.
Monitorear el Tiempo
Si el examen tiene entre 15 y 20 preguntas en 120 minutos, el tiempo promedio de pregunta es entre 6 y 9 minutos. Intente estudiar marcando ese promedio de tiempo por pregunta.
En las preguntas de poco peso debe conseguir ahorrar tiempo para las preguntas de más peso. Piense en eso.
Comandos Linux
-
wc -l: para contar las líneas. Recuerde retirar los encabezados de la salida de Kubernetes.kubectl get pods -n kube-system --no-headers | wc -l
12 -
awk '{print $1}: siendo $1 la columna que imprimirá de la salida generalmente venida de un grep que hizo.kubectl get pods --no-headers
mideply-569bfcf767-ssxl6 1/1 Running 0 11m
kubectl get pods --no-headers | awk '{print $1}'
mideply-569bfcf767-ssxl6 -
tr " " "\n": sustituyendo espacios por una nueva línea. -
curl -s ip:port: en este ejemplo estamos intentando conectar usando ip:puerto a través de curl. Es bueno tener este comando en la punta de la lengua para probar comunicación entre los pods si es necesario.echo "esta es una prueba" | tr " " "\n"
esta
es
una
prueba -
ssh: Ejecutar un comando usando ssh en una máquina sin necesitar estar dentro de ella para obtener la salida. ssh.ssh <su-usuario>@<direccion-ip> "<comando>" &> output.txt
Gane tiempo encontrándose rápidamente en la documentación
Palabras claves:
- persistent volume
- toleration
- nodeSelector
- affinity
- fieldRef
- Upgrading kubeadm clusters
- kubelet
- network-policies
- etcd
- liveness and readiness probe
- configmap
- securitycontext
- share storage
Comandos que deben estar fijados
kubectl config get-contexts -o name
kubectl config use-context kind-kind-cluster-ia
kubectl config set-context --current --namespace kube-system
kubectl config current-context
cat ~/.kube/config | grep current-context | awk '{print $2}' # Otro método
# --dry-run=client -o yaml > manifest.yaml - Esto podría ser usado para redirigir la salida de los comandos abajo como una simulación
kubectl run mipod --image nginx --labels=id=1234,env=prod
kubectl create deploy --image nginx --replicas 2
kubectl get pods --sort-by metadata.name
kubectl get pods --sort-by metadata.name -o custom-columns=NAME:.metadata.name
kubectl get pods --sort-by metadata.name -o custom-columns=NAME:.metadata.name,NODE:.spec.nodeName
# Filtra los pods en todos los namespaces que tienen la label pasada y el field también
kubectl get pods --all-namespaces --selector k8s-app=kube-dns --field-selector=spec.nodeName=kind-cluster-ia-control-plane -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-76f75df574-82xg7 1/1 Running 0 23h 10.244.0.3 kind-cluster-ia-control-plane <none> <none>
kube-system coredns-76f75df574-p5jzh 1/1 Running 0 23h 10.244.0.2 kind-cluster-ia-control-plane <none> <none>
kubectl auth can-i
Lo que debe estar en la punta de la lengua
Almacenamiento
- Para pv y pvc necesitamos entender bien el hostPath una vez que será improbable que en el examen haya algo diferente de esto
- Para pods entender bien emptyDir para comunicación entre los pods
APIs
kubectl api-resources --namespaced=true -o name
Si aparece una pregunta de hacer el update del clúster lo dejo por último.