본문 바로가기
cloud/k8s(문제풀이)

[따배쿠CKA-3]Static-Pod 생성하기

by mozi2 2022. 8. 3.
반응형

1. kubectl 구동방식 

* 전제조건: master Node 1개, node1, node2

 

  1) "kubectl nginx pod" 라는 명령어를 사용자가 입력하면

  2) master Node 의 API 로 전달, API 가 전달을 받으면,

  3) master Node 의 ETCD 안에 있는 클러스터를 꺼내서 scheduler에게 보내서 요청을한다. 

  4) Scheduler 은 "kubectl nginx pod" 명령어에 Node1, Node2 중에 어디가 더 적합한지 확인을 함

  5) Scheulder은 노드와 클러스터의 상태를 확인하고 가장 적합한 Node를 찾아 API 에게 알려준다.

     예를들면 적합한 Node 가 1번 Node 이면

  6) API가 1번 Node 의 kubelet 에게 요청을 한다. 

     "kubelet nginx pod" 하나 실행해줘라고 하면 각 Node의 컨테이너 엔진에게 요청한다. 

  7) container Pod 하나를 실행해달라고 함. 

  8) 컨테니어 엔진은 레지스트리 허브에서 동일한 이미지를 다운받아서 실행해주게 된다. 

      그리고 이 실행 상태에 대한 정보를 kubelect 에게 전달한다.

  9) kubelect 는 이 정보를 다시 Maset의 API 에게 전달하고 API 는  Node1 에 nginx 가 실행중임을 Master             Node 에 기록하고 실행하게 된다. 

 

2. Static Pod의 동작방식은?

 : API 의 도움을 받지 않음

 : Node 2 의 Kubelet(데몬) 이 동작할때 자신만의 config.yaml 파일이 있다.

  ( kubelet 은 config.yaml 파일에 의해 동작한다. ) 

: 이 파일 안에 static pod 의 위치 정보가 담겨있는 파일이 있다. 

: 그 위치에 pod의 yaml파일을 넣어주면 kubelet 은 그 yaml 파일을 기준으로 pod 한개를 실행하게된다.

 (누가 실행을 하나? 바로 kubelet) ==> Static Pod 

 

: yaml 파일을 삭제하면 pod도 삭제 된다. (누가 지우나? kubelet 가 지운다)

 

: Master Node의 component (APi, Scheduler,Controller, etcd 등등) ,  Master의 kubelet 에 의해  static Pod 로 동작하기 때문에 API 를 각자 동작할 수 있다.

 

즉, 내가 원할때 언제든지 Static Pod 를 만들어 Master, Node 에 얼마든지 두고 사용할 수 있다. 

 

*강의와 동일한 환경을 구축할 수 없어 가능한한 비슷한 환경에서 테스트 예정 

3.  Static Pod 생성하기 

Confiture kubelet hosting to start a pod the node
 - Node: node01
 - pod Name: web
 - image: nginx

1. pod template 생성하기 

k get nodes 
k run web --image=nginx --dry-run=client -o yaml > web.yaml
cat web.yaml (내용 복사)

2. ssh 로 적용 노드 접속

 : static Pod 가 위치 되어야 하는 경로

ssh node01
sudo -i
cat /var/lib/kubelet/config.yaml

3. staticPodPath 경로에 파일 생성 

cd /etc/kubernetes/manifests/

#방법은 두가지 중 편한거로 선택
1) 이전 yaml 만든 파일을 복사한다.
 cat > web.yaml \
 apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: web name: web spec: containers: -   image: nginx name: web resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {} 

2) vi web.yaml 
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: web name: web spec: containers: - image: nginx name: web resources: {} dnsPolicy: ClusterFirst restartPolicy: Always status: {}



4. 확인

: master 노드에서 확인 

 

 * 만약 Master 노드에서 확인이 안될경우, staticPodPath 경로가 아니거나, yaml 파일의 오타 혹은 띄어쓰기로 인해 확인이 안될 수 있다. 

exit

*Master Node 
k get pods -A

 

* 본 게시글은 "TTABAE-LEARN" 을 보고 정리한 내용입니다..

 

728x90
반응형