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" 을 보고 정리한 내용입니다..
'cloud > k8s(문제풀이)' 카테고리의 다른 글
[따배쿠CKA]5.Side-car Container Pod 실행하기 (1) | 2022.08.08 |
---|---|
[따배쿠CKA]4.Multi-container Pod 생성하기 (0) | 2022.08.08 |
[따배쿠CKA-2] Pod 생성하기 (0) | 2022.08.03 |
[따배쿠CKA -1] cka - ETCD Backup Restore (0) | 2022.08.03 |
[k8s] CoreDNS in kubeernetes (0) | 2022.08.03 |