이전 내용
[Cloud] Cloud 프로젝트: 관리대장, 시방서
이전 내용 [Cloud] aws: small project - 3 Tier 구현하기이전 내용 [Cloud] aws: Network LoadBalancer (feat. AWS CLI + yaml 파일)이전 내용 [Cloud] aws: eksctl, kubectl 주요 명령어이전 내용 [Cloud] aws : aws cli 로 쿠버네티
puppy-foot-it.tistory.com
EKS Controller
EKS Controller는 Amazon EKS에서 운영되는 Kubernetes 클러스터의 상태를 관리하고 조정하는 역할을 수행하는 컴포넌트이다.
[주요 기능]
- 자동화된 관리: EKS Controller는 클러스터 내의 리소스를 자동으로 관리하고 조정하여 사용자가 직접 개입하지 않고도 안정적인 운영 지원.
- 오류 감지 및 복구: 클러스터 내에서 발생하는 오류를 감지하고, 이를 자동으로 수정하여 시스템의 가용성 유지.
- 리소스 상태 유지: 사용자가 정의한 Desired State(희망 상태)를 지속적으로 감시하고, 실제 상태와 일치하도록 조정.

[주요 명령어]
- eksctl create config: 구성 파일 작성
- eksctl create nodegroup: 노드 그룹 생성
- eksctl delete nodegroup: 노드 그룹 삭제
- eksctl upgrade nodegroup: 노드 그룹 업데이트
- eksctl get nodegroup: EKS 클러스터 내의 노드 그룹 정보 조회
- eksctl create cluster: EKS 클러스터 생성
- eksctl delete cluster: EKS 클러스터 삭제
- eksctl upgrade cluster: EKS 클러스터 및 노드그룹 업데이트
- eksctl get cluster: EKS 클러스터 정보 조회
- eksctl create iamserviceaccount: EKS 클러스터에서 IAM 서비스 계정 생성
- eksctl delete iamserviceaccount: EKS 클러스터에서 IAM 서비스 계정 삭제
- eksctl create cluster -f [yaml 파일]: yaml 파일 사용하여 EKS 클러스터 생성
- eksctl delete cluster -f [yaml 파일 : yaml 파일 사용하여 EKS 클러스터 삭제
쿠버네티스 서비스
Kubernetes는 컨테이너화된 애플리케이션을 관리하는 오픈소스 플랫폼이며, 서비스는 이러한 애플리케이션 간의 통신을 원활하게 해주는 중요한 역할을 수행한다.
Kubernetes의 서비스 및 네트워킹에 대한 이해는 클라우드 네이티브 애플리케이션을 구축하고 운영하는 데 매우 중요하다.

◆ 쿠버네티스 서비스란?
Kubernetes에서 서비스는 일관된 네트워크 인터페이스를 제공하여 여러 개의 파드(pod) 간의 통신을 가능하게 한다. 서비스는 클러스터 내에서 파드의 집합을 정의하고, 이를 통해 클라이언트로부터의 요청을 원하는 파드로 라우팅하는 역할을 한다.
[Service 유형]
Kubernetes에서는 서비스의 다양한 유형을 제공하여 사용자의 필요에 맞게 설정할 수 있다.
- ClusterIP(default): Pod 그룹의 단일 진입점(Virtual IP) 생성
- NodePort: Cluster IP가 생성된 후 모든 Worker Node에 외부에서 접속 가능한 포트 예약
- LoadBalancer: 클라우드 인프라스트럭처(AWS, Azure, GCP 등)나 오픈스택 클라우드에 적용. NodePort + LoadBalancer를 자동으로 프로비저닝하는 기능 지원
- ExternalName: 클러스터 안에서 외부에 접속 시 사용할 도메인을 yaml 파일에 등록해서 사용. 클러스터 도메인이 yaml 파일에 등록된 실제 외부 도메인으로 치환되어 동작 (극소수 사용)
◆ ClusterIP
- selector의 label이 동일한 파드들을 그룹으로 묶어 단일 진입점 생성
- 기본 서비스 유형
- 클러스터 내부에서만 사용 가능 (내부에서만 접근 가능한 IP 주소 할당)
- type 생략 시 default 값으로 자동 범위 할당
- 클러스터 내의 파드 간 통신에 주로 사용
◆ NodePort
- 모든 노드를 대상으로 외부 접속 가능한 포트 예약
- 특정 노드의 고정 포트를 통해 외부에서 클러스터 서비스에 접근할 수 있도록 함.
- Default NodePort 범위: 30000-32767
- ClusterIP 생성 후 NodePort 예약
- 외부 트래픽을 간단히 테스트하고자 할 때 사용
◆ LoadBalancer
- Public 클라우드(AWS, Azure, GCP 등)에서 운영 가능
- LoadBalancer를 자동으로 구성 요청
- NodePort를 예약 후 해당 nodeport로 외부 접근 허용
- 프로덕션 환경에서 안정적인 서비스 접근을 위해 외부에서 직접 접근할 필요가 있는 경우 사용
◆ ExternalName
- 서비스가 DNS 이름을 기반으로 외부 서비스 (예. 다른 클러스터 서비스)를 참조할 수 있게 함.
- 서로 다른 클러스터나 서비스 간의 통신 단순화
▶ 서비스 유형의 선택은 특정 사용 사례에 따라 달라진다.
클러스터 내의 내부 통신만 필요한 경우 ClusterIP를 선택하고,
외부에서 직접 접근해야 하는 경우에는 NodePort 혹은 LoadBalancer를 고려해야 한다.
[쿠버네티스 서비스 유형 관련 글]
Service
Expose an application running in your cluster behind a single outward-facing endpoint, even when the workload is split across multiple backends.
kubernetes.io
[주요 kubectl 명령어]
- 클러스터 정보 조회
kubectl cluster-info
- 파드 목록 조회: 현재 클러스터 내의 파드 목록 확인.
kubectl get pods --all-namespaces
- 특정 네임스페이스의 파드 조회: 지정한 네임스페이스 내의 파드 목록 확인
kubectl get pods -n <네임스페이스>
- 서비스 목록 조회: 클러스터 내의 서비스 목록 확인
kubectl get services --all-namespaces
- 디플로이먼트 목록 조회: 클러스터 내의 디플로이먼트 목록 조회
kubectl get deployments --all-namespaces
- 파드 상세 정보 조회: 특정 파드의 자세한 정보 확인
kubectl describe pod <파드이름> -n <네임스페이스>
- 파드 생성: YAML 파일을 이용하여 새로운 파드를 생성
kubectl apply -f <파일명>.yaml
- 파드 삭제: 특정 파드 삭제
kubectl delete pod <파드이름> -n <네임스페이스>
- 서비스 생성: YAML 파일을 이용하여 새로운 서비스 생성
kubectl apply -f <서비스파일>.yaml
- 서비스 삭제: 특정 서비스 삭제
kubectl delete service <서비스이름> -n <네임스페이스>
- 로그 조회: 특정 파드의 로그 확인
kubectl logs <파드이름> -n <네임스페이스>
- 명령어 실행: 실행 중인 파드 내에서 명령어 실행
kubectl exec -it <파드이름> -n <네임스페이스> -- <명령어>
- 현재 복제본 수 조회: 특정 디플로이먼트의 현재 복제본 수 확인
kubectl get deployment <디플로이먼트이름> -n <네임스페이스> -o=jsonpath='{.spec.replicas}'
- 복제본 수 늘리기: 디플로이먼트의 복제본 수 증가. (예: 3으로 설정할 경우)
kubectl scale deployment <디플로이먼트이름> --replicas=3 -n <네임스페이스>
- 복제본 수 줄이기; 디플로이먼트의 복제본 수 감소. (예: 1로 설정할 경우)
kubectl scale deployment <디플로이먼트이름> --replicas=1 -n <네임스페이스>
- 다시 설정하기 (업데이트): YAML 파일을 사용하여 복제본 수 조정. (예: deployment.yaml 파일에서 복제본 수 수정)
- 디플로이먼트 자동화 설정 (롤링 업데이트): 기존 디플로이먼트의 복제본 수 변경과 연관하여 자동화된 업데이트를 설정
kubectl apply -f <deployment 파일>.yaml
- 레플리카 컨트롤러 스케일 조정:
kubectl scale rc [레플리카 이름] --replicas=[조정할 레플리카 수]
클러스터 구성 요소(리소스)
Kubernetes 클러스터를 구성하는 여러 리소스는 클러스터의 운영 및 관리를 결정짓는 중요한 요소이다.
Kubernetes 클러스터는 아래와 같은 리소스들을 통해 구성되며, 이들은 서로 협력하여 애플리케이션을 안정적으로 운영한다. 따라서, 각 리소스를 이해하고 적절하게 활용하는 것은 클라우드 네이티브 애플리케이션의 성공적인 운영에 필수적이다.
1. 네임스페이스 (Namespace)
네임스페이스는 클러스터 내에서 리소스를 논리적으로 구분하기 위한 방법이다. 여러 사용자가 동일한 클러스터에서 작업할 때, 각각의 프로젝트나 팀에 대한 리소스를 격리하여 관리할 수 있도록 한다.
- 리소스를 분리하고 관리하기 위한 격리된 환경 제공
- 다양한 환경 (개발, 테스트, 프로덕션 등) 별로 리소스 관리
2. 노드 (Node)
노드는 Kubernetes 클러스터의 물리적 혹은 가상 머신을 의미한다. 각 노드는 애플리케이션 컨테이너를 실행하는 데 필요한 컴퓨팅 자원을 제공한다.
클러스터 내에서 작업을 수행하고, 다양한 컨테이너화된 애플리케이션을 호스트한다.
[구성 요소]
- Kubelet: 로컬에서 실행 중인 파드를 관리하고, 클러스터와 상호작용
- Kube-proxy: 서비스 내의 트래픽을 관리하고, IP 및 포트 기반 규칙을 사용하여 네트워크를 구성
- Container Runtime: Docker, containerd와 같은 컨테이너를 실행하기 위한 소프트웨어
3. 파드 (Pod)
파드는 Kubernetes에서 컨테이너의 집합을 나타내는 기본적인 실행 단위다. 하나 이상의 컨테이너가 네트워크와 스토리지를 공유하면서 함께 실행된다.
- 애플리케이션의 실행 단위로 기능
- 동일한 네트워크 공간에서 작동하여 통신을 용이하게 함
4. 서비스 (Service)
서비스는 파드 간 및 외부 애플리케이션과의 통신을 위한 안정적인 접근 포인트를 제공한다. 클러스터 내의 파드 IP가 임시적이기 때문에, 서비스는 고정된 IP 및 DNS 이름을 통해 접근을 가능하게 한다.
- 여러 파드의 집합에 대한 단일 접근 경로 제공
- 부하 분산 및 고가용성 확보
5. 디플로이먼트 (Deployment)
디플로이먼트는 파드의 복제본 및 업데이트를 관리하는 리소스다. 사용자가 원하는 원 상태를 정의하면, Kubernetes가 이를 유지하도록 한다.
- 롤링 업데이트를 통해 중단 없이 애플리케이션 업데이트
- 고가용성을 위한 복제본 구성
6. 레플리카셋 (ReplicaSet)
레플리카셋은 특정 수의 파드를 항상 유지하도록 보장하는 리소스다. 디플로이먼트가 사용하는 레플리카셋을 통해 파드의 수를 자동으로 조정한다.
- 파드의 고가용성 보장
- 장애 발생 시 자동으로 새로운 파드 생성
7. ConfigMap 및 Secret
- ConfigMap
애플리케이션 설정을 저장하는 데 사용되는 리소스다. 구성 데이터를 별도로 관리함으로써 파드를 재조정하지 않고도 설정을 변경할 수 있다. ▶ 환경 변수를 통해 컨테이너에 설정 정보를 주입하여 관리
- Secret
민감한 정보를 안전하게 저장하는 데 사용되는 리소스다. 예를 들어 비밀번호, OAuth 토큰 등이 있을 수 있다. ▶ 민감한 정보를 안전하게 관리하고, 필요에 따라 파드에 주입
8. 노드 포드 (Node Pod)
노드는 여러 파드를 호스트할 수 있으며, 각 노드 내부에 여러 개의 파드가 배포될 수 있다.
▶ 전체 클러스터의 자원 분배와 관리를 위한 기초 단위
다음 내용
'프로그래밍 및 기타 > Cloud : AWS' 카테고리의 다른 글
[Cloud] Cloud 프로젝트: 관리대장, 시방서 (2) | 2025.03.08 |
---|---|
[Cloud] aws: small project - 3 Tier 구현하기 (0) | 2025.03.05 |
[Cloud] aws: Network LoadBalancer (feat. AWS CLI + yaml 파일) (1) | 2025.03.04 |
[Cloud] aws: eksctl, kubectl 주요 명령어 (0) | 2025.03.01 |
[Cloud] aws : aws cli 로 쿠버네티스 클러스터 만들기 (0) | 2025.03.01 |