In this hands-on lab, you will be presented with a three-node cluster. One node is the master, and the other two are worker nodes. You will be responsible for splitting up the two worker nodes and making one of the worker nodes a production (prod) environment node and the other a development (dev) environment node. The purpose of identifying these two types (prod and dev) is to not accidentally deploy pods into the production environment. You will use taints and tolerations to achieve this, and then you will deploy two pods: One pod will be scheduled to the dev environment, and one pod will be scheduled to the prod environment. When you have verified the two pods are up and running and they are located within the correct environments, you may consider this hands-on lab complete.
Learning Objectives
Successfully complete this lab by achieving the following learning objectives:
- Taint one of the worker nodes to repel work.
Use the following command to taint the node:
kubectl taint node <node_name> node-type=prod:NoSchedule
- Schedule a pod to the dev environment.
Use the following YAML to specify a pod that will be scheduled to the dev environment:
apiVersion: v1 kind: Pod metadata: name: dev-pod labels: app: busybox spec: containers: - name: dev image: busybox command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']
Use the following command to create the pod:
kubectl create -f dev-pod.yaml
- Allow a pod to be scheduled to the prod environment.
Use the following YAML to create a deployment and a pod that will tolerate the prod environment:
apiVersion: apps/v1 kind: Deployment metadata: name: prod spec: replicas: 1 selector: matchLabels: app: prod template: metadata: labels: app: prod spec: containers: - args: - sleep - "3600" image: busybox name: main tolerations: - key: node-type operator: Equal value: prod effect: NoSchedule
Use the following command to create the pod:
kubectl create -f prod-deployment.yaml
- Verify each pod has been scheduled and verify the toleration.
Use the following command to verify the pods have been scheduled:
kubectl get pods -o wide
2.Scale up the deployment:
kubectl scale deployment/prod --replicas=3
Verify the toleration of the production pod:
kubectl get pods <pod_name> -o yaml