Aula ao vivo 06/04
https://kind.sigs.k8s.io/docs/user/quick-start/
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: worker
- role: worker
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
EOF
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
spec:
template:
spec
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls
name: metrics-server
CKA ----
1 - Adicione a taint NoSchedule em um dos nós e remova todos os pods em execução nesse nó
2 - Execute os seguintes comandos:
kubectl create ns dr-teste
kubectl run webserver -n dr-teste
Agora crie um backup do etcd, o backup deve ser feito no nó do control-plane no diretorio /tmp/pre-dr.db
Execute os seguintes comandos:
kubectl delete ns dr-teste
kubectl delete po webserver -n dr-teste
Agora faça o restore no etcd e verifique se o namespace e o pod estão "Running"
3 - Verifique o log do Kubelet e salve-o em /tmp/kubelet.log
4 - Crie um Pod chamado httpd com a imagem httpd:latest e porta 80
5 - Crie um deployment com os seguintes items:
* initContainers
- image: busybox
- command: /bin/sh -c echo "VAIIIII > /volume/initfile.txt"
- volumeMounts:
* name: tempfile
* /volume
* container:
- image: nginx
- volumeMounts:
* name: tempfile
* /volume
- Utilize um volume do tipo emptyDir
6 - Crie um cronjob com o schedule "*/1 * * * *" e executando o comando 'echo VAII' completions 5 e parallelism 5 e um timeout de 15 segundos.
7 - Crie uma deployment chamado "rollback" , com imagem nginx:1.23 e 1 réplica. Grave a versão. Em seguida, atualize o deployment para imagem nginx:1.25 usando rolling update. Certifique-se de que a atualização da versão esteja registrada na anotação do recurso
--- CKAD
1 - Crie 2 pods: - Pod 1: name: nginx port: 80 imagem: nginx - Pod 2: name: httpd imagem: httpd
Crie o serviço para os 2 pods como:
- tipo: Cluster IP
- port: 8080
- target-port: 80
- O nome pode ser a sua escolha
Agora crie um ingress com 2 rotas /v1 apontando para o serviço do nginx e /v2 para o serviço do httpd
2 - Crie um deployment: - Nome: autoscalling - image: nginx - port 80 - Replicas 2
Agora crie "HPA" para o deployment com no minimo 2 réplicas e maximo 5 e o cpu-percernt deve ser 50.
3 - Crie 2 deployments: - v1: - name: v1 - image: nginx - v2: - name: v2 - image: httpd
Agora crie um Canary deployment "simples" onde 90% do tráfego irá para v1 e 10% para v2
Agora coloque 50/50
Agora 100 para v2
4 - Verifique as metricas dos pods da v2
5 - Colete o logs dos containers do CodeDNS e salve em um arquivo em /tmp/log.txt
6 - Liste todos os CRDS disponíveis no Cluster
--- CKS
1 - Crie um namespace chamado "blackhole"
- Agora crie uma network-policy do tipo deny bloqueado todo o trafego de saida
2 - Arrume o seguinte deploy para seguir as regras de segurança:
Não pode executar com root Deve utilizar o usuario 1001 Não pode fazer a escalação de privilégios E Dropar todas as capabilities
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: secure-app
name: secure-app
spec:
replicas: 1
selector:
matchLabels:
app: secure-app
strategy: {}
template:
metadata:
labels:
app: secure-app
spec:
containers:
- image: registry.kubesim.tech/development/production-app:latest
name: ubuntu
args: ["sleep", "10000"]
3 - Verifique as seguintes images e escreva no arquivos /tmp/vuln.txt a imagem que tiver mais vulnerabildiades
- nginx:1.25.4-alpine3.18
- nginx:1.23.4
- nginx:1.23.4-alpine3.17
Agora lista apenas as imagens CRITICAS
4 - Crie um service account chamada list-pods - Crie uma role que permita listar os pods no namespace default - Crie um pod para utilizar essa service account e liste os pods
5 - Utilize o Kube-bench no cluster