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 namespacesk get sa
= kubectl get serviceaccountsk get svc
= kubectl get servicesk 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. -
openssl
para criar certificados.ssh <seu-usuario>@<endereco-ip> "<comando>" &> output.txt
-
apt-cache show pacote
para 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. -
demsg
para 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