본문 바로가기

컨테이너 스터디

쿠버네티스 이론 및 실습

쿠버네티스에는 셀 수도 없을 만큼 많은 리소스 종류와 컴포넌트가 존재하는데, 컨테이너 애플리케이션을 구동하기 위해 반드시 알아야 할 몇 가지 오브젝트가 존재한다.

쿠버네티스는 리소스 오브젝트들을 대부분 YAML 파일에 작성된 내용으로 관리한다.

 

1. 포드 (Pod) : 컨테이너를 다루는 기본 단위

1개 이상의 컨테이너로 구성된 컨테이너의 집합이다. 

포드(pod) vs 컨테이너

기능들만 놓고 본다면, 포드는 docker run으로 생성한 컨테이너와 크게 다르지 않다. 컨테이너 ip 주소를 갖고 있어 쿠버네티스 클러스터 내부에서 접근할 수 있고, kubectl exec 명령어로 컨테이너 내부로 들어갈 수 있으며, kubectl logs 명령어로 포드의 로그를 확인할 수도 있다.

쿠버네티스가 포드를 사용하는 이유는 컨테이너 런타임의 인터페이스 제공 등 여러 가지가 있지만, 이유 중 하나는 여러 리눅스 네임스페이스를 공유하는 컨테이너들을 추상화된 집합으로 사용하기 위해서이다.

쿠버네티스에서 기본으로 생성된 네임스페이스

 

쿠버네티스에서 실행한 파드, YAML 파일로 실행 가능하다
생성한 파드의 정보

포드의 주 컨테이너의 기능을 확장하고 싶다면 어떻게 해야 할까?

구글에서 쿠버네티스를 사용하면서 유용한 패턴들을 정리했는데, 그 중에 하나가 사이드카 패턴이다. 포드에 정의된 주 컨테이너 외에 별도의 컨테이너들을 정의하여, 기능을 확장할 수 있다.

한 포드의 네임스페이스를 공유하기 때문에 복잡한 설정을 할 필요가 없다!

또한 이렇게 하면 포드 내의 여러 컨테이너들을 마치 하나의 애플리케이션처럼 사용할 수 있도록 추상화가 된다!

이외에도 어댑더 패턴, 앰버서더 패턴 등이 있다.

 

2. 레플리카 셋 : 일정 개수의 포드를 유지하자

각각의 파드들을 수동으로 설정해주는건 생각보다 까다롭다. 따라서 쿠버네티스에서 레플리케이션 컨트롤러를 통해 파드들이 떠있는 상태를 보고 설정에 따라 관리해준다. 이 때, 설정은 레플리카 셋(set)을 통해 관리한다.

레플레카 셋을 설정하면, 파드를 종료시켜도 레플리케이션 컨트롤러에서 상태를 보고 다시 살린다.

3. 디플로이먼트 : 배포를 좀 더 세밀하게 하자

쿠버네티스 초기에 배포는 레플리카 컨트롤러로 했었지만, 최근에는 디플로이먼트로 관리한다고 한다.

디플로이먼트와 레플리카 컨트롤러의 차이는 이미지의 버전 관리에 좀 더 유용하다.

4. 데몬세트 : 노드가 추가되면 특정 파드를 자동으로 실행하자

운영 중에는 기존에 설정된 노드들만 알고 있기 때문에 새로운 노드가 추가된다면 수동으로 설정해주어야 한다. 이 때 필요한 것이 데몬세트이다. 데몬세트를 설정해놓으면, 새로운 노드가 추가될 때 특정 파드를 실행시켜 준다.

5. 스테이트풀 세트 : 파드들 간에 순서를 지정해서 실행되도록 하자

서비스를 운영하다 보면, 먼저 실행되어야 하는 컴포넌트들이 있다. 쿠버네티스에서는 이러한 상황에서 스테이트풀 세트라는 기능으로 순서를 지정하여 파드를 실행시킬 수 있다.

6. 잡 : 1회성 작업이 있을 때 사용하자

7. 크론잡 : 주기적인 작업이 필요할 때 사용하자