LABS – CERTIFIED KUBERNETES ADMINISTRATOR WITH PRACTICE TESTS > SCHEDULING – DaemonSets
Scheduling
01. How many DaemonSets are created in the cluster in all namespaces?
Check all namespaces
ask : 2
kubectl get pod --all-namespaces
kubectl get all --all-namespaces
root@controlplane:~# kubectl get all --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/coredns-74ff55c5b-5jkn2 1/1 Running 0 10m
kube-system pod/coredns-74ff55c5b-pwqkq 1/1 Running 0 10m
kube-system pod/etcd-controlplane 1/1 Running 0 10m
kube-system pod/kube-apiserver-controlplane 1/1 Running 0 10m
kube-system pod/kube-controller-manager-controlplane 1/1 Running 0 10m
kube-system pod/kube-flannel-ds-dmpcp 1/1 Running 0 10m
kube-system pod/kube-proxy-22n4t 1/1 Running 0 10m
kube-system pod/kube-scheduler-controlplane 1/1 Running 0 10m
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
kube-system service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 10m
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system daemonset.apps/kube-flannel-ds 1 1 1 1 1 <none> 10m
kube-system daemonset.apps/kube-proxy 1 1 1 1 1 kubernetes.io/os=linux 10m
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
kube-system deployment.apps/coredns 2/2 2 2 10m
NAMESPACE NAME DESIRED CURRENT READY AGE
kube-system replicaset.apps/coredns-74ff55c5b 2 2 2 10m
02. Which namespace are the DaemonSets created in?
ask :) kube-system
03. Which of the below is a DaemonSet?
(정답) kube-flannel-ds
2) coredns
3) scheduler
4) etcd-master
04. On how many nodes are the pods scheduled by the DaemonSet kube-proxy
ask :) 1
kubectl describe daemonset kube-proxy --namespace=kube-system
# node 몇개인지 count
root@controlplane:~# kubectl describe daemonset kube-proxy --namespace=kube-system
Name: kube-proxy
Selector: k8s-app=kube-proxy
Node-Selector: kubernetes.io/os=linux
Labels: k8s-app=kube-proxy
Annotations: deprecated.daemonset.template.generation: 1
Desired Number of Nodes Scheduled: 1
Current Number of Nodes Scheduled: 1
Number of Nodes Scheduled with Up-to-date Pods: 1
Number of Nodes Scheduled with Available Pods: 1
Number of Nodes Misscheduled: 0
Pods Status: 1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: k8s-app=kube-proxy
Service Account: kube-proxy
Containers:
kube-proxy:
Image: k8s.gcr.io/kube-proxy:v1.20.0
Port: <none>
Host Port: <none>
Command:
/usr/local/bin/kube-proxy
--config=/var/lib/kube-proxy/config.conf
--hostname-override=$(NODE_NAME)
Environment:
NODE_NAME: (v1:spec.nodeName)
Mounts:
/lib/modules from lib-modules (ro)
/run/xtables.lock from xtables-lock (rw)
/var/lib/kube-proxy from kube-proxy (rw)
Volumes:
kube-proxy:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: kube-proxy
Optional: false
xtables-lock:
Type: HostPath (bare host directory volume)
Path: /run/xtables.lock
HostPathType: FileOrCreate
lib-modules:
Type: HostPath (bare host directory volume)
Path: /lib/modules
HostPathType:
Priority Class Name: system-node-critical
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 23m daemonset-controller Created pod: kube-proxy-22n4t
03. What is the image used by the POD deployed by the kube-flannel-ds DaemonSet?
ask :) quay.io/coreos/flannel:v0.13.1-rc1
root@controlplane:~# kubectl describe daemonset kube-proxy --namespace=kube-system
Name: kube-proxy
Selector: k8s-app=kube-proxy
Node-Selector: kubernetes.io/os=linux
Labels: k8s-app=kube-proxy
Annotations: deprecated.daemonset.template.generation: 1
Desired Number of Nodes Scheduled: 1
Current Number of Nodes Scheduled: 1
Number of Nodes Scheduled with Up-to-date Pods: 1
Number of Nodes Scheduled with Available Pods: 1
Number of Nodes Misscheduled: 0
Pods Status: 1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: k8s-app=kube-proxy
Service Account: kube-proxy
Containers:
kube-proxy:
Image: k8s.gcr.io/kube-proxy:v1.20.0
Port: <none>
Host Port: <none>
Command:
/usr/local/bin/kube-proxy
--config=/var/lib/kube-proxy/config.conf
--hostname-override=$(NODE_NAME)
Environment:
NODE_NAME: (v1:spec.nodeName)
Mounts:
/lib/modules from lib-modules (ro)
/run/xtables.lock from xtables-lock (rw)
/var/lib/kube-proxy from kube-proxy (rw)
Volumes:
kube-proxy:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: kube-proxy
Optional: false
xtables-lock:
Type: HostPath (bare host directory volume)
Path: /run/xtables.lock
HostPathType: FileOrCreate
lib-modules:
Type: HostPath (bare host directory volume)
Path: /lib/modules
HostPathType:
Priority Class Name: system-node-critical
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 23m daemonset-controller Created pod: kube-proxy-22n4t
root@controlplane:~# kubectl describe daemonset kube-flannel-ds
Error from server (NotFound): daemonsets.apps "kube-flannel-ds" not found
root@controlplane:~# kubectl describe daemonset kube-flannel-ds --namespace kube-system
Name: kube-flannel-ds
Selector: app=flannel
Node-Selector: <none>
Labels: app=flannel
tier=node
Annotations: deprecated.daemonset.template.generation: 1
Desired Number of Nodes Scheduled: 1
Current Number of Nodes Scheduled: 1
Number of Nodes Scheduled with Up-to-date Pods: 1
Number of Nodes Scheduled with Available Pods: 1
Number of Nodes Misscheduled: 0
Pods Status: 1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=flannel
tier=node
Service Account: flannel
Init Containers:
install-cni:
Image: quay.io/coreos/flannel:v0.13.1-rc1
Port: <none>
Host Port: <none>
Command:
cp
Args:
-f
/etc/kube-flannel/cni-conf.json
/etc/cni/net.d/10-flannel.conflist
Environment: <none>
Mounts:
/etc/cni/net.d from cni (rw)
/etc/kube-flannel/ from flannel-cfg (rw)
Containers:
kube-flannel:
Image: quay.io/coreos/flannel:v0.13.1-rc1
Port: <none>
Host Port: <none>
Command:
/opt/bin/flanneld
Args:
--ip-masq
--kube-subnet-mgr
--iface=eth0
Limits:
cpu: 100m
memory: 300Mi
Requests:
cpu: 100m
memory: 50Mi
Environment:
POD_NAME: (v1:metadata.name)
POD_NAMESPACE: (v1:metadata.namespace)
Mounts:
/etc/kube-flannel/ from flannel-cfg (rw)
/run/flannel from run (rw)
Volumes:
run:
Type: HostPath (bare host directory volume)
Path: /run/flannel
HostPathType:
cni:
Type: HostPath (bare host directory volume)
Path: /etc/cni/net.d
HostPathType:
flannel-cfg:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: kube-flannel-cfg
Optional: false
Priority Class Name: system-node-critical
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 26m daemonset-controller Created pod: kube-flannel-ds-dmpcp
06. Deploy a DaemonSet for FluentD Logging.
Use the given specifications.
- Name: elasticsearch
- Namespace: kube-system
- Image: k8s.gcr.io/fluentd-elasticsearch:1.20
root@controlplane:~# kubectl create -f fluentd.yaml
error: error validating "fluentd.yaml": error validating data: [ValidationError(DaemonSet.spec): unknown field "strategy" in io.k8s.api.apps.v1.DaemonSetSpec, ValidationError(DaemonSet.status): missing required field "currentNumberScheduled" in io.k8s.api.apps.v1.DaemonSetStatus, ValidationError(DaemonSet.status): missing required field "numberMisscheduled" in io.k8s.api.apps.v1.DaemonSetStatus, ValidationError(DaemonSet.status): missing required field "desiredNumberScheduled" in io.k8s.api.apps.v1.DaemonSetStatus, ValidationError(DaemonSet.status): missing required field "numberReady" in io.k8s.api.apps.v1.DaemonSetStatus]; if you choose to ignore these errors, turn validation off with --validate=false
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: elasticsearch
name: elasticsearch
namespace: kube-system
spec:
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- image: k8s.gcr.io/fluentd-elasticsearch:1.20
name: fluentd-elasticsearch
# Hint
An easy way to create a DaemonSet is to first generate a YAML file
for a Deployment with the command
# kubectl create deployment elasticsearch --image=k8s.gcr.io/fluentd-elasticsearch:1.20 -n kube-system --dry-run=client -o yaml > fluentd.yaml
Next, remove the replicas,
strategy and status fields from the YAML file using a text editor.
Also, change the kind from Deployment to DaemonSet.
Finally, create the Daemonset by running
# kubectl create -f fluentd.yaml
# Bookmark
https://kubernetes.io/ko/docs/concepts/workloads/controllers/daemonset/
https://kubernetes.io/ko/docs/tasks/manage-daemon/update-daemon-set/
'CKA (Certified Kubernetes Administrator) > Kode Kloud' 카테고리의 다른 글
02. Scheduling - Multiple Schedulers (0) | 2022.01.20 |
---|---|
02. Scheduling - Static PODs (0) | 2022.01.20 |
02.Scheduling - Resource Limits (0) | 2022.01.19 |
02.Scheduling - Node Affinity (0) | 2022.01.19 |
02 Scheduling - Taints and Tolerations (0) | 2022.01.19 |