70. Daemon Sets
Daemon Set 은 모든 node에 기본적으로 하나의 pod를 올리게 한다.
node가 하나 추가되면 daemon sets의 pod 이 생성되고
그 node가 사라지면 자동적으로 pod도 사라진다.
Daemon Set은 모든 node 에 한 pod가 생기도록 보장한다.
Daemon Sets 사용사례
모든 node 에 모니터링 솔루션이 존재하도록 할 수 있다.
다른 pod 끼리 통신하는 kube proxy 도 예로 들 수 있다.
weave - net 도 가능
kind 는 DaemonSet
replicaset 이랑 비슷한 형태이다.
selector의 레이블과 app의 레이블이 같은지 확인해야한다.
확인하기
어떤 식으로 작동할까?
마찬가지로 모든 pod에 node affinity 가 적용되서 node 에 pod이 실리는 방식
71. Practice Test - DaemonSets
1.
How many DaemonSets are created in the cluster in all namespaces? Check all namespaces
2.
which namespaces are the DaemonSets created in?
3.
Which of the below is a DaemonSet?
4.
On how many nodes are the pods scheduled by the DaemonSet kube-proxy
5.
What is the image used by the POD deployed by the kube-flannel-ds DaemonSet?
6.
Deploy a DaemonSet for FluentD Logging. Use the given specifications.
kind를 daemonset으로 변경
replica , strategy, status 제거
73. Static Pods
kublet 이 어떻게 작동하는지 알아볼거다
The kublet relies on the kube-apiserver for instructions on what PODs to load on its node,
kublet 은 kube apiserver에 의존한다. 어떤 pod를 node 에 실을지.
해당 사항은 etcd 에 저장된 정보를 가지고 kube-scheduler 가 결정한다.
만약 master node가 없는 상황이라면 어떨까?
cluster 없이 worker node 하나만 있는 상황에서 kublet은 뭘 할 수 있을까?kublet 단독으로 node를 운영할 수 있을까? 그렇다면 어떤식으로 운영할까?
The one thing that the kubelet knows to do is create PODs. But we don’t have an API server here to provide
POD details.
master node, kube api 가 없는 상황에서 kublet이 pod를 만들고 싶어도 pod 정보를 api로 못 받기 때문에 만들 수 없다.
pod 에 대한 정보를 갖고 있는 pod.yaml을 node 안에 미리 저장하고
kublet 이 우선적으로 해당 파일을 읽도록 지정해야한다.
pod를 생성하는것 뿐만 아니라 pod가 살아있도록 유지해야한다.
만약 yaml 파일을 변경한다면 kublet은 다시 pod를 생성할 것이다 .
파일을 삭제한다면 pod도 삭제될 것이다.
이렇게 생성된 pod는 kube api 없이 스스로 생성된 것이다.
위처럼 api 도움 없이 kublet 이 생성한 pod를 static pod 라고 한다.
Remember you can only create PODs this way.
You cannot create replicasets or deployments or services by placing a definition file in the designated
directory.
이런 방식으로 생성할 수 있는건 pod 밖에 없다. deployment, service 이런건 안된다.
kublet은 pod 레벨에서만 작동하고 이해한다.
그래서 static pod를 생성할 수 있는 것이다.
yaml 파일 경로를 직접 정할 수 있다.
pod-manifest-path=/etc/kubernetes/manifests
기본적으로 위의 경로를 쓴다.
경로를 직접 지정하는 대신 경로 정보를 가지는 config 를 통해서 간접 지정할 수 있다.
static pod 가 생성되고 난 후 docker ps 명령어로 확인할 수 있다.
kube api 가 없기 때문에 kubectl은 실행되지 않는다.
master node 가 있는 상황에서 어떻게 작동할까?
kublet은 static pod 와 api로부터 받은 pod 다 생성할 수 있다.
kube api는 static pod 가 생성되었다는 것을 알까?
When the kubelet creates a static pod,
if it is part of a cluster, it also creates a mirror object in the kubeapi server.
What you see from the kube-apiserver is just a read only mirror of the pod.
cluster 가 있는 상태에서 static pod 가 생성되면 미러 object 가 kubeapi server 에 생성된다.
get pods 로 확인한건 미러 object 이다 .
만약 static pod를 지우고 싶으면 기존의 방법으로는 지울 수 없다.
yaml 파일로 가서 수정해야한다.
static pods 의 용도는 ?
you can use static pods to deploy the control plane components itself as pods on a node. Start by installing kubelet on all the master nodes.
마스터 node에 심어놓을 수 있다.
만약 pod 가 죽었을때 master node 에 pod 에 대한 정의가 있으면 다시 만들 수 있다. (매번 번거롭게 외부 접속 안해도 된다.)
static pod 와 daemonset의 차이!
74. Practice Test - Static Pods
1.
How many static pods exist in this cluster in all namespaces?
이름 뒤에 노드 있는 애들을 static pod 로 간주한다.
static pod 가 아니면 다른 kind 로 되어있다.
2.
Which of the below components is NOT deployed as a static pod?
3.
Which of the below components is NOT deployed as a static POD?
4.
On which nodes are the static pods created currently?
5.
What is the path of the directory holding the static pod definition files?
6.
How many pod definition files are present in the manifests folder?
7.
What is the docker image used to deploy the kube-api server as a static pod?
8.
Create a static pod named static-busybox that uses the busybox image and the command sleep 1000
9.
Edit the image on the static pod to use busybox:1.28.4
10.
We just created a new static pod named static-greenbox. Find it and delete it.
This question is a bit tricky. But if you use the knowledge you gained in the previous questions in this lab, you should be able to find the answer to it.
exit 하고 확인하면 됨
76. Multiple Schedulers
kube 은 scheduler를 각기 다르게 정의할 수 있다.
가장 기본이 되는 shceduler는 default scheduler
추가 scheduler 운영하기
config 파일에서 scheduler 이름을 지정해야하고 yaml 파일에 똑같은 이름을 써야한다.
yaml 파일
leaderElect 옵션이 있다.
해당 scheduler를 메인으로 쓸거면 true 아니면 false
scheduler를 만들고 난 후 (my-custom-scheduler)
pod에 schedulerName을 지정해야한다.
지정하고 나면 pod가 실행될 거다 .
커스텀 scheuler가 파드를 옮겼는지 확인하는 방법은 ?
event로 schedule 활동을 볼 수 있다. -o wide 옵션으로 확인하자
로그 확인하기
logs 명령어로 확인도 가능하다.
77. Practice Test - Multiple Schedulers
1.
What is the name of the POD that deploys the default kubernetes scheduler in this environment?
2.
What is the image used to deploy the kubernetes scheduler?
Inspect the kubernetes scheduler pod and identify the image
3.
We have already created the ServiceAccount and ClusterRoleBinding that our custom scheduler will make use of.
Checkout the following Kubernetes objects:
ServiceAccount: my-scheduler (kube-system namespace)
ClusterRoleBinding: my-scheduler-as-kube-scheduler
ClusterRoleBinding: my-scheduler-as-volume-scheduler
Run the command: kubectl get serviceaccount -n kube-system & kubectl get clusterrolebinding
Note: - Don't worry if you are not familiar with these resources. We will cover it later on.
4.
Let's create a configmap that the new scheduler will employ using the concept of ConfigMap as a volume.
We have already given a configMap definition file called my-scheduler-configmap.yaml at /root/ path that will create a configmap with name my-scheduler-config using the content of file /root/my-scheduler-config.yaml.
기존의 config 파일을 이용하여 configamp 만들기
--from-file 로 가져오는 것
5.
Deploy an additional scheduler to the cluster following the given specification.
Use the manifest file provided at /root/my-scheduler.yaml. Use the same image as used by the default kubernetes scheduler.
-
Name: my-scheduler
-
Status: Running
-
Correct image used?
6.
A POD definition file is given. Use it to create a POD with the new custom scheduler.
File is located at /root/nginx-pod.yaml
79. Configuring Scheduler Profiles
위와 같이 사양이 있다고 치자.
1. Scheduling Queue
파드에 priorityClassName 을 쓰기 위해 PrirorityClass 객체를 만들어야한다.
value 가 큰 값 먼저 배치한다.
파드가 대기자 큐에 올라간다.
2. Filtering
사양에 맞는 node를 필터링한다.
3. Scoring
node 할당 후 자원이 많이 남는 node를 고른다 .
4. Binding
pod가 node 에 배정된다 .
Scheduling Plugins
모든 과정에 plugins 이 관여한다 .
Extension Points
plugins 들을 수정할 수 있다.
어떻게 scheduler를다르게 설정할 수 있을까 ?