Skip to main content

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.