TOP
class="layout-aside-left paging-number">
본문 바로가기
프로그래밍 및 기타/Cloud : AWS

[Cloud] aws: eksctl, kubectl 주요 명령어

by 기록자_Recordian 2025. 3. 1.
728x90
반응형
이전 내용
 

[Cloud] aws : aws cli 로 쿠버네티스 클러스터 만들기

이전 내용 [Cloud] aws : aws console로 쿠버네티스 클러스터 만들기이전 내용 [Cloud] aws: ECR(Amazon Elastic Container Registry)이전 내용 [Cloud] 도커로 DB 연결하기이전 내용 [Cloud] 컨테이너 이미지 경량화 시

puppy-foot-it.tistory.com


eksctl과 kubectl
개념, 차이점

 

eksctl과 kubectl은 모두 Kubernetes와 관련된 도구이지만, 각각의 목적과 기능이 다르다.

출처: eksctl 홈페이지

 

1. 목적


- eksctl:

  • 주로 Amazon EKS (Elastic Kubernetes Service) 클러스터를 생성하고 관리하는 데 사용.
  • 클러스터와 관련된 VPC, 노드 그룹, IAM 역할 등의 설정을 간편하게 처리할 수 있도록 도움.
  • 클러스터 생성을 위한 기본적인 YAML 구성 파일을 사용할 수 있으며, 이를 통해 복잡한 설정을 쉽게 자동화 가능.

- kubectl:

  • Kubernetes 클러스터에 배포되고 실행되는 애플리케이션을 관리하는 도구. (쿠버네티스 API를 사용하여 쿠버네티스 클러스터의 컨트롤 플레인과 통신하기 위한 커맨드라인 툴)
  • 클러스터 내 리소스(예: Pods, Deployments, Services 등)의 생성, 조회, 수정 및 삭제와 같은 작업 수행.
  • 사용자가 클러스터의 상태를 모니터링하며 애플리케이션의 로그를 확인하는 등의 운영 관리에 초점.

2. 기능


- eksctl:

  • EKS 클러스터를 쉽게 생성, 업데이트 및 삭제할 수 있는 기능 제공.
  • VPC 및 서브넷 설정, IAM 역할 생성 등을 포함하여, EKS 클러스터와 관련된 모든 인프라 리소스 관리.
  • YAML 형식의 구성 파일을 통해 클러스터 설정을 정의하는 방식 지원.

- kubectl:

  • Kubernetes API와 통신하여 클러스터 내 리소스를 직접 관리.
  • 사용자가 정의한 Deployment, Service 등의 리소스를 생성하고 상태를 모니터링하며, 로그 조회와 같은 디버깅 작업 수행.
  • 다양한 간편한 명령어를 통해 클러스터 업무를 수행할 수 있도록 설계.
- eksctl은 EKS 클러스터 생성을 위한 도구로, 인프라 리소스를 관리하는 데 중점
- kubectl은 Kubernetes 클러스터 내에서 애플리케이션 리소스를 관리하고 운영하는 데 사용.

 

eksctl: eks 클러스터 생성이나 설정에 사용
kubectl: 생성된 클러스터 내의 애플리케이션 관리에 사용

 


eksctl
클러스터 생성 (feat. yaml 파일)

 

kubectl 명령어를 시연하기 위해 cluster.yaml 파일을 생성한 후 클러스터 생성

eksctl create cluster -f cluster.yaml

클러스터 생성 완료 (aws console의 Cloud Formation 에서도 진행 상황 확인 가능)

인스턴스와 Auto Scailing 그룹도 생성된 것을 확인할 수 있다.


Kubernetes 리소스
파드, 네임스페이스, Deployment

 

- 파드(Pod)가장 기본적인 실행 단위로, 하나 또는 여러 개의 컨테이너를 포함할 수 있는 논리적 호스팅 환경이다. 파드는 Kubernetes 클러스터에서 애플리케이션을 실행하기 위해 필요한 모든 리소스를 묶어서 제공한다.

- 네임스페이스(Namespace)클러스터 내에서 여러 사용자와 팀이 리소스를 분리하고 관리할 수 있도록 해주는 가상 공간이다. 네임스페이스를 활용하면 동일한 클러스터에서 서로 다른 환경(예: 개발, 테스트, 운영)을 효과적으로 구성하고 격리할 수 있다.
- 네임스페이스 내의 Deployment특정 어플리케이션을 실행하기 위한 파드를 관리하는 Kubernetes 리소스다. 


[네임스페이스 (Namespace)]
- 목적: 리소스를 논리적으로 그룹화하여 관리할 수 있도록 한다. 다양한 사용자와 팀이 동일한 클러스터를 사용하더라도 서로의 리소스에 영향을 주지 않게 된다.

 

- 기본 네임스페이스

  • default: 기본 네임스페이스. 별도로 네임스페이스를 지정하지 않으면 이곳에 리소스가 생성된다.
  • kube-system: Kubernetes 시스템 컴포넌트가 실행되는 네임스페이스.
  • kube-public: 모든 사용자에게 읽기 가능하도록 설정된 네임스페이스.

[Deployment]
Deployment는 선언적(descriptive) 방식으로 애플리케이션을 배포하고 관리하는 Kubernetes 리소스다. 이를 통해 특정 버전의 애플리케이션을 원하는 만큼 실행하고, 필요할 때 롤링 업데이트를 수행하며, 이전 버전으로 복구할 수 있다.

 

- 구성 요소

  • 레플리카 수: Deployment에 의해 관리되는 파드의 수 정의.
  • 파드 템플릿: 파드의 구성과 속성을 정의하는 부분으로, 어떤 컨테이너 이미지를 사용할 것인지, 환경 변수는 무엇인지 등을 포함.
  • 업데이트 전략: 파드를 업데이트하는 방법(롤링 업데이트 또는 재배포)을 정의

★ Deployment 생성 예제

Kubernetes YAML 파일을 사용하여 네임스페이스 내에서 Deployment를 생성하는 예제

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: my-namespace  # 특정 네임스페이스 지정
spec:
  replicas: 3  # 생성할 파드 수
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2  # 사용할 컨테이너 이미지
        ports:
        - containerPort: 80

 

이 파일을 통해 my-namespace라는 네임스페이스 내에 nginx를 실행하는 Deployment가 생성되는데, 이 때 생성을 위해 사용하는 명령어는 아래와 같다.

kubectl apply -f <filename>.yaml

 

Deployment를 관리하는 주요 명령어


상태 확인

kubectl get deployments -n <namespace>

 

Deployment 상세 정보 확인

kubectl describe deployment <deployment-name> -n <namespace>

 

Deployment 업데이트

kubectl set image deployment/nginx-deployment nginx=nginx:latest -n <namespace>

 

Deployment 삭제:

kubectl delete deployment <deployment-name> -n <namespace>

[파드(pod)]

- 파드의 구성 요소

  • 컨테이너: 파드는 하나 이상의 컨테이너를 포함할 수 있으며, 일반적으로 같은 애플리케이션의 여러 구성 요소를 실행한다. 예를 들어, 웹 서버와 데이터베이스 서버가 함께 동작할 수 있다.
  • 공유 네트워크: 동일한 파드 내에 포함된 모든 컨테이너는 같은 IP 주소와 포트 공간을 공유한다. 이를 통해 컨테이너 간의 통신이 쉽게 이루어진다.
  • 스토리지: 파드는 영구 저장소를 연결하거나 공유할 수 있는 볼륨을 정의할 수 있다. 이를 통해 컨테이너가 데이터를 저장하고 관리할 수 있도록 한다.
  • 환경 변수 및 설정: 파드에는 환경 변수나 설정 파일 등을 정의하여 컨테이너가 이를 사용할 수 있도록 설정할 수 있다.

[파드의 유형]

  • 싱글 컨테이너 파드: 일반적으로 단일 컨테이너를 포함하는 가장 일반적인 형태.
  • 멀티 컨테이너 파드: 서로 협력하여 동작하는 여러 개의 컨테이너를 포함하며, 이들은 같은 IP와 네트워크 공간을 공유. 이러한 경우 일반적으로 "사이드카 패턴"이나 "엉클 패턴"과 같은 디자인 패턴이 사용된다.

[파드의 생명주기]

  • 생성: 파드는 주로 Deployment 또는 StatefulSet과 같은 상위 리소스에 의해 생성.
  • 실행: 생성된 후 Kubernetes가 해당 파드를 노드에서 실행.
  • 재시작: 만약 파드 내의 컨테이너가 실패하면, Kubernetes에서 이를 감지하고 자동으로 재시작.
  • 삭제: 파드에 대한 요청이 있을 경우, 해당 파드는 종료되고 클러스터에서 제거 됨.

★ 파드(POD)를 관리하는 주요 명령어

 

모든 파드 목록 조회

kubectl get pods

 

특정 파드의 상세 정보 조회

kubectl describe pod <pod-name>

 

파드 생성을 위한 YAML 파일 예

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

 

파드 생성 명령어

kubectl apply -f <filename>.yaml

kubectl
주요 명령어

 

CLI 명령어 자동완성 기능 추가

source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

 

클러스터 정보 조회

kubectl cluster-info

 

모든 노드 상태 조회

kubectl get nodes

 

kube-system 네임스페이스 내의 모든 파드(pod)를 조회.

※ kube-system 네임스페이스는 Kubernetes 시스템 컴포넌트가 실행되는 공간으로, 클러스터의 기본적인 기능을 제공하는 파드들이 포함되어 있다.

kubectl get pod -n kube-system

 

 

클러스터 내의 모든 노드(nodes)의 상태를 조회

※-o wide 옵션을 사용하면 각 노드의 IP 주소, 오퍼레이터, 리소스 및 추가적인 세부정보가 포함된 좀 더 자세한 정보를 제공

kubectl get nodes -o wide

 

Deployment 를 위한 yaml 파일 생성

vi webserver-deploy.yaml

 

webserver-deploy.yaml 파일 내용

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webui
spec:
  replicas: 4
  selector:
    matchLabels:
      app: webui
  template:
    metadata:
      name: nginx-pod
      labels:
        app: webui
    spec:
      containers:
      - name: nginx-container
        image: ECR 에서 이미지 URL 복사 붙여넣기
      tolerations:
      - key: "role"
        operator: "Equal"
        value: "web"
        effect: "NoSchedule"

둘의 내용이 같다면, 경량화된 이미지를 선택하는 것이 바람직하다.

 

webserver-deploy.yaml 파일을 이용한 Deployment 생성

kubectl apply -f webserver-deploy.yam

 

webui라는 Deployment를 외부에서 접근할 수 있도록 LoadBalancer 타입의 서비스(service)로 노출.

--port=80 옵션은 서비스가 외부와 통신할 포트를 설정하는 옵션으로, 클라이언트는 이 포트를 통해 서비스에 접근할 수 있다.

kubectl expose deployment  webui --port=80 --type=LoadBalancer

 

새로운 Deployment webserver를 생성.

이 Deployment는 지정된 도커 이미지(예: 도커허브계정/이미지명)를 사용하는 파드를 생성하며, --replicas=3 옵션을 통해 3개의 파드를 생성한다. --port=80은 컨테이너 내에서 사용할 포트를 설정한다.

kubectl create deployment webserver --port=80 --image=도커허브계정/이미지명 --replicas=3

 

간단한 파드를 생성하여 nginx:1.14 이미지를 사용하여 실행.

이 명령어는 주로 테스트나 간단한 사용을 위한 새로운 파드를 만들 때 사용된다. 

kubectl run nginx --image=nginx:1.14

 

클러스터 내의 모든 Deployment를 삭제 (실행 중인 애플리케이션의 모든 Deployment)

kubectl delete deployments.apps --all

 

현재 네임스페이스 내의 모든 리소스(파드, 서비스, Deployment 등)를 삭제

kubectl delete --all all

 

새로운 Deployment web를 생성

▶ nginx:1.14 이미지를 사용하여 파드를 만들고, 컨테이너의 포트를 80으로 설정

web이라는 Deployment의 파드 수를 3개로 조정

kubectl create deployment web --image=nginx:1.14 --port=80

# kubectl scale deployment [Deployment 이름] --replicas=파드 수
kubectl scale deployment web --replicas=3

 

[그 외 주요 명령어들]

◆ 목록 조회

kubectl get pods # 모든 파드 목록 조회 (현재 네임스페이스에서)
kubectl get pods -n <namespace> # 특정 네임스페이스의 파드 목록 조회
kubectl get deployments # Deployment 목록 조회
kubectl get services # Service 목록 조회

 

상세 정보 조회

kubectl describe pod <pod-name> # 특정 파드 정보 조회
kubectl describe deployment <deployment-name> # 특정 Deployment의 상세 정보 조회

 

리소스 생성

kubectl create deployment nginx --image=nginx # Deployment 생성
kubectl expose deployment nginx --port=80 --type=LoadBalancer # 서비스 생성

 

리소스 수정

kubectl label pod <pod-name> key=value # 파드 수정
kubectl apply -f <filename>.yaml # Kubernetes 객체 설정 파일로 리소스 생성 또는 수정

 

리소스 삭제

kubectl delete pod <pod-name> # 파드 삭제
kubectl delete deployment <deployment-name> # deployment 삭제
kubectl delete pods --all -n <namespace> # 네임스페이스 내 모든 파드 삭제

 

로그 확인

kubectl logs <pod-name> # 특정 파드의 로그 조회
kubectl logs <pod-name> -c <container-name> 
# 특정 컨테이너의 로그 조회 (하나의 파드 내 여러 컨테이너 있을 경우)

 

실시간 모니터링

kubectl get pods --watch

 

파드 내 쉘 접속

kubectl exec -it <pod-name> -- /bin/sh

[도움되는 링크]

AWS CLI

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/install-awscli.html

eksctl

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started-eksctl.html

ekcstl 명령어 안내

https://eksctl.io/usage/creating-and-managing-clusters/

kubectl 명령어 안내

https://kubernetes.io/ko/docs/reference/kubectl/


다음 내용

[Cloud] aws: Network LoadBalancer (feat. AWS CLI + yaml 파일)

 

 

728x90
반응형