Consejos para el Examen CKS
Estos son algunos consejos que pueden ayudar bastante durante el examen.
Completion
El auto complete del comando si no está funcionando es bueno dejarlo.
sudo apt-get install bash-completion # Esto ya viene instalado, pero si está montando un ambiente de estudio necesitará.
source <(kubectl completion bash) # configuración de autocomplete en bash del shell actual, el paquete bash-completion necesita haber sido instalado primero.
echo "source <(kubectl completion bash)" >> ~/.bashrc # para adicionar el autocomplete permanentemente en su shell bash.
echo "source <(kubectl completion bash)" >> ~/.zshrc # para adicionar el autocomplete permanentemente en su shell zsh
echo "source <(etcdctl completion bash)" >> ~/.bashrc # para adicionar el autocomplete permanentemente en su shell bash.
echo "source <(etcdctl completion bash)" >> ~/.zshrc # para adicionar el autocomplete permanentemente en su shell bash.
Dentro de los nodos puede usar también los comandos abajo, pues estos completions no vienen listos.
source <(crictl completion bash)
source <(kube-bench completion bash)
Ejercicios del CKA
Es un pre requisito, pero para estar mejor familiarizado y rápido con los comandos del kubectl caso haya olvidado algunos es bueno rehacer los ejercicios del CKA. Use el killerCoda CKA.
Ejercicios del CKS
Es un pre requisito, pero para estar mejor familiarizado y rápido con los comandos del kubectl caso haya olvidado algunos es bueno rehacer los ejercicios del CKA. Use el killerCoda CKS.
Conocimientos
- Haga una lectura del Sysdig Kubernetes Security Guide.
- Otra lectura buena es del libro Kubernetes Security book by Liz Rice.
- Confiera el Cloud Native Security Whitepaper.
- confiera también el repositorio del walidshaari
Aliases
Estos aliases ya vienen pre configurados, pero es bueno saber.
echo "alias k=kubectl" >> ~/.bashrc
echo "alias k=kubectl" >> ~/.zshrc
Exports
Podemos dejar exportado 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 dr='--dry-run=client -o yaml'" >> ~/.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 del https://kubernetes.io/docs/home/. Ya coloque en los favoritos para no tener que digitar nuevamente.
Abra el terminal y digite todos los comandos arriba para garantizar que caso cierre el terminal nuevamente este vuelva con todo lo que 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 la prueba.
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 estará el comando para cambiar al cluster correcto. Aunque sea igual del cluster 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 para el namespace específico de la pregunta usando el
kubectl config set-context --current --namespace NOMBRE-DEL-NAMESPACE - Confiera los resultados de lo que aplicó en el cluster antes de cambiar para 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 del Kubernetes.kubectl get pods -n kube-system --no-headers | wc -l
12- ps -aux
-
awk '{print $1}: siendo $1 la columna que imprimirá de la salida generalmente venida de un grep que hizo.kubectl get pods --no-headers
mideploy-569bfcf767-ssxl6 1/1 Running 0 11m
kubectl get pods --no-headers | awk '{print $1}'
mideploy-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 del curl. Es bueno tener este comando en la punta de la lengua para testar comunicación entre los pods caso necesario.echo "este es un test" | tr " " "\n"
este
es
un
test -
ssh:Ejecutar un comando usando ssh en una máquina sin necesitar estar dentro de ella para obtener la salida. ssh. -
opensslpara crear certificados.ssh <su-usuario>@<direccion-ip> "<comando>" &> output.txt -
apt-cache show paquetepara ver las versiones de los paquetes -
strace -p procesoIDpara verificar syscall de un proceso pudiendo usar el -cw para contar también./ -
lsof -i :22para conferir cual proceso está usando el puerto. -
journalctlpara verificar los procesos ejecutándose. -
dmesgpara conferir el cargamento del kernel -
systemctlpara iniciar, deshabilitar y parar servicios. -
netstat -plntpara ver todos los puertos que están en uso.
Gane tiempo encontrándose rápidamente en la documentación
Palabras claves:
- ingress
- certificate
- admission controller
- opa gatekeeper
- fieldRef
- Upgrading kubeadm clusters
- kubelet
- network-policies
- etcd encrypt
- configmap
- security context
- secrets
- service account
- runtime class
- apparmor
- seccomp
- Kubernetes API from a Pod
- Generate Certificates
- Certificate Request
Comando 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}' # Un otro método
#--dry-run=client -o yaml > manifest.yam 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
Logs
Sepa donde están todos los posibles logs de containers
Apis
kubectl api-resources --namespaced=true -o name
Si cae una pregunta de hacer el update del cluster Dejo por último.
Vim setup
Cree un ~/.vimrc y adicione lo siguiente
set expandtab # usa espacios para tab
set tabstop=2 # define el tab como 2 en vez de 4
set shiftwidth=2 # cantidad de espacios usado durante la indentación