Skip to main content

Dicas

Essas são algumas dicas que podem ajudar bastante durante o exame.

Completion

O auto complete do comando se não estiver funcionando é bom deixar.

sudo apt-get install bash-completion # Isso já vem instalado, mas estiver montando um ambiente de estudo irá precisar.
source <(kubectl completion bash) # configuração de autocomplete no bash do shell atual, o pacote bash-completion precisa ter sido instalado primeiro.
echo "source <(kubectl completion bash)" >> ~/.bashrc # para adicionar o autocomplete permanentemente no seu shell bash.
echo "source <(kubectl completion bash)" >> ~/.zshrc # para adicionar o autocomplete permanentemente no seu shell zsh
echo "source <(etcdctl completion bash)" >> ~/.bashrc # para adicionar o autocomplete permanentemente no seu shell bash.
echo "source <(etcdctl completion bash)" >> ~/.zshrc # para adicionar o autocomplete permanentemente no seu shell bash.

Aliases

echo "alias k=kubectl" >> ~/.bashrc
echo "alias k=kubectl" >> ~/.zshrc

Exports

Podemos deixar exportado alguns valores que ajudam a ganhar tempo.

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 exemplo o comando kubectl run meupod --image nginx --dry-run=client -o yaml fica resumido em *kubectl run meupod --image nginx $dr podendo ainda ser reduzido ainda mais com *k run meupod --image nginx $dr.

Usar Abreviações de Nomes de Recursos

  • k get ns = kubectl get namespaces
  • k get sa = kubectl get serviceaccounts
  • k get svc = kubectl get services
  • k get pv,pvc = kubectl get persistentvolumes,persistentvolumeclaim

O que fazer ao iniciar o exame?

Já abra o Firefox e entre no site do https://kubernetes.io/docs/home/. Já coloque nos favoritos para não ter que digitar novamente.

Abra o terminal e digite todos os comandos acima para garantir que caso feche o terminal novamente este volte com tudo o que você precisa já configurado.

Mantenha mais de uma aba do terminal aberta. Na segunda aba use para comandos ssh que provavelmente terá durante a prova.

As respostas das questões 1, 2, 3... ficam em /opt/course/1, /opt/course/2, /opt/course/3...

Então já comece colocando o terminal no ponto certo antes mesmo de ler a questão.

cd /opt/course/1/

Evite Erros Bobos

  • No cabeçalho de todas as questões será terá o comando para mudar para o cluster correto. Mesmo que seja igual do cluster anterior copie, cole e execute para garantir
  • Sempre que um nome de recurso for dados, seja namespace, pod, deploy, imagem, commandos o qualquer outra coisa que pode ser copiada e colada, faça o copy/paste para evitar erros de digitação.
  • Sempre observe o namespace que está sendo pedido. Em cada comando pense, está no namespace correto? Outra forma é sempre mudar para o namespace específico da questão usando o kubectl config set-context --current --namespace NOME-DO-NAMESPACE
  • Confira os resultados do que você aplicou no cluster antes de mudar para outra questão.

Monitorar o Tempo

Se o exame tem entre 15 e 20 questões em 120 minutos, o tempo médio de questão é entre 6 e 9 minutos. Tente estudar marcando essa média de tempo por questão.

Nas questões de pouco peso deve conseguir salvar tempo para a questões de mais peso. Pense nisso.

Comandos Linux

  • wc -l : para contar as linhas. Lembre-se de retirar os cabeçalho da saída do Kubernetes.

    kubectl get pods -n kube-system --no-headers | wc -l
    12
  • awk '{print $1} : sendo $1 a coluna que irá imprimir da saída geralmente vinda de um grep que você fez.

    kubectl get pods --no-headers  
    meudeploy-569bfcf767-ssxl6 1/1 Running 0 11m

    kubectl get pods --no-headers | awk '{print $1}'
    meudeploy-569bfcf767-ssxl6
  • tr " " "\n" : substituindo espaços por uma nova linha.

  • curl -s ip:port : nesse exemplo estamos tentando conectar usando ip:porta através do curl. É bom ter esse comando na ponta da lingua para testar comunicação entre os pods caso necessário.

    echo "esse é um teste" | tr " " "\n"  
    esse
    é
    um
    teste
  • ssh :Executar um comando usando ssh em uma máquina sem precisa estar dentro dela para pegar a saída. ssh.

    ssh <seu-usuario>@<endereco-ip> "<comando>" &> output.txt

Ganhe tempo se encontrando rapidamente na documentação

Palavras chaves:

  • persistente volume
  • toleration
  • nodeSelector
  • affinity
  • fieldRef
  • Upgrading kubeadm clusters
  • kubelet
  • network-policies
  • etcd
  • liveness and readiness probe
  • configmap
  • securitycontext
  • share storage

Comando que devem estar fixados

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}' # Um outro método

#--dry-run=client -o yaml > manifest.yam Iss poderia ser usado para redirecionar a saída dos comandos abaixo como uma simulação

kubectl run meupod --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 os pods em todos os namespaces que tem a label passada e o field também
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

O que deve estar na ponta da lingua

Storages

  • Para pv e pvc precisamos entender bem o hostPath uma vez que será improvável eles na prova algo diferente disso
  • Para pods entender bem emptyDir para comunicação entre os pods

Apis

kubectl api-resources --namespaced=true -o name

Se cair uma questão de faze ro update do cluster Deixo por último.