

쿠버네티스는 컨테이너화된 워크로드를 관리하기 위한 오픈소스 플랫폼이다.
- 워크로드 : 워크로드는 쿠버네티스에서 구동되는 애플리케이션
쿠버네티스는 Container 화된 애플리케이션을 자동화된 배포 , 선언적 구성를 용이하게 한다.
또한 애플리케이션의 확장과 장애 조치를 처리하고, 배포 패턴 등을 제공한다.
❓ 쿠버네티스는 어떻게 동작해서 컨테이너화된 애플리케이션을 관리할까?
컨테이너화된 애플리케이션을 실행하는 노드라고하는 워커 머신의 집합. 모든 클러스터는 최소 한 개의 워커 노드를 가진다.
Node : 애플리케이션의 구성요소인 Pod 를 호스트한다.Component 가 상호작용한다.컨테이너의 라이프 사이클을 정의, 배포, 관리하기 위한 API와 인터페이스를 노출하는 컨테이너 오케스트레이션 레이어
마스터 : Control Plane component 를 실행하는 호스트를 마스터라 한다.key-value 저장소이다. 백업은 필수!kube-apiserver 로 수평 확장이 가능해 더 많은 인스턴스를 배포할 수 있다.노드 컴포넌트는 동작 중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공한다.
Node 에서 실행함으로 워크로드를 구동한다.docker 가 있다.
❓ 쿠버네티스는 컨테이너를 파드내에 배치하고 Node 에서 실행해 관리한다. Pod는 무엇일까?
쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위
Container 의 그룹이다.스토리지 및 네트워크 를 공유하고, 해당 컨테이너를 구동하는 방식에 대한 명세 를 갖는다.마스터의 컨트롤 매니저 는 클러스터의 상태를 관찰해 의도한 상태에 가깝게 만들어주는 컨트롤러를 실행한다.
api 서버 를 통해 클러스터의 상태를 감시한다.Deployment , ReplicaSet , Deployment , StatefulSet , DaemonSet , Job , CronJob 등이 있다.Pod 를 여러 개 복제하여 관리하는 오브젝트
파드와 레플리카셋에 대한 선언적 업데이트를 제공한다.
** 선언적 업데이트 : YAML 파일을 통해 정의한 상태를 시스템이 알아서 판단하고 수행해주는 것
클러스터와 통신하기 위해
kubectl커맨드-라인 툴 설치가 필요하다.
brew install kubectlkubectl version --client클러스터를 구성하는 것은 어려우므로
minikube를 활용해 로컬에서 단일 노드 쿠버네티스 클러스터를 실행한다.
brew install minikubeminikube versionDocker Desktop 를 설치한 후, Docker 드라이버를 사용한다.minikube startminikube dashboard
nginx:1.14.2이미지를 실행하는 컨테이너로 구성되는 파드 예시
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
해당 파드 생성 위해 다음 명령어 실행
kubectl apply -f https://k8s.io/examples/pods/simple-pod.yaml
kubectl delete pod/nginx
3개의 nginx 파드를 불러오기 위한 레플리카 셋을 생성하는 Deployment
apiVersion: apps/v1
kind: Deployment # 오브젝트 명시
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
.metadata.name : nginx-deployment 이름으로 디플로이먼트가 생성된다..spec.replicas : 디플로이먼트는 3개의 레플리카 파드를 생성한다.spec.selector: 디플로이먼트가 관리할 파드를 찾는 방법을 정의한다. 이 사례에서는 파드 템플릿에 정의된 레이블(app: nginx)을 선택spec.selector.matchLabels:는 .spec.template.metadata.labels과 일치해야 하며, 그렇지 않으면 API에 의해 거부된다.template.spec : 파드가nginx1.14.2 버전 이미지를 실행하는 nginx컨테이너 1개를 실행하는 것을 나타낸다.
app:nginx 레이블을 가지고 관리할 Pod 를 인식한다.[DEPLOYMENT-NAME]-[RANDOM-STRING] 형식으로 된 것을 알 수 있다Pod-template-hash 레이블 : 이 레이블은 디플로이먼트 컨트롤러에 의해서 디플로이먼트가 생성 또는 채택한 모든 레플리카 셋에 추가된다. 다른 자식 레플리카 셋과 겹치지 않도록 보장하므로 변경하면 안된다.pod 는 컨테이너를 관리하는 쿠버네티스의 가장 작은 오브젝트이다.
Deployment 는 클러스터의 컨트롤 도메인에 속하는 컨트롤러 중 하나로 레플레카셋을 관리하여 복제된 다수의 Pod 를 생성, 관리한다.