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.

Dentro dos nodes pode usar também os comandos abaixo, pois esses completions não vem pronto.

source <(crictl completion bash)
source <(kube-bench completion bash)

Exercícios do CKA

É um pré requisito, mas para estar melhor familiarizado e rápido com os comandos do kubectl caso tenha esquecido alguns é bom refazer os exercícios do CKA. Use o killerCoda CKA.

Exercícios do CKS

É um pré requisito, mas para estar melhor familiarizado e rápido com os comandos do kubectl caso tenha esquecido alguns é bom refazer os exercícios do CKA. Use o killerCoda CKS.

Conhecimentos

  • Faça uma leitura do Sysdig Kubernetes Security Guide.
  • Outra leitura boa é do livro Kubernetes Security book by Liz Rice.
  • Configura o Cloud Native Security Whitepaper.
  • confira também o repositório do walidshaari

Aliases

Esses aliases já vem pré configurados, mas é bom saber.

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
    • ps -aux
  • 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.

  • opensslpara criar certificados.

    ssh <seu-usuario>@<endereco-ip> "<comando>" &> output.txt
  • apt-cache show pacotepara ver as versões dos pacotes

  • strace -p processoID para verificar syscall de um processo podendo usar o -cw para contar também./

  • lsof -i :22 para conferir qual processo esta usando a porta.

  • journalctl para verfificar os processo rodando.

  • demsgpara conferir o carramento do kernel

  • systemctl para iniciar, desabilitar e parar serviços.

  • nestat -plnt para ver todas as portas que estão em uso.

Ganhe tempo se encontrando rapidamente na documentação

Palavras chaves:

  • ingress
  • certificate
  • admission controller
  • opa gatekeeper
  • fieldRef
  • Upgrading kubeadm clusters
  • kubelet
  • network-policies
  • etcd encript
  • configmap
  • security context
  • secrets
  • service account
  • runtime class
  • apparmor
  • seccomp
  • Kubernetes API from a Pod
  • Generate Certificates
  • Certificate Request

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

Logs

Saiba onde esta todos os possíveis logs de containers

Apis

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

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

Vim setup

Crie um ~/.vimrc e adicione os seguinte

set expandtab # usa espacos para tab
set tabstop=2 # define o tab como 2 ao invés de 4
set shiftwidth=2 # quantidade de espaços usado durante a identação