Questão 9 - Parar Scheduler e Agendamento Manual
Question 9 | Kill Scheduler, Manual Scheduling
Use context: kubectl config use-context k8s-c2-AC
Ssh into the controlplane node with ssh cluster2-controlplane1. Temporarily stop the kube-scheduler, this means in a way that you can start it again afterwards.
Create a single Pod named manual-schedule of image httpd:2.4-alpine, confirm it's created but not scheduled on any node.
Now you're the scheduler and have all its power, manually schedule that Pod on node cluster2-controlplane1. Make sure it's running.
Start the kube-scheduler again and confirm it's running correctly by creating a second Pod named manual-schedule2 of image httpd:2.4-alpine and check if it's running on cluster2-node1.
kubectl config use-context k8s-c2-AC
k get node
NAME STATUS ROLES AGE VERSION
cluster2-controlplane1 Ready control-plane 26h v1.29.0
cluster2-node1 Ready <none> 26h v1.29.0
ssh cluster2-controlplane1
# Retirar o manifesto irá para o scheduler. Vamos só mover para outra pasta
root@cluster2-controlplane1:~# cd /etc/kubernetes/manifests/
root@cluster2-controlplane1:~# mv kube-scheduler.yaml ..
# Voltando terminal padraão vamos criar o pod e esperar que ele não seja schedulado
k run manual-schedule --image=httpd:2.4-alpine
k get pod manual-schedule -o wide
NAME READY STATUS ... NODE NOMINATED NODE
manual-schedule 0/1 Pending ... <none> <none>
# Vamos pegar esse pod e colocar um nodeName nele
k get pod manual-schedule -o yaml > /opt/course/9/manualpod.yaml
vim /opt/course/9/manualpod.yaml
Edite o arquivo colocando direcionando a criação usando o nodeName.
...
spec:
nodeName: cluster2-controlplane1 # add the controlplane node name
containers:
- image: httpd:2.4-alpine
imagePullPolicy: IfNotPresent
name: manual-schedule
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-nxnc7
readOnly: true
dnsPolicy: ClusterFirst
...
Pronto, agora é só subir usando o replace
kubectl replace -f /opt/course/9/manualpod.yaml --force
# E confira se esta funcionando
k get pod manual-schedule -o wide
NAME READY STATUS ... NODE
manual-schedule 1/1 Running ... cluster2-controlplane1
Volte para o ssh e coloque o arquivo no lugar
ssh cluster2-controlplane1
# Retirar o manifesto irá para o scheduler. Vamos só mover para outra pasta
root@cluster2-controlplane1:~# cd /etc/kubernetes/
root@cluster2-controlplane1:~# mv kube-scheduler.yaml manifests/
# Agora é só lançar outro pod. Volte para o terminal normal
k run manual-schedule2 --image=httpd:2.4-alpine
k get pod -o wide | grep schedule
manual-schedule 1/1 Running ... cluster2-controlplane1
manual-schedule2 1/1 Running ... cluster2-node1
Vale observar que só conseguimos schedular o pod no cluster2-controlplane1 por que este não tinha uma taint.