CKA Exam Prep Flashcards

1
Q

What is the command to create a POD?

A

kubectl run pod_name –image=image_name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

What is the command to create a POD manifest file without creating the resources?

A

kubectl run pod_name –image=image_name –dry-run=client -o yaml

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

How to create a deployment?

A

kubectl create deployment deployment_name –image=image_name

e.g. kubectl create deployment my-nginx –image=nginx

This creates a Deployment named my-nginx that runs Pods using the nginx image. Kubernetes will automatically ensure that one instance of the nginx container is running unless scaled otherwise.

Kubernetes automatically assigns labels as well to the pod and uses those as selectors in deployment

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Create deployment with 4 replicas

A

kubectl create deployment deployment_name –image=image_name –replicas=4
e.g.: kubectl create deployment nginx –image=nginx –replicas=4

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

How to scale a deployment

A

kubectl scale deployment deployment_name –replicas=6
e.g.: kubectl scale deployment nginx –replicas=4

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

How to create a namespace?

A

kubectl create namespace namespace_name
e.g. kubectl create namespace dev

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

How to create a POD in a specific namespace

A

kubectl run pod_name –image=image_name –namespace=namespace_name
e.g. kubectl run nginx –image=nginx –namespace=dev

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

How to edit a resource?

A

kubectl edit resource_type resource_name
e.g.
kubectl edit deployment deployment_name
kubectl edit pod pod_name

This edits the in-memory file and changes the resources but the main config file is untouched

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

How to apply a configuration file?

A

kubectl apply -f config_file.yaml

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

How to set a new image for an existing deployment?

A

kubectl set image deployment/deployment_name image_name=new_image_name
e.g. kubectl set image deployment/my-deployment nginx=nginx:1.21

This command directly modifies the configuration of the Deployment in the Kubernetes cluster. It creates a rolling update where Pods are gradually replaced with new Pods using the updated image.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

How to describe a resource?

A

kubectl describe pod pod_name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

How to view logs

A

kubectl logs pod_name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

How to get resources? pods, services, deployments, namespaces, nodes

A

kubectl get pods
kubectl get services
kubectl get deploymnets
kubectl get nodes
kubectl get all

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

How to see resources for all namespaces?

A

kubectl get all –all-namespaces

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

How to get resources with wide output?

A

kubectl get pods -o wide

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

How to delete a deployment?

A

kubectl delete deployment deployment_name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

How to create a resource file for deployment from Live configuration?

A

kubectl get deployment deployment_name -o yaml > deployment.yaml

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

How to dry run to generate a YAML file? Consider a deployment

A

kubectl create deployment deployment_name -image=image_name –dry-run=client -o yaml

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

How to update objects within a configuration file?

A

kubectl replace -f config_file.yaml
you can use kubectl apply -f config_file.yaml

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

How to apply resources in a directory instead of specific file?

A

kubectl apply -f /path/to/config-files

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Does deployments automatically create all the resources including replica sets?

A

Yes

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

How to check the rollout status of a deployment?

A

kubectl rollout status deployment/deployment_name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

How to check the rollout history of a deployment?

A

kubectl rollout history deployment/deployment_name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

How to undo a rollout for a deployment?

A

kubectl rollout undo deployment/deployment_name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Q

How to scale a replicaset?

A

kubectl scale -f replicaset-definitionfile.yaml –replicas=6

You can also update the replicaset directly
kubectl scale replicaset replicaset_name –replicas=6

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
26
Q

How to connect to a resource in another namespace? Lets say its a mysql database and the namespace name is dev and the resource name is db-service?

A

mysql.connect(db-service.dev.svc.cluster.local)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
27
Q

How to get pods in a specific namespace?

A

kubectl get pods –namespace=namespace_name

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
28
Q

How to switch contexts permanently for a namespace to dev?

A

kubectl config set context $(kubectl config current-context) –namespace=dev

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
29
Q

How to create a service to route traffic to a deployment?

A

kubectl expose deployment deployment_name –port 80

  • If you want the service to be accessible outside the cluster, you can specify –type=NodePort or –type=LoadBalancer.
  • If the nginx deployment exposes containers on a port other than 80, you need to add –target-port=<container-port> to map the service's port to the container's port.</container-port>
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
30
Q

What are the different types of ports?

A

port: ServicePort
targetPort: Container Port (where the traffic should be forwarded)
nodePort: where the service is exposed outside the cluster

The only mandatory field is port. If targetPort is not entered it gets the same port as port.

If the nodePort is not entered kubernetes automatically assigns a port between 30000-32627

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
31
Q

What is the difference between replace & apply?

kubectl replace -f nginx.yaml
kubectl replace –force -f nginx.yaml
kubectl apply -f nginx.yaml

A

replace: the resource should exist. It will delete the resources & create them fresh with the supplied config file

apply: if the resource does not exist, it will create the resource. If the resource already exist, it will apply the changes.

If you are making changes that are not supported as an in-place update (e.g., changing certain immutable fields like spec.selector in a Deployment), you may need to delete and recreate the resource.

Use kubectl apply to create or update resources without deleting them first.
Delete resources only when you need to reset their state or make changes that are not supported in-place.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
32
Q

When to use kubectl edit command

A

For quick changes and you are sure that you are not going to reply on object configuration file in future. Because changes are not made in the config file.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
33
Q

How to Create a Service named redis-service of type ClusterIP to expose pod redis on port 6379. Just do a dry run

A

kubectl expose pod redis –port=6379 –name=redis-service –dry-run=client -o yaml

By default this command uses pod labels as selectors as you cannot pass selectors in imperative commands

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
34
Q

How to create a pod with labels

A

kubectl run nginx –image=nginx –labels=”env=production,app=nginx”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
35
Q

How to Create a Service named redis-service of type ClusterIP to expose pod redis on port 6379. Just do a dry run

A

kubectl create service redis-service –port-80 –dry-run=client -o yaml
> service-fil.yaml

This will not use the pods labels as selectors, instead it will assume selectors as app=redis-service. So it does not work very well if your pod has a different label set. So generate the file and modify the selectors before creating the service

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
36
Q

Create a Service named nginx of type NodePort to expose pod nginx’s port 80 on port 30080 on the nodes:

A

Pod labels as selectors:
kubectl expose pod nginx –port=80 –type=NodePort –name=nginx –dry-run=client -o yaml > service-file.yaml

This will automatically use the pod’s labels as selectors, but you cannot specify the node port. You have to generate a definition file and then add the node port in manually before creating the service with the pod.

Pod Labels are not used as selectors:
kubectl create service –type=nodeport –name=nginx –port=80 –node-port=30080 –dry-run=client -o yaml

Both the above commands have their own challenges. While one of it cannot accept a selector the other cannot accept a node port. I would recommend going with the kubectl expose command. If you need to specify a node port, generate a definition file using the same command and manually input the nodeport before creating the service.

To specify nodePort:
apiVersion: v1
kind: Service
metadata:
name: my-nodeport-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80 # The port the service will expose internally
targetPort: 8080 # The port on the container to forward traffic to
nodePort: 30007 # The specific NodePort to expose on each node

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
37
Q

Summary of lab commands

A

controlplane ~ ➜ kubectl run nginx-pod –image=nginx:alpine
pod/nginx-pod created

controlplane ~ ➜ kubectl run redis –image=redis:alpine –labels=”tier=db”
pod/redis created

controlplane ~ ✖ kubectl expose pod redis –port=6379 –name=redis-service
service/redis-service exposed

controlplane ~ ➜ kubectl create deployment webapp –image=kodekloud/webapp-color –replicas=3
deployment.apps/webapp created

controlplane ~ ➜ kubectl run custom-nginx –image=nginx –port=80
pod/custom-nginx created

controlplane ~ ➜ kubectl delete pod custom-nginx
pod “custom-nginx” deleted

controlplane ~ ✖ kubectl run custom-nginx –image=nginx –port=8080
pod/custom-nginx created

controlplane ~ ➜ kubectl create namespace dev-ns
namespace/dev-ns created

controlplane ~ ➜ kubectl create deployment redis-deploy –namespace=dev-ns –image=redis –replicas=2
deployment.apps/redis-deploy created

controlplane ~ ➜ kubectl run httpd –image=httpd:alpine
pod/httpd created

controlplane ~ ➜ kubectl expose pod httpd –port=80
service/httpd exposed

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

How to create a POD declaratively?

A

apiVersion: v1
kind: Pod
metadata:
name: redis-pod
labels:
name: redis-pod
app: demo-voting-app
spec:
containers:
- name: redis
image: redis
ports:
- containerPort: 6379

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
38
Q

How to use help command say for e.g. kubectl expose

A

kubectl expose –help

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
39
Q

How to create a deployment declaratively?

A

apiVersion: apps/v1
kind: Deployment
metadata:
name: voting-app-deploy
labels:
name: voting-app-deploy
app: demo-voting-app
spec:
template:
metadata:
name: voting-app-pod
labels:
name: voting-app-pod
app: demo-voting-app
spec:
containers:
- name: voting-app
image: kodekloud/examplevotingapp_vote:v1
ports:
- containerPort: 80
selector:
matchLabels:
name: voting-app-pod
app: demo-voting-app
replicas: 1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
40
Q

How to create a service declaratively?

A

apiVersion: v1
kind: Service
metadata:
name: postgres
labels:
name: result-app-service
app: demo-voting-app
spec:
type: NodePort
ports:
- targetPort: 80
port: 80
nodePort: 30005
selector:
name: result-app-pod
app: demo-voting-app

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
41
Q

What is the key used by scheduler to verify if a POD has been scheduled or not?

A

nodeName in the pod definition file. This can be used to bypass scheduler and place the pod on a specific node

apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
nodeName: node01
containers:
- image: nginx
name: nginx

42
Q

How to manually schedule a POD to a node once it has been created?

A

Create a binding object and send a post request to the POD’s binding API

Binding object:
apiVersion: v1
kind: Binding
metadata:
name: my-pod
namespace: default
target:
apiVersion: v1
kind: Node
name: node-1

kubectl apply -f binding.yaml

43
Q

What does replace command do?

A

It deletes the POD and recreates it

kubectl replace –force -f pod-def.yaml

Note: If using kubectl apply then you have to first delete the pod separately and then use apply

44
Q

How to get pods that belongs to a specific labels

A

kubectl get pods –selector app=App1
k get pods –selector env=dev
k get pods –selector env=prod,bu=finance,tier=frontend

45
Q

What are annotations used for?

A

To record other details for informative purpose

for e.g. name, version, build, contact details

46
Q

What are taints and tolerations used for?

A

To restrict what pods are placed on what nodes
taint is applied on a node
toleration is applied on a pod

47
Q

How to taint a node?

A

k taint nodes node_name key=value:taint-effect

e.g. kubectl taint nodes node-1 app=blue:NoSchedule
k taint nodes node01 spray=mortein:NoSchedule

48
Q

What are the different types of effects in tainting

A

NoSchedule: No pod will be scheduled on the tainted node unless it has a matching toleration.

PreferNoSchedule: The scheduler will prefer not to schedule pods on the node, but will do so if no other nodes are suitable.

NoExecute: Any existing pods on the node will be evicted, and no new pods will be scheduled unless they tolerate the taint.

49
Q

How to add toleration to a pod for this taint on a node?

e.g. kubectl taint nodes node-1 app=blue:NoSchedule

A

apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
tolerations:
- key: “app”
operator: “Equal”
value: “blue”
effect: “NoSchedule”

50
Q

What is the main purpose of taints & tolerations?

A

It restricts nodes from accepting certain pods. It does not guarantee that a pod will always be placed on a specific node. If there are other nodes without any taint. The pod may well be placed in those nodes. This functionality is achieved by node affinity.

51
Q

Where do you see matchLabels in selector?

A

Only in deployment & replicaset yaml files

52
Q

How to check the taint on the master node?

A

kubectl describe node kubemaster | grep Taint

53
Q

How to ensure a POD is placed in a specific Node?

A

Using Node Selectors in POD config file or NodeAffinity

spec:
nodeSelector:
size: Large # node label

54
Q

How to label a node?

A

kubectl label nodes node_name <label_key>=<label_value</label_key>

e.g. kubectl label nodes node1 size=Large

55
Q

What is the limitation of nodeSelector?

A

Does not work for complex expressions with nodeSelector
for e.g. Place pod in Large or Medium, Do Not place PODS in Small nodes

The solution is nodeAffinity

56
Q

What is the purpose of NodeAffinity?

A

To ensure PODS are hosted on specific nodes

57
Q

How to add nodeAffinity to a pod definition file?

A

spec
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: size
operator: In
values:
- Large
- Medium

Operator can be NotIn

58
Q

What is the operator used to check if a label exists on a node

A

operator: Exists

59
Q

What are the nodeAffinity types?

A

requiredDuringSchedulingIgnoredDuringExecution:

What it does: Ensures that a pod can only be scheduled on a node that meets the specified condition (label match).
Ignored During Execution: Once the pod is running, it won’t be evicted if the condition changes.

preferredDuringSchedulingIgnoredDuringExecution:

What it does: Tries to schedule the pod on a node that matches the condition but doesn’t strictly require it.
Ignored During Execution: Once the pod is running, it won’t be evicted if the condition changes.

requiredDuringSchedulingRequiredDuringExecution:

What it does: Ensures that a pod can only run on a node that meets the specified condition both during scheduling and while it is running.
Required During Execution: If the node’s labels change and the condition is no longer met, the pod will be evicted.

60
Q

Why should I use Taint, Tolerations & NodeAffinity together

A

With Taint & Tolerations: you cannot limit the PODS from being placed in other nodes which does not have any taint. They can happily be placed. Here: PODS can be PLACED on STRANGER nodes

With NodeAffinity: There are labels set for nodes and you give the PODS those labels in the spec section. There is no guarantee that other PODS which does not have those labels set are not placed in these nodes right. They can be happily placed. Here: STRANGER PODS can be PLACED on YOUR nodes

61
Q

What resources does a node have?

A

CPU & Memory
e.g. 1 CPU and 1Gi Memory - known as resource request for a container

62
Q

Who decides which node the POD goes to?

A

kube-scheduler

63
Q

How to add resource request within a POD definition file?

A

within the containers:

containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
resources:
requests:
memory: “4Gi”
cpu: 2

64
Q

What does 1 CPU really mean?

A

1 AWS vCPU
1 GCP Core
1 Azure Core

65
Q

What is the difference between 1G and 1Gi in memory?

A

1G is 1000MB
1Gi is 1024MB

66
Q

By default does container has any limit on the resources it can consume on a node?

A

No. This could lead to suffocation

67
Q

How to control the no. of resources a container consumes on a node?

A

By setting limits at each container

containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
resources:
requests:
memory: “4Gi”
cpu: 2
limits:
memory: “2Gi”
cpu: 2

68
Q

What is the difference between requests & limits

A

requests: This is the amount of resources the container is guaranteed to have

limit: This is the maximum amount of resources the container can use

69
Q

What happens if the container exceeds limits for CPU & Memory?

A

In case of CPU throttling happens
In case of Memory it can use more memory than its limit. But if it does constantly, the POD will be terminated with an OOM (Out of Memory) message. Once memory is assigned to a POD, only way to retrieve it is by killing the POD

70
Q

What happens if you have limits set but no requests?

A

In this case kubernetes sets the requests same as limits

71
Q

What happens if you have requests set but no limits?

A

Each pod is guaranteed the requested amount of resources. But if POD 1 is needs more resources, it can get those since there are no limits. This is the most ideal set up!

Since we have REQUESTS set, POD 2 is always guaranteed the minimum resources

72
Q

What is the issue with setting both limits & requests?

A

If POD 1 needs more resources and POD 2 is under-utilized then POD 1 cannot use those left over resources since we limited.

73
Q

How to ensure every POD created has some default set for the limits & requests?

A

Can be done using LimitRange. Only affects newer PODS. The below config is done at namespace level

apiVersion: v1
kind: LimitRange
metadata:
name: cpu-resource-constraint
spec:
limits:
- default: #default limit
cpu: 500m
defaultRequest: #default request
cpu: 500m
max: #max limit, the container cannot set more than this
cpu: “1”
min: #min request, the container must request at least this
cpu: 100m
type: Container

74
Q

Is there any way to restrict no. of resources consumed by ALL the PODS within a kubernetes cluster?

A

Can be done using ResourceQuota at namespace level

apiVersion: v1
kind: ResourceQuota
metadata:
name: my-resource-quota
spec:
hard:
requests.cpu: 4
requests.memory: 4Gi
limits.cpu: 10
limits.memory: 10Gi

75
Q

So if you are asked to edit a property of a POD part of a deployment you may do that simply by running which command?

A

kubectl edit deployment deployment_name

With Deployments you can easily edit any field/property of the POD template. Since the pod template is a child of the deployment specification, with every change the deployment will automatically delete and create a new pod with the new changes.

76
Q

Can you edit the environment variables, service accounts, resource limits of a running pod

A

No. But if you have to do that you can do it by using

kubectl edit pod pod_name

you will get forbidden message. But a copy of your changes are saved in a temporary location

You can then delete the POD and create the new POD using the temporary file

2nd Option is to.. extract the POD def file to a yaml, make changes, delete the POD and use kubectl create -f pod_def.yaml

77
Q

What is the purpose of Deamon Sets?

A

Ensures one copy of the POD runs on each node of the cluster

Use Cases:
- Monitoring Solution
- Logs Viewer
- Kube-proxy

78
Q

How to create Deamon Sets using configuration file?

A

Similar to replicaset

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: monitoring-daemon
spec:
selector:
matchLabels:
app: monitoring-agent #this label pod will be placed in all nodes
template:
metadata:
labels:
apps: monitoring-agent
spec:
containers:
- name: monitoring-agent
image: monitoring-agent

79
Q

How to view the Daemon sets

A

k get deamonsets

80
Q

Can you create daemonset imperatively?

A

As a workaround you can.

You cannot give namespaces or images names.. Instead do a dryrun and specify namespace separately. Again dryrun should be performed with deployment config file and you make the edits as necessary

81
Q

What does kubelet do?

A

It is like a captain of the node. Relies on kube-apiserver to instruct what pods to load on its node.

The decision is made by the kube-scheduler and the decision is stored in ETCD datastore

82
Q

Can kubelet operate as an independent node without the master node which has all the controlplane? How to provide the pod definition file to kubelet without the kube-apiserver?

A

kubelet can be configured to read the pod def files from a directory in the server designated to store info about pods

/etc/kubernetes/manifests

kubelet.service file
the option for the folder is –pod-manifest-path
OR
you can provide a path to another config file
–config=kubeconfig.yaml and define the directory as staticPodPath:

These pods are called static pods. Only PODS can be created this way. Not other resources like deployments, replicasets, etc.

These PODS are viewed using docker ps

83
Q

Why would you use static pods?

A

To deploy kubernetes controlplane components

Install kubelet
create the def files for all the controlplane components
place them in the –pod-manifest-path
kubelet will take care of deploying the components

This way you dont have to worry about downloading binaries, configuring services or crashing services etc.. as kubelet will recreate crashing services automatically. This is how a kubeadm sets up a kubernetes cluster.

kubectl get pods –namespace=kube-system .. you will see all pods only since the control plane components are set up as pods

static pods have nodename appended at the end

84
Q

kube-scheduler has no affect on what resources?

A

static pods and daemon sets

85
Q

How to check the kubelet.service file

A

Option 1:

systemctl status kubelet
Check the kubelet.service file
Check the file to see the path directly or a config file.yaml
cat the config file and look for staticPodPath

Option 2:
ls /var/lib/kubelet/config.yaml

86
Q

How to give sleep 1000 in a pod def file?

A

command: [“sleep”, “1000”]

87
Q

How to run commands within a pod of a running container?

A

kubectl exec -it mypod – /bin/sh

This would open an interactive shell (/bin/sh) inside the mypod container.

kubectl exec mypod – echo “Hello from inside the container”

88
Q

Explain LimitRange config file in detail

A

apiVersion: v1
kind: LimitRange
metadata:
name: cpu-memory-constraint
spec:
limits:
- default:
cpu: 500m
defaultRequest:
cpu: 200m
max:
cpu: “1”
min:
cpu: 100m
type: Container
- default:
memory: “2Gi”
defaultRequest:
memory: “1Gi”
max:
memory: “4Gi”
min:
memory: “512Mi”
type: Container

In this example:

limits: is a list that contains two items.
Inside this item:
default: sets the default CPU limit.
defaultRequest: sets the default CPU request.
max: sets the maximum CPU limit.
min: sets the minimum CPU request.
type: Container indicates that these constraints apply to containers.

89
Q

How to deploy a custom kube-scheduler

A

First they must have different names (default-scheduler, kubernetes-scheduler-1)

apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchdulerConfiguration
profiles:
- schedulerName: kubernetes-scheduler-1
leaderElection: #if multiple schedulers in the cluster
leaderElect: true
resourceNamespace: kube-system
resourceName: lock-object-my-schedule

When you run the kube-scheduler binary, you point it to the new custom config file

Ideally this is NOT how you deploy a scheduler. With kubeadm all controlplane components are deployed as a POD within a cluster

apiVersion: v1
kind: Pod
metadata:
name: custom-scheduler-name
namespace: kube-system
spec:
containers:
- image: k8s.gcr.io/kube-scheduler-amd64:v1.11.3
name: kube-scheduler
command:
- kube-scheduler # First element in the list: the main command
- –address=127.0.0.1 # Second element in the list: the first argument
- –kubeconfig=/etc/kubernetes/scheduler.conf # Third element
- –config=/etc/kubernetes/my-scheduler-config.yaml # Fourth element

Key Points:
command: is a field that specifies the command to run inside the container.
It is a list of values, where each dash (-) represents an item in that list.
The first item (kube-scheduler) is the main command that runs inside the container.
The subsequent items (–address=127.0.0.1, –kubeconfig=/etc/kubernetes/scheduler.conf, and –config=/etc/kubernetes/my-scheduler-config.yaml) are the arguments passed to the kube-scheduler command.

90
Q

How to ensure that the POD is using the custom scheduler instead of the default one?

A

apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx:
name: nginx
schedulerName: my-custom-scheduler

91
Q

How to know which scheduler picked up in scheduling a POD

A

k get events -o wide and you can check the source

92
Q

How to view the logs of a scheduler

A

k logs scheduler_name –namespace=namespace_name

93
Q

How to create configmap

A

k create configmap –name configmap_name –from-file=/root/my-scheduler-config.yaml –namepsace=kube-system

94
Q

How to set priority for a POD for scheduling?

A

Using priorityClassName

apiVersion: v1
kind: Pod
metadata:
name: pod_name
spec:
priorityClassName: high-priority
containers:
- name: container_name
image: image_nme
resources:
requests:
cpu: 2
memory: “4Gi”

95
Q

How to define a priority class

A

apiVersion: scheduling.k8s.io.v1
kind: PriorityClass
metadata:
name: high-priority
value: 1000000
globalDefault: false

96
Q

What is the workflow for scheduling?

A

Scheduling Queue
Filtering
Scoring
Binding

97
Q

Within kubelet what is the subcomponent responsible for retrieving container metrics from PODS?

A

cAdvisor or Container Advisor

98
Q

What are some of the monitoring solutions to capture cluster metrics

A

prometheus, metrics server, elastic stack, datadog, dynatrace

e.g. This is the command to install metrics server on a cluster: k apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

99
Q

Once metrics server is deployed what commands can be used to monitor the metrics for nodes & pods?

A

k top pod - these display the resource usage of pods running in a cluster
k top node

Memory: Mebibytes
CPU: millicores

100
Q

In kubernetes how to see the logs?

A

k logs -f config_file.yaml container_name

You need to specify container name if multiple containers are out there

k logs pod_name (if the pod only has one container)
k logs pod_name -c container_name –namespace=namespace (if pod has multiple container and you want to view the logs for a specific container & namespace)

101
Q

What are the different deployment strategies?

A

Recreate
RollingUpdate (Default)

102
Q

What are the 2 ways to change the deployment configuration details

A
  1. Change the deployment config file for e.g. image and then k apply -f deploy_config.yaml
  2. k set-image deployment deployment_name –nginx=nginx:1.2

Note: the 2nd option does not change the config file