[따배쿠] 쿠버네티스 시리즈 강의를 보고 배운 내용을 정리한 글입니다.
https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c
[따배쿠] 쿠버네티스 시리즈
www.youtube.com
쿠버네티스에서의 컨테이너 동작 흐름

1. docker push : 실행할 이미지를 도커 허브에 올립니다.
2. Image is pushed to Docker hub : 이미지가 도커 허브에 올라갑니다.
3. kubectl create deploy web --image=hub.example.com : deploy를 생성합니다. (위에서 올린 이미지 사용)
4. kubectl issues REST call
5. Pod created and scheduled a worker node : 파드는 생성되고 워커 노드를 스케줄링합니다.
6. kubelet is notified : 워커 노드에게 신호를 보냅니다.
7. kubelet이 Docker 이미지를 실행시킵니다.
8. Docker pulls and runs
Kubernetes 아키텍처 그림

마스터 컴포넌트 (= Control Plane)
- etcd
- key-value 타입의 저장소
- kube-apiserver
- k8s API를 사용하도록 요청을 받고 요청이 유효한지 검사
- kube-scheduler
- 파드를 실행할 노드 선택
- kube-controller-manager
- 파드를 관찰하며 개수를 보장
워커 노드 컴포넌트
- kubelet
- 모든 노드에서 실행되는 k8s Agent (대리인?)
- 데몬 형태로 동작
- 컨테이너 상태 정보를 관리하는 cAdvisor(컨테이너 자원 모니터링)를 가지고 있어 이를 마스터 컴포넌트 etcd에 저장됨
- kube-proxy
- k8s의 네트워크 동작을 관리
- 컨테이너 런타임
- 컨테이너를 실행하는 엔진
Kubernetes 동작 흐름 다시 정리
- 마스터 컴포넌트에게 kubectl 명령어를 통해 API에게 요청 전달
- 문법, 권한을 확인한 후 API 요청 수락
- etcd 저장소에는 key-value 형식으로 워커 노드에 정보가 저장되어 있음
- etcd 저장소에 정보를 바탕으로 scheduler에 전달하여, 적절한 워커 노드를 API에게 전달
- 워커 노드 kubelet에 연결하여 요청받은 서비스를 실행해 달라고 요청
- 워커 노드에서 docker hub에 요청한 이미지 정보가 있는지 확인 후 실행
- controller가 워커 노드의 상태 정보를 관리하고 있으며, 또한 실행시키려는 프로그램의 개수를 유지하기 위해 서버 장애 시 다른 워커 노드에게 요청을 해주는 역할을 함
K8s Namespace란
namespace란
- 클러스터 하나를 여러 개의 논리적인 단위로 나눠서 사용하는 것을 의미합니다.
- 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 함께 공유할 수 있습니다.
kubectl create namespace blue
namespace를 통해 각 클러스터의 실행 중인 애플리케이션 파드, 저장소 등을 독립적으로 분리할 수 있고, 따로 관리하기 좋음
→ 어느 클러스터(서비스, 환경)에서 실행 중인지 쉽게 파악할 수 있는 장점

kubectl create namespace blue # namespace 생성
kubectl get namespace # namespace 조회
kubectl delete namespace # namespace 삭제
kubectl get nodes # 실행중인 노드 조회 (마스터, 워커 노드)
kubectl get namespace # namespace 조회하기
kubectl get pod --namespace '네임스페이스명' # 기본은 default
실습
apiVersion: v1
kind: Pod # type = Pod
metadata:
name: mypod # Pod의 name = mypodd
spec: # spec = 실행하는 Docker image 설정
containers:
- image: nginx:1.14 # Docker image 설정
name: nginx # Docker Container name = nginx
ports:
- containerPort: 80
- containerPort: 443
kubectl create -f nginx.yaml # create를 통해 yaml 파일 실행
kubectl get pods -n default ('네임스페이스명')
- kubectl create -f을 통해 쿠버네티스 리소스 정의 파일을 지정하여 쿠버네티스 클러스터를 생성합니다.
- kubetctl get pods -n을 통해 특정 namespace의 pod 목록을 조회합니다.
namespace 삭제 방법
kubectl delete namespace blue # namespace가 blue인 리소스 삭제
kubectl delete pods mypod(pod명) -n default # pod명이 mypod인 리소스 삭제
'Infra > Kubernetes' 카테고리의 다른 글
[따배쿠] 쿠버네티스 시리즈 강의를 보고 배운 내용을 정리한 글입니다.
https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c
[따배쿠] 쿠버네티스 시리즈
www.youtube.com
쿠버네티스에서의 컨테이너 동작 흐름

1. docker push : 실행할 이미지를 도커 허브에 올립니다.
2. Image is pushed to Docker hub : 이미지가 도커 허브에 올라갑니다.
3. kubectl create deploy web --image=hub.example.com : deploy를 생성합니다. (위에서 올린 이미지 사용)
4. kubectl issues REST call
5. Pod created and scheduled a worker node : 파드는 생성되고 워커 노드를 스케줄링합니다.
6. kubelet is notified : 워커 노드에게 신호를 보냅니다.
7. kubelet이 Docker 이미지를 실행시킵니다.
8. Docker pulls and runs
Kubernetes 아키텍처 그림

마스터 컴포넌트 (= Control Plane)
- etcd
- key-value 타입의 저장소
- kube-apiserver
- k8s API를 사용하도록 요청을 받고 요청이 유효한지 검사
- kube-scheduler
- 파드를 실행할 노드 선택
- kube-controller-manager
- 파드를 관찰하며 개수를 보장
워커 노드 컴포넌트
- kubelet
- 모든 노드에서 실행되는 k8s Agent (대리인?)
- 데몬 형태로 동작
- 컨테이너 상태 정보를 관리하는 cAdvisor(컨테이너 자원 모니터링)를 가지고 있어 이를 마스터 컴포넌트 etcd에 저장됨
- kube-proxy
- k8s의 네트워크 동작을 관리
- 컨테이너 런타임
- 컨테이너를 실행하는 엔진
Kubernetes 동작 흐름 다시 정리
- 마스터 컴포넌트에게 kubectl 명령어를 통해 API에게 요청 전달
- 문법, 권한을 확인한 후 API 요청 수락
- etcd 저장소에는 key-value 형식으로 워커 노드에 정보가 저장되어 있음
- etcd 저장소에 정보를 바탕으로 scheduler에 전달하여, 적절한 워커 노드를 API에게 전달
- 워커 노드 kubelet에 연결하여 요청받은 서비스를 실행해 달라고 요청
- 워커 노드에서 docker hub에 요청한 이미지 정보가 있는지 확인 후 실행
- controller가 워커 노드의 상태 정보를 관리하고 있으며, 또한 실행시키려는 프로그램의 개수를 유지하기 위해 서버 장애 시 다른 워커 노드에게 요청을 해주는 역할을 함
K8s Namespace란
namespace란
- 클러스터 하나를 여러 개의 논리적인 단위로 나눠서 사용하는 것을 의미합니다.
- 쿠버네티스 클러스터 하나를 여러 팀이나 사용자가 함께 공유할 수 있습니다.
kubectl create namespace blue
namespace를 통해 각 클러스터의 실행 중인 애플리케이션 파드, 저장소 등을 독립적으로 분리할 수 있고, 따로 관리하기 좋음
→ 어느 클러스터(서비스, 환경)에서 실행 중인지 쉽게 파악할 수 있는 장점

kubectl create namespace blue # namespace 생성
kubectl get namespace # namespace 조회
kubectl delete namespace # namespace 삭제
kubectl get nodes # 실행중인 노드 조회 (마스터, 워커 노드)
kubectl get namespace # namespace 조회하기
kubectl get pod --namespace '네임스페이스명' # 기본은 default
실습
apiVersion: v1
kind: Pod # type = Pod
metadata:
name: mypod # Pod의 name = mypodd
spec: # spec = 실행하는 Docker image 설정
containers:
- image: nginx:1.14 # Docker image 설정
name: nginx # Docker Container name = nginx
ports:
- containerPort: 80
- containerPort: 443
kubectl create -f nginx.yaml # create를 통해 yaml 파일 실행
kubectl get pods -n default ('네임스페이스명')
- kubectl create -f을 통해 쿠버네티스 리소스 정의 파일을 지정하여 쿠버네티스 클러스터를 생성합니다.
- kubetctl get pods -n을 통해 특정 namespace의 pod 목록을 조회합니다.
namespace 삭제 방법
kubectl delete namespace blue # namespace가 blue인 리소스 삭제
kubectl delete pods mypod(pod명) -n default # pod명이 mypod인 리소스 삭제