쿠버네티스의 복제 컨트롤러(ReplicationController)를 정의하는 매니페스트 파일입니다. 복제 컨트롤러는 지정된 수의 파드 복제본이 항상 실행되도록 보장하는 오브젝트입니다.
apiVersion:
쿠버네티스 API의 버전을 명시합니다
v1은 사용 중인 API 버전입니다.
kind:
생성하고자 하는 쿠버네티스 리소스의 종류를 명시합니다.
ReplicationController는 파드의 복제본을 관리합니다.
metadata:
리소스에 대한 메타데이터를 제공합니다.
name: 복제 컨트롤러의 이름을 지정합니다 (replication-1).
spec:
복제 컨트롤러의 사양(설정)을 정의합니다.
replicas:
유지하고자 하는 파드의 복제본 수를 지정합니다. 여기서는 1개의 복제본을 유지하도록 설정되어 있습니다.
selector:
복제 컨트롤러가 관리할 파드를 선택하는 데 사용되는 레이블 실렉터입니다.
app:
이 복제 컨트롤러가 관리할 파드들의 애플리케이션 그룹을 rc로 지정합니다.
template:
새로운 파드 복제본을 생성할 때 사용될 파드 템플릿을 정의합니다.
metadata:
템플릿의 메타데이터를 정의합니다.
name:
생성될 파드의 이름을 지정합니다 (pod-1).
labels:
파드를 분류하기 위한 레이블을 지정합니다.
app:
이 레이블은 복제 컨트롤러의 selector와 매치되어 관리 대상임을 나타냅니다 (rc).
spec:
파드 사양을 정의합니다.
containers:
파드 내에서 실행될 컨테이너 목록입니다.
name:
컨테이너의 이름을 지정합니다 (container).
image:
컨테이너에서 사용할 이미지의 이름을 지정합니다. 여기서는 kubetm/init이라는 이미지를 사용합니다.
이 복제 컨트롤러 replication-1는 app=rc 레이블을 가진 파드의 단일 복제본을 유지하도록 구성되어 있으며, 이 복제본은 pod-1이라는 이름으로 생성될 것입니다. 해당 파드는 container라는 이름의 컨테이너를 포함하고, 이 컨테이너는 kubetm/init 이미지를 기반으로 실행됩니다.
이 파드를 한 번 삭제해 보겠습니다.
바로 새로운 ip로 pod를 다시 생성하는 것을 볼 수 있습니다.
5. 레이블 & 셀렉터 예제 (실습)
이번엔 레이블을 지정하고 셀렉터로 해당 하는 파드만 서비스에 연결되도록 실습을 하겠습니다. 위처럼 6개의 파드를 생성하였고, 각각의 레이블은 다음과 같이 주었습니다.
apiVersion: v1
kind: Service
metadata:
name: svc-for-web
spec:
selector:
type: web
ports:
- port: 8080
위 서비스 svc-for-web는 type=web 레이블을 가진 파드로 네트워크 트래픽을 전달하도록 구성되어 있으며, 클러스터 내부 또는 외부에서 해당 서비스에 접근하려면 8080번 포트를 사용해야 합니다.
apiVersion: 쿠버네티스 API의 버전을 명시합니다. 이 경우 v1은 기본 API 버전입니다.
kind: 생성하고자 하는 쿠버네티스 리소스의 종류를 명시합니다. 여기서 Service는 파드 집합에 접근하기 위한 정의된 방법입니다.
metadata: 서비스에 대한 메타데이터를 제공합니다.
name: 서비스의 이름을 지정합니다 (svc-for-web).
spec: 서비스의 사양(설정)을 정의합니다.
selector: 서비스가 관리할 파드를 선택하는 데 사용되는 레이블 셀렉터입니다.
type: 서비스가 관리할 파드의 타입을 지정합니다 (web). 즉, type: web 레이블을 가진 모든 파드가 이 서비스에 의해 관리됩니다.
ports: 서비스가 수신할 포트 목록입니다.
port: 서비스에 도달하기 위해 사용될 포트 번호를 지정합니다. 여기서는 8080번 포트를 사용합니다.
웹에 해당하는 파드들만 셀렉터로 지정
이렇게 웹에 해당하는 두 개의 파드가 연결된 것을 볼 수 있다.
이번에는 프로덕션 레이블인 파드들만 서비스에 연결해 보겠습니다.
apiVersion: v1
kind: Service
metadata:
name: svc-for-production
spec:
selector:
lo: production
ports:
- port: 8080
아래와 같이 production 레이블의 파드들만 연결이 되었습다.
6. 스케줄링 테스트 예제 (실습)
쿠버네티스의 스케줄링 메커니즘은 여러 요소를 고려하여 파드(Pod)를 적절한 노드(Node)에 할당합니다. 이 과정에서 각 노드에 점수를 매기는데, 이 점수는 노드의 자원 사용률, 네트워크 위치, 특정 요구 사항 충족 여부 등 여러 요인에 따라 결정됩니다. 여기서 중요한 요소 중 하나가 노드의 자원 사용률입니다.
쿠버네티스의 스케줄링 메커니즘은 여러 요소를 고려하여 파드(Pod)를 적절한 노드(Node)에 할당하는데, 이 과정에서 각 노드에 점수를 매깁니다. 이 점수는 노드의 자원 사용률, 네트워크 위치, 특정 요구 사항 충족 여부 등 여러 요인에 따라 결정되는데 여기서 중요한 요소 중 하나가 노드의 자원 사용률입니다.
일반적으로, 스케줄러는 더 많은 여유 자원을 가진 노드를 선호합니다. 위의 경우, 노드 2는 노드 1보다 낮은 메모리 요청률(50%)을 가지고 있으므로, 스케줄러는 노드 2에 파드를 할당하였습니다.
댓글